]> git.cworth.org Git - tar/commitdiff
Merge branch 'dfsg-orig' into dfsg-debian
authorBdale Garbee <bdale@gag.com>
Wed, 10 Mar 2010 16:52:02 +0000 (09:52 -0700)
committerBdale Garbee <bdale@gag.com>
Wed, 10 Mar 2010 16:52:02 +0000 (09:52 -0700)
Conflicts:
build-aux/config.guess
build-aux/config.sub
src/list.c
tests/testsuite

894 files changed:
ChangeLog
INSTALL
Make.rules [new file with mode: 0644]
Makefile.am
Makefile.in
NEWS
PORTS [deleted file]
THANKS
acinclude.m4 [new file with mode: 0644]
aclocal.m4
build-aux/arg-nonnull.h [new file with mode: 0644]
build-aux/c++defs.h [new file with mode: 0644]
build-aux/compile
build-aux/config.rpath
build-aux/depcomp
build-aux/gitlog-to-changelog [new file with mode: 0755]
build-aux/install-sh
build-aux/link-warning.h [deleted file]
build-aux/mdate-sh
build-aux/missing
build-aux/mkinstalldirs [deleted file]
build-aux/texinfo.tex
build-aux/warn-on-use.h [new file with mode: 0644]
build-aux/ylwrap
config.h.in [new file with mode: 0644]
config.hin [deleted file]
configure
configure.ac
debian/changelog
gnu/Makefile.am [new file with mode: 0644]
gnu/Makefile.in [new file with mode: 0644]
gnu/alloca.c [new file with mode: 0644]
gnu/alloca.in.h [new file with mode: 0644]
gnu/areadlink-with-size.c [new file with mode: 0644]
gnu/areadlink.h [new file with mode: 0644]
gnu/argmatch.c [new file with mode: 0644]
gnu/argmatch.h [new file with mode: 0644]
gnu/argp-ba.c [new file with mode: 0644]
gnu/argp-eexst.c [new file with mode: 0644]
gnu/argp-fmtstream.c [new file with mode: 0644]
gnu/argp-fmtstream.h [new file with mode: 0644]
gnu/argp-fs-xinl.c [new file with mode: 0644]
gnu/argp-help.c [new file with mode: 0644]
gnu/argp-namefrob.h [new file with mode: 0644]
gnu/argp-parse.c [new file with mode: 0644]
gnu/argp-pin.c [new file with mode: 0644]
gnu/argp-pv.c [new file with mode: 0644]
gnu/argp-pvh.c [new file with mode: 0644]
gnu/argp-version-etc.c [new file with mode: 0644]
gnu/argp-version-etc.h [new file with mode: 0644]
gnu/argp-xinl.c [new file with mode: 0644]
gnu/argp.h [new file with mode: 0644]
gnu/asnprintf.c [new file with mode: 0644]
gnu/asprintf.c [new file with mode: 0644]
gnu/at-func.c [new file with mode: 0644]
gnu/backupfile.c [new file with mode: 0644]
gnu/backupfile.h [new file with mode: 0644]
gnu/basename-lgpl.c [new file with mode: 0644]
gnu/basename.c [new file with mode: 0644]
gnu/bitrotate.h [new file with mode: 0644]
gnu/btowc.c [new file with mode: 0644]
gnu/c-ctype.c [new file with mode: 0644]
gnu/c-ctype.h [new file with mode: 0644]
gnu/canonicalize.c [new file with mode: 0644]
gnu/canonicalize.h [new file with mode: 0644]
gnu/chdir-long.c [new file with mode: 0644]
gnu/chdir-long.h [new file with mode: 0644]
gnu/chown.c [new file with mode: 0644]
gnu/close-hook.c [new file with mode: 0644]
gnu/close-hook.h [new file with mode: 0644]
gnu/close-stream.c [new file with mode: 0644]
gnu/close-stream.h [new file with mode: 0644]
gnu/close.c [new file with mode: 0644]
gnu/closeout.c [new file with mode: 0644]
gnu/closeout.h [new file with mode: 0644]
gnu/config.charset [new file with mode: 0644]
gnu/dirent--.h [new file with mode: 0644]
gnu/dirent-safer.h [new file with mode: 0644]
gnu/dirent.in.h [new file with mode: 0644]
gnu/dirfd.c [new file with mode: 0644]
gnu/dirname-lgpl.c [new file with mode: 0644]
gnu/dirname.c [new file with mode: 0644]
gnu/dirname.h [new file with mode: 0644]
gnu/dup-safer.c [new file with mode: 0644]
gnu/dup2.c [new file with mode: 0644]
gnu/errno.in.h [new file with mode: 0644]
gnu/error.c [new file with mode: 0644]
gnu/error.h [new file with mode: 0644]
gnu/exclude.c [new file with mode: 0644]
gnu/exclude.h [new file with mode: 0644]
gnu/exitfail.c [new file with mode: 0644]
gnu/exitfail.h [new file with mode: 0644]
gnu/fchdir.c [new file with mode: 0644]
gnu/fchmodat.c [new file with mode: 0644]
gnu/fchown-stub.c [new file with mode: 0644]
gnu/fchownat.c [new file with mode: 0644]
gnu/fclose.c [new file with mode: 0644]
gnu/fcntl.c [new file with mode: 0644]
gnu/fcntl.in.h [new file with mode: 0644]
gnu/fd-safer.c [new file with mode: 0644]
gnu/fdopendir.c [new file with mode: 0644]
gnu/file-set.c [new file with mode: 0644]
gnu/file-set.h [new file with mode: 0644]
gnu/fileblocks.c [new file with mode: 0644]
gnu/float+.h [new file with mode: 0644]
gnu/float.in.h [new file with mode: 0644]
gnu/fnmatch.c [new file with mode: 0644]
gnu/fnmatch.in.h [new file with mode: 0644]
gnu/fnmatch_loop.c [new file with mode: 0644]
gnu/fpending.c [new file with mode: 0644]
gnu/fpending.h [new file with mode: 0644]
gnu/fseeko.c [new file with mode: 0644]
gnu/fstatat.c [new file with mode: 0644]
gnu/ftruncate.c [new file with mode: 0644]
gnu/full-write.c [new file with mode: 0644]
gnu/full-write.h [new file with mode: 0644]
gnu/getcwd.c [new file with mode: 0644]
gnu/getdate.c [new file with mode: 0644]
gnu/getdate.h [new file with mode: 0644]
gnu/getdate.y [new file with mode: 0644]
gnu/getdelim.c [new file with mode: 0644]
gnu/getdtablesize.c [new file with mode: 0644]
gnu/getline.c [new file with mode: 0644]
gnu/getopt.c [new file with mode: 0644]
gnu/getopt.in.h [new file with mode: 0644]
gnu/getopt1.c [new file with mode: 0644]
gnu/getopt_int.h [new file with mode: 0644]
gnu/getpagesize.c [new file with mode: 0644]
gnu/gettext.h [new file with mode: 0644]
gnu/gettime.c [new file with mode: 0644]
gnu/gettimeofday.c [new file with mode: 0644]
gnu/hash-pjw.c [new file with mode: 0644]
gnu/hash-pjw.h [new file with mode: 0644]
gnu/hash-triple.c [new file with mode: 0644]
gnu/hash-triple.h [new file with mode: 0644]
gnu/hash.c [new file with mode: 0644]
gnu/hash.h [new file with mode: 0644]
gnu/human.c [new file with mode: 0644]
gnu/human.h [new file with mode: 0644]
gnu/imaxtostr.c [new file with mode: 0644]
gnu/intprops.h [new file with mode: 0644]
gnu/inttostr.c [new file with mode: 0644]
gnu/inttostr.h [new file with mode: 0644]
gnu/inttypes.in.h [new file with mode: 0644]
gnu/langinfo.in.h [new file with mode: 0644]
gnu/lchown.c [new file with mode: 0644]
gnu/localcharset.c [new file with mode: 0644]
gnu/localcharset.h [new file with mode: 0644]
gnu/lseek.c [new file with mode: 0644]
gnu/lstat.c [new file with mode: 0644]
gnu/malloc.c [new file with mode: 0644]
gnu/malloca.c [new file with mode: 0644]
gnu/malloca.h [new file with mode: 0644]
gnu/malloca.valgrind [new file with mode: 0644]
gnu/mbchar.c [new file with mode: 0644]
gnu/mbchar.h [new file with mode: 0644]
gnu/mbrtowc.c [new file with mode: 0644]
gnu/mbscasecmp.c [new file with mode: 0644]
gnu/mbsinit.c [new file with mode: 0644]
gnu/mbsrtowcs-state.c [new file with mode: 0644]
gnu/mbsrtowcs.c [new file with mode: 0644]
gnu/mbuiter.h [new file with mode: 0644]
gnu/memchr.c [new file with mode: 0644]
gnu/memchr.valgrind [new file with mode: 0644]
gnu/mempcpy.c [new file with mode: 0644]
gnu/memrchr.c [new file with mode: 0644]
gnu/mkdir.c [new file with mode: 0644]
gnu/mkdirat.c [new file with mode: 0644]
gnu/mkdtemp.c [new file with mode: 0644]
gnu/mktime-internal.h [new file with mode: 0644]
gnu/mktime.c [new file with mode: 0644]
gnu/modechange.c [new file with mode: 0644]
gnu/modechange.h [new file with mode: 0644]
gnu/nl_langinfo.c [new file with mode: 0644]
gnu/obstack.c [new file with mode: 0644]
gnu/obstack.h [new file with mode: 0644]
gnu/offtostr.c [new file with mode: 0644]
gnu/open.c [new file with mode: 0644]
gnu/openat-die.c [new file with mode: 0644]
gnu/openat-priv.h [new file with mode: 0644]
gnu/openat-proc.c [new file with mode: 0644]
gnu/openat.c [new file with mode: 0644]
gnu/openat.h [new file with mode: 0644]
gnu/opendir-safer.c [new file with mode: 0644]
gnu/pathmax.h [new file with mode: 0644]
gnu/pipe-safer.c [new file with mode: 0644]
gnu/printf-args.c [new file with mode: 0644]
gnu/printf-args.h [new file with mode: 0644]
gnu/printf-parse.c [new file with mode: 0644]
gnu/printf-parse.h [new file with mode: 0644]
gnu/priv-set.c [new file with mode: 0644]
gnu/priv-set.h [new file with mode: 0644]
gnu/progname.c [new file with mode: 0644]
gnu/progname.h [new file with mode: 0644]
gnu/quote.c [new file with mode: 0644]
gnu/quote.h [new file with mode: 0644]
gnu/quotearg.c [new file with mode: 0644]
gnu/quotearg.h [new file with mode: 0644]
gnu/rawmemchr.c [new file with mode: 0644]
gnu/rawmemchr.valgrind [new file with mode: 0644]
gnu/readlink.c [new file with mode: 0644]
gnu/realloc.c [new file with mode: 0644]
gnu/ref-add.sin [new file with mode: 0644]
gnu/ref-del.sin [new file with mode: 0644]
gnu/regcomp.c [new file with mode: 0644]
gnu/regex.c [new file with mode: 0644]
gnu/regex.h [new file with mode: 0644]
gnu/regex_internal.c [new file with mode: 0644]
gnu/regex_internal.h [new file with mode: 0644]
gnu/regexec.c [new file with mode: 0644]
gnu/rmdir.c [new file with mode: 0644]
gnu/rpmatch.c [new file with mode: 0644]
gnu/safe-read.c [new file with mode: 0644]
gnu/safe-read.h [new file with mode: 0644]
gnu/safe-write.c [new file with mode: 0644]
gnu/safe-write.h [new file with mode: 0644]
gnu/same-inode.h [new file with mode: 0644]
gnu/same.c [new file with mode: 0644]
gnu/same.h [new file with mode: 0644]
gnu/save-cwd.c [new file with mode: 0644]
gnu/save-cwd.h [new file with mode: 0644]
gnu/savedir.c [new file with mode: 0644]
gnu/savedir.h [new file with mode: 0644]
gnu/setenv.c [new file with mode: 0644]
gnu/size_max.h [new file with mode: 0644]
gnu/sleep.c [new file with mode: 0644]
gnu/snprintf.c [new file with mode: 0644]
gnu/stat-macros.h [new file with mode: 0644]
gnu/stat-time.h [new file with mode: 0644]
gnu/stat.c [new file with mode: 0644]
gnu/stdarg.in.h [new file with mode: 0644]
gnu/stdbool.in.h [new file with mode: 0644]
gnu/stddef.in.h [new file with mode: 0644]
gnu/stdint.in.h [new file with mode: 0644]
gnu/stdio-impl.h [new file with mode: 0644]
gnu/stdio-write.c [new file with mode: 0644]
gnu/stdio.in.h [new file with mode: 0644]
gnu/stdlib.in.h [new file with mode: 0644]
gnu/stpcpy.c [new file with mode: 0644]
gnu/strcasecmp.c [new file with mode: 0644]
gnu/strchrnul.c [new file with mode: 0644]
gnu/strchrnul.valgrind [new file with mode: 0644]
gnu/strdup.c [new file with mode: 0644]
gnu/streq.h [new file with mode: 0644]
gnu/strerror.c [new file with mode: 0644]
gnu/string.in.h [new file with mode: 0644]
gnu/strings.in.h [new file with mode: 0644]
gnu/stripslash.c [new file with mode: 0644]
gnu/strncasecmp.c [new file with mode: 0644]
gnu/strndup.c [new file with mode: 0644]
gnu/strnlen.c [new file with mode: 0644]
gnu/strnlen1.c [new file with mode: 0644]
gnu/strnlen1.h [new file with mode: 0644]
gnu/strtoimax.c [new file with mode: 0644]
gnu/strtol.c [new file with mode: 0644]
gnu/strtoll.c [new file with mode: 0644]
gnu/strtoul.c [new file with mode: 0644]
gnu/strtoull.c [new file with mode: 0644]
gnu/strtoumax.c [new file with mode: 0644]
gnu/sys_stat.in.h [new file with mode: 0644]
gnu/sys_time.in.h [new file with mode: 0644]
gnu/sysexits.in.h [new file with mode: 0644]
gnu/tempname.c [new file with mode: 0644]
gnu/tempname.h [new file with mode: 0644]
gnu/time.in.h [new file with mode: 0644]
gnu/time_r.c [new file with mode: 0644]
gnu/timespec.h [new file with mode: 0644]
gnu/uinttostr.c [new file with mode: 0644]
gnu/umaxtostr.c [new file with mode: 0644]
gnu/unistd--.h [new file with mode: 0644]
gnu/unistd-safer.h [new file with mode: 0644]
gnu/unistd.in.h [new file with mode: 0644]
gnu/unitypes.h [new file with mode: 0644]
gnu/uniwidth.h [new file with mode: 0644]
gnu/uniwidth/cjk.h [new file with mode: 0644]
gnu/uniwidth/width.c [new file with mode: 0644]
gnu/unlink.c [new file with mode: 0644]
gnu/unlinkat.c [new file with mode: 0644]
gnu/unlinkdir.c [new file with mode: 0644]
gnu/unlinkdir.h [new file with mode: 0644]
gnu/unlocked-io.h [new file with mode: 0644]
gnu/unsetenv.c [new file with mode: 0644]
gnu/utimens.c [new file with mode: 0644]
gnu/utimens.h [new file with mode: 0644]
gnu/vasnprintf.c [new file with mode: 0644]
gnu/vasnprintf.h [new file with mode: 0644]
gnu/vasprintf.c [new file with mode: 0644]
gnu/verify.h [new file with mode: 0644]
gnu/version-etc-fsf.c [new file with mode: 0644]
gnu/version-etc.c [new file with mode: 0644]
gnu/version-etc.h [new file with mode: 0644]
gnu/vsnprintf.c [new file with mode: 0644]
gnu/wchar.in.h [new file with mode: 0644]
gnu/wcrtomb.c [new file with mode: 0644]
gnu/wctype.in.h [new file with mode: 0644]
gnu/wcwidth.c [new file with mode: 0644]
gnu/write.c [new file with mode: 0644]
gnu/xalloc-die.c [new file with mode: 0644]
gnu/xalloc.h [new file with mode: 0644]
gnu/xasprintf.c [new file with mode: 0644]
gnu/xgetcwd.c [new file with mode: 0644]
gnu/xgetcwd.h [new file with mode: 0644]
gnu/xmalloc.c [new file with mode: 0644]
gnu/xsize.h [new file with mode: 0644]
gnu/xstrndup.c [new file with mode: 0644]
gnu/xstrndup.h [new file with mode: 0644]
gnu/xstrtol-error.c [new file with mode: 0644]
gnu/xstrtol.c [new file with mode: 0644]
gnu/xstrtol.h [new file with mode: 0644]
gnu/xstrtoul.c [new file with mode: 0644]
gnu/xstrtoumax.c [new file with mode: 0644]
gnu/xvasprintf.c [new file with mode: 0644]
gnu/xvasprintf.h [new file with mode: 0644]
lib/Makefile.am
lib/Makefile.in
lib/alloca.c [deleted file]
lib/alloca.in.h [deleted file]
lib/argmatch.c [deleted file]
lib/argmatch.h [deleted file]
lib/argp-ba.c [deleted file]
lib/argp-eexst.c [deleted file]
lib/argp-fmtstream.c [deleted file]
lib/argp-fmtstream.h [deleted file]
lib/argp-fs-xinl.c [deleted file]
lib/argp-help.c [deleted file]
lib/argp-namefrob.h [deleted file]
lib/argp-parse.c [deleted file]
lib/argp-pin.c [deleted file]
lib/argp-pv.c [deleted file]
lib/argp-pvh.c [deleted file]
lib/argp-xinl.c [deleted file]
lib/argp.h [deleted file]
lib/asnprintf.c [deleted file]
lib/at-func.c [deleted file]
lib/backupfile.c [deleted file]
lib/backupfile.h [deleted file]
lib/basename.c [deleted file]
lib/btowc.c [deleted file]
lib/c-ctype.c [deleted file]
lib/c-ctype.h [deleted file]
lib/canonicalize-lgpl.c [deleted file]
lib/canonicalize.h [deleted file]
lib/chdir-long.c [deleted file]
lib/chdir-long.h [deleted file]
lib/chown.c [deleted file]
lib/close-stream.c [deleted file]
lib/close-stream.h [deleted file]
lib/close.c [deleted file]
lib/closeout.c [deleted file]
lib/closeout.h [deleted file]
lib/config.charset [deleted file]
lib/creat-safer.c [deleted file]
lib/dirent.in.h [deleted file]
lib/dirfd.c [deleted file]
lib/dirname.c [deleted file]
lib/dirname.h [deleted file]
lib/dup-safer.c [deleted file]
lib/dup2.c [deleted file]
lib/errno.in.h [deleted file]
lib/error.c [deleted file]
lib/error.h [deleted file]
lib/exclude.c [deleted file]
lib/exclude.h [deleted file]
lib/exitfail.c [deleted file]
lib/exitfail.h [deleted file]
lib/fchdir.c [deleted file]
lib/fchmodat.c [deleted file]
lib/fchown-stub.c [deleted file]
lib/fchownat.c [deleted file]
lib/fclose.c [deleted file]
lib/fcntl--.h [deleted file]
lib/fcntl-safer.h [deleted file]
lib/fcntl.in.h [deleted file]
lib/fd-safer.c [deleted file]
lib/fileblocks.c [deleted file]
lib/float+.h [deleted file]
lib/float.in.h [deleted file]
lib/fnmatch.c [deleted file]
lib/fnmatch.in.h [deleted file]
lib/fnmatch_loop.c [deleted file]
lib/fpending.c [deleted file]
lib/fpending.h [deleted file]
lib/fseeko.c [deleted file]
lib/fstatat.c [deleted file]
lib/ftruncate.c [deleted file]
lib/full-write.c [deleted file]
lib/full-write.h [deleted file]
lib/getcwd.c [deleted file]
lib/getdate.c [deleted file]
lib/getdate.h [deleted file]
lib/getdate.y [deleted file]
lib/getdelim.c [deleted file]
lib/getline.c [deleted file]
lib/getopt.c [deleted file]
lib/getopt.in.h [deleted file]
lib/getopt1.c [deleted file]
lib/getopt_int.h [deleted file]
lib/getpagesize.c [deleted file]
lib/gettext.h [deleted file]
lib/gettime.c [deleted file]
lib/gettimeofday.c [deleted file]
lib/gnulib.mk [deleted file]
lib/hash.c [deleted file]
lib/hash.h [deleted file]
lib/human.c [deleted file]
lib/human.h [deleted file]
lib/imaxtostr.c [deleted file]
lib/intprops.h [deleted file]
lib/inttostr.c [deleted file]
lib/inttostr.h [deleted file]
lib/inttypes.in.h [deleted file]
lib/lchown.c [deleted file]
lib/localcharset.c [deleted file]
lib/localcharset.h [deleted file]
lib/lseek.c [deleted file]
lib/lstat.c [deleted file]
lib/malloc.c [deleted file]
lib/malloca.c [deleted file]
lib/malloca.h [deleted file]
lib/malloca.valgrind [deleted file]
lib/mbchar.c [deleted file]
lib/mbchar.h [deleted file]
lib/mbrtowc.c [deleted file]
lib/mbscasecmp.c [deleted file]
lib/mbsinit.c [deleted file]
lib/mbuiter.h [deleted file]
lib/mempcpy.c [deleted file]
lib/memrchr.c [deleted file]
lib/mkdirat.c [deleted file]
lib/mkdtemp.c [deleted file]
lib/mktime.c [deleted file]
lib/modechange.c [deleted file]
lib/modechange.h [deleted file]
lib/obstack.c [deleted file]
lib/obstack.h [deleted file]
lib/offtostr.c [deleted file]
lib/open-safer.c [deleted file]
lib/open.c [deleted file]
lib/openat-die.c [deleted file]
lib/openat-priv.h [deleted file]
lib/openat-proc.c [deleted file]
lib/openat.c [deleted file]
lib/openat.h [deleted file]
lib/pathmax.h [deleted file]
lib/pipe-safer.c [deleted file]
lib/printf-args.c [deleted file]
lib/printf-args.h [deleted file]
lib/printf-parse.c [deleted file]
lib/printf-parse.h [deleted file]
lib/quote.c [deleted file]
lib/quote.h [deleted file]
lib/quotearg.c [deleted file]
lib/quotearg.h [deleted file]
lib/rawmemchr.c [deleted file]
lib/rawmemchr.valgrind [deleted file]
lib/readlink.c [deleted file]
lib/realloc.c [deleted file]
lib/ref-add.sin [deleted file]
lib/ref-del.sin [deleted file]
lib/regcomp.c [deleted file]
lib/regex.c [deleted file]
lib/regex.h [deleted file]
lib/regex_internal.c [deleted file]
lib/regex_internal.h [deleted file]
lib/regexec.c [deleted file]
lib/rmt.h
lib/rpmatch.c [deleted file]
lib/rtapelib.c
lib/safe-read.c [deleted file]
lib/safe-read.h [deleted file]
lib/safe-write.c [deleted file]
lib/safe-write.h [deleted file]
lib/same-inode.h [deleted file]
lib/save-cwd.c [deleted file]
lib/save-cwd.h [deleted file]
lib/savedir.c [deleted file]
lib/savedir.h [deleted file]
lib/setenv.c [deleted file]
lib/size_max.h [deleted file]
lib/sleep.c [deleted file]
lib/snprintf.c [deleted file]
lib/stat-macros.h [deleted file]
lib/stat-time.h [deleted file]
lib/stdarg.in.h [deleted file]
lib/stdbool.in.h [deleted file]
lib/stdint.in.h [deleted file]
lib/stdio-impl.h [deleted file]
lib/stdio-write.c [deleted file]
lib/stdio.in.h [deleted file]
lib/stdlib.in.h [deleted file]
lib/stpcpy.c [deleted file]
lib/strcasecmp.c [deleted file]
lib/strchrnul.c [deleted file]
lib/strchrnul.valgrind [deleted file]
lib/strdup.c [deleted file]
lib/streq.h [deleted file]
lib/strerror.c [deleted file]
lib/string.in.h [deleted file]
lib/strings.in.h [deleted file]
lib/stripslash.c [deleted file]
lib/strncasecmp.c [deleted file]
lib/strndup.c [deleted file]
lib/strnlen.c [deleted file]
lib/strnlen1.c [deleted file]
lib/strnlen1.h [deleted file]
lib/strtoimax.c [deleted file]
lib/strtol.c [deleted file]
lib/strtoll.c [deleted file]
lib/strtoul.c [deleted file]
lib/strtoull.c [deleted file]
lib/strtoumax.c [deleted file]
lib/sys_stat.in.h [deleted file]
lib/sys_time.in.h [deleted file]
lib/sysexits.in.h [deleted file]
lib/tempname.c [deleted file]
lib/tempname.h [deleted file]
lib/time.in.h [deleted file]
lib/time_r.c [deleted file]
lib/timespec.h [deleted file]
lib/uinttostr.c [deleted file]
lib/umaxtostr.c [deleted file]
lib/unistd--.h [deleted file]
lib/unistd-safer.h [deleted file]
lib/unistd.in.h [deleted file]
lib/unitypes.h [deleted file]
lib/uniwidth.h [deleted file]
lib/uniwidth/cjk.h [deleted file]
lib/uniwidth/width.c [deleted file]
lib/unlinkdir.c [deleted file]
lib/unlinkdir.h [deleted file]
lib/unlocked-io.h [deleted file]
lib/unsetenv.c [deleted file]
lib/utime.c [deleted file]
lib/utimens.c [deleted file]
lib/utimens.h [deleted file]
lib/vasnprintf.c [deleted file]
lib/vasnprintf.h [deleted file]
lib/verify.h [deleted file]
lib/version-etc-fsf.c [deleted file]
lib/version-etc.c [deleted file]
lib/version-etc.h [deleted file]
lib/vsnprintf.c [deleted file]
lib/w32sock.h [deleted file]
lib/waitpid.c [deleted file]
lib/wchar.in.h [deleted file]
lib/wcrtomb.c [deleted file]
lib/wctype.in.h [deleted file]
lib/wcwidth.c [deleted file]
lib/write.c [deleted file]
lib/xalloc-die.c [deleted file]
lib/xalloc.h [deleted file]
lib/xgetcwd.c [deleted file]
lib/xgetcwd.h [deleted file]
lib/xmalloc.c [deleted file]
lib/xsize.h [deleted file]
lib/xstrndup.c [deleted file]
lib/xstrndup.h [deleted file]
lib/xstrtol-error.c [deleted file]
lib/xstrtol.c [deleted file]
lib/xstrtol.h [deleted file]
lib/xstrtoul.c [deleted file]
lib/xstrtoumax.c [deleted file]
m4/00gnulib.m4
m4/alloca.m4
m4/argmatch.m4
m4/argp.m4
m4/backupfile.m4
m4/bison.m4
m4/btowc.m4
m4/canonicalize-lgpl.m4 [deleted file]
m4/canonicalize.m4 [new file with mode: 0644]
m4/chdir-long.m4
m4/chown.m4
m4/clock_time.m4
m4/close-stream.m4
m4/close.m4
m4/closeout.m4
m4/codeset.m4
m4/d-ino.m4
m4/dirent-safer.m4 [new file with mode: 0644]
m4/dirent_h.m4
m4/dirfd.m4
m4/dirname.m4
m4/dos.m4
m4/double-slash-root.m4
m4/dup2.m4
m4/eealloc.m4
m4/environ.m4
m4/errno_h.m4
m4/error.m4
m4/exclude.m4
m4/exitfail.m4 [deleted file]
m4/extensions.m4
m4/fchdir.m4
m4/fclose.m4
m4/fcntl-o.m4 [new file with mode: 0644]
m4/fcntl-safer.m4 [deleted file]
m4/fcntl.m4 [new file with mode: 0644]
m4/fcntl_h.m4
m4/fdopendir.m4 [new file with mode: 0644]
m4/fileblocks.m4
m4/float_h.m4
m4/fnmatch.m4
m4/fpending.m4
m4/fseeko.m4
m4/ftruncate.m4
m4/getcwd-abort-bug.m4
m4/getcwd-path-max.m4
m4/getcwd.m4
m4/getdate.m4
m4/getdelim.m4
m4/getdtablesize.m4 [new file with mode: 0644]
m4/getline.m4
m4/getopt.m4
m4/getpagesize.m4
m4/gettext.m4
m4/gettime.m4
m4/gettimeofday.m4
m4/glibc21.m4
m4/gnulib-common.m4
m4/gnulib-comp.m4
m4/hash.m4
m4/human.m4
m4/iconv.m4
m4/include_next.m4
m4/inline.m4
m4/intlmacosx.m4
m4/intmax_t.m4
m4/inttostr.m4
m4/inttypes-pri.m4
m4/inttypes.m4
m4/inttypes_h.m4
m4/langinfo_h.m4 [new file with mode: 0644]
m4/lchown.m4
m4/lib-ld.m4
m4/lib-link.m4
m4/lib-prefix.m4
m4/localcharset.m4
m4/locale-fr.m4
m4/locale-ja.m4
m4/locale-zh.m4
m4/longlong.m4
m4/lseek.m4
m4/lstat.m4
m4/malloc.m4
m4/malloca.m4
m4/mbchar.m4
m4/mbiter.m4
m4/mbrtowc.m4
m4/mbscasecmp.m4 [deleted file]
m4/mbsinit.m4
m4/mbsrtowcs.m4 [new file with mode: 0644]
m4/mbstate_t.m4
m4/memchr.m4 [new file with mode: 0644]
m4/mempcpy.m4
m4/memrchr.m4
m4/mkdir.m4 [new file with mode: 0644]
m4/mkdtemp.m4
m4/mktime.m4
m4/mmap-anon.m4 [new file with mode: 0644]
m4/mode_t.m4 [new file with mode: 0644]
m4/modechange.m4
m4/multiarch.m4
m4/nl_langinfo.m4 [new file with mode: 0644]
m4/nls.m4
m4/open.m4
m4/openat.m4
m4/pathmax.m4
m4/po.m4
m4/printf.m4
m4/priv-set.m4 [new file with mode: 0644]
m4/progtest.m4
m4/quote.m4
m4/quotearg.m4
m4/rawmemchr.m4
m4/readlink.m4
m4/realloc.m4
m4/regex.m4
m4/rmdir.m4 [new file with mode: 0644]
m4/rpmatch.m4
m4/safe-read.m4
m4/safe-write.m4
m4/same.m4 [new file with mode: 0644]
m4/save-cwd.m4
m4/savedir.m4
m4/setenv.m4
m4/size_max.m4
m4/sleep.m4
m4/snprintf.m4
m4/ssize_t.m4
m4/stat-time.m4
m4/stat.m4 [new file with mode: 0644]
m4/stdarg.m4
m4/stdbool.m4
m4/stddef_h.m4 [new file with mode: 0644]
m4/stdint.m4
m4/stdint_h.m4
m4/stdio_h.m4
m4/stdlib_h.m4
m4/stpcpy.m4
m4/strcase.m4
m4/strchrnul.m4
m4/strdup.m4
m4/strerror.m4
m4/string_h.m4
m4/strings_h.m4
m4/strndup.m4
m4/strnlen.m4
m4/strtoimax.m4
m4/strtol.m4
m4/strtoll.m4
m4/strtoul.m4
m4/strtoull.m4
m4/strtoumax.m4
m4/sys_stat_h.m4
m4/sys_time_h.m4
m4/sysexits.m4
m4/system.m4
m4/tempname.m4
m4/time_h.m4
m4/time_r.m4
m4/timespec.m4
m4/tm_gmtoff.m4
m4/unistd-safer.m4
m4/unistd_h.m4
m4/unlink.m4 [new file with mode: 0644]
m4/unlinkdir.m4
m4/unlocked-io.m4
m4/utimbuf.m4
m4/utime.m4 [deleted file]
m4/utimens.m4
m4/utimes-null.m4 [deleted file]
m4/utimes.m4
m4/vasnprintf.m4
m4/vasprintf.m4 [new file with mode: 0644]
m4/version-etc.m4 [new file with mode: 0644]
m4/vsnprintf.m4
m4/warn-on-use.m4 [new file with mode: 0644]
m4/wchar.m4 [deleted file]
m4/wchar_h.m4 [new file with mode: 0644]
m4/wchar_t.m4
m4/wcrtomb.m4
m4/wctype.m4 [deleted file]
m4/wctype_h.m4 [new file with mode: 0644]
m4/wcwidth.m4
m4/wint_t.m4
m4/write.m4
m4/xalloc.m4
m4/xgetcwd.m4
m4/xsize.m4
m4/xstrndup.m4
m4/xstrtol.m4
m4/xvasprintf.m4 [new file with mode: 0644]
po/Makevars
po/POTFILES.in
po/bg.gmo
po/bg.po
po/cs.gmo
po/cs.po
po/da.gmo
po/da.po
po/de.gmo
po/de.po
po/el.gmo
po/el.po
po/es.gmo
po/es.po
po/et.gmo
po/et.po
po/eu.gmo
po/eu.po
po/fi.gmo
po/fi.po
po/fr.gmo
po/fr.po
po/ga.gmo
po/ga.po
po/gl.gmo
po/gl.po
po/hr.gmo
po/hr.po
po/hu.gmo
po/hu.po
po/id.gmo
po/id.po
po/it.gmo
po/it.po
po/ja.gmo
po/ja.po
po/ko.gmo
po/ko.po
po/ky.gmo
po/ky.po
po/ms.gmo
po/ms.po
po/nb.gmo
po/nb.po
po/nl.gmo
po/nl.po
po/pl.gmo
po/pl.po
po/pt.gmo
po/pt.po
po/pt_BR.gmo
po/pt_BR.po
po/ro.gmo
po/ro.po
po/ru.gmo
po/ru.po
po/sk.gmo
po/sk.po
po/sl.gmo
po/sl.po
po/sv.gmo
po/sv.po
po/tar.pot
po/tr.gmo
po/tr.po
po/uk.gmo
po/uk.po
po/vi.gmo
po/vi.po
po/zh_CN.gmo
po/zh_CN.po
po/zh_TW.gmo
po/zh_TW.po
rmt/Makefile.am
rmt/Makefile.in
rmt/rmt.c
scripts/Makefile.in
src/Makefile.am
src/Makefile.in
src/buffer.c
src/common.h
src/compare.c
src/create.c
src/delete.c
src/exit.c [new file with mode: 0644]
src/extract.c
src/incremen.c
src/list.c
src/misc.c
src/names.c
src/suffix.c
src/system.c
src/tar.c
src/transform.c
src/unlink.c [new file with mode: 0644]
src/update.c
src/warning.c [new file with mode: 0644]
src/xheader.c
tests/Makefile.am
tests/Makefile.in
tests/append02.at
tests/argcv.c
tests/backup01.at [new file with mode: 0644]
tests/exclude01.at [new file with mode: 0644]
tests/exclude02.at [new file with mode: 0644]
tests/exclude03.at [new file with mode: 0644]
tests/exclude04.at [new file with mode: 0644]
tests/exclude05.at [new file with mode: 0644]
tests/extrac05.at
tests/extrac08.at [new file with mode: 0644]
tests/filerem01.at [new file with mode: 0644]
tests/filerem02.at [new file with mode: 0644]
tests/genfile.c
tests/grow.at
tests/gzip.at
tests/incr03.at
tests/incr04.at
tests/incr05.at [new file with mode: 0644]
tests/incr06.at [new file with mode: 0644]
tests/label01.at [new file with mode: 0644]
tests/label02.at [new file with mode: 0644]
tests/listed01.at
tests/listed02.at
tests/multiv01.at
tests/multiv07.at [new file with mode: 0644]
tests/package.m4
tests/pipe.at
tests/remfiles01.at [new file with mode: 0644]
tests/remfiles02.at [new file with mode: 0644]
tests/rename01.at
tests/rename02.at
tests/rename03.at
tests/shortrec.at
tests/sparsemvp.at
tests/testsuite.at
tests/truncate.at
tests/update.at
tests/update01.at [new file with mode: 0644]
tests/update02.at [new file with mode: 0644]
tests/volsize.at
tests/xform-h.at [new file with mode: 0644]

index 41227f59434c2c7281b30018b1397b105564941d..23bef2daf61be085019cf9f5bb0d705739702e19 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,773 @@
+2010-03-10  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Version 1.23
+       * configure.ac, NEWS: Update version number.
+
+       Doc changes.
+       * NEWS: Update.
+       * THANKS: Update.
+       * doc/snapshot.texi, doc/snapshot.texi,
+       doc/sparse.texi, doc/tar-snapshot-edit.texi,
+       doc/tar.texi: Spellchecked and proof-read. Thanks
+       to Denis Excoffier.
+       * gnulib.modules: Remove utime.
+
+2010-03-08  Kamil Dudka  <kdudka@redhat.com>
+
+       Fix possible overflow in code_timespec (tiny change)
+       * src/misc.c (code_timespec): ignore invalid values of ns
+
+2010-03-08  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Minor fix in the testsuite.
+       * tests/extrac05.at: Skip test if creating
+       sparse file fails.
+
+       Fix eventual memory override and fd exhaustion in create.c
+       Both bugs reported by Kamil Dudka.
+
+       * src/create.c (check_exclusion_tags): Do not keep
+       pointer to a location within tagname: it may change
+       after xrealloc. Use byte offset instead.
+       (dump_file0): Close fd before returning without
+       dumping the directory.
+
+2010-03-02  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Minor change.
+       * doc/tar.texi: Improve some wording.
+
+2010-03-02  Antonio Diaz Diaz  <ant_diaz@teleline.es>
+
+       Add Lzip support
+       * configure.ac: Add TAR_COMPR_PROGRAM(lzip)
+       * doc/tar.texi: Reflect lzip support.
+       * src/buffer.c (compress_type) <ct_lzip>: New constant.
+       (magic): Add magic for lzip.
+       * src/suffix.c (compression_suffixes): Add lz.
+       * src/tar.c: New option --lzip.
+
+2010-03-02  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Minor fix.
+       * tests/exclude05.at: Rewrite awk invocation to avoid
+       overflowing awk's file table on Solaris.
+
+2010-03-02  Eric Blake <ebb9@byu.net>
+
+       Fix large file support.
+       * scripts/xsparse.c (read_map): Use fseeko.
+       * src/incremen.c (write_directory_file): Likewise.
+
+2010-03-02  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Bugfix
+       * src/buffer.c (seek_archive): Rewrite size computation
+       to prevent it from reaching negative values. Based on
+       report by Denis Excoffier <Denis.Excoffier@free.fr>.
+
+2010-02-25  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Supply more information to the --to-command script.
+       * src/system.c (stat_to_env): Pass information about the current
+       volume in variables TAR_ARCHIVE, TAR_VOLUME, TAR_BLOCKING_FACTOR,
+       TAR_FORMAT.
+       * doc/tar.texi: Document new environment variables.
+       * NEWS: Likewise.
+       * configure.ac: Version number 1.22.91.
+
+2010-02-17  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Minor change.
+       * src/names.c (regex_usage_warning): Fix warning message.
+
+2010-02-05  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Update THANKS
+
+2010-02-05  Ondřej Vašík  <ovasik@redhat.com>
+
+       Bugfix (tiny change)
+       * src/xheader.c (xheader_read): Remove unnecessary call
+       to xheader_init.
+
+2010-01-26  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Enable silent build mode.
+       * configure.ac: Require automake 1.11, autoconf 2.63. Enable
+       silent rules.
+       * NEWS: Update.
+       * lib/Makefile.am (rmt-command.h): Silent the rule.
+
+2010-01-25  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Read POSIX multivolume archives split at the header boundary.
+       * src/common.h (read_header_mode): New enum.
+       (read_header): Change type of the 3rd argument.
+       * src/list.c (read_header): Change type of the 3rd argument.
+       All callers updated.
+       * src/buffer.c (try_new_volume): Allow for volumes split at the
+       extended/ustar header boundary. This is against POSIX specs, but
+       we must be able to read such archives anyway.
+
+       * tests/multiv07.at: New test case.
+       * tests/Makefile.am: Add multiv07.at
+       * tests/testsuite.at: Likewise.
+
+       * src/compare.c: Update calls to read_header.
+       * src/delete.c: Likewise.
+       * src/update.c: Likewise.
+
+2010-01-24  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Minor change.
+       * NEWS: Update.
+       * doc/tar.texi: Update.
+       * src/create.c (finish_header): Minor change.
+
+2010-01-24  Rob Vermaas  <rob.vermaas@gmail.com>
+
+       Bugfix (tiny change).
+       * src/tar.c (format_default_settings)[REMOTE_SHELL]: Fix
+       misplaced comma.
+
+2010-01-24  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Minor fix.
+       * src/incremen.c (read_incr_db_01)
+       (read_directory_file): Initialize bufsize to 0.
+       Suggested by noordsij@cs.helsinki.fi.
+
+       Improve handling of --test-label.
+       * src/list.c (print_volume_label): New function.
+       (print_header): Call print_volume_label.
+       (test_archive_label): New function.
+       * src/buffer.c (VOLUME_LABEL_APPEND): Remove.
+       (VOLUME_TEXT, VOLUME_TEXT_LEN): New macros
+       (drop_volume_label_suffix): New function.
+       (check_label_pattern): Use drop_volume_label_suffix.
+       * src/common.h (subcommand): New constant TEST_LABEL_SUBCOMMAND.
+       (test_label_option): Remove.
+       (drop_volume_label_suffix): New proto.
+       (test_archive_label): New proto.
+       * src/names.c (all_names_found): Remove test for
+       test_label_option.
+       * src/tar.c (subcommand_string): Handle TEST_LABEL_SUBCOMMAND.
+       (set_subcommand_option): Improve diagnostics.
+       (parse_opt): Set subcommand if --test-label is given.
+       (main): Handle TEST_LABEL_SUBCOMMAND.
+
+       Fix listing of volume labels (in particular in PAX archives).
+       * src/buffer.c (match_volume_label): Call set_volume_label.
+       (check_label_pattern): Get label string
+       as argument.
+       (match_volume_label): Handle volume labels stored in
+       global PAX headers.
+       * src/common.c (print_header,read_header): Change signature.
+       (read_header_primitive): Remove prototype.
+       * src/list.c (recent_global_header): New static.
+       (list_archive): Always print volume labels.
+       (read_header_primitive): Remove.
+       (read_header): Change the signature (all callers updated)
+       Save the recent global header.
+       (volume_label_printed): New static.
+       (simple_print_header): New function (ex-print_header).
+       (print_header): Change the signature (all callers updated).
+       For POSIX formats, print first volume header (if set).
+       * src/xheader.c (xheader_write_global): Write the data
+       accumulated in xhdr->stk even if keyword_global_override_list
+       is empty.
+       (xheader_read): On unexpected EOF, report error instead of
+       coredumping.
+       (XHDR_PROTECTED, XHDR_GLOBAL): New defines.
+       (struct xhdr_tab): Remove `protected' with `flags'. All uses
+       updated.
+       (decg): If XHDR_GLOBAL bit is set, call the keyword's decode
+       method instead of adding it to `kwl'.
+
+       * src/compare.c: Update calls to read_header.
+       * src/create.c: Likewise.
+       * src/delete.c: Likewise.
+       * src/update.c: Likewise.
+       * src/extract.c: Likewise.
+       (extract_volhdr): Do not print "Reading <label>" statement,
+       because
+       it is inconsistent: it is not printed if the volume begins with a
+       member continued from the previous volume.
+
+       * tests/label01.at: New testcase.
+       * tests/label02.at: New testcase.
+       * tests/Makefile.am, tests/testsuite.at: Add new testcases.
+
+2010-01-22  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Fix prefix length calculation in ustar mode.
+       * src/create.c (split_long_name): Fix prefix length
+       calculation.
+       (write_ustar_long_name): Improve ustar mode compatibility
+       with the Sun version.
+
+2009-10-14  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Rewrite update algorithm.
+       * src/common.h (namebuf_t): New typedef.
+       (namebuf_create, namebuf_free)
+       (namebuf_name): New prototypes.
+       (remname): New prototype.
+       * src/misc.c (struct namebuf): New structure.
+       (namebuf_create, namebuf_free)
+       (namebuf_name): New functions.
+       * src/create.c (dup_dir0): Remove is_avoided_name
+       checks. This is taken care of in update_archive.
+       * src/incremen.c (scan_directory): Use namebuf
+       to produce full file names.
+       * src/names.c (nametail): Remove extra level of
+       indirection. All uses updated.
+       (avoided_name_table, add_avoided_name)
+       (is_avoided_name): Remove.
+       * src/update.c (update_archive): Change algorithm.
+       Instead of adding unmodified files to the avoided_name
+       table, create namelist so that it contains only
+       modified files.
+
+       * tests/Makefile.am: Add update01.at, update02.at
+       * tests/testsuite.at: Likewise.
+       * tests/update.at (AT_KEYWORDS): Add update00.
+
+       Minor changes.
+       * src/tar.c (main): Ignore SIGPIPE.
+       * src/system.c (sys_child_open_for_compress)
+       (sys_child_open_for_uncompress): Reset SIGPIPE
+       in child to default.
+       * tests/remfiles01.at: Avoid race conditions.
+       * tests/remfiles02.at: Likewise.
+
+       Bugfix.
+       * src/buffer.c (_open_archive): Call guess_seekable_archive
+       only if the call to open_compressed_archive succeeded.
+
+2009-10-10  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Improve previous changes.
+       * acinclude.m4: Fix typos.
+       * gnulib.modules: Add xvasprintf.
+       * src/common.h: Include xvasprintf.h.
+       * src/tar.c (options): Remove docstrings for --gzip, --bzip2,
+       --compress, --lzop, --lzma and --xz.
+       (tar_help_filter): Generate these using actual values of
+       *_PROGRAM constants.
+       (format_default_settings): Use xasprintf.
+       (parse_opt): Use *_PROGRAM defines instead of hardcoded
+       program names.
+
+       Allow installers to specify alternative program names for
+       compression programs.
+       This adds --with-gzip, --with-bzip2 etc. switches to the
+       configure, so that
+       one can do, e.g. ./configure --with-bzip2=lbzip2 and have
+       lbzip2 executed
+       whenever user calls `tar --bzip2'.
+
+       * acinclude.m4: New file.
+       * configure.ac: Add TAR_COMPR_PROGRAM invocations for
+       the supported compressors.
+       * src/buffer.c (magic): Use *_COMPRESSOR defines instead
+       of hardcoded program names.
+       * src/suffix.c (compression_suffixes): Likewise.
+
+2009-10-09  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Minor fix.
+       * src/buffer.c (magic): Fix `xz' entry: add the name of the
+       program.
+       * src/suffix.c (compression_suffixes, nsuffixes): Mark as static.
+
+2009-10-07  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Provide a way to explicitly set mtime for extended header
+       ustar blocks.
+       * src/tar.c (struct textual_date): ts is a copy of the structure,
+       not a pointer to it. Date is a copy as well, hence the `const' is
+       taken away.
+       (get_date_or_file): Return 0/1 depending on success/failure.
+       Copy timestamp to the `ts' member. Store a copy of the string
+       in `date'.
+       (report_textual_dates): Report only if verbose_option is set,
+       but always free the list.
+       (expand_pax_option): New function.
+       (parse_opt): Preprocess the argument to xheader_set_option with
+       expand_pax_option.
+       (decode_options): Call report_textual_dates unconditionally.
+       * src/xheader.c (exthdr_mtime_option, exthdr_mtime)
+       (globexthdr_mtime_option, globexthdr_mtime): New statics.
+       (xheader_set_keyword_equal): handle exthdr.mtime and
+       globexthdr.mtime.
+       (xheader_write): Override `t' argument if a corresponding
+       exthdr.mtime or globexthdr.mtime option is set.
+       * NEWS: Update
+       * doc/tar.texi: Document the changes.
+
+       Use file's mtime as mtime for its extended header.
+       This makes two pax archives binary equivalent if they
+       have the same contents and care is taken to make extended
+       headers otherwise reproducible, e.g. by using:
+
+         --pax-option=exthdr.name=%d/PaxHeaders/%f,atime:=0
+
+       Proposed by Michael D. Adams <mdmkolbe@gmail.com>.
+
+       * src/common.h (start_private_header): Take time_t as 3rd param.
+       (xheader_write): Likewise.
+       * src/create.c (start_private_header): Take time_t as 3rd param.
+       All callers updated.
+       (write_extended): Use file's mtime as mtime for its extended
+       header,
+       Use current time stamp as mtime for global headers.
+       (xheader_write): Take time_t as 3rd param.
+
+       Fix bugs in handling the --remove-files option.
+       Make sure the files are deleted only if they were succesfully
+       stored
+       to the archive.
+
+       * src/exit.c: New file.
+       * src/unlink.c: New file.
+       * src/Makefile.am (tar_SOURCES): Add exit.c and unlink.c.
+       * src/common.h: Include progname.h
+       (program_name): Remove global.
+       (records_written): New extern.
+       (queue_deferred_unlink, finish_deferred_unlinks): New prototypes.
+       (fatal_exit_hook): New extern.
+       * src/create.c (create_archive): Call finish_deferred_unlinks.
+       (dump_hard_link, dump_file0): Don't actually unlink the file,
+       queue it to deferred_unlinks instead.
+       * src/delete.c (records_written): Remove extern: declared in
+       common.h.
+       * src/extract.c (extract_archive): Set fatal_exit_hook.
+       (fatal_exit, xalloc_die): Move to exit.c
+       * src/system.c (sys_wait_for_child): Exit immediately
+       if the child dies or exits with a non-zero status.
+       (sys_child_open_for_compress)
+       (sys_child_open_for_uncompress): Use set_program_name,
+       instead of setting program_name directly.
+       * src/tar.c (main): Use set_program_name,
+       instead of setting program_name directly.
+
+       * tests/Makefile.am (TESTSUITE_AT): Add remfiles01.at
+       and remfiles02.at.
+       * tests/testsuite.at: Likewise.
+       * tests/gzip.at: Reflect the above changes.
+
+2009-10-04  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Fix bug in OLDGNU format creation.
+       See tests/append02.at for a detailed description
+
+       * src/common.h (MODE_FROM_HEADER): Take additional argument.
+       (mode_from_header): Likewise.
+       * src/create.c (mode_to_chars): Store all mode bits if
+       using OLDGNU_FORMAT. This reverses f4e4adea80a.
+       * src/list.c (decode_header): Use header mode field
+       to discern between GNU and OLDGNU formats.
+       (mode_from_header): Store unrecognized mode bits (from 10th up)
+       in the location pointed to by the third parameter.
+       * tests/append02.at: Update documentation and references.
+
+2009-09-16  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Restore extra help output.
+       * src/tar.c (tar_list_quoting_styles): Change first argument to
+       struct obstack.
+       (format_default_settings): New function.
+       (show_default_settings)
+       (show_default_settings_fs): Removed.
+       (tar_help): Removed.
+       (tar_help_filter): New function.
+       (argp): Set help_filter.
+       (parse_opt): Fix error message.
+
+2009-09-08  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Improve command line option handling.
+       * gnulib.modules: Add argp-version-etc and progname,
+       use getopt-gnu instead of getopt.
+       * src/tar.c (HANG_OPTION, USAGE_OPTION)
+       (VERSION_OPTION): Remove.
+       (options): Remove corresponding options. Let argp
+       handle them.
+       (parse_opt): Likewise.
+       (_argp_hang): Removed.
+       (tar_authors): New variable.
+       (decode_options): Call argp_version_setup.
+       Do not use ARGP_NO_HELP flag in the call to argp_parse.
+
+       Avoid overwriting exit_status with a value indicating less
+       important condition.
+       * src/tar.c (set_exit_status): New function.
+       * src/common.h (set_exit_status): New prototype.
+       * src/compare.c: Use set_exit_status instead of
+       exit_status assignments.
+       * src/create.c: Likewise.
+       * src/misc.c: Likewise.
+
+       * src/system.c (wait_for_grandchild): Use auto variable
+       instead of the global exit_status.
+       * src/incremen.c (scan_directory): Use file_removed_diag
+       instead of stat_diag.
+
+       Automatic detection of seekable archives.
+       * src/buffer.c (guess_seekable_archive): New function.
+       (_open_archive): Call guess_seekable_archive for archives
+       open for reading.
+       (new_volume): Likewise.
+       * src/common.h (seek_option): New global.
+       * src/tar.c (options): New option --no-seek.
+       (parse_opt): --seek and --no-seek set seek_option,
+       not seekable_archive.
+       (decode_options): Initialize seek_option to -1.
+
+       * NEWS: Update.
+       * doc/tar.texi: Update.
+
+2009-08-27  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Fix testcases.
+       * tests/extrac08.at: Ensure a predictable umask value.
+       * tests/xform-h.at (xform): do not depend on file name
+       ordering.
+
+2009-08-13  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Fix interaction between --listed-incremental and -C
+       * src/incremen.c (read_directory_file): Execute eventual -C dir
+       after opening the snapshot file.
+       (collect_and_sort_names): Remove call to chdir_do
+       * tests/incr05.at, tests/incr06.at: Use relative file names for
+       snapshot files.
+
+2009-08-12  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Update for new exclude module from gnulib. Add testcases by
+       Phil Proudman.
+       * src/names.c (is_pattern): Remove.
+       (regex_usage_warning): Use fnmatch_pattern_has_wildcards
+       instead of
+       is_pattern.
+       * src/tar.c: New option --exclude-backups.
+       (vcs_file_table, backup_file_table): New globals.
+       (add_exclude_array): New function.
+       * tests/exclude01.at, tests/exclude02.at,
+       tests/exclude03.at, tests/exclude04.at,
+       tests/exclude05.at: New testcases. Supplied by Phil Proudman.
+       * tests/Makefile.am (TESTSUITE_AT): Add new tests.
+       * tests/testsuite.at: Add new tests.
+       * THANKS: Update.
+
+2009-08-10  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Remove src/version.c (reappeared after migration to Git)
+
+2009-08-09  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Minor fixes.
+       * src/misc.c (file_removed_diag): Set exit code to
+       TAREXIT_DIFFERS.
+
+2009-08-08  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Minor fixes
+
+       Fix handling of files removed during incremental dumps.
+       Changes to src/create.c and src/incremen.c are partially
+       based on patch from Alexander Peslyak <solar at openwall.com>.
+
+       The new testcases require paxutils commit f653a2b or later.
+
+       * src/common.h (struct name): New member `cmdline'.
+       (dump_file): Change type of the 2nd argument to bool.
+       (file_removed_diag, dir_removed_diag): New prototypes.
+       (addname): New argument `cmdline'.
+       (name_from_list): Change return value.
+       * src/create.c (dump_dir0, dump_dir): top_level is bool.
+       (create_archive): Update calls to name_from_list.
+       Take advantage of the name->cmdline to set top_level argument
+       during incremental backups.
+       (dump_file0): top_level is bool.
+       Do not bail out if a no-top-level file disappears during
+       incremental
+       backup, use file_removed_diag instead.
+       (dump_filed): top_level is bool.
+       * src/incremen.c (update_parent_directory): Silently ignore
+       ENOENT.  It should have already been reported elsewhere.
+       (scan_directory): Use dir_removed_diag to report missing
+       directories.
+       * src/misc.c (file_removed_diag, dir_removed_diag): New functions.
+       * src/names.c (name_gather): Set ->cmdname.
+       (addname): Likewise. All uses updated.
+       (name_from_list): Return struct name const *. All uses updated.
+
+       * tests/filerem01.at: New testcase.
+       * tests/filerem02.at: New testcase.
+       * tests/Makefile.am, tests/testsuite.at: Add filerem01.at,
+       filerem02.at
+       * tests/grow.at, test/truncate.at: Use new syntax for genfile
+       --run.
+
+       * NEWS: Update.
+       * doc/tar.texi: Minor fix.
+
+       Optimize searches for directory structures by keeping a pointer
+       to struct directory in struct name.
+       * src/common.h (struct name): New member `directory' replaces
+       dir_contents. Rearrange members.
+       (rebase_directory): Change signature.
+       (scan_directory): Change signature.
+       (name_fill_directory)
+       (directory_contents, safe_directory_contents): New prototypes.
+       (append_incremental_renames): Change signature.
+       (replace_prefix): New proto.
+       * src/compare.c (diff_dumpdir): Use directory_contents +
+       scan_directory.
+       * src/create.c
+       * src/incremen.c (replace_prefix): Move to misc.c
+       (rebase_directory): Rewrite.
+       (scan_directory): Return pointer to struct directory.
+       (directory_contents, safe_directory_contents): New functions.
+       (get_directory_contents): Remove.
+       (name_fill_directory): New function.
+       (append_incremental_renames): Rewrite. This also fixes a memory
+       leak.
+       * src/names.c (name_gather, addname): Reflect changes in struct
+       name.
+       (add_hierarchy_to_namelist): Rewrite using name_fill_directory and
+       directory_contents.
+       (rebase_child_list): Update call to rebase_directory.
+       (collect_and_sort_names): Optimize
+
+       * src/misc.c (replace_prefix): New function.
+       * src/names.c (add_hierarchy_to_namelist): Use new
+       get_directory_contents.
+
+       * tests/incr05.at: New test case.
+       * tests/incr06.at: New test case.
+       * tests/Makefile.am, test/testsuite.at: Add incr05.at and
+       incr06.at.
+
+       * doc/Makefile.am (check-options): Improve rule.
+       * doc/tar.texi, NEWS: Update.
+
+2009-08-07  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Minor fixes.
+       * src/common.h (rebase_directory): New prototype.
+       * src/incremen.c (rebase_directory): Use replace_prefix.
+       * src/names.c (collect_and_sort_names): Abort if
+       hash_insert fails.
+
+       Improve listed incremental dumps.
+       The modified algorithm tries to avoid dumping the same
+       directory twice and ensures the order of the directories
+       in the resulting archive is the same, whatever their order
+       on the command line.  It also fixes the operation of
+       --listed-incremental -C.
+
+       * gnulib.modules: Add canonicalize
+       * src/common.h (incremental_level): New global.
+       (check_exclusion_tags): first argument is const.
+       (get_directory_contents): Add third argument.
+       (zap_slashes, normalize_filename): New prototypes.
+       (chdir_count): New prototype.
+       (WARN_VERBOSE_WARNINGS): New define.
+       (WARN_ALL): Exclude WARN_VERBOSE_WARNINGS.
+       * src/compare.c (diff_dumpdir): Update the call to
+       get_directory_contents.
+       * src/create.c (check_exclusion_tags): First argument is const.
+       Use ISSLASH and DIRECTORY_SEPARATOR instead of referring to '/'.
+
+       * src/incremen.c (struct directory): New member `caname'.
+       (hash_directory_name): Rename to
+       hash_directory_canonical_name. Operate
+       on the canonical name.
+       (compare_directory_names): Rename to
+       compare_directory_canonical_names.
+       Operate on the canonical name.
+       (make_directory): Take two arguments.
+       (free_directory): Free caname.
+       (attach_directory): Create caname.
+       (find_directory): Use caname for lookups.
+       (PD_VERBOSE): Remove.
+       (PD_FORCE_INIT): New define.
+       (procdir): First argument is const.
+       Reinitialize directory if PD_FORCE_INIT bit is set.
+       Do not use PD_VERBOSE or verbose_option for issuing warnings.
+       Rely on WARNOPT instead.
+       Always set *entry.
+       (scan_directory): Take three arguments. The third one is a boolean
+       which is true if the directory is explicitly mentioned on
+       the command
+       line.
+       (get_directory_contents): Remove.  Use scan_directory instead.
+       All callers updated.
+       (read_directory_file): Truncate the file if --level=0 is given.
+       * src/misc.c: Include canonicalize.h
+       (zap_slashes, normalize_filename): New functions.
+       (chdir_count): New function.
+       * src/names.c (add_hierarchy_to_namelist): Take three arguments,
+       as
+       get_directory_contents and scan_directory.
+       (collect_and_sort_names): Allow at most one -C, before file name
+       arguments.
+       Read directory file after eventual changing to another directory.
+       Avoid adding the same directory under different pathnames to
+       the list.
+       * src/tar.c: New option --level.
+
+       * tests/incr03.at, tests/incr04.at, tests/listed01.at,
+       tests/listed02.at, tests/rename01.at, tests/rename02.at,
+       tests/rename03.at: Update for new tar behavior.
+       * tests/multiv01.at: Do not use --listed-incremental.
+
+2009-08-05  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Forgotten to push src/warning.c
+
+       Implement the --warning option.
+       * src/warning.c: New file.
+       * src/Makefile.am: Add warning.c
+       * src/common.h: Provide definitions for warning classes.
+       (warning_option): New global.
+       (WARNOPT): New define.
+       (set_warning_option): New prototype.
+       * src/tar.c: New option `--warning'.
+       * src/compare.c: When applicable WARNOPT instead of WARN.
+       * src/create.c: Likewise.
+       * src/extract.c: Likewise.
+       * src/incremen.c: Likewise.
+       * src/list.c: Likewise.
+
+       * NEWS, doc/tar.texi: Update.
+
+2009-08-05  Carl Worth <cworth@cworth.org>
+
+       Fix descriptions of some options (tiny change)
+
+2009-08-05  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Fix backup handling and restoring file modes of existing
+       directories
+       * NEWS, THANKS: Update
+       * src/extract.c (extract_dir): reset status to 0 if the
+       directory already exists.
+       * src/misc.c (maybe_backup_file): Assign before_backup_name
+       and clear after_backup_name before checking if we really need
+       to backup the file.
+       * tests/backup01.at: New testcase.
+       * tests/extrac08.at: New testcase.
+       * tests/Makefile.am, tests/testsuite.at: Add extrac08.at and
+       backup01.at
+
+2009-07-30  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Fix hard links recognition with -c --remove-files
+       * src/create.c (dump_hard_link): Always look up in the link table
+       if remove_files_option is set. Patch suggested by Theodore Ts'o
+       <tytso@mit.edu>.
+       (check_links): Remove extra newline from the warning message.
+       * tests/link02.at, tests/link03.at: New testcases.
+       * tests/Makefile.am (TESTSUITE_AT): Add link02.at and link03.at
+       * tests/testsuite.at: Include link02.at and link03.at
+
+       Fix handling of hard link targets by -c --transform
+       * src/create.c (file_count_links): Transform link target
+       before the look up.
+       * tests/xform-h.at: New test case.
+       * tests/Makefile.am (TESTSUITE_AT): Add xform-h.at.
+       * tests/testsuite.at: Add xform-h.at
+
+2009-06-23  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Minor fix.
+       * src/extract.c (file_newer_p): Do not report error on ENOENT
+
+2009-06-19  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Remove rebox.el (reappeared after migration to Git)
+
+2009-06-18  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Remove files that were removed in CVS, but reappeared after
+       migration to Git
+
+2009-06-18  David Bartley  <dtbartle@csclub.uwaterloo.ca>
+
+       Fix Solaris bug where chmod fails if we don't have
+       PRIV_SYS_LINKDIR
+       * gnulib.modules: Add priv-set.
+       * src/extract.c (set_mode, extract_archive): Restore
+       PRIV_SYS_LINKDIR on chmod failure.
+       * src/tar.c (main): Drop PRIV_SYS_LINKDIR on startup.
+
+2009-06-18  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Ensure default behavior for SIGPIPE
+       * src/tar.c (main): Install default handler for SIGPIPE.
+       Proposed by Bastian Blank.
+
+2009-06-18  Eric Blake <ebb9@byu.net>
+
+       Follow autoconf recommendation for TESTSUITEFLAGS.
+       * tests/Makefile.am (check-local, installcheck-local): Honor
+       TESTSUITEFLAGS.
+
+2009-06-18  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Fix handling of sub-subprocess returns.
+       * src/system.c (wait_for_grandchild): New function.
+       (sys_child_open_for_compress)
+       (sys_child_open_for_uncompress): Use wait_for_grandchild
+       to manage grandchild return.
+
+2009-05-25  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Report record size only if the archive refers to a device.
+       * Makefile.am (INCLUDES): Add ../lib, for rmt-command.h
+       * src/buffer.c (short_read): Report the actual record size
+       only if the archive descriptor refers to a device.
+       * tests/pipe.at, tests/shortrec.at,
+       tests/sparsemvp.at: Reflect the above change.
+       * NEWS, configure.ac: Version 1.22.90
+
+2009-05-14  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Do not issue errors on existing files when given the -k option
+       * Makefile.am (dist-hook): Fix rule.
+       * src/extract.c (maybe_recoverable): Return three-state value.
+       (extract_dir): Skip extraction if maybe_recoverable indicates so.
+       (extract_file): Likewise.
+
+2009-05-12  Eric Blake <ebb9@byu.net>
+
+       Avoid undefined behavior
+       * src/xheader.c (xheader_set_keyword_equal): Pass correct type to
+       ctype macros.
+       * src/transform.c (run_case_conv): Likewise.
+
+2009-05-12  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Remove src/Makefile.in
+
+2009-03-12  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Bugfixes.
+       * bootstrap (symlink_to_dir): Fix symlink calculation.
+       * doc/tar.texi: Minor fixes by Victor Villa and Stepan Kasal.
+
+2009-03-07  Sergey Poznyakoff  <gray@gnu.org.ua>
+
+       Remove Makefile.in
+
+       Migrate to Git
+
 2009-03-05  Sergey Poznyakoff  <gray@gnu.org.ua>
 
        * src/incremen.c: --no-recursive works with --incremental.
 Local Variables:
 mode: change-log
 version-control: never
+buffer-read-only: t
 End:
diff --git a/INSTALL b/INSTALL
index 411f3878045f899b94cde296e442d44160119432..81fd332cef8812df383d283d3f16cad10ff10f42 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -2,10 +2,12 @@ Installation Instructions
 *************************
 
 Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
-2006, 2007, 2008 Free Software Foundation, Inc.
+2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 
-   This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
+   Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.  This file is offered as-is,
+without warranty of any kind.
 
 Basic Installation
 ==================
@@ -13,7 +15,11 @@ Basic Installation
    Briefly, the shell commands `./configure; make; make install' should
 configure, build, and install this package.  The following
 more-detailed instructions are generic; see the `README' file for
-instructions specific to this package.
+instructions specific to this package.  Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below.  The lack of an optional feature in a given package is not
+necessarily a bug.  More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
 
    The `configure' shell script attempts to guess correct values for
 various system-dependent variables used during compilation.  It uses
@@ -42,7 +48,7 @@ may remove or edit it.
 you want to change it or regenerate `configure' using a newer version
 of `autoconf'.
 
-The simplest way to compile this package is:
+   The simplest way to compile this package is:
 
   1. `cd' to the directory containing the package's source code and type
      `./configure' to configure the package for your system.
@@ -53,12 +59,22 @@ The simplest way to compile this package is:
   2. Type `make' to compile the package.
 
   3. Optionally, type `make check' to run any self-tests that come with
-     the package.
+     the package, generally using the just-built uninstalled binaries.
 
   4. Type `make install' to install the programs and any data files and
-     documentation.
-
-  5. You can remove the program binaries and object files from the
+     documentation.  When installing into a prefix owned by root, it is
+     recommended that the package be configured and built as a regular
+     user, and only the `make install' phase executed with root
+     privileges.
+
+  5. Optionally, type `make installcheck' to repeat any self-tests, but
+     this time using the binaries in their final installed location.
+     This target does not install anything.  Running this target as a
+     regular user, particularly if the prior `make install' required
+     root privileges, verifies that the installation completed
+     correctly.
+
+  6. You can remove the program binaries and object files from the
      source code directory by typing `make clean'.  To also remove the
      files that `configure' created (so you can compile the package for
      a different kind of computer), type `make distclean'.  There is
@@ -67,8 +83,15 @@ The simplest way to compile this package is:
      all sorts of other programs in order to regenerate files that came
      with the distribution.
 
-  6. Often, you can also type `make uninstall' to remove the installed
-     files again.
+  7. Often, you can also type `make uninstall' to remove the installed
+     files again.  In practice, not all packages have tested that
+     uninstallation works correctly, even though it is required by the
+     GNU Coding Standards.
+
+  8. Some packages, particularly those that use Automake, provide `make
+     distcheck', which can by used by developers to test that all other
+     targets like `make install' and `make uninstall' work correctly.
+     This target is generally not run by end users.
 
 Compilers and Options
 =====================
@@ -93,7 +116,8 @@ same time, by placing the object files for each architecture in their
 own directory.  To do this, you can use GNU `make'.  `cd' to the
 directory where you want the object files and executables to go and run
 the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
+source code in the directory that `configure' is in and in `..'.  This
+is known as a "VPATH" build.
 
    With a non-GNU `make', it is safer to compile the package for one
 architecture at a time in the source code directory.  After you have
@@ -120,7 +144,8 @@ Installation Names
    By default, `make install' installs the package's commands under
 `/usr/local/bin', include files under `/usr/local/include', etc.  You
 can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX'.
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
 
    You can specify separate installation prefixes for
 architecture-specific files and architecture-independent files.  If you
@@ -131,15 +156,46 @@ Documentation and other data files still use the regular prefix.
    In addition, if you use an unusual directory layout you can give
 options like `--bindir=DIR' to specify different values for particular
 kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
+you can set and what kinds of files go in them.  In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+   The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+   The first method involves providing an override variable for each
+affected directory.  For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'.  Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated.  The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+   The second method involves providing the `DESTDIR' variable.  For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names.  The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters.  On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
 
    If the package supports it, you can cause programs to be installed
 with an extra prefix or suffix on their names by giving `configure' the
 option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
 
-Optional Features
-=================
-
    Some packages pay attention to `--enable-FEATURE' options to
 `configure', where FEATURE indicates an optional part of the package.
 They may also pay attention to `--with-PACKAGE' options, where PACKAGE
@@ -152,6 +208,13 @@ find the X include and library files automatically, but if it doesn't,
 you can use the `configure' options `--x-includes=DIR' and
 `--x-libraries=DIR' to specify their locations.
 
+   Some packages offer the ability to configure how verbose the
+execution of `make' will be.  For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
 Particular systems
 ==================
 
@@ -199,7 +262,8 @@ type, such as `sun4', or a canonical name which has the form:
 
 where SYSTEM can have one of these forms:
 
-     OS KERNEL-OS
+     OS
+     KERNEL-OS
 
    See the file `config.sub' for the possible values of each field.  If
 `config.sub' isn't included in this package, then this package doesn't
diff --git a/Make.rules b/Make.rules
new file mode 100644 (file)
index 0000000..a1de301
--- /dev/null
@@ -0,0 +1,69 @@
+# This file is part of GNU paxutils
+#
+# Copyright (c) 2009 Free Software Foundation, Inc.
+#
+# Written by Sergey Poznyakoff
+#
+# GNU Paxutils 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.
+#
+# GNU Paxutils 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 GNU Paxutils; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# This file is part of GNU paxutils
+#
+# Copyright (c) 2009 Free Software Foundation, Inc.
+#
+# Written by Sergey Poznyakoff
+#
+# GNU Paxutils 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.
+#
+# GNU Paxutils 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 GNU Paxutils; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Define the following variables in order to use the ChangeLog rule below:
+#  prev_change_log  [optional]  Name of the previous ChangeLog file.
+#  gen_start_date   [optional]  Start ChangeLog from this date. 
+#  changelog_dir    [mandatory] Directory where to create ChangeLog
+
+.PHONY: ChangeLog
+ChangeLog: 
+       if test -d .git; then                                              \
+         cmd=$(top_srcdir)/build-aux/gitlog-to-changelog;                 \
+         if test -n "$(gen_start_date)"; then                             \
+           cmd="$$cmd --since=\"$(gen_start_date)\"";                     \
+         fi;                                                              \
+         $$cmd |                                                          \
+            sed '/<unknown>$$/d' | fmt -s > $(changelog_dir)/cl-t;         \
+          if test -n "$(prev_change_log)" && test -f "$(prev_change_log)"; \
+         then                                                             \
+           echo "" >> $(changelog_dir)/cl-t;                              \
+           cat "$(prev_change_log)" |                                     \
+             sed '/^Local Variables:/,/^End:/d' >> $(changelog_dir)/cl-t; \
+         fi;                                                              \
+         echo "Local Variables:" >> $(changelog_dir)/cl-t;                \
+         echo "mode: change-log" >> $(changelog_dir)/cl-t;                \
+         echo "version-control: never"  >> $(changelog_dir)/cl-t;         \
+         echo "buffer-read-only: t" >> $(changelog_dir)/cl-t;             \
+         echo "End:" >> $(changelog_dir)/cl-t;                            \
+         rm -f $(changelog_dir)/ChangeLog;                                \
+         mv $(changelog_dir)/cl-t $(changelog_dir)/ChangeLog;             \
+       fi
+
index 61528cabf38350502bf5cc07180cdd5eda56bb52..df8ea4c767647feffe922d764108869e19f423f7 100644 (file)
@@ -1,7 +1,7 @@
 # Main Makefile for GNU tar.
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2003, 2007 Free
-# Software Foundation, Inc.
+# Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2003, 2007,
+# 2009 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
 ## 02110-1301, USA.
 
 ACLOCAL_AMFLAGS = -I m4
-EXTRA_DIST = ChangeLog.1 PORTS
-SUBDIRS = doc lib rmt src scripts po tests
+EXTRA_DIST = ChangeLog.1 Make.rules
+SUBDIRS = doc gnu lib rmt src scripts po tests
 
 dist-hook: 
+       $(MAKE) changelog_dir=$(distdir) ChangeLog
        -rm -f $(distdir).cpio
        find $(distdir) | cpio -Hcrc -o | \
           GZIP=$(GZIP_ENV) gzip -c > $(distdir).cpio.gz
 
 distclean-local:
        -rm -f $(distdir).cpio.gz
+
+include Make.rules
+
+gen_start_date = 2009-03-06
+prev_change_log = ChangeLog.CVS
+changelog_dir = .
+
+
index 3404b1a96a79f15d282d0c93314f4525bd090357..17bd117846fd2b4050915a3cafab33d8d5d57b09 100644 (file)
@@ -1,8 +1,9 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 # Main Makefile for GNU tar.
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2003, 2007 Free
-# Software Foundation, Inc.
+# Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2003, 2007,
+# 2009 Free Software Foundation, Inc.
+
+# This file is part of GNU paxutils
+#
+# Copyright (c) 2009 Free Software Foundation, Inc.
+#
+# Written by Sergey Poznyakoff
+#
+# GNU Paxutils 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.
+#
+# GNU Paxutils 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 GNU Paxutils; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# This file is part of GNU paxutils
+#
+# Copyright (c) 2009 Free Software Foundation, Inc.
+#
+# Written by Sergey Poznyakoff
+#
+# GNU Paxutils 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.
+#
+# GNU Paxutils 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 GNU Paxutils; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Define the following variables in order to use the ChangeLog rule below:
+#  prev_change_log  [optional]  Name of the previous ChangeLog file.
+#  gen_start_date   [optional]  Start ChangeLog from this date. 
+#  changelog_dir    [mandatory] Directory where to create ChangeLog
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
@@ -36,77 +83,85 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-subdir = .
-DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
-       $(srcdir)/Makefile.in $(srcdir)/config.hin \
-       $(top_srcdir)/configure ABOUT-NLS AUTHORS COPYING ChangeLog \
-       INSTALL NEWS THANKS TODO build-aux/compile \
-       build-aux/config.guess build-aux/config.rpath \
-       build-aux/config.sub build-aux/depcomp build-aux/install-sh \
-       build-aux/mdate-sh build-aux/missing build-aux/mkinstalldirs \
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Make.rules \
+       $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(srcdir)/config.h.in $(top_srcdir)/configure ABOUT-NLS \
+       AUTHORS COPYING ChangeLog INSTALL NEWS THANKS TODO \
+       build-aux/compile build-aux/config.guess \
+       build-aux/config.rpath build-aux/config.sub build-aux/depcomp \
+       build-aux/install-sh build-aux/mdate-sh build-aux/missing \
        build-aux/texinfo.tex build-aux/ylwrap
+subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
        $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argmatch.m4 \
        $(top_srcdir)/m4/argp.m4 $(top_srcdir)/m4/backupfile.m4 \
        $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \
-       $(top_srcdir)/m4/canonicalize-lgpl.m4 \
+       $(top_srcdir)/m4/canonicalize.m4 \
        $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/chown.m4 \
        $(top_srcdir)/m4/clock_time.m4 \
        $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \
        $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
-       $(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/dirent_h.m4 \
-       $(top_srcdir)/m4/dirfd.m4 $(top_srcdir)/m4/dirname.m4 \
-       $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \
-       $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eealloc.m4 \
-       $(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
-       $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exclude.m4 \
-       $(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
+       $(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/dirent-safer.m4 \
+       $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \
+       $(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dos.m4 \
+       $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+       $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+       $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+       $(top_srcdir)/m4/exclude.m4 $(top_srcdir)/m4/extensions.m4 \
        $(top_srcdir)/m4/fchdir.m4 $(top_srcdir)/m4/fclose.m4 \
-       $(top_srcdir)/m4/fcntl-safer.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+       $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \
+       $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \
        $(top_srcdir)/m4/fileblocks.m4 $(top_srcdir)/m4/float_h.m4 \
        $(top_srcdir)/m4/fnmatch.m4 $(top_srcdir)/m4/fpending.m4 \
        $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftruncate.m4 \
        $(top_srcdir)/m4/getcwd-abort-bug.m4 \
        $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \
        $(top_srcdir)/m4/getdate.m4 $(top_srcdir)/m4/getdelim.m4 \
-       $(top_srcdir)/m4/getline.m4 $(top_srcdir)/m4/getopt.m4 \
-       $(top_srcdir)/m4/getpagesize.m4 $(top_srcdir)/m4/gettext.m4 \
-       $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \
-       $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \
+       $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getline.m4 \
+       $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \
+       $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettime.m4 \
+       $(top_srcdir)/m4/gettimeofday.m4 $(top_srcdir)/m4/glibc21.m4 \
+       $(top_srcdir)/m4/gnulib-common.m4 \
        $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/hash.m4 \
        $(top_srcdir)/m4/human.m4 $(top_srcdir)/m4/iconv.m4 \
        $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \
        $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
        $(top_srcdir)/m4/inttostr.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
        $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
-       $(top_srcdir)/m4/lchown.m4 $(top_srcdir)/m4/lib-ld.m4 \
-       $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+       $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/lchown.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 \
        $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
        $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \
        $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \
        $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/malloc.m4 \
        $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/mbchar.m4 \
        $(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrtowc.m4 \
-       $(top_srcdir)/m4/mbscasecmp.m4 $(top_srcdir)/m4/mbsinit.m4 \
-       $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mempcpy.m4 \
-       $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/mkdtemp.m4 \
-       $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/modechange.m4 \
-       $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nls.m4 \
-       $(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/openat.m4 \
-       $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/paxutils.m4 \
-       $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf.m4 \
+       $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbsrtowcs.m4 \
+       $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/memchr.m4 \
+       $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/memrchr.m4 \
+       $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkdtemp.m4 \
+       $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \
+       $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/modechange.m4 \
+       $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nl_langinfo.m4 \
+       $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/open.m4 \
+       $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/pathmax.m4 \
+       $(top_srcdir)/m4/paxutils.m4 $(top_srcdir)/m4/po.m4 \
+       $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/priv-set.m4 \
        $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/quote.m4 \
        $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \
        $(top_srcdir)/m4/readlink.m4 $(top_srcdir)/m4/realloc.m4 \
-       $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rmt.m4 \
-       $(top_srcdir)/m4/rpmatch.m4 $(top_srcdir)/m4/rtapelib.m4 \
-       $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/safe-write.m4 \
+       $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rmdir.m4 \
+       $(top_srcdir)/m4/rmt.m4 $(top_srcdir)/m4/rpmatch.m4 \
+       $(top_srcdir)/m4/rtapelib.m4 $(top_srcdir)/m4/safe-read.m4 \
+       $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/same.m4 \
        $(top_srcdir)/m4/save-cwd.m4 $(top_srcdir)/m4/savedir.m4 \
        $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/size_max.m4 \
        $(top_srcdir)/m4/sleep.m4 $(top_srcdir)/m4/snprintf.m4 \
        $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
-       $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \
+       $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \
+       $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
        $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
        $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
        $(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strcase.m4 \
@@ -122,24 +177,33 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
        $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \
        $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \
        $(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-       $(top_srcdir)/m4/unlinkdir.m4 $(top_srcdir)/m4/unlocked-io.m4 \
-       $(top_srcdir)/m4/utimbuf.m4 $(top_srcdir)/m4/utime.m4 \
-       $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
-       $(top_srcdir)/m4/utimes.m4 $(top_srcdir)/m4/vasnprintf.m4 \
-       $(top_srcdir)/m4/vsnprintf.m4 $(top_srcdir)/m4/wchar.m4 \
+       $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+       $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utimbuf.m4 \
+       $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes.m4 \
+       $(top_srcdir)/m4/vasnprintf.m4 $(top_srcdir)/m4/vasprintf.m4 \
+       $(top_srcdir)/m4/version-etc.m4 $(top_srcdir)/m4/vsnprintf.m4 \
+       $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \
        $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
-       $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wcwidth.m4 \
+       $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
        $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/write.m4 \
        $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xgetcwd.m4 \
        $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrndup.m4 \
-       $(top_srcdir)/m4/xstrtol.m4 $(top_srcdir)/configure.ac
+       $(top_srcdir)/m4/xstrtol.m4 $(top_srcdir)/m4/xvasprintf.m4 \
+       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
  configure.lineno config.status.lineno
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = config.h
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
 SOURCES =
 DIST_SOURCES =
 RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
@@ -151,6 +215,9 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
        ps-recursive uninstall-recursive
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
   distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+       distdir dist dist-all distcheck
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
@@ -158,9 +225,34 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
 am__remove_distdir = \
-  { test ! -d $(distdir) \
-    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr $(distdir); }; }
+  { test ! -d "$(distdir)" \
+    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr "$(distdir)"; }; }
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
 DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 \
        $(distdir).shar.gz
 GZIP_ENV = --best
@@ -170,6 +262,7 @@ ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
 ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -198,7 +291,6 @@ DEFAULT_RMT_COMMAND = @DEFAULT_RMT_COMMAND@
 DEFAULT_RMT_DIR = @DEFAULT_RMT_DIR@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
-DIRENT_H = @DIRENT_H@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
@@ -211,7 +303,6 @@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
 EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
 ERRNO_H = @ERRNO_H@
 EXEEXT = @EXEEXT@
-FCNTL_H = @FCNTL_H@
 FLOAT_H = @FLOAT_H@
 FNMATCH_H = @FNMATCH_H@
 GETOPT_H = @GETOPT_H@
@@ -223,45 +314,59 @@ GNULIB_ALPHASORT = @GNULIB_ALPHASORT@
 GNULIB_ATOLL = @GNULIB_ATOLL@
 GNULIB_BTOWC = @GNULIB_BTOWC@
 GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
 GNULIB_CHOWN = @GNULIB_CHOWN@
 GNULIB_CLOSE = @GNULIB_CLOSE@
 GNULIB_DIRFD = @GNULIB_DIRFD@
 GNULIB_DPRINTF = @GNULIB_DPRINTF@
 GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_DUP3 = @GNULIB_DUP3@
 GNULIB_ENVIRON = @GNULIB_ENVIRON@
 GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
+GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
 GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
+GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
 GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FCNTL = @GNULIB_FCNTL@
+GNULIB_FDOPENDIR = @GNULIB_FDOPENDIR@
 GNULIB_FFLUSH = @GNULIB_FFLUSH@
 GNULIB_FOPEN = @GNULIB_FOPEN@
 GNULIB_FPRINTF = @GNULIB_FPRINTF@
 GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
 GNULIB_FPUTC = @GNULIB_FPUTC@
 GNULIB_FPUTS = @GNULIB_FPUTS@
 GNULIB_FREOPEN = @GNULIB_FREOPEN@
 GNULIB_FSEEK = @GNULIB_FSEEK@
 GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FSTATAT = @GNULIB_FSTATAT@
 GNULIB_FSYNC = @GNULIB_FSYNC@
 GNULIB_FTELL = @GNULIB_FTELL@
 GNULIB_FTELLO = @GNULIB_FTELLO@
 GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
 GNULIB_FWRITE = @GNULIB_FWRITE@
 GNULIB_GETCWD = @GNULIB_GETCWD@
 GNULIB_GETDELIM = @GNULIB_GETDELIM@
 GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
 GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
 GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
 GNULIB_GETLINE = @GNULIB_GETLINE@
 GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
 GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
 GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
 GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
 GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
 GNULIB_IMAXABS = @GNULIB_IMAXABS@
 GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
 GNULIB_LCHMOD = @GNULIB_LCHMOD@
 GNULIB_LCHOWN = @GNULIB_LCHOWN@
 GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
 GNULIB_LSEEK = @GNULIB_LSEEK@
 GNULIB_LSTAT = @GNULIB_LSTAT@
 GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
@@ -284,15 +389,31 @@ GNULIB_MBSSEP = @GNULIB_MBSSEP@
 GNULIB_MBSSPN = @GNULIB_MBSSPN@
 GNULIB_MBSSTR = @GNULIB_MBSSTR@
 GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
 GNULIB_MEMMEM = @GNULIB_MEMMEM@
 GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
 GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
 GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKFIFO = @GNULIB_MKFIFO@
+GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
+GNULIB_MKNOD = @GNULIB_MKNOD@
+GNULIB_MKNODAT = @GNULIB_MKNODAT@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
 GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_MKTIME = @GNULIB_MKTIME@
+GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
+GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@
 GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
 GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
 GNULIB_OPEN = @GNULIB_OPEN@
+GNULIB_OPENAT = @GNULIB_OPENAT@
 GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_PREAD = @GNULIB_PREAD@
 GNULIB_PRINTF = @GNULIB_PRINTF@
 GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
 GNULIB_PUTC = @GNULIB_PUTC@
@@ -302,13 +423,20 @@ GNULIB_PUTS = @GNULIB_PUTS@
 GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
 GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
 GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
 GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_RMDIR = @GNULIB_RMDIR@
 GNULIB_RPMATCH = @GNULIB_RPMATCH@
 GNULIB_SCANDIR = @GNULIB_SCANDIR@
 GNULIB_SETENV = @GNULIB_SETENV@
 GNULIB_SLEEP = @GNULIB_SLEEP@
 GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
 GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_STAT = @GNULIB_STAT@
 GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
 GNULIB_STPCPY = @GNULIB_STPCPY@
 GNULIB_STPNCPY = @GNULIB_STPNCPY@
@@ -319,6 +447,7 @@ GNULIB_STRERROR = @GNULIB_STRERROR@
 GNULIB_STRNDUP = @GNULIB_STRNDUP@
 GNULIB_STRNLEN = @GNULIB_STRNLEN@
 GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRPTIME = @GNULIB_STRPTIME@
 GNULIB_STRSEP = @GNULIB_STRSEP@
 GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
 GNULIB_STRSTR = @GNULIB_STRSTR@
@@ -329,8 +458,16 @@ GNULIB_STRTOLL = @GNULIB_STRTOLL@
 GNULIB_STRTOULL = @GNULIB_STRTOULL@
 GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
 GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_SYMLINK = @GNULIB_SYMLINK@
+GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
+GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
 GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
+GNULIB_UNLINK = @GNULIB_UNLINK@
+GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
 GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_USLEEP = @GNULIB_USLEEP@
+GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
 GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
 GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
 GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
@@ -350,8 +487,11 @@ HAVE_ALPHASORT = @HAVE_ALPHASORT@
 HAVE_ATOLL = @HAVE_ATOLL@
 HAVE_BTOWC = @HAVE_BTOWC@
 HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
 HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@
 HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
 HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
 HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
 HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
@@ -376,37 +516,68 @@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
 HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
 HAVE_DPRINTF = @HAVE_DPRINTF@
 HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
 HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
-HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDOPENDIR = @HAVE_FDOPENDIR@
+HAVE_FSTATAT = @HAVE_FSTATAT@
 HAVE_FSYNC = @HAVE_FSYNC@
-HAVE_FTELLO = @HAVE_FTELLO@
 HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
 HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@
 HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
 HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
 HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
 HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
 HAVE_GETUSERSHELL = @HAVE_GETUSERSHELL@
 HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
 HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
 HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
 HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
 HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
 HAVE_LSTAT = @HAVE_LSTAT@
 HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
 HAVE_MBRLEN = @HAVE_MBRLEN@
 HAVE_MBRTOWC = @HAVE_MBRTOWC@
 HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
 HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
 HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
 HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
 HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
 HAVE_OS_H = @HAVE_OS_H@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_PREAD = @HAVE_PREAD@
 HAVE_RANDOM_H = @HAVE_RANDOM_H@
 HAVE_RANDOM_R = @HAVE_RANDOM_R@
 HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
 HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
 HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
 HAVE_RPMATCH = @HAVE_RPMATCH@
 HAVE_SCANDIR = @HAVE_SCANDIR@
 HAVE_SETENV = @HAVE_SETENV@
@@ -420,7 +591,6 @@ HAVE_STPNCPY = @HAVE_STPNCPY@
 HAVE_STRCASECMP = @HAVE_STRCASECMP@
 HAVE_STRCASESTR = @HAVE_STRCASESTR@
 HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
-HAVE_STRNDUP = @HAVE_STRNDUP@
 HAVE_STRPBRK = @HAVE_STRPBRK@
 HAVE_STRSEP = @HAVE_STRSEP@
 HAVE_STRTOD = @HAVE_STRTOD@
@@ -429,6 +599,8 @@ HAVE_STRTOULL = @HAVE_STRTOULL@
 HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
 HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
 HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
 HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@
 HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
 HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
@@ -437,11 +609,15 @@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
 HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
 HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
 HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
 HAVE_UNSETENV = @HAVE_UNSETENV@
 HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
 HAVE_VASPRINTF = @HAVE_VASPRINTF@
 HAVE_VDPRINTF = @HAVE_VDPRINTF@
 HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
 HAVE_WCRTOMB = @HAVE_WCRTOMB@
 HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
 HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
@@ -459,16 +635,14 @@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
 INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
 INTLLIBS = @INTLLIBS@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
-INTTYPES_H = @INTTYPES_H@
 LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
-LIBTAR_LIBDEPS = @LIBTAR_LIBDEPS@
-LIBTAR_LTLIBDEPS = @LIBTAR_LTLIBDEPS@
 LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
-LIB_CLOSE = @LIB_CLOSE@
 LIB_SETSOCKOPT = @LIB_SETSOCKOPT@
 LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
 LOCALE_FR = @LOCALE_FR@
@@ -483,12 +657,36 @@ MKDIR_P = @MKDIR_P@
 MSGFMT = @MSGFMT@
 MSGFMT_015 = @MSGFMT_015@
 MSGMERGE = @MSGMERGE@
+NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
 NEXT_DIRENT_H = @NEXT_DIRENT_H@
 NEXT_ERRNO_H = @NEXT_ERRNO_H@
 NEXT_FCNTL_H = @NEXT_FCNTL_H@
 NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
 NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
 NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
 NEXT_STDINT_H = @NEXT_STDINT_H@
 NEXT_STDIO_H = @NEXT_STDIO_H@
 NEXT_STDLIB_H = @NEXT_STDLIB_H@
@@ -517,25 +715,40 @@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
 PU_RMT_PROG = @PU_RMT_PROG@
 RANLIB = @RANLIB@
 REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
 REPLACE_CHOWN = @REPLACE_CHOWN@
 REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@
 REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
 REPLACE_FCHDIR = @REPLACE_FCHDIR@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
 REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@
 REPLACE_FFLUSH = @REPLACE_FFLUSH@
 REPLACE_FOPEN = @REPLACE_FOPEN@
 REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
 REPLACE_FREOPEN = @REPLACE_FREOPEN@
 REPLACE_FSEEK = @REPLACE_FSEEK@
 REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
 REPLACE_FTELL = @REPLACE_FTELL@
 REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
 REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
 REPLACE_GETLINE = @REPLACE_GETLINE@
 REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
 REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
 REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
 REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
 REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
 REPLACE_LSEEK = @REPLACE_LSEEK@
 REPLACE_LSTAT = @REPLACE_LSTAT@
@@ -545,26 +758,53 @@ REPLACE_MBSINIT = @REPLACE_MBSINIT@
 REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
 REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
 REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
 REPLACE_MEMMEM = @REPLACE_MEMMEM@
 REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKNOD = @REPLACE_MKNOD@
 REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
 REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
 REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
 REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_OPENDIR = @REPLACE_OPENDIR@
 REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_PREAD = @REPLACE_PREAD@
 REPLACE_PRINTF = @REPLACE_PRINTF@
 REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SLEEP = @REPLACE_SLEEP@
 REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
 REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
 REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
 REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
 REPLACE_STRDUP = @REPLACE_STRDUP@
 REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
 REPLACE_STRPTIME = @REPLACE_STRPTIME@
 REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
 REPLACE_STRSTR = @REPLACE_STRSTR@
 REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
 REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
 REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
 REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
 REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
@@ -572,6 +812,7 @@ REPLACE_VPRINTF = @REPLACE_VPRINTF@
 REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
 REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
 REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
 REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
 REPLACE_WCTOB = @REPLACE_WCTOB@
 REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
@@ -582,22 +823,20 @@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
 SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
 STDARG_H = @STDARG_H@
 STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
 STDINT_H = @STDINT_H@
 STRIP = @STRIP@
 SYSEXITS_H = @SYSEXITS_H@
-SYS_STAT_H = @SYS_STAT_H@
-SYS_TIME_H = @SYS_TIME_H@
 SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
 TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
 UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
 UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
 UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
 USE_NLS = @USE_NLS@
 VERSION = @VERSION@
-VOID_UNSETENV = @VOID_UNSETENV@
-WCHAR_H = @WCHAR_H@
 WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
-WCTYPE_H = @WCTYPE_H@
 WINT_T_SUFFIX = @WINT_T_SUFFIX@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
@@ -655,30 +894,34 @@ sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 ACLOCAL_AMFLAGS = -I m4
-EXTRA_DIST = ChangeLog.1 PORTS
-SUBDIRS = doc lib rmt src scripts po tests
+EXTRA_DIST = ChangeLog.1 Make.rules
+SUBDIRS = doc gnu lib rmt src scripts po tests
+gen_start_date = 2009-03-06
+prev_change_log = ChangeLog.CVS
+changelog_dir = .
 all: config.h
        $(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 .SUFFIXES:
 am--refresh:
        @:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/Make.rules $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
-             echo ' cd $(srcdir) && $(AUTOMAKE) --gnits '; \
-             cd $(srcdir) && $(AUTOMAKE) --gnits  \
+             echo ' cd $(srcdir) && $(AUTOMAKE) --gnits'; \
+             $(am__cd) $(srcdir) && $(AUTOMAKE) --gnits \
                && exit 0; \
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  Makefile'; \
-       cd $(top_srcdir) && \
-         $(AUTOMAKE) --gnits  Makefile
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnits Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
@@ -694,9 +937,10 @@ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENC
        $(SHELL) ./config.status --recheck
 
 $(top_srcdir)/configure:  $(am__configure_deps)
-       cd $(srcdir) && $(AUTOCONF)
+       $(am__cd) $(srcdir) && $(AUTOCONF)
 $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-       cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+       $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
 
 config.h: stamp-h1
        @if test ! -f $@; then \
@@ -704,11 +948,11 @@ config.h: stamp-h1
          $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
        else :; fi
 
-stamp-h1: $(srcdir)/config.hin $(top_builddir)/config.status
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
        @rm -f stamp-h1
        cd $(top_builddir) && $(SHELL) ./config.status config.h
-$(srcdir)/config.hin:  $(am__configure_deps) 
-       cd $(top_srcdir) && $(AUTOHEADER)
+$(srcdir)/config.h.in:  $(am__configure_deps) 
+       ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
        rm -f stamp-h1
        touch $@
 
@@ -722,7 +966,7 @@ distclean-hdr:
 #     (which will cause the Makefiles to be regenerated when you run `make');
 # (2) otherwise, pass the desired values on the `make' command line.
 $(RECURSIVE_TARGETS):
-       @failcom='exit 1'; \
+       @fail= failcom='exit 1'; \
        for f in x $$MAKEFLAGS; do \
          case $$f in \
            *=* | --[!k]*);; \
@@ -739,7 +983,7 @@ $(RECURSIVE_TARGETS):
          else \
            local_target="$$target"; \
          fi; \
-         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
          || eval $$failcom; \
        done; \
        if test "$$dot_seen" = "no"; then \
@@ -747,7 +991,7 @@ $(RECURSIVE_TARGETS):
        fi; test -z "$$fail"
 
 $(RECURSIVE_CLEAN_TARGETS):
-       @failcom='exit 1'; \
+       @fail= failcom='exit 1'; \
        for f in x $$MAKEFLAGS; do \
          case $$f in \
            *=* | --[!k]*);; \
@@ -773,16 +1017,16 @@ $(RECURSIVE_CLEAN_TARGETS):
          else \
            local_target="$$target"; \
          fi; \
-         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
          || eval $$failcom; \
        done && test -z "$$fail"
 tags-recursive:
        list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
        done
 ctags-recursive:
        list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
        done
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
@@ -790,14 +1034,14 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
        unique=`for i in $$list; do \
            if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
          done | \
-         $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
              END { if (nonempty) { for (i in files) print i; }; }'`; \
        mkid -fID $$unique
 tags: TAGS
 
-TAGS: tags-recursive $(HEADERS) $(SOURCES) config.hin $(TAGS_DEPENDENCIES) \
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
                $(TAGS_FILES) $(LISP)
-       tags=; \
+       set x; \
        here=`pwd`; \
        if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
          include_option=--etags-include; \
@@ -809,38 +1053,43 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.hin $(TAGS_DEPENDENCIES) \
        list='$(SUBDIRS)'; for subdir in $$list; do \
          if test "$$subdir" = .; then :; else \
            test ! -f $$subdir/TAGS || \
-             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
          fi; \
        done; \
-       list='$(SOURCES) $(HEADERS) config.hin $(LISP) $(TAGS_FILES)'; \
+       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
        unique=`for i in $$list; do \
            if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
          done | \
          $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
              END { if (nonempty) { for (i in files) print i; }; }'`; \
-       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
-         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-           $$tags $$unique; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
        fi
 ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.hin $(TAGS_DEPENDENCIES) \
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
                $(TAGS_FILES) $(LISP)
-       tags=; \
-       list='$(SOURCES) $(HEADERS) config.hin $(LISP) $(TAGS_FILES)'; \
+       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
        unique=`for i in $$list; do \
            if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
          done | \
          $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
              END { if (nonempty) { for (i in files) print i; }; }'`; \
-       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+       test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-            $$tags $$unique
+            $$unique
 
 GTAGS:
        here=`$(am__cd) $(top_builddir) && pwd` \
-         && cd $(top_srcdir) \
-         && gtags -i $(GTAGS_ARGS) $$here
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -853,7 +1102,7 @@ distdir: $(DISTFILES)
          exit 1;; \
        esac
        $(am__remove_distdir)
-       test -d $(distdir) || mkdir $(distdir)
+       test -d "$(distdir)" || mkdir "$(distdir)"
        @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
        topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
        list='$(DISTFILES)'; \
@@ -869,29 +1118,44 @@ distdir: $(DISTFILES)
          if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
          if test -d $$d/$$file; then \
            dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
            if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
            fi; \
-           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
          else \
-           test -f $(distdir)/$$file \
-           || cp -p $$d/$$file $(distdir)/$$file \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
            || exit 1; \
          fi; \
        done
-       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
          if test "$$subdir" = .; then :; else \
            test -d "$(distdir)/$$subdir" \
            || $(MKDIR_P) "$(distdir)/$$subdir" \
            || exit 1; \
-           distdir=`$(am__cd) $(distdir) && pwd`; \
-           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
-           (cd $$subdir && \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
              $(MAKE) $(AM_MAKEFLAGS) \
-               top_distdir="$$top_distdir" \
-               distdir="$$distdir/$$subdir" \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
                am__remove_distdir=: \
                am__skip_length_check=: \
+               am__skip_mode_fix=: \
                distdir) \
              || exit 1; \
          fi; \
@@ -899,11 +1163,13 @@ distdir: $(DISTFILES)
        $(MAKE) $(AM_MAKEFLAGS) \
          top_distdir="$(top_distdir)" distdir="$(distdir)" \
          dist-hook
-       -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+       -test -n "$(am__skip_mode_fix)" \
+       || find "$(distdir)" -type d ! -perm -755 \
+               -exec chmod u+rwx,go+rx {} \; -o \
          ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
          ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
          ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
-       || chmod -R a+r $(distdir)
+       || chmod -R a+r "$(distdir)"
 dist-gzip: distdir
        tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
        $(am__remove_distdir)
@@ -915,6 +1181,10 @@ dist-lzma: distdir
        tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
        $(am__remove_distdir)
 
+dist-xz: distdir
+       tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+       $(am__remove_distdir)
+
 dist-tarZ: distdir
        tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
        $(am__remove_distdir)
@@ -939,15 +1209,17 @@ dist dist-all: distdir
 distcheck: dist
        case '$(DIST_ARCHIVES)' in \
        *.tar.gz*) \
-         GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+         GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
        *.tar.bz2*) \
-         bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+         bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
        *.tar.lzma*) \
-         unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
+         lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+       *.tar.xz*) \
+         xz -dc $(distdir).tar.xz | $(am__untar) ;;\
        *.tar.Z*) \
          uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
        *.shar.gz*) \
-         GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+         GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
        *.zip*) \
          unzip $(distdir).zip ;;\
        esac
@@ -955,9 +1227,11 @@ distcheck: dist
        mkdir $(distdir)/_build
        mkdir $(distdir)/_inst
        chmod a-w $(distdir)
+       test -d $(distdir)/_build || exit 0; \
        dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
          && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
-         && cd $(distdir)/_build \
+         && am__cwd=`pwd` \
+         && $(am__cd) $(distdir)/_build \
          && ../configure --srcdir=.. --prefix="$$dc_install_base" \
            $(DISTCHECK_CONFIGURE_FLAGS) \
          && $(MAKE) $(AM_MAKEFLAGS) \
@@ -979,13 +1253,15 @@ distcheck: dist
          && rm -rf "$$dc_destdir" \
          && $(MAKE) $(AM_MAKEFLAGS) dist \
          && rm -rf $(DIST_ARCHIVES) \
-         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+         && cd "$$am__cwd" \
+         || exit 1
        $(am__remove_distdir)
        @(echo "$(distdir) archives ready for distribution: "; \
          list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
          sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
 distuninstallcheck:
-       @cd $(distuninstallcheck_dir) \
+       @$(am__cd) '$(distuninstallcheck_dir)' \
        && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
           || { echo "ERROR: files left after uninstall:" ; \
                if test -n "$(DESTDIR)"; then \
@@ -1027,6 +1303,7 @@ clean-generic:
 
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
@@ -1047,6 +1324,8 @@ dvi-am:
 
 html: html-recursive
 
+html-am:
+
 info: info-recursive
 
 info-am:
@@ -1055,18 +1334,28 @@ install-data-am:
 
 install-dvi: install-dvi-recursive
 
+install-dvi-am:
+
 install-exec-am:
 
 install-html: install-html-recursive
 
+install-html-am:
+
 install-info: install-info-recursive
 
+install-info-am:
+
 install-man:
 
 install-pdf: install-pdf-recursive
 
+install-pdf-am:
+
 install-ps: install-ps-recursive
 
+install-ps-am:
+
 installcheck-am:
 
 maintainer-clean: maintainer-clean-recursive
@@ -1089,33 +1378,59 @@ ps-am:
 
 uninstall-am:
 
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
-       install-strip
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
+       ctags-recursive install-am install-strip tags-recursive
 
 .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
        all all-am am--refresh check check-am clean clean-generic \
        ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
-       dist-hook dist-lzma dist-shar dist-tarZ dist-zip distcheck \
-       distclean distclean-generic distclean-hdr distclean-local \
-       distclean-tags distcleancheck distdir distuninstallcheck dvi \
-       dvi-am html html-am info info-am install install-am \
-       install-data install-data-am install-dvi install-dvi-am \
-       install-exec install-exec-am install-html install-html-am \
-       install-info install-info-am install-man install-pdf \
-       install-pdf-am install-ps install-ps-am install-strip \
-       installcheck installcheck-am installdirs installdirs-am \
-       maintainer-clean maintainer-clean-generic mostlyclean \
-       mostlyclean-generic pdf pdf-am ps ps-am tags tags-recursive \
-       uninstall uninstall-am
+       dist-hook dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
+       distcheck distclean distclean-generic distclean-hdr \
+       distclean-local distclean-tags distcleancheck distdir \
+       distuninstallcheck dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
+       tags-recursive uninstall uninstall-am
 
 
 dist-hook: 
+       $(MAKE) changelog_dir=$(distdir) ChangeLog
        -rm -f $(distdir).cpio
        find $(distdir) | cpio -Hcrc -o | \
           GZIP=$(GZIP_ENV) gzip -c > $(distdir).cpio.gz
 
 distclean-local:
        -rm -f $(distdir).cpio.gz
+
+.PHONY: ChangeLog
+ChangeLog: 
+       if test -d .git; then                                              \
+         cmd=$(top_srcdir)/build-aux/gitlog-to-changelog;                 \
+         if test -n "$(gen_start_date)"; then                             \
+           cmd="$$cmd --since=\"$(gen_start_date)\"";                     \
+         fi;                                                              \
+         $$cmd |                                                          \
+            sed '/<unknown>$$/d' | fmt -s > $(changelog_dir)/cl-t;         \
+          if test -n "$(prev_change_log)" && test -f "$(prev_change_log)"; \
+         then                                                             \
+           echo "" >> $(changelog_dir)/cl-t;                              \
+           cat "$(prev_change_log)" |                                     \
+             sed '/^Local Variables:/,/^End:/d' >> $(changelog_dir)/cl-t; \
+         fi;                                                              \
+         echo "Local Variables:" >> $(changelog_dir)/cl-t;                \
+         echo "mode: change-log" >> $(changelog_dir)/cl-t;                \
+         echo "version-control: never"  >> $(changelog_dir)/cl-t;         \
+         echo "buffer-read-only: t" >> $(changelog_dir)/cl-t;             \
+         echo "End:" >> $(changelog_dir)/cl-t;                            \
+         rm -f $(changelog_dir)/ChangeLog;                                \
+         mv $(changelog_dir)/cl-t $(changelog_dir)/ChangeLog;             \
+       fi
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/NEWS b/NEWS
index 2a6fee24c4fd7142c4c380fd19b9691cf96e2a9d..32542665ad6084012021af7cd198d6a12598dfb4 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,114 @@
-GNU tar NEWS - User visible changes. 2009-03-05
+GNU tar NEWS - User visible changes. 2010-03-10
 Please send GNU tar bug reports to <bug-tar@gnu.org>
 
+\f
+version 1.23 - Sergey Poznyakoff, 2010-03-10
+
+* Record size autodetection
+
+When listing or extracting archives, the actual record size is
+reported only if the archive is read from a device (as opposed
+to regular files and pipes).
+
+* Seekable archives
+
+When a read-only operation (e.g. --list or --extract) is requested
+on a regular file, tar attemtps to speed up accesses by using lseek.
+
+* New command line option `--warning'
+
+The `--warning' command line option allows to suppress or enable
+particular warning messages during `tar' run.  It takes a single
+argument (a `keyword'), identifying the class of warning messages
+to affect.  If the argument is prefixed with `no-', such warning
+messages are suppressed.  For example,
+
+  tar --warning=no-alone-zero-block -x -f archive
+
+suppresses the output of `A lone zero block' diagnostics, which is
+normally issued if `archive' ends with a single block of zeros.
+
+See Tar Manual, section 3.9 "Controlling Warning Messages", for a
+detailed discussion.
+
+* New command line option `--level'
+
+The `--level=N' option sets the incremental dump level N.  It
+is valid when used in conjunction with the -c and --listed-incremental
+options.  So far the only meaningful value for N is 0.  The
+`--level=0' option forces creating the level 0 dump, by truncating
+the snapshot file if it exists.
+
+* Files removed during incremental dumps
+
+If a file or directory is removed while incremental dump is
+in progress, tar exact actions depend on whether this file
+was explicitly listed in the command line, or was found
+during file system scan.
+
+If the file was explicitly listed in the command line, tar
+issues error message and exits with the code 2, meaning
+fatal error.
+
+Otherwise, if the file was found during the file system scan,
+tar issues a warning, saying "File removed before we read it",
+and sets exit code to 1, which means "some files differ".
+If the --warning=no-file-removed option is given, no warning
+is issued and exit code remains 0.
+
+* Modification times of PAX extended headers.
+
+Modification times in ustar header blocks of extended headers
+are set to mtimes of the corresponding archive members.  This
+can be overridden by the
+
+  --pax-opion='exthdr.mtime=STRING'
+
+command line option.  The STRING is either number of seconds since
+the Epoch or a `Time reference' (see below).
+
+Modification times in ustar header blocks of global extended
+headers are set to the time when tar was invoked.
+
+This can be overridden by the
+
+  --pax-opion='globexthdr.mtime=STRING'
+
+command line option.  The STRING is either number of seconds since
+the Epoch or a `Time reference' (see below).
+
+* Time references in --pax-option argument.
+
+Any value from the --pax-option argument that is enclosed in a pair
+of curly braces represents a time reference.  The string between the 
+braces is understood either as a textual time representation, as described in
+chapter 7, "Date input formats", of the Tar manual, or as a name of
+an existing file, starting with `/' or `.'.  In the latter
+case, it is replaced with the modification time of that file.
+
+* Environment of --to-command script.
+
+The environment passed to the --to-command script is extended with
+the following variables:
+
+   TAR_VERSION          GNU tar version number
+   TAR_ARCHIVE          The name of the archive
+   TAR_VOLUME           Ordinal number of the volume
+   TAR_FORMAT           Format of the archive
+   TAR_BLOCKING_FACTOR  Current blocking factor
+
+* Bugfixes
+** Fix handling of hard link targets by -c --transform.
+** Fix hard links recognition with -c --remove-files.
+** Fix restoring files from backup (debian bug #508199).
+** Correctly restore modes and permissions on existing directories.
+** The --remove-files option removes files only if they were
+succesfully stored in the archive.
+** Fix storing and listing of the volume labels in POSIX format.
+** Improve algorithm for splitting long file names (ustar
+format).
+** Fix possible memory overflow in the rmt client code (CVE-2010-0624).
+
 \f
 version 1.22 - Sergey Poznyakoff, 2009-03-05
 
@@ -1091,7 +1199,7 @@ Versions 1.07 back to 1.00 by Jay Fenlason.
 \f
 
 Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003,
-2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 
 This file is part of GNU tar.
 
diff --git a/PORTS b/PORTS
deleted file mode 100644 (file)
index d3d5ddf..0000000
--- a/PORTS
+++ /dev/null
@@ -1,173 +0,0 @@
-Ports of GNU tar and other tars                
-See the end of file for copying conditions.
-
-* Introduction
-
-  Most entries in this file are out of date, unfortunately. Such
-  entries are marked with an `X'. Run grep '^\*\*[^X]' PORTS to
-  extract valid entries.
-  
-  Please write bug-tar@gnu.org if you are aware of various ports of GNU tar
-  to non-GNU and non-Unix systems not listed here, or for corrections.
-  Please provide the goal system, a complete and stable URL, the maintainer
-  name and address, the tar version used as a base, and your comments.
-
-* GNU/Linux and Unix
-
-** Star is a tape archiver similar to tar.
-    <http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/star.html>
-
-* Amiga
-
-**X ftp://ftp.wustl.edu/systems/amiga/aminet/util/arc/GNUtar-1.11.8.lha
-    maintained by Enrico Forestieri <enrico@com.unipr.it>
-    Based on tar 1.11.8.
-
-**X ftp://ftp.ninemoons.com/pub/ade/current/amiga-bin/tar-1.11.8-bin.lha
-    maintained by the ADE group <fnf@fishpond.ninemoons.com>
-    Based on tar 1.11.8, needs ixemul.library.
-
-**X ftp://ftp.wustl.edu/systems/amiga/aminet/util/arc/gnutar.lha
-    maintained by <mscheler@wuarchive.wustl.edu>
-
-* DEC alpha (NT)
-
-**X ftp://ftp.cdrom.com/.20/windows/archiver/tar.zip
-    maintained by Drew Bliss & Geoff Voelker
-
-* DEC VAX (VMS)
-
-**X http://www.lp.se/free/vmstar/
-    maintained by Richard Levitte <levitte@lp.se>
-    This is not GNU tar, but a separate implementation.
-
-**  maintained by William Bader <william@nscs.fast.net>
-    For V4.7.  Based on an old PDtar.  Requires compatible shared libraries
-    to run V5 or V6 executables.
-
-* IBM/PC (DV/X)
-
-**X ftp://qdeck.com/ (?)
-    maintained by David Ronis <ronis@gibbs.chem.mcgill.ca>
-    For Desqview/X.  Everything works besides compression.  Copy of hacked
-    sources available, some of DV/X's programmer's library also needed.
-
-* IBM/PC (MSDOS)
-
-**X http://www.simtel.net/simtel.net/
-    http://www.leo.org/pub/comp/platforms/pc/gnuish (Germany)
-    ftp://ftp.simtel.net/simtelnet/gnu
-    ftp://ftp.leo.org/pub/comp/platforms/pc/gnuish
-    maintained by Darrel Hankerson <hankedr@mail.auburn.edu>
-    You get many GNU tools, not only `tar'.  The GNUish project is described
-    in `gnuish_t.htm'.
-
-** The DJGPP development tools also include some `tar' utilities.
-
-**X ftp://ftp.mcs.com/mcsnet.users/les/dos-gnutar/
-    maintained by Leslie Mikesell <les@mcs.net>
-    Based on tar 1.11.2.  Support for SCSI (via ASPI) and network (rsh over
-    packet driver). No support for win95 long file names.
-
-**X ftp://ftp.wu-wien.ac.at/pub/src/PCmisc/aspi-tar/*
-    maintained by Christoph Splittgerber <chris@orion.sdata.de>
-    Based on tar 1.10.  Support for SCSI (via ASPI).
-
-**X ftp://wuarchive (?)
-    Several DOS version based on PDtar.  John Gilmore <gnu@toad.com> says
-    he has copies of several vintages saved.
-
-**X ftp://ftp.cdrom.com/.14/languages/ada/toolkit/msdos/gtar/gtar.exe
-    ftp://ftp.cdrom.com/.14/languages/ada/toolkit/msdos/gtar/gtar.taz
-    ftp://ftp.cdrom.com/.14/languages/ada/toolkit/msdos/gtar/gtar.zip
-
-**X ftp://ftp.cdrom.com/.4/os2/archiver/tar.zip
-    Based on PDtar.
-
-**X ftp://ftp.cdrom.com/.20/windows/archiver/tar.zip
-    maintained by Drew Bliss & Geoff Voelker
-    GNU tar for NT (intel and Alpha platforms).
-
-** ftp://garbo.uwasa.fi/pc/unix/untgz095.zip
-    maintained by Tillmann Steinbrecher <tst@darmstadt.netsurf.de>
-    The `untgz' program is a fast .tar or .tar.gz (.tgz) extractor.
-
-**X http://people.darmstadt.netsurf.de/tst/tar.htm
-    maintained by Tillmann Steinbrecher <tst@darmstadt.netsurf.de>
-    This is not a `tar' port, but an index of them.
-
-* IBM/PC (OS/2)
-
-**X http://www.leo.org/pub/comp/os/os2/leo/gnu/archiver/gtar254.zip
-    http://www.leo.org/pub/comp/os/os2/leo/gnu/archiver/gtak254.zip
-    maintained by Andreas Kaiser <Andreas.Kaiser@stuttgart.netsurf.de>
-    Version 2.54.  Based on tar 1.10.  The second archive contains SCSI
-    drivers (DAT streamers notably) and rmt-type programs.
-
-* IBM/PC (Win32: Windows 95, NT 3.5 or NT 4.0)
-
-**X ftp://ftp.cygnus.com:~ftp/pub/sac/win32/usersrc/*
-    maintained by Cygnus
-    GNU-Win32 B17.1 distribution.  Download all files, `cat' them together,
-    and `untar' the result.  You get many GNU tools, not only `tar'.
-    Based on tar 1.11.2.
-
-**X ftp://ftp.cdrom.com/.20/windows/archiver/tar.zip
-    maintained by Drew Bliss & Geoff Voelker
-    GNU tar for NT (intel and Alpha platforms).
-
-** ftp://garbo.uwasa.fi/pc/unix/untgz095.zip
-    maintained by Tillmann Steinbrecher <tst@darmstadt.netsurf.de>
-    The `untgz' program is a fast .tar or .tar.gz (.tgz) extractor.
-
-* IBM/PC (Windows 3.1)
-
-**X ftp://ftp.mcs.com/mcsnet.users/les/win-gnutar/
-    maintained by Leslie Mikesell <les@mcs.net>
-    Support for network (rsh over winsock).  No support for win95 long
-    file names.
-
-**X ftp://ftp.gamesdomain.ru/.1/os/windows/programr/tar.zip
-    Based on GNU tar 1.11.2.
-
-* Macintosh
-
-** Paulo Abreu (paulotex at yahoo dot com) did a
-   limited port of GNU tar to Darwin, with support for resource forks
-   and finder info, but this no longer seems to be available.
-
-** There is a tar in Stuffit Expander which is available many places and
-   comes with MacOS.  It creates some spurious files but works on average.
-
-** There is an excellent GNU tar bundled in Tenon MachTen, but it does not
-   seem to be available separately.
-
-\f
-* Copyright notice
-
-  Copyright (C) 1999, 2001, 2003, 2004, 2007 Free Software Foundation, Inc.
-
-  This file is part of GNU tar.
-
-  GNU tar 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.
-
-  GNU tar 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 GNU tar; see the file COPYING.  If not, write to
-  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-  Boston, MA 02110-1301, USA.
-
-\f
-Local Variables:
-mode: outline
-paragraph-separate: "[ \f]*$"
-version-control: never
-End:
-  
diff --git a/THANKS b/THANKS
index dbb64d25f64f9cadcf372bb292915693979c897f..525981ce43f4233e0b8727fbebd91303aea56471 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -70,6 +70,7 @@ Burkhard Plache               plache@krusty.optimax.ns.ca
 Calvin Cliff           cliff@trifid.astro.ucla.edu
 Cameron Elliott                cam@mvbms.mvbms.com
 Carl Streeter          streeter@cae.wisc.edu
+Carl Worth              cworth@cworth.org
 Carsten Heyl           heyl@nads.de
 Catrin Urbanneck       cur@gppc.de
 Cesar Romani           romani@ifm.uni-hamburg.de
@@ -132,6 +133,7 @@ David Steiner               dsteiner@ispa.uni-osnabrueck.de
 David Taylor           taylor@think.com
 Dean Gaudet            dgaudet@watdragon.uwaterloo.ca
 Demizu Noritoshi       nori-d@is.aist-nara.ac.jp
+Denis Excoffier         denis.excoffier@airbus.com
 Denis Fortin           fortin@acm.org
 Dennis Pixton          dennis@math.binghamton.edu
 Dick Streefland                dicks@tasking.nl
@@ -367,6 +369,7 @@ Olaf Schlueter              olaf@toppoint.de
 Olaf Wucknitz          owucknitz@hs.uni-hamburg.de
 Oliver Trepte          oliver@fysik4.kth.se
 Olivier Roussel                roussel@lifl.fr
+Ondřej Vašík                ovasik@redhat.com
 Oswald P. Backus IV    backus@lks.csi.com
 Pascal Meheut          pascal@cnam.cnam.fr
 Patrick Fulconis       fulco@sig.uvsq.fr
@@ -388,6 +391,7 @@ Peter Fox           fox@gec-mi-at.co.uk
 Peter Kutschera                peter@zditr1.arcs.ac.at
 Peter Seebach          seebs@taniemarie.solon.com
 Phil Hands             phil@hands.com
+Phil Proudman          phil@proudman51.freeserve.co.uk
 Philippe Defert                defert@cern.ch
 Piercarlo Grandi       piercarl@sabi.demon.co.uk
 Pierce Cantrell                cantrell@ee.tamu.edu
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644 (file)
index 0000000..10a27e5
--- /dev/null
@@ -0,0 +1,26 @@
+dnl Special Autoconf macros for GNU Tar         -*- autoconf -*-
+dnl Copyright (C) 2009 Free Software Foundation, Inc.
+dnl
+dnl GNU tar is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 3, or (at your option)
+dnl any later version.
+dnl
+dnl GNU tar is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License along
+dnl with GNU tar.  If not, see <http://www.gnu.org/licenses/>.
+
+AC_DEFUN([TAR_COMPR_PROGRAM],[
+ m4_pushdef([tar_compr_define],translit($1,[a-z+-],[A-ZX_])[_PROGRAM])
+ m4_pushdef([tar_compr_var],[tar_cv_compressor_]translit($1,[+-],[x_]))
+ AC_ARG_WITH($1,
+             AC_HELP_STRING([--with-]$1[=PROG],
+                           [use PROG as ]$1[ compressor program]),
+             [tar_compr_var=${withval}],
+            [tar_compr_var=m4_if($2,,$1,$2)])
+ AC_DEFINE_UNQUOTED(tar_compr_define, "$tar_compr_var",
+                    [Define to the program name of ]$1[ compressor program])])
index 94ffea23be487fd324d41f3e92f1a533883ae107..27de1723f321ed9f84679a39fac2b6b0deae517a 100644 (file)
@@ -1,7 +1,7 @@
-# generated automatically by aclocal 1.10.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(AC_AUTOCONF_VERSION, [2.61],,
-[m4_warning([this file was generated for autoconf 2.61.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63],,
+[m4_warning([this file was generated for autoconf 2.63.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
 
-# isc-posix.m4 serial 2 (gettext-0.11.2)
-dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-# This file is not needed with autoconf-2.53 and newer.  Remove it in 2005.
-
-# This test replaces the one in autoconf.
-# Currently this macro should have the same name as the autoconf macro
-# because gettext's gettext.m4 (distributed in the automake package)
-# still uses it.  Otherwise, the use in gettext.m4 makes autoheader
-# give these diagnostics:
-#   configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
-#   configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
-
-undefine([AC_ISC_POSIX])
-
-AC_DEFUN([AC_ISC_POSIX],
-  [
-    dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
-    AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"])
-  ]
-)
-
-# Copyright (C) 2002, 2003, 2005, 2006, 2007  Free Software Foundation, Inc.
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -56,10 +31,10 @@ AC_DEFUN([AC_ISC_POSIX],
 # generated from the m4 files accompanying Automake X.Y.
 # (This private macro should not be called outside this file.)
 AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.10'
+[am__api_version='1.11'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.10.1], [],
+m4_if([$1], [1.11.1], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -73,12 +48,12 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # AM_SET_CURRENT_AUTOMAKE_VERSION
 # -------------------------------
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
-# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.10.1])dnl
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-_AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)])
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
@@ -135,14 +110,14 @@ am_aux_dir=`cd $ac_aux_dir && pwd`
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
 # Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 8
+# serial 9
 
 # AM_CONDITIONAL(NAME, SHELL-CONDITION)
 # -------------------------------------
@@ -155,6 +130,7 @@ AC_SUBST([$1_TRUE])dnl
 AC_SUBST([$1_FALSE])dnl
 _AM_SUBST_NOTMAKE([$1_TRUE])dnl
 _AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
 if $2; then
   $1_TRUE=
   $1_FALSE='#'
@@ -168,14 +144,14 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
 # Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 9
+# serial 10
 
 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
 # written in clear, in which case automake, when reading aclocal.m4,
@@ -232,6 +208,16 @@ AC_CACHE_CHECK([dependency style of $depcc],
   if test "$am_compiler_list" = ""; then
      am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
   fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
   for depmode in $am_compiler_list; do
     # Setup a source with many dependencies, because some compilers
     # like to wrap large dependency lists on column 80 (with \), and
@@ -249,7 +235,17 @@ AC_CACHE_CHECK([dependency style of $depcc],
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
     case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
     nosideeffect)
       # after this tag, mechanisms are not by side-effect, so they'll
       # only be used when explicitly requested
@@ -259,19 +255,23 @@ AC_CACHE_CHECK([dependency style of $depcc],
        break
       fi
       ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
     none) break ;;
     esac
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.
     if depmode=$depmode \
-       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       source=sub/conftest.c object=$am__obj \
        depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
          >/dev/null 2>conftest.err &&
        grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
        grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
        ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
       # icc doesn't choke on unknown options, it will just issue warnings
       # or remarks (even with -Werror).  So we grep stderr for any message
@@ -328,57 +328,68 @@ _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
 # Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-#serial 3
+#serial 5
 
 # _AM_OUTPUT_DEPENDENCY_COMMANDS
 # ------------------------------
 AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-[for mf in $CONFIG_FILES; do
-  # Strip MF so we end up with the name of the file.
-  mf=`echo "$mf" | sed -e 's/:.*$//'`
-  # Check whether this is an Automake generated Makefile or not.
-  # We used to match only the files named `Makefile.in', but
-  # some people rename them; so instead we look at the file content.
-  # Grep'ing the first line is not enough: some people post-process
-  # each Makefile.in and add a new line on top of each file to say so.
-  # Grep'ing the whole file is not good either: AIX grep has a line
-  # limit of 2048, but all sed's we know have understand at least 4000.
-  if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
-    dirpart=`AS_DIRNAME("$mf")`
-  else
-    continue
-  fi
-  # Extract the definition of DEPDIR, am__include, and am__quote
-  # from the Makefile without running `make'.
-  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-  test -z "$DEPDIR" && continue
-  am__include=`sed -n 's/^am__include = //p' < "$mf"`
-  test -z "am__include" && continue
-  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-  # When using ansi2knr, U may be empty or an underscore; expand it
-  U=`sed -n 's/^U = //p' < "$mf"`
-  # Find all dependency output files, they are included files with
-  # $(DEPDIR) in their names.  We invoke sed twice because it is the
-  # simplest approach to changing $(DEPDIR) to its actual value in the
-  # expansion.
-  for file in `sed -n "
-    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-    # Make sure the directory exists.
-    test -f "$dirpart/$file" && continue
-    fdir=`AS_DIRNAME(["$file"])`
-    AS_MKDIR_P([$dirpart/$fdir])
-    # echo "creating $dirpart/$file"
-    echo '# dummy' > "$dirpart/$file"
+[{
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`AS_DIRNAME("$mf")`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`AS_DIRNAME(["$file"])`
+      AS_MKDIR_P([$dirpart/$fdir])
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
   done
-done
+}
 ])# _AM_OUTPUT_DEPENDENCY_COMMANDS
 
 
@@ -398,13 +409,13 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 # Do all the work for Automake.                             -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2008 Free Software Foundation, Inc.
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 13
+# serial 16
 
 # This macro actually does too much.  Some checks are only needed if
 # your package does certain things.  But this isn't really a big deal.
@@ -421,7 +432,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 # arguments mandatory, and then we can depend on a new Autoconf
 # release and drop the old call support.
 AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.60])dnl
+[AC_PREREQ([2.62])dnl
 dnl Autoconf wants to disallow AM_ names.  We explicitly allow
 dnl the ones we care about.
 m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
@@ -472,8 +483,8 @@ AM_MISSING_PROG(AUTOCONF, autoconf)
 AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
 AM_MISSING_PROG(AUTOHEADER, autoheader)
 AM_MISSING_PROG(MAKEINFO, makeinfo)
-AM_PROG_INSTALL_SH
-AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
 AC_REQUIRE([AM_PROG_MKDIR_P])dnl
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
@@ -481,24 +492,37 @@ AC_REQUIRE([AC_PROG_AWK])dnl
 AC_REQUIRE([AC_PROG_MAKE_SET])dnl
 AC_REQUIRE([AM_SET_LEADING_DOT])dnl
 _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
-              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
-                            [_AM_PROG_TAR([v7])])])
+             [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+                            [_AM_PROG_TAR([v7])])])
 _AM_IF_OPTION([no-dependencies],,
 [AC_PROVIDE_IFELSE([AC_PROG_CC],
-                  [_AM_DEPENDENCIES(CC)],
-                  [define([AC_PROG_CC],
-                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+                 [_AM_DEPENDENCIES(CC)],
+                 [define([AC_PROG_CC],
+                         defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
 AC_PROVIDE_IFELSE([AC_PROG_CXX],
-                  [_AM_DEPENDENCIES(CXX)],
-                  [define([AC_PROG_CXX],
-                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+                 [_AM_DEPENDENCIES(CXX)],
+                 [define([AC_PROG_CXX],
+                         defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
 AC_PROVIDE_IFELSE([AC_PROG_OBJC],
-                  [_AM_DEPENDENCIES(OBJC)],
-                  [define([AC_PROG_OBJC],
-                          defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+                 [_AM_DEPENDENCIES(OBJC)],
+                 [define([AC_PROG_OBJC],
+                         defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
 ])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
 ])
 
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
 
 # When config.status generates a header, we must update the stamp-h file.
 # This file resides in the same directory as the config header
@@ -521,7 +545,7 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -532,7 +556,14 @@ echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_co
 # Define $install_sh.
 AC_DEFUN([AM_PROG_INSTALL_SH],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
 AC_SUBST(install_sh)])
 
 # Copyright (C) 2003, 2005  Free Software Foundation, Inc.
@@ -558,13 +589,13 @@ AC_SUBST([am__leading_dot])])
 
 # Check to see how 'make' treats includes.                 -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 3
+# serial 4
 
 # AM_MAKE_INCLUDE()
 # -----------------
@@ -573,7 +604,7 @@ AC_DEFUN([AM_MAKE_INCLUDE],
 [am_make=${MAKE-make}
 cat > confinc << 'END'
 am__doit:
-       @echo done
+       @echo this is the am__doit target
 .PHONY: am__doit
 END
 # If we don't find an include directive, just comment out the code.
@@ -583,24 +614,24 @@ am__quote=
 _am_result=none
 # First try GNU make style include.
 echo "include confinc" > confmf
-# We grep out `Entering directory' and `Leaving directory'
-# messages which can occur if `w' ends up in MAKEFLAGS.
-# In particular we don't look at `^make:' because GNU make might
-# be invoked under some other name (usually "gmake"), in which
-# case it prints its new name instead of `make'.
-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
-   am__include=include
-   am__quote=
-   _am_result=GNU
-fi
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
 # Now try BSD make style include.
 if test "$am__include" = "#"; then
    echo '.include "confinc"' > confmf
-   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
-      am__include=.include
-      am__quote="\""
-      _am_result=BSD
-   fi
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
 fi
 AC_SUBST([am__include])
 AC_SUBST([am__quote])
@@ -608,14 +639,14 @@ AC_MSG_RESULT([$_am_result])
 rm -f confinc confmf
 ])
 
-# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005
+# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008
 # Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 5
+# serial 6
 
 # AM_PROG_CC_C_O
 # --------------
@@ -627,8 +658,9 @@ AC_REQUIRE_AUX_FILE([compile])dnl
 # FIXME: we rely on the cache variable name because
 # there is no other way.
 set dummy $CC
-ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
-if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
+am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
    # Losing compiler, so override with the script.
    # FIXME: It is wrong to rewrite CC.
    # But if we don't then we get into trouble of one sort or another.
@@ -644,14 +676,14 @@ m4_define([AC_PROG_CC],
 
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
 # Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 5
+# serial 6
 
 # AM_MISSING_PROG(NAME, PROGRAM)
 # ------------------------------
@@ -668,7 +700,14 @@ AC_SUBST($1)])
 AC_DEFUN([AM_MISSING_HAS_RUN],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
 AC_REQUIRE_AUX_FILE([missing])dnl
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
 # Use eval to expand $SHELL
 if eval "$MISSING --run true"; then
   am_missing_run="$MISSING --run "
@@ -706,13 +745,13 @@ esac
 
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 3
+# serial 4
 
 # _AM_MANGLE_OPTION(NAME)
 # -----------------------
@@ -729,7 +768,7 @@ AC_DEFUN([_AM_SET_OPTION],
 # ----------------------------------
 # OPTIONS is a space-separated list of Automake options.
 AC_DEFUN([_AM_SET_OPTIONS],
-[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
 
 # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
 # -------------------------------------------
@@ -756,14 +795,14 @@ AC_DEFUN([AM_RUN_LOG],
 
 # Check to make sure that the build environment is sane.    -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
 # Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 4
+# serial 5
 
 # AM_SANITY_CHECK
 # ---------------
@@ -772,16 +811,29 @@ AC_DEFUN([AM_SANITY_CHECK],
 # Just in case
 sleep 1
 echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[[\\\"\#\$\&\'\`$am_lf]]*)
+    AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+  *[[\\\"\#\$\&\'\`$am_lf\ \   ]]*)
+    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
 # Do `set' in a subshell so we don't clobber the current shell's
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
-   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
    if test "$[*]" = "X"; then
       # -L didn't work.
-      set X `ls -t $srcdir/configure conftest.file`
+      set X `ls -t "$srcdir/configure" conftest.file`
    fi
    rm -f conftest.file
    if test "$[*]" != "X $srcdir/configure conftest.file" \
@@ -806,6 +858,33 @@ Check your system clock])
 fi
 AC_MSG_RESULT(yes)])
 
+# Copyright (C) 2009  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# (`yes' being less verbose, `no' or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules],
+[  --enable-silent-rules          less verbose build output (undo: `make V=1')
+  --disable-silent-rules         verbose build output (undo: `make V=0')])
+case $enable_silent_rules in
+yes) AM_DEFAULT_VERBOSITY=0;;
+no)  AM_DEFAULT_VERBOSITY=1;;
+*)   AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
 # Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
@@ -834,18 +913,25 @@ fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 2
+
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
 # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
 # This macro is traced by Automake.
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
 # Check how to create a tarball.                            -*- Autoconf -*-
 
 # Copyright (C) 2004, 2005  Free Software Foundation, Inc.
@@ -949,7 +1035,7 @@ m4_include([m4/argp.m4])
 m4_include([m4/backupfile.m4])
 m4_include([m4/bison.m4])
 m4_include([m4/btowc.m4])
-m4_include([m4/canonicalize-lgpl.m4])
+m4_include([m4/canonicalize.m4])
 m4_include([m4/chdir-long.m4])
 m4_include([m4/chown.m4])
 m4_include([m4/clock_time.m4])
@@ -958,6 +1044,7 @@ m4_include([m4/close.m4])
 m4_include([m4/closeout.m4])
 m4_include([m4/codeset.m4])
 m4_include([m4/d-ino.m4])
+m4_include([m4/dirent-safer.m4])
 m4_include([m4/dirent_h.m4])
 m4_include([m4/dirfd.m4])
 m4_include([m4/dirname.m4])
@@ -969,12 +1056,13 @@ m4_include([m4/environ.m4])
 m4_include([m4/errno_h.m4])
 m4_include([m4/error.m4])
 m4_include([m4/exclude.m4])
-m4_include([m4/exitfail.m4])
 m4_include([m4/extensions.m4])
 m4_include([m4/fchdir.m4])
 m4_include([m4/fclose.m4])
-m4_include([m4/fcntl-safer.m4])
+m4_include([m4/fcntl-o.m4])
+m4_include([m4/fcntl.m4])
 m4_include([m4/fcntl_h.m4])
+m4_include([m4/fdopendir.m4])
 m4_include([m4/fileblocks.m4])
 m4_include([m4/float_h.m4])
 m4_include([m4/fnmatch.m4])
@@ -986,6 +1074,7 @@ m4_include([m4/getcwd-path-max.m4])
 m4_include([m4/getcwd.m4])
 m4_include([m4/getdate.m4])
 m4_include([m4/getdelim.m4])
+m4_include([m4/getdtablesize.m4])
 m4_include([m4/getline.m4])
 m4_include([m4/getopt.m4])
 m4_include([m4/getpagesize.m4])
@@ -1006,6 +1095,7 @@ m4_include([m4/inttostr.m4])
 m4_include([m4/inttypes-pri.m4])
 m4_include([m4/inttypes.m4])
 m4_include([m4/inttypes_h.m4])
+m4_include([m4/langinfo_h.m4])
 m4_include([m4/lchown.m4])
 m4_include([m4/lib-ld.m4])
 m4_include([m4/lib-link.m4])
@@ -1022,15 +1112,20 @@ m4_include([m4/malloca.m4])
 m4_include([m4/mbchar.m4])
 m4_include([m4/mbiter.m4])
 m4_include([m4/mbrtowc.m4])
-m4_include([m4/mbscasecmp.m4])
 m4_include([m4/mbsinit.m4])
+m4_include([m4/mbsrtowcs.m4])
 m4_include([m4/mbstate_t.m4])
+m4_include([m4/memchr.m4])
 m4_include([m4/mempcpy.m4])
 m4_include([m4/memrchr.m4])
+m4_include([m4/mkdir.m4])
 m4_include([m4/mkdtemp.m4])
 m4_include([m4/mktime.m4])
+m4_include([m4/mmap-anon.m4])
+m4_include([m4/mode_t.m4])
 m4_include([m4/modechange.m4])
 m4_include([m4/multiarch.m4])
+m4_include([m4/nl_langinfo.m4])
 m4_include([m4/nls.m4])
 m4_include([m4/open.m4])
 m4_include([m4/openat.m4])
@@ -1038,6 +1133,7 @@ m4_include([m4/pathmax.m4])
 m4_include([m4/paxutils.m4])
 m4_include([m4/po.m4])
 m4_include([m4/printf.m4])
+m4_include([m4/priv-set.m4])
 m4_include([m4/progtest.m4])
 m4_include([m4/quote.m4])
 m4_include([m4/quotearg.m4])
@@ -1045,11 +1141,13 @@ m4_include([m4/rawmemchr.m4])
 m4_include([m4/readlink.m4])
 m4_include([m4/realloc.m4])
 m4_include([m4/regex.m4])
+m4_include([m4/rmdir.m4])
 m4_include([m4/rmt.m4])
 m4_include([m4/rpmatch.m4])
 m4_include([m4/rtapelib.m4])
 m4_include([m4/safe-read.m4])
 m4_include([m4/safe-write.m4])
+m4_include([m4/same.m4])
 m4_include([m4/save-cwd.m4])
 m4_include([m4/savedir.m4])
 m4_include([m4/setenv.m4])
@@ -1058,8 +1156,10 @@ m4_include([m4/sleep.m4])
 m4_include([m4/snprintf.m4])
 m4_include([m4/ssize_t.m4])
 m4_include([m4/stat-time.m4])
+m4_include([m4/stat.m4])
 m4_include([m4/stdarg.m4])
 m4_include([m4/stdbool.m4])
+m4_include([m4/stddef_h.m4])
 m4_include([m4/stdint.m4])
 m4_include([m4/stdint_h.m4])
 m4_include([m4/stdio_h.m4])
@@ -1090,19 +1190,21 @@ m4_include([m4/timespec.m4])
 m4_include([m4/tm_gmtoff.m4])
 m4_include([m4/unistd-safer.m4])
 m4_include([m4/unistd_h.m4])
+m4_include([m4/unlink.m4])
 m4_include([m4/unlinkdir.m4])
 m4_include([m4/unlocked-io.m4])
 m4_include([m4/utimbuf.m4])
-m4_include([m4/utime.m4])
 m4_include([m4/utimens.m4])
-m4_include([m4/utimes-null.m4])
 m4_include([m4/utimes.m4])
 m4_include([m4/vasnprintf.m4])
+m4_include([m4/vasprintf.m4])
+m4_include([m4/version-etc.m4])
 m4_include([m4/vsnprintf.m4])
-m4_include([m4/wchar.m4])
+m4_include([m4/warn-on-use.m4])
+m4_include([m4/wchar_h.m4])
 m4_include([m4/wchar_t.m4])
 m4_include([m4/wcrtomb.m4])
-m4_include([m4/wctype.m4])
+m4_include([m4/wctype_h.m4])
 m4_include([m4/wcwidth.m4])
 m4_include([m4/wint_t.m4])
 m4_include([m4/write.m4])
@@ -1111,3 +1213,5 @@ m4_include([m4/xgetcwd.m4])
 m4_include([m4/xsize.m4])
 m4_include([m4/xstrndup.m4])
 m4_include([m4/xstrtol.m4])
+m4_include([m4/xvasprintf.m4])
+m4_include([acinclude.m4])
diff --git a/build-aux/arg-nonnull.h b/build-aux/arg-nonnull.h
new file mode 100644 (file)
index 0000000..ffbb397
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A C macro for declaring that specific arguments must not be NULL.
+   Copyright (C) 2009, 2010 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
+   Lesser 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/>.  */
+
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
diff --git a/build-aux/c++defs.h b/build-aux/c++defs.h
new file mode 100644 (file)
index 0000000..24b8d5d
--- /dev/null
@@ -0,0 +1,211 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* C++ compatible function declaration macros.
+   Copyright (C) 2010 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
+   Lesser 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 _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          reinterpret_cast<rettype2(*)parameters2>(::func));                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1(func,namespace) \
+   _GL_CXXALIASWARN2 (func, namespace)
+# define _GL_CXXALIASWARN2(func,namespace) \
+   _GL_WARN_ON_USE (func, \
+                    "The symbol ::" #func " refers to the system function. " \
+                    "Use " #namespace "::" #func " instead.")
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
index 1b1d232169586b87050f08c303ffcc44676da397..c0096a7b563231c0c7ade728962574ec3b8df270 100755 (executable)
@@ -1,9 +1,10 @@
 #! /bin/sh
 # Wrapper for compilers which do not understand `-c -o'.
 
-scriptversion=2005-05-14.22
+scriptversion=2009-10-06.20; # UTC
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009  Free Software
+# Foundation, Inc.
 # Written by Tom Tromey <tromey@cygnus.com>.
 #
 # This program is free software; you can redistribute it and/or modify
@@ -17,8 +18,7 @@ scriptversion=2005-05-14.22
 # 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/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -103,13 +103,13 @@ if test -z "$ofile" || test -z "$cfile"; then
 fi
 
 # Name of file we expect compiler to create.
-cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
 
 # Create the lock directory.
-# Note: use `[/.-]' here to ensure that we don't use the same name
+# Note: use `[/\\:.-]' here to ensure that we don't use the same name
 # that we are using for the .o file.  Also, base the name on the expected
 # object file name, since that is what matters with a parallel build.
-lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
 while true; do
   if mkdir "$lockdir" >/dev/null 2>&1; then
     break
@@ -124,9 +124,9 @@ trap "rmdir '$lockdir'; exit 1" 1 2 15
 ret=$?
 
 if test -f "$cofile"; then
-  mv "$cofile" "$ofile"
+  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
 elif test -f "${cofile}bj"; then
-  mv "${cofile}bj" "$ofile"
+  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
 fi
 
 rmdir "$lockdir"
@@ -138,5 +138,6 @@ exit $ret
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
index 85c2f209beb72edebf886ca1de25f29f02c09aec..17298f2348bf0c5ce90917bf19abfb75a92ae179 100755 (executable)
@@ -2,7 +2,7 @@
 # Output a system dependent set of variables, describing how to set the
 # run time search path of shared libraries in an executable.
 #
-#   Copyright 1996-2008 Free Software Foundation, Inc.
+#   Copyright 1996-2010 Free Software Foundation, Inc.
 #   Taken from GNU libtool, 2001
 #   Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 #
index 0f2bf430321809250c52b17a665e9625f0a0eacc..df8eea7e4ce8862105fcd7929b20bdb45488048b 100755 (executable)
@@ -1,14 +1,14 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2007-03-29.01
+scriptversion=2009-04-28.21; # UTC
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
-# Foundation, Inc.
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 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)
+# the Free Software Foundation; either version 2, or (at your option)
 # any later version.
 
 # This program is distributed in the hope that it will be useful,
@@ -85,6 +85,15 @@ if test "$depmode" = dashXmstdout; then
    depmode=dashmstdout
 fi
 
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+   # This is just like msvisualcpp but w/o cygpath translation.
+   # Just convert the backslash-escaped backslashes to single forward
+   # slashes to satisfy depend.m4
+   cygpath_u="sed s,\\\\\\\\,/,g"
+   depmode=msvisualcpp
+fi
+
 case "$depmode" in
 gcc3)
 ## gcc 3 implements dependency tracking that does exactly what
@@ -190,14 +199,14 @@ sgi)
 ' < "$tmpdepfile" \
     | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
     tr '
-' ' ' >> $depfile
-    echo >> $depfile
+' ' ' >> "$depfile"
+    echo >> "$depfile"
 
     # The second pass generates a dummy entry for each header file.
     tr ' ' '
 ' < "$tmpdepfile" \
    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
-   >> $depfile
+   >> "$depfile"
   else
     # The sourcefile does not contain any dependencies, so just
     # store a dummy comment line, to avoid errors with the Makefile
@@ -326,7 +335,12 @@ hp2)
   if test -f "$tmpdepfile"; then
     sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
     # Add `dependent.h:' lines.
-    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
+    sed -ne '2,${
+              s/^ *//
+              s/ \\*$//
+              s/$/:/
+              p
+            }' "$tmpdepfile" >> "$depfile"
   else
     echo "#dummy" > "$depfile"
   fi
@@ -402,7 +416,7 @@ dashmstdout)
 
   # Remove the call to Libtool.
   if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
+    while test "X$1" != 'X--mode=compile'; do
       shift
     done
     shift
@@ -453,32 +467,39 @@ makedepend)
   "$@" || exit $?
   # Remove any Libtool call
   if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
+    while test "X$1" != 'X--mode=compile'; do
       shift
     done
     shift
   fi
   # X makedepend
   shift
-  cleared=no
-  for arg in "$@"; do
+  cleared=no eat=no
+  for arg
+  do
     case $cleared in
     no)
       set ""; shift
       cleared=yes ;;
     esac
+    if test $eat = yes; then
+      eat=no
+      continue
+    fi
     case "$arg" in
     -D*|-I*)
       set fnord "$@" "$arg"; shift ;;
     # Strip any option that makedepend may not understand.  Remove
     # the object too, otherwise makedepend will parse it as a source file.
+    -arch)
+      eat=yes ;;
     -*|$object)
       ;;
     *)
       set fnord "$@" "$arg"; shift ;;
     esac
   done
-  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  obj_suffix=`echo "$object" | sed 's/^.*\././'`
   touch "$tmpdepfile"
   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
   rm -f "$depfile"
@@ -498,7 +519,7 @@ cpp)
 
   # Remove the call to Libtool.
   if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
+    while test "X$1" != 'X--mode=compile'; do
       shift
     done
     shift
@@ -536,13 +557,27 @@ cpp)
 
 msvisualcpp)
   # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout, regardless of -o,
-  # because we must use -o when running libtool.
+  # always write the preprocessed file to stdout.
   "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
   IFS=" "
   for arg
   do
     case "$arg" in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
        set fnord "$@"
        shift
@@ -555,16 +590,23 @@ msvisualcpp)
        ;;
     esac
   done
-  "$@" -E |
-  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  "$@" -E 2>/dev/null |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
-  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::   \1 \\:p' >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::     \1 \\:p' >> "$depfile"
   echo "       " >> "$depfile"
-  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
+msvcmsys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 none)
   exec "$@"
   ;;
@@ -583,5 +625,6 @@ exit 0
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
new file mode 100755 (executable)
index 0000000..7660af5
--- /dev/null
@@ -0,0 +1,191 @@
+eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
+  & eval 'exec perl -wS "$0" $argv:q'
+    if 0;
+# Convert git log output to ChangeLog format.
+
+my $VERSION = '2009-10-30 13:46'; # UTC
+# The definition above must lie within the first 8 lines in order
+# for the Emacs time-stamp write hook (at end) to update it.
+# If you change this file with Emacs, please let the write hook
+# do its job.  Otherwise, update this string manually.
+
+# Copyright (C) 2008-2010 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
+
+use strict;
+use warnings;
+use Getopt::Long;
+use POSIX qw(strftime);
+
+(my $ME = $0) =~ s|.*/||;
+
+# use File::Coda; # http://meyering.net/code/Coda/
+END {
+  defined fileno STDOUT or return;
+  close STDOUT and return;
+  warn "$ME: failed to close standard output: $!\n";
+  $? ||= 1;
+}
+
+sub usage ($)
+{
+  my ($exit_code) = @_;
+  my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
+  if ($exit_code != 0)
+    {
+      print $STREAM "Try `$ME --help' for more information.\n";
+    }
+  else
+    {
+      print $STREAM <<EOF;
+Usage: $ME [OPTIONS] [ARGS]
+
+Convert git log output to ChangeLog format.  If present, any ARGS
+are passed to "git log".  To avoid ARGS being parsed as options to
+$ME, they may be preceded by '--'.
+
+OPTIONS:
+
+   --since=DATE convert only the logs since DATE;
+                  the default is to convert all log entries.
+   --format=FMT set format string for commit subject and body;
+                  see 'man git-log' for the list of format metacharacters;
+                  the default is '%s%n%b%n'
+
+   --help       display this help and exit
+   --version    output version information and exit
+
+EXAMPLE:
+
+  $ME --since=2008-01-01 > ChangeLog
+  $ME -- -n 5 foo > last-5-commits-to-branch-foo
+
+EOF
+    }
+  exit $exit_code;
+}
+
+# If the string $S is a well-behaved file name, simply return it.
+# If it contains white space, quotes, etc., quote it, and return the new string.
+sub shell_quote($)
+{
+  my ($s) = @_;
+  if ($s =~ m![^\w+/.,-]!)
+    {
+      # Convert each single quote to '\''
+      $s =~ s/\'/\'\\\'\'/g;
+      # Then single quote the string.
+      $s = "'$s'";
+    }
+  return $s;
+}
+
+sub quoted_cmd(@)
+{
+  return join (' ', map {shell_quote $_} @_);
+}
+
+{
+  my $since_date = '1970-01-01 UTC';
+  my $format_string = '%s%n%b%n';
+  GetOptions
+    (
+     help => sub { usage 0 },
+     version => sub { print "$ME version $VERSION\n"; exit },
+     'since=s' => \$since_date,
+     'format=s' => \$format_string,
+    ) or usage 1;
+
+  my @cmd = (qw (git log --log-size), "--since=$since_date",
+             '--pretty=format:%ct  %an  <%ae>%n%n'.$format_string, @ARGV);
+  open PIPE, '-|', @cmd
+    or die ("$ME: failed to run `". quoted_cmd (@cmd) ."': $!\n"
+            . "(Is your Git too old?  Version 1.5.1 or later is required.)\n");
+
+  my $prev_date_line = '';
+  while (1)
+    {
+      defined (my $in = <PIPE>)
+        or last;
+      $in =~ /^log size (\d+)$/
+        or die "$ME:$.: Invalid line (expected log size):\n$in";
+      my $log_nbytes = $1;
+
+      my $log;
+      my $n_read = read PIPE, $log, $log_nbytes;
+      $n_read == $log_nbytes
+        or die "$ME:$.: unexpected EOF\n";
+
+      my @line = split "\n", $log;
+      my $author_line = shift @line;
+      defined $author_line
+        or die "$ME:$.: unexpected EOF\n";
+      $author_line =~ /^(\d+)  (.*>)$/
+        or die "$ME:$.: Invalid line "
+          . "(expected date/author/email):\n$author_line\n";
+
+      my $date_line = sprintf "%s  $2\n", strftime ("%F", localtime ($1));
+      # If this line would be the same as the previous date/name/email
+      # line, then arrange not to print it.
+      if ($date_line ne $prev_date_line)
+        {
+          $prev_date_line eq ''
+            or print "\n";
+          print $date_line;
+        }
+      $prev_date_line = $date_line;
+
+      # Omit "Signed-off-by..." lines.
+      @line = grep !/^Signed-off-by: .*>$/, @line;
+
+      # If there were any lines
+      if (@line == 0)
+        {
+          warn "$ME: warning: empty commit message:\n  $date_line\n";
+        }
+      else
+        {
+          # Remove leading and trailing blank lines.
+          while ($line[0] =~ /^\s*$/) { shift @line; }
+          while ($line[$#line] =~ /^\s*$/) { pop @line; }
+
+          # Prefix each non-empty line with a TAB.
+          @line = map { length $_ ? "\t$_" : '' } @line;
+
+          print "\n", join ("\n", @line), "\n";
+        }
+
+      defined ($in = <PIPE>)
+        or last;
+      $in ne "\n"
+        and die "$ME:$.: unexpected line:\n$in";
+    }
+
+  close PIPE
+    or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n";
+  # FIXME-someday: include $PROCESS_STATUS in the diagnostic
+}
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "my $VERSION = '"
+# time-stamp-format: "%:y-%02m-%02d %02H:%02M"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "'; # UTC"
+# End:
index a5897de6ea7f74f83fd793474bb4738d32884719..3f83ce9b555a535ca90c450882953554c7e4ded5 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2006-12-25.00
+scriptversion=2010-02-06.18; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -200,7 +200,11 @@ if test $# -eq 0; then
 fi
 
 if test -z "$dir_arg"; then
-  trap '(exit $?); exit' 1 2 13 15
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
 
   # Set umask so as not to create temps with too-generous modes.
   # However, 'strip' requires both read and write access to temps.
@@ -515,5 +519,6 @@ done
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/build-aux/link-warning.h b/build-aux/link-warning.h
deleted file mode 100644 (file)
index fda0194..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* GL_LINK_WARNING("literal string") arranges to emit the literal string as
-   a linker warning on most glibc systems.
-   We use a linker warning rather than a preprocessor warning, because
-   #warning cannot be used inside macros.  */
-#ifndef GL_LINK_WARNING
-  /* This works on platforms with GNU ld and ELF object format.
-     Testing __GLIBC__ is sufficient for asserting that GNU ld is in use.
-     Testing __ELF__ guarantees the ELF object format.
-     Testing __GNUC__ is necessary for the compound expression syntax.  */
-# if defined __GLIBC__ && defined __ELF__ && defined __GNUC__
-#  define GL_LINK_WARNING(message) \
-     GL_LINK_WARNING1 (__FILE__, __LINE__, message)
-#  define GL_LINK_WARNING1(file, line, message) \
-     GL_LINK_WARNING2 (file, line, message)  /* macroexpand file and line */
-#  define GL_LINK_WARNING2(file, line, message) \
-     GL_LINK_WARNING3 (file ":" #line ": warning: " message)
-#  define GL_LINK_WARNING3(message) \
-     ({ static const char warning[sizeof (message)]            \
-          __attribute__ ((__unused__,                          \
-                          __section__ (".gnu.warning"),                \
-                          __aligned__ (1)))                    \
-          = message "\n";                                      \
-        (void)0;                                               \
-     })
-# else
-#  define GL_LINK_WARNING(message) ((void) 0)
-# endif
-#endif
index 757a5dc1319e40ce55ec28b4024b4b07e0fbe8fc..c477512f877850d5e34fdda2160eb410421c133f 100755 (executable)
@@ -1,15 +1,15 @@
 #!/bin/sh
 # Get modification time of a file or directory and pretty-print it.
 
-scriptversion=2007-03-30.02
+scriptversion=2010-02-22.21; # UTC
 
-# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005, 2007 Free Software
-# Foundation, Inc.
+# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005, 2007, 2009, 2010
+# Free Software Foundation, Inc.
 # written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
 #
 # 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)
+# the Free Software Foundation; either version 2, or (at your option)
 # any later version.
 #
 # This program is distributed in the hope that it will be useful,
@@ -38,7 +38,8 @@ case $1 in
     cat <<\EOF
 Usage: mdate-sh [--help] [--version] FILE
 
-Pretty-print the modification time of FILE.
+Pretty-print the modification day of FILE, in the format:
+1 January 1970
 
 Report bugs to <bug-automake@gnu.org>.
 EOF
@@ -200,5 +201,6 @@ echo $day $month $year
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
index f359dae7a878d649d09dd7063e3b7220b5cc02d5..28055d2ae6f2a2c584afcd769d7881e11f62ecd9 100755 (executable)
@@ -1,15 +1,15 @@
 #! /bin/sh
 # Common stub for a few missing GNU programs while installing.
 
-scriptversion=2008-12-21.33
+scriptversion=2009-04-28.21; # UTC
 
 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
-# 2008  Free Software Foundation, Inc.
+# 2008, 2009 Free Software Foundation, Inc.
 # Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
 
 # 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)
+# the Free Software Foundation; either version 2, or (at your option)
 # any later version.
 
 # This program is distributed in the hope that it will be useful,
@@ -371,5 +371,6 @@ exit 0
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/build-aux/mkinstalldirs b/build-aux/mkinstalldirs
deleted file mode 100755 (executable)
index ef7e16f..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-
-scriptversion=2006-05-11.19
-
-# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Public domain.
-#
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-nl='
-'
-IFS=" ""       $nl"
-errstatus=0
-dirmode=
-
-usage="\
-Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
-
-Create each directory DIR (with mode MODE, if specified), including all
-leading file name components.
-
-Report bugs to <bug-automake@gnu.org>."
-
-# process command line arguments
-while test $# -gt 0 ; do
-  case $1 in
-    -h | --help | --h*)         # -h for help
-      echo "$usage"
-      exit $?
-      ;;
-    -m)                         # -m PERM arg
-      shift
-      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
-      dirmode=$1
-      shift
-      ;;
-    --version)
-      echo "$0 $scriptversion"
-      exit $?
-      ;;
-    --)                         # stop option processing
-      shift
-      break
-      ;;
-    -*)                         # unknown option
-      echo "$usage" 1>&2
-      exit 1
-      ;;
-    *)                          # first non-opt arg
-      break
-      ;;
-  esac
-done
-
-for file
-do
-  if test -d "$file"; then
-    shift
-  else
-    break
-  fi
-done
-
-case $# in
-  0) exit 0 ;;
-esac
-
-# Solaris 8's mkdir -p isn't thread-safe.  If you mkdir -p a/b and
-# mkdir -p a/c at the same time, both will detect that a is missing,
-# one will create a, then the other will try to create a and die with
-# a "File exists" error.  This is a problem when calling mkinstalldirs
-# from a parallel make.  We use --version in the probe to restrict
-# ourselves to GNU mkdir, which is thread-safe.
-case $dirmode in
-  '')
-    if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
-      echo "mkdir -p -- $*"
-      exec mkdir -p -- "$@"
-    else
-      # On NextStep and OpenStep, the `mkdir' command does not
-      # recognize any option.  It will interpret all options as
-      # directories to create, and then abort because `.' already
-      # exists.
-      test -d ./-p && rmdir ./-p
-      test -d ./--version && rmdir ./--version
-    fi
-    ;;
-  *)
-    if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
-       test ! -d ./--version; then
-      echo "mkdir -m $dirmode -p -- $*"
-      exec mkdir -m "$dirmode" -p -- "$@"
-    else
-      # Clean up after NextStep and OpenStep mkdir.
-      for d in ./-m ./-p ./--version "./$dirmode";
-      do
-        test -d $d && rmdir $d
-      done
-    fi
-    ;;
-esac
-
-for file
-do
-  case $file in
-    /*) pathcomp=/ ;;
-    *)  pathcomp= ;;
-  esac
-  oIFS=$IFS
-  IFS=/
-  set fnord $file
-  shift
-  IFS=$oIFS
-
-  for d
-  do
-    test "x$d" = x && continue
-
-    pathcomp=$pathcomp$d
-    case $pathcomp in
-      -*) pathcomp=./$pathcomp ;;
-    esac
-
-    if test ! -d "$pathcomp"; then
-      echo "mkdir $pathcomp"
-
-      mkdir "$pathcomp" || lasterr=$?
-
-      if test ! -d "$pathcomp"; then
-       errstatus=$lasterr
-      else
-       if test ! -z "$dirmode"; then
-         echo "chmod $dirmode $pathcomp"
-         lasterr=
-         chmod "$dirmode" "$pathcomp" || lasterr=$?
-
-         if test ! -z "$lasterr"; then
-           errstatus=$lasterr
-         fi
-       fi
-      fi
-    fi
-
-    pathcomp=$pathcomp/
-  done
-done
-
-exit $errstatus
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
index 03c29989cc4f5b5ec93331b59b38f3113ef66185..9ef9480f42debcb3a687724d488bb19a8a84fb51 100644 (file)
@@ -1,13 +1,13 @@
 % texinfo.tex -- TeX macros to handle Texinfo files.
-%
+% 
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2009-01-18.17}
+\def\texinfoversion{2010-03-07.08}
 %
 % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
 % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-% 2007, 2008, 2009 Free Software Foundation, Inc.
+% 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 %
 % This texinfo.tex file is free software: you can redistribute it and/or
 % modify it under the terms of the GNU General Public License as
 \let\ptexnewwrite\newwrite
 \let\ptexnoindent=\noindent
 \let\ptexplus=+
+\let\ptexraggedright=\raggedright
 \let\ptexrbrace=\}
 \let\ptexslash=\/
 \let\ptexstar=\*
 \let\ptext=\t
 \let\ptextop=\top
-{\catcode`\'=\active
-\global\let\ptexquoteright'}% Math-mode def from plain.tex.
-\let\ptexraggedright=\raggedright
+{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
 
 % If this character appears in an error message or help string, it
 % starts a new line in the output.
                % We don't want .vr (or whatever) entries like this:
                % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
                % "\acronym" won't work when it's read back in;
-               % it needs to be 
+               % it needs to be
                % {\code {{\tt \backslashcurfont }acronym}
     \shipout\vbox{%
       % Do this early so pdf references go to the beginning of the page.
 \def\?{?\spacefactor=\endofsentencespacefactor\space}
 
 % @frenchspacing on|off  says whether to put extra space after punctuation.
-% 
+%
 \def\onword{on}
 \def\offword{off}
 %
@@ -1285,7 +1284,7 @@ where each line of input produces a line of output.}
 % that's what we do).
 
 % double active backslashes.
-% 
+%
 {\catcode`\@=0 \catcode`\\=\active
  @gdef@activebackslashdouble{%
    @catcode`@\=@active
@@ -1297,11 +1296,11 @@ where each line of input produces a line of output.}
 % us) handles it with this amazing macro to replace tokens, with minor
 % changes for Texinfo.  It is included here under the GPL by permission
 % from the author, Heiko Oberdiek.
-% 
+%
 % #1 is the tokens to replace.
 % #2 is the replacement.
 % #3 is the control sequence with the string.
-% 
+%
 \def\HyPsdSubst#1#2#3{%
   \def\HyPsdReplace##1#1##2\END{%
     ##1%
@@ -1332,13 +1331,16 @@ output) for that.)}
 
 \ifpdf
   %
-  % Color manipulation macros based on pdfcolor.tex.
-  \def\cmykDarkRed{0.28 1 1 0.35}
-  \def\cmykBlack{0 0 0 1}
+  % Color manipulation macros based on pdfcolor.tex,
+  % except using rgb instead of cmyk; the latter is said to render as a
+  % very dark gray on-screen and a very dark halftone in print, instead
+  % of actual black.
+  \def\rgbDarkRed{0.50 0.09 0.12}
+  \def\rgbBlack{0 0 0}
   %
   % k sets the color for filling (usual text, etc.);
   % K sets the color for stroking (thin rules, e.g., normal _'s).
-  \def\pdfsetcolor#1{\pdfliteral{#1 k  #1 K}}
+  \def\pdfsetcolor#1{\pdfliteral{#1 rg  #1 RG}}
   %
   % Set color, and create a mark which defines \thiscolor accordingly,
   % so that \makeheadline knows which color to restore.
@@ -1348,7 +1350,7 @@ output) for that.)}
     \pdfsetcolor{#1}%
   }
   %
-  \def\maincolor{\cmykBlack}
+  \def\maincolor{\rgbBlack}
   \pdfsetcolor{\maincolor}
   \edef\thiscolor{\maincolor}
   \def\lastcolordefs{}
@@ -1443,8 +1445,8 @@ output) for that.)}
   %
   % by default, use a color that is dark enough to print on paper as
   % nearly black, but still distinguishable for online viewing.
-  \def\urlcolor{\cmykDarkRed}
-  \def\linkcolor{\cmykDarkRed}
+  \def\urlcolor{\rgbDarkRed}
+  \def\linkcolor{\rgbDarkRed}
   \def\endlink{\setcolor{\maincolor}\pdfendlink}
   %
   % Adding outlines to PDF; macros for calculating structure of outlines
@@ -1573,7 +1575,7 @@ output) for that.)}
       % tried to figure out what each command should do in the context
       % of @url.  for now, just make @/ a no-op, that's the only one
       % people have actually reported a problem with.
-      % 
+      %
       \normalturnoffactive
       \def\@{@}%
       \let\/=\empty
@@ -1981,7 +1983,7 @@ end
 
 % Definitions for a main text size of 11pt.  This is the default in
 % Texinfo.
-% 
+%
 \def\definetextfontsizexi{%
 % Text fonts (11.2pt, magstep1).
 \def\textnominalsize{11pt}
@@ -2112,7 +2114,7 @@ end
 % section, chapter, etc., sizes following suit.  This is for the GNU
 % Press printing of the Emacs 22 manual.  Maybe other manuals in the
 % future.  Used with @smallbook, which sets the leading to 12pt.
-% 
+%
 \def\definetextfontsizex{%
 % Text fonts (10pt).
 \def\textnominalsize{10pt}
@@ -2201,7 +2203,7 @@ end
 \setfont\secsf\sfbshape{12}{1000}{OT1}
 \let\secbf\secrm
 \setfont\secsc\scbshape{10}{\magstep1}{OT1}
-\font\seci=cmmi12 
+\font\seci=cmmi12
 \font\secsy=cmsy10 scaled \magstep1
 \def\sececsize{1200}
 
@@ -2245,7 +2247,7 @@ end
 % We provide the user-level command
 %   @fonttextsize 10
 % (or 11) to redefine the text font size.  pt is assumed.
-% 
+%
 \def\xword{10}
 \def\xiword{11}
 %
@@ -2255,7 +2257,7 @@ end
   %
   % Set \globaldefs so that documents can use this inside @tex, since
   % makeinfo 4.8 does not support it, but we need it nonetheless.
-  % 
+  %
  \begingroup \globaldefs=1
   \ifx\textsizearg\xword \definetextfontsizex
   \else \ifx\textsizearg\xiword \definetextfontsizexi
@@ -2472,8 +2474,8 @@ end
 % from cmtt (char 0x0d).  The undirected quote is ugly, so don't make it
 % the default, but it works for pasting with more pdf viewers (at least
 % evince), the lilypond developers report.  xpdf does work with the
-% regular 0x27.  
-% 
+% regular 0x27.
+%
 \def\codequoteright{%
   \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
     \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
@@ -2485,7 +2487,7 @@ end
 % and a similar option for the left quote char vs. a grave accent.
 % Modern fonts display ASCII 0x60 as a grave accent, so some people like
 % the code environments to do likewise.
-% 
+%
 \def\codequoteleft{%
   \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
     \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
@@ -2502,27 +2504,40 @@ end
 % Count depth in font-changes, for error checks
 \newcount\fontdepth \fontdepth=0
 
-%% Add scribe-like font environments, plus @l for inline lisp (usually sans
-%% serif) and @ii for TeX italic
+% Font commands.
 
-% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
-% unless the following character is such as not to need one.
-\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
-                    \ptexslash\fi\fi\fi}
-\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
-\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
+% #1 is the font command (\sl vs. \it), #2 is the text to slant.
+% If we are in a monospaced environment, however, 1) always use \ttsl,
+% and 2) do not add an italic correction.
+\def\dosmartslant#1#2{%
+  \ifusingtt 
+    {\ttsl #2\let\next=\relax}%
+    {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}%
+  \next
+}
+\def\smartslanted{\dosmartslant\sl}
+\def\smartitalic{\dosmartslant\it}
 
-% like \smartslanted except unconditionally uses \ttsl.
+% Output an italic correction unless \next (presumed to be the following
+% character) is such as not to need one.
+\def\smartitaliccorrection{%
+  \ifx\next,%
+  \else\ifx\next-%
+  \else\ifx\next.%
+  \else\ptexslash
+  \fi\fi\fi}
+
+% like \smartslanted except unconditionally uses \ttsl, and no ic.
 % @var is set to this for defun arguments.
-\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx}
+\def\ttslanted#1{{\ttsl #1}}
 
 % @cite is like \smartslanted except unconditionally use \sl.  We never want
 % ttsl for book titles, do we?
-\def\cite#1{{\sl #1}\futurelet\next\smartitalicx}
+\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection}
 
 \let\i=\smartitalic
 \let\slanted=\smartslanted
-\def\var#1{{\setupmarkupstyle{var}\smartslanted{#1}}}
+\def\var#1{\smartslanted{#1}}
 \let\dfn=\smartslanted
 \let\emph=\smartitalic
 
@@ -2669,7 +2684,7 @@ end
 % each of the four underscores in __typeof__.  This is undesirable in
 % some manuals, especially if they don't have long identifiers in
 % general.  @allowcodebreaks provides a way to control this.
-% 
+%
 \newif\ifallowcodebreaks  \allowcodebreakstrue
 
 \def\keywordtrue{true}
@@ -2794,7 +2809,7 @@ end
 % @acronym for "FBI", "NATO", and the like.
 % We print this one point size smaller, since it's intended for
 % all-uppercase.
-% 
+%
 \def\acronym#1{\doacronym #1,,\finish}
 \def\doacronym#1,#2,#3\finish{%
   {\selectfonts\lsize #1}%
@@ -2806,7 +2821,7 @@ end
 
 % @abbr for "Comput. J." and the like.
 % No font change, but don't do end-of-sentence spacing.
-% 
+%
 \def\abbr#1{\doabbr #1,,\finish}
 \def\doabbr#1,#2,#3\finish{%
   {\plainfrenchspacing #1}%
@@ -2863,52 +2878,59 @@ end
 % Theiling, which support regular, slanted, bold and bold slanted (and
 % "outlined" (blackboard board, sort of) versions, which we don't need).
 % It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
-% 
+%
 % Although only regular is the truly official Euro symbol, we ignore
 % that.  The Euro is designed to be slightly taller than the regular
 % font height.
-% 
+%
 % feymr - regular
 % feymo - slanted
 % feybr - bold
 % feybo - bold slanted
-% 
+%
 % There is no good (free) typewriter version, to my knowledge.
 % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
 % Hmm.
-% 
+%
 % Also doesn't work in math.  Do we need to do math with euro symbols?
 % Hope not.
-% 
-% 
+%
+%
 \def\euro{{\eurofont e}}
 \def\eurofont{%
   % We set the font at each command, rather than predefining it in
   % \textfonts and the other font-switching commands, so that
   % installations which never need the symbol don't have to have the
   % font installed.
-  % 
+  %
   % There is only one designed size (nominal 10pt), so we always scale
   % that to the current nominal size.
-  % 
+  %
   % By the way, simply using "at 1em" works for cmr10 and the like, but
   % does not work for cmbx10 and other extended/shrunken fonts.
-  % 
+  %
   \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
   %
-  \ifx\curfontstyle\bfstylename 
+  \ifx\curfontstyle\bfstylename
     % bold:
     \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
-  \else 
+  \else
     % regular:
     \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
   \fi
   \thiseurofont
 }
 
-% Hacks for glyphs from the EC fonts similar to \euro.  We don't
-% use \let for the aliases, because sometimes we redefine the original
-% macro, and the alias should reflect the redefinition.
+% Glyphs from the EC fonts.  We don't use \let for the aliases, because
+% sometimes we redefine the original macro, and the alias should reflect
+% the redefinition.
+%
+% Use LaTeX names for the Icelandic letters.
+\def\DH{{\ecfont \char"D0}} % Eth
+\def\dh{{\ecfont \char"F0}} % eth
+\def\TH{{\ecfont \char"DE}} % Thorn
+\def\th{{\ecfont \char"FE}} % thorn
+%
 \def\guillemetleft{{\ecfont \char"13}}
 \def\guillemotleft{\guillemetleft}
 \def\guillemetright{{\ecfont \char"14}}
@@ -2922,7 +2944,7 @@ end
 % we have the precomposed glyphs for the most common cases.  We put the
 % tests to use those glyphs in the single \ogonek macro so we have fewer
 % dummy definitions to worry about for index entries, etc.
-% 
+%
 % ogonek is also used with other letters in Lithuanian (IOU), but using
 % the precomposed glyphs for those is not so easy since they aren't in
 % the same EC font.
@@ -2945,6 +2967,7 @@ end
 \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
 \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
 %
+% Use the ec* fonts (cm-super in outline format) for non-CM glyphs.
 \def\ecfont{%
   % We can't distinguish serif/sans and italic/slanted, but this
   % is used for crude hacks anyway (like adding French and German
@@ -2979,7 +3002,7 @@ end
 % Laurent Siebenmann reports \Orb undefined with:
 %  Textures 1.7.7 (preloaded format=plain 93.10.14)  (68K)  16 APR 2004 02:38
 % so we'll define it if necessary.
-% 
+%
 \ifx\Orb\undefined
 \def\Orb{\mathhexbox20D}
 \fi
@@ -3325,7 +3348,7 @@ end
     % cause the example and the item to crash together.  So we use this
     % bizarre value of 10001 as a signal to \aboveenvbreak to insert
     % \parskip glue after all.  Section titles are handled this way also.
-    % 
+    %
     \penalty 10001
     \endgroup
     \itemxneedsnegativevskipfalse
@@ -4138,7 +4161,7 @@ end
   % processing continues to some further point.  On the other hand, it
   % seems \endinput does not hurt in the printed index arg, since that
   % is still getting written without apparent harm.
-  % 
+  %
   % Sample source (mac-idx3.tex, reported by Graham Percival to
   % help-texinfo, 22may06):
   % @macro funindex {WORD}
@@ -4146,12 +4169,12 @@ end
   % @end macro
   % ...
   % @funindex commtest
-  % 
+  %
   % The above is not enough to reproduce the bug, but it gives the flavor.
-  % 
+  %
   % Sample whatsit resulting:
   % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}}
-  % 
+  %
   % So:
   \let\endinput = \empty
   %
@@ -4203,19 +4226,23 @@ end
   % Non-English letters.
   \definedummyword\AA
   \definedummyword\AE
+  \definedummyword\DH
   \definedummyword\L
-  \definedummyword\OE
   \definedummyword\O
+  \definedummyword\OE
+  \definedummyword\TH
   \definedummyword\aa
   \definedummyword\ae
+  \definedummyword\dh
+  \definedummyword\exclamdown
   \definedummyword\l
-  \definedummyword\oe
   \definedummyword\o
-  \definedummyword\ss
-  \definedummyword\exclamdown
-  \definedummyword\questiondown
+  \definedummyword\oe
   \definedummyword\ordf
   \definedummyword\ordm
+  \definedummyword\questiondown
+  \definedummyword\ss
+  \definedummyword\th
   %
   % Although these internal commands shouldn't show up, sometimes they do.
   \definedummyword\bf
@@ -4310,6 +4337,7 @@ end
   \definedummyword\code
   \definedummyword\command
   \definedummyword\dfn
+  \definedummyword\email
   \definedummyword\emph
   \definedummyword\env
   \definedummyword\file
@@ -4358,19 +4386,23 @@ end
   % Non-English letters.
   \def\AA{AA}%
   \def\AE{AE}%
+  \def\DH{DZZ}%
   \def\L{L}%
   \def\OE{OE}%
   \def\O{O}%
+  \def\TH{ZZZ}%
   \def\aa{aa}%
   \def\ae{ae}%
+  \def\dh{dzz}%
+  \def\exclamdown{!}%
   \def\l{l}%
   \def\oe{oe}%
-  \def\o{o}%
-  \def\ss{ss}%
-  \def\exclamdown{!}%
-  \def\questiondown{?}%
   \def\ordf{a}%
   \def\ordm{o}%
+  \def\o{o}%
+  \def\questiondown{?}%
+  \def\ss{ss}%
+  \def\th{zzz}%
   %
   \def\LaTeX{LaTeX}%
   \def\TeX{TeX}%
@@ -4380,20 +4412,19 @@ end
   \def\bullet{bullet}%
   \def\comma{,}%
   \def\copyright{copyright}%
-  \def\registeredsymbol{R}%
   \def\dots{...}%
   \def\enddots{...}%
   \def\equiv{==}%
   \def\error{error}%
   \def\euro{euro}%
+  \def\expansion{==>}%
   \def\guillemetleft{<<}%
   \def\guillemetright{>>}%
   \def\guilsinglleft{<}%
   \def\guilsinglright{>}%
-  \def\expansion{==>}%
   \def\minus{-}%
-  \def\pounds{pounds}%
   \def\point{.}%
+  \def\pounds{pounds}%
   \def\print{-|}%
   \def\quotedblbase{"}%
   \def\quotedblleft{"}%
@@ -4401,19 +4432,20 @@ end
   \def\quoteleft{`}%
   \def\quoteright{'}%
   \def\quotesinglbase{,}%
+  \def\registeredsymbol{R}%
   \def\result{=>}%
-  \def\textdegree{degrees}%
+  \def\textdegree{o}%
   %
   % We need to get rid of all macros, leaving only the arguments (if present).
   % Of course this is not nearly correct, but it is the best we can do for now.
   % makeinfo does not expand macros in the argument to @deffn, which ends up
   % writing an index entry, and texindex isn't prepared for an index sort entry
   % that starts with \.
-  % 
+  %
   % Since macro invocations are followed by braces, we can just redefine them
   % to take a single TeX argument.  The case of a macro invocation that
   % goes to end-of-line is not handled.
-  % 
+  %
   \macrolist
 }
 
@@ -4541,7 +4573,7 @@ end
     % to re-insert the same penalty (values >10000 are used for various
     % signals); since we just inserted a non-discardable item, any
     % following glue (such as a \parskip) would be a breakpoint.  For example:
-    % 
+    %
     %   @deffn deffn-whatever
     %   @vindex index-whatever
     %   Description.
@@ -5122,7 +5154,9 @@ end
   \gdef\chaplevelprefix{\the\chapno.}%
   \resetallfloatnos
   %
-  \message{\putwordChapter\space \the\chapno}%
+  % \putwordChapter can contain complex things in translations.
+  \toks0=\expandafter{\putwordChapter}%
+  \message{\the\toks0 \space \the\chapno}%
   %
   % Write the actual heading.
   \chapmacro{#1}{Ynumbered}{\the\chapno}%
@@ -5133,15 +5167,17 @@ end
   \global\let\subsubsection = \numberedsubsubsec
 }
 
-\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz
+\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
+%
 \def\appendixzzz#1{%
   \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
     \global\advance\appendixno by 1
   \gdef\chaplevelprefix{\appendixletter.}%
   \resetallfloatnos
   %
-  \def\appendixnum{\putwordAppendix\space \appendixletter}%
-  \message{\appendixnum}%
+  % \putwordAppendix can contain complex things in translations.
+  \toks0=\expandafter{\putwordAppendix}%
+  \message{\the\toks0 \space \appendixletter}%
   %
   \chapmacro{#1}{Yappendix}{\appendixletter}%
   %
@@ -5374,7 +5410,10 @@ end
     \xdef\lastchapterdefs{%
       \gdef\noexpand\thischaptername{\the\toks0}%
       \gdef\noexpand\thischapternum{\appendixletter}%
-      \gdef\noexpand\thischapter{\putwordAppendix{} \noexpand\thischapternum:
+      % \noexpand\putwordAppendix avoids expanding indigestible
+      % commands in some of the translations.
+      \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
+                                 \noexpand\thischapternum:
                                  \noexpand\thischaptername}%
     }%
   \else
@@ -5382,7 +5421,10 @@ end
     \xdef\lastchapterdefs{%
       \gdef\noexpand\thischaptername{\the\toks0}%
       \gdef\noexpand\thischapternum{\the\chapno}%
-      \gdef\noexpand\thischapter{\putwordChapter{} \noexpand\thischapternum:
+      % \noexpand\putwordChapter avoids expanding indigestible
+      % commands in some of the translations.
+      \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
+                                 \noexpand\thischapternum:
                                  \noexpand\thischaptername}%
     }%
   \fi\fi\fi
@@ -5525,7 +5567,10 @@ end
         \xdef\lastsectiondefs{%
           \gdef\noexpand\thissectionname{\the\toks0}%
           \gdef\noexpand\thissectionnum{#4}%
-          \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum:
+          % \noexpand\putwordSection avoids expanding indigestible
+          % commands in some of the translations.
+          \gdef\noexpand\thissection{\noexpand\putwordSection{}
+                                     \noexpand\thissectionnum:
                                      \noexpand\thissectionname}%
         }%
       \fi
@@ -5535,7 +5580,10 @@ end
         \xdef\lastsectiondefs{%
           \gdef\noexpand\thissectionname{\the\toks0}%
           \gdef\noexpand\thissectionnum{#4}%
-          \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum:
+          % \noexpand\putwordSection avoids expanding indigestible
+          % commands in some of the translations.
+          \gdef\noexpand\thissection{\noexpand\putwordSection{}
+                                     \noexpand\thissectionnum:
                                      \noexpand\thissectionname}%
         }%
       \fi
@@ -5611,11 +5659,11 @@ end
   % glue accumulate.  (Not a breakpoint because it's preceded by a
   % discardable item.)
   \vskip-\parskip
-  % 
+  %
   % This is purely so the last item on the list is a known \penalty >
   % 10000.  This is so \startdefun can avoid allowing breakpoints after
   % section headings.  Otherwise, it would insert a valid breakpoint between:
-  % 
+  %
   %   @section sec-whatever
   %   @deffn def-whatever
   \penalty 10001
@@ -5673,7 +5721,7 @@ end
 % These characters do not print properly in the Computer Modern roman
 % fonts, so we must take special care.  This is more or less redundant
 % with the Texinfo input format setup at the end of this file.
-% 
+%
 \def\activecatcodes{%
   \catcode`\"=\active
   \catcode`\$=\active
@@ -5723,7 +5771,7 @@ end
 
 % redefined for the two-volume lispref.  We always output on
 % \jobname.toc even if this is redefined.
-% 
+%
 \def\tocreadfilename{\jobname.toc}
 
 % Normal (long) toc.
@@ -5912,6 +5960,10 @@ end
   \catcode`\'=\other
   \escapechar=`\\
   %
+  % ' is active in math mode (mathcode"8000).  So reset it, and all our
+  % other math active characters (just in case), to plain's definitions.
+  \mathactive
+  %
   \let\b=\ptexb
   \let\bullet=\ptexbullet
   \let\c=\ptexc
@@ -6815,7 +6867,7 @@ end
 % This does \let #1 = #2, with \csnames; that is,
 %   \let \csname#1\endcsname = \csname#2\endcsname
 % (except of course we have to play expansion games).
-% 
+%
 \def\cslet#1#2{%
   \expandafter\let
   \csname#1\expandafter\endcsname
@@ -7975,21 +8027,22 @@ end
     \closein 1
   \endgroup % end raw TeX
 \endgroup}
-}
 %
 % If they passed de_DE, and txi-de_DE.tex doesn't exist,
 % try txi-de.tex.
-% 
-\def\documentlanguagetrywithoutunderscore#1_#2\finish{%
+%
+\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
   \openin 1 txi-#1.tex
   \ifeof 1
     \errhelp = \nolanghelp
     \errmessage{Cannot read language file txi-#1.tex}%
   \else
+    \globaldefs = 1  % everything in the txi-LL files needs to persist
     \input txi-#1.tex
   \fi
   \closein 1
 }
+}% end of special _ catcode
 %
 \newhelp\nolanghelp{The given language definition file cannot be found or
 is empty.  Maybe you need to install it?  Putting it in the current
@@ -7998,16 +8051,16 @@ directory should work if nowhere else does.}
 % This macro is called from txi-??.tex files; the first argument is the
 % \language name to set (without the "\lang@" prefix), the second and
 % third args are \{left,right}hyphenmin.
-% 
+%
 % The language names to pass are determined when the format is built.
 % See the etex.log file created at that time, e.g.,
 % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
-% 
+%
 % With TeX Live 2008, etex now includes hyphenation patterns for all
 % available languages.  This means we can support hyphenation in
 % Texinfo, at least to some extent.  (This still doesn't solve the
 % accented characters problem.)
-% 
+%
 \catcode`@=11
 \def\txisetlanguage#1#2#3{%
   % do not set the language if the name is undefined in the current TeX.
@@ -8062,7 +8115,7 @@ directory should work if nowhere else does.}
      \setnonasciicharscatcode\active
      \lattwochardefs
   %
-  \else \ifx \declaredencoding \latone 
+  \else \ifx \declaredencoding \latone
      \setnonasciicharscatcode\active
      \latonechardefs
   %
@@ -8074,7 +8127,7 @@ directory should work if nowhere else does.}
      \setnonasciicharscatcode\active
      \utfeightchardefs
   %
-  \else 
+  \else
     \message{Unknown document encoding #1, ignoring.}%
   %
   \fi % utfeight
@@ -8086,7 +8139,7 @@ directory should work if nowhere else does.}
 
 % A message to be logged when using a character that isn't available
 % the default font encoding (OT1).
-% 
+%
 \def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}}
 
 % Take account of \c (plain) vs. \, (Texinfo) difference.
@@ -8099,21 +8152,21 @@ directory should work if nowhere else does.}
 %
 % Latin1 (ISO-8859-1) character definitions.
 \def\latonechardefs{%
-  \gdef^^a0{~} 
+  \gdef^^a0{~}
   \gdef^^a1{\exclamdown}
-  \gdef^^a2{\missingcharmsg{CENT SIGN}} 
+  \gdef^^a2{\missingcharmsg{CENT SIGN}}
   \gdef^^a3{{\pounds}}
   \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
   \gdef^^a5{\missingcharmsg{YEN SIGN}}
-  \gdef^^a6{\missingcharmsg{BROKEN BAR}} 
+  \gdef^^a6{\missingcharmsg{BROKEN BAR}}
   \gdef^^a7{\S}
-  \gdef^^a8{\"{}} 
-  \gdef^^a9{\copyright} 
+  \gdef^^a8{\"{}}
+  \gdef^^a9{\copyright}
   \gdef^^aa{\ordf}
   \gdef^^ab{\guillemetleft}
   \gdef^^ac{$\lnot$}
-  \gdef^^ad{\-} 
-  \gdef^^ae{\registeredsymbol} 
+  \gdef^^ad{\-}
+  \gdef^^ae{\registeredsymbol}
   \gdef^^af{\={}}
   %
   \gdef^^b0{\textdegree}
@@ -8140,7 +8193,7 @@ directory should work if nowhere else does.}
   \gdef^^c2{\^A}
   \gdef^^c3{\~A}
   \gdef^^c4{\"A}
-  \gdef^^c5{\ringaccent A} 
+  \gdef^^c5{\ringaccent A}
   \gdef^^c6{\AE}
   \gdef^^c7{\cedilla C}
   \gdef^^c8{\`E}
@@ -8152,7 +8205,7 @@ directory should work if nowhere else does.}
   \gdef^^ce{\^I}
   \gdef^^cf{\"I}
   %
-  \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER ETH}}
+  \gdef^^d0{\DH}
   \gdef^^d1{\~N}
   \gdef^^d2{\`O}
   \gdef^^d3{\'O}
@@ -8166,7 +8219,7 @@ directory should work if nowhere else does.}
   \gdef^^db{\^U}
   \gdef^^dc{\"U}
   \gdef^^dd{\'Y}
-  \gdef^^de{\missingcharmsg{LATIN CAPITAL LETTER THORN}}
+  \gdef^^de{\TH}
   \gdef^^df{\ss}
   %
   \gdef^^e0{\`a}
@@ -8186,7 +8239,7 @@ directory should work if nowhere else does.}
   \gdef^^ee{\^{\dotless i}}
   \gdef^^ef{\"{\dotless i}}
   %
-  \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER ETH}}
+  \gdef^^f0{\dh}
   \gdef^^f1{\~n}
   \gdef^^f2{\`o}
   \gdef^^f3{\'o}
@@ -8200,7 +8253,7 @@ directory should work if nowhere else does.}
   \gdef^^fb{\^u}
   \gdef^^fc{\"u}
   \gdef^^fd{\'y}
-  \gdef^^fe{\missingcharmsg{LATIN SMALL LETTER THORN}}
+  \gdef^^fe{\th}
   \gdef^^ff{\"y}
 }
 
@@ -8272,7 +8325,7 @@ directory should work if nowhere else does.}
   \gdef^^ce{\^I}
   \gdef^^cf{\v D}
   %
-  \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER D WITH STROKE}}
+  \gdef^^d0{\DH}
   \gdef^^d1{\'N}
   \gdef^^d2{\v N}
   \gdef^^d3{\'O}
@@ -8281,7 +8334,7 @@ directory should work if nowhere else does.}
   \gdef^^d6{\"O}
   \gdef^^d7{$\times$}
   \gdef^^d8{\v R}
-  \gdef^^d9{\ringaccent U} 
+  \gdef^^d9{\ringaccent U}
   \gdef^^da{\'U}
   \gdef^^db{\H U}
   \gdef^^dc{\"U}
@@ -8306,7 +8359,7 @@ directory should work if nowhere else does.}
   \gdef^^ee{\^\i}
   \gdef^^ef{\v d}
   %
-  \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER D WITH STROKE}}
+  \gdef^^f0{\dh}
   \gdef^^f1{\'n}
   \gdef^^f2{\v n}
   \gdef^^f3{\'o}
@@ -8325,11 +8378,11 @@ directory should work if nowhere else does.}
 }
 
 % UTF-8 character definitions.
-% 
+%
 % This code to support UTF-8 is based on LaTeX's utf8.def, with some
 % changes for Texinfo conventions.  It is included here under the GPL by
 % permission from Frank Mittelbach and the LaTeX team.
-% 
+%
 \newcount\countUTFx
 \newcount\countUTFy
 \newcount\countUTFz
@@ -8479,6 +8532,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{00CE}{\^I}
   \DeclareUnicodeCharacter{00CF}{\"I}
 
+  \DeclareUnicodeCharacter{00D0}{\DH}
   \DeclareUnicodeCharacter{00D1}{\~N}
   \DeclareUnicodeCharacter{00D2}{\`O}
   \DeclareUnicodeCharacter{00D3}{\'O}
@@ -8491,6 +8545,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{00DB}{\^U}
   \DeclareUnicodeCharacter{00DC}{\"U}
   \DeclareUnicodeCharacter{00DD}{\'Y}
+  \DeclareUnicodeCharacter{00DE}{\TH}
   \DeclareUnicodeCharacter{00DF}{\ss}
 
   \DeclareUnicodeCharacter{00E0}{\`a}
@@ -8510,6 +8565,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
   \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
 
+  \DeclareUnicodeCharacter{00F0}{\dh}
   \DeclareUnicodeCharacter{00F1}{\~n}
   \DeclareUnicodeCharacter{00F2}{\`o}
   \DeclareUnicodeCharacter{00F3}{\'o}
@@ -8522,6 +8578,7 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{00FB}{\^u}
   \DeclareUnicodeCharacter{00FC}{\"u}
   \DeclareUnicodeCharacter{00FD}{\'y}
+  \DeclareUnicodeCharacter{00FE}{\th}
   \DeclareUnicodeCharacter{00FF}{\"y}
 
   \DeclareUnicodeCharacter{0100}{\=A}
@@ -9178,7 +9235,7 @@ directory should work if nowhere else does.}
 
 % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
 % the literal character `\'.
-% 
+%
 @def@normalturnoffactive{%
   @let\=@normalbackslash
   @let"=@normaldoublequote
@@ -9234,7 +9291,7 @@ directory should work if nowhere else does.}
 @catcode`@`=@active
 @markupsetuplqdefault
 @markupsetuprqdefault
+
 @c Local variables:
 @c eval: (add-hook 'write-file-hooks 'time-stamp)
 @c page-delimiter: "^\\\\message"
diff --git a/build-aux/warn-on-use.h b/build-aux/warn-on-use.h
new file mode 100644 (file)
index 0000000..7a3a9f0
--- /dev/null
@@ -0,0 +1,77 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A C macro for emitting warnings if a function is used.
+   Copyright (C) 2010 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
+   Lesser 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/>.  */
+
+/* _GL_WARN_ON_USE(function, "literal string") issues a declaration
+   for FUNCTION which will then trigger a compiler warning containing
+   the text of "literal string" anywhere that function is called, if
+   supported by the compiler.  If the compiler does not support this
+   feature, the macro expands to an unused extern declaration.
+
+   This macro is useful for marking a function as a potential
+   portability trap, with the intent that "literal string" include
+   instructions on the replacement function that should be used
+   instead.  However, one of the reasons that a function is a
+   portability trap is if it has the wrong signature.  Declaring
+   FUNCTION with a different signature in C is a compilation error, so
+   this macro must use the same type as any existing declaration so
+   that programs that avoid the problematic FUNCTION do not fail to
+   compile merely because they included a header that poisoned the
+   function.  But this implies that _GL_WARN_ON_USE is only safe to
+   use if FUNCTION is known to already have a declaration.  Use of
+   this macro implies that there must not be any other macro hiding
+   the declaration of FUNCTION; but undefining FUNCTION first is part
+   of the poisoning process anyway (although for symbols that are
+   provided only via a macro, the result is a compilation error rather
+   than a warning containing "literal string").  Also note that in
+   C++, it is only safe to use if FUNCTION has no overloads.
+
+   For an example, it is possible to poison 'getline' by:
+   - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]],
+     [getline]) in configure.ac, which potentially defines
+     HAVE_RAW_DECL_GETLINE
+   - adding this code to a header that wraps the system <stdio.h>:
+     #undef getline
+     #if HAVE_RAW_DECL_GETLINE
+     _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but"
+       "not universally present; use the gnulib module getline");
+     #endif
+
+   It is not possible to directly poison global variables.  But it is
+   possible to write a wrapper accessor function, and poison that
+   (less common usage, like &environ, will cause a compilation error
+   rather than issue the nice warning, but the end result of informing
+   the developer about their portability problem is still achieved):
+   #if HAVE_RAW_DECL_ENVIRON
+   static inline char ***rpl_environ (void) { return &environ; }
+   _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared");
+   # undef environ
+   # define environ (*rpl_environ ())
+   #endif
+   */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern int _gl_warn_on_use
+# endif
+#endif
index 7278b6a357313bf7dded6fd121757f976242e825..84d563405e6e29a64a4ffdb07da262e2e5628dba 100755 (executable)
@@ -1,10 +1,10 @@
 #! /bin/sh
 # ylwrap - wrapper for lex/yacc invocations.
 
-scriptversion=2007-11-22.22
+scriptversion=2009-04-28.21; # UTC
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005,
-# 2007  Free Software Foundation, Inc.
+# 2007, 2009 Free Software Foundation, Inc.
 #
 # Written by Tom Tromey <tromey@cygnus.com>.
 #
@@ -19,9 +19,7 @@ scriptversion=2007-11-22.22
 # 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/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -219,5 +217,6 @@ exit $ret
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/config.h.in b/config.h.in
new file mode 100644 (file)
index 0000000..f55a85d
--- /dev/null
@@ -0,0 +1,1943 @@
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define if the compiler is building for multiple architectures of Apple
+   platforms at once. */
+#undef AA_APPLE_UNIVERSAL_BUILD
+
+/* Define to the number of bits in type 'ptrdiff_t'. */
+#undef BITSIZEOF_PTRDIFF_T
+
+/* Define to the number of bits in type 'sig_atomic_t'. */
+#undef BITSIZEOF_SIG_ATOMIC_T
+
+/* Define to the number of bits in type 'size_t'. */
+#undef BITSIZEOF_SIZE_T
+
+/* Define to the number of bits in type 'wchar_t'. */
+#undef BITSIZEOF_WCHAR_T
+
+/* Define to the number of bits in type 'wint_t'. */
+#undef BITSIZEOF_WINT_T
+
+/* Define to the program name of bzip2 compressor program */
+#undef BZIP2_PROGRAM
+
+/* Define to 1 if chown fails to change ctime when at least one argument was
+   not -1. */
+#undef CHOWN_CHANGE_TIME_BUG
+
+/* Define if chown is not POSIX compliant regarding IDs of -1. */
+#undef CHOWN_FAILS_TO_HONOR_ID_OF_NEGATIVE_ONE
+
+/* Define if chown modifies symlinks. */
+#undef CHOWN_MODIFIES_SYMLINK
+
+/* Define to 1 if chown mishandles trailing slash. */
+#undef CHOWN_TRAILING_SLASH_BUG
+
+/* Define to the program name of compress compressor program */
+#undef COMPRESS_PROGRAM
+
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+   systems. This function is required for `alloca.c' support on those systems.
+   */
+#undef CRAY_STACKSEG_END
+
+/* Define to 1 if using `alloca.c'. */
+#undef C_ALLOCA
+
+/* Define to a string giving the full name of the default archive file. */
+#undef DEFAULT_ARCHIVE
+
+/* By default produce archives of this format */
+#undef DEFAULT_ARCHIVE_FORMAT
+
+/* Define to a number giving the default blocking size for archives. */
+#undef DEFAULT_BLOCKING
+
+/* Define to a default quoting style (see lib/quoteargs.c for the list) */
+#undef DEFAULT_QUOTING_STYLE
+
+/* Define full file name of rmt program. */
+#undef DEFAULT_RMT_COMMAND
+
+/* Define to 1 if density may be indicated by [lmh] at end of device. */
+#undef DENSITY_LETTER
+
+/* Define to a string giving the prefix of the default device, without the
+   part specifying the unit and density. */
+#undef DEVICE_PREFIX
+
+/* the name of the file descriptor member of DIR */
+#undef DIR_FD_MEMBER_NAME
+
+#ifdef DIR_FD_MEMBER_NAME
+# define DIR_TO_FD(Dir_p) ((Dir_p)->DIR_FD_MEMBER_NAME)
+#else
+# define DIR_TO_FD(Dir_p) -1
+#endif
+
+
+/* Define to 1 if // is a file system root distinct from /. */
+#undef DOUBLE_SLASH_IS_DISTINCT_ROOT
+
+/* Define if struct dirent has a member d_ino that actually works. */
+#undef D_INO_IN_DIRENT
+
+/* Define to 1 if translation of program messages to the user's native
+   language is requested. */
+#undef ENABLE_NLS
+
+/* Define to 1 if your platform has fchownat, but it cannot perform lchown
+   tasks. */
+#undef FCHOWNAT_NOFOLLOW_BUG
+
+/* Define this to 1 if F_DUPFD behavior does not match POSIX */
+#undef FCNTL_DUPFD_BUGGY
+
+/* Define on systems for which file names may have a so-called `drive letter'
+   prefix, define this to compute the length of that prefix, including the
+   colon. */
+#undef FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX
+
+/* Define if the backslash character may also serve as a file name component
+   separator. */
+#undef FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR
+
+/* Define if a drive letter prefix denotes a relative path if it is not
+   followed by a file name component separator. */
+#undef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
+
+/* Define to 1 if mkdir mistakenly creates a directory given with a trailing
+   dot component. */
+#undef FUNC_MKDIR_DOT_BUG
+
+/* Define to 1 if realpath() can malloc memory, always gives an absolute path,
+   and handles trailing slash correctly. */
+#undef FUNC_REALPATH_WORKS
+
+/* Define to 1 if futimesat mishandles a NULL file name. */
+#undef FUTIMESAT_NULL_BUG
+
+/* Define if gettimeofday clobbers the localtime buffer. */
+#undef GETTIMEOFDAY_CLOBBERS_LOCALTIME
+
+/* Define this to 'void' or 'struct timezone' to match the system's
+   declaration of the second argument to gettimeofday. */
+#undef GETTIMEOFDAY_TIMEZONE
+
+/* Define to make the limit macros in <stdint.h> visible. */
+#undef GL_TRIGGER_STDC_LIMIT_MACROS
+
+/* Define to 1 when using the gnulib module btowc. */
+#undef GNULIB_BTOWC
+
+/* Define to 1 when using the gnulib module canonicalize. */
+#undef GNULIB_CANONICALIZE
+
+/* Define to 1 when using the gnulib module canonicalize_file_name. */
+#undef GNULIB_CANONICALIZE_FILE_NAME
+
+/* Define to 1 when using the gnulib module chown. */
+#undef GNULIB_CHOWN
+
+/* Define to 1 when using the gnulib module close. */
+#undef GNULIB_CLOSE
+
+/* Define to 1 when using the gnulib module close-stream. */
+#undef GNULIB_CLOSE_STREAM
+
+/* Define to 1 when using the gnulib module dirent-safer. */
+#undef GNULIB_DIRENT_SAFER
+
+/* Define to 1 when using the gnulib module dirfd. */
+#undef GNULIB_DIRFD
+
+/* Define to 1 when using the gnulib module dirname. */
+#undef GNULIB_DIRNAME
+
+/* Define to 1 when using the gnulib module dup2. */
+#undef GNULIB_DUP2
+
+/* Define to 1 when using the gnulib module environ. */
+#undef GNULIB_ENVIRON
+
+/* Define to 1 when using the gnulib module fchdir. */
+#undef GNULIB_FCHDIR
+
+/* Define to 1 when using the gnulib module fclose. */
+#undef GNULIB_FCLOSE
+
+/* Define to 1 when using the gnulib module fcntl. */
+#undef GNULIB_FCNTL
+
+/* Define to 1 when using the gnulib module fdopendir. */
+#undef GNULIB_FDOPENDIR
+
+/* Define to 1 when using the gnulib module fseeko. */
+#undef GNULIB_FSEEKO
+
+/* Define to 1 when using the gnulib module ftruncate. */
+#undef GNULIB_FTRUNCATE
+
+/* Define to 1 when using the gnulib module getcwd. */
+#undef GNULIB_GETCWD
+
+/* Define to 1 when using the gnulib module getdelim. */
+#undef GNULIB_GETDELIM
+
+/* Define to 1 when using the gnulib module getdtablesize. */
+#undef GNULIB_GETDTABLESIZE
+
+/* Define to 1 when using the gnulib module getline. */
+#undef GNULIB_GETLINE
+
+/* Define to 1 when using the gnulib module getopt-gnu. */
+#undef GNULIB_GETOPT_GNU
+
+/* Define to 1 when using the gnulib module getpagesize. */
+#undef GNULIB_GETPAGESIZE
+
+/* Define to 1 when using the gnulib module gettimeofday. */
+#undef GNULIB_GETTIMEOFDAY
+
+/* Define to 1 when using the gnulib module lchown. */
+#undef GNULIB_LCHOWN
+
+/* Define to 1 when using the gnulib module lseek. */
+#undef GNULIB_LSEEK
+
+/* Define to 1 when using the gnulib module lstat. */
+#undef GNULIB_LSTAT
+
+/* Define to indicate the 'malloc' module. */
+#undef GNULIB_MALLOC_GNU
+
+/* Define to 1 when using the gnulib module malloc-posix. */
+#undef GNULIB_MALLOC_POSIX
+
+/* Define to 1 when using the gnulib module mbrtowc. */
+#undef GNULIB_MBRTOWC
+
+/* Define to 1 when using the gnulib module mbscasecmp. */
+#undef GNULIB_MBSCASECMP
+
+/* Define to 1 when using the gnulib module mbsinit. */
+#undef GNULIB_MBSINIT
+
+/* Define to 1 when using the gnulib module mbsrtowcs. */
+#undef GNULIB_MBSRTOWCS
+
+/* Define to 1 when using the gnulib module memchr. */
+#undef GNULIB_MEMCHR
+
+/* Define to 1 when using the gnulib module mempcpy. */
+#undef GNULIB_MEMPCPY
+
+/* Define to 1 when using the gnulib module memrchr. */
+#undef GNULIB_MEMRCHR
+
+/* Define to 1 when using the gnulib module mkdtemp. */
+#undef GNULIB_MKDTEMP
+
+/* Define to 1 when using the gnulib module mktime. */
+#undef GNULIB_MKTIME
+
+/* Define to 1 when using the gnulib module nl_langinfo. */
+#undef GNULIB_NL_LANGINFO
+
+/* Define to 1 when using the gnulib module open. */
+#undef GNULIB_OPEN
+
+/* Define to 1 to add extern declaration of program_invocation_name to argp.h
+   */
+#undef GNULIB_PROGRAM_INVOCATION_NAME
+
+/* Define to 1 to add extern declaration of program_invocation_short_name to
+   argp.h */
+#undef GNULIB_PROGRAM_INVOCATION_SHORT_NAME
+
+/* Define to 1 when using the gnulib module rawmemchr. */
+#undef GNULIB_RAWMEMCHR
+
+/* Define to 1 when using the gnulib module readlink. */
+#undef GNULIB_READLINK
+
+/* Define to 1 when using the gnulib module realloc-posix. */
+#undef GNULIB_REALLOC_POSIX
+
+/* Define to 1 when using the gnulib module rmdir. */
+#undef GNULIB_RMDIR
+
+/* Define to 1 when using the gnulib module rpmatch. */
+#undef GNULIB_RPMATCH
+
+/* Define to 1 when using the gnulib module setenv. */
+#undef GNULIB_SETENV
+
+/* Define to 1 when using the gnulib module sleep. */
+#undef GNULIB_SLEEP
+
+/* Define to 1 when using the gnulib module snprintf. */
+#undef GNULIB_SNPRINTF
+
+/* Define to 1 when using the gnulib module stat. */
+#undef GNULIB_STAT
+
+/* Define to 1 when using the gnulib module stpcpy. */
+#undef GNULIB_STPCPY
+
+/* Define to 1 when using the gnulib module strchrnul. */
+#undef GNULIB_STRCHRNUL
+
+/* Define to 1 when using the gnulib module strdup. */
+#undef GNULIB_STRDUP
+
+/* Define to 1 when using the gnulib module strerror. */
+#undef GNULIB_STRERROR
+
+/* Define to 1 when using the gnulib module strndup. */
+#undef GNULIB_STRNDUP
+
+/* Define to 1 when using the gnulib module strnlen. */
+#undef GNULIB_STRNLEN
+
+/* Define to 1 when using the gnulib module strtoll. */
+#undef GNULIB_STRTOLL
+
+/* Define to 1 when using the gnulib module strtoull. */
+#undef GNULIB_STRTOULL
+
+/* Define to 1 when using the gnulib module unlink. */
+#undef GNULIB_UNLINK
+
+/* Define to 1 when using the gnulib module unsetenv. */
+#undef GNULIB_UNSETENV
+
+/* Define to 1 when using the gnulib module vasprintf. */
+#undef GNULIB_VASPRINTF
+
+/* Define to 1 when using the gnulib module vsnprintf. */
+#undef GNULIB_VSNPRINTF
+
+/* Define to 1 when using the gnulib module wcrtomb. */
+#undef GNULIB_WCRTOMB
+
+/* Define to 1 when using the gnulib module wcwidth. */
+#undef GNULIB_WCWIDTH
+
+/* Define to 1 when using the gnulib module write. */
+#undef GNULIB_WRITE
+
+/* Define to the program name of gzip compressor program */
+#undef GZIP_PROGRAM
+
+/* Define to 1 if you have the `alarm' function. */
+#undef HAVE_ALARM
+
+/* Define to 1 if you have 'alloca' after including <alloca.h>, a header that
+   may be supplied by this distribution. */
+#undef HAVE_ALLOCA
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+   */
+#undef HAVE_ALLOCA_H
+
+/* Define to 1 if you have the <bp-sym.h> header file. */
+#undef HAVE_BP_SYM_H
+
+/* Define to 1 if you have the `btowc' function. */
+#undef HAVE_BTOWC
+
+/* Define to 1 if you have the `canonicalize_file_name' function. */
+#undef HAVE_CANONICALIZE_FILE_NAME
+
+/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
+   CoreFoundation framework. */
+#undef HAVE_CFLOCALECOPYCURRENT
+
+/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
+   the CoreFoundation framework. */
+#undef HAVE_CFPREFERENCESCOPYAPPVALUE
+
+/* Define to 1 if you have the `chown' function. */
+#undef HAVE_CHOWN
+
+/* Define to 1 if you have the `chsize' function. */
+#undef HAVE_CHSIZE
+
+/* Define to 1 if you have the `clock_gettime' function. */
+#undef HAVE_CLOCK_GETTIME
+
+/* Define to 1 if you have the `clock_settime' function. */
+#undef HAVE_CLOCK_SETTIME
+
+/* Define if you have compound literals. */
+#undef HAVE_COMPOUND_LITERALS
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+   */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_CLEARERR_UNLOCKED
+
+/* Define to 1 if you have the declaration of `dirfd', and to 0 if you don't.
+   */
+#undef HAVE_DECL_DIRFD
+
+/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you
+   don't. */
+#undef HAVE_DECL_FEOF_UNLOCKED
+
+/* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FERROR_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FFLUSH_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FGETS_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FPUTC_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FPUTS_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FREAD_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FWRITE_UNLOCKED
+
+/* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_GETCHAR_UNLOCKED
+
+/* Define to 1 if you have the declaration of `getcwd', and to 0 if you don't.
+   */
+#undef HAVE_DECL_GETCWD
+
+/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
+   don't. */
+#undef HAVE_DECL_GETC_UNLOCKED
+
+/* Define to 1 if you have the declaration of `getdelim', and to 0 if you
+   don't. */
+#undef HAVE_DECL_GETDELIM
+
+/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't.
+   */
+#undef HAVE_DECL_GETENV
+
+/* Define to 1 if you have the declaration of `getgrgid', and to 0 if you
+   don't. */
+#undef HAVE_DECL_GETGRGID
+
+/* Define to 1 if you have the declaration of `getline', and to 0 if you
+   don't. */
+#undef HAVE_DECL_GETLINE
+
+/* Define to 1 if you have the declaration of `getpwuid', and to 0 if you
+   don't. */
+#undef HAVE_DECL_GETPWUID
+
+/* Define to 1 if you have the declaration of `imaxabs', and to 0 if you
+   don't. */
+#undef HAVE_DECL_IMAXABS
+
+/* Define to 1 if you have the declaration of `imaxdiv', and to 0 if you
+   don't. */
+#undef HAVE_DECL_IMAXDIV
+
+/* Define to 1 if you have the declaration of `isblank', and to 0 if you
+   don't. */
+#undef HAVE_DECL_ISBLANK
+
+/* Define to 1 if you have the declaration of `memrchr', and to 0 if you
+   don't. */
+#undef HAVE_DECL_MEMRCHR
+
+/* Define to 1 if you have the declaration of `optreset', and to 0 if you
+   don't. */
+#undef HAVE_DECL_OPTRESET
+
+/* Define to 1 if you have the declaration of `program_invocation_name', and
+   to 0 if you don't. */
+#undef HAVE_DECL_PROGRAM_INVOCATION_NAME
+
+/* Define to 1 if you have the declaration of `program_invocation_short_name',
+   and to 0 if you don't. */
+#undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
+
+/* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_PUTCHAR_UNLOCKED
+
+/* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you
+   don't. */
+#undef HAVE_DECL_PUTC_UNLOCKED
+
+/* Define to 1 if you have the declaration of `sleep', and to 0 if you don't.
+   */
+#undef HAVE_DECL_SLEEP
+
+/* Define to 1 if you have the declaration of `snprintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_SNPRINTF
+
+/* Define to 1 if you have the declaration of `strdup', and to 0 if you don't.
+   */
+#undef HAVE_DECL_STRDUP
+
+/* Define to 1 if you have the declaration of `strerror', and to 0 if you
+   don't. */
+#undef HAVE_DECL_STRERROR
+
+/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
+   don't. */
+#undef HAVE_DECL_STRERROR_R
+
+/* Define to 1 if you have the declaration of `strncasecmp', and to 0 if you
+   don't. */
+#undef HAVE_DECL_STRNCASECMP
+
+/* Define to 1 if you have the declaration of `strndup', and to 0 if you
+   don't. */
+#undef HAVE_DECL_STRNDUP
+
+/* Define to 1 if you have the declaration of `strnlen', and to 0 if you
+   don't. */
+#undef HAVE_DECL_STRNLEN
+
+/* Define to 1 if you have the declaration of `strtoimax', and to 0 if you
+   don't. */
+#undef HAVE_DECL_STRTOIMAX
+
+/* Define to 1 if you have the declaration of `strtoll', and to 0 if you
+   don't. */
+#undef HAVE_DECL_STRTOLL
+
+/* Define to 1 if you have the declaration of `strtoull', and to 0 if you
+   don't. */
+#undef HAVE_DECL_STRTOULL
+
+/* Define to 1 if you have the declaration of `strtoumax', and to 0 if you
+   don't. */
+#undef HAVE_DECL_STRTOUMAX
+
+/* Define to 1 if you have the declaration of `time', and to 0 if you don't.
+   */
+#undef HAVE_DECL_TIME
+
+/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't.
+   */
+#undef HAVE_DECL_TZNAME
+
+/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_VSNPRINTF
+
+/* Define to 1 if you have the declaration of `wcwidth', and to 0 if you
+   don't. */
+#undef HAVE_DECL_WCWIDTH
+
+/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL__SNPRINTF
+
+/* Define to 1 if you have the declaration of `__fpending', and to 0 if you
+   don't. */
+#undef HAVE_DECL___FPENDING
+
+/* Define to 1 if you have the <dirent.h> header file. */
+#undef HAVE_DIRENT_H
+
+/* Define to 1 if you have the `dirfd' function. */
+#undef HAVE_DIRFD
+
+/* Define to 1 if you have the `dup2' function. */
+#undef HAVE_DUP2
+
+/* Define if you have the declaration of environ. */
+#undef HAVE_ENVIRON_DECL
+
+/* Define to 1 if you have the <errno.h> header file. */
+#undef HAVE_ERRNO_H
+
+/* Define to 1 if you have the `fchdir' function. */
+#undef HAVE_FCHDIR
+
+/* Define to 1 if you have the `fchmodat' function. */
+#undef HAVE_FCHMODAT
+
+/* Define to 1 if you have the `fchown' function. */
+#undef HAVE_FCHOWN
+
+/* Define to 1 if you have the `fcntl' function. */
+#undef HAVE_FCNTL
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `fdopendir' function. */
+#undef HAVE_FDOPENDIR
+
+/* Define to 1 if you have the <features.h> header file. */
+#undef HAVE_FEATURES_H
+
+/* Define to 1 if you have the <float.h> header file. */
+#undef HAVE_FLOAT_H
+
+/* Define to 1 if you have the `flockfile' function. */
+#undef HAVE_FLOCKFILE
+
+/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
+#undef HAVE_FSEEKO
+
+/* Define to 1 if you have the `fstatat' function. */
+#undef HAVE_FSTATAT
+
+/* Define to 1 if you have the `fsync' function. */
+#undef HAVE_FSYNC
+
+/* Define to 1 if you have the `ftruncate' function. */
+#undef HAVE_FTRUNCATE
+
+/* Define to 1 if you have the `funlockfile' function. */
+#undef HAVE_FUNLOCKFILE
+
+/* Define to 1 if you have the `futimens' function. */
+#undef HAVE_FUTIMENS
+
+/* Define to 1 if you have the `futimes' function. */
+#undef HAVE_FUTIMES
+
+/* Define to 1 if you have the `futimesat' function. */
+#undef HAVE_FUTIMESAT
+
+/* Define to 1 if you have the `getdelim' function. */
+#undef HAVE_GETDELIM
+
+/* Define to 1 if you have the `getdtablesize' function. */
+#undef HAVE_GETDTABLESIZE
+
+/* Define to 1 if you have the <getopt.h> header file. */
+#undef HAVE_GETOPT_H
+
+/* Define to 1 if you have the `getopt_long_only' function. */
+#undef HAVE_GETOPT_LONG_ONLY
+
+/* Define to 1 if you have the `getpagesize' function. */
+#undef HAVE_GETPAGESIZE
+
+/* Define to 1 if you have the `getppriv' function. */
+#undef HAVE_GETPPRIV
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define to 1 if you have the <grp.h> header file. */
+#undef HAVE_GRP_H
+
+/* Define if you have the iconv() function and it works. */
+#undef HAVE_ICONV
+
+/* Define to 1 if you have the <iconv.h> header file. */
+#undef HAVE_ICONV_H
+
+/* Define to 1 if the compiler supports one of the keywords 'inline',
+   '__inline__', '__inline' and effectively inlines functions marked as such.
+   */
+#undef HAVE_INLINE
+
+/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */
+#undef HAVE_INTMAX_T
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
+   declares uintmax_t. */
+#undef HAVE_INTTYPES_H_WITH_UINTMAX
+
+/* Define to 1 if you have the `isblank' function. */
+#undef HAVE_ISBLANK
+
+/* Define to 1 if you have the `iswcntrl' function. */
+#undef HAVE_ISWCNTRL
+
+/* Define to 1 if you have the `iswctype' function. */
+#undef HAVE_ISWCTYPE
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#undef HAVE_LANGINFO_CODESET
+
+/* Define to 1 if you have the <langinfo.h> header file. */
+#undef HAVE_LANGINFO_H
+
+/* Define if you have <langinfo.h> and nl_langinfo(YESEXPR). */
+#undef HAVE_LANGINFO_YESEXPR
+
+/* Define to 1 if you have the `lchmod' function. */
+#undef HAVE_LCHMOD
+
+/* Define to 1 if you have the `lchown' function. */
+#undef HAVE_LCHOWN
+
+/* Define to 1 if you have the <libintl.h> header file. */
+#undef HAVE_LIBINTL_H
+
+/* Define to 1 if you have the <linewrap.h> header file. */
+#undef HAVE_LINEWRAP_H
+
+/* Define to 1 if you have the <linux/fd.h> header file. */
+#undef HAVE_LINUX_FD_H
+
+/* Define to 1 if you have the <locale.h> header file. */
+#undef HAVE_LOCALE_H
+
+/* Define to 1 if you support file names longer than 14 characters. */
+#undef HAVE_LONG_FILE_NAMES
+
+/* Define to 1 if the system has the type `long long int'. */
+#undef HAVE_LONG_LONG_INT
+
+/* Define to 1 if you have the `lstat' function. */
+#undef HAVE_LSTAT
+
+/* Define to 1 if you have the `lutimes' function. */
+#undef HAVE_LUTIMES
+
+/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
+   to 0 otherwise. */
+#undef HAVE_MALLOC
+
+/* Define if the 'malloc' function is POSIX compliant. */
+#undef HAVE_MALLOC_POSIX
+
+/* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including
+   config.h and <sys/mman.h>. */
+#undef HAVE_MAP_ANONYMOUS
+
+/* Define to 1 if you have the `mbrtowc' function. */
+#undef HAVE_MBRTOWC
+
+/* Define to 1 if you have the `mbsinit' function. */
+#undef HAVE_MBSINIT
+
+/* Define to 1 if you have the `mbsrtowcs' function. */
+#undef HAVE_MBSRTOWCS
+
+/* Define to 1 if <wchar.h> declares mbstate_t. */
+#undef HAVE_MBSTATE_T
+
+/* Define to 1 if you have the `memchr' function. */
+#undef HAVE_MEMCHR
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mempcpy' function. */
+#undef HAVE_MEMPCPY
+
+/* Define to 1 if you have the `memrchr' function. */
+#undef HAVE_MEMRCHR
+
+/* Define to 1 if you have the `mkdirat' function. */
+#undef HAVE_MKDIRAT
+
+/* Define to 1 if you have the `mkdtemp' function. */
+#undef HAVE_MKDTEMP
+
+/* Define to 1 if you have the `mkfifo' function. */
+#undef HAVE_MKFIFO
+
+/* Define to 1 if you have the `mprotect' function. */
+#undef HAVE_MPROTECT
+
+/* Define to 1 if you have the `nanotime' function. */
+#undef HAVE_NANOTIME
+
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+#undef HAVE_NDIR_H
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#undef HAVE_NETDB_H
+
+/* Define to 1 if you have the <net/errno.h> header file. */
+#undef HAVE_NET_ERRNO_H
+
+/* Define to 1 if you have the `nl_langinfo' function. */
+#undef HAVE_NL_LANGINFO
+
+/* Define to 1 if libc includes obstacks. */
+#undef HAVE_OBSTACK
+
+/* Define to 1 if you have the `openat' function. */
+#undef HAVE_OPENAT
+
+/* Define to 1 if you have the <OS.h> header file. */
+#undef HAVE_OS_H
+
+/* Define to 1 if getcwd works, except it sometimes fails when it shouldn't,
+   setting errno to ERANGE, ENAMETOOLONG, or ENOENT. If __GETCWD_PREFIX is not
+   defined, it doesn't matter whether HAVE_PARTLY_WORKING_GETCWD is defined.
+   */
+#undef HAVE_PARTLY_WORKING_GETCWD
+
+/* Define to 1 if you have the `pathconf' function. */
+#undef HAVE_PATHCONF
+
+/* Define to 1 if you have the `pipe' function. */
+#undef HAVE_PIPE
+
+/* Define to 1 if you have the <priv.h> header file. */
+#undef HAVE_PRIV_H
+
+/* Define if program_invocation_name is defined */
+#undef HAVE_PROGRAM_INVOCATION_NAME
+
+/* Define if program_invocation_short_name is defined */
+#undef HAVE_PROGRAM_INVOCATION_SHORT_NAME
+
+/* Define to 1 if you have the <pwd.h> header file. */
+#undef HAVE_PWD_H
+
+/* Define to 1 if you have the <random.h> header file. */
+#undef HAVE_RANDOM_H
+
+/* Define to 1 if you have the `rawmemchr' function. */
+#undef HAVE_RAWMEMCHR
+
+/* Define to 1 if alphasort is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ALPHASORT
+
+/* Define to 1 if atoll is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ATOLL
+
+/* Define to 1 if btowc is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_BTOWC
+
+/* Define to 1 if canonicalize_file_name is declared even after undefining
+   macros. */
+#undef HAVE_RAW_DECL_CANONICALIZE_FILE_NAME
+
+/* Define to 1 if chown is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_CHOWN
+
+/* Define to 1 if dirfd is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_DIRFD
+
+/* Define to 1 if dprintf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_DPRINTF
+
+/* Define to 1 if dup2 is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_DUP2
+
+/* Define to 1 if dup3 is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_DUP3
+
+/* Define to 1 if endusershell is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ENDUSERSHELL
+
+/* Define to 1 if environ is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ENVIRON
+
+/* Define to 1 if euidaccess is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_EUIDACCESS
+
+/* Define to 1 if faccessat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FACCESSAT
+
+/* Define to 1 if fchdir is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FCHDIR
+
+/* Define to 1 if fchmodat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FCHMODAT
+
+/* Define to 1 if fchownat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FCHOWNAT
+
+/* Define to 1 if fcntl is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FCNTL
+
+/* Define to 1 if fdopendir is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FDOPENDIR
+
+/* Define to 1 if fpurge is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FPURGE
+
+/* Define to 1 if fseeko is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FSEEKO
+
+/* Define to 1 if fstatat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FSTATAT
+
+/* Define to 1 if fsync is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FSYNC
+
+/* Define to 1 if ftello is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FTELLO
+
+/* Define to 1 if ftruncate is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FTRUNCATE
+
+/* Define to 1 if futimens is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FUTIMENS
+
+/* Define to 1 if getcwd is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETCWD
+
+/* Define to 1 if getdelim is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETDELIM
+
+/* Define to 1 if getdomainname is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETDOMAINNAME
+
+/* Define to 1 if getdtablesize is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETDTABLESIZE
+
+/* Define to 1 if getgroups is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETGROUPS
+
+/* Define to 1 if gethostname is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETHOSTNAME
+
+/* Define to 1 if getline is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETLINE
+
+/* Define to 1 if getloadavg is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETLOADAVG
+
+/* Define to 1 if getlogin is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETLOGIN
+
+/* Define to 1 if getlogin_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETLOGIN_R
+
+/* Define to 1 if getpagesize is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETPAGESIZE
+
+/* Define to 1 if getsubopt is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETSUBOPT
+
+/* Define to 1 if gettimeofday is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETTIMEOFDAY
+
+/* Define to 1 if getusershell is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETUSERSHELL
+
+/* Define to 1 if imaxabs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_IMAXABS
+
+/* Define to 1 if imaxdiv is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_IMAXDIV
+
+/* Define to 1 if initstat_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_INITSTAT_R
+
+/* Define to 1 if lchmod is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LCHMOD
+
+/* Define to 1 if lchown is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LCHOWN
+
+/* Define to 1 if link is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LINK
+
+/* Define to 1 if linkat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LINKAT
+
+/* Define to 1 if lseek is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LSEEK
+
+/* Define to 1 if lstat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LSTAT
+
+/* Define to 1 if mbrlen is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBRLEN
+
+/* Define to 1 if mbrtowc is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBRTOWC
+
+/* Define to 1 if mbsinit is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBSINIT
+
+/* Define to 1 if mbsnrtowcs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBSNRTOWCS
+
+/* Define to 1 if mbsrtowcs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBSRTOWCS
+
+/* Define to 1 if memmem is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MEMMEM
+
+/* Define to 1 if mempcpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MEMPCPY
+
+/* Define to 1 if memrchr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MEMRCHR
+
+/* Define to 1 if mkdirat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKDIRAT
+
+/* Define to 1 if mkdtemp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKDTEMP
+
+/* Define to 1 if mkfifo is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKFIFO
+
+/* Define to 1 if mkfifoat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKFIFOAT
+
+/* Define to 1 if mknod is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKNOD
+
+/* Define to 1 if mknodat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKNODAT
+
+/* Define to 1 if mkostemp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKOSTEMP
+
+/* Define to 1 if mkostemps is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKOSTEMPS
+
+/* Define to 1 if mkstemp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKSTEMP
+
+/* Define to 1 if mkstemps is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKSTEMPS
+
+/* Define to 1 if nl_langinfo is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_NL_LANGINFO
+
+/* Define to 1 if openat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_OPENAT
+
+/* Define to 1 if pipe2 is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_PIPE2
+
+/* Define to 1 if popen is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_POPEN
+
+/* Define to 1 if pread is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_PREAD
+
+/* Define to 1 if random_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RANDOM_R
+
+/* Define to 1 if rawmemchr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RAWMEMCHR
+
+/* Define to 1 if readlink is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_READLINK
+
+/* Define to 1 if readlinkat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_READLINKAT
+
+/* Define to 1 if realpath is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_REALPATH
+
+/* Define to 1 if renameat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RENAMEAT
+
+/* Define to 1 if rmdir is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RMDIR
+
+/* Define to 1 if rpmatch is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RPMATCH
+
+/* Define to 1 if scandir is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SCANDIR
+
+/* Define to 1 if setenv is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SETENV
+
+/* Define to 1 if setstate_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SETSTATE_R
+
+/* Define to 1 if setusershell is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SETUSERSHELL
+
+/* Define to 1 if sleep is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SLEEP
+
+/* Define to 1 if snprintf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SNPRINTF
+
+/* Define to 1 if srandom_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SRANDOM_R
+
+/* Define to 1 if stat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STAT
+
+/* Define to 1 if stpcpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STPCPY
+
+/* Define to 1 if stpncpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STPNCPY
+
+/* Define to 1 if strcasecmp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRCASECMP
+
+/* Define to 1 if strcasestr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRCASESTR
+
+/* Define to 1 if strchrnul is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRCHRNUL
+
+/* Define to 1 if strdup is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRDUP
+
+/* Define to 1 if strncasecmp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRNCASECMP
+
+/* Define to 1 if strndup is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRNDUP
+
+/* Define to 1 if strnlen is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRNLEN
+
+/* Define to 1 if strpbrk is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRPBRK
+
+/* Define to 1 if strsep is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRSEP
+
+/* Define to 1 if strsignal is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRSIGNAL
+
+/* Define to 1 if strtod is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOD
+
+/* Define to 1 if strtoimax is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOIMAX
+
+/* Define to 1 if strtok_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOK_R
+
+/* Define to 1 if strtoll is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOLL
+
+/* Define to 1 if strtoull is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOULL
+
+/* Define to 1 if strtoumax is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOUMAX
+
+/* Define to 1 if strverscmp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRVERSCMP
+
+/* Define to 1 if symlink is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SYMLINK
+
+/* Define to 1 if symlinkat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SYMLINKAT
+
+/* Define to 1 if unlink is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_UNLINK
+
+/* Define to 1 if unlinkat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_UNLINKAT
+
+/* Define to 1 if unsetenv is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_UNSETENV
+
+/* Define to 1 if usleep is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_USLEEP
+
+/* Define to 1 if utimensat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_UTIMENSAT
+
+/* Define to 1 if vdprintf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_VDPRINTF
+
+/* Define to 1 if vsnprintf is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_VSNPRINTF
+
+/* Define to 1 if wcrtomb is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCRTOMB
+
+/* Define to 1 if wcsnrtombs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSNRTOMBS
+
+/* Define to 1 if wcsrtombs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSRTOMBS
+
+/* Define to 1 if wctob is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCTOB
+
+/* Define to 1 if wcwidth is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCWIDTH
+
+/* Define to 1 if you have the `readlink' function. */
+#undef HAVE_READLINK
+
+/* Define if the 'realloc' function is POSIX compliant. */
+#undef HAVE_REALLOC_POSIX
+
+/* Define to 1 if you have the `realpath' function. */
+#undef HAVE_REALPATH
+
+/* Define to 1 if you have the `rmdir' function. */
+#undef HAVE_RMDIR
+
+/* Define to 1 if you have the `rpmatch' function. */
+#undef HAVE_RPMATCH
+
+/* Define to 1 if you have the <search.h> header file. */
+#undef HAVE_SEARCH_H
+
+/* Define to 1 if you have the `setenv' function. */
+#undef HAVE_SETENV
+
+/* Define to 1 if you have the `setlocale' function. */
+#undef HAVE_SETLOCALE
+
+/* Define to 1 if you have the <sgtty.h> header file. */
+#undef HAVE_SGTTY_H
+
+/* Define to 1 if 'sig_atomic_t' is a signed integer type. */
+#undef HAVE_SIGNED_SIG_ATOMIC_T
+
+/* Define to 1 if 'wchar_t' is a signed integer type. */
+#undef HAVE_SIGNED_WCHAR_T
+
+/* Define to 1 if 'wint_t' is a signed integer type. */
+#undef HAVE_SIGNED_WINT_T
+
+/* Define to 1 if you have the `sleep' function. */
+#undef HAVE_SLEEP
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if you have the <stdarg.h> header file. */
+#undef HAVE_STDARG_H
+
+/* Define to 1 if stdbool.h conforms to C99. */
+#undef HAVE_STDBOOL_H
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#undef HAVE_STDDEF_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
+   uintmax_t. */
+#undef HAVE_STDINT_H_WITH_UINTMAX
+
+/* Define to 1 if you have the <stdio_ext.h> header file. */
+#undef HAVE_STDIO_EXT_H
+
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `stpcpy' function. */
+#undef HAVE_STPCPY
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define to 1 if you have the `strchrnul' function. */
+#undef HAVE_STRCHRNUL
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the `strerror_r' function. */
+#undef HAVE_STRERROR_R
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#undef HAVE_STRNCASECMP
+
+/* Define to 1 if you have the `strndup' function. */
+#undef HAVE_STRNDUP
+
+/* Define to 1 if you have the `strnlen' function. */
+#undef HAVE_STRNLEN
+
+/* Define to 1 if you have the <stropts.h> header file. */
+#undef HAVE_STROPTS_H
+
+/* Define to 1 if you have the `strtoimax' function. */
+#undef HAVE_STRTOIMAX
+
+/* Define to 1 if you have the `strtol' function. */
+#undef HAVE_STRTOL
+
+/* Define to 1 if you have the `strtoll' function. */
+#undef HAVE_STRTOLL
+
+/* Define to 1 if you have the `strtoul' function. */
+#undef HAVE_STRTOUL
+
+/* Define to 1 if you have the `strtoull' function. */
+#undef HAVE_STRTOULL
+
+/* Define to 1 if you have the `strtoumax' function. */
+#undef HAVE_STRTOUMAX
+
+/* Define to 1 if the system has the type `struct random_data'. */
+#undef HAVE_STRUCT_RANDOM_DATA
+
+/* Define to 1 if `st_atimensec' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIMENSEC
+
+/* Define to 1 if `st_atimespec.tv_nsec' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC
+
+/* Define to 1 if `st_atim.st__tim.tv_nsec' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC
+
+/* Define to 1 if `st_atim.tv_nsec' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC
+
+/* Define to 1 if `st_birthtimensec' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC
+
+/* Define to 1 if `st_birthtimespec.tv_nsec' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC
+
+/* Define to 1 if `st_birthtim.tv_nsec' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC
+
+/* Define to 1 if `st_blksize' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BLKSIZE
+
+/* Define to 1 if `st_blocks' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BLOCKS
+
+/* Define to 1 if `tm_zone' is member of `struct tm'. */
+#undef HAVE_STRUCT_TM_TM_ZONE
+
+/* Define if struct utimbuf is declared -- usually in <utime.h>. Some systems
+   have utime.h but don't declare the struct anywhere. */
+#undef HAVE_STRUCT_UTIMBUF
+
+/* Define to 1 if your `struct stat' has `st_blksize'. Deprecated, use
+   `HAVE_STRUCT_STAT_ST_BLKSIZE' instead. */
+#undef HAVE_ST_BLKSIZE
+
+/* Define to 1 if your `struct stat' has `st_blocks'. Deprecated, use
+   `HAVE_STRUCT_STAT_ST_BLOCKS' instead. */
+#undef HAVE_ST_BLOCKS
+
+/* Define if struct stat has a char st_fstype[] member. */
+#undef HAVE_ST_FSTYPE_STRING
+
+/* Define to 1 if you have the `symlink' function. */
+#undef HAVE_SYMLINK
+
+/* Define to 1 if you have the <sysexits.h> header file. */
+#undef HAVE_SYSEXITS_H
+
+/* Define to 1 if you have the <sys/bitypes.h> header file. */
+#undef HAVE_SYS_BITYPES_H
+
+/* Define to 1 if you have the <sys/buf.h> header file. */
+#undef HAVE_SYS_BUF_H
+
+/* Define to 1 if you have the <sys/device.h> header file. */
+#undef HAVE_SYS_DEVICE_H
+
+/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_SYS_DIR_H
+
+/* Define to 1 if you have the <sys/filio.h> header file. */
+#undef HAVE_SYS_FILIO_H
+
+/* Define to 1 if you have the <sys/gentape.h> header file. */
+#undef HAVE_SYS_GENTAPE_H
+
+/* Define to 1 if you have the <sys/inet.h> header file. */
+#undef HAVE_SYS_INET_H
+
+/* Define to 1 if you have the <sys/inttypes.h> header file. */
+#undef HAVE_SYS_INTTYPES_H
+
+/* Define to 1 if you have the <sys/io/trioctl.h> header file. */
+#undef HAVE_SYS_IO_TRIOCTL_H
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
+
+/* Define to 1 if you have the <sys/mtio.h> header file. */
+#undef HAVE_SYS_MTIO_H
+
+/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_SYS_NDIR_H
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#undef HAVE_SYS_SOCKET_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/tape.h> header file. */
+#undef HAVE_SYS_TAPE_H
+
+/* Define to 1 if you have the <sys/timeb.h> header file. */
+#undef HAVE_SYS_TIMEB_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/tprintf.h> header file. */
+#undef HAVE_SYS_TPRINTF_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to 1 if you have the <time.h> header file. */
+#undef HAVE_TIME_H
+
+/* Define if struct tm has the tm_gmtoff member. */
+#undef HAVE_TM_GMTOFF
+
+/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
+   `HAVE_STRUCT_TM_TM_ZONE' instead. */
+#undef HAVE_TM_ZONE
+
+/* Define to 1 if you have the `tsearch' function. */
+#undef HAVE_TSEARCH
+
+/* Define to 1 if you don't have `tm_zone' but do have the external array
+   `tzname'. */
+#undef HAVE_TZNAME
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `unlinkat' function. */
+#undef HAVE_UNLINKAT
+
+/* Define to 1 if you have the `unsetenv' function. */
+#undef HAVE_UNSETENV
+
+/* Define to 1 if the system has the type `unsigned long long int'. */
+#undef HAVE_UNSIGNED_LONG_LONG_INT
+
+/* Define to 1 if you have the `utimensat' function. */
+#undef HAVE_UTIMENSAT
+
+/* Define to 1 if you have the `utimes' function. */
+#undef HAVE_UTIMES
+
+/* Define to 1 if you have the <utime.h> header file. */
+#undef HAVE_UTIME_H
+
+/* Define to 1 if you have the `vasnprintf' function. */
+#undef HAVE_VASNPRINTF
+
+/* Define to 1 if you have the `vasprintf' function. */
+#undef HAVE_VASPRINTF
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#undef HAVE_VSNPRINTF
+
+/* Define to 1 if you have the `waitpid' function. */
+#undef HAVE_WAITPID
+
+/* Define to 1 if you have the <wchar.h> header file. */
+#undef HAVE_WCHAR_H
+
+/* Define if you have the 'wchar_t' type. */
+#undef HAVE_WCHAR_T
+
+/* Define to 1 if you have the `wcrtomb' function. */
+#undef HAVE_WCRTOMB
+
+/* Define to 1 if you have the `wcscoll' function. */
+#undef HAVE_WCSCOLL
+
+/* Define to 1 if you have the `wcslen' function. */
+#undef HAVE_WCSLEN
+
+/* Define to 1 if you have the `wcsnlen' function. */
+#undef HAVE_WCSNLEN
+
+/* Define to 1 if you have the <wctype.h> header file. */
+#undef HAVE_WCTYPE_H
+
+/* Define to 1 if you have the `wcwidth' function. */
+#undef HAVE_WCWIDTH
+
+/* Define to 1 if you have the <winsock2.h> header file. */
+#undef HAVE_WINSOCK2_H
+
+/* Define if you have the 'wint_t' type. */
+#undef HAVE_WINT_T
+
+/* Define to 1 if you have the `wmemchr' function. */
+#undef HAVE_WMEMCHR
+
+/* Define to 1 if you have the `wmemcpy' function. */
+#undef HAVE_WMEMCPY
+
+/* Define to 1 if you have the `wmempcpy' function. */
+#undef HAVE_WMEMPCPY
+
+/* Define to 1 if O_NOATIME works. */
+#undef HAVE_WORKING_O_NOATIME
+
+/* Define to 1 if O_NOFOLLOW works. */
+#undef HAVE_WORKING_O_NOFOLLOW
+
+/* Define if utimes works properly. */
+#undef HAVE_WORKING_UTIMES
+
+/* Define to 1 if the system has the type `_Bool'. */
+#undef HAVE__BOOL
+
+/* Define to 1 if you have the `_ftime' function. */
+#undef HAVE__FTIME
+
+/* Define to 1 if you have the `__fpending' function. */
+#undef HAVE___FPENDING
+
+/* Define as const if the declaration of iconv() needs const. */
+#undef ICONV_CONST
+
+#if FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+#else
+# define ISSLASH(C) ((C) == '/')
+#endif
+
+/* Define to 1 if lseek does not detect pipes. */
+#undef LSEEK_PIPE_BROKEN
+
+/* Define to 1 if `lstat' dereferences a symlink specified with a trailing
+   slash. */
+#undef LSTAT_FOLLOWS_SLASHED_SYMLINK
+
+/* Define to the program name of lzip compressor program */
+#undef LZIP_PROGRAM
+
+/* Define to the program name of lzma compressor program */
+#undef LZMA_PROGRAM
+
+/* Define to the program name of lzop compressor program */
+#undef LZOP_PROGRAM
+
+/* Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>.
+   */
+#undef MAJOR_IN_MKDEV
+
+/* Define to 1 if `major', `minor', and `makedev' are declared in
+   <sysmacros.h>. */
+#undef MAJOR_IN_SYSMACROS
+
+/* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */
+#undef MALLOC_0_IS_NONNULL
+
+/* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */
+#undef MAP_ANONYMOUS
+
+/* Define if the mbrtowc function has the NULL string argument bug. */
+#undef MBRTOWC_NULL_ARG_BUG
+
+/* Define if the mbrtowc function does not return 0 for a NUL character. */
+#undef MBRTOWC_NUL_RETVAL_BUG
+
+/* Define if the mbrtowc function returns a wrong return value. */
+#undef MBRTOWC_RETVAL_BUG
+
+/* Define to mt_model (v.g., for DG/UX), else to mt_type. */
+#undef MTIO_CHECK_FIELD
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
+/* Define to 1 if open() fails to recognize a trailing slash. */
+#undef OPEN_TRAILING_SLASH_BUG
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* String identifying the packager of this software */
+#undef PACKAGE_PACKAGER
+
+/* Packager info for bug reports (URL/e-mail/...) */
+#undef PACKAGE_PACKAGER_BUG_REPORTS
+
+/* Packager-specific version information */
+#undef PACKAGE_PACKAGER_VERSION
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* the number of pending output bytes on stream `fp' */
+#undef PENDING_OUTPUT_N_BYTES
+
+/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
+#undef PRI_MACROS_BROKEN
+
+/* Define to the type that is the result of default argument promotions of
+   type mode_t. */
+#undef PROMOTED_MODE_T
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'ptrdiff_t'. */
+#undef PTRDIFF_T_SUFFIX
+
+/* Define to 1 if readlink fails to recognize a trailing slash. */
+#undef READLINK_TRAILING_SLASH_BUG
+
+/* Define to the full path of your rsh, if any. */
+#undef REMOTE_SHELL
+
+/* Define to 1 if gnulib's fchdir() replacement is used. */
+#undef REPLACE_FCHDIR
+
+/* Define to 1 if stat needs help when passed a directory name with a trailing
+   slash */
+#undef REPLACE_FUNC_STAT_DIR
+
+/* Define to 1 if stat needs help when passed a file name with a trailing
+   slash */
+#undef REPLACE_FUNC_STAT_FILE
+
+/* Define if nl_langinfo exists but is overridden by gnulib. */
+#undef REPLACE_NL_LANGINFO
+
+/* Define to 1 if open() should work around the inability to open a directory.
+   */
+#undef REPLACE_OPEN_DIRECTORY
+
+/* Define this to 1 if strerror is broken. */
+#undef REPLACE_STRERROR
+
+/* Define if vasnprintf exists but is overridden by gnulib. */
+#undef REPLACE_VASNPRINTF
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#undef RETSIGTYPE
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'sig_atomic_t'. */
+#undef SIG_ATOMIC_T_SUFFIX
+
+/* Define as the maximum value of type 'size_t', if the system doesn't define
+   it. */
+#ifndef SIZE_MAX
+# undef SIZE_MAX
+#endif
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'size_t'. */
+#undef SIZE_T_SUFFIX
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at runtime.
+       STACK_DIRECTION > 0 => grows toward higher addresses
+       STACK_DIRECTION < 0 => grows toward lower addresses
+       STACK_DIRECTION = 0 => direction of growth unknown */
+#undef STACK_DIRECTION
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+#undef STAT_MACROS_BROKEN
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if strerror_r returns char *. */
+#undef STRERROR_R_CHAR_P
+
+/* Define to 1 if all 'time_t' values fit in a 'long int'. */
+#undef TIME_T_FITS_IN_LONG_INT
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+#undef TM_IN_SYS_TIME
+
+/* Define to 1 if the type of the st_atim member of a struct stat is struct
+   timespec. */
+#undef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC
+
+/* Define to 1 if unlink (dir) cannot possibly succeed. */
+#undef UNLINK_CANNOT_UNLINK_DIR
+
+/* Define to 1 if you want getc etc. to use unlocked I/O if available.
+   Unlocked I/O can improve performance in unithreaded apps, but it is not
+   safe for multithreaded apps. */
+#undef USE_UNLOCKED_IO
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to 1 if unsetenv returns void instead of int. */
+#undef VOID_UNSETENV
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'wchar_t'. */
+#undef WCHAR_T_SUFFIX
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'wint_t'. */
+#undef WINT_T_SUFFIX
+
+/* Define to the program name of xz compressor program */
+#undef XZ_PROGRAM
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
+#undef _LARGEFILE_SOURCE
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
+
+/* Define if you want regoff_t to be at least as wide POSIX requires. */
+#undef _REGEX_LARGE_OFFSETS
+
+/* Define to 500 only on HP-UX. */
+#undef _XOPEN_SOURCE
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to rpl_ if the getopt replacement functions and variables should be
+   used. */
+#undef __GETOPT_PREFIX
+
+/* Ensure that <stdint.h> defines the limit macros, since gnulib's
+   <inttypes.h> relies on them.  */
+#if defined __cplusplus && !defined __STDC_LIMIT_MACROS && GL_TRIGGER_STDC_LIMIT_MACROS
+# define __STDC_LIMIT_MACROS 1
+#endif
+
+
+/* Define to `unsigned' if <sys/types.h> does not define. */
+#undef dev_t
+
+/* Define to a replacement function name for fnmatch(). */
+#undef fnmatch
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef gid_t
+
+/* A replacement for va_copy, if needed.  */
+#define gl_va_copy(a,b) ((a) = (b))
+
+/* Define to rpl_gmtime if the replacement function should be used. */
+#undef gmtime
+
+/* Conversion descriptor type */
+#undef iconv_t
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to `unsigned' if <sys/types.h> does not define. */
+#undef ino_t
+
+/* Define to long or long long if <stdint.h> and <inttypes.h> don't define. */
+#undef intmax_t
+
+/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
+   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
+   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
+   __APPLE__ && __MACH__ test for MacOS X.
+   __APPLE_CC__ tests for the Apple compiler and its version.
+   __STDC_VERSION__ tests for the C99 mode.  */
+#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
+# define __GNUC_STDC_INLINE__ 1
+#endif
+
+/* Define to rpl_localtime if the replacement function should be used. */
+#undef localtime
+
+/* Type of major device numbers. */
+#undef major_t
+
+/* Define to rpl_malloc if the replacement function should be used. */
+#undef malloc
+
+/* Define to a type if <wchar.h> does not define. */
+#undef mbstate_t
+
+/* Type of minor device numbers. */
+#undef minor_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef mode_t
+
+/* Define to the type of st_nlink in struct stat, or a supertype. */
+#undef nlink_t
+
+/* Define to `long int' if <sys/types.h> does not define. */
+#undef off_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef pid_t
+
+/* Define as the type of the result of subtracting two pointers, if the system
+   doesn't define it. */
+#undef ptrdiff_t
+
+/* Define to rpl_re_comp if the replacement should be used. */
+#undef re_comp
+
+/* Define to rpl_re_compile_fastmap if the replacement should be used. */
+#undef re_compile_fastmap
+
+/* Define to rpl_re_compile_pattern if the replacement should be used. */
+#undef re_compile_pattern
+
+/* Define to rpl_re_exec if the replacement should be used. */
+#undef re_exec
+
+/* Define to rpl_re_match if the replacement should be used. */
+#undef re_match
+
+/* Define to rpl_re_match_2 if the replacement should be used. */
+#undef re_match_2
+
+/* Define to rpl_re_search if the replacement should be used. */
+#undef re_search
+
+/* Define to rpl_re_search_2 if the replacement should be used. */
+#undef re_search_2
+
+/* Define to rpl_re_set_registers if the replacement should be used. */
+#undef re_set_registers
+
+/* Define to rpl_re_set_syntax if the replacement should be used. */
+#undef re_set_syntax
+
+/* Define to rpl_re_syntax_options if the replacement should be used. */
+#undef re_syntax_options
+
+/* Define to rpl_regcomp if the replacement should be used. */
+#undef regcomp
+
+/* Define to rpl_regerror if the replacement should be used. */
+#undef regerror
+
+/* Define to rpl_regexec if the replacement should be used. */
+#undef regexec
+
+/* Define to rpl_regfree if the replacement should be used. */
+#undef regfree
+
+/* Define to the equivalent of the C99 'restrict' keyword, or to
+   nothing if this is not supported.  Do not define if restrict is
+   supported directly.  */
+#undef restrict
+/* Work around a bug in Sun C++: it does not support _Restrict, even
+   though the corresponding Sun C compiler does, which causes
+   "#define restrict _Restrict" in the previous line.  Perhaps some future
+   version of Sun C++ will work with _Restrict; if so, it'll probably
+   define __RESTRICT, just as Sun C does.  */
+#if defined __SUNPRO_CC && !defined __RESTRICT
+# define _Restrict
+#endif
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define as a signed type of the same size as size_t. */
+#undef ssize_t
+
+/* Define to rpl_strnlen if the replacement function should be used. */
+#undef strnlen
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef uid_t
+
+/* Define as a marker that can be attached to declarations that might not
+    be used.  This helps to reduce warnings, such as from
+    GCC -Wunused-parameter.  */
+#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_UNUSED __attribute__ ((__unused__))
+#else
+# define _GL_UNUSED
+#endif
+/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
+   is a misnomer outside of parameter lists.  */
+#define _UNUSED_PARAMETER_ _GL_UNUSED
+
+
+/* Define as a macro for copying va_list variables. */
+#undef va_copy
diff --git a/config.hin b/config.hin
deleted file mode 100644 (file)
index 6db767a..0000000
+++ /dev/null
@@ -1,1276 +0,0 @@
-/* config.hin.  Generated from configure.ac by autoheader.  */
-
-/* Define if the compiler is building for multiple architectures of Apple
-   platforms at once. */
-#undef AA_APPLE_UNIVERSAL_BUILD
-
-/* Define to the number of bits in type 'ptrdiff_t'. */
-#undef BITSIZEOF_PTRDIFF_T
-
-/* Define to the number of bits in type 'sig_atomic_t'. */
-#undef BITSIZEOF_SIG_ATOMIC_T
-
-/* Define to the number of bits in type 'size_t'. */
-#undef BITSIZEOF_SIZE_T
-
-/* Define to the number of bits in type 'wchar_t'. */
-#undef BITSIZEOF_WCHAR_T
-
-/* Define to the number of bits in type 'wint_t'. */
-#undef BITSIZEOF_WINT_T
-
-/* Define if chown is not POSIX compliant regarding IDs of -1. */
-#undef CHOWN_FAILS_TO_HONOR_ID_OF_NEGATIVE_ONE
-
-/* Define if chown modifies symlinks. */
-#undef CHOWN_MODIFIES_SYMLINK
-
-/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
-   systems. This function is required for `alloca.c' support on those systems.
-   */
-#undef CRAY_STACKSEG_END
-
-/* Define to 1 if using `alloca.c'. */
-#undef C_ALLOCA
-
-/* Define to a string giving the full name of the default archive file. */
-#undef DEFAULT_ARCHIVE
-
-/* By default produce archives of this format */
-#undef DEFAULT_ARCHIVE_FORMAT
-
-/* Define to a number giving the default blocking size for archives. */
-#undef DEFAULT_BLOCKING
-
-/* Define to a default quoting style (see lib/quoteargs.c for the list) */
-#undef DEFAULT_QUOTING_STYLE
-
-/* Define full file name of rmt program. */
-#undef DEFAULT_RMT_COMMAND
-
-/* Define to 1 if density may be indicated by [lmh] at end of device. */
-#undef DENSITY_LETTER
-
-/* Define to a string giving the prefix of the default device, without the
-   part specifying the unit and density. */
-#undef DEVICE_PREFIX
-
-/* the name of the file descriptor member of DIR */
-#undef DIR_FD_MEMBER_NAME
-
-#ifdef DIR_FD_MEMBER_NAME
-# define DIR_TO_FD(Dir_p) ((Dir_p)->DIR_FD_MEMBER_NAME)
-#else
-# define DIR_TO_FD(Dir_p) -1
-#endif
-
-
-/* Define to 1 if // is a file system root distinct from /. */
-#undef DOUBLE_SLASH_IS_DISTINCT_ROOT
-
-/* Define if struct dirent has a member d_ino that actually works. */
-#undef D_INO_IN_DIRENT
-
-/* Define to 1 if translation of program messages to the user's native
-   language is requested. */
-#undef ENABLE_NLS
-
-/* Define if gnulib's fchdir() replacement is used. */
-#undef FCHDIR_REPLACEMENT
-
-/* Define on systems for which file names may have a so-called `drive letter'
-   prefix, define this to compute the length of that prefix, including the
-   colon. */
-#undef FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX
-
-/* Define if the backslash character may also serve as a file name component
-   separator. */
-#undef FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR
-
-/* Define if a drive letter prefix denotes a relative path if it is not
-   followed by a file name component separator. */
-#undef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
-
-/* Define if gettimeofday clobbers the localtime buffer. */
-#undef GETTIMEOFDAY_CLOBBERS_LOCALTIME
-
-/* Define to make the limit macros in <stdint.h> visible. */
-#undef GL_TRIGGER_STDC_LIMIT_MACROS
-
-/* Define to 1 when using the gnulib module canonicalize-lgpl. */
-#undef GNULIB_CANONICALIZE_LGPL
-
-/* Define to 1 when using the gnulib module close-stream. */
-#undef GNULIB_CLOSE_STREAM
-
-/* Define to 1 when using the gnulib module fcntl-safer. */
-#undef GNULIB_FCNTL_SAFER
-
-/* Define to indicate the 'malloc' module. */
-#undef GNULIB_MALLOC_GNU
-
-/* Define to 1 when using the gnulib module open. */
-#undef GNULIB_OPEN
-
-/* Define to 1 to add extern declaration of program_invocation_name to argp.h
-   */
-#undef GNULIB_PROGRAM_INVOCATION_NAME
-
-/* Define to 1 to add extern declaration of program_invocation_short_name to
-   argp.h */
-#undef GNULIB_PROGRAM_INVOCATION_SHORT_NAME
-
-/* Define to 1 if you have the `alarm' function. */
-#undef HAVE_ALARM
-
-/* Define to 1 if you have 'alloca' after including <alloca.h>, a header that
-   may be supplied by this distribution. */
-#undef HAVE_ALLOCA
-
-/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
-   */
-#undef HAVE_ALLOCA_H
-
-/* Define to 1 if you have the `btowc' function. */
-#undef HAVE_BTOWC
-
-/* Define to 1 if you have the `canonicalize_file_name' function. */
-#undef HAVE_CANONICALIZE_FILE_NAME
-
-/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
-   CoreFoundation framework. */
-#undef HAVE_CFLOCALECOPYCURRENT
-
-/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
-   the CoreFoundation framework. */
-#undef HAVE_CFPREFERENCESCOPYAPPVALUE
-
-/* Define to 1 if your system has a working `chown' function. */
-#undef HAVE_CHOWN
-
-/* Define to 1 if you have the `chsize' function. */
-#undef HAVE_CHSIZE
-
-/* Define to 1 if you have the `clock_gettime' function. */
-#undef HAVE_CLOCK_GETTIME
-
-/* Define to 1 if you have the `clock_settime' function. */
-#undef HAVE_CLOCK_SETTIME
-
-/* Define if you have compound literals. */
-#undef HAVE_COMPOUND_LITERALS
-
-/* Define if the GNU dcgettext() function is already present or preinstalled.
-   */
-#undef HAVE_DCGETTEXT
-
-/* Define to 1 if you have the declaration of `canonicalize_file_name', and to
-   0 if you don't. */
-#undef HAVE_DECL_CANONICALIZE_FILE_NAME
-
-/* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_CLEARERR_UNLOCKED
-
-/* Define to 1 if you have the declaration of `dirfd', and to 0 if you don't.
-   */
-#undef HAVE_DECL_DIRFD
-
-/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you
-   don't. */
-#undef HAVE_DECL_FEOF_UNLOCKED
-
-/* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_FERROR_UNLOCKED
-
-/* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_FFLUSH_UNLOCKED
-
-/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_FGETS_UNLOCKED
-
-/* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_FPUTC_UNLOCKED
-
-/* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_FPUTS_UNLOCKED
-
-/* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_FREAD_UNLOCKED
-
-/* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_FWRITE_UNLOCKED
-
-/* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_GETCHAR_UNLOCKED
-
-/* Define to 1 if you have the declaration of `getcwd', and to 0 if you don't.
-   */
-#undef HAVE_DECL_GETCWD
-
-/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
-   don't. */
-#undef HAVE_DECL_GETC_UNLOCKED
-
-/* Define to 1 if you have the declaration of `getdelim', and to 0 if you
-   don't. */
-#undef HAVE_DECL_GETDELIM
-
-/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't.
-   */
-#undef HAVE_DECL_GETENV
-
-/* Define to 1 if you have the declaration of `getgrgid', and to 0 if you
-   don't. */
-#undef HAVE_DECL_GETGRGID
-
-/* Define to 1 if you have the declaration of `getline', and to 0 if you
-   don't. */
-#undef HAVE_DECL_GETLINE
-
-/* Define to 1 if you have the declaration of `getpwuid', and to 0 if you
-   don't. */
-#undef HAVE_DECL_GETPWUID
-
-/* Define to 1 if you have the declaration of `imaxabs', and to 0 if you
-   don't. */
-#undef HAVE_DECL_IMAXABS
-
-/* Define to 1 if you have the declaration of `imaxdiv', and to 0 if you
-   don't. */
-#undef HAVE_DECL_IMAXDIV
-
-/* Define to 1 if you have the declaration of `isblank', and to 0 if you
-   don't. */
-#undef HAVE_DECL_ISBLANK
-
-/* Define to 1 if you have the declaration of `memrchr', and to 0 if you
-   don't. */
-#undef HAVE_DECL_MEMRCHR
-
-/* Define if program_invocation_name is declared */
-#undef HAVE_DECL_PROGRAM_INVOCATION_NAME
-
-/* Define if program_invocation_short_name is declared */
-#undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
-
-/* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if
-   you don't. */
-#undef HAVE_DECL_PUTCHAR_UNLOCKED
-
-/* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you
-   don't. */
-#undef HAVE_DECL_PUTC_UNLOCKED
-
-/* Define to 1 if you have the declaration of `sleep', and to 0 if you don't.
-   */
-#undef HAVE_DECL_SLEEP
-
-/* Define to 1 if you have the declaration of `snprintf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_SNPRINTF
-
-/* Define to 1 if you have the declaration of `strdup', and to 0 if you don't.
-   */
-#undef HAVE_DECL_STRDUP
-
-/* Define to 1 if you have the declaration of `strerror', and to 0 if you
-   don't. */
-#undef HAVE_DECL_STRERROR
-
-/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
-   don't. */
-#undef HAVE_DECL_STRERROR_R
-
-/* Define to 1 if you have the declaration of `strncasecmp', and to 0 if you
-   don't. */
-#undef HAVE_DECL_STRNCASECMP
-
-/* Define to 1 if you have the declaration of `strndup', and to 0 if you
-   don't. */
-#undef HAVE_DECL_STRNDUP
-
-/* Define to 1 if you have the declaration of `strnlen', and to 0 if you
-   don't. */
-#undef HAVE_DECL_STRNLEN
-
-/* Define to 1 if you have the declaration of `strtoimax', and to 0 if you
-   don't. */
-#undef HAVE_DECL_STRTOIMAX
-
-/* Define to 1 if you have the declaration of `strtoll', and to 0 if you
-   don't. */
-#undef HAVE_DECL_STRTOLL
-
-/* Define to 1 if you have the declaration of `strtoull', and to 0 if you
-   don't. */
-#undef HAVE_DECL_STRTOULL
-
-/* Define to 1 if you have the declaration of `strtoumax', and to 0 if you
-   don't. */
-#undef HAVE_DECL_STRTOUMAX
-
-/* Define to 1 if you have the declaration of `time', and to 0 if you don't.
-   */
-#undef HAVE_DECL_TIME
-
-/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't.
-   */
-#undef HAVE_DECL_TZNAME
-
-/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you
-   don't. */
-#undef HAVE_DECL_VSNPRINTF
-
-/* Define to 1 if you have the declaration of `wcwidth', and to 0 if you
-   don't. */
-#undef HAVE_DECL_WCWIDTH
-
-/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you
-   don't. */
-#undef HAVE_DECL__SNPRINTF
-
-/* Define to 1 if you have the declaration of `__fpending', and to 0 if you
-   don't. */
-#undef HAVE_DECL___FPENDING
-
-/* Define to 1 if you have the <dirent.h> header file. */
-#undef HAVE_DIRENT_H
-
-/* Define to 1 if you have the `dirfd' function. */
-#undef HAVE_DIRFD
-
-/* Define to 1 if you have the `dup2' function. */
-#undef HAVE_DUP2
-
-/* Define if you have the declaration of environ. */
-#undef HAVE_ENVIRON_DECL
-
-/* Define to 1 if you have the <errno.h> header file. */
-#undef HAVE_ERRNO_H
-
-/* Define to 1 if you have the `fchdir' function. */
-#undef HAVE_FCHDIR
-
-/* Define to 1 if you have the `fchmodat' function. */
-#undef HAVE_FCHMODAT
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
-/* Define to 1 if you have the `fdopendir' function. */
-#undef HAVE_FDOPENDIR
-
-/* Define to 1 if you have the <features.h> header file. */
-#undef HAVE_FEATURES_H
-
-/* Define to 1 if you have the <float.h> header file. */
-#undef HAVE_FLOAT_H
-
-/* Define to 1 if you have the `flockfile' function. */
-#undef HAVE_FLOCKFILE
-
-/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
-#undef HAVE_FSEEKO
-
-/* Define to 1 if you have the `fsync' function. */
-#undef HAVE_FSYNC
-
-/* Define to 1 if you have the `ftruncate' function. */
-#undef HAVE_FTRUNCATE
-
-/* Define to 1 if you have the `funlockfile' function. */
-#undef HAVE_FUNLOCKFILE
-
-/* Define to 1 if you have the `futimens' function. */
-#undef HAVE_FUTIMENS
-
-/* Define to 1 if you have the `futimes' function. */
-#undef HAVE_FUTIMES
-
-/* Define to 1 if you have the `futimesat' function. */
-#undef HAVE_FUTIMESAT
-
-/* Define to 1 if you have the `getcwd' function. */
-#undef HAVE_GETCWD
-
-/* Define to 1 if you have the `getdelim' function. */
-#undef HAVE_GETDELIM
-
-/* Define to 1 if you have the `getdtablesize' function. */
-#undef HAVE_GETDTABLESIZE
-
-/* Define to 1 if you have the <getopt.h> header file. */
-#undef HAVE_GETOPT_H
-
-/* Define to 1 if you have the `getopt_long_only' function. */
-#undef HAVE_GETOPT_LONG_ONLY
-
-/* Define to 1 if you have the `getpagesize' function. */
-#undef HAVE_GETPAGESIZE
-
-/* Define if the GNU gettext() function is already present or preinstalled. */
-#undef HAVE_GETTEXT
-
-/* Define to 1 if you have the `gettimeofday' function. */
-#undef HAVE_GETTIMEOFDAY
-
-/* Define to 1 if you have the <grp.h> header file. */
-#undef HAVE_GRP_H
-
-/* Define if you have the iconv() function and it works. */
-#undef HAVE_ICONV
-
-/* Define to 1 if you have the <iconv.h> header file. */
-#undef HAVE_ICONV_H
-
-/* Define to 1 if the compiler supports one of the keywords 'inline',
-   '__inline__', '__inline' and effectively inlines functions marked as such.
-   */
-#undef HAVE_INLINE
-
-/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */
-#undef HAVE_INTMAX_T
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
-   declares uintmax_t. */
-#undef HAVE_INTTYPES_H_WITH_UINTMAX
-
-/* Define to 1 if you have the `isblank' function. */
-#undef HAVE_ISBLANK
-
-/* Define to 1 if you have the `iswcntrl' function. */
-#undef HAVE_ISWCNTRL
-
-/* Define to 1 if you have the `iswctype' function. */
-#undef HAVE_ISWCTYPE
-
-/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
-#undef HAVE_LANGINFO_CODESET
-
-/* Define if you have <langinfo.h> and nl_langinfo(YESEXPR). */
-#undef HAVE_LANGINFO_YESEXPR
-
-/* Define to 1 if you have the `lchmod' function. */
-#undef HAVE_LCHMOD
-
-/* Define to 1 if you have the `lchown' function. */
-#undef HAVE_LCHOWN
-
-/* Define to 1 if you have the <libintl.h> header file. */
-#undef HAVE_LIBINTL_H
-
-/* Define to 1 if you have the <linewrap.h> header file. */
-#undef HAVE_LINEWRAP_H
-
-/* Define to 1 if you have the <linux/fd.h> header file. */
-#undef HAVE_LINUX_FD_H
-
-/* Define to 1 if you have the <locale.h> header file. */
-#undef HAVE_LOCALE_H
-
-/* Define to 1 if you support file names longer than 14 characters. */
-#undef HAVE_LONG_FILE_NAMES
-
-/* Define to 1 if the system has the type `long long int'. */
-#undef HAVE_LONG_LONG_INT
-
-/* Define to 1 if you have the `lstat' function. */
-#undef HAVE_LSTAT
-
-/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
-   to 0 otherwise. */
-#undef HAVE_MALLOC
-
-/* Define if the 'malloc' function is POSIX compliant. */
-#undef HAVE_MALLOC_POSIX
-
-/* Define to 1 if mbrtowc and mbstate_t are properly declared. */
-#undef HAVE_MBRTOWC
-
-/* Define to 1 if you have the `mbsinit' function. */
-#undef HAVE_MBSINIT
-
-/* Define to 1 if you have the `mbsrtowcs' function. */
-#undef HAVE_MBSRTOWCS
-
-/* Define to 1 if <wchar.h> declares mbstate_t. */
-#undef HAVE_MBSTATE_T
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if you have the `mempcpy' function. */
-#undef HAVE_MEMPCPY
-
-/* Define to 1 if you have the `memrchr' function. */
-#undef HAVE_MEMRCHR
-
-/* Define to 1 if you have the `mkdirat' function. */
-#undef HAVE_MKDIRAT
-
-/* Define to 1 if you have the `mkdtemp' function. */
-#undef HAVE_MKDTEMP
-
-/* Define to 1 if you have the `mkfifo' function. */
-#undef HAVE_MKFIFO
-
-/* Define to 1 if you have the `nanotime' function. */
-#undef HAVE_NANOTIME
-
-/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
-#undef HAVE_NDIR_H
-
-/* Define to 1 if you have the <netdb.h> header file. */
-#undef HAVE_NETDB_H
-
-/* Define to 1 if you have the <net/errno.h> header file. */
-#undef HAVE_NET_ERRNO_H
-
-/* Define to 1 if libc includes obstacks. */
-#undef HAVE_OBSTACK
-
-/* Define to 1 if you have the `openat' function. */
-#undef HAVE_OPENAT
-
-/* Define to 1 if you have the <OS.h> header file. */
-#undef HAVE_OS_H
-
-/* Define to 1 if getcwd works, except it sometimes fails when it shouldn't,
-   setting errno to ERANGE, ENAMETOOLONG, or ENOENT. If __GETCWD_PREFIX is not
-   defined, it doesn't matter whether HAVE_PARTLY_WORKING_GETCWD is defined.
-   */
-#undef HAVE_PARTLY_WORKING_GETCWD
-
-/* Define to 1 if you have the `pathconf' function. */
-#undef HAVE_PATHCONF
-
-/* Define to 1 if you have the `pipe' function. */
-#undef HAVE_PIPE
-
-/* Define to 1 if you have the <priv.h> header file. */
-#undef HAVE_PRIV_H
-
-/* Define if program_invocation_name is defined */
-#undef HAVE_PROGRAM_INVOCATION_NAME
-
-/* Define if program_invocation_short_name is defined */
-#undef HAVE_PROGRAM_INVOCATION_SHORT_NAME
-
-/* Define to 1 if you have the <pwd.h> header file. */
-#undef HAVE_PWD_H
-
-/* Define to 1 if you have the <random.h> header file. */
-#undef HAVE_RANDOM_H
-
-/* Define to 1 if you have the `rawmemchr' function. */
-#undef HAVE_RAWMEMCHR
-
-/* Define to 1 if you have the `readlink' function. */
-#undef HAVE_READLINK
-
-/* Define if the 'realloc' function is POSIX compliant. */
-#undef HAVE_REALLOC_POSIX
-
-/* Define to 1 if you have the `rpmatch' function. */
-#undef HAVE_RPMATCH
-
-/* Define to 1 if you have the <search.h> header file. */
-#undef HAVE_SEARCH_H
-
-/* Define to 1 if you have the `setenv' function. */
-#undef HAVE_SETENV
-
-/* Define to 1 if you have the `setlocale' function. */
-#undef HAVE_SETLOCALE
-
-/* Define to 1 if you have the <sgtty.h> header file. */
-#undef HAVE_SGTTY_H
-
-/* Define to 1 if 'sig_atomic_t' is a signed integer type. */
-#undef HAVE_SIGNED_SIG_ATOMIC_T
-
-/* Define to 1 if 'wchar_t' is a signed integer type. */
-#undef HAVE_SIGNED_WCHAR_T
-
-/* Define to 1 if 'wint_t' is a signed integer type. */
-#undef HAVE_SIGNED_WINT_T
-
-/* Define to 1 if you have the `snprintf' function. */
-#undef HAVE_SNPRINTF
-
-/* Define to 1 if you have the <stdarg.h> header file. */
-#undef HAVE_STDARG_H
-
-/* Define to 1 if stdbool.h conforms to C99. */
-#undef HAVE_STDBOOL_H
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
-   uintmax_t. */
-#undef HAVE_STDINT_H_WITH_UINTMAX
-
-/* Define to 1 if you have the <stdio_ext.h> header file. */
-#undef HAVE_STDIO_EXT_H
-
-/* Define to 1 if you have the <stdio.h> header file. */
-#undef HAVE_STDIO_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the `stpcpy' function. */
-#undef HAVE_STPCPY
-
-/* Define to 1 if you have the `strcasecmp' function. */
-#undef HAVE_STRCASECMP
-
-/* Define to 1 if you have the `strchrnul' function. */
-#undef HAVE_STRCHRNUL
-
-/* Define to 1 if you have the `strdup' function. */
-#undef HAVE_STRDUP
-
-/* Define to 1 if you have the `strerror_r' function. */
-#undef HAVE_STRERROR_R
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the `strncasecmp' function. */
-#undef HAVE_STRNCASECMP
-
-/* Define if you have the strndup() function and it works. */
-#undef HAVE_STRNDUP
-
-/* Define to 1 if you have the <stropts.h> header file. */
-#undef HAVE_STROPTS_H
-
-/* Define to 1 if you have the `strtoimax' function. */
-#undef HAVE_STRTOIMAX
-
-/* Define to 1 if you have the `strtol' function. */
-#undef HAVE_STRTOL
-
-/* Define to 1 if you have the `strtoll' function. */
-#undef HAVE_STRTOLL
-
-/* Define to 1 if you have the `strtoul' function. */
-#undef HAVE_STRTOUL
-
-/* Define to 1 if you have the `strtoull' function. */
-#undef HAVE_STRTOULL
-
-/* Define to 1 if you have the `strtoumax' function. */
-#undef HAVE_STRTOUMAX
-
-/* Define to 1 if the system has the type `struct random_data'. */
-#undef HAVE_STRUCT_RANDOM_DATA
-
-/* Define to 1 if `st_atimensec' is member of `struct stat'. */
-#undef HAVE_STRUCT_STAT_ST_ATIMENSEC
-
-/* Define to 1 if `st_atimespec.tv_nsec' is member of `struct stat'. */
-#undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC
-
-/* Define to 1 if `st_atim.st__tim.tv_nsec' is member of `struct stat'. */
-#undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC
-
-/* Define to 1 if `st_atim.tv_nsec' is member of `struct stat'. */
-#undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC
-
-/* Define to 1 if `st_birthtimensec' is member of `struct stat'. */
-#undef HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC
-
-/* Define to 1 if `st_birthtimespec.tv_nsec' is member of `struct stat'. */
-#undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC
-
-/* Define to 1 if `st_birthtim.tv_nsec' is member of `struct stat'. */
-#undef HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC
-
-/* Define to 1 if `st_blksize' is member of `struct stat'. */
-#undef HAVE_STRUCT_STAT_ST_BLKSIZE
-
-/* Define to 1 if `st_blocks' is member of `struct stat'. */
-#undef HAVE_STRUCT_STAT_ST_BLOCKS
-
-/* Define to 1 if `tm_zone' is member of `struct tm'. */
-#undef HAVE_STRUCT_TM_TM_ZONE
-
-/* Define if struct utimbuf is declared -- usually in <utime.h>. Some systems
-   have utime.h but don't declare the struct anywhere. */
-#undef HAVE_STRUCT_UTIMBUF
-
-/* Define to 1 if your `struct stat' has `st_blksize'. Deprecated, use
-   `HAVE_STRUCT_STAT_ST_BLKSIZE' instead. */
-#undef HAVE_ST_BLKSIZE
-
-/* Define to 1 if your `struct stat' has `st_blocks'. Deprecated, use
-   `HAVE_STRUCT_STAT_ST_BLOCKS' instead. */
-#undef HAVE_ST_BLOCKS
-
-/* Define if struct stat has a char st_fstype[] member. */
-#undef HAVE_ST_FSTYPE_STRING
-
-/* Define to 1 if you have the `symlink' function. */
-#undef HAVE_SYMLINK
-
-/* Define to 1 if you have the <sysexits.h> header file. */
-#undef HAVE_SYSEXITS_H
-
-/* Define to 1 if you have the <sys/bitypes.h> header file. */
-#undef HAVE_SYS_BITYPES_H
-
-/* Define to 1 if you have the <sys/buf.h> header file. */
-#undef HAVE_SYS_BUF_H
-
-/* Define to 1 if you have the <sys/device.h> header file. */
-#undef HAVE_SYS_DEVICE_H
-
-/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
-   */
-#undef HAVE_SYS_DIR_H
-
-/* Define to 1 if you have the <sys/filio.h> header file. */
-#undef HAVE_SYS_FILIO_H
-
-/* Define to 1 if you have the <sys/gentape.h> header file. */
-#undef HAVE_SYS_GENTAPE_H
-
-/* Define to 1 if you have the <sys/inet.h> header file. */
-#undef HAVE_SYS_INET_H
-
-/* Define to 1 if you have the <sys/inttypes.h> header file. */
-#undef HAVE_SYS_INTTYPES_H
-
-/* Define to 1 if you have the <sys/io/trioctl.h> header file. */
-#undef HAVE_SYS_IO_TRIOCTL_H
-
-/* Define to 1 if you have the <sys/mtio.h> header file. */
-#undef HAVE_SYS_MTIO_H
-
-/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
-   */
-#undef HAVE_SYS_NDIR_H
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-#undef HAVE_SYS_PARAM_H
-
-/* Define to 1 if you have the <sys/socket.h> header file. */
-#undef HAVE_SYS_SOCKET_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/tape.h> header file. */
-#undef HAVE_SYS_TAPE_H
-
-/* Define to 1 if you have the <sys/timeb.h> header file. */
-#undef HAVE_SYS_TIMEB_H
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H
-
-/* Define to 1 if you have the <sys/tprintf.h> header file. */
-#undef HAVE_SYS_TPRINTF_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <sys/wait.h> header file. */
-#undef HAVE_SYS_WAIT_H
-
-/* Define to 1 if you have the <time.h> header file. */
-#undef HAVE_TIME_H
-
-/* Define if struct tm has the tm_gmtoff member. */
-#undef HAVE_TM_GMTOFF
-
-/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
-   `HAVE_STRUCT_TM_TM_ZONE' instead. */
-#undef HAVE_TM_ZONE
-
-/* Define to 1 if you have the `tsearch' function. */
-#undef HAVE_TSEARCH
-
-/* Define to 1 if you don't have `tm_zone' but do have the external array
-   `tzname'. */
-#undef HAVE_TZNAME
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if you have the `unsetenv' function. */
-#undef HAVE_UNSETENV
-
-/* Define to 1 if the system has the type `unsigned long long int'. */
-#undef HAVE_UNSIGNED_LONG_LONG_INT
-
-/* Define to 1 if you have the `utimensat' function. */
-#undef HAVE_UTIMENSAT
-
-/* Define to 1 if you have the `utimes' function. */
-#undef HAVE_UTIMES
-
-/* Define if utimes accepts a null argument */
-#undef HAVE_UTIMES_NULL
-
-/* Define to 1 if you have the <utime.h> header file. */
-#undef HAVE_UTIME_H
-
-/* Define to 1 if `utime(file, NULL)' sets file's timestamp to the present. */
-#undef HAVE_UTIME_NULL
-
-/* Define to 1 if you have the `vasnprintf' function. */
-#undef HAVE_VASNPRINTF
-
-/* Define to 1 if you have the `vsnprintf' function. */
-#undef HAVE_VSNPRINTF
-
-/* Define to 1 if you have the `waitpid' function. */
-#undef HAVE_WAITPID
-
-/* Define to 1 if you have the <wchar.h> header file. */
-#undef HAVE_WCHAR_H
-
-/* Define if you have the 'wchar_t' type. */
-#undef HAVE_WCHAR_T
-
-/* Define to 1 if you have the `wcrtomb' function. */
-#undef HAVE_WCRTOMB
-
-/* Define to 1 if you have the `wcscoll' function. */
-#undef HAVE_WCSCOLL
-
-/* Define to 1 if you have the `wcslen' function. */
-#undef HAVE_WCSLEN
-
-/* Define to 1 if you have the <wctype.h> header file. */
-#undef HAVE_WCTYPE_H
-
-/* Define to 1 if you have the `wcwidth' function. */
-#undef HAVE_WCWIDTH
-
-/* Define to 1 if you have the <winsock2.h> header file. */
-#undef HAVE_WINSOCK2_H
-
-/* Define if you have the 'wint_t' type. */
-#undef HAVE_WINT_T
-
-/* Define to 1 if you have the `wmemchr' function. */
-#undef HAVE_WMEMCHR
-
-/* Define to 1 if you have the `wmemcpy' function. */
-#undef HAVE_WMEMCPY
-
-/* Define to 1 if you have the `wmempcpy' function. */
-#undef HAVE_WMEMPCPY
-
-/* Define to 1 if O_NOATIME works. */
-#undef HAVE_WORKING_O_NOATIME
-
-/* Define to 1 if O_NOFOLLOW works. */
-#undef HAVE_WORKING_O_NOFOLLOW
-
-/* Define if utimes works properly. */
-#undef HAVE_WORKING_UTIMES
-
-/* Define to 1 if the system has the type `_Bool'. */
-#undef HAVE__BOOL
-
-/* Define to 1 if you have the `_ftime' function. */
-#undef HAVE__FTIME
-
-/* Define to 1 if you have the `__fpending' function. */
-#undef HAVE___FPENDING
-
-/* Define as const if the declaration of iconv() needs const. */
-#undef ICONV_CONST
-
-#if FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR
-# define ISSLASH(C) ((C) == '/' || (C) == '\\')
-#else
-# define ISSLASH(C) ((C) == '/')
-#endif
-
-/* Define to 1 if lseek does not detect pipes. */
-#undef LSEEK_PIPE_BROKEN
-
-/* Define to 1 if `lstat' dereferences a symlink specified with a trailing
-   slash. */
-#undef LSTAT_FOLLOWS_SLASHED_SYMLINK
-
-/* Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>.
-   */
-#undef MAJOR_IN_MKDEV
-
-/* Define to 1 if `major', `minor', and `makedev' are declared in
-   <sysmacros.h>. */
-#undef MAJOR_IN_SYSMACROS
-
-/* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */
-#undef MALLOC_0_IS_NONNULL
-
-/* Define if the mbrtowc function has the NULL string argument bug. */
-#undef MBRTOWC_NULL_ARG_BUG
-
-/* Define if the mbrtowc function does not return 0 for a NUL character. */
-#undef MBRTOWC_NUL_RETVAL_BUG
-
-/* Define if the mbrtowc function returns a wrong return value. */
-#undef MBRTOWC_RETVAL_BUG
-
-/* Define to mt_model (v.g., for DG/UX), else to mt_type. */
-#undef MTIO_CHECK_FIELD
-
-/* Define to 1 if your C compiler doesn't accept -c and -o together. */
-#undef NO_MINUS_C_MINUS_O
-
-/* Define to 1 if open() fails to recognize a trailing slash. */
-#undef OPEN_TRAILING_SLASH_BUG
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* the number of pending output bytes on stream `fp' */
-#undef PENDING_OUTPUT_N_BYTES
-
-/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
-#undef PRI_MACROS_BROKEN
-
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'ptrdiff_t'. */
-#undef PTRDIFF_T_SUFFIX
-
-/* Define to the full path of your rsh, if any. */
-#undef REMOTE_SHELL
-
-/* Define this to 1 if strerror is broken. */
-#undef REPLACE_STRERROR
-
-/* Define if vasnprintf exists but is overridden by gnulib. */
-#undef REPLACE_VASNPRINTF
-
-/* Define as the return type of signal handlers (`int' or `void'). */
-#undef RETSIGTYPE
-
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'sig_atomic_t'. */
-#undef SIG_ATOMIC_T_SUFFIX
-
-/* Define as the maximum value of type 'size_t', if the system doesn't define
-   it. */
-#undef SIZE_MAX
-
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'size_t'. */
-#undef SIZE_T_SUFFIX
-
-/* If using the C implementation of alloca, define if you know the
-   direction of stack growth for your system; otherwise it will be
-   automatically deduced at runtime.
-       STACK_DIRECTION > 0 => grows toward higher addresses
-       STACK_DIRECTION < 0 => grows toward lower addresses
-       STACK_DIRECTION = 0 => direction of growth unknown */
-#undef STACK_DIRECTION
-
-/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
-#undef STAT_MACROS_BROKEN
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to 1 if strerror_r returns char *. */
-#undef STRERROR_R_CHAR_P
-
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
-/* Define to 1 if your <sys/time.h> declares `struct tm'. */
-#undef TM_IN_SYS_TIME
-
-/* Define to 1 if the type of the st_atim member of a struct stat is struct
-   timespec. */
-#undef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC
-
-/* Define to 1 if unlink (dir) cannot possibly succeed. */
-#undef UNLINK_CANNOT_UNLINK_DIR
-
-/* Define to 1 if you want getc etc. to use unlocked I/O if available.
-   Unlocked I/O can improve performance in unithreaded apps, but it is not
-   safe for multithreaded apps. */
-#undef USE_UNLOCKED_IO
-
-/* Version number of package */
-#undef VERSION
-
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'wchar_t'. */
-#undef WCHAR_T_SUFFIX
-
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'wint_t'. */
-#undef WINT_T_SUFFIX
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-#undef _FILE_OFFSET_BITS
-
-/* Enable GNU extensions on systems that have them.  */
-#ifndef _GNU_SOURCE
-# undef _GNU_SOURCE
-#endif
-
-/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
-#undef _LARGEFILE_SOURCE
-
-/* Define for large files, on AIX-style hosts. */
-#undef _LARGE_FILES
-
-/* Define to 1 if on MINIX. */
-#undef _MINIX
-
-/* Define to 2 if the system does not provide POSIX.1 features except with
-   this defined. */
-#undef _POSIX_1_SOURCE
-
-/* Define to 1 if you need to in order for `stat' and other things to work. */
-#undef _POSIX_SOURCE
-
-/* Define if you want regoff_t to be at least as wide POSIX requires. */
-#undef _REGEX_LARGE_OFFSETS
-
-/* Define to 500 only on HP-UX. */
-#undef _XOPEN_SOURCE
-
-/* Enable extensions on AIX 3, Interix.  */
-#ifndef _ALL_SOURCE
-# undef _ALL_SOURCE
-#endif
-/* Enable GNU extensions on systems that have them.  */
-#ifndef _GNU_SOURCE
-# undef _GNU_SOURCE
-#endif
-/* Enable threading extensions on Solaris.  */
-#ifndef _POSIX_PTHREAD_SEMANTICS
-# undef _POSIX_PTHREAD_SEMANTICS
-#endif
-/* Enable extensions on HP NonStop.  */
-#ifndef _TANDEM_SOURCE
-# undef _TANDEM_SOURCE
-#endif
-/* Enable general extensions on Solaris.  */
-#ifndef __EXTENSIONS__
-# undef __EXTENSIONS__
-#endif
-
-
-/* Define to rpl_ if the getopt replacement functions and variables should be
-   used. */
-#undef __GETOPT_PREFIX
-
-/* Define to rpl_ if the openat replacement function should be used. */
-#undef __OPENAT_PREFIX
-
-/* Ensure that <stdint.h> defines the limit macros, since gnulib's
-   <inttypes.h> relies on them.  */
-#if defined __cplusplus && !defined __STDC_LIMIT_MACROS && GL_TRIGGER_STDC_LIMIT_MACROS
-# define __STDC_LIMIT_MACROS 1
-#endif
-
-
-/* Define to `unsigned' if <sys/types.h> does not define. */
-#undef dev_t
-
-/* Define to rpl_fchownat if the replacement function should be used. */
-#undef fchownat
-
-/* Define to a replacement function name for fnmatch(). */
-#undef fnmatch
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-#undef gid_t
-
-/* A replacement for va_copy, if needed.  */
-#define gl_va_copy(a,b) ((a) = (b))
-
-/* Define to rpl_gmtime if the replacement function should be used. */
-#undef gmtime
-
-/* Conversion descriptor type */
-#undef iconv_t
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
-   calls it, or to nothing if 'inline' is not supported under any name.  */
-#ifndef __cplusplus
-#undef inline
-#endif
-
-/* Define to `unsigned' if <sys/types.h> does not define. */
-#undef ino_t
-
-/* Define to long or long long if <stdint.h> and <inttypes.h> don't define. */
-#undef intmax_t
-
-/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
-   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
-   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
-   __APPLE__ && __MACH__ test for MacOS X.
-   __APPLE_CC__ tests for the Apple compiler and its version.
-   __STDC_VERSION__ tests for the C99 mode.  */
-#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
-# define __GNUC_STDC_INLINE__ 1
-#endif
-
-/* Define to rpl_localtime if the replacement function should be used. */
-#undef localtime
-
-/* Type of major device numbers. */
-#undef major_t
-
-/* Define to rpl_malloc if the replacement function should be used. */
-#undef malloc
-
-/* Define to a type if <wchar.h> does not define. */
-#undef mbstate_t
-
-/* Type of minor device numbers. */
-#undef minor_t
-
-/* Define to rpl_mktime if the replacement function should be used. */
-#undef mktime
-
-/* Define to `int' if <sys/types.h> does not define. */
-#undef mode_t
-
-/* Define to the type of st_nlink in struct stat, or a supertype. */
-#undef nlink_t
-
-/* Define to `long int' if <sys/types.h> does not define. */
-#undef off_t
-
-/* Define to `int' if <sys/types.h> does not define. */
-#undef pid_t
-
-/* Define as the type of the result of subtracting two pointers, if the system
-   doesn't define it. */
-#undef ptrdiff_t
-
-/* Define to rpl_re_comp if the replacement should be used. */
-#undef re_comp
-
-/* Define to rpl_re_compile_fastmap if the replacement should be used. */
-#undef re_compile_fastmap
-
-/* Define to rpl_re_compile_pattern if the replacement should be used. */
-#undef re_compile_pattern
-
-/* Define to rpl_re_exec if the replacement should be used. */
-#undef re_exec
-
-/* Define to rpl_re_match if the replacement should be used. */
-#undef re_match
-
-/* Define to rpl_re_match_2 if the replacement should be used. */
-#undef re_match_2
-
-/* Define to rpl_re_search if the replacement should be used. */
-#undef re_search
-
-/* Define to rpl_re_search_2 if the replacement should be used. */
-#undef re_search_2
-
-/* Define to rpl_re_set_registers if the replacement should be used. */
-#undef re_set_registers
-
-/* Define to rpl_re_set_syntax if the replacement should be used. */
-#undef re_set_syntax
-
-/* Define to rpl_re_syntax_options if the replacement should be used. */
-#undef re_syntax_options
-
-/* Define to a replacement function name for realpath(). */
-#undef realpath
-
-/* Define to rpl_regcomp if the replacement should be used. */
-#undef regcomp
-
-/* Define to rpl_regerror if the replacement should be used. */
-#undef regerror
-
-/* Define to rpl_regexec if the replacement should be used. */
-#undef regexec
-
-/* Define to rpl_regfree if the replacement should be used. */
-#undef regfree
-
-/* Define to the equivalent of the C99 'restrict' keyword, or to
-   nothing if this is not supported.  Do not define if restrict is
-   supported directly.  */
-#undef restrict
-/* Work around a bug in Sun C++: it does not support _Restrict, even
-   though the corresponding Sun C compiler does, which causes
-   "#define restrict _Restrict" in the previous line.  Perhaps some future
-   version of Sun C++ will work with _Restrict; if so, it'll probably
-   define __RESTRICT, just as Sun C does.  */
-#if defined __SUNPRO_CC && !defined __RESTRICT
-# define _Restrict
-#endif
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-#undef size_t
-
-/* Define as a signed type of the same size as size_t. */
-#undef ssize_t
-
-/* Define to rpl_strnlen if the replacement function should be used. */
-#undef strnlen
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-#undef uid_t
-
-/* Define as a marker that can be attached to function parameter declarations
-   for parameters that are not used.  This helps to reduce warnings, such as
-   from GCC -Wunused-parameter.  */
-#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
-# define _UNUSED_PARAMETER_ __attribute__ ((__unused__))
-#else
-# define _UNUSED_PARAMETER_
-#endif
-
-
-/* Define to rpl_utime if the replacement function should be used. */
-#undef utime
-
-/* Define as a macro for copying va_list variables. */
-#undef va_copy
index 7745cfee36cf279c4796a98cfc17f7938c79da4b..07f25273c5b7d5716cd70bba007a4baa63b17fde 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,11 +1,11 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for GNU tar 1.22.
+# Generated by GNU Autoconf 2.63 for GNU tar 1.23.
 #
 # Report bugs to <bug-tar@gnu.org>.
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
 ## --------------------- ##
@@ -17,7 +17,7 @@ DUALCASE=1; export DUALCASE # for MKS sh
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
@@ -39,17 +39,45 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
 as_cr_digits='0123456789'
 as_cr_alnum=$as_cr_Letters$as_cr_digits
 
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in
+      *"$as_nl"*)
+       expr "X$arg" : "X\\(.*\\)$as_nl";
+       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
 # The user is always right.
 if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
 fi
 
 # Support unset when possible.
@@ -65,8 +93,6 @@ fi
 # there to prevent editors from complaining about space-tab.
 # (If _AS_PATH_WALK were called with IFS unset, it would disable word
 # splitting by setting IFS to empty value.)
-as_nl='
-'
 IFS=" ""       $as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
@@ -89,7 +115,7 @@ if test "x$as_myself" = x; then
   as_myself=$0
 fi
 if test ! -f "$as_myself"; then
-  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
   { (exit 1); exit 1; }
 fi
 
@@ -102,17 +128,10 @@ PS2='> '
 PS4='+ '
 
 # NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-  fi
-done
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
 
 # Required to use basename.
 if expr a : '\(a\)' >/dev/null 2>&1 &&
@@ -134,7 +153,7 @@ as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
         X"$0" : 'X\(//\)$' \| \
         X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X/"$0" |
+$as_echo X/"$0" |
     sed '/^.*\/\([^/][^/]*\)\/*$/{
            s//\1/
            q
@@ -160,7 +179,7 @@ else
   as_have_required=no
 fi
 
-  if test $as_have_required = yes &&    (eval ":
+  if test $as_have_required = yes &&    (eval ":
 (as_func_return () {
   (exit \$1)
 }
@@ -242,7 +261,7 @@ IFS=$as_save_IFS
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
@@ -263,7 +282,7 @@ _ASEOF
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
@@ -343,10 +362,10 @@ fi
 
       if test "x$CONFIG_SHELL" != x; then
   for as_var in BASH_ENV ENV
-        do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-        done
-        export CONFIG_SHELL
-        exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+       do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+       done
+       export CONFIG_SHELL
+       exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
 fi
 
 
@@ -415,9 +434,10 @@ fi
 
 test \$exitcode = 0") || {
   echo No shell found that supports shell functions.
-  echo Please tell autoconf@gnu.org about your system,
-  echo including any error possibly output before this
-  echo message
+  echo Please tell bug-autoconf@gnu.org about your system,
+  echo including any error possibly output before this message.
+  echo This can help us improve future autoconf versions.
+  echo Configuration will now proceed without shell functions.
 }
 
 
@@ -453,7 +473,7 @@ test \$exitcode = 0") || {
       s/-\n.*//
     ' >$as_me.lineno &&
   chmod +x "$as_me.lineno" ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
    { (exit 1); exit 1; }; }
 
   # Don't try to exec as it changes $[0], causing all sort of problems
@@ -481,7 +501,6 @@ case `echo -n x` in
 *)
   ECHO_N='-n';;
 esac
-
 if expr a : '\(a\)' >/dev/null 2>&1 &&
    test "X`expr 00001 : '.*\(...\)'`" = X001; then
   as_expr=expr
@@ -494,19 +513,22 @@ if test -d conf$$.dir; then
   rm -f conf$$.dir/conf$$.file
 else
   rm -f conf$$.dir
-  mkdir conf$$.dir
-fi
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s='ln -s'
-  # ... but there are two gotchas:
-  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-  # In both cases, we have to default to `cp -p'.
-  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
     as_ln_s='cp -p'
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
+  fi
 else
   as_ln_s='cp -p'
 fi
@@ -531,10 +553,10 @@ else
   as_test_x='
     eval sh -c '\''
       if test -d "$1"; then
-        test -d "$1/.";
+       test -d "$1/.";
       else
        case $1 in
-        -*)set "./$1";;
+       -*)set "./$1";;
        esac;
        case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
        ???[sx]*):;;*)false;;esac;fi
@@ -574,8 +596,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
 # Identity of this package.
 PACKAGE_NAME='GNU tar'
 PACKAGE_TARNAME='tar'
-PACKAGE_VERSION='1.22'
-PACKAGE_STRING='GNU tar 1.22'
+PACKAGE_VERSION='1.23'
+PACKAGE_STRING='GNU tar 1.23'
 PACKAGE_BUGREPORT='bug-tar@gnu.org'
 
 ac_unique_file="src/tar.c"
@@ -617,497 +639,675 @@ ac_includes_default="\
 
 ac_header_list=
 ac_func_list=
+gl_fnmatch_required=POSIX
+gl_getopt_required=POSIX
+gl_getopt_required=POSIX
 gt_needs=
-ac_subst_vars='SHELL
-PATH_SEPARATOR
-PACKAGE_NAME
-PACKAGE_TARNAME
-PACKAGE_VERSION
-PACKAGE_STRING
-PACKAGE_BUGREPORT
-exec_prefix
-prefix
-program_transform_name
-bindir
-sbindir
-libexecdir
-datarootdir
-datadir
-sysconfdir
-sharedstatedir
-localstatedir
-includedir
-oldincludedir
-docdir
-infodir
-htmldir
-dvidir
-pdfdir
-psdir
-libdir
-localedir
-mandir
-DEFS
-ECHO_C
-ECHO_N
-ECHO_T
-LIBS
-build_alias
-host_alias
-target_alias
-INSTALL_PROGRAM
-INSTALL_SCRIPT
-INSTALL_DATA
-am__isrc
-CYGPATH_W
-PACKAGE
-VERSION
-ACLOCAL
-AUTOCONF
-AUTOMAKE
-AUTOHEADER
-MAKEINFO
-install_sh
-STRIP
-INSTALL_STRIP_PROGRAM
-mkdir_p
-AWK
-SET_MAKE
-am__leading_dot
-AMTAR
-am__tar
-am__untar
-CC
-CFLAGS
-LDFLAGS
-CPPFLAGS
-ac_ct_CC
-EXEEXT
-OBJEXT
-DEPDIR
-am__include
-am__quote
-AMDEP_TRUE
-AMDEP_FALSE
-AMDEPBACKSLASH
-CCDEPMODE
-am__fastdepCC_TRUE
-am__fastdepCC_FALSE
-RANLIB
-YACC
-YFLAGS
-build
-build_cpu
-build_vendor
-build_os
-host
-host_cpu
-host_vendor
-host_os
-CPP
-GREP
-EGREP
-STDBOOL_H
+ac_subst_vars='gltests_LTLIBOBJS
+gltests_LIBOBJS
+gl_LTLIBOBJS
+gl_LIBOBJS
+am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+BACKUP_SED_COND
+BACKUP_SBIN_SCRIPTS
+BACKUP_LIBEXEC_SCRIPTS
+AUTOM4TE
+POSUB
+INTLLIBS
+INTL_MACOSX_LIBS
+XGETTEXT_EXTRA_OPTIONS
+MSGMERGE
+XGETTEXT_015
+XGETTEXT
+GMSGFMT_015
+MSGFMT_015
+GMSGFMT
+MSGFMT
+GETTEXT_MACRO_VERSION
+USE_NLS
+LTLIBICONV
+LIBICONV
+DEFAULT_QUOTING_STYLE
+DEFAULT_BLOCKING
+DEFAULT_ARCHIVE
+DEFAULT_ARCHIVE_FORMAT
+LIBOBJS
+DEFAULT_RMT_COMMAND
+DEFAULT_RMT_DIR
+PU_RMT_PROG
+LIB_SETSOCKOPT
+LIBGNU_LTLIBDEPS
+LIBGNU_LIBDEPS
+REPLACE_ISWCNTRL
+HAVE_WCTYPE_H
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H
+NEXT_WCTYPE_H
+HAVE_ISWCNTRL
+HAVE_WINT_T
+HAVE_WCHAR_H
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H
+NEXT_WCHAR_H
+HAVE_UNISTD_H
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H
+NEXT_UNISTD_H
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC
+TIME_H_DEFINES_STRUCT_TIMESPEC
+NEXT_AS_FIRST_DIRECTIVE_TIME_H
+NEXT_TIME_H
+SYSEXITS_H
+HAVE_SYSEXITS_H
+NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H
+NEXT_SYSEXITS_H
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H
+NEXT_SYS_STAT_H
+NEXT_AS_FIRST_DIRECTIVE_STRINGS_H
+NEXT_STRINGS_H
+NEXT_AS_FIRST_DIRECTIVE_STRING_H
+NEXT_STRING_H
+HAVE_DECL_STRNCASECMP
+HAVE_STRCASECMP
+HAVE_RANDOM_H
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H
+NEXT_STDLIB_H
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H
+NEXT_STDIO_H
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H
+NEXT_STDDEF_H
+STDDEF_H
+HAVE_WCHAR_T
+REPLACE_NULL
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H
+NEXT_STDARG_H
+STDARG_H
+REPLACE_TIMEGM
+REPLACE_STRPTIME
+REPLACE_NANOSLEEP
+REPLACE_MKTIME
+REPLACE_LOCALTIME_R
+GNULIB_TIMEGM
+GNULIB_STRPTIME
+GNULIB_NANOSLEEP
+GNULIB_MKTIME
+UNDEFINE_STRTOK_R
+REPLACE_STRTOK_R
+REPLACE_STRSIGNAL
+REPLACE_STRNDUP
+REPLACE_STRERROR
+REPLACE_STRCASESTR
+REPLACE_STRSTR
+REPLACE_STRDUP
+REPLACE_MEMMEM
+REPLACE_MEMCHR
+HAVE_STRVERSCMP
+HAVE_DECL_STRSIGNAL
+HAVE_DECL_STRERROR
+HAVE_DECL_STRTOK_R
+HAVE_STRCASESTR
+HAVE_STRSEP
+HAVE_STRPBRK
+HAVE_DECL_STRNLEN
+HAVE_DECL_STRNDUP
+HAVE_DECL_STRDUP
+HAVE_STRCHRNUL
+HAVE_STPNCPY
+HAVE_STPCPY
+HAVE_RAWMEMCHR
+HAVE_DECL_MEMRCHR
+HAVE_MEMPCPY
+HAVE_DECL_MEMMEM
+HAVE_MBSLEN
+GNULIB_STRVERSCMP
+GNULIB_STRSIGNAL
+GNULIB_STRERROR
+GNULIB_MBSTOK_R
+GNULIB_MBSSEP
+GNULIB_MBSSPN
+GNULIB_MBSPBRK
+GNULIB_MBSCSPN
+GNULIB_MBSCASESTR
+GNULIB_MBSPCASECMP
+GNULIB_MBSNCASECMP
+GNULIB_MBSCASECMP
+GNULIB_MBSSTR
+GNULIB_MBSRCHR
+GNULIB_MBSCHR
+GNULIB_MBSNLEN
+GNULIB_MBSLEN
+GNULIB_STRTOK_R
+GNULIB_STRCASESTR
+GNULIB_STRSTR
+GNULIB_STRSEP
+GNULIB_STRPBRK
+GNULIB_STRNLEN
+GNULIB_STRNDUP
+GNULIB_STRDUP
+GNULIB_STRCHRNUL
+GNULIB_STPNCPY
+GNULIB_STPCPY
+GNULIB_RAWMEMCHR
+GNULIB_MEMRCHR
+GNULIB_MEMPCPY
+GNULIB_MEMMEM
+GNULIB_MEMCHR
+LOCALE_FR_UTF8
+LOCALE_ZH_CN
+LOCALE_JA
+LOCALCHARSET_TESTS_ENVIRONMENT
+GLIBC21
+HAVE_LANGINFO_ERA
+HAVE_LANGINFO_CODESET
+HAVE_LANGINFO_H
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H
+NEXT_LANGINFO_H
+REPLACE_NL_LANGINFO
+HAVE_NL_LANGINFO
+GNULIB_NL_LANGINFO
+UINT64_MAX_EQ_ULONG_MAX
+UINT32_MAX_LT_UINTMAX_MAX
+INT64_MAX_EQ_LONG_MAX
+INT32_MAX_LT_INTMAX_MAX
+PRIPTR_PREFIX
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H
+NEXT_INTTYPES_H
+HAVE_DECL_STRTOUMAX
+HAVE_DECL_STRTOIMAX
+HAVE_DECL_IMAXDIV
+HAVE_DECL_IMAXABS
+GNULIB_STRTOUMAX
+GNULIB_STRTOIMAX
+GNULIB_IMAXDIV
+GNULIB_IMAXABS
+PRI_MACROS_BROKEN
+STDINT_H
+WINT_T_SUFFIX
+WCHAR_T_SUFFIX
+SIG_ATOMIC_T_SUFFIX
+SIZE_T_SUFFIX
+PTRDIFF_T_SUFFIX
+HAVE_SIGNED_WINT_T
+HAVE_SIGNED_WCHAR_T
+HAVE_SIGNED_SIG_ATOMIC_T
+BITSIZEOF_WINT_T
+BITSIZEOF_WCHAR_T
+BITSIZEOF_SIG_ATOMIC_T
+BITSIZEOF_SIZE_T
+BITSIZEOF_PTRDIFF_T
+APPLE_UNIVERSAL_BUILD
+HAVE_SYS_BITYPES_H
+HAVE_SYS_INTTYPES_H
+HAVE_STDINT_H
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H
+NEXT_STDINT_H
+HAVE_SYS_TYPES_H
+HAVE_INTTYPES_H
+HAVE_UNSIGNED_LONG_LONG_INT
+HAVE_LONG_LONG_INT
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H
+NEXT_SYS_TIME_H
+REPLACE_GETTIMEOFDAY
+HAVE_SYS_TIME_H
+HAVE_STRUCT_TIMEVAL
+HAVE_GETTIMEOFDAY
+GNULIB_GETTIMEOFDAY
+LTLIBINTL
+LIBINTL
+HAVE_GETOPT_H
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H
+NEXT_GETOPT_H
 HAVE__BOOL
-GL_COND_LIBTOOL_TRUE
-GL_COND_LIBTOOL_FALSE
-ALLOCA
-ALLOCA_H
-GETOPT_H
-GNULIB_BTOWC
-GNULIB_WCTOB
-GNULIB_MBSINIT
-GNULIB_MBRTOWC
-GNULIB_MBRLEN
-GNULIB_MBSRTOWCS
-GNULIB_MBSNRTOWCS
-GNULIB_WCRTOMB
-GNULIB_WCSRTOMBS
-GNULIB_WCSNRTOMBS
-GNULIB_WCWIDTH
-HAVE_BTOWC
-HAVE_MBSINIT
-HAVE_MBRTOWC
-HAVE_MBRLEN
-HAVE_MBSRTOWCS
-HAVE_MBSNRTOWCS
-HAVE_WCRTOMB
-HAVE_WCSRTOMBS
-HAVE_WCSNRTOMBS
-HAVE_DECL_WCTOB
-HAVE_DECL_WCWIDTH
-REPLACE_MBSTATE_T
-REPLACE_BTOWC
-REPLACE_WCTOB
-REPLACE_MBSINIT
-REPLACE_MBRTOWC
-REPLACE_MBRLEN
-REPLACE_MBSRTOWCS
-REPLACE_MBSNRTOWCS
-REPLACE_WCRTOMB
-REPLACE_WCSRTOMBS
-REPLACE_WCWIDTH
-WCHAR_H
-LOCALE_FR
-GNULIB_CHOWN
-GNULIB_CLOSE
-GNULIB_DUP2
-GNULIB_ENVIRON
-GNULIB_EUIDACCESS
-GNULIB_FCHDIR
-GNULIB_FSYNC
-GNULIB_FTRUNCATE
-GNULIB_GETCWD
-GNULIB_GETDOMAINNAME
-GNULIB_GETDTABLESIZE
-GNULIB_GETHOSTNAME
-GNULIB_GETLOGIN_R
-GNULIB_GETPAGESIZE
-GNULIB_GETUSERSHELL
-GNULIB_LCHOWN
-GNULIB_LINK
-GNULIB_LSEEK
-GNULIB_READLINK
-GNULIB_SLEEP
-GNULIB_UNISTD_H_SIGPIPE
-GNULIB_WRITE
-HAVE_DUP2
-HAVE_EUIDACCESS
-HAVE_FSYNC
-HAVE_FTRUNCATE
-HAVE_GETDOMAINNAME
-HAVE_GETDTABLESIZE
-HAVE_GETHOSTNAME
-HAVE_GETPAGESIZE
-HAVE_GETUSERSHELL
-HAVE_LINK
-HAVE_READLINK
-HAVE_SLEEP
-HAVE_DECL_ENVIRON
-HAVE_DECL_GETLOGIN_R
-HAVE_OS_H
-HAVE_SYS_PARAM_H
-REPLACE_CHOWN
-REPLACE_CLOSE
-REPLACE_FCHDIR
-REPLACE_GETCWD
-REPLACE_GETPAGESIZE
-REPLACE_LCHOWN
-REPLACE_LSEEK
-REPLACE_WRITE
-UNISTD_H_HAVE_WINSOCK2_H
-LIB_CLOCK_GETTIME
-GNULIB_DIRFD
-GNULIB_SCANDIR
-GNULIB_ALPHASORT
-HAVE_DECL_DIRFD
-HAVE_SCANDIR
-HAVE_ALPHASORT
-DIRENT_H
-INCLUDE_NEXT
-INCLUDE_NEXT_AS_FIRST_DIRECTIVE
-PRAGMA_SYSTEM_HEADER
-NEXT_DIRENT_H
-NEXT_ERRNO_H
-ERRNO_H
-EMULTIHOP_HIDDEN
-EMULTIHOP_VALUE
-ENOLINK_HIDDEN
-ENOLINK_VALUE
-EOVERFLOW_HIDDEN
-EOVERFLOW_VALUE
-GNULIB_OPEN
-REPLACE_OPEN
-GNULIB_FPRINTF
-GNULIB_FPRINTF_POSIX
-GNULIB_PRINTF
-GNULIB_PRINTF_POSIX
-GNULIB_SNPRINTF
-GNULIB_SPRINTF_POSIX
-GNULIB_VFPRINTF
-GNULIB_VFPRINTF_POSIX
-GNULIB_VPRINTF
-GNULIB_VPRINTF_POSIX
-GNULIB_VSNPRINTF
-GNULIB_VSPRINTF_POSIX
-GNULIB_DPRINTF
-GNULIB_VDPRINTF
-GNULIB_VASPRINTF
-GNULIB_OBSTACK_PRINTF
-GNULIB_OBSTACK_PRINTF_POSIX
-GNULIB_FOPEN
-GNULIB_FREOPEN
-GNULIB_FSEEK
-GNULIB_FSEEKO
-GNULIB_FTELL
-GNULIB_FTELLO
-GNULIB_FFLUSH
-GNULIB_FCLOSE
-GNULIB_FPUTC
-GNULIB_PUTC
-GNULIB_PUTCHAR
-GNULIB_FPUTS
-GNULIB_PUTS
-GNULIB_FWRITE
-GNULIB_GETDELIM
-GNULIB_GETLINE
-GNULIB_PERROR
-GNULIB_STDIO_H_SIGPIPE
-REPLACE_STDIO_WRITE_FUNCS
-REPLACE_FPRINTF
-REPLACE_VFPRINTF
-REPLACE_PRINTF
-REPLACE_VPRINTF
-REPLACE_SNPRINTF
-HAVE_DECL_SNPRINTF
-REPLACE_VSNPRINTF
-HAVE_DECL_VSNPRINTF
-REPLACE_SPRINTF
+STDBOOL_H
+FNMATCH_H
+FLOAT_H
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H
+NEXT_FLOAT_H
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H
+NEXT_FCNTL_H
 REPLACE_VSPRINTF
-HAVE_DPRINTF
-REPLACE_DPRINTF
-HAVE_VDPRINTF
+REPLACE_VSNPRINTF
+REPLACE_VPRINTF
+REPLACE_VFPRINTF
 REPLACE_VDPRINTF
-HAVE_VASPRINTF
 REPLACE_VASPRINTF
-HAVE_DECL_OBSTACK_PRINTF
+REPLACE_STDIO_WRITE_FUNCS
+REPLACE_SPRINTF
+REPLACE_SNPRINTF
+REPLACE_RENAMEAT
+REPLACE_RENAME
+REPLACE_REMOVE
+REPLACE_PRINTF
+REPLACE_POPEN
+REPLACE_PERROR
 REPLACE_OBSTACK_PRINTF
-REPLACE_FOPEN
-REPLACE_FREOPEN
-HAVE_FSEEKO
-REPLACE_FSEEKO
-REPLACE_FSEEK
-HAVE_FTELLO
+REPLACE_GETLINE
+REPLACE_GETDELIM
 REPLACE_FTELLO
 REPLACE_FTELL
+REPLACE_FSEEKO
+REPLACE_FSEEK
+REPLACE_FREOPEN
+REPLACE_FPURGE
+REPLACE_FPRINTF
+REPLACE_FOPEN
 REPLACE_FFLUSH
 REPLACE_FCLOSE
-HAVE_DECL_GETDELIM
+REPLACE_DPRINTF
+HAVE_VDPRINTF
+HAVE_VASPRINTF
+HAVE_RENAMEAT
+HAVE_DPRINTF
+HAVE_DECL_VSNPRINTF
+HAVE_DECL_SNPRINTF
+HAVE_DECL_OBSTACK_PRINTF
 HAVE_DECL_GETLINE
-REPLACE_GETLINE
-REPLACE_PERROR
-LIB_CLOSE
-NEXT_FCNTL_H
-FCNTL_H
-NEXT_FLOAT_H
-FLOAT_H
-FNMATCH_H
-LIBINTL
-LTLIBINTL
-NEXT_SYS_TIME_H
-HAVE_SYS_TIME_H
-HAVE_STRUCT_TIMEVAL
-REPLACE_GETTIMEOFDAY
-SYS_TIME_H
-HAVE_LONG_LONG_INT
-HAVE_UNSIGNED_LONG_LONG_INT
-HAVE_INTTYPES_H
-HAVE_SYS_TYPES_H
-NEXT_STDINT_H
-HAVE_STDINT_H
-HAVE_SYS_INTTYPES_H
-HAVE_SYS_BITYPES_H
-APPLE_UNIVERSAL_BUILD
-BITSIZEOF_PTRDIFF_T
-BITSIZEOF_SIZE_T
-BITSIZEOF_SIG_ATOMIC_T
-BITSIZEOF_WCHAR_T
-BITSIZEOF_WINT_T
-HAVE_SIGNED_SIG_ATOMIC_T
-HAVE_SIGNED_WCHAR_T
-HAVE_SIGNED_WINT_T
-PTRDIFF_T_SUFFIX
-SIZE_T_SUFFIX
-SIG_ATOMIC_T_SUFFIX
-WCHAR_T_SUFFIX
-WINT_T_SUFFIX
-STDINT_H
-PRI_MACROS_BROKEN
-GNULIB_IMAXABS
-GNULIB_IMAXDIV
-GNULIB_STRTOIMAX
-GNULIB_STRTOUMAX
-HAVE_DECL_IMAXABS
-HAVE_DECL_IMAXDIV
-HAVE_DECL_STRTOIMAX
-HAVE_DECL_STRTOUMAX
-NEXT_INTTYPES_H
-PRIPTR_PREFIX
-INT32_MAX_LT_INTMAX_MAX
-INT64_MAX_EQ_LONG_MAX
-UINT32_MAX_LT_UINTMAX_MAX
-UINT64_MAX_EQ_ULONG_MAX
-INTTYPES_H
-GLIBC21
-LOCALCHARSET_TESTS_ENVIRONMENT
-GNULIB_LCHMOD
-GNULIB_LSTAT
-HAVE_LCHMOD
-REPLACE_LSTAT
+HAVE_DECL_GETDELIM
+HAVE_DECL_FPURGE
+GNULIB_VSPRINTF_POSIX
+GNULIB_VSNPRINTF
+GNULIB_VPRINTF_POSIX
+GNULIB_VPRINTF
+GNULIB_VFPRINTF_POSIX
+GNULIB_VFPRINTF
+GNULIB_VDPRINTF
+GNULIB_VASPRINTF
+GNULIB_STDIO_H_SIGPIPE
+GNULIB_SPRINTF_POSIX
+GNULIB_SNPRINTF
+GNULIB_RENAMEAT
+GNULIB_RENAME
+GNULIB_REMOVE
+GNULIB_PUTS
+GNULIB_PUTCHAR
+GNULIB_PUTC
+GNULIB_PRINTF_POSIX
+GNULIB_PRINTF
+GNULIB_POPEN
+GNULIB_PERROR
+GNULIB_OBSTACK_PRINTF_POSIX
+GNULIB_OBSTACK_PRINTF
+GNULIB_GETLINE
+GNULIB_GETDELIM
+GNULIB_FWRITE
+GNULIB_FTELLO
+GNULIB_FTELL
+GNULIB_FSEEKO
+GNULIB_FSEEK
+GNULIB_FREOPEN
+GNULIB_FPUTS
+GNULIB_FPUTC
+GNULIB_FPURGE
+GNULIB_FPRINTF_POSIX
+GNULIB_FPRINTF
+GNULIB_FOPEN
+GNULIB_FFLUSH
+GNULIB_FCLOSE
+GNULIB_DPRINTF
+REPLACE_OPENAT
+REPLACE_OPEN
+REPLACE_FCNTL
+HAVE_OPENAT
+HAVE_FCNTL
+GNULIB_OPENAT
+GNULIB_OPEN
+GNULIB_FCNTL
+REPLACE_UTIMENSAT
+REPLACE_STAT
+REPLACE_MKNOD
+REPLACE_MKFIFO
 REPLACE_MKDIR
+REPLACE_LSTAT
+REPLACE_FUTIMENS
+REPLACE_FSTATAT
+REPLACE_FSTAT
+HAVE_UTIMENSAT
+HAVE_MKNODAT
+HAVE_MKNOD
+HAVE_MKFIFOAT
+HAVE_MKFIFO
+HAVE_MKDIRAT
+HAVE_LSTAT
+HAVE_LCHMOD
+HAVE_FUTIMENS
+HAVE_FSTATAT
+HAVE_FCHMODAT
+GNULIB_UTIMENSAT
+GNULIB_STAT
+GNULIB_MKNODAT
+GNULIB_MKNOD
+GNULIB_MKFIFOAT
+GNULIB_MKFIFO
+GNULIB_MKDIRAT
+GNULIB_LSTAT
+GNULIB_LCHMOD
+GNULIB_FUTIMENS
+GNULIB_FSTATAT
+GNULIB_FCHMODAT
+EOVERFLOW_VALUE
+EOVERFLOW_HIDDEN
+ENOLINK_VALUE
+ENOLINK_HIDDEN
+EMULTIHOP_VALUE
+EMULTIHOP_HIDDEN
+ERRNO_H
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H
+NEXT_ERRNO_H
+NEXT_AS_FIRST_DIRECTIVE_DIRENT_H
+NEXT_DIRENT_H
+PRAGMA_SYSTEM_HEADER
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE
+INCLUDE_NEXT
+REPLACE_OPENDIR
+REPLACE_FDOPENDIR
+REPLACE_CLOSEDIR
+HAVE_ALPHASORT
+HAVE_SCANDIR
+HAVE_FDOPENDIR
+HAVE_DECL_DIRFD
+GNULIB_ALPHASORT
+GNULIB_SCANDIR
+GNULIB_FDOPENDIR
+GNULIB_DIRFD
+LIB_CLOCK_GETTIME
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS
+UNISTD_H_HAVE_WINSOCK2_H
+REPLACE_WRITE
+REPLACE_USLEEP
+REPLACE_UNLINKAT
+REPLACE_UNLINK
+REPLACE_SYMLINK
+REPLACE_SLEEP
+REPLACE_RMDIR
+REPLACE_READLINK
+REPLACE_PREAD
+REPLACE_LSEEK
+REPLACE_LINKAT
+REPLACE_LINK
+REPLACE_LCHOWN
+REPLACE_GETPAGESIZE
+REPLACE_GETGROUPS
+REPLACE_GETCWD
+REPLACE_FCHOWNAT
+REPLACE_FCHDIR
+REPLACE_DUP2
+REPLACE_DUP
+REPLACE_CLOSE
+REPLACE_CHOWN
+HAVE_USLEEP
+HAVE_UNLINKAT
+HAVE_SYS_PARAM_H
+HAVE_OS_H
+HAVE_DECL_GETLOGIN_R
+HAVE_DECL_ENVIRON
+HAVE_SYMLINKAT
+HAVE_SYMLINK
+HAVE_SLEEP
+HAVE_READLINKAT
+HAVE_READLINK
+HAVE_PREAD
+HAVE_PIPE2
+HAVE_LINKAT
+HAVE_LINK
+HAVE_LCHOWN
+HAVE_GETUSERSHELL
+HAVE_GETPAGESIZE
+HAVE_GETLOGIN
+HAVE_GETHOSTNAME
+HAVE_GETGROUPS
+HAVE_GETDTABLESIZE
+HAVE_GETDOMAINNAME
+HAVE_FTRUNCATE
+HAVE_FSYNC
+HAVE_FCHOWNAT
+HAVE_FACCESSAT
+HAVE_EUIDACCESS
+HAVE_DUP3
+HAVE_DUP2
+HAVE_CHOWN
+GNULIB_WRITE
+GNULIB_USLEEP
+GNULIB_UNLINKAT
+GNULIB_UNLINK
+GNULIB_UNISTD_H_SIGPIPE
+GNULIB_UNISTD_H_GETOPT
+GNULIB_SYMLINKAT
+GNULIB_SYMLINK
+GNULIB_SLEEP
+GNULIB_RMDIR
+GNULIB_READLINKAT
+GNULIB_READLINK
+GNULIB_PREAD
+GNULIB_PIPE2
+GNULIB_LSEEK
+GNULIB_LINKAT
+GNULIB_LINK
+GNULIB_LCHOWN
+GNULIB_GETUSERSHELL
+GNULIB_GETPAGESIZE
+GNULIB_GETLOGIN_R
+GNULIB_GETLOGIN
+GNULIB_GETHOSTNAME
+GNULIB_GETGROUPS
+GNULIB_GETDTABLESIZE
+GNULIB_GETDOMAINNAME
+GNULIB_GETCWD
+GNULIB_FTRUNCATE
+GNULIB_FSYNC
+GNULIB_FCHOWNAT
+GNULIB_FCHDIR
+GNULIB_FACCESSAT
+GNULIB_EUIDACCESS
+GNULIB_ENVIRON
+GNULIB_DUP3
+GNULIB_DUP2
+GNULIB_CLOSE
+GNULIB_CHOWN
+REPLACE_UNSETENV
+REPLACE_STRTOD
+REPLACE_SETENV
+REPLACE_REALPATH
+REPLACE_PUTENV
+REPLACE_MKSTEMP
+REPLACE_CANONICALIZE_FILE_NAME
+HAVE_UNSETENV
+HAVE_SYS_LOADAVG_H
+HAVE_STRUCT_RANDOM_DATA
+HAVE_STRTOULL
+HAVE_STRTOLL
+HAVE_STRTOD
+HAVE_SETENV
+HAVE_RPMATCH
+HAVE_REALPATH
+HAVE_REALLOC_POSIX
+HAVE_RANDOM_R
+HAVE_MKSTEMPS
+HAVE_MKOSTEMPS
+HAVE_MKOSTEMP
+HAVE_MKDTEMP
 HAVE_MALLOC_POSIX
-GNULIB_MALLOC_POSIX
+HAVE_GETSUBOPT
+HAVE_DECL_GETLOADAVG
+HAVE_CANONICALIZE_FILE_NAME
+HAVE_CALLOC_POSIX
+HAVE_ATOLL
+GNULIB_UNSETENV
+GNULIB_STRTOULL
+GNULIB_STRTOLL
+GNULIB_STRTOD
+GNULIB_SETENV
+GNULIB_RPMATCH
+GNULIB_REALPATH
 GNULIB_REALLOC_POSIX
+GNULIB_RANDOM_R
+GNULIB_PUTENV
+GNULIB_MKSTEMPS
+GNULIB_MKSTEMP
+GNULIB_MKOSTEMPS
+GNULIB_MKOSTEMP
+GNULIB_MKDTEMP
+GNULIB_MALLOC_POSIX
+GNULIB_GETSUBOPT
+GNULIB_GETLOADAVG
+GNULIB_CANONICALIZE_FILE_NAME
 GNULIB_CALLOC_POSIX
 GNULIB_ATOLL
-GNULIB_GETLOADAVG
-GNULIB_GETSUBOPT
-GNULIB_MKDTEMP
-GNULIB_MKSTEMP
-GNULIB_PUTENV
-GNULIB_RANDOM_R
-GNULIB_RPMATCH
-GNULIB_SETENV
-GNULIB_STRTOD
-GNULIB_STRTOLL
-GNULIB_STRTOULL
-GNULIB_UNSETENV
-HAVE_ATOLL
-HAVE_CALLOC_POSIX
-HAVE_GETSUBOPT
-HAVE_MKDTEMP
-HAVE_REALLOC_POSIX
-HAVE_RANDOM_R
-HAVE_RPMATCH
-HAVE_SETENV
-HAVE_STRTOD
-HAVE_STRTOLL
-HAVE_STRTOULL
-HAVE_STRUCT_RANDOM_DATA
-HAVE_SYS_LOADAVG_H
-HAVE_UNSETENV
-HAVE_DECL_GETLOADAVG
-REPLACE_MKSTEMP
-REPLACE_PUTENV
-REPLACE_STRTOD
-VOID_UNSETENV
-LOCALE_JA
-LOCALE_FR_UTF8
-LOCALE_ZH_CN
-GNULIB_MEMMEM
-GNULIB_MEMPCPY
-GNULIB_MEMRCHR
-GNULIB_RAWMEMCHR
-GNULIB_STPCPY
-GNULIB_STPNCPY
-GNULIB_STRCHRNUL
-GNULIB_STRDUP
-GNULIB_STRNDUP
-GNULIB_STRNLEN
-GNULIB_STRPBRK
-GNULIB_STRSEP
-GNULIB_STRSTR
-GNULIB_STRCASESTR
-GNULIB_STRTOK_R
-GNULIB_MBSLEN
-GNULIB_MBSNLEN
-GNULIB_MBSCHR
-GNULIB_MBSRCHR
-GNULIB_MBSSTR
-GNULIB_MBSCASECMP
-GNULIB_MBSNCASECMP
-GNULIB_MBSPCASECMP
-GNULIB_MBSCASESTR
-GNULIB_MBSCSPN
-GNULIB_MBSPBRK
-GNULIB_MBSSPN
-GNULIB_MBSSEP
-GNULIB_MBSTOK_R
-GNULIB_STRERROR
-GNULIB_STRSIGNAL
-GNULIB_STRVERSCMP
-HAVE_DECL_MEMMEM
-HAVE_MEMPCPY
-HAVE_DECL_MEMRCHR
-HAVE_RAWMEMCHR
-HAVE_STPCPY
-HAVE_STPNCPY
-HAVE_STRCHRNUL
-HAVE_DECL_STRDUP
-HAVE_STRNDUP
-HAVE_DECL_STRNDUP
-HAVE_DECL_STRNLEN
-HAVE_STRPBRK
-HAVE_STRSEP
-HAVE_STRCASESTR
-HAVE_DECL_STRTOK_R
-HAVE_DECL_STRERROR
-HAVE_DECL_STRSIGNAL
-HAVE_STRVERSCMP
-REPLACE_MEMMEM
-REPLACE_STRDUP
-REPLACE_STRSTR
-REPLACE_STRCASESTR
-REPLACE_STRERROR
-REPLACE_STRSIGNAL
-STDARG_H
-NEXT_STDARG_H
-NEXT_STDIO_H
-NEXT_STDLIB_H
-HAVE_RANDOM_H
-HAVE_STRCASECMP
-HAVE_DECL_STRNCASECMP
-NEXT_STRING_H
-NEXT_STRINGS_H
-HAVE_LSTAT
-NEXT_SYS_STAT_H
-SYS_STAT_H
-NEXT_SYSEXITS_H
-HAVE_SYSEXITS_H
-SYSEXITS_H
-REPLACE_LOCALTIME_R
-REPLACE_NANOSLEEP
-REPLACE_STRPTIME
-REPLACE_TIMEGM
-NEXT_TIME_H
-TIME_H_DEFINES_STRUCT_TIMESPEC
-SYS_TIME_H_DEFINES_STRUCT_TIMESPEC
-NEXT_UNISTD_H
-HAVE_UNISTD_H
-HAVE_WINT_T
-HAVE_WCHAR_H
-NEXT_WCHAR_H
-HAVE_ISWCNTRL
-NEXT_WCTYPE_H
-HAVE_WCTYPE_H
-WCTYPE_H
-REPLACE_ISWCNTRL
-LIBTAR_LIBDEPS
-LIBTAR_LTLIBDEPS
-LIB_SETSOCKOPT
-PU_RMT_PROG
-DEFAULT_RMT_DIR
-DEFAULT_RMT_COMMAND
-LIBOBJS
-DEFAULT_ARCHIVE_FORMAT
-DEFAULT_ARCHIVE
-DEFAULT_BLOCKING
-DEFAULT_QUOTING_STYLE
-LIBICONV
-LTLIBICONV
-USE_NLS
-GETTEXT_MACRO_VERSION
-MSGFMT
-GMSGFMT
-MSGFMT_015
-GMSGFMT_015
-XGETTEXT
-XGETTEXT_015
-MSGMERGE
-XGETTEXT_EXTRA_OPTIONS
-INTL_MACOSX_LIBS
-INTLLIBS
-POSUB
-AUTOM4TE
-BACKUP_LIBEXEC_SCRIPTS
-BACKUP_SBIN_SCRIPTS
-BACKUP_SED_COND
-LTLIBOBJS
-gl_LIBOBJS
-gl_LTLIBOBJS
-gltests_LIBOBJS
-gltests_LTLIBOBJS'
+LOCALE_FR
+REPLACE_WCWIDTH
+REPLACE_WCSNRTOMBS
+REPLACE_WCSRTOMBS
+REPLACE_WCRTOMB
+REPLACE_MBSNRTOWCS
+REPLACE_MBSRTOWCS
+REPLACE_MBRLEN
+REPLACE_MBRTOWC
+REPLACE_MBSINIT
+REPLACE_WCTOB
+REPLACE_BTOWC
+REPLACE_MBSTATE_T
+HAVE_DECL_WCWIDTH
+HAVE_DECL_WCTOB
+HAVE_WCSNRTOMBS
+HAVE_WCSRTOMBS
+HAVE_WCRTOMB
+HAVE_MBSNRTOWCS
+HAVE_MBSRTOWCS
+HAVE_MBRLEN
+HAVE_MBRTOWC
+HAVE_MBSINIT
+HAVE_BTOWC
+GNULIB_WCWIDTH
+GNULIB_WCSNRTOMBS
+GNULIB_WCSRTOMBS
+GNULIB_WCRTOMB
+GNULIB_MBSNRTOWCS
+GNULIB_MBSRTOWCS
+GNULIB_MBRLEN
+GNULIB_MBRTOWC
+GNULIB_MBSINIT
+GNULIB_WCTOB
+GNULIB_BTOWC
+GETOPT_H
+ALLOCA_H
+ALLOCA
+GL_COND_LIBTOOL_FALSE
+GL_COND_LIBTOOL_TRUE
+EGREP
+GREP
+CPP
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+YFLAGS
+YACC
+RANLIB
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
 ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_silent_rules
+enable_dependency_tracking
+enable_largefile
+with_included_regex
+with_packager
+with_packager_version
+with_packager_bug_reports
+with_rmt
+with_compress
+with_gzip
+with_bzip2
+with_lzip
+with_lzma
+with_lzop
+with_xz
+with_gnu_ld
+enable_rpath
+with_libiconv_prefix
+enable_nls
+with_libintl_prefix
+enable_backup_scripts
+'
       ac_precious_vars='build_alias
 host_alias
 target_alias
@@ -1129,6 +1329,8 @@ DEFAULT_QUOTING_STYLE'
 # Initialize some variables set by options.
 ac_init_help=
 ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
 # The variables have the same names as the options, with
 # dashes changed to underlines.
 cache_file=/dev/null
@@ -1227,13 +1429,21 @@ do
     datarootdir=$ac_optarg ;;
 
   -disable-* | --disable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
    { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
-    eval enable_$ac_feature=no ;;
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
 
   -docdir | --docdir | --docdi | --doc | --do)
     ac_prev=docdir ;;
@@ -1246,13 +1456,21 @@ do
     dvidir=$ac_optarg ;;
 
   -enable-* | --enable-*)
-    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2
    { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
-    eval enable_$ac_feature=\$ac_optarg ;;
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
 
   -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
   | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
@@ -1443,22 +1661,38 @@ do
     ac_init_version=: ;;
 
   -with-* | --with-*)
-    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
    { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
-    eval with_$ac_package=\$ac_optarg ;;
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
 
   -without-* | --without-*)
-    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2
    { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
-    eval with_$ac_package=no ;;
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
 
   --x)
     # Obsolete; use --with-x.
@@ -1478,7 +1712,7 @@ do
   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
     x_libraries=$ac_optarg ;;
 
-  -*) { echo "$as_me: error: unrecognized option: $ac_option
+  -*) { $as_echo "$as_me: error: unrecognized option: $ac_option
 Try \`$0 --help' for more information." >&2
    { (exit 1); exit 1; }; }
     ;;
@@ -1487,16 +1721,16 @@ Try \`$0 --help' for more information." >&2
     ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
     # Reject names that are not valid shell variable names.
     expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+      { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2
    { (exit 1); exit 1; }; }
     eval $ac_envvar=\$ac_optarg
     export $ac_envvar ;;
 
   *)
     # FIXME: should be removed in autoconf 3.0.
-    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
     : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
     ;;
 
@@ -1505,22 +1739,38 @@ done
 
 if test -n "$ac_prev"; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  { echo "$as_me: error: missing argument to $ac_option" >&2
+  { $as_echo "$as_me: error: missing argument to $ac_option" >&2
    { (exit 1); exit 1; }; }
 fi
 
-# Be sure to have absolute directory names.
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2
+   { (exit 1); exit 1; }; } ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
 for ac_var in  exec_prefix prefix bindir sbindir libexecdir datarootdir \
                datadir sysconfdir sharedstatedir localstatedir includedir \
                oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
                libdir localedir mandir
 do
   eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
   case $ac_val in
     [\\/$]* | ?:[\\/]* )  continue;;
     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
   esac
-  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+  { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
    { (exit 1); exit 1; }; }
 done
 
@@ -1535,7 +1785,7 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
     If a cross compiler is detected then cross compile mode will be used." >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
@@ -1551,10 +1801,10 @@ test "$silent" = yes && exec 6>/dev/null
 ac_pwd=`pwd` && test -n "$ac_pwd" &&
 ac_ls_di=`ls -di .` &&
 ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  { echo "$as_me: error: Working directory cannot be determined" >&2
+  { $as_echo "$as_me: error: working directory cannot be determined" >&2
    { (exit 1); exit 1; }; }
 test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  { echo "$as_me: error: pwd does not report name of working directory" >&2
+  { $as_echo "$as_me: error: pwd does not report name of working directory" >&2
    { (exit 1); exit 1; }; }
 
 
@@ -1562,12 +1812,12 @@ test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
 if test -z "$srcdir"; then
   ac_srcdir_defaulted=yes
   # Try the directory containing this script, then the parent directory.
-  ac_confdir=`$as_dirname -- "$0" ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$0" : 'X\(//\)[^/]' \| \
-        X"$0" : 'X\(//\)$' \| \
-        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$0" |
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_myself" : 'X\(//\)[^/]' \| \
+        X"$as_myself" : 'X\(//\)$' \| \
+        X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -1594,12 +1844,12 @@ else
 fi
 if test ! -r "$srcdir/$ac_unique_file"; then
   test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+  { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
    { (exit 1); exit 1; }; }
 fi
 ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
 ac_abs_confdir=`(
-       cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
+       cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2
    { (exit 1); exit 1; }; }
        pwd)`
 # When building in place, set srcdir=.
@@ -1626,7 +1876,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures GNU tar 1.22 to adapt to many kinds of systems.
+\`configure' configures GNU tar 1.23 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1648,9 +1898,9 @@ Configuration:
 
 Installation directories:
   --prefix=PREFIX         install architecture-independent files in PREFIX
-                         [$ac_default_prefix]
+                          [$ac_default_prefix]
   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                         [PREFIX]
+                          [PREFIX]
 
 By default, \`make install' will install all the files in
 \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
@@ -1660,25 +1910,25 @@ for instance \`--prefix=\$HOME'.
 For better control, use the options below.
 
 Fine tuning of the installation directories:
-  --bindir=DIR           user executables [EPREFIX/bin]
-  --sbindir=DIR          system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR       program executables [EPREFIX/libexec]
-  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
-  --libdir=DIR           object code libraries [EPREFIX/lib]
-  --includedir=DIR       C header files [PREFIX/include]
-  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
-  --datarootdir=DIR      read-only arch.-independent data root [PREFIX/share]
-  --datadir=DIR          read-only architecture-independent data [DATAROOTDIR]
-  --infodir=DIR          info documentation [DATAROOTDIR/info]
-  --localedir=DIR        locale-dependent data [DATAROOTDIR/locale]
-  --mandir=DIR           man documentation [DATAROOTDIR/man]
-  --docdir=DIR           documentation root [DATAROOTDIR/doc/tar]
-  --htmldir=DIR          html documentation [DOCDIR]
-  --dvidir=DIR           dvi documentation [DOCDIR]
-  --pdfdir=DIR           pdf documentation [DOCDIR]
-  --psdir=DIR            ps documentation [DOCDIR]
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/tar]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
 _ACEOF
 
   cat <<\_ACEOF
@@ -1696,13 +1946,16 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of GNU tar 1.22:";;
+     short | recursive ) echo "Configuration of GNU tar 1.23:";;
    esac
   cat <<\_ACEOF
 
 Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-silent-rules          less verbose build output (undo: `make V=1')
+  --disable-silent-rules         verbose build output (undo: `make V=0')
   --disable-dependency-tracking  speeds up one-time build
   --enable-dependency-tracking   do not reject slow dependency extractors
   --disable-largefile     omit support for large files
@@ -1714,14 +1967,22 @@ Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
   --without-included-regex
-                          don't compile regex; this is the default on 32-bit
-                          systems with recent-enough versions of the GNU C
-                          Library (use with caution on other systems). On
-                          systems with 64-bit ptrdiff_t and 32-bit int,
-                          --with-included-regex is the default, in case regex
-                          functions operate on very long strings (>2GB)
+                          don't compile regex; this is the default on systems
+                          with recent-enough versions of the GNU C Library
+                          (use with caution on other systems).
+  --with-packager         String identifying the packager of this software
+  --with-packager-version Packager-specific version information
+  --with-packager-bug-reports
+                          Packager info for bug reports (URL/e-mail/...)
   --with-rmt=FILE         Use FILE as the default `rmt' program. Do not build
                           included copy of `rmt'.
+  --with-compress=PROG    use PROG as compress compressor program
+  --with-gzip=PROG        use PROG as gzip compressor program
+  --with-bzip2=PROG       use PROG as bzip2 compressor program
+  --with-lzip=PROG        use PROG as lzip compressor program
+  --with-lzma=PROG        use PROG as lzma compressor program
+  --with-lzop=PROG        use PROG as lzop compressor program
+  --with-xz=PROG          use PROG as xz compressor program
   --with-gnu-ld           assume the C compiler uses GNU ld default=no
   --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
   --without-libiconv-prefix     don't search for libiconv in includedir and libdir
@@ -1768,15 +2029,17 @@ fi
 if test "$ac_init_help" = "recursive"; then
   # If there are subdirs, report their specific --help.
   for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d "$ac_dir" || continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
     ac_builddir=.
 
 case "$ac_dir" in
 .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
 *)
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
   # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
   case $ac_top_builddir_sub in
   "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
   *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1812,7 +2075,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
       echo &&
       $SHELL "$ac_srcdir/configure" --help=recursive
     else
-      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
     fi || ac_status=$?
     cd "$ac_pwd" || { ac_status=$?; break; }
   done
@@ -1821,11 +2084,11 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-GNU tar configure 1.22
-generated by GNU Autoconf 2.61
+GNU tar configure 1.23
+generated by GNU Autoconf 2.63
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1835,8 +2098,8 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by GNU tar $as_me 1.22, which was
-generated by GNU Autoconf 2.61.  Invocation command line was
+It was created by GNU tar $as_me 1.23, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
 
   $ $0 $@
 
@@ -1872,7 +2135,7 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  echo "PATH: $as_dir"
+  $as_echo "PATH: $as_dir"
 done
 IFS=$as_save_IFS
 
@@ -1907,7 +2170,7 @@ do
     | -silent | --silent | --silen | --sile | --sil)
       continue ;;
     *\'*)
-      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
     case $ac_pass in
     1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
@@ -1959,11 +2222,12 @@ _ASBOX
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       esac
       case $ac_var in #(
       _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
       *) $as_unset $ac_var ;;
       esac ;;
     esac
@@ -1993,9 +2257,9 @@ _ASBOX
     do
       eval ac_val=\$$ac_var
       case $ac_val in
-      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
       esac
-      echo "$ac_var='\''$ac_val'\''"
+      $as_echo "$ac_var='\''$ac_val'\''"
     done | sort
     echo
 
@@ -2010,9 +2274,9 @@ _ASBOX
       do
        eval ac_val=\$$ac_var
        case $ac_val in
-       *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
        esac
-       echo "$ac_var='\''$ac_val'\''"
+       $as_echo "$ac_var='\''$ac_val'\''"
       done | sort
       echo
     fi
@@ -2028,8 +2292,8 @@ _ASBOX
       echo
     fi
     test "$ac_signal" != 0 &&
-      echo "$as_me: caught signal $ac_signal"
-    echo "$as_me: exit $exit_status"
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
   } >&5
   rm -f core *.core core.conftest.* &&
     rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
@@ -2071,21 +2335,24 @@ _ACEOF
 
 
 # Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
 if test -n "$CONFIG_SITE"; then
-  set x "$CONFIG_SITE"
+  ac_site_file1=$CONFIG_SITE
 elif test "x$prefix" != xNONE; then
-  set x "$prefix/share/config.site" "$prefix/etc/config.site"
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
 else
-  set x "$ac_default_prefix/share/config.site" \
-       "$ac_default_prefix/etc/config.site"
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
 fi
-shift
-for ac_site_file
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
 do
+  test "x$ac_site_file" = xNONE && continue
   if test -r "$ac_site_file"; then
-    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
+    { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
     sed 's/^/| /' "$ac_site_file" >&5
     . "$ac_site_file"
   fi
@@ -2095,16 +2362,16 @@ if test -r "$cache_file"; then
   # Some versions of bash will fail to source /dev/null (special
   # files actually), so we avoid doing that.
   if test -f "$cache_file"; then
-    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
+    { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
     case $cache_file in
       [\\/]* | ?:[\\/]* ) . "$cache_file";;
       *)                      . "./$cache_file";;
     esac
   fi
 else
-  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
+  { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
   >$cache_file
 fi
 
@@ -2134,12 +2401,15 @@ ac_header_list="$ac_header_list linewrap.h"
 ac_func_list="$ac_func_list pathconf"
 ac_func_list="$ac_func_list btowc"
 ac_func_list="$ac_func_list canonicalize_file_name"
-ac_func_list="$ac_func_list getcwd"
-ac_func_list="$ac_func_list readlink"
+ac_func_list="$ac_func_list realpath"
+ac_func_list="$ac_func_list chown"
+ac_func_list="$ac_func_list fchown"
 ac_header_list="$ac_header_list dirent.h"
+ac_func_list="$ac_func_list fdopendir"
 ac_func_list="$ac_func_list dup2"
 ac_header_list="$ac_header_list errno.h"
 ac_func_list="$ac_func_list fchdir"
+ac_func_list="$ac_func_list fcntl"
 ac_header_list="$ac_header_list float.h"
 ac_func_list="$ac_func_list isblank"
 ac_func_list="$ac_func_list iswctype"
@@ -2149,27 +2419,39 @@ ac_func_list="$ac_func_list wmemchr"
 ac_func_list="$ac_func_list wmemcpy"
 ac_func_list="$ac_func_list wmempcpy"
 ac_header_list="$ac_header_list wctype.h"
+gl_fnmatch_required=GNU
 ac_header_list="$ac_header_list stdio_ext.h"
 ac_func_list="$ac_func_list __fpending"
 ac_func_list="$ac_func_list ftruncate"
+ac_func_list="$ac_func_list getdelim"
+ac_func_list="$ac_func_list getdtablesize"
+gl_getopt_required=GNU
+ac_header_list="$ac_header_list getopt.h"
 ac_func_list="$ac_func_list gettimeofday"
 ac_func_list="$ac_func_list nanotime"
 ac_header_list="$ac_header_list stdint.h"
 ac_header_list="$ac_header_list wchar.h"
 ac_header_list="$ac_header_list inttypes.h"
+ac_header_list="$ac_header_list langinfo.h"
+ac_func_list="$ac_func_list lchmod"
 ac_func_list="$ac_func_list lstat"
 ac_func_list="$ac_func_list mbsinit"
 ac_func_list="$ac_func_list mbrtowc"
+ac_header_list="$ac_header_list sys/mman.h"
+ac_func_list="$ac_func_list mprotect"
 ac_func_list="$ac_func_list alarm"
-ac_func_list="$ac_func_list lchmod"
-ac_func_list="$ac_func_list fdopendir"
+ac_func_list="$ac_func_list nl_langinfo"
+ac_func_list="$ac_func_list readlink"
 ac_func_list="$ac_func_list wcscoll"
 ac_func_list="$ac_func_list setenv"
+ac_func_list="$ac_func_list sleep"
 ac_header_list="$ac_header_list stdarg.h"
+ac_header_list="$ac_header_list stddef.h"
 ac_header_list="$ac_header_list stdio.h"
 ac_header_list="$ac_header_list stdlib.h"
 ac_header_list="$ac_header_list sys/socket.h"
 ac_header_list="$ac_header_list strings.h"
+ac_func_list="$ac_func_list strndup"
 ac_header_list="$ac_header_list sys/stat.h"
 ac_header_list="$ac_header_list sysexits.h"
 ac_header_list="$ac_header_list time.h"
@@ -2180,6 +2462,7 @@ ac_func_list="$ac_func_list futimes"
 ac_func_list="$ac_func_list futimesat"
 ac_func_list="$ac_func_list futimens"
 ac_func_list="$ac_func_list utimensat"
+ac_func_list="$ac_func_list lutimes"
 ac_func_list="$ac_func_list vasnprintf"
 ac_func_list="$ac_func_list wcrtomb"
 ac_func_list="$ac_func_list iswcntrl"
@@ -2201,29 +2484,38 @@ for ac_var in $ac_precious_vars; do
   eval ac_new_val=\$ac_env_${ac_var}_value
   case $ac_old_set,$ac_new_set in
     set,)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,set)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,);;
     *)
       if test "x$ac_old_val" != "x$ac_new_val"; then
-       { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-       { echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
-echo "$as_me:   former value:  $ac_old_val" >&2;}
-       { echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
-echo "$as_me:   current value: $ac_new_val" >&2;}
-       ac_cache_corrupted=:
+       # differences in whitespace do not lead to failure.
+       ac_old_val_w=`echo x $ac_old_val`
+       ac_new_val_w=`echo x $ac_new_val`
+       if test "$ac_old_val_w" != "$ac_new_val_w"; then
+         { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+         ac_cache_corrupted=:
+       else
+         { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+         eval $ac_var=\$ac_old_val
+       fi
+       { $as_echo "$as_me:$LINENO:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+       { $as_echo "$as_me:$LINENO:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
       fi;;
   esac
   # Pass precious variables to config.status.
   if test "$ac_new_set" = set; then
     case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
     *) ac_arg=$ac_var=$ac_new_val ;;
     esac
     case " $ac_configure_args " in
@@ -2233,10 +2525,12 @@ echo "$as_me:   current value: $ac_new_val" >&2;}
   fi
 done
 if $ac_cache_corrupted; then
-  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+  { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
    { (exit 1); exit 1; }; }
 fi
 
@@ -2289,8 +2583,8 @@ for ac_dir in build-aux "$srcdir"/build-aux; do
   fi
 done
 if test -z "$ac_aux_dir"; then
-  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in build-aux \"$srcdir\"/build-aux" >&5
-echo "$as_me: error: cannot find install-sh or install.sh in build-aux \"$srcdir\"/build-aux" >&2;}
+  { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in build-aux \"$srcdir\"/build-aux" >&5
+$as_echo "$as_me: error: cannot find install-sh or install.sh in build-aux \"$srcdir\"/build-aux" >&2;}
    { (exit 1); exit 1; }; }
 fi
 
@@ -2303,10 +2597,10 @@ ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
 ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 
 
-ac_config_headers="$ac_config_headers config.h:config.hin"
+ac_config_headers="$ac_config_headers config.h"
 
 
-am__api_version='1.10'
+am__api_version='1.11'
 
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
@@ -2321,11 +2615,12 @@ am__api_version='1.10'
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # OS/2's system install, which has a completely different semantic
 # ./install, which can be erroneously created by make from ./install.sh.
-{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
 if test "${ac_cv_path_install+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -2354,17 +2649,29 @@ case $as_dir/ in
            # program-specific install script used by HP pwplus--don't use.
            :
          else
-           ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-           break 3
+           rm -rf conftest.one conftest.two conftest.dir
+           echo one > conftest.one
+           echo two > conftest.two
+           mkdir conftest.dir
+           if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+             test -s conftest.one && test -s conftest.two &&
+             test -s conftest.dir/conftest.one &&
+             test -s conftest.dir/conftest.two
+           then
+             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+             break 3
+           fi
          fi
        fi
       done
     done
     ;;
 esac
+
 done
 IFS=$as_save_IFS
 
+rm -rf conftest.one conftest.two conftest.dir
 
 fi
   if test "${ac_cv_path_install+set}" = set; then
@@ -2377,8 +2684,8 @@ fi
     INSTALL=$ac_install_sh
   fi
 fi
-{ echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
 
 # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
 # It thinks the first close brace ends the variable substitution.
@@ -2388,21 +2695,38 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
 
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
-{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5
-echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
 # Just in case
 sleep 1
 echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    { { $as_echo "$as_me:$LINENO: error: unsafe absolute working directory name" >&5
+$as_echo "$as_me: error: unsafe absolute working directory name" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \    ]*)
+    { { $as_echo "$as_me:$LINENO: error: unsafe srcdir value: \`$srcdir'" >&5
+$as_echo "$as_me: error: unsafe srcdir value: \`$srcdir'" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+
 # Do `set' in a subshell so we don't clobber the current shell's
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
-   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
    if test "$*" = "X"; then
       # -L didn't work.
-      set X `ls -t $srcdir/configure conftest.file`
+      set X `ls -t "$srcdir/configure" conftest.file`
    fi
    rm -f conftest.file
    if test "$*" != "X $srcdir/configure conftest.file" \
@@ -2412,9 +2736,9 @@ if (
       # if, for instance, CONFIG_SHELL is bash and it inherits a
       # broken ls alias from the environment.  This has actually
       # happened.  Such a system could not be considered "sane".
-      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+      { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
 alias in your environment" >&5
-echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+$as_echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
 alias in your environment" >&2;}
    { (exit 1); exit 1; }; }
    fi
@@ -2425,45 +2749,158 @@ then
    # Ok.
    :
 else
-   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+   { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files!
 Check your system clock" >&5
-echo "$as_me: error: newly created file is older than distributed files!
+$as_echo "$as_me: error: newly created file is older than distributed files!
 Check your system clock" >&2;}
    { (exit 1); exit 1; }; }
 fi
-{ echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
 test "$program_prefix" != NONE &&
   program_transform_name="s&^&$program_prefix&;$program_transform_name"
 # Use a double $ so make ignores it.
 test "$program_suffix" != NONE &&
   program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.  echo might interpret backslashes.
+# Double any \ or $.
 # By default was `s,x,x', remove it if useless.
-cat <<\_ACEOF >conftest.sed
-s/[\\$]/&&/g;s/;s,x,x,$//
-_ACEOF
-program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
-rm -f conftest.sed
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
 
 # expand $ac_aux_dir to an absolute path
 am_aux_dir=`cd $ac_aux_dir && pwd`
 
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
 # Use eval to expand $SHELL
 if eval "$MISSING --run true"; then
   am_missing_run="$MISSING --run "
 else
   am_missing_run=
-  { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
-echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+  { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
 fi
 
-{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
-echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; }
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:$LINENO: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
   if test "${ac_cv_path_mkdir+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
@@ -2498,8 +2935,9 @@ fi
     MKDIR_P="$ac_install_sh -d"
   fi
 fi
-{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5
-echo "${ECHO_T}$MKDIR_P" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
 
 mkdir_p="$MKDIR_P"
 case $mkdir_p in
@@ -2511,10 +2949,10 @@ for ac_prog in gawk mawk nawk awk
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_AWK+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
   ac_cv_prog_AWK="$AWK" # Let the user override the test.
@@ -2527,7 +2965,7 @@ do
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_AWK="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -2538,22 +2976,23 @@ fi
 fi
 AWK=$ac_cv_prog_AWK
 if test -n "$AWK"; then
-  { echo "$as_me:$LINENO: result: $AWK" >&5
-echo "${ECHO_T}$AWK" >&6; }
+  { $as_echo "$as_me:$LINENO: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
   test -n "$AWK" && break
 done
 
-{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
-set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
 if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
 SHELL = /bin/sh
@@ -2570,12 +3009,12 @@ esac
 rm -f conftest.make
 fi
 if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
   SET_MAKE=
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
   SET_MAKE="MAKE=${MAKE-make}"
 fi
 
@@ -2588,14 +3027,26 @@ else
 fi
 rmdir .tst 2>/dev/null
 
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in
+yes) AM_DEFAULT_VERBOSITY=0;;
+no)  AM_DEFAULT_VERBOSITY=1;;
+*)   AM_DEFAULT_VERBOSITY=1;;
+esac
+AM_BACKSLASH='\'
+
 if test "`cd $srcdir && pwd`" != "`pwd`"; then
   # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
   # is not polluted with repeated "-I."
   am__isrc=' -I$(srcdir)'
   # test to see if srcdir already configured
   if test -f $srcdir/config.status; then
-    { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
-echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+    { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
    { (exit 1); exit 1; }; }
   fi
 fi
@@ -2612,7 +3063,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='tar'
- VERSION='1.22'
+ VERSION='1.23'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -2640,112 +3091,6 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
 
 MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
-install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
-
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-if test "$cross_compiling" != no; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$STRIP"; then
-  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
-  { echo "$as_me:$LINENO: result: $STRIP" >&5
-echo "${ECHO_T}$STRIP" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_STRIP"; then
-  ac_ct_STRIP=$STRIP
-  # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_STRIP"; then
-  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_STRIP="strip"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
-  { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-echo "${ECHO_T}$ac_ct_STRIP" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-  if test "x$ac_ct_STRIP" = x; then
-    STRIP=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
-    STRIP=$ac_ct_STRIP
-  fi
-else
-  STRIP="$ac_cv_prog_STRIP"
-fi
-
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
 # Always define AMTAR for backward compatibility.
@@ -2753,8 +3098,8 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AMTAR=${AMTAR-"${am_missing_run}tar"}
 
 
-{ echo "$as_me:$LINENO: checking how to create a ustar tar archive" >&5
-echo $ECHO_N "checking how to create a ustar tar archive... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking how to create a ustar tar archive" >&5
+$as_echo_n "checking how to create a ustar tar archive... " >&6; }
 # Loop over all known methods to create a tar archive until one works.
 _am_tools='gnutar plaintar pax cpio none'
 _am_tools=${am_cv_prog_tar_ustar-$_am_tools}
@@ -2827,17 +3172,31 @@ done
 rm -rf conftest.dir
 
 if test "${am_cv_prog_tar_ustar+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   am_cv_prog_tar_ustar=$_am_tool
 fi
 
-{ echo "$as_me:$LINENO: result: $am_cv_prog_tar_ustar" >&5
-echo "${ECHO_T}$am_cv_prog_tar_ustar" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $am_cv_prog_tar_ustar" >&5
+$as_echo "$am_cv_prog_tar_ustar" >&6; }
+
+
+
 
 
 
+# Enable silent rules by default:
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then
+  enableval=$enable_silent_rules;
+fi
 
+case $enable_silent_rules in
+yes) AM_DEFAULT_VERBOSITY=0;;
+no)  AM_DEFAULT_VERBOSITY=1;;
+*)   AM_DEFAULT_VERBOSITY=0;;
+esac
+AM_BACKSLASH='\'
 
 
 ac_ext=c
@@ -2848,10 +3207,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2864,7 +3223,7 @@ do
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -2875,11 +3234,11 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -2888,10 +3247,10 @@ if test -z "$ac_cv_prog_CC"; then
   ac_ct_CC=$CC
   # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
@@ -2904,7 +3263,7 @@ do
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CC="gcc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -2915,11 +3274,11 @@ fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6; }
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
   if test "x$ac_ct_CC" = x; then
@@ -2927,12 +3286,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
@@ -2945,10 +3300,10 @@ if test -z "$CC"; then
           if test -n "$ac_tool_prefix"; then
     # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -2961,7 +3316,7 @@ do
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -2972,11 +3327,11 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -2985,10 +3340,10 @@ fi
 if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -3006,7 +3361,7 @@ do
        continue
      fi
     ac_cv_prog_CC="cc"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3029,11 +3384,11 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -3044,10 +3399,10 @@ if test -z "$CC"; then
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -3060,7 +3415,7 @@ do
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3071,11 +3426,11 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
+  { $as_echo "$as_me:$LINENO: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -3088,10 +3443,10 @@ if test -z "$CC"; then
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
@@ -3104,7 +3459,7 @@ do
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3115,11 +3470,11 @@ fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6; }
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -3131,12 +3486,8 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
@@ -3146,44 +3497,50 @@ fi
 fi
 
 
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
 See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
+$as_echo "$as_me: error: no acceptable C compiler found in \$PATH
 See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+   { (exit 1); exit 1; }; }; }
 
 # Provide some information about the compiler.
-echo "$as_me:$LINENO: checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
+$as_echo "$as_me:$LINENO: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
 { (ac_try="$ac_compiler --version >&5"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compiler --version >&5") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }
 { (ac_try="$ac_compiler -v >&5"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compiler -v >&5") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }
 { (ac_try="$ac_compiler -V >&5"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compiler -V >&5") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }
 
 cat >conftest.$ac_ext <<_ACEOF
@@ -3202,27 +3559,22 @@ main ()
 }
 _ACEOF
 ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
 # Try to create an executable without -o first, disregard a.out.
 # It will help us diagnose broken compilers, and finding out an intuition
 # of exeext.
-{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-#
-# List of possible output files, starting from the most likely.
-# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
-# only as a last resort.  b.out is created by i960 compilers.
-ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
-#
-# The IRIX 6 linker writes into existing files which may not be
-# executable, retaining their permissions.  Remove them first so a
-# subsequent execution test works.
+{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
 ac_rmfiles=
 for ac_file in $ac_files
 do
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
     * ) ac_rmfiles="$ac_rmfiles $ac_file";;
   esac
 done
@@ -3233,10 +3585,11 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link_default") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; then
   # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
 # So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
@@ -3247,7 +3600,7 @@ for ac_file in $ac_files ''
 do
   test -f "$ac_file" || continue
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
        ;;
     [ab].out )
        # We found the default executable, but exeext='' is most
@@ -3274,25 +3627,27 @@ else
   ac_file=''
 fi
 
-{ echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
 if test -z "$ac_file"; then
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables
 See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
+$as_echo "$as_me: error: C compiler cannot create executables
 See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
+   { (exit 77); exit 77; }; }; }
 fi
 
 ac_exeext=$ac_cv_exeext
 
 # Check that the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
-{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0
 # If not cross compiling, check that we can run a simple program.
 if test "$cross_compiling" != yes; then
@@ -3301,49 +3656,53 @@ if test "$cross_compiling" != yes; then
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
     cross_compiling=no
   else
     if test "$cross_compiling" = maybe; then
        cross_compiling=yes
     else
-       { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+       { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
 See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
+$as_echo "$as_me: error: cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
 See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+   { (exit 1); exit 1; }; }; }
     fi
   fi
 fi
-{ echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+{ $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
 
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
 ac_clean_files=$ac_clean_files_save
 # Check that the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
-{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
-{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
 
-{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
 if { (ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; then
   # If both `conftest.exe' and `conftest' are `present' (well, observable)
 # catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
@@ -3352,31 +3711,33 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
 for ac_file in conftest.exe conftest conftest.*; do
   test -f "$ac_file" || continue
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
     *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
          break;;
     * ) break;;
   esac
 done
 else
-  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+  { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
 See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
 See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+   { (exit 1); exit 1; }; }; }
 fi
 
 rm -f conftest$ac_cv_exeext
-{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
 
 rm -f conftest.$ac_ext
 EXEEXT=$ac_cv_exeext
 ac_exeext=$EXEEXT
-{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
 if test "${ac_cv_objext+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -3399,40 +3760,43 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; then
   for ac_file in conftest.o conftest.obj conftest.*; do
   test -f "$ac_file" || continue;
   case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
     *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
        break;;
   esac
 done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
 See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
+$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile
 See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+   { (exit 1); exit 1; }; }; }
 fi
 
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
 OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
-{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
 if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -3458,20 +3822,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_compiler_gnu=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_compiler_gnu=no
@@ -3481,15 +3846,19 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
-GCC=`test $ac_compiler_gnu = yes && echo yes`
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
 ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
-{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
 if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
    ac_c_werror_flag=yes
@@ -3516,20 +3885,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_prog_cc_g=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        CFLAGS=""
@@ -3554,20 +3924,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   :
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_c_werror_flag=$ac_save_c_werror_flag
@@ -3593,20 +3964,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_prog_cc_g=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -3621,8 +3993,8 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
    ac_c_werror_flag=$ac_save_c_werror_flag
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
 if test "$ac_test_CFLAGS" = set; then
   CFLAGS=$ac_save_CFLAGS
 elif test $ac_cv_prog_cc_g = yes; then
@@ -3638,10 +4010,10 @@ else
     CFLAGS=
   fi
 fi
-{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
-echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
 if test "${ac_cv_prog_cc_c89+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
 ac_save_CC=$CC
@@ -3712,20 +4084,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_prog_cc_c89=$ac_arg
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -3741,15 +4114,15 @@ fi
 # AC_CACHE_VAL
 case "x$ac_cv_prog_cc_c89" in
   x)
-    { echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6; } ;;
+    { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
   xno)
-    { echo "$as_me:$LINENO: result: unsupported" >&5
-echo "${ECHO_T}unsupported" >&6; } ;;
+    { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
   *)
     CC="$CC $ac_cv_prog_cc_c89"
-    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
+    { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
 esac
 
 
@@ -3766,40 +4139,40 @@ ac_config_commands="$ac_config_commands depfiles"
 am_make=${MAKE-make}
 cat > confinc << 'END'
 am__doit:
-       @echo done
+       @echo this is the am__doit target
 .PHONY: am__doit
 END
 # If we don't find an include directive, just comment out the code.
-{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
-echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
 am__include="#"
 am__quote=
 _am_result=none
 # First try GNU make style include.
 echo "include confinc" > confmf
-# We grep out `Entering directory' and `Leaving directory'
-# messages which can occur if `w' ends up in MAKEFLAGS.
-# In particular we don't look at `^make:' because GNU make might
-# be invoked under some other name (usually "gmake"), in which
-# case it prints its new name instead of `make'.
-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
-   am__include=include
-   am__quote=
-   _am_result=GNU
-fi
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
 # Now try BSD make style include.
 if test "$am__include" = "#"; then
    echo '.include "confinc"' > confmf
-   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
-      am__include=.include
-      am__quote="\""
-      _am_result=BSD
-   fi
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
 fi
 
 
-{ echo "$as_me:$LINENO: result: $_am_result" >&5
-echo "${ECHO_T}$_am_result" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
 rm -f confinc confmf
 
 # Check whether --enable-dependency-tracking was given.
@@ -3823,10 +4196,10 @@ fi
 
 depcc="$CC"   am_compiler_list=
 
-{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
   # We make a subdir and do the tests there.  Otherwise we can end up
@@ -3851,6 +4224,11 @@ else
   if test "$am_compiler_list" = ""; then
      am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
   fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
   for depmode in $am_compiler_list; do
     # Setup a source with many dependencies, because some compilers
     # like to wrap large dependency lists on column 80 (with \), and
@@ -3868,7 +4246,17 @@ else
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
     case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
     nosideeffect)
       # after this tag, mechanisms are not by side-effect, so they'll
       # only be used when explicitly requested
@@ -3878,19 +4266,23 @@ else
        break
       fi
       ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
     none) break ;;
     esac
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.
     if depmode=$depmode \
-       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       source=sub/conftest.c object=$am__obj \
        depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
          >/dev/null 2>conftest.err &&
        grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
        grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
        ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
       # icc doesn't choke on unknown options, it will just issue warnings
       # or remarks (even with -Werror).  So we grep stderr for any message
@@ -3914,8 +4306,8 @@ else
 fi
 
 fi
-{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
-echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
 
  if
@@ -3933,10 +4325,10 @@ fi
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_RANLIB+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
@@ -3949,7 +4341,7 @@ do
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3960,11 +4352,11 @@ fi
 fi
 RANLIB=$ac_cv_prog_RANLIB
 if test -n "$RANLIB"; then
-  { echo "$as_me:$LINENO: result: $RANLIB" >&5
-echo "${ECHO_T}$RANLIB" >&6; }
+  { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -3973,10 +4365,10 @@ if test -z "$ac_cv_prog_RANLIB"; then
   ac_ct_RANLIB=$RANLIB
   # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
   ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
@@ -3989,7 +4381,7 @@ do
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -4000,11 +4392,11 @@ fi
 fi
 ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
 if test -n "$ac_ct_RANLIB"; then
-  { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-echo "${ECHO_T}$ac_ct_RANLIB" >&6; }
+  { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
   if test "x$ac_ct_RANLIB" = x; then
@@ -4012,12 +4404,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     RANLIB=$ac_ct_RANLIB
@@ -4030,10 +4418,10 @@ for ac_prog in 'bison -y' byacc
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_prog_YACC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$YACC"; then
   ac_cv_prog_YACC="$YACC" # Let the user override the test.
@@ -4046,7 +4434,7 @@ do
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_YACC="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -4057,11 +4445,11 @@ fi
 fi
 YACC=$ac_cv_prog_YACC
 if test -n "$YACC"; then
-  { echo "$as_me:$LINENO: result: $YACC" >&5
-echo "${ECHO_T}$YACC" >&6; }
+  { $as_echo "$as_me:$LINENO: result: $YACC" >&5
+$as_echo "$YACC" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -4070,16 +4458,16 @@ done
 test -n "$YACC" || YACC="yacc"
 
 if test "x$CC" != xcc; then
-  { echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5
-echo $ECHO_N "checking whether $CC and cc understand -c and -o together... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5
+$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
 else
-  { echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5
-echo $ECHO_N "checking whether cc understands -c and -o together... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5
+$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
 fi
-set dummy $CC; ac_cc=`echo $2 |
+set dummy $CC; ac_cc=`$as_echo "$2" |
                      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
 if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -4105,19 +4493,21 @@ if { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
    test -f conftest2.$ac_objext && { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); };
 then
   eval ac_cv_prog_cc_${ac_cc}_c_o=yes
@@ -4128,10 +4518,11 @@ then
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
       ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
       rm -f conftest2.*
@@ -4139,19 +4530,21 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } &&
         test -f conftest2.$ac_objext && { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); };
       then
        # cc works too.
@@ -4169,11 +4562,11 @@ rm -f core conftest*
 
 fi
 if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
-  { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 
 cat >>confdefs.h <<\_ACEOF
 #define NO_MINUS_C_MINUS_O 1
@@ -4184,8 +4577,9 @@ fi
 # FIXME: we rely on the cache variable name because
 # there is no other way.
 set dummy $CC
-ac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
-if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
+am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
    # Losing compiler, so override with the script.
    # FIXME: It is wrong to rewrite CC.
    # But if we don't then we get into trouble of one sort or another.
@@ -4195,42 +4589,36 @@ if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
 fi
 
 
-
-cat >>confdefs.h <<\_ACEOF
-#define _GNU_SOURCE 1
-_ACEOF
-
-
 # Make sure we can run config.sub.
 $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
-echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
+  { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
    { (exit 1); exit 1; }; }
 
-{ echo "$as_me:$LINENO: checking build system type" >&5
-echo $ECHO_N "checking build system type... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
 if test "${ac_cv_build+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_build_alias=$build_alias
 test "x$ac_build_alias" = x &&
   ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
 test "x$ac_build_alias" = x &&
-  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+  { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
    { (exit 1); exit 1; }; }
 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
-echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
+  { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
    { (exit 1); exit 1; }; }
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-echo "${ECHO_T}$ac_cv_build" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
-*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
-echo "$as_me: error: invalid value of canonical build" >&2;}
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+$as_echo "$as_me: error: invalid value of canonical build" >&2;}
    { (exit 1); exit 1; }; };;
 esac
 build=$ac_cv_build
@@ -4247,27 +4635,27 @@ IFS=$ac_save_IFS
 case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
 
-{ echo "$as_me:$LINENO: checking host system type" >&5
-echo $ECHO_N "checking host system type... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
 if test "${ac_cv_host+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test "x$host_alias" = x; then
   ac_cv_host=$ac_cv_build
 else
   ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
-echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+    { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
    { (exit 1); exit 1; }; }
 fi
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
-echo "$as_me: error: invalid value of canonical host" >&2;}
+*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+$as_echo "$as_me: error: invalid value of canonical host" >&2;}
    { (exit 1); exit 1; }; };;
 esac
 host=$ac_cv_host
@@ -4290,15 +4678,15 @@ ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
   if test "${ac_cv_prog_CPP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
     for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
@@ -4330,20 +4718,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   :
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   # Broken: fails on valid input.
@@ -4367,13 +4756,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -4381,7 +4771,7 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   # Broken: success on invalid input.
 continue
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   # Passes both tests.
@@ -4406,8 +4796,8 @@ fi
 else
   ac_cv_prog_CPP=$CPP
 fi
-{ echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
 ac_preproc_ok=false
 for ac_c_preproc_warn_flag in '' yes
 do
@@ -4435,20 +4825,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   :
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   # Broken: fails on valid input.
@@ -4472,13 +4863,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -4486,7 +4878,7 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   # Broken: success on invalid input.
 continue
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   # Passes both tests.
@@ -4502,11 +4894,13 @@ rm -f conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then
   :
 else
-  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+  { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
 See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
 See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+   { (exit 1); exit 1; }; }; }
 fi
 
 ac_ext=c
@@ -4516,42 +4910,37 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
-echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  # Extract the first word of "grep ggrep" to use in msg output
-if test -z "$GREP"; then
-set dummy grep ggrep; ac_prog_name=$2
+{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
 if test "${ac_cv_path_GREP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
+  if test -z "$GREP"; then
   ac_path_GREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_prog in grep ggrep; do
-  for ac_exec_ext in '' $ac_executable_extensions; do
-    ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-    { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
-    # Check for GNU ac_path_GREP and select it if it is found.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
 *GNU*)
   ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
 *)
   ac_count=0
-  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  $as_echo_n 0123456789 >"conftest.in"
   while :
   do
     cat "conftest.in" "conftest.in" >"conftest.tmp"
     mv "conftest.tmp" "conftest.in"
     cp "conftest.in" "conftest.nl"
-    echo 'GREP' >> "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
     "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
     ac_count=`expr $ac_count + 1`
@@ -4566,74 +4955,60 @@ case `"$ac_path_GREP" --version 2>&1` in
   rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
 esac
 
-
-    $ac_path_GREP_found && break 3
+      $ac_path_GREP_found && break 3
+    done
   done
 done
-
-done
 IFS=$as_save_IFS
-
-
-fi
-
-GREP="$ac_cv_path_GREP"
-if test -z "$GREP"; then
-  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+  if test -z "$ac_cv_path_GREP"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
    { (exit 1); exit 1; }; }
-fi
-
+  fi
 else
   ac_cv_path_GREP=$GREP
 fi
 
-
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
-echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
  GREP="$ac_cv_path_GREP"
 
 
-{ echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
 if test "${ac_cv_path_EGREP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
    then ac_cv_path_EGREP="$GREP -E"
    else
-     # Extract the first word of "egrep" to use in msg output
-if test -z "$EGREP"; then
-set dummy egrep; ac_prog_name=$2
-if test "${ac_cv_path_EGREP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
+     if test -z "$EGREP"; then
   ac_path_EGREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for ac_prog in egrep; do
-  for ac_exec_ext in '' $ac_executable_extensions; do
-    ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-    { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
-    # Check for GNU ac_path_EGREP and select it if it is found.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
 *GNU*)
   ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
 *)
   ac_count=0
-  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  $as_echo_n 0123456789 >"conftest.in"
   while :
   do
     cat "conftest.in" "conftest.in" >"conftest.tmp"
     mv "conftest.tmp" "conftest.in"
     cp "conftest.in" "conftest.nl"
-    echo 'EGREP' >> "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
     "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
     ac_count=`expr $ac_count + 1`
@@ -4648,40 +5023,31 @@ case `"$ac_path_EGREP" --version 2>&1` in
   rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
 esac
 
-
-    $ac_path_EGREP_found && break 3
+      $ac_path_EGREP_found && break 3
+    done
   done
 done
-
-done
 IFS=$as_save_IFS
-
-
-fi
-
-EGREP="$ac_cv_path_EGREP"
-if test -z "$EGREP"; then
-  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+  if test -z "$ac_cv_path_EGREP"; then
+    { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
    { (exit 1); exit 1; }; }
-fi
-
+  fi
 else
   ac_cv_path_EGREP=$EGREP
 fi
 
-
    fi
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
-echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
  EGREP="$ac_cv_path_EGREP"
 
 
-{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
 if test "${ac_cv_header_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -4708,20 +5074,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_header_stdc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_header_stdc=no
@@ -4813,37 +5180,40 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   :
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 ac_cv_header_stdc=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
 if test $ac_cv_header_stdc = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -4865,11 +5235,11 @@ fi
 for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
                  inttypes.h stdint.h unistd.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -4887,20 +5257,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   eval "$as_ac_Header=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_Header=no"
@@ -4908,12 +5279,15 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -4925,17 +5299,17 @@ done
 
 
   if test "${ac_cv_header_minix_config_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for minix/config.h" >&5
-echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for minix/config.h" >&5
+$as_echo_n "checking for minix/config.h... " >&6; }
 if test "${ac_cv_header_minix_config_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
-echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
+$as_echo "$ac_cv_header_minix_config_h" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking minix/config.h usability" >&5
-echo $ECHO_N "checking minix/config.h usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking minix/config.h usability" >&5
+$as_echo_n "checking minix/config.h usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -4951,32 +5325,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking minix/config.h presence" >&5
-echo $ECHO_N "checking minix/config.h presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking minix/config.h presence" >&5
+$as_echo_n "checking minix/config.h presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -4990,51 +5365,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: minix/config.h: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: minix/config.h: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: minix/config.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: minix/config.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: minix/config.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: minix/config.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: minix/config.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: minix/config.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: minix/config.h:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: minix/config.h:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: minix/config.h: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: minix/config.h:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: minix/config.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -5043,18 +5419,18 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for minix/config.h" >&5
-echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for minix/config.h" >&5
+$as_echo_n "checking for minix/config.h... " >&6; }
 if test "${ac_cv_header_minix_config_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_cv_header_minix_config_h=$ac_header_preproc
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
-echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
+$as_echo "$ac_cv_header_minix_config_h" >&6; }
 
 fi
-if test $ac_cv_header_minix_config_h = yes; then
+if test "x$ac_cv_header_minix_config_h" = x""yes; then
   MINIX=yes
 else
   MINIX=
@@ -5091,10 +5467,10 @@ _ACEOF
 
 
 
-  { echo "$as_me:$LINENO: checking whether it is safe to define __EXTENSIONS__" >&5
-echo $ECHO_N "checking whether it is safe to define __EXTENSIONS__... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
 if test "${ac_cv_safe_to_define___extensions__+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -5103,8 +5479,8 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
-#        define __EXTENSIONS__ 1
-         $ac_includes_default
+#         define __EXTENSIONS__ 1
+          $ac_includes_default
 int
 main ()
 {
@@ -5119,20 +5495,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_safe_to_define___extensions__=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_safe_to_define___extensions__=no
@@ -5140,8 +5517,8 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_safe_to_define___extensions__" >&5
-echo "${ECHO_T}$ac_cv_safe_to_define___extensions__" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
   test $ac_cv_safe_to_define___extensions__ = yes &&
     cat >>confdefs.h <<\_ACEOF
 #define __EXTENSIONS__ 1
@@ -5171,10 +5548,10 @@ _ACEOF
 
 
 
-{ echo "$as_me:$LINENO: checking for _LARGEFILE_SOURCE value needed for large files" >&5
-echo $ECHO_N "checking for _LARGEFILE_SOURCE value needed for large files... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for _LARGEFILE_SOURCE value needed for large files" >&5
+$as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; }
 if test "${ac_cv_sys_largefile_source+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   while :; do
   cat >conftest.$ac_ext <<_ACEOF
@@ -5183,11 +5560,13 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <stdio.h>
+#include <sys/types.h> /* for off_t */
+     #include <stdio.h>
 int
 main ()
 {
-return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0);
+int (*fp) (FILE *, off_t, int) = fseeko;
+     return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
   ;
   return 0;
 }
@@ -5198,26 +5577,30 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   ac_cv_sys_largefile_source=no; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
   cat >conftest.$ac_ext <<_ACEOF
@@ -5227,11 +5610,13 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #define _LARGEFILE_SOURCE 1
-#include <stdio.h>
+#include <sys/types.h> /* for off_t */
+     #include <stdio.h>
 int
 main ()
 {
-return fseeko (stdin, 0, 0) && (fseeko) (stdin, 0, 0);
+int (*fp) (FILE *, off_t, int) = fseeko;
+     return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);
   ;
   return 0;
 }
@@ -5242,34 +5627,38 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   ac_cv_sys_largefile_source=1; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
   ac_cv_sys_largefile_source=unknown
   break
 done
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_source" >&5
-echo "${ECHO_T}$ac_cv_sys_largefile_source" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_source" >&5
+$as_echo "$ac_cv_sys_largefile_source" >&6; }
 case $ac_cv_sys_largefile_source in #(
   no | unknown) ;;
   *)
@@ -5278,7 +5667,7 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 ;;
 esac
-rm -f conftest*
+rm -rf conftest*
 
 # We used to try defining _XOPEN_SOURCE=500 too, to work around a bug
 # in glibc 2.1.3, but that breaks too many other things.
@@ -5293,10 +5682,10 @@ fi
 
    case $ac_cv_prog_cc_stdc in
   no) ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;;
-  *) { echo "$as_me:$LINENO: checking for $CC option to accept ISO C99" >&5
-echo $ECHO_N "checking for $CC option to accept ISO C99... $ECHO_C" >&6; }
+  *) { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C99" >&5
+$as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
 if test "${ac_cv_prog_cc_c99+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c99=no
 ac_save_CC=$CC
@@ -5443,7 +5832,7 @@ main ()
   return 0;
 }
 _ACEOF
-for ac_arg in '' -std=gnu99 -c99 -qlanglvl=extc99
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99
 do
   CC="$ac_save_CC $ac_arg"
   rm -f conftest.$ac_objext
@@ -5452,20 +5841,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_prog_cc_c99=$ac_arg
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -5481,23 +5871,23 @@ fi
 # AC_CACHE_VAL
 case "x$ac_cv_prog_cc_c99" in
   x)
-    { echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6; } ;;
+    { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
   xno)
-    { echo "$as_me:$LINENO: result: unsupported" >&5
-echo "${ECHO_T}unsupported" >&6; } ;;
+    { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
   *)
     CC="$CC $ac_cv_prog_cc_c99"
-    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c99" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_c99" >&6; } ;;
+    { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c99" >&5
+$as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
 esac
 if test "x$ac_cv_prog_cc_c99" != xno; then
   ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
 else
-  { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
-echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
 if test "${ac_cv_prog_cc_c89+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
 ac_save_CC=$CC
@@ -5568,20 +5958,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_prog_cc_c89=$ac_arg
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -5597,15 +5988,15 @@ fi
 # AC_CACHE_VAL
 case "x$ac_cv_prog_cc_c89" in
   x)
-    { echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6; } ;;
+    { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
   xno)
-    { echo "$as_me:$LINENO: result: unsupported" >&5
-echo "${ECHO_T}unsupported" >&6; } ;;
+    { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
   *)
     CC="$CC $ac_cv_prog_cc_c89"
-    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
+    { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
 esac
 if test "x$ac_cv_prog_cc_c89" != xno; then
   ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
@@ -5618,19 +6009,19 @@ fi
 
  ;;
 esac
-  { echo "$as_me:$LINENO: checking for $CC option to accept ISO Standard C" >&5
-echo $ECHO_N "checking for $CC option to accept ISO Standard C... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO Standard C" >&5
+$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; }
   if test "${ac_cv_prog_cc_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
 
   case $ac_cv_prog_cc_stdc in
-  no) { echo "$as_me:$LINENO: result: unsupported" >&5
-echo "${ECHO_T}unsupported" >&6; } ;;
-  '') { echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6; } ;;
-  *) { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6; } ;;
+  no) { $as_echo "$as_me:$LINENO: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  '') { $as_echo "$as_me:$LINENO: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  *) { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;;
 esac
 
 
@@ -5649,10 +6040,10 @@ fi
 
 if test "$enable_largefile" != no; then
 
-  { echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5
-echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5
+$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
 if test "${ac_cv_sys_largefile_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_cv_sys_largefile_CC=no
      if test "$GCC" != yes; then
@@ -5689,20 +6080,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -5716,20 +6108,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_sys_largefile_CC=' -n32'; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -5742,16 +6135,16 @@ rm -f core conftest.err conftest.$ac_objext
        rm -f conftest.$ac_ext
     fi
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5
-echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5
+$as_echo "$ac_cv_sys_largefile_CC" >&6; }
   if test "$ac_cv_sys_largefile_CC" != no; then
     CC=$CC$ac_cv_sys_largefile_CC
   fi
 
-  { echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5
-echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
 if test "${ac_cv_sys_file_offset_bits+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   while :; do
   cat >conftest.$ac_ext <<_ACEOF
@@ -5783,20 +6176,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_sys_file_offset_bits=no; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -5833,20 +6227,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_sys_file_offset_bits=64; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -5857,8 +6252,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   break
 done
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5
-echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5
+$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
 case $ac_cv_sys_file_offset_bits in #(
   no | unknown) ;;
   *)
@@ -5867,12 +6262,12 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 ;;
 esac
-rm -f conftest*
+rm -rf conftest*
   if test $ac_cv_sys_file_offset_bits = unknown; then
-    { echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5
-echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5
+$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
 if test "${ac_cv_sys_large_files+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   while :; do
   cat >conftest.$ac_ext <<_ACEOF
@@ -5904,20 +6299,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_sys_large_files=no; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -5954,20 +6350,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_sys_large_files=1; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -5978,8 +6375,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   break
 done
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5
-echo "${ECHO_T}$ac_cv_sys_large_files" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5
+$as_echo "$ac_cv_sys_large_files" >&6; }
 case $ac_cv_sys_large_files in #(
   no | unknown) ;;
   *)
@@ -5988,18 +6385,16 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 ;;
 esac
-rm -f conftest*
+rm -rf conftest*
   fi
 fi
 
-
-        { echo "$as_me:$LINENO: checking for strerror in -lcposix" >&5
-echo $ECHO_N "checking for strerror in -lcposix... $ECHO_C" >&6; }
-if test "${ac_cv_lib_cposix_strerror+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking for library containing strerror" >&5
+$as_echo_n "checking for library containing strerror... " >&6; }
+if test "${ac_cv_search_strerror+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcposix  $LIBS"
+  ac_func_search_save_LIBS=$LIBS
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -6022,48 +6417,69 @@ return strerror ();
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
+for ac_lib in '' cposix; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  rm -f conftest.$ac_objext conftest$ac_exeext
 if { (ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_cposix_strerror=yes
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_search_strerror=$ac_res
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_lib_cposix_strerror=no
+
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+      conftest$ac_exeext
+  if test "${ac_cv_search_strerror+set}" = set; then
+  break
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_cposix_strerror" >&5
-echo "${ECHO_T}$ac_cv_lib_cposix_strerror" >&6; }
-if test $ac_cv_lib_cposix_strerror = yes; then
-  LIBS="$LIBS -lcposix"
+done
+if test "${ac_cv_search_strerror+set}" = set; then
+  :
+else
+  ac_cv_search_strerror=no
 fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
+$as_echo "$ac_cv_search_strerror" >&6; }
+ac_res=$ac_cv_search_strerror
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
+fi
 
-
-{ echo "$as_me:$LINENO: checking for inline" >&5
-echo $ECHO_N "checking for inline... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
 if test "${ac_cv_c_inline+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
@@ -6086,20 +6502,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_c_inline=$ac_kw
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -6110,8 +6527,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 done
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
-echo "${ECHO_T}$ac_cv_c_inline" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
+$as_echo "$ac_cv_c_inline" >&6; }
 
 
 case $ac_cv_c_inline in
@@ -6136,20 +6553,21 @@ esac
 
 for ac_header in $ac_header_list
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -6165,32 +6583,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -6204,51 +6623,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -6257,21 +6677,24 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -6362,11 +6785,11 @@ done
 
 for ac_header in sys/buf.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -6386,20 +6809,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   eval "$as_ac_Header=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_Header=no"
@@ -6407,12 +6831,15 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -6420,10 +6847,10 @@ fi
 done
 
 
-{ echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5
-echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5
+$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; }
 if test "${ac_cv_header_sys_wait_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -6456,20 +6883,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_header_sys_wait_h=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_header_sys_wait_h=no
@@ -6477,8 +6905,8 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5
+$as_echo "$ac_cv_header_sys_wait_h" >&6; }
 if test $ac_cv_header_sys_wait_h = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -6487,210 +6915,6 @@ _ACEOF
 
 fi
 
-{ echo "$as_me:$LINENO: checking for stdbool.h that conforms to C99" >&5
-echo $ECHO_N "checking for stdbool.h that conforms to C99... $ECHO_C" >&6; }
-if test "${ac_cv_header_stdbool_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-         #include <stdbool.h>
-         #ifndef bool
-          "error: bool is not defined"
-         #endif
-         #ifndef false
-          "error: false is not defined"
-         #endif
-         #if false
-          "error: false is not 0"
-         #endif
-         #ifndef true
-          "error: true is not defined"
-         #endif
-         #if true != 1
-          "error: true is not 1"
-         #endif
-         #ifndef __bool_true_false_are_defined
-          "error: __bool_true_false_are_defined is not defined"
-         #endif
-
-         struct s { _Bool s: 1; _Bool t; } s;
-
-         char a[true == 1 ? 1 : -1];
-         char b[false == 0 ? 1 : -1];
-         char c[__bool_true_false_are_defined == 1 ? 1 : -1];
-         char d[(bool) 0.5 == true ? 1 : -1];
-         bool e = &s;
-         char f[(_Bool) 0.0 == false ? 1 : -1];
-         char g[true];
-         char h[sizeof (_Bool)];
-         char i[sizeof s.t];
-         enum { j = false, k = true, l = false * true, m = true * 256 };
-         _Bool n[m];
-         char o[sizeof n == m * sizeof n[0] ? 1 : -1];
-         char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
-         #if defined __xlc__ || defined __GNUC__
-          /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
-             reported by James Lemley on 2005-10-05; see
-             http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
-             This test is not quite right, since xlc is allowed to
-             reject this program, as the initializer for xlcbug is
-             not one of the forms that C requires support for.
-             However, doing the test right would require a run-time
-             test, and that would make cross-compilation harder.
-             Let us hope that IBM fixes the xlc bug, and also adds
-             support for this kind of constant expression.  In the
-             meantime, this test will reject xlc, which is OK, since
-             our stdbool.h substitute should suffice.  We also test
-             this with GCC, where it should work, to detect more
-             quickly whether someone messes up the test in the
-             future.  */
-          char digs[] = "0123456789";
-          int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
-         #endif
-         /* Catch a bug in an HP-UX C compiler.  See
-            http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
-            http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
-          */
-         _Bool q = true;
-         _Bool *pq = &q;
-
-int
-main ()
-{
-
-         *pq |= q;
-         *pq |= ! q;
-         /* Refer to every declared value, to avoid compiler optimizations.  */
-         return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
-                 + !m + !n + !o + !p + !q + !pq);
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_header_stdbool_h=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_cv_header_stdbool_h=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdbool_h" >&5
-echo "${ECHO_T}$ac_cv_header_stdbool_h" >&6; }
-   { echo "$as_me:$LINENO: checking for _Bool" >&5
-echo $ECHO_N "checking for _Bool... $ECHO_C" >&6; }
-if test "${ac_cv_type__Bool+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-typedef _Bool ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_type__Bool=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_cv_type__Bool=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type__Bool" >&5
-echo "${ECHO_T}$ac_cv_type__Bool" >&6; }
-if test $ac_cv_type__Bool = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE__BOOL 1
-_ACEOF
-
-
-fi
-
-   if test $ac_cv_header_stdbool_h = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_STDBOOL_H 1
-_ACEOF
-
-   fi
-
-
-
-  # Define two additional variables used in the Makefile substitution.
-
-  if test "$ac_cv_header_stdbool_h" = yes; then
-    STDBOOL_H=''
-  else
-    STDBOOL_H='stdbool.h'
-  fi
-
-
-  if test "$ac_cv_type__Bool" = yes; then
-    HAVE__BOOL=1
-  else
-    HAVE__BOOL=0
-  fi
-
-
 
 
 
@@ -6699,11 +6923,11 @@ _ACEOF
 
 ac_header_dirent=no
 for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
-  as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5
-echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6; }
+  as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5
+$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -6729,20 +6953,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   eval "$as_ac_Header=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_Header=no"
@@ -6750,12 +6975,15 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
 _ACEOF
 
 ac_header_dirent=$ac_hdr; break
@@ -6764,10 +6992,10 @@ fi
 done
 # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
 if test $ac_header_dirent = dirent.h; then
-  { echo "$as_me:$LINENO: checking for library containing opendir" >&5
-echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for library containing opendir" >&5
+$as_echo_n "checking for library containing opendir... " >&6; }
 if test "${ac_cv_search_opendir+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
 cat >conftest.$ac_ext <<_ACEOF
@@ -6805,26 +7033,30 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   ac_cv_search_opendir=$ac_res
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext
   if test "${ac_cv_search_opendir+set}" = set; then
@@ -6839,8 +7071,8 @@ fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
-echo "${ECHO_T}$ac_cv_search_opendir" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+$as_echo "$ac_cv_search_opendir" >&6; }
 ac_res=$ac_cv_search_opendir
 if test "$ac_res" != no; then
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
@@ -6848,10 +7080,10 @@ if test "$ac_res" != no; then
 fi
 
 else
-  { echo "$as_me:$LINENO: checking for library containing opendir" >&5
-echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for library containing opendir" >&5
+$as_echo_n "checking for library containing opendir... " >&6; }
 if test "${ac_cv_search_opendir+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
 cat >conftest.$ac_ext <<_ACEOF
@@ -6889,26 +7121,30 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   ac_cv_search_opendir=$ac_res
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext
   if test "${ac_cv_search_opendir+set}" = set; then
@@ -6923,8 +7159,8 @@ fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
-echo "${ECHO_T}$ac_cv_search_opendir" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5
+$as_echo "$ac_cv_search_opendir" >&6; }
 ac_res=$ac_cv_search_opendir
 if test "$ac_res" != no; then
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
@@ -6933,10 +7169,10 @@ fi
 
 fi
 
-{ echo "$as_me:$LINENO: checking whether sys/types.h defines makedev" >&5
-echo $ECHO_N "checking whether sys/types.h defines makedev... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether sys/types.h defines makedev" >&5
+$as_echo_n "checking whether sys/types.h defines makedev... " >&6; }
 if test "${ac_cv_header_sys_types_h_makedev+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -6959,46 +7195,50 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   ac_cv_header_sys_types_h_makedev=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_header_sys_types_h_makedev=no
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_types_h_makedev" >&5
-echo "${ECHO_T}$ac_cv_header_sys_types_h_makedev" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_types_h_makedev" >&5
+$as_echo "$ac_cv_header_sys_types_h_makedev" >&6; }
 
 if test $ac_cv_header_sys_types_h_makedev = no; then
 if test "${ac_cv_header_sys_mkdev_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for sys/mkdev.h" >&5
-echo $ECHO_N "checking for sys/mkdev.h... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for sys/mkdev.h" >&5
+$as_echo_n "checking for sys/mkdev.h... " >&6; }
 if test "${ac_cv_header_sys_mkdev_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_mkdev_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_mkdev_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_mkdev_h" >&5
+$as_echo "$ac_cv_header_sys_mkdev_h" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking sys/mkdev.h usability" >&5
-echo $ECHO_N "checking sys/mkdev.h usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking sys/mkdev.h usability" >&5
+$as_echo_n "checking sys/mkdev.h usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -7014,32 +7254,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking sys/mkdev.h presence" >&5
-echo $ECHO_N "checking sys/mkdev.h presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking sys/mkdev.h presence" >&5
+$as_echo_n "checking sys/mkdev.h presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -7053,51 +7294,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: sys/mkdev.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: sys/mkdev.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/mkdev.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: sys/mkdev.h: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mkdev.h: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: sys/mkdev.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mkdev.h: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: sys/mkdev.h: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: sys/mkdev.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: sys/mkdev.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/mkdev.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: sys/mkdev.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/mkdev.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: sys/mkdev.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/mkdev.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: sys/mkdev.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/mkdev.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: sys/mkdev.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/mkdev.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: sys/mkdev.h: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mkdev.h: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: sys/mkdev.h: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mkdev.h:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: sys/mkdev.h:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mkdev.h: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: sys/mkdev.h: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mkdev.h:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: sys/mkdev.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mkdev.h: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: sys/mkdev.h: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/mkdev.h: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: sys/mkdev.h: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -7106,18 +7348,18 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for sys/mkdev.h" >&5
-echo $ECHO_N "checking for sys/mkdev.h... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for sys/mkdev.h" >&5
+$as_echo_n "checking for sys/mkdev.h... " >&6; }
 if test "${ac_cv_header_sys_mkdev_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_cv_header_sys_mkdev_h=$ac_header_preproc
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_mkdev_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_mkdev_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_mkdev_h" >&5
+$as_echo "$ac_cv_header_sys_mkdev_h" >&6; }
 
 fi
-if test $ac_cv_header_sys_mkdev_h = yes; then
+if test "x$ac_cv_header_sys_mkdev_h" = x""yes; then
 
 cat >>confdefs.h <<\_ACEOF
 #define MAJOR_IN_MKDEV 1
@@ -7129,17 +7371,17 @@ fi
 
   if test $ac_cv_header_sys_mkdev_h = no; then
     if test "${ac_cv_header_sys_sysmacros_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for sys/sysmacros.h" >&5
-echo $ECHO_N "checking for sys/sysmacros.h... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for sys/sysmacros.h" >&5
+$as_echo_n "checking for sys/sysmacros.h... " >&6; }
 if test "${ac_cv_header_sys_sysmacros_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_sysmacros_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_sysmacros_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_sysmacros_h" >&5
+$as_echo "$ac_cv_header_sys_sysmacros_h" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking sys/sysmacros.h usability" >&5
-echo $ECHO_N "checking sys/sysmacros.h usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking sys/sysmacros.h usability" >&5
+$as_echo_n "checking sys/sysmacros.h usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -7155,32 +7397,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking sys/sysmacros.h presence" >&5
-echo $ECHO_N "checking sys/sysmacros.h presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking sys/sysmacros.h presence" >&5
+$as_echo_n "checking sys/sysmacros.h presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -7194,51 +7437,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: sys/sysmacros.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: sys/sysmacros.h: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: sys/sysmacros.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: sys/sysmacros.h: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: sys/sysmacros.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/sysmacros.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: sys/sysmacros.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: sys/sysmacros.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/sysmacros.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: sys/sysmacros.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: sys/sysmacros.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: sys/sysmacros.h: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: sys/sysmacros.h: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/sysmacros.h:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: sys/sysmacros.h:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: sys/sysmacros.h: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/sysmacros.h:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: sys/sysmacros.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: sys/sysmacros.h: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: sys/sysmacros.h: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: sys/sysmacros.h: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -7247,18 +7491,18 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for sys/sysmacros.h" >&5
-echo $ECHO_N "checking for sys/sysmacros.h... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for sys/sysmacros.h" >&5
+$as_echo_n "checking for sys/sysmacros.h... " >&6; }
 if test "${ac_cv_header_sys_sysmacros_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_cv_header_sys_sysmacros_h=$ac_header_preproc
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_sysmacros_h" >&5
-echo "${ECHO_T}$ac_cv_header_sys_sysmacros_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_sys_sysmacros_h" >&5
+$as_echo "$ac_cv_header_sys_sysmacros_h" >&6; }
 
 fi
-if test $ac_cv_header_sys_sysmacros_h = yes; then
+if test "x$ac_cv_header_sys_sysmacros_h" = x""yes; then
 
 cat >>confdefs.h <<\_ACEOF
 #define MAJOR_IN_SYSMACROS 1
@@ -7270,10 +7514,10 @@ fi
   fi
 fi
 
-{ echo "$as_me:$LINENO: checking whether stat file-mode macros are broken" >&5
-echo $ECHO_N "checking whether stat file-mode macros are broken... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether stat file-mode macros are broken" >&5
+$as_echo_n "checking whether stat file-mode macros are broken... " >&6; }
 if test "${ac_cv_header_stat_broken+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -7307,20 +7551,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_header_stat_broken=no
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_header_stat_broken=yes
@@ -7328,8 +7573,8 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stat_broken" >&5
-echo "${ECHO_T}$ac_cv_header_stat_broken" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stat_broken" >&5
+$as_echo "$ac_cv_header_stat_broken" >&6; }
 if test $ac_cv_header_stat_broken = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -7338,10 +7583,10 @@ _ACEOF
 
 fi
 
-{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
 if test "${ac_cv_header_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -7368,20 +7613,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_header_stdc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_header_stdc=no
@@ -7473,37 +7719,40 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   :
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 ac_cv_header_stdc=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
 if test $ac_cv_header_stdc = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -7513,10 +7762,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking for st_fstype string in struct stat" >&5
-echo $ECHO_N "checking for st_fstype string in struct stat... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for st_fstype string in struct stat" >&5
+$as_echo_n "checking for st_fstype string in struct stat... " >&6; }
 if test "${diff_cv_st_fstype_string+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -7540,20 +7789,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   diff_cv_st_fstype_string=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        diff_cv_st_fstype_string=no
@@ -7562,8 +7812,8 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 
-{ echo "$as_me:$LINENO: result: $diff_cv_st_fstype_string" >&5
-echo "${ECHO_T}$diff_cv_st_fstype_string" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $diff_cv_st_fstype_string" >&5
+$as_echo "$diff_cv_st_fstype_string" >&6; }
 if test $diff_cv_st_fstype_string = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -7572,10 +7822,10 @@ _ACEOF
 
 fi
 
-{ echo "$as_me:$LINENO: checking return type of signal handlers" >&5
-echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking return type of signal handlers" >&5
+$as_echo_n "checking return type of signal handlers... " >&6; }
 if test "${ac_cv_type_signal+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -7600,20 +7850,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_type_signal=int
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_type_signal=void
@@ -7621,34 +7872,66 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
-echo "${ECHO_T}$ac_cv_type_signal" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
+$as_echo "$ac_cv_type_signal" >&6; }
 
 cat >>confdefs.h <<_ACEOF
 #define RETSIGTYPE $ac_cv_type_signal
 _ACEOF
 
 
-{ echo "$as_me:$LINENO: checking for mode_t" >&5
-echo $ECHO_N "checking for mode_t... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for mode_t" >&5
+$as_echo_n "checking for mode_t... " >&6; }
 if test "${ac_cv_type_mode_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
+  ac_cv_type_mode_t=no
+cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-typedef mode_t ac__type_new_;
 int
 main ()
 {
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
+if (sizeof (mode_t))
+       return 0;
+  ;
   return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof ((mode_t)))
+         return 0;
   ;
   return 0;
 }
@@ -7659,30 +7942,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  ac_cv_type_mode_t=yes
+  :
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_type_mode_t=no
+       ac_cv_type_mode_t=yes
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_mode_t" >&5
-echo "${ECHO_T}$ac_cv_type_mode_t" >&6; }
-if test $ac_cv_type_mode_t = yes; then
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_mode_t" >&5
+$as_echo "$ac_cv_type_mode_t" >&6; }
+if test "x$ac_cv_type_mode_t" = x""yes; then
   :
 else
 
@@ -7692,26 +7984,58 @@ _ACEOF
 
 fi
 
-{ echo "$as_me:$LINENO: checking for pid_t" >&5
-echo $ECHO_N "checking for pid_t... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for pid_t" >&5
+$as_echo_n "checking for pid_t... " >&6; }
 if test "${ac_cv_type_pid_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
+  ac_cv_type_pid_t=no
+cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-typedef pid_t ac__type_new_;
 int
 main ()
 {
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
+if (sizeof (pid_t))
+       return 0;
+  ;
   return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof ((pid_t)))
+         return 0;
   ;
   return 0;
 }
@@ -7722,30 +8046,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  ac_cv_type_pid_t=yes
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_pid_t=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_type_pid_t=no
+
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5
-echo "${ECHO_T}$ac_cv_type_pid_t" >&6; }
-if test $ac_cv_type_pid_t = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5
+$as_echo "$ac_cv_type_pid_t" >&6; }
+if test "x$ac_cv_type_pid_t" = x""yes; then
   :
 else
 
@@ -7755,26 +8088,58 @@ _ACEOF
 
 fi
 
-{ echo "$as_me:$LINENO: checking for off_t" >&5
-echo $ECHO_N "checking for off_t... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for off_t" >&5
+$as_echo_n "checking for off_t... " >&6; }
 if test "${ac_cv_type_off_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
+  ac_cv_type_off_t=no
+cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-typedef off_t ac__type_new_;
 int
 main ()
 {
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
+if (sizeof (off_t))
+       return 0;
+  ;
   return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof ((off_t)))
+         return 0;
   ;
   return 0;
 }
@@ -7785,30 +8150,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  ac_cv_type_off_t=yes
+  :
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_type_off_t=no
+       ac_cv_type_off_t=yes
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
-echo "${ECHO_T}$ac_cv_type_off_t" >&6; }
-if test $ac_cv_type_off_t = yes; then
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
+$as_echo "$ac_cv_type_off_t" >&6; }
+if test "x$ac_cv_type_off_t" = x""yes; then
   :
 else
 
@@ -7818,26 +8192,58 @@ _ACEOF
 
 fi
 
-{ echo "$as_me:$LINENO: checking for size_t" >&5
-echo $ECHO_N "checking for size_t... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for size_t" >&5
+$as_echo_n "checking for size_t... " >&6; }
 if test "${ac_cv_type_size_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
+  ac_cv_type_size_t=no
+cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-typedef size_t ac__type_new_;
 int
 main ()
 {
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
+if (sizeof (size_t))
+       return 0;
+  ;
   return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof ((size_t)))
+         return 0;
   ;
   return 0;
 }
@@ -7848,30 +8254,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  ac_cv_type_size_t=yes
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type_size_t=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_type_size_t=no
+
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
-echo "${ECHO_T}$ac_cv_type_size_t" >&6; }
-if test $ac_cv_type_size_t = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
+$as_echo "$ac_cv_type_size_t" >&6; }
+if test "x$ac_cv_type_size_t" = x""yes; then
   :
 else
 
@@ -7881,10 +8296,10 @@ _ACEOF
 
 fi
 
-{ echo "$as_me:$LINENO: checking for uid_t in sys/types.h" >&5
-echo $ECHO_N "checking for uid_t in sys/types.h... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for uid_t in sys/types.h" >&5
+$as_echo_n "checking for uid_t in sys/types.h... " >&6; }
 if test "${ac_cv_type_uid_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -7904,8 +8319,8 @@ fi
 rm -f conftest*
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_uid_t" >&5
-echo "${ECHO_T}$ac_cv_type_uid_t" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_uid_t" >&5
+$as_echo "$ac_cv_type_uid_t" >&6; }
 if test $ac_cv_type_uid_t = no; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -7919,26 +8334,58 @@ _ACEOF
 
 fi
 
-{ echo "$as_me:$LINENO: checking for major_t" >&5
-echo $ECHO_N "checking for major_t... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for major_t" >&5
+$as_echo_n "checking for major_t... " >&6; }
 if test "${ac_cv_type_major_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
+  ac_cv_type_major_t=no
+cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-typedef major_t ac__type_new_;
 int
 main ()
 {
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
+if (sizeof (major_t))
+       return 0;
+  ;
   return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof ((major_t)))
+         return 0;
   ;
   return 0;
 }
@@ -7949,30 +8396,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  ac_cv_type_major_t=yes
+  :
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_type_major_t=no
+       ac_cv_type_major_t=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_major_t" >&5
-echo "${ECHO_T}$ac_cv_type_major_t" >&6; }
-if test $ac_cv_type_major_t = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_major_t" >&5
+$as_echo "$ac_cv_type_major_t" >&6; }
+if test "x$ac_cv_type_major_t" = x""yes; then
   :
 else
 
@@ -7982,26 +8438,58 @@ _ACEOF
 
 fi
 
-{ echo "$as_me:$LINENO: checking for minor_t" >&5
-echo $ECHO_N "checking for minor_t... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for minor_t" >&5
+$as_echo_n "checking for minor_t... " >&6; }
 if test "${ac_cv_type_minor_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
+  ac_cv_type_minor_t=no
+cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-typedef minor_t ac__type_new_;
 int
 main ()
 {
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
+if (sizeof (minor_t))
+       return 0;
+  ;
   return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof ((minor_t)))
+         return 0;
   ;
   return 0;
 }
@@ -8012,30 +8500,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  ac_cv_type_minor_t=yes
+  :
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_type_minor_t=no
+       ac_cv_type_minor_t=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_minor_t" >&5
-echo "${ECHO_T}$ac_cv_type_minor_t" >&6; }
-if test $ac_cv_type_minor_t = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_minor_t" >&5
+$as_echo "$ac_cv_type_minor_t" >&6; }
+if test "x$ac_cv_type_minor_t" = x""yes; then
   :
 else
 
@@ -8045,26 +8542,58 @@ _ACEOF
 
 fi
 
-{ echo "$as_me:$LINENO: checking for dev_t" >&5
-echo $ECHO_N "checking for dev_t... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for dev_t" >&5
+$as_echo_n "checking for dev_t... " >&6; }
 if test "${ac_cv_type_dev_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
+  ac_cv_type_dev_t=no
+cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-typedef dev_t ac__type_new_;
 int
 main ()
 {
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
+if (sizeof (dev_t))
+       return 0;
+  ;
   return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof ((dev_t)))
+         return 0;
   ;
   return 0;
 }
@@ -8075,30 +8604,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  ac_cv_type_dev_t=yes
+  :
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_type_dev_t=no
+       ac_cv_type_dev_t=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_dev_t" >&5
-echo "${ECHO_T}$ac_cv_type_dev_t" >&6; }
-if test $ac_cv_type_dev_t = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_dev_t" >&5
+$as_echo "$ac_cv_type_dev_t" >&6; }
+if test "x$ac_cv_type_dev_t" = x""yes; then
   :
 else
 
@@ -8108,26 +8646,58 @@ _ACEOF
 
 fi
 
-{ echo "$as_me:$LINENO: checking for ino_t" >&5
-echo $ECHO_N "checking for ino_t... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for ino_t" >&5
+$as_echo_n "checking for ino_t... " >&6; }
 if test "${ac_cv_type_ino_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
+  ac_cv_type_ino_t=no
+cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-typedef ino_t ac__type_new_;
 int
 main ()
 {
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
+if (sizeof (ino_t))
+       return 0;
+  ;
   return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof ((ino_t)))
+         return 0;
   ;
   return 0;
 }
@@ -8138,30 +8708,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  ac_cv_type_ino_t=yes
+  :
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_type_ino_t=no
+       ac_cv_type_ino_t=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_ino_t" >&5
-echo "${ECHO_T}$ac_cv_type_ino_t" >&6; }
-if test $ac_cv_type_ino_t = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_ino_t" >&5
+$as_echo "$ac_cv_type_ino_t" >&6; }
+if test "x$ac_cv_type_ino_t" = x""yes; then
   :
 else
 
@@ -8173,10 +8752,10 @@ fi
 
 
 
-  { echo "$as_me:$LINENO: checking for ssize_t" >&5
-echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for ssize_t" >&5
+$as_echo_n "checking for ssize_t... " >&6; }
 if test "${gt_cv_ssize_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -8200,20 +8779,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gt_cv_ssize_t=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gt_cv_ssize_t=no
@@ -8221,8 +8801,8 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_ssize_t" >&5
-echo "${ECHO_T}$gt_cv_ssize_t" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_ssize_t" >&5
+$as_echo "$gt_cv_ssize_t" >&6; }
   if test $gt_cv_ssize_t = no; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -8242,10 +8822,10 @@ _ACEOF
 
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
-{ echo "$as_me:$LINENO: checking for working alloca.h" >&5
-echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for working alloca.h" >&5
+$as_echo_n "checking for working alloca.h... " >&6; }
 if test "${ac_cv_working_alloca_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -8269,31 +8849,35 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   ac_cv_working_alloca_h=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_working_alloca_h=no
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5
-echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5
+$as_echo "$ac_cv_working_alloca_h" >&6; }
 if test $ac_cv_working_alloca_h = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -8302,10 +8886,10 @@ _ACEOF
 
 fi
 
-{ echo "$as_me:$LINENO: checking for alloca" >&5
-echo $ECHO_N "checking for alloca... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for alloca" >&5
+$as_echo_n "checking for alloca... " >&6; }
 if test "${ac_cv_func_alloca_works+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -8349,31 +8933,35 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   ac_cv_func_alloca_works=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_func_alloca_works=no
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5
-echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5
+$as_echo "$ac_cv_func_alloca_works" >&6; }
 
 if test $ac_cv_func_alloca_works = yes; then
 
@@ -8398,10 +8986,10 @@ cat >>confdefs.h <<\_ACEOF
 _ACEOF
 
 
-{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5
-echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5
+$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
 if test "${ac_cv_os_cray+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -8425,15 +9013,15 @@ fi
 rm -f conftest*
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5
-echo "${ECHO_T}$ac_cv_os_cray" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5
+$as_echo "$ac_cv_os_cray" >&6; }
 if test $ac_cv_os_cray = yes; then
   for ac_func in _getb67 GETB67 getb67; do
-    as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+    as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -8486,33 +9074,40 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define CRAY_STACKSEG_END $ac_func
@@ -8524,10 +9119,10 @@ fi
   done
 fi
 
-{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5
-echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking stack direction for C alloca" >&5
+$as_echo_n "checking stack direction for C alloca... " >&6; }
 if test "${ac_cv_c_stack_direction+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then
   ac_cv_c_stack_direction=0
@@ -8565,36 +9160,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_c_stack_direction=1
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 ac_cv_c_stack_direction=-1
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5
-echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5
+$as_echo "$ac_cv_c_stack_direction" >&6; }
 
 cat >>confdefs.h <<_ACEOF
 #define STACK_DIRECTION $ac_cv_c_stack_direction
@@ -8603,10 +9201,10 @@ _ACEOF
 
 fi
 
-{ echo "$as_me:$LINENO: checking for C/C++ restrict keyword" >&5
-echo $ECHO_N "checking for C/C++ restrict keyword... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for C/C++ restrict keyword" >&5
+$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
 if test "${ac_cv_c_restrict+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_cv_c_restrict=no
    # The order here caters to the fact that C++ does not require restrict.
@@ -8618,16 +9216,16 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 typedef int * int_ptr;
-       int foo (int_ptr $ac_kw ip) {
-       return ip[0];
+        int foo (int_ptr $ac_kw ip) {
+        return ip[0];
        }
 int
 main ()
 {
 int s[1];
-       int * $ac_kw t = s;
-       t[0] = 0;
-       return foo(t)
+        int * $ac_kw t = s;
+        t[0] = 0;
+        return foo(t)
   ;
   return 0;
 }
@@ -8638,20 +9236,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_c_restrict=$ac_kw
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -8662,14 +9261,14 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
    done
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_restrict" >&5
-echo "${ECHO_T}$ac_cv_c_restrict" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_restrict" >&5
+$as_echo "$ac_cv_c_restrict" >&6; }
 
 
  case $ac_cv_c_restrict in
    restrict) ;;
    no) cat >>confdefs.h <<\_ACEOF
-#define restrict
+#define restrict /**/
 _ACEOF
  ;;
    *)  cat >>confdefs.h <<_ACEOF
@@ -8678,10 +9277,10 @@ _ACEOF
  ;;
  esac
 
-{ echo "$as_me:$LINENO: checking whether getenv is declared" >&5
-echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether getenv is declared" >&5
+$as_echo_n "checking whether getenv is declared... " >&6; }
 if test "${ac_cv_have_decl_getenv+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -8707,20 +9306,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_getenv=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_getenv=no
@@ -8728,9 +9328,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5
-echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6; }
-if test $ac_cv_have_decl_getenv = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5
+$as_echo "$ac_cv_have_decl_getenv" >&6; }
+if test "x$ac_cv_have_decl_getenv" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_GETENV 1
@@ -8746,10 +9346,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether clearerr_unlocked is declared" >&5
-echo $ECHO_N "checking whether clearerr_unlocked is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether clearerr_unlocked is declared" >&5
+$as_echo_n "checking whether clearerr_unlocked is declared... " >&6; }
 if test "${ac_cv_have_decl_clearerr_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -8775,20 +9375,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_clearerr_unlocked=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_clearerr_unlocked=no
@@ -8796,9 +9397,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_clearerr_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_clearerr_unlocked" >&6; }
-if test $ac_cv_have_decl_clearerr_unlocked = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_clearerr_unlocked" >&5
+$as_echo "$ac_cv_have_decl_clearerr_unlocked" >&6; }
+if test "x$ac_cv_have_decl_clearerr_unlocked" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_CLEARERR_UNLOCKED 1
@@ -8814,10 +9415,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether feof_unlocked is declared" >&5
-echo $ECHO_N "checking whether feof_unlocked is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether feof_unlocked is declared" >&5
+$as_echo_n "checking whether feof_unlocked is declared... " >&6; }
 if test "${ac_cv_have_decl_feof_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -8843,20 +9444,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_feof_unlocked=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_feof_unlocked=no
@@ -8864,9 +9466,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_feof_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_feof_unlocked" >&6; }
-if test $ac_cv_have_decl_feof_unlocked = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_feof_unlocked" >&5
+$as_echo "$ac_cv_have_decl_feof_unlocked" >&6; }
+if test "x$ac_cv_have_decl_feof_unlocked" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_FEOF_UNLOCKED 1
@@ -8882,10 +9484,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether ferror_unlocked is declared" >&5
-echo $ECHO_N "checking whether ferror_unlocked is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether ferror_unlocked is declared" >&5
+$as_echo_n "checking whether ferror_unlocked is declared... " >&6; }
 if test "${ac_cv_have_decl_ferror_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -8911,20 +9513,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_ferror_unlocked=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_ferror_unlocked=no
@@ -8932,9 +9535,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_ferror_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_ferror_unlocked" >&6; }
-if test $ac_cv_have_decl_ferror_unlocked = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_ferror_unlocked" >&5
+$as_echo "$ac_cv_have_decl_ferror_unlocked" >&6; }
+if test "x$ac_cv_have_decl_ferror_unlocked" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_FERROR_UNLOCKED 1
@@ -8950,10 +9553,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether fflush_unlocked is declared" >&5
-echo $ECHO_N "checking whether fflush_unlocked is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether fflush_unlocked is declared" >&5
+$as_echo_n "checking whether fflush_unlocked is declared... " >&6; }
 if test "${ac_cv_have_decl_fflush_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -8979,20 +9582,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_fflush_unlocked=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_fflush_unlocked=no
@@ -9000,9 +9604,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fflush_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_fflush_unlocked" >&6; }
-if test $ac_cv_have_decl_fflush_unlocked = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_fflush_unlocked" >&5
+$as_echo "$ac_cv_have_decl_fflush_unlocked" >&6; }
+if test "x$ac_cv_have_decl_fflush_unlocked" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_FFLUSH_UNLOCKED 1
@@ -9018,10 +9622,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether fgets_unlocked is declared" >&5
-echo $ECHO_N "checking whether fgets_unlocked is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether fgets_unlocked is declared" >&5
+$as_echo_n "checking whether fgets_unlocked is declared... " >&6; }
 if test "${ac_cv_have_decl_fgets_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -9047,20 +9651,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_fgets_unlocked=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_fgets_unlocked=no
@@ -9068,9 +9673,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fgets_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_fgets_unlocked" >&6; }
-if test $ac_cv_have_decl_fgets_unlocked = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_fgets_unlocked" >&5
+$as_echo "$ac_cv_have_decl_fgets_unlocked" >&6; }
+if test "x$ac_cv_have_decl_fgets_unlocked" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_FGETS_UNLOCKED 1
@@ -9086,10 +9691,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether fputc_unlocked is declared" >&5
-echo $ECHO_N "checking whether fputc_unlocked is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether fputc_unlocked is declared" >&5
+$as_echo_n "checking whether fputc_unlocked is declared... " >&6; }
 if test "${ac_cv_have_decl_fputc_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -9115,20 +9720,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_fputc_unlocked=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_fputc_unlocked=no
@@ -9136,9 +9742,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fputc_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_fputc_unlocked" >&6; }
-if test $ac_cv_have_decl_fputc_unlocked = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_fputc_unlocked" >&5
+$as_echo "$ac_cv_have_decl_fputc_unlocked" >&6; }
+if test "x$ac_cv_have_decl_fputc_unlocked" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_FPUTC_UNLOCKED 1
@@ -9154,10 +9760,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether fputs_unlocked is declared" >&5
-echo $ECHO_N "checking whether fputs_unlocked is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether fputs_unlocked is declared" >&5
+$as_echo_n "checking whether fputs_unlocked is declared... " >&6; }
 if test "${ac_cv_have_decl_fputs_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -9183,20 +9789,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_fputs_unlocked=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_fputs_unlocked=no
@@ -9204,9 +9811,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fputs_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_fputs_unlocked" >&6; }
-if test $ac_cv_have_decl_fputs_unlocked = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_fputs_unlocked" >&5
+$as_echo "$ac_cv_have_decl_fputs_unlocked" >&6; }
+if test "x$ac_cv_have_decl_fputs_unlocked" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_FPUTS_UNLOCKED 1
@@ -9222,10 +9829,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether fread_unlocked is declared" >&5
-echo $ECHO_N "checking whether fread_unlocked is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether fread_unlocked is declared" >&5
+$as_echo_n "checking whether fread_unlocked is declared... " >&6; }
 if test "${ac_cv_have_decl_fread_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -9251,20 +9858,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_fread_unlocked=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_fread_unlocked=no
@@ -9272,9 +9880,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fread_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_fread_unlocked" >&6; }
-if test $ac_cv_have_decl_fread_unlocked = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_fread_unlocked" >&5
+$as_echo "$ac_cv_have_decl_fread_unlocked" >&6; }
+if test "x$ac_cv_have_decl_fread_unlocked" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_FREAD_UNLOCKED 1
@@ -9290,10 +9898,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether fwrite_unlocked is declared" >&5
-echo $ECHO_N "checking whether fwrite_unlocked is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether fwrite_unlocked is declared" >&5
+$as_echo_n "checking whether fwrite_unlocked is declared... " >&6; }
 if test "${ac_cv_have_decl_fwrite_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -9319,20 +9927,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_fwrite_unlocked=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_fwrite_unlocked=no
@@ -9340,9 +9949,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fwrite_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_fwrite_unlocked" >&6; }
-if test $ac_cv_have_decl_fwrite_unlocked = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_fwrite_unlocked" >&5
+$as_echo "$ac_cv_have_decl_fwrite_unlocked" >&6; }
+if test "x$ac_cv_have_decl_fwrite_unlocked" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_FWRITE_UNLOCKED 1
@@ -9358,10 +9967,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5
-echo $ECHO_N "checking whether getc_unlocked is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5
+$as_echo_n "checking whether getc_unlocked is declared... " >&6; }
 if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -9387,20 +9996,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_getc_unlocked=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_getc_unlocked=no
@@ -9408,9 +10018,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_getc_unlocked" >&6; }
-if test $ac_cv_have_decl_getc_unlocked = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5
+$as_echo "$ac_cv_have_decl_getc_unlocked" >&6; }
+if test "x$ac_cv_have_decl_getc_unlocked" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_GETC_UNLOCKED 1
@@ -9426,10 +10036,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether getchar_unlocked is declared" >&5
-echo $ECHO_N "checking whether getchar_unlocked is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether getchar_unlocked is declared" >&5
+$as_echo_n "checking whether getchar_unlocked is declared... " >&6; }
 if test "${ac_cv_have_decl_getchar_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -9455,20 +10065,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_getchar_unlocked=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_getchar_unlocked=no
@@ -9476,9 +10087,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getchar_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_getchar_unlocked" >&6; }
-if test $ac_cv_have_decl_getchar_unlocked = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_getchar_unlocked" >&5
+$as_echo "$ac_cv_have_decl_getchar_unlocked" >&6; }
+if test "x$ac_cv_have_decl_getchar_unlocked" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_GETCHAR_UNLOCKED 1
@@ -9494,10 +10105,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether putc_unlocked is declared" >&5
-echo $ECHO_N "checking whether putc_unlocked is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether putc_unlocked is declared" >&5
+$as_echo_n "checking whether putc_unlocked is declared... " >&6; }
 if test "${ac_cv_have_decl_putc_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -9523,20 +10134,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_putc_unlocked=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_putc_unlocked=no
@@ -9544,9 +10156,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_putc_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_putc_unlocked" >&6; }
-if test $ac_cv_have_decl_putc_unlocked = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_putc_unlocked" >&5
+$as_echo "$ac_cv_have_decl_putc_unlocked" >&6; }
+if test "x$ac_cv_have_decl_putc_unlocked" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_PUTC_UNLOCKED 1
@@ -9562,10 +10174,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether putchar_unlocked is declared" >&5
-echo $ECHO_N "checking whether putchar_unlocked is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether putchar_unlocked is declared" >&5
+$as_echo_n "checking whether putchar_unlocked is declared... " >&6; }
 if test "${ac_cv_have_decl_putchar_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -9591,20 +10203,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_putchar_unlocked=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_putchar_unlocked=no
@@ -9612,9 +10225,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_putchar_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_putchar_unlocked" >&6; }
-if test $ac_cv_have_decl_putchar_unlocked = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_putchar_unlocked" >&5
+$as_echo "$ac_cv_have_decl_putchar_unlocked" >&6; }
+if test "x$ac_cv_have_decl_putchar_unlocked" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_PUTCHAR_UNLOCKED 1
 
 for ac_func in $ac_func_list
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -9693,35 +10306,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -9738,10 +10358,10 @@ done
 
   XGETTEXT_EXTRA_OPTIONS=
 
-{ echo "$as_me:$LINENO: checking for d_ino member in directory struct" >&5
-echo $ECHO_N "checking for d_ino member in directory struct... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for d_ino member in directory struct" >&5
+$as_echo_n "checking for d_ino member in directory struct... " >&6; }
 if test "${gl_cv_struct_dirent_d_ino+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then
   gl_cv_struct_dirent_d_ino=no
@@ -9753,21 +10373,21 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
-            #include <sys/stat.h>
-            #include <dirent.h>
+             #include <sys/stat.h>
+             #include <dirent.h>
 
 int
 main ()
 {
 DIR *dp = opendir (".");
-            struct dirent *e;
-            struct stat st;
-            if (! dp)
-              return 1;
-            e = readdir (dp);
-            return ! (e
-                      && stat (e->d_name, &st) == 0
-                      && e->d_ino == st.st_ino);
+             struct dirent *e;
+             struct stat st;
+             if (! dp)
+               return 1;
+             e = readdir (dp);
+             return ! (e
+                       && stat (e->d_name, &st) == 0
+                       && e->d_ino == st.st_ino);
   ;
   return 0;
 }
@@ -9778,36 +10398,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_struct_dirent_d_ino=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 gl_cv_struct_dirent_d_ino=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_struct_dirent_d_ino" >&5
-echo "${ECHO_T}$gl_cv_struct_dirent_d_ino" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_struct_dirent_d_ino" >&5
+$as_echo "$gl_cv_struct_dirent_d_ino" >&6; }
    if test $gl_cv_struct_dirent_d_ino = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -9818,13 +10441,13 @@ _ACEOF
 
 
 
-    { echo "$as_me:$LINENO: checking whether system is Windows or MSDOS" >&5
-echo $ECHO_N "checking whether system is Windows or MSDOS... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking whether system is Windows or MSDOS" >&5
+$as_echo_n "checking whether system is Windows or MSDOS... " >&6; }
 if test "${ac_cv_win_or_dos+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-       cat >conftest.$ac_ext <<_ACEOF
+        cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -9834,6 +10457,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 int
 main ()
 {
+
 #if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __CYGWIN__
 neither MSDOS nor Windows
 #endif
@@ -9847,20 +10471,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_win_or_dos=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_win_or_dos=no
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_win_or_dos" >&5
-echo "${ECHO_T}$ac_cv_win_or_dos" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_win_or_dos" >&5
+$as_echo "$ac_cv_win_or_dos" >&6; }
 
     if test x"$ac_cv_win_or_dos" = xyes; then
       ac_fs_accepts_drive_letter_prefix=1
       ac_fs_backslash_is_file_name_separator=1
-      { echo "$as_me:$LINENO: checking whether drive letter can start relative path" >&5
-echo $ECHO_N "checking whether drive letter can start relative path... $ECHO_C" >&6; }
+      { $as_echo "$as_me:$LINENO: checking whether drive letter can start relative path" >&5
+$as_echo_n "checking whether drive letter can start relative path... " >&6; }
 if test "${ac_cv_drive_letter_can_be_relative+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-         cat >conftest.$ac_ext <<_ACEOF
+          cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -9891,6 +10516,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 int
 main ()
 {
+
 #if defined __CYGWIN__
 drive letters are always absolute
 #endif
@@ -9904,20 +10530,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_drive_letter_can_be_relative=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_drive_letter_can_be_relative=no
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_drive_letter_can_be_relative" >&5
-echo "${ECHO_T}$ac_cv_drive_letter_can_be_relative" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_drive_letter_can_be_relative" >&5
+$as_echo "$ac_cv_drive_letter_can_be_relative" >&6; }
       if test x"$ac_cv_drive_letter_can_be_relative" = xyes; then
-       ac_fs_drive_letter_can_be_relative=1
+        ac_fs_drive_letter_can_be_relative=1
       else
-       ac_fs_drive_letter_can_be_relative=0
+        ac_fs_drive_letter_can_be_relative=0
       fi
     else
       ac_fs_accepts_drive_letter_prefix=0
@@ -9960,10 +10587,10 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
-{ echo "$as_me:$LINENO: checking for long file names" >&5
-echo $ECHO_N "checking for long file names... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for long file names" >&5
+$as_echo_n "checking for long file names... " >&6; }
 if test "${ac_cv_sys_long_file_names+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_cv_sys_long_file_names=yes
 # Test for long file names in all the places we know might matter:
@@ -9992,8 +10619,8 @@ for ac_dir in . "$TMPDIR" /tmp /var/tmp /usr/tmp "$prefix/lib" "$exec_prefix/lib
   test $ac_cv_sys_long_file_names = no && break
 done
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sys_long_file_names" >&5
-echo "${ECHO_T}$ac_cv_sys_long_file_names" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_long_file_names" >&5
+$as_echo "$ac_cv_sys_long_file_names" >&6; }
 if test $ac_cv_sys_long_file_names = yes; then
 
 cat >>confdefs.h <<\_ACEOF
   REPLACE_MBSNRTOWCS=0;
   REPLACE_WCRTOMB=0;
   REPLACE_WCSRTOMBS=0;
+  REPLACE_WCSNRTOMBS=0;
   REPLACE_WCWIDTH=0;
-  WCHAR_H='';
+
+
+            { $as_echo "$as_me:$LINENO: checking whether <wchar.h> uses 'inline' correctly" >&5
+$as_echo_n "checking whether <wchar.h> uses 'inline' correctly... " >&6; }
+if test "${gl_cv_header_wchar_h_correct_inline+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_header_wchar_h_correct_inline=yes
+     cat >conftest.$ac_ext <<_ACEOF
+
+       /* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#define wcstod renamed_wcstod
+#include <wchar.h>
+extern int zero (void);
+int main () { return zero(); }
+
+_ACEOF
+     if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+       mv conftest.$ac_objext conftest1.$ac_objext
+       cat >conftest.$ac_ext <<_ACEOF
+
+         /* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#define wcstod renamed_wcstod
+#include <wchar.h>
+int zero (void) { return 0; }
+
+_ACEOF
+       if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+         mv conftest.$ac_objext conftest2.$ac_objext
+         if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&5 2>&1; then
+           :
+         else
+           gl_cv_header_wchar_h_correct_inline=no
+         fi
+       fi
+     fi
+     rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_wchar_h_correct_inline" >&5
+$as_echo "$gl_cv_header_wchar_h_correct_inline" >&6; }
+  if test $gl_cv_header_wchar_h_correct_inline = no; then
+    { { $as_echo "$as_me:$LINENO: error: <wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
+This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
+C99 mode. You have four options:
+  - Add the flag -fgnu89-inline to CC and reconfigure, or
+  - Fix your include files, using parts of
+    <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
+  - Use a gcc version older than 4.3, or
+  - Don't use the flags -std=c99 or -std=gnu99.
+Configuration aborted." >&5
+$as_echo "$as_me: error: <wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
+This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
+C99 mode. You have four options:
+  - Add the flag -fgnu89-inline to CC and reconfigure, or
+  - Fix your include files, using parts of
+    <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
+  - Use a gcc version older than 4.3, or
+  - Don't use the flags -std=c99 or -std=gnu99.
+Configuration aborted." >&2;}
+   { (exit 1); exit 1; }; }
+  fi
 
 
 
 
-  { echo "$as_me:$LINENO: checking for nl_langinfo and CODESET" >&5
-echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for nl_langinfo and CODESET" >&5
+$as_echo_n "checking for nl_langinfo and CODESET... " >&6; }
 if test "${am_cv_langinfo_codeset+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -10069,32 +10774,36 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   am_cv_langinfo_codeset=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        am_cv_langinfo_codeset=no
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 
 fi
-{ echo "$as_me:$LINENO: result: $am_cv_langinfo_codeset" >&5
-echo "${ECHO_T}$am_cv_langinfo_codeset" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $am_cv_langinfo_codeset" >&5
+$as_echo "$am_cv_langinfo_codeset" >&6; }
   if test $am_cv_langinfo_codeset = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -10106,10 +10815,10 @@ _ACEOF
 
 
 
-  { echo "$as_me:$LINENO: checking for a traditional french locale" >&5
-echo $ECHO_N "checking for a traditional french locale... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for a traditional french locale" >&5
+$as_echo_n "checking for a traditional french locale... " >&6; }
 if test "${gt_cv_locale_fr+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
     cat >conftest.$ac_ext <<_ACEOF
@@ -10166,7 +10875,7 @@ _ACEOF
     if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && test -s conftest$ac_exeext; then
       # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
       # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the
@@ -10203,151 +10912,310 @@ _ACEOF
     rm -fr conftest*
 
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_locale_fr" >&5
-echo "${ECHO_T}$gt_cv_locale_fr" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr" >&5
+$as_echo "$gt_cv_locale_fr" >&6; }
   LOCALE_FR=$gt_cv_locale_fr
 
 
-{ echo "$as_me:$LINENO: checking whether canonicalize_file_name is declared" >&5
-echo $ECHO_N "checking whether canonicalize_file_name is declared... $ECHO_C" >&6; }
-if test "${ac_cv_have_decl_canonicalize_file_name+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking whether // is distinct from /" >&5
+$as_echo_n "checking whether // is distinct from /... " >&6; }
+if test "${gl_cv_double_slash_root+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+   if test x"$cross_compiling" = xyes ; then
+        # When cross-compiling, there is no way to tell whether // is special
+        # short of a list of hosts.  However, the only known hosts to date
+        # that have a distinct // are Apollo DomainOS (too old to port to),
+        # Cygwin, and z/OS.  If anyone knows of another system for which // has
+        # special semantics and is distinct from /, please report it to
+        # <bug-gnulib@gnu.org>.
+        case $host in
+          *-cygwin | i370-ibm-openedition)
+            gl_cv_double_slash_root=yes ;;
+          *)
+            # Be optimistic and assume that / and // are the same when we
+            # don't know.
+            gl_cv_double_slash_root='unknown, assuming no' ;;
+        esac
+      else
+        set x `ls -di / // 2>/dev/null`
+        if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then
+          gl_cv_double_slash_root=no
+        else
+          gl_cv_double_slash_root=yes
+        fi
+      fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_double_slash_root" >&5
+$as_echo "$gl_cv_double_slash_root" >&6; }
+  if test "$gl_cv_double_slash_root" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1
+_ACEOF
+
+  fi
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking whether realpath works" >&5
+$as_echo_n "checking whether realpath works... " >&6; }
+if test "${gl_cv_func_realpath_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+    touch conftest.a
+    if test "$cross_compiling" = yes; then
+  gl_cv_func_realpath_works="guessing no"
 else
   cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
+
+      /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-$ac_includes_default
+
+        #include <stdlib.h>
+
 int
 main ()
 {
-#ifndef canonicalize_file_name
-  (void) canonicalize_file_name;
-#endif
+
+        char *name1 = realpath ("conftest.a", NULL);
+        char *name2 = realpath ("conftest.b/../conftest.a", NULL);
+        char *name3 = realpath ("conftest.a/", NULL);
+        return !(name1 && *name1 == '/' && !name2 && !name3);
 
   ;
   return 0;
 }
+
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_have_decl_canonicalize_file_name=yes
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_realpath_works=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_have_decl_canonicalize_file_name=no
+( exit $ac_status )
+gl_cv_func_realpath_works=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_canonicalize_file_name" >&5
-echo "${ECHO_T}$ac_cv_have_decl_canonicalize_file_name" >&6; }
-if test $ac_cv_have_decl_canonicalize_file_name = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CANONICALIZE_FILE_NAME 1
-_ACEOF
 
 
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CANONICALIZE_FILE_NAME 0
-_ACEOF
-
 
 fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_realpath_works" >&5
+$as_echo "$gl_cv_func_realpath_works" >&6; }
+  if test "$gl_cv_func_realpath_works" = yes; then
 
+cat >>confdefs.h <<\_ACEOF
+#define FUNC_REALPATH_WORKS 1
+_ACEOF
 
+  fi
 
 
-
-
-
+  GNULIB_ATOLL=0;
+  GNULIB_CALLOC_POSIX=0;
+  GNULIB_CANONICALIZE_FILE_NAME=0;
+  GNULIB_GETLOADAVG=0;
+  GNULIB_GETSUBOPT=0;
+  GNULIB_MALLOC_POSIX=0;
+  GNULIB_MKDTEMP=0;
+  GNULIB_MKOSTEMP=0;
+  GNULIB_MKOSTEMPS=0;
+  GNULIB_MKSTEMP=0;
+  GNULIB_MKSTEMPS=0;
+  GNULIB_PUTENV=0;
+  GNULIB_RANDOM_R=0;
+  GNULIB_REALLOC_POSIX=0;
+  GNULIB_REALPATH=0;
+  GNULIB_RPMATCH=0;
+  GNULIB_SETENV=0;
+  GNULIB_STRTOD=0;
+  GNULIB_STRTOLL=0;
+  GNULIB_STRTOULL=0;
+  GNULIB_UNSETENV=0;
+    HAVE_ATOLL=1;
+  HAVE_CALLOC_POSIX=1;
+  HAVE_CANONICALIZE_FILE_NAME=1;
+  HAVE_DECL_GETLOADAVG=1;
+  HAVE_GETSUBOPT=1;
+  HAVE_MALLOC_POSIX=1;
+  HAVE_MKDTEMP=1;
+  HAVE_MKOSTEMP=1;
+  HAVE_MKOSTEMPS=1;
+  HAVE_MKSTEMPS=1;
+  HAVE_RANDOM_R=1;
+  HAVE_REALLOC_POSIX=1;
+  HAVE_REALPATH=1;
+  HAVE_RPMATCH=1;
+  HAVE_SETENV=1;
+  HAVE_STRTOD=1;
+  HAVE_STRTOLL=1;
+  HAVE_STRTOULL=1;
+  HAVE_STRUCT_RANDOM_DATA=1;
+  HAVE_SYS_LOADAVG_H=0;
+  HAVE_UNSETENV=1;
+  REPLACE_CANONICALIZE_FILE_NAME=0;
+  REPLACE_MKSTEMP=0;
+  REPLACE_PUTENV=0;
+  REPLACE_REALPATH=0;
+  REPLACE_SETENV=0;
+  REPLACE_STRTOD=0;
+  REPLACE_UNSETENV=0;
 
 
   GNULIB_CHOWN=0;
   GNULIB_CLOSE=0;
   GNULIB_DUP2=0;
+  GNULIB_DUP3=0;
   GNULIB_ENVIRON=0;
   GNULIB_EUIDACCESS=0;
+  GNULIB_FACCESSAT=0;
   GNULIB_FCHDIR=0;
+  GNULIB_FCHOWNAT=0;
   GNULIB_FSYNC=0;
   GNULIB_FTRUNCATE=0;
   GNULIB_GETCWD=0;
   GNULIB_GETDOMAINNAME=0;
   GNULIB_GETDTABLESIZE=0;
+  GNULIB_GETGROUPS=0;
   GNULIB_GETHOSTNAME=0;
+  GNULIB_GETLOGIN=0;
   GNULIB_GETLOGIN_R=0;
   GNULIB_GETPAGESIZE=0;
   GNULIB_GETUSERSHELL=0;
   GNULIB_LCHOWN=0;
   GNULIB_LINK=0;
+  GNULIB_LINKAT=0;
   GNULIB_LSEEK=0;
+  GNULIB_PIPE2=0;
+  GNULIB_PREAD=0;
   GNULIB_READLINK=0;
+  GNULIB_READLINKAT=0;
+  GNULIB_RMDIR=0;
   GNULIB_SLEEP=0;
+  GNULIB_SYMLINK=0;
+  GNULIB_SYMLINKAT=0;
+  GNULIB_UNISTD_H_GETOPT=0;
   GNULIB_UNISTD_H_SIGPIPE=0;
+  GNULIB_UNLINK=0;
+  GNULIB_UNLINKAT=0;
+  GNULIB_USLEEP=0;
   GNULIB_WRITE=0;
-    HAVE_DUP2=1;
+    HAVE_CHOWN=1;
+  HAVE_DUP2=1;
+  HAVE_DUP3=1;
   HAVE_EUIDACCESS=1;
+  HAVE_FACCESSAT=1;
+  HAVE_FCHOWNAT=1;
   HAVE_FSYNC=1;
   HAVE_FTRUNCATE=1;
   HAVE_GETDOMAINNAME=1;
   HAVE_GETDTABLESIZE=1;
+  HAVE_GETGROUPS=1;
   HAVE_GETHOSTNAME=1;
+  HAVE_GETLOGIN=1;
   HAVE_GETPAGESIZE=1;
   HAVE_GETUSERSHELL=1;
+  HAVE_LCHOWN=1;
   HAVE_LINK=1;
+  HAVE_LINKAT=1;
+  HAVE_PIPE2=1;
+  HAVE_PREAD=1;
   HAVE_READLINK=1;
+  HAVE_READLINKAT=1;
   HAVE_SLEEP=1;
+  HAVE_SYMLINK=1;
+  HAVE_SYMLINKAT=1;
   HAVE_DECL_ENVIRON=1;
   HAVE_DECL_GETLOGIN_R=1;
   HAVE_OS_H=0;
   HAVE_SYS_PARAM_H=0;
+  HAVE_UNLINKAT=1;
+  HAVE_USLEEP=1;
   REPLACE_CHOWN=0;
   REPLACE_CLOSE=0;
+  REPLACE_DUP=0;
+  REPLACE_DUP2=0;
   REPLACE_FCHDIR=0;
+  REPLACE_FCHOWNAT=0;
   REPLACE_GETCWD=0;
+  REPLACE_GETGROUPS=0;
   REPLACE_GETPAGESIZE=0;
   REPLACE_LCHOWN=0;
+  REPLACE_LINK=0;
+  REPLACE_LINKAT=0;
   REPLACE_LSEEK=0;
+  REPLACE_PREAD=0;
+  REPLACE_READLINK=0;
+  REPLACE_RMDIR=0;
+  REPLACE_SLEEP=0;
+  REPLACE_SYMLINK=0;
+  REPLACE_UNLINK=0;
+  REPLACE_UNLINKAT=0;
+  REPLACE_USLEEP=0;
   REPLACE_WRITE=0;
   UNISTD_H_HAVE_WINSOCK2_H=0;
+  UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0;
+
 
 
 for ac_header in unistd.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -10363,32 +11231,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -10402,51 +11271,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -10455,31 +11325,34 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 
 done
 
-{ echo "$as_me:$LINENO: checking for working chown" >&5
-echo $ECHO_N "checking for working chown... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for working chown" >&5
+$as_echo_n "checking for working chown... " >&6; }
 if test "${ac_cv_func_chown_works+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then
   ac_cv_func_chown_works=no
@@ -10519,29 +11392,32 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_func_chown_works=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 ac_cv_func_chown_works=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
@@ -10549,8 +11425,8 @@ fi
 rm -f conftest.chown
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_chown_works" >&5
-echo "${ECHO_T}$ac_cv_func_chown_works" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_chown_works" >&5
+$as_echo "$ac_cv_func_chown_works" >&6; }
 if test $ac_cv_func_chown_works = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -10560,10 +11436,10 @@ _ACEOF
 fi
 
 
-  { echo "$as_me:$LINENO: checking whether chown(2) dereferences symlinks" >&5
-echo $ECHO_N "checking whether chown(2) dereferences symlinks... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether chown dereferences symlinks" >&5
+$as_echo_n "checking whether chown dereferences symlinks... " >&6; }
 if test "${gl_cv_func_chown_follows_symlink+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
       if test "$cross_compiling" = yes; then
@@ -10581,20 +11457,20 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <stdlib.h>
 #include <errno.h>
 
-       int
-       main ()
-       {
-         char const *dangling_symlink = "conftest.dangle";
+        int
+        main ()
+        {
+          char const *dangling_symlink = "conftest.dangle";
 
-         unlink (dangling_symlink);
-         if (symlink ("conftest.no-such", dangling_symlink))
-           abort ();
+          unlink (dangling_symlink);
+          if (symlink ("conftest.no-such", dangling_symlink))
+            abort ();
 
-         /* Exit successfully on a conforming system,
-            i.e., where chown must fail with ENOENT.  */
-         exit ( ! (chown (dangling_symlink, getuid (), getgid ()) != 0
-                   && errno == ENOENT));
-       }
+          /* Exit successfully on a conforming system,
+             i.e., where chown must fail with ENOENT.  */
+          exit ( ! (chown (dangling_symlink, getuid (), getgid ()) != 0
+                    && errno == ENOENT));
+        }
 
 _ACEOF
 rm -f conftest$ac_exeext
@@ -10603,29 +11479,32 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_func_chown_follows_symlink=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 gl_cv_func_chown_follows_symlink=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
@@ -10633,8 +11512,8 @@ fi
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_chown_follows_symlink" >&5
-echo "${ECHO_T}$gl_cv_func_chown_follows_symlink" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_chown_follows_symlink" >&5
+$as_echo "$gl_cv_func_chown_follows_symlink" >&6; }
 
   if test $gl_cv_func_chown_follows_symlink = no; then
 
@@ -10645,24 +11524,291 @@ _ACEOF
   fi
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    if test $ac_cv_func_chown = no; then
+    HAVE_CHOWN=0
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS chown.$ac_objext"
+
+  else
+        if test $gl_cv_func_chown_follows_symlink = no; then
+      REPLACE_CHOWN=1
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS chown.$ac_objext"
+
+    fi
+
+        if test $ac_cv_func_chown_works = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define CHOWN_FAILS_TO_HONOR_ID_OF_NEGATIVE_ONE 1
+_ACEOF
+
+      REPLACE_CHOWN=1
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS chown.$ac_objext"
+
+    fi
+
+            { $as_echo "$as_me:$LINENO: checking whether chown honors trailing slash" >&5
+$as_echo_n "checking whether chown honors trailing slash... " >&6; }
+if test "${gl_cv_func_chown_slash_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  touch conftest.file && rm -f conftest.link
+       if test "$cross_compiling" = yes; then
+  gl_cv_func_chown_slash_works="guessing no"
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+
+int
+main ()
+{
+    if (symlink ("conftest.file", "conftest.link")) return 1;
+          if (chown ("conftest.link/", getuid (), getgid ()) == 0) return 2;
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_chown_slash_works=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gl_cv_func_chown_slash_works=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+      rm -f conftest.link conftest.file
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_chown_slash_works" >&5
+$as_echo "$gl_cv_func_chown_slash_works" >&6; }
+    if test "$gl_cv_func_chown_slash_works" != yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define CHOWN_TRAILING_SLASH_BUG 1
+_ACEOF
+
+      REPLACE_CHOWN=1
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS chown.$ac_objext"
+
+    fi
+
+        { $as_echo "$as_me:$LINENO: checking whether chown always updates ctime" >&5
+$as_echo_n "checking whether chown always updates ctime... " >&6; }
+if test "${gl_cv_func_chown_ctime_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then
+  gl_cv_func_chown_ctime_works="guessing no"
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+int
+main ()
+{
+    struct stat st1, st2;
+          if (close (creat ("conftest.file", 0600))) return 1;
+          if (stat ("conftest.file", &st1)) return 2;
+          sleep (1);
+          if (chown ("conftest.file", st1.st_uid, st1.st_gid)) return 3;
+          if (stat ("conftest.file", &st2)) return 4;
+          if (st2.st_ctime <= st1.st_ctime) return 5;
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_chown_ctime_works=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gl_cv_func_chown_ctime_works=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+      rm -f conftest.file
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_chown_ctime_works" >&5
+$as_echo "$gl_cv_func_chown_ctime_works" >&6; }
+    if test "$gl_cv_func_chown_ctime_works" != yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define CHOWN_CHANGE_TIME_BUG 1
+_ACEOF
+
+      REPLACE_CHOWN=1
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS chown.$ac_objext"
+
+    fi
+
+    if test $REPLACE_CHOWN = 1 && test $ac_cv_func_fchown = no; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS fchown-stub.$ac_objext"
+
+    fi
+  fi
+
+
      GNULIB_DIRFD=0;
+  GNULIB_FDOPENDIR=0;
   GNULIB_SCANDIR=0;
   GNULIB_ALPHASORT=0;
     HAVE_DECL_DIRFD=1;
+  HAVE_FDOPENDIR=1;
   HAVE_SCANDIR=1;
   HAVE_ALPHASORT=1;
-  DIRENT_H='';
+  REPLACE_CLOSEDIR=0;
+  REPLACE_FDOPENDIR=0;
+  REPLACE_OPENDIR=0;
 
 
 
-  { echo "$as_me:$LINENO: checking whether the preprocessor supports include_next" >&5
-echo $ECHO_N "checking whether the preprocessor supports include_next... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether the preprocessor supports include_next" >&5
+$as_echo_n "checking whether the preprocessor supports include_next... " >&6; }
 if test "${gl_cv_have_include_next+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   rm -rf conftestd1a conftestd1b conftestd2
      mkdir conftestd1a conftestd1b conftestd2
-                                             cat <<EOF > conftestd1a/conftest.h
+                                                  cat <<EOF > conftestd1a/conftest.h
 #define DEFINED_IN_CONFTESTD1
 #include_next <conftest.h>
 #ifdef DEFINED_IN_CONFTESTD2
@@ -10698,20 +11844,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gl_cv_have_include_next=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
@@ -10724,20 +11871,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gl_cv_have_include_next=buggy
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gl_cv_have_include_next=no
@@ -10752,8 +11900,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
      rm -rf conftestd1a conftestd1b conftestd2
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_have_include_next" >&5
-echo "${ECHO_T}$gl_cv_have_include_next" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_have_include_next" >&5
+$as_echo "$gl_cv_have_include_next" >&6; }
   PRAGMA_SYSTEM_HEADER=
   if test $gl_cv_have_include_next = yes; then
     INCLUDE_NEXT=include_next
@@ -10778,55 +11926,123 @@ echo "${ECHO_T}$gl_cv_have_include_next" >&6; }
 
 
 
-  { echo "$as_me:$LINENO: checking whether // is distinct from /" >&5
-echo $ECHO_N "checking whether // is distinct from /... $ECHO_C" >&6; }
-if test "${gl_cv_double_slash_root+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS basename-lgpl.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS dirname-lgpl.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS stripslash.$ac_objext"
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking if environ is properly declared" >&5
+$as_echo_n "checking if environ is properly declared... " >&6; }
+  if test "${gt_cv_var_environ_declaration+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
-   if test x"$cross_compiling" = xyes ; then
-       # When cross-compiling, there is no way to tell whether // is special
-       # short of a list of hosts.  However, the only known hosts to date
-       # that have a distinct // are Apollo DomainOS (too old to port to),
-       # Cygwin, and z/OS.  If anyone knows of another system for which // has
-       # special semantics and is distinct from /, please report it to
-       # <bug-gnulib@gnu.org>.
-       case $host in
-         *-cygwin | i370-ibm-openedition)
-           gl_cv_double_slash_root=yes ;;
-         *)
-           # Be optimistic and assume that / and // are the same when we
-           # don't know.
-           gl_cv_double_slash_root='unknown, assuming no' ;;
-       esac
-      else
-       set x `ls -di / // 2>/dev/null`
-       if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then
-         gl_cv_double_slash_root=no
-       else
-         gl_cv_double_slash_root=yes
-       fi
-      fi
+
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <unistd.h>
+      extern struct { int foo; } environ;
+int
+main ()
+{
+environ.foo = 1;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gt_cv_var_environ_declaration=no
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       gt_cv_var_environ_declaration=yes
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_double_slash_root" >&5
-echo "${ECHO_T}$gl_cv_double_slash_root" >&6; }
-  if test "$gl_cv_double_slash_root" = yes; then
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+  { $as_echo "$as_me:$LINENO: result: $gt_cv_var_environ_declaration" >&5
+$as_echo "$gt_cv_var_environ_declaration" >&6; }
+  if test $gt_cv_var_environ_declaration = yes; then
 
 cat >>confdefs.h <<\_ACEOF
-#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1
+#define HAVE_ENVIRON_DECL 1
 _ACEOF
 
   fi
 
 
+  if test $gt_cv_var_environ_declaration != yes; then
+    HAVE_DECL_ENVIRON=0
+  fi
 
 
 
 
 
-  { echo "$as_me:$LINENO: checking for complete errno.h" >&5
-echo $ECHO_N "checking for complete errno.h... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for complete errno.h" >&5
+$as_echo_n "checking for complete errno.h... " >&6; }
 if test "${gl_cv_header_errno_h_complete+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
     cat >conftest.$ac_ext <<_ACEOF
@@ -10861,6 +12077,9 @@ booboo
 #if !defined ENOTSUP
 booboo
 #endif
+#if !defined ESTALE
+booboo
+#endif
 #if !defined ECANCELED
 booboo
 #endif
@@ -10876,8 +12095,8 @@ rm -f conftest*
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_header_errno_h_complete" >&5
-echo "${ECHO_T}$gl_cv_header_errno_h_complete" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_errno_h_complete" >&5
+$as_echo "$gl_cv_header_errno_h_complete" >&6; }
   if test $gl_cv_header_errno_h_complete = yes; then
     ERRNO_H=''
   else
@@ -10895,14 +12114,14 @@ echo "${ECHO_T}$gl_cv_header_errno_h_complete" >&6; }
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_errno_h='<'errno.h'>'
      else
-       { echo "$as_me:$LINENO: checking absolute name of <errno.h>" >&5
-echo $ECHO_N "checking absolute name of <errno.h>... $ECHO_C" >&6; }
+       { $as_echo "$as_me:$LINENO: checking absolute name of <errno.h>" >&5
+$as_echo_n "checking absolute name of <errno.h>... " >&6; }
 if test "${gl_cv_next_errno_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-         if test $ac_cv_header_errno_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
+          if test $ac_cv_header_errno_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -10911,27 +12130,36 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <errno.h>
 
 _ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_errno_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/errno.h#{
-                s#.*"\(.*/errno.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_errno_h='<'errno.h'>'
-         fi
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_errno_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/errno.h#{
+                 s#.*"\(.*/errno.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_errno_h='<'errno.h'>'
+          fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_errno_h" >&5
-echo "${ECHO_T}$gl_cv_next_errno_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_errno_h" >&5
+$as_echo "$gl_cv_next_errno_h" >&6; }
      fi
      NEXT_ERRNO_H=$gl_cv_next_errno_h
 
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'errno.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_errno_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_ERRNO_H=$gl_next_as_first_directive
+
 
 
     ERRNO_H='errno.h'
@@ -10939,10 +12167,10 @@ echo "${ECHO_T}$gl_cv_next_errno_h" >&6; }
 
 
   if test -n "$ERRNO_H"; then
-    { echo "$as_me:$LINENO: checking for EMULTIHOP value" >&5
-echo $ECHO_N "checking for EMULTIHOP value... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for EMULTIHOP value" >&5
+$as_echo_n "checking for EMULTIHOP value... " >&6; }
 if test "${gl_cv_header_errno_h_EMULTIHOP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
       cat >conftest.$ac_ext <<_ACEOF
@@ -11019,13 +12247,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -11061,20 +12290,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo=`expr $ac_mid + 1`
@@ -11088,7 +12318,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -11120,13 +12350,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -11162,20 +12393,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_hi=`expr '(' $ac_mid ')' - 1`
@@ -11189,7 +12421,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo= ac_hi=
@@ -11231,20 +12463,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo=`expr '(' $ac_mid ')' + 1`
@@ -11286,15 +12519,17 @@ main ()
       long int i = longval ();
       if (i != (EMULTIHOP))
        return 1;
-      fprintf (f, "%ld\n", i);
+      fprintf (f, "%ld", i);
     }
   else
     {
       unsigned long int i = ulongval ();
       if (i != (EMULTIHOP))
        return 1;
-      fprintf (f, "%lu\n", i);
+      fprintf (f, "%lu", i);
     }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
   return ferror (f) || fclose (f) != 0;
 
   ;
@@ -11307,27 +12542,30 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_header_errno_h_EMULTIHOP=`cat conftest.val`
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
@@ -11335,8 +12573,8 @@ rm -f conftest.val
       fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_header_errno_h_EMULTIHOP" >&5
-echo "${ECHO_T}$gl_cv_header_errno_h_EMULTIHOP" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_errno_h_EMULTIHOP" >&5
+$as_echo "$gl_cv_header_errno_h_EMULTIHOP" >&6; }
     case $gl_cv_header_errno_h_EMULTIHOP in
       yes | no)
         EMULTIHOP_HIDDEN=0; EMULTIHOP_VALUE=
@@ -11351,10 +12589,10 @@ echo "${ECHO_T}$gl_cv_header_errno_h_EMULTIHOP" >&6; }
 
 
   if test -n "$ERRNO_H"; then
-    { echo "$as_me:$LINENO: checking for ENOLINK value" >&5
-echo $ECHO_N "checking for ENOLINK value... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for ENOLINK value" >&5
+$as_echo_n "checking for ENOLINK value... " >&6; }
 if test "${gl_cv_header_errno_h_ENOLINK+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
       cat >conftest.$ac_ext <<_ACEOF
@@ -11431,13 +12669,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -11473,20 +12712,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo=`expr $ac_mid + 1`
@@ -11500,7 +12740,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -11532,13 +12772,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -11574,20 +12815,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_hi=`expr '(' $ac_mid ')' - 1`
@@ -11601,7 +12843,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo= ac_hi=
@@ -11643,20 +12885,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo=`expr '(' $ac_mid ')' + 1`
@@ -11698,15 +12941,17 @@ main ()
       long int i = longval ();
       if (i != (ENOLINK))
        return 1;
-      fprintf (f, "%ld\n", i);
+      fprintf (f, "%ld", i);
     }
   else
     {
       unsigned long int i = ulongval ();
       if (i != (ENOLINK))
        return 1;
-      fprintf (f, "%lu\n", i);
+      fprintf (f, "%lu", i);
     }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
   return ferror (f) || fclose (f) != 0;
 
   ;
@@ -11719,27 +12964,30 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_header_errno_h_ENOLINK=`cat conftest.val`
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
@@ -11747,8 +12995,8 @@ rm -f conftest.val
       fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_header_errno_h_ENOLINK" >&5
-echo "${ECHO_T}$gl_cv_header_errno_h_ENOLINK" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_errno_h_ENOLINK" >&5
+$as_echo "$gl_cv_header_errno_h_ENOLINK" >&6; }
     case $gl_cv_header_errno_h_ENOLINK in
       yes | no)
         ENOLINK_HIDDEN=0; ENOLINK_VALUE=
@@ -11763,10 +13011,10 @@ echo "${ECHO_T}$gl_cv_header_errno_h_ENOLINK" >&6; }
 
 
   if test -n "$ERRNO_H"; then
-    { echo "$as_me:$LINENO: checking for EOVERFLOW value" >&5
-echo $ECHO_N "checking for EOVERFLOW value... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for EOVERFLOW value" >&5
+$as_echo_n "checking for EOVERFLOW value... " >&6; }
 if test "${gl_cv_header_errno_h_EOVERFLOW+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
       cat >conftest.$ac_ext <<_ACEOF
@@ -11843,13 +13091,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -11885,20 +13134,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo=`expr $ac_mid + 1`
@@ -11912,7 +13162,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -11944,13 +13194,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -11986,20 +13237,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_hi=`expr '(' $ac_mid ')' - 1`
@@ -12013,7 +13265,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo= ac_hi=
@@ -12055,20 +13307,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo=`expr '(' $ac_mid ')' + 1`
@@ -12110,15 +13363,17 @@ main ()
       long int i = longval ();
       if (i != (EOVERFLOW))
        return 1;
-      fprintf (f, "%ld\n", i);
+      fprintf (f, "%ld", i);
     }
   else
     {
       unsigned long int i = ulongval ();
       if (i != (EOVERFLOW))
        return 1;
-      fprintf (f, "%lu\n", i);
+      fprintf (f, "%lu", i);
     }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
   return ferror (f) || fclose (f) != 0;
 
   ;
@@ -12131,27 +13386,30 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_header_errno_h_EOVERFLOW=`cat conftest.val`
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
@@ -12159,8 +13417,8 @@ rm -f conftest.val
       fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_header_errno_h_EOVERFLOW" >&5
-echo "${ECHO_T}$gl_cv_header_errno_h_EOVERFLOW" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_errno_h_EOVERFLOW" >&5
+$as_echo "$gl_cv_header_errno_h_EOVERFLOW" >&6; }
     case $gl_cv_header_errno_h_EOVERFLOW in
       yes | no)
         EOVERFLOW_HIDDEN=0; EOVERFLOW_VALUE=
@@ -12174,11 +13432,10 @@ echo "${ECHO_T}$gl_cv_header_errno_h_EOVERFLOW" >&6; }
   fi
 
 
-
-{ echo "$as_me:$LINENO: checking whether strerror_r is declared" >&5
-echo $ECHO_N "checking whether strerror_r is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether strerror_r is declared" >&5
+$as_echo_n "checking whether strerror_r is declared... " >&6; }
 if test "${ac_cv_have_decl_strerror_r+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -12204,20 +13461,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_strerror_r=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_strerror_r=no
@@ -12225,9 +13483,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strerror_r" >&5
-echo "${ECHO_T}$ac_cv_have_decl_strerror_r" >&6; }
-if test $ac_cv_have_decl_strerror_r = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strerror_r" >&5
+$as_echo "$ac_cv_have_decl_strerror_r" >&6; }
+if test "x$ac_cv_have_decl_strerror_r" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_STRERROR_R 1
 
 for ac_func in strerror_r
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -12303,44 +13561,51 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 done
 
-{ echo "$as_me:$LINENO: checking whether strerror_r returns char *" >&5
-echo $ECHO_N "checking whether strerror_r returns char *... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether strerror_r returns char *" >&5
+$as_echo_n "checking whether strerror_r returns char *... " >&6; }
 if test "${ac_cv_func_strerror_r_char_p+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
     ac_cv_func_strerror_r_char_p=no
@@ -12371,20 +13636,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_func_strerror_r_char_p=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -12425,27 +13691,30 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_func_strerror_r_char_p=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
@@ -12453,8 +13722,8 @@ fi
     fi
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_strerror_r_char_p" >&5
-echo "${ECHO_T}$ac_cv_func_strerror_r_char_p" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_strerror_r_char_p" >&5
+$as_echo "$ac_cv_func_strerror_r_char_p" >&6; }
 if test $ac_cv_func_strerror_r_char_p = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -12464,89 +13733,330 @@ _ACEOF
 fi
 
 
+     GNULIB_FCHMODAT=0;
+  GNULIB_FSTATAT=0;
+  GNULIB_FUTIMENS=0;
+  GNULIB_LCHMOD=0;
+  GNULIB_LSTAT=0;
+  GNULIB_MKDIRAT=0;
+  GNULIB_MKFIFO=0;
+  GNULIB_MKFIFOAT=0;
+  GNULIB_MKNOD=0;
+  GNULIB_MKNODAT=0;
+  GNULIB_STAT=0;
+  GNULIB_UTIMENSAT=0;
+    HAVE_FCHMODAT=1;
+  HAVE_FSTATAT=1;
+  HAVE_FUTIMENS=1;
+  HAVE_LCHMOD=1;
+  HAVE_LSTAT=1;
+  HAVE_MKDIRAT=1;
+  HAVE_MKFIFO=1;
+  HAVE_MKFIFOAT=1;
+  HAVE_MKNOD=1;
+  HAVE_MKNODAT=1;
+  HAVE_UTIMENSAT=1;
+  REPLACE_FSTAT=0;
+  REPLACE_FSTATAT=0;
+  REPLACE_FUTIMENS=0;
+  REPLACE_LSTAT=0;
+  REPLACE_MKDIR=0;
+  REPLACE_MKFIFO=0;
+  REPLACE_MKNOD=0;
+  REPLACE_STAT=0;
+  REPLACE_UTIMENSAT=0;
+
+
 
 
+  GNULIB_FCNTL=0;
   GNULIB_OPEN=0;
-    REPLACE_OPEN=0;
+  GNULIB_OPENAT=0;
+    HAVE_FCNTL=1;
+  HAVE_OPENAT=1;
+  REPLACE_FCNTL=0;
+  REPLACE_OPEN=0;
+  REPLACE_OPENAT=0;
+
+
+
+  { $as_echo "$as_me:$LINENO: checking for promoted mode_t type" >&5
+$as_echo_n "checking for promoted mode_t type... " >&6; }
+if test "${gl_cv_promoted_mode_t+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+                cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+int
+main ()
+{
+typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1];
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gl_cv_promoted_mode_t='int'
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       gl_cv_promoted_mode_t='mode_t'
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_promoted_mode_t" >&5
+$as_echo "$gl_cv_promoted_mode_t" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define PROMOTED_MODE_T $gl_cv_promoted_mode_t
+_ACEOF
+
 
 
-  GNULIB_FPRINTF=0;
-  GNULIB_FPRINTF_POSIX=0;
-  GNULIB_PRINTF=0;
-  GNULIB_PRINTF_POSIX=0;
-  GNULIB_SNPRINTF=0;
-  GNULIB_SPRINTF_POSIX=0;
-  GNULIB_VFPRINTF=0;
-  GNULIB_VFPRINTF_POSIX=0;
-  GNULIB_VPRINTF=0;
-  GNULIB_VPRINTF_POSIX=0;
-  GNULIB_VSNPRINTF=0;
-  GNULIB_VSPRINTF_POSIX=0;
   GNULIB_DPRINTF=0;
-  GNULIB_VDPRINTF=0;
-  GNULIB_VASPRINTF=0;
-  GNULIB_OBSTACK_PRINTF=0;
-  GNULIB_OBSTACK_PRINTF_POSIX=0;
+  GNULIB_FCLOSE=0;
+  GNULIB_FFLUSH=0;
   GNULIB_FOPEN=0;
+  GNULIB_FPRINTF=0;
+  GNULIB_FPRINTF_POSIX=0;
+  GNULIB_FPURGE=0;
+  GNULIB_FPUTC=0;
+  GNULIB_FPUTS=0;
   GNULIB_FREOPEN=0;
   GNULIB_FSEEK=0;
   GNULIB_FSEEKO=0;
   GNULIB_FTELL=0;
   GNULIB_FTELLO=0;
-  GNULIB_FFLUSH=0;
-  GNULIB_FCLOSE=0;
-  GNULIB_FPUTC=0;
-  GNULIB_PUTC=0;
-  GNULIB_PUTCHAR=0;
-  GNULIB_FPUTS=0;
-  GNULIB_PUTS=0;
   GNULIB_FWRITE=0;
   GNULIB_GETDELIM=0;
   GNULIB_GETLINE=0;
+  GNULIB_OBSTACK_PRINTF=0;
+  GNULIB_OBSTACK_PRINTF_POSIX=0;
   GNULIB_PERROR=0;
+  GNULIB_POPEN=0;
+  GNULIB_PRINTF=0;
+  GNULIB_PRINTF_POSIX=0;
+  GNULIB_PUTC=0;
+  GNULIB_PUTCHAR=0;
+  GNULIB_PUTS=0;
+  GNULIB_REMOVE=0;
+  GNULIB_RENAME=0;
+  GNULIB_RENAMEAT=0;
+  GNULIB_SNPRINTF=0;
+  GNULIB_SPRINTF_POSIX=0;
   GNULIB_STDIO_H_SIGPIPE=0;
-    REPLACE_STDIO_WRITE_FUNCS=0;
-  REPLACE_FPRINTF=0;
-  REPLACE_VFPRINTF=0;
-  REPLACE_PRINTF=0;
-  REPLACE_VPRINTF=0;
-  REPLACE_SNPRINTF=0;
+  GNULIB_VASPRINTF=0;
+  GNULIB_VDPRINTF=0;
+  GNULIB_VFPRINTF=0;
+  GNULIB_VFPRINTF_POSIX=0;
+  GNULIB_VPRINTF=0;
+  GNULIB_VPRINTF_POSIX=0;
+  GNULIB_VSNPRINTF=0;
+  GNULIB_VSPRINTF_POSIX=0;
+    HAVE_DECL_FPURGE=1;
+  HAVE_DECL_GETDELIM=1;
+  HAVE_DECL_GETLINE=1;
+  HAVE_DECL_OBSTACK_PRINTF=1;
   HAVE_DECL_SNPRINTF=1;
-  REPLACE_VSNPRINTF=0;
   HAVE_DECL_VSNPRINTF=1;
-  REPLACE_SPRINTF=0;
-  REPLACE_VSPRINTF=0;
   HAVE_DPRINTF=1;
-  REPLACE_DPRINTF=0;
-  HAVE_VDPRINTF=1;
-  REPLACE_VDPRINTF=0;
+  HAVE_RENAMEAT=1;
   HAVE_VASPRINTF=1;
-  REPLACE_VASPRINTF=0;
-  HAVE_DECL_OBSTACK_PRINTF=1;
-  REPLACE_OBSTACK_PRINTF=0;
+  HAVE_VDPRINTF=1;
+  REPLACE_DPRINTF=0;
+  REPLACE_FCLOSE=0;
+  REPLACE_FFLUSH=0;
   REPLACE_FOPEN=0;
+  REPLACE_FPRINTF=0;
+  REPLACE_FPURGE=0;
   REPLACE_FREOPEN=0;
-  HAVE_FSEEKO=1;
-  REPLACE_FSEEKO=0;
   REPLACE_FSEEK=0;
-  HAVE_FTELLO=1;
-  REPLACE_FTELLO=0;
+  REPLACE_FSEEKO=0;
   REPLACE_FTELL=0;
-  REPLACE_FFLUSH=0;
-  REPLACE_FCLOSE=0;
-  HAVE_DECL_GETDELIM=1;
-  HAVE_DECL_GETLINE=1;
+  REPLACE_FTELLO=0;
+  REPLACE_GETDELIM=0;
   REPLACE_GETLINE=0;
+  REPLACE_OBSTACK_PRINTF=0;
   REPLACE_PERROR=0;
+  REPLACE_POPEN=0;
+  REPLACE_PRINTF=0;
+  REPLACE_REMOVE=0;
+  REPLACE_RENAME=0;
+  REPLACE_RENAMEAT=0;
+  REPLACE_SNPRINTF=0;
+  REPLACE_SPRINTF=0;
+  REPLACE_STDIO_WRITE_FUNCS=0;
+  REPLACE_VASPRINTF=0;
+  REPLACE_VDPRINTF=0;
+  REPLACE_VFPRINTF=0;
+  REPLACE_VPRINTF=0;
+  REPLACE_VSNPRINTF=0;
+  REPLACE_VSPRINTF=0;
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking for working fcntl.h" >&5
+$as_echo_n "checking for working fcntl.h... " >&6; }
+if test "${gl_cv_header_working_fcntl_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then
+  gl_cv_header_working_fcntl_h=cross-compiling
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+           #include <sys/stat.h>
+           #include <unistd.h>
+           #include <fcntl.h>
+           #ifndef O_NOATIME
+            #define O_NOATIME 0
+           #endif
+           #ifndef O_NOFOLLOW
+            #define O_NOFOLLOW 0
+           #endif
+           static int const constants[] =
+            {
+              O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
+              O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
+            };
+
+int
+main ()
+{
+
+            int status = !constants;
+            {
+              static char const sym[] = "conftest.sym";
+              if (symlink (".", sym) != 0
+                  || close (open (sym, O_RDONLY | O_NOFOLLOW)) == 0)
+                status |= 32;
+              unlink (sym);
+            }
+            {
+              static char const file[] = "confdefs.h";
+              int fd = open (file, O_RDONLY | O_NOATIME);
+              char c;
+              struct stat st0, st1;
+              if (fd < 0
+                  || fstat (fd, &st0) != 0
+                  || sleep (1) != 0
+                  || read (fd, &c, 1) != 1
+                  || close (fd) != 0
+                  || stat (file, &st1) != 0
+                  || st0.st_atime != st1.st_atime)
+                status |= 64;
+            }
+            return status;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_header_working_fcntl_h=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+case $? in #(
+        32) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
+        64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
+        96) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
+         *) gl_cv_header_working_fcntl_h='no';;
+        esac
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_working_fcntl_h" >&5
+$as_echo "$gl_cv_header_working_fcntl_h" >&6; }
+
+  case $gl_cv_header_working_fcntl_h in #(
+  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
+  *) ac_val=1;;
+  esac
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WORKING_O_NOATIME $ac_val
+_ACEOF
+
+
+  case $gl_cv_header_working_fcntl_h in #(
+  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
+  *) ac_val=1;;
+  esac
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WORKING_O_NOFOLLOW $ac_val
+_ACEOF
 
 
 
 
 
-   { echo "$as_me:$LINENO: checking for mbstate_t" >&5
-echo $ECHO_N "checking for mbstate_t... $ECHO_C" >&6; }
+
+   { $as_echo "$as_me:$LINENO: checking for mbstate_t" >&5
+$as_echo_n "checking for mbstate_t... " >&6; }
 if test "${ac_cv_type_mbstate_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -12555,7 +14065,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-#          include <wchar.h>
+#           include <wchar.h>
 int
 main ()
 {
@@ -12570,20 +14080,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_type_mbstate_t=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_type_mbstate_t=no
@@ -12591,8 +14102,8 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_mbstate_t" >&5
-echo "${ECHO_T}$ac_cv_type_mbstate_t" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_mbstate_t" >&5
+$as_echo "$ac_cv_type_mbstate_t" >&6; }
    if test $ac_cv_type_mbstate_t = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -12628,10 +14139,10 @@ _ACEOF
 
 
 
-    { echo "$as_me:$LINENO: checking whether stdin defaults to large file offsets" >&5
-echo $ECHO_N "checking whether stdin defaults to large file offsets... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking whether stdin defaults to large file offsets" >&5
+$as_echo_n "checking whether stdin defaults to large file offsets... " >&6; }
 if test "${gl_cv_var_stdin_large_offset+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -12662,42 +14173,57 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   gl_cv_var_stdin_large_offset=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gl_cv_var_stdin_large_offset=no
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_var_stdin_large_offset" >&5
-echo "${ECHO_T}$gl_cv_var_stdin_large_offset" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_var_stdin_large_offset" >&5
+$as_echo "$gl_cv_var_stdin_large_offset" >&6; }
 
 
 
 
-   { echo "$as_me:$LINENO: checking whether getcwd (NULL, 0) allocates memory for result" >&5
-echo $ECHO_N "checking whether getcwd (NULL, 0) allocates memory for result... $ECHO_C" >&6; }
+   { $as_echo "$as_me:$LINENO: checking whether getcwd (NULL, 0) allocates memory for result" >&5
+$as_echo_n "checking whether getcwd (NULL, 0) allocates memory for result... " >&6; }
 if test "${gl_cv_func_getcwd_null+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then
-  gl_cv_func_getcwd_null=no
+
+       case "$host_os" in
+                               # Guess yes on glibc systems.
+         *-gnu*)               gl_cv_func_getcwd_null="guessing yes";;
+                               # Guess yes on Cygwin.
+         cygwin*)              gl_cv_func_getcwd_null="guessing yes";;
+                               # Guess yes on mingw.
+         mingw*)               gl_cv_func_getcwd_null="guessing yes";;
+                               # If we don't know, assume the worst.
+         *)                    gl_cv_func_getcwd_null="guessing no";;
+       esac
+
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -12706,22 +14232,30 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
-#       include <stdlib.h>
-#       include <unistd.h>
-#       ifndef getcwd
-        char *getcwd ();
-#       endif
-        int
-        main ()
-        {
-          if (chdir ("/") != 0)
-            exit (1);
-          else
-            {
-              char *f = getcwd (NULL, 0);
-              exit (! (f && f[0] == '/' && !f[1]));
-            }
-        }
+#        include <unistd.h>
+#        ifndef getcwd
+         char *getcwd ();
+#        endif
+
+int
+main ()
+{
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+/* mingw cwd does not start with '/', but getcwd does allocate.  */
+#else
+           if (chdir ("/") != 0)
+             return 1;
+           else
+             {
+               char *f = getcwd (NULL, 0);
+               return ! (f && f[0] == '/' && !f[1]);
+             }
+#endif
+
+  ;
+  return 0;
+}
 _ACEOF
 rm -f conftest$ac_exeext
 if { (ac_try="$ac_link"
@@ -12729,41 +14263,44 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_func_getcwd_null=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 gl_cv_func_getcwd_null=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_getcwd_null" >&5
-echo "${ECHO_T}$gl_cv_func_getcwd_null" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_getcwd_null" >&5
+$as_echo "$gl_cv_func_getcwd_null" >&6; }
 
-{ echo "$as_me:$LINENO: checking whether getcwd is declared" >&5
-echo $ECHO_N "checking whether getcwd is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether getcwd is declared" >&5
+$as_echo_n "checking whether getcwd is declared... " >&6; }
 if test "${ac_cv_have_decl_getcwd+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -12789,20 +14326,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_getcwd=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_getcwd=no
@@ -12810,9 +14348,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getcwd" >&5
-echo "${ECHO_T}$ac_cv_have_decl_getcwd" >&6; }
-if test $ac_cv_have_decl_getcwd = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_getcwd" >&5
+$as_echo "$ac_cv_have_decl_getcwd" >&6; }
+if test "x$ac_cv_have_decl_getcwd" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_GETCWD 1
@@ -12828,6 +14366,252 @@ _ACEOF
 fi
 
 
+{ $as_echo "$as_me:$LINENO: checking for stdbool.h that conforms to C99" >&5
+$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
+if test "${ac_cv_header_stdbool_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+          #include <stdbool.h>
+          #ifndef bool
+           "error: bool is not defined"
+          #endif
+          #ifndef false
+           "error: false is not defined"
+          #endif
+          #if false
+           "error: false is not 0"
+          #endif
+          #ifndef true
+           "error: true is not defined"
+          #endif
+          #if true != 1
+           "error: true is not 1"
+          #endif
+          #ifndef __bool_true_false_are_defined
+           "error: __bool_true_false_are_defined is not defined"
+          #endif
+
+          struct s { _Bool s: 1; _Bool t; } s;
+
+          char a[true == 1 ? 1 : -1];
+          char b[false == 0 ? 1 : -1];
+          char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+          char d[(bool) 0.5 == true ? 1 : -1];
+          bool e = &s;
+          char f[(_Bool) 0.0 == false ? 1 : -1];
+          char g[true];
+          char h[sizeof (_Bool)];
+          char i[sizeof s.t];
+          enum { j = false, k = true, l = false * true, m = true * 256 };
+          _Bool n[m];
+          char o[sizeof n == m * sizeof n[0] ? 1 : -1];
+          char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
+          #if defined __xlc__ || defined __GNUC__
+           /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
+              reported by James Lemley on 2005-10-05; see
+              http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
+              This test is not quite right, since xlc is allowed to
+              reject this program, as the initializer for xlcbug is
+              not one of the forms that C requires support for.
+              However, doing the test right would require a run-time
+              test, and that would make cross-compilation harder.
+              Let us hope that IBM fixes the xlc bug, and also adds
+              support for this kind of constant expression.  In the
+              meantime, this test will reject xlc, which is OK, since
+              our stdbool.h substitute should suffice.  We also test
+              this with GCC, where it should work, to detect more
+              quickly whether someone messes up the test in the
+              future.  */
+           char digs[] = "0123456789";
+           int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
+          #endif
+          /* Catch a bug in an HP-UX C compiler.  See
+             http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+             http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+           */
+          _Bool q = true;
+          _Bool *pq = &q;
+
+int
+main ()
+{
+
+          *pq |= q;
+          *pq |= ! q;
+          /* Refer to every declared value, to avoid compiler optimizations.  */
+          return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
+                  + !m + !n + !o + !p + !q + !pq);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_stdbool_h=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_header_stdbool_h=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdbool_h" >&5
+$as_echo "$ac_cv_header_stdbool_h" >&6; }
+   { $as_echo "$as_me:$LINENO: checking for _Bool" >&5
+$as_echo_n "checking for _Bool... " >&6; }
+if test "${ac_cv_type__Bool+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_type__Bool=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof (_Bool))
+       return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof ((_Bool)))
+         return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_type__Bool=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type__Bool" >&5
+$as_echo "$ac_cv_type__Bool" >&6; }
+if test "x$ac_cv_type__Bool" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE__BOOL 1
+_ACEOF
+
+
+fi
+
+   if test $ac_cv_header_stdbool_h = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STDBOOL_H 1
+_ACEOF
+
+   fi
+
+
+
+  # Define two additional variables used in the Makefile substitution.
+
+  if test "$ac_cv_header_stdbool_h" = yes; then
+    STDBOOL_H=''
+  else
+    STDBOOL_H='stdbool.h'
+  fi
+
+
+  if test "$ac_cv_type__Bool" = yes; then
+    HAVE__BOOL=1
+  else
+    HAVE__BOOL=0
+  fi
+
+
 
 
 
   : ${YACC='bison -y'}
 
 
-  { echo "$as_me:$LINENO: checking for compound literals" >&5
-echo $ECHO_N "checking for compound literals... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for compound literals" >&5
+$as_echo_n "checking for compound literals... " >&6; }
 if test "${gl_cv_compound_literals+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -12852,7 +14636,7 @@ int
 main ()
 {
 struct s t = (struct s) { 3, 4 };
-     if (t.i != 0) return 0;
+        if (t.i != 0) return 0;
   ;
   return 0;
 }
@@ -12863,20 +14647,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gl_cv_compound_literals=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gl_cv_compound_literals=no
@@ -12884,8 +14669,8 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_compound_literals" >&5
-echo "${ECHO_T}$gl_cv_compound_literals" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_compound_literals" >&5
+$as_echo "$gl_cv_compound_literals" >&6; }
   if test $gl_cv_compound_literals = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -12894,10 +14679,10 @@ _ACEOF
 
   fi
 
-{ echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5
-echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5
+$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
 if test "${ac_cv_struct_tm+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -12913,7 +14698,7 @@ main ()
 {
 struct tm tm;
                                     int *p = &tm.tm_sec;
-                                    return !p;
+                                    return !p;
   ;
   return 0;
 }
@@ -12924,20 +14709,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_struct_tm=time.h
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_struct_tm=sys/time.h
@@ -12945,8 +14731,8 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
-echo "${ECHO_T}$ac_cv_struct_tm" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
+$as_echo "$ac_cv_struct_tm" >&6; }
 if test $ac_cv_struct_tm = sys/time.h; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -12956,10 +14742,10 @@ _ACEOF
 fi
 
 
- { echo "$as_me:$LINENO: checking for struct tm.tm_gmtoff" >&5
-echo $ECHO_N "checking for struct tm.tm_gmtoff... $ECHO_C" >&6; }
+ { $as_echo "$as_me:$LINENO: checking for struct tm.tm_gmtoff" >&5
+$as_echo_n "checking for struct tm.tm_gmtoff... " >&6; }
 if test "${ac_cv_member_struct_tm_tm_gmtoff+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -12985,20 +14771,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_tm_tm_gmtoff=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -13025,20 +14812,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_tm_tm_gmtoff=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_member_struct_tm_tm_gmtoff=no
@@ -13049,9 +14837,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_tm_tm_gmtoff" >&5
-echo "${ECHO_T}$ac_cv_member_struct_tm_tm_gmtoff" >&6; }
-if test $ac_cv_member_struct_tm_tm_gmtoff = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_tm_tm_gmtoff" >&5
+$as_echo "$ac_cv_member_struct_tm_tm_gmtoff" >&6; }
+if test "x$ac_cv_member_struct_tm_tm_gmtoff" = x""yes; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_TM_GMTOFF 1
@@ -13060,10 +14848,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether getdelim is declared" >&5
-echo $ECHO_N "checking whether getdelim is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether getdelim is declared" >&5
+$as_echo_n "checking whether getdelim is declared... " >&6; }
 if test "${ac_cv_have_decl_getdelim+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -13089,20 +14877,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_getdelim=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_getdelim=no
@@ -13110,9 +14899,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getdelim" >&5
-echo "${ECHO_T}$ac_cv_have_decl_getdelim" >&6; }
-if test $ac_cv_have_decl_getdelim = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_getdelim" >&5
+$as_echo "$ac_cv_have_decl_getdelim" >&6; }
+if test "x$ac_cv_have_decl_getdelim" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_GETDELIM 1
@@ -13128,10 +14917,14 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether getline is declared" >&5
-echo $ECHO_N "checking whether getline is declared... $ECHO_C" >&6; }
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking whether getline is declared" >&5
+$as_echo_n "checking whether getline is declared... " >&6; }
 if test "${ac_cv_have_decl_getline+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -13157,20 +14950,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_getline=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_getline=no
@@ -13178,9 +14972,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getline" >&5
-echo "${ECHO_T}$ac_cv_have_decl_getline" >&6; }
-if test $ac_cv_have_decl_getline = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_getline" >&5
+$as_echo "$ac_cv_have_decl_getline" >&6; }
+if test "x$ac_cv_have_decl_getline" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_GETLINE 1
 
 
 
-  if test -z "$GETOPT_H"; then
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_getopt_h='<'getopt.h'>'
+     else
+       { $as_echo "$as_me:$LINENO: checking absolute name of <getopt.h>" >&5
+$as_echo_n "checking absolute name of <getopt.h>... " >&6; }
+if test "${gl_cv_next_getopt_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+          if test $ac_cv_header_getopt_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <getopt.h>
+
+_ACEOF
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_getopt_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/getopt.h#{
+                 s#.*"\(.*/getopt.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_getopt_h='<'getopt.h'>'
+          fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_getopt_h" >&5
+$as_echo "$gl_cv_next_getopt_h" >&6; }
+     fi
+     NEXT_GETOPT_H=$gl_cv_next_getopt_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'getopt.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_getopt_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_GETOPT_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_header_getopt_h = yes; then
+    HAVE_GETOPT_H=1
+  else
+    HAVE_GETOPT_H=0
+  fi
+
+
+  gl_replace_getopt=
+
+    if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
 
 for ac_header in getopt.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -13230,32 +15107,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -13269,51 +15147,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -13322,40 +15201,43 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 else
-  GETOPT_H=getopt.h
+  gl_replace_getopt=yes
 fi
 
 done
 
   fi
 
-  if test -z "$GETOPT_H"; then
+    if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
 
 for ac_func in getopt_long_only
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -13408,49 +15290,56 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
-  GETOPT_H=getopt.h
+  gl_replace_getopt=yes
 fi
 done
 
   fi
 
-      if test -z "$GETOPT_H"; then
-    { echo "$as_me:$LINENO: checking whether optreset is declared" >&5
-echo $ECHO_N "checking whether optreset is declared... $ECHO_C" >&6; }
+          if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+    { $as_echo "$as_me:$LINENO: checking whether optreset is declared" >&5
+$as_echo_n "checking whether optreset is declared... " >&6; }
 if test "${ac_cv_have_decl_optreset+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -13477,20 +15366,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_optreset=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_optreset=no
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_optreset" >&5
-echo "${ECHO_T}$ac_cv_have_decl_optreset" >&6; }
-if test $ac_cv_have_decl_optreset = yes; then
-  GETOPT_H=getopt.h
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_optreset" >&5
+$as_echo "$ac_cv_have_decl_optreset" >&6; }
+if test "x$ac_cv_have_decl_optreset" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_OPTRESET 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_OPTRESET 0
+_ACEOF
+
+
 fi
 
+
   fi
 
-      if test -z "$GETOPT_H"; then
-    { echo "$as_me:$LINENO: checking for working GNU getopt function" >&5
-echo $ECHO_N "checking for working GNU getopt function... $ECHO_C" >&6; }
-if test "${gl_cv_func_gnu_getopt+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+            if test -z "$gl_replace_getopt"; then
+    { $as_echo "$as_me:$LINENO: checking whether getopt is POSIX compatible" >&5
+$as_echo_n "checking whether getopt is POSIX compatible... " >&6; }
+if test "${gl_cv_func_getopt_posix+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
-  if test "$cross_compiling" = yes; then
-                        { echo "$as_me:$LINENO: checking whether getopt_clip is declared" >&5
-echo $ECHO_N "checking whether getopt_clip is declared... $ECHO_C" >&6; }
-if test "${ac_cv_have_decl_getopt_clip+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+                if test "$cross_compiling" = yes; then
+  case "$host_os" in
+             mingw*) gl_cv_func_getopt_posix="guessing no";;
+             *)      gl_cv_func_getopt_posix="guessing yes";;
+           esac
+
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -13524,53 +15428,148 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <getopt.h>
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if !HAVE_DECL_OPTRESET
+# define OPTIND_MIN 0
+#else
+# define OPTIND_MIN 1
+#endif
 
 int
 main ()
 {
-#ifndef getopt_clip
-  (void) getopt_clip;
-#endif
+  {
+    int argc = 0;
+    char *argv[10];
+    int c;
+
+    argv[argc++] = "program";
+    argv[argc++] = "-a";
+    argv[argc++] = "foo";
+    argv[argc++] = "bar";
+    argv[argc] = NULL;
+    optind = OPTIND_MIN;
+    opterr = 0;
+
+    c = getopt (argc, argv, "ab");
+    if (!(c == 'a'))
+      return 1;
+    c = getopt (argc, argv, "ab");
+    if (!(c == -1))
+      return 2;
+    if (!(optind == 2))
+      return 3;
+  }
+  /* Some internal state exists at this point.  */
+  {
+    int argc = 0;
+    char *argv[10];
+    int c;
+
+    argv[argc++] = "program";
+    argv[argc++] = "donald";
+    argv[argc++] = "-p";
+    argv[argc++] = "billy";
+    argv[argc++] = "duck";
+    argv[argc++] = "-a";
+    argv[argc++] = "bar";
+    argv[argc] = NULL;
+    optind = OPTIND_MIN;
+    opterr = 0;
+
+    c = getopt (argc, argv, "+abp:q:");
+    if (!(c == -1))
+      return 4;
+    if (!(strcmp (argv[0], "program") == 0))
+      return 5;
+    if (!(strcmp (argv[1], "donald") == 0))
+      return 6;
+    if (!(strcmp (argv[2], "-p") == 0))
+      return 7;
+    if (!(strcmp (argv[3], "billy") == 0))
+      return 8;
+    if (!(strcmp (argv[4], "duck") == 0))
+      return 9;
+    if (!(strcmp (argv[5], "-a") == 0))
+      return 10;
+    if (!(strcmp (argv[6], "bar") == 0))
+      return 11;
+    if (!(optind == 1))
+      return 12;
+  }
 
-  ;
   return 0;
 }
+
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_have_decl_getopt_clip=yes
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_getopt_posix=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_have_decl_getopt_clip=no
+( exit $ac_status )
+gl_cv_func_getopt_posix=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getopt_clip" >&5
-echo "${ECHO_T}$ac_cv_have_decl_getopt_clip" >&6; }
-if test $ac_cv_have_decl_getopt_clip = yes; then
-  gl_cv_func_gnu_getopt=no
-else
-  gl_cv_func_gnu_getopt=yes
+
+
+
 fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_getopt_posix" >&5
+$as_echo "$gl_cv_func_getopt_posix" >&6; }
+    case "$gl_cv_func_getopt_posix" in
+      *no) gl_replace_getopt=yes ;;
+    esac
+  fi
+
+  if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+    { $as_echo "$as_me:$LINENO: checking for working GNU getopt function" >&5
+$as_echo_n "checking for working GNU getopt function... " >&6; }
+if test "${gl_cv_func_getopt_gnu+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  # Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the
+       # optstring is necessary for programs like m4 that have POSIX-mandated
+       # semantics for supporting options interspersed with files.
+       # Also, since getopt_long is a GNU extension, we require optind=0.
+       gl_had_POSIXLY_CORRECT=${POSIXLY_CORRECT:+yes}
+       POSIXLY_CORRECT=1
+       export POSIXLY_CORRECT
+       if test "$cross_compiling" = yes; then
+           case $host_os:$ac_cv_have_decl_optreset in
+           *-gnu*:* | mingw*:*) gl_cv_func_getopt_gnu=no;;
+           *:yes)               gl_cv_func_getopt_gnu=no;;
+           *)                   gl_cv_func_getopt_gnu=yes;;
+         esac
 
 else
   cat >conftest.$ac_ext <<_ACEOF
@@ -13580,15 +15579,51 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <getopt.h>
-int
-main ()
-{
-
-            char *myargv[3];
-            myargv[0] = "conftest";
-            myargv[1] = "-+";
-            myargv[2] = 0;
-            return getopt (2, myargv, "+a") != '?';
+                           #include <stddef.h>
+                           #include <string.h>
+
+int
+main ()
+{
+
+             /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw,
+                and fails on MacOS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5,
+                OSF/1 5.1, Solaris 10.  */
+             {
+               char *myargv[3];
+               myargv[0] = "conftest";
+               myargv[1] = "-+";
+               myargv[2] = 0;
+               opterr = 0;
+               if (getopt (2, myargv, "+a") != '?')
+                 return 1;
+             }
+             /* This code succeeds on glibc 2.8, mingw,
+                and fails on MacOS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11,
+                IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x.  */
+             {
+               char *argv[] = { "program", "-p", "foo", "bar", NULL };
+
+               optind = 1;
+               if (getopt (4, argv, "p::") != 'p')
+                 return 2;
+               if (optarg != NULL)
+                 return 3;
+               if (getopt (4, argv, "p::") != -1)
+                 return 4;
+               if (optind != 2)
+                 return 5;
+             }
+             /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0.  */
+             {
+               char *argv[] = { "program", "foo", "-p", NULL };
+               optind = 0;
+               if (getopt (3, argv, "-p") != 1)
+                 return 6;
+               if (getopt (3, argv, "-p") != 'p')
+                 return 7;
+             }
+             return 0;
 
   ;
   return 0;
@@ -13600,38 +15635,45 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  gl_cv_func_gnu_getopt=yes
+  gl_cv_func_getopt_gnu=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-gl_cv_func_gnu_getopt=no
+gl_cv_func_getopt_gnu=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
+       if test "$gl_had_POSIXLY_CORRECT" != yes; then
+         $as_unset POSIXLY_CORRECT || test "${POSIXLY_CORRECT+set}" != set || { POSIXLY_CORRECT=; export POSIXLY_CORRECT; }
+       fi
+
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_gnu_getopt" >&5
-echo "${ECHO_T}$gl_cv_func_gnu_getopt" >&6; }
-    if test "$gl_cv_func_gnu_getopt" = "no"; then
-      GETOPT_H=getopt.h
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_getopt_gnu" >&5
+$as_echo "$gl_cv_func_getopt_gnu" >&6; }
+    if test "$gl_cv_func_getopt_gnu" = "no"; then
+      gl_replace_getopt=yes
     fi
   fi
 
@@ -13640,6 +15682,70 @@ echo "${ECHO_T}$gl_cv_func_gnu_getopt" >&6; }
 
 
 
+  if test -n "$gl_replace_getopt"; then
+
+
+
+  GETOPT_H=getopt.h
+
+cat >>confdefs.h <<\_ACEOF
+#define __GETOPT_PREFIX rpl_
+_ACEOF
+
+
+
+    GNULIB_UNISTD_H_GETOPT=1
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS getopt.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS getopt1.$ac_objext"
+
+
+
+
+
+
+
+
+
+fi
+
+
+
+
+
+
+
+
+  GNULIB_GETTIMEOFDAY=0;
+    HAVE_GETTIMEOFDAY=1;
+  HAVE_STRUCT_TIMEVAL=1;
+  HAVE_SYS_TIME_H=1;
+  REPLACE_GETTIMEOFDAY=0;
+
+
+
+
+
+
+
+
+
 
 
 
@@ -13655,14 +15761,14 @@ echo "${ECHO_T}$gl_cv_func_gnu_getopt" >&6; }
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_sys_time_h='<'sys/time.h'>'
      else
-       { echo "$as_me:$LINENO: checking absolute name of <sys/time.h>" >&5
-echo $ECHO_N "checking absolute name of <sys/time.h>... $ECHO_C" >&6; }
+       { $as_echo "$as_me:$LINENO: checking absolute name of <sys/time.h>" >&5
+$as_echo_n "checking absolute name of <sys/time.h>... " >&6; }
 if test "${gl_cv_next_sys_time_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-         if test $ac_cv_header_sys_time_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
+          if test $ac_cv_header_sys_time_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -13671,41 +15777,47 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <sys/time.h>
 
 _ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_sys_time_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/sys/time.h#{
-                s#.*"\(.*/sys/time.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_sys_time_h='<'sys/time.h'>'
-         fi
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_sys_time_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/sys/time.h#{
+                 s#.*"\(.*/sys/time.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_sys_time_h='<'sys/time.h'>'
+          fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_sys_time_h" >&5
-echo "${ECHO_T}$gl_cv_next_sys_time_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_sys_time_h" >&5
+$as_echo "$gl_cv_next_sys_time_h" >&6; }
      fi
      NEXT_SYS_TIME_H=$gl_cv_next_sys_time_h
 
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'sys/time.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_sys_time_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H=$gl_next_as_first_directive
 
 
 
-  if test $ac_cv_header_sys_time_h = yes; then
-    HAVE_SYS_TIME_H=1
-  else
+
+  if test $ac_cv_header_sys_time_h != yes; then
     HAVE_SYS_TIME_H=0
   fi
 
-
-  { echo "$as_me:$LINENO: checking for struct timeval" >&5
-echo $ECHO_N "checking for struct timeval... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for struct timeval" >&5
+$as_echo_n "checking for struct timeval... " >&6; }
 if test "${gl_cv_sys_struct_timeval+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -13714,9 +15826,9 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #if HAVE_SYS_TIME_H
-            #include <sys/time.h>
-           #endif
-           #include <time.h>
+             #include <sys/time.h>
+            #endif
+            #include <time.h>
 
 int
 main ()
@@ -13732,20 +15844,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gl_cv_sys_struct_timeval=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gl_cv_sys_struct_timeval=no
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_sys_struct_timeval" >&5
-echo "${ECHO_T}$gl_cv_sys_struct_timeval" >&6; }
-  if test $gl_cv_sys_struct_timeval = yes; then
-    HAVE_STRUCT_TIMEVAL=1
-  else
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_sys_struct_timeval" >&5
+$as_echo "$gl_cv_sys_struct_timeval" >&6; }
+  if test $gl_cv_sys_struct_timeval != yes; then
     HAVE_STRUCT_TIMEVAL=0
   fi
 
 
-    REPLACE_GETTIMEOFDAY=0
 
-  if test $HAVE_SYS_TIME_H = 0 || test $HAVE_STRUCT_TIMEVAL = 0; then
-    SYS_TIME_H=sys/time.h
-  else
-    SYS_TIME_H=
-  fi
+  for gl_func in gettimeofday; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:$LINENO: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#if HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
+#include <time.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_gl_Symbol=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_gl_Symbol=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+     as_val=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+
+      done
 
 
 
 
 
 
-  { echo "$as_me:$LINENO: checking for long long int" >&5
-echo $ECHO_N "checking for long long int... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for long long int" >&5
+$as_echo_n "checking for long long int... " >&6; }
 if test "${ac_cv_type_long_long_int+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 
@@ -13788,18 +15964,18 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 /* For now, do not test the preprocessor; as of 2007 there are too many
-        implementations with broken preprocessors.  Perhaps this can
-        be revisited in 2012.  In the meantime, code should not expect
-        #if to work with literals wider than 32 bits.  */
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
       /* Test literals.  */
       long long int ll = 9223372036854775807ll;
       long long int nll = -9223372036854775807LL;
       unsigned long long int ull = 18446744073709551615ULL;
       /* Test constant expressions.   */
       typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
-                    ? 1 : -1)];
+                     ? 1 : -1)];
       typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
-                    ? 1 : -1)];
+                     ? 1 : -1)];
       int i = 63;
 int
 main ()
@@ -13808,9 +15984,9 @@ main ()
       long long int llmax = 9223372036854775807ll;
       unsigned long long int ullmax = 18446744073709551615ull;
       return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
-             | (llmax / ll) | (llmax % ll)
-             | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
-             | (ullmax / ull) | (ullmax % ull));
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));
   ;
   return 0;
 }
@@ -13822,19 +15998,22 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-                       if test "$cross_compiling" = yes; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+                          if test "$cross_compiling" = yes; then
   ac_cv_type_long_long_int=yes
 else
   cat >conftest.$ac_ext <<_ACEOF
@@ -13844,25 +16023,25 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <limits.h>
-              #ifndef LLONG_MAX
-              # define HALF \
-                       (1LL << (sizeof (long long int) * CHAR_BIT - 2))
-              # define LLONG_MAX (HALF - 1 + HALF)
-              #endif
+               #ifndef LLONG_MAX
+               # define HALF \
+                        (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+               # define LLONG_MAX (HALF - 1 + HALF)
+               #endif
 int
 main ()
 {
 long long int n = 1;
-              int i;
-              for (i = 0; ; i++)
-                {
-                  long long int m = n << i;
-                  if (m >> i != n)
-                    return 1;
-                  if (LLONG_MAX / 2 < m)
-                    break;
-                }
-              return 0;
+               int i;
+               for (i = 0; ; i++)
+                 {
+                   long long int m = n << i;
+                   if (m >> i != n)
+                     return 1;
+                   if (LLONG_MAX / 2 < m)
+                     break;
+                 }
+               return 0;
   ;
   return 0;
 }
@@ -13873,45 +16052,49 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_type_long_long_int=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 ac_cv_type_long_long_int=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_type_long_long_int=no
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_long_long_int" >&5
-echo "${ECHO_T}$ac_cv_type_long_long_int" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_long_long_int" >&5
+$as_echo "$ac_cv_type_long_long_int" >&6; }
   if test $ac_cv_type_long_long_int = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -13921,10 +16104,10 @@ _ACEOF
   fi
 
 
-  { echo "$as_me:$LINENO: checking for unsigned long long int" >&5
-echo $ECHO_N "checking for unsigned long long int... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for unsigned long long int" >&5
+$as_echo_n "checking for unsigned long long int... " >&6; }
 if test "${ac_cv_type_unsigned_long_long_int+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 
@@ -13934,18 +16117,18 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 /* For now, do not test the preprocessor; as of 2007 there are too many
-        implementations with broken preprocessors.  Perhaps this can
-        be revisited in 2012.  In the meantime, code should not expect
-        #if to work with literals wider than 32 bits.  */
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
       /* Test literals.  */
       long long int ll = 9223372036854775807ll;
       long long int nll = -9223372036854775807LL;
       unsigned long long int ull = 18446744073709551615ULL;
       /* Test constant expressions.   */
       typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
-                    ? 1 : -1)];
+                     ? 1 : -1)];
       typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
-                    ? 1 : -1)];
+                     ? 1 : -1)];
       int i = 63;
 int
 main ()
@@ -13954,9 +16137,9 @@ main ()
       long long int llmax = 9223372036854775807ll;
       unsigned long long int ullmax = 18446744073709551615ull;
       return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
-             | (llmax / ll) | (llmax % ll)
-             | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
-             | (ullmax / ull) | (ullmax % ull));
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));
   ;
   return 0;
 }
@@ -13968,31 +16151,35 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   ac_cv_type_unsigned_long_long_int=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_type_unsigned_long_long_int=no
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long_long_int" >&5
-echo "${ECHO_T}$ac_cv_type_unsigned_long_long_int" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long_long_int" >&5
+$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; }
   if test $ac_cv_type_unsigned_long_long_int = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -14025,13 +16212,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -14059,7 +16247,7 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
      done
 
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -14124,14 +16312,14 @@ _ACEOF
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_stdint_h='<'stdint.h'>'
      else
-       { echo "$as_me:$LINENO: checking absolute name of <stdint.h>" >&5
-echo $ECHO_N "checking absolute name of <stdint.h>... $ECHO_C" >&6; }
+       { $as_echo "$as_me:$LINENO: checking absolute name of <stdint.h>" >&5
+$as_echo_n "checking absolute name of <stdint.h>... " >&6; }
 if test "${gl_cv_next_stdint_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-         if test $ac_cv_header_stdint_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
+          if test $ac_cv_header_stdint_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -14140,27 +16328,36 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <stdint.h>
 
 _ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_stdint_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/stdint.h#{
-                s#.*"\(.*/stdint.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_stdint_h='<'stdint.h'>'
-         fi
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_stdint_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/stdint.h#{
+                 s#.*"\(.*/stdint.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_stdint_h='<'stdint.h'>'
+          fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_stdint_h" >&5
-echo "${ECHO_T}$gl_cv_next_stdint_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_stdint_h" >&5
+$as_echo "$gl_cv_next_stdint_h" >&6; }
      fi
      NEXT_STDINT_H=$gl_cv_next_stdint_h
 
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stdint.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stdint_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive
+
 
 
   if test $ac_cv_header_stdint_h = yes; then
@@ -14171,10 +16368,10 @@ echo "${ECHO_T}$gl_cv_next_stdint_h" >&6; }
 
 
     if test $ac_cv_header_stdint_h = yes; then
-    { echo "$as_me:$LINENO: checking whether stdint.h conforms to C99" >&5
-echo $ECHO_N "checking whether stdint.h conforms to C99... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking whether stdint.h conforms to C99" >&5
+$as_echo_n "checking whether stdint.h conforms to C99... " >&6; }
 if test "${gl_cv_header_working_stdint_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   gl_cv_header_working_stdint_h=no
        cat >conftest.$ac_ext <<_ACEOF
@@ -14350,29 +16547,150 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
+                                                    if test "$cross_compiling" = yes; then
+                 gl_cv_header_working_stdint_h=yes
+
+else
+  cat >conftest.$ac_ext <<_ACEOF
+
+            /* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
+#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+
+#include <stdio.h>
+#include <string.h>
+#define MVAL(macro) MVAL1(macro)
+#define MVAL1(expression) #expression
+static const char *macro_values[] =
+  {
+#ifdef INT8_MAX
+    MVAL (INT8_MAX),
+#endif
+#ifdef INT16_MAX
+    MVAL (INT16_MAX),
+#endif
+#ifdef INT32_MAX
+    MVAL (INT32_MAX),
+#endif
+#ifdef INT64_MAX
+    MVAL (INT64_MAX),
+#endif
+#ifdef UINT8_MAX
+    MVAL (UINT8_MAX),
+#endif
+#ifdef UINT16_MAX
+    MVAL (UINT16_MAX),
+#endif
+#ifdef UINT32_MAX
+    MVAL (UINT32_MAX),
+#endif
+#ifdef UINT64_MAX
+    MVAL (UINT64_MAX),
+#endif
+    NULL
+  };
+
+int
+main ()
+{
+
+  const char **mv;
+  for (mv = macro_values; *mv != NULL; mv++)
+    {
+      const char *value = *mv;
+      /* Test whether it looks like a cast expression.  */
+      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
+          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
+          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
+          || strncmp (value, "((int)"/*)*/, 6) == 0
+          || strncmp (value, "((signed short)"/*)*/, 15) == 0
+          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
+        return 1;
+    }
+  return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   gl_cv_header_working_stdint_h=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+
+else
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_header_working_stdint_h" >&5
-echo "${ECHO_T}$gl_cv_header_working_stdint_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_working_stdint_h" >&5
+$as_echo "$gl_cv_header_working_stdint_h" >&6; }
   fi
   if test "$gl_cv_header_working_stdint_h" = yes; then
     STDINT_H=
@@ -14381,20 +16699,21 @@ echo "${ECHO_T}$gl_cv_header_working_stdint_h" >&6; }
 
 for ac_header in sys/inttypes.h sys/bitypes.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -14410,32 +16729,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -14449,51 +16769,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -14502,21 +16823,24 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -14551,10 +16875,10 @@ done
 
 
   for gltype in ptrdiff_t size_t ; do
-    { echo "$as_me:$LINENO: checking for bit size of $gltype" >&5
-echo $ECHO_N "checking for bit size of $gltype... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for bit size of $gltype" >&5
+$as_echo_n "checking for bit size of $gltype... " >&6; }
 if { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then
   # Depending upon the size, compute the lo and hi bounds.
@@ -14592,13 +16916,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -14639,20 +16964,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo=`expr $ac_mid + 1`
@@ -14666,7 +16992,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -14703,13 +17029,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -14750,20 +17077,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_hi=`expr '(' $ac_mid ')' - 1`
@@ -14777,7 +17105,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo= ac_hi=
@@ -14824,20 +17152,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo=`expr '(' $ac_mid ')' + 1`
@@ -14884,15 +17213,17 @@ main ()
       long int i = longval ();
       if (i != (sizeof ($gltype) * CHAR_BIT))
        return 1;
-      fprintf (f, "%ld\n", i);
+      fprintf (f, "%ld", i);
     }
   else
     {
       unsigned long int i = ulongval ();
       if (i != (sizeof ($gltype) * CHAR_BIT))
        return 1;
-      fprintf (f, "%lu\n", i);
+      fprintf (f, "%lu", i);
     }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
   return ferror (f) || fclose (f) != 0;
 
   ;
@@ -14905,38 +17236,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   result=`cat conftest.val`
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 result=unknown
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
        eval gl_cv_bitsizeof_${gltype}=\$result
 
 fi
-ac_res=`eval echo '${'gl_cv_bitsizeof_${gltype}'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'gl_cv_bitsizeof_${gltype}'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
     eval result=\$gl_cv_bitsizeof_${gltype}
     if test $result = unknown; then
                                                 result=0
@@ -14957,10 +17292,10 @@ _ACEOF
 
 
   for gltype in sig_atomic_t wchar_t wint_t ; do
-    { echo "$as_me:$LINENO: checking for bit size of $gltype" >&5
-echo $ECHO_N "checking for bit size of $gltype... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for bit size of $gltype" >&5
+$as_echo_n "checking for bit size of $gltype... " >&6; }
 if { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then
   # Depending upon the size, compute the lo and hi bounds.
@@ -14998,13 +17333,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -15045,20 +17381,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo=`expr $ac_mid + 1`
@@ -15072,7 +17409,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -15109,13 +17446,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -15156,20 +17494,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_hi=`expr '(' $ac_mid ')' - 1`
@@ -15183,7 +17522,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo= ac_hi=
@@ -15230,20 +17569,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo=`expr '(' $ac_mid ')' + 1`
@@ -15290,15 +17630,17 @@ main ()
       long int i = longval ();
       if (i != (sizeof ($gltype) * CHAR_BIT))
        return 1;
-      fprintf (f, "%ld\n", i);
+      fprintf (f, "%ld", i);
     }
   else
     {
       unsigned long int i = ulongval ();
       if (i != (sizeof ($gltype) * CHAR_BIT))
        return 1;
-      fprintf (f, "%lu\n", i);
+      fprintf (f, "%lu", i);
     }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
   return ferror (f) || fclose (f) != 0;
 
   ;
@@ -15311,38 +17653,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   result=`cat conftest.val`
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 result=unknown
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
        eval gl_cv_bitsizeof_${gltype}=\$result
 
 fi
-ac_res=`eval echo '${'gl_cv_bitsizeof_${gltype}'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'gl_cv_bitsizeof_${gltype}'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
     eval result=\$gl_cv_bitsizeof_${gltype}
     if test $result = unknown; then
                                                 result=0
@@ -15362,10 +17708,10 @@ _ACEOF
 
 
   for gltype in sig_atomic_t wchar_t wint_t ; do
-    { echo "$as_me:$LINENO: checking whether $gltype is signed" >&5
-echo $ECHO_N "checking whether $gltype is signed... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking whether $gltype is signed" >&5
+$as_echo_n "checking whether $gltype is signed... " >&6; }
 if { as_var=gl_cv_type_${gltype}_signed; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -15399,20 +17745,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   result=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        result=no
@@ -15422,9 +17769,10 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
        eval gl_cv_type_${gltype}_signed=\$result
 
 fi
-ac_res=`eval echo '${'gl_cv_type_${gltype}_signed'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'gl_cv_type_${gltype}_signed'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
     eval result=\$gl_cv_type_${gltype}_signed
     GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
     if test "$result" = yes; then
@@ -15447,10 +17795,10 @@ _ACEOF
 
 
   for gltype in ptrdiff_t size_t ; do
-    { echo "$as_me:$LINENO: checking for $gltype integer literal suffix" >&5
-echo $ECHO_N "checking for $gltype integer literal suffix... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for $gltype integer literal suffix" >&5
+$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
 if { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval gl_cv_type_${gltype}_suffix=no
        eval result=\$gl_cv_type_${gltype}_signed
@@ -15462,12 +17810,12 @@ else
        for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
          case $glsuf in
            '')  gltype1='int';;
-           l)  gltype1='long int';;
-           ll) gltype1='long long int';;
-           i64)        gltype1='__int64';;
-           u)  gltype1='unsigned int';;
-           ul) gltype1='unsigned long int';;
-           ull)        gltype1='unsigned long long int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
            ui64)gltype1='unsigned __int64';;
          esac
          cat >conftest.$ac_ext <<_ACEOF
@@ -15503,20 +17851,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   eval gl_cv_type_${gltype}_suffix=\$glsuf
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -15527,9 +17876,10 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
          test "$result" != no && break
        done
 fi
-ac_res=`eval echo '${'gl_cv_type_${gltype}_suffix'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'gl_cv_type_${gltype}_suffix'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
     GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
     eval result=\$gl_cv_type_${gltype}_suffix
     test "$result" = no && result=
@@ -15548,10 +17898,10 @@ _ACEOF
 
 
   for gltype in sig_atomic_t wchar_t wint_t ; do
-    { echo "$as_me:$LINENO: checking for $gltype integer literal suffix" >&5
-echo $ECHO_N "checking for $gltype integer literal suffix... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for $gltype integer literal suffix" >&5
+$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
 if { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval gl_cv_type_${gltype}_suffix=no
        eval result=\$gl_cv_type_${gltype}_signed
@@ -15563,12 +17913,12 @@ else
        for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
          case $glsuf in
            '')  gltype1='int';;
-           l)  gltype1='long int';;
-           ll) gltype1='long long int';;
-           i64)        gltype1='__int64';;
-           u)  gltype1='unsigned int';;
-           ul) gltype1='unsigned long int';;
-           ull)        gltype1='unsigned long long int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
            ui64)gltype1='unsigned __int64';;
          esac
          cat >conftest.$ac_ext <<_ACEOF
@@ -15604,20 +17954,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   eval gl_cv_type_${gltype}_suffix=\$glsuf
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -15628,9 +17979,10 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
          test "$result" != no && break
        done
 fi
-ac_res=`eval echo '${'gl_cv_type_${gltype}_suffix'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'gl_cv_type_${gltype}_suffix'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
     GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
     eval result=\$gl_cv_type_${gltype}_suffix
     test "$result" = no && result=
@@ -15651,20 +18003,21 @@ _ACEOF
 
 for ac_header in inttypes.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -15680,32 +18033,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -15719,51 +18073,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -15772,21 +18127,24 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 done
 
   if test $ac_cv_header_inttypes_h = yes; then
-    { echo "$as_me:$LINENO: checking whether the inttypes.h PRIxNN macros are broken" >&5
-echo $ECHO_N "checking whether the inttypes.h PRIxNN macros are broken... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking whether the inttypes.h PRIxNN macros are broken" >&5
+$as_echo_n "checking whether the inttypes.h PRIxNN macros are broken... " >&6; }
 if test "${gt_cv_inttypes_pri_broken+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
         cat >conftest.$ac_ext <<_ACEOF
@@ -15825,20 +18183,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gt_cv_inttypes_pri_broken=no
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gt_cv_inttypes_pri_broken=yes
@@ -15847,8 +18206,8 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_inttypes_pri_broken" >&5
-echo "${ECHO_T}$gt_cv_inttypes_pri_broken" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_inttypes_pri_broken" >&5
+$as_echo "$gt_cv_inttypes_pri_broken" >&6; }
   fi
   if test "$gt_cv_inttypes_pri_broken" = yes; then
 
@@ -15862,10 +18221,12 @@ _ACEOF
   fi
 
 
-{ echo "$as_me:$LINENO: checking whether imaxabs is declared" >&5
-echo $ECHO_N "checking whether imaxabs is declared... $ECHO_C" >&6; }
+
+
+{ $as_echo "$as_me:$LINENO: checking whether imaxabs is declared" >&5
+$as_echo_n "checking whether imaxabs is declared... " >&6; }
 if test "${ac_cv_have_decl_imaxabs+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -15891,20 +18252,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_imaxabs=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_imaxabs=no
@@ -15912,9 +18274,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_imaxabs" >&5
-echo "${ECHO_T}$ac_cv_have_decl_imaxabs" >&6; }
-if test $ac_cv_have_decl_imaxabs = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_imaxabs" >&5
+$as_echo "$ac_cv_have_decl_imaxabs" >&6; }
+if test "x$ac_cv_have_decl_imaxabs" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_IMAXABS 1
@@ -15930,10 +18292,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether imaxdiv is declared" >&5
-echo $ECHO_N "checking whether imaxdiv is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether imaxdiv is declared" >&5
+$as_echo_n "checking whether imaxdiv is declared... " >&6; }
 if test "${ac_cv_have_decl_imaxdiv+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -15959,20 +18321,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_imaxdiv=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_imaxdiv=no
@@ -15980,9 +18343,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_imaxdiv" >&5
-echo "${ECHO_T}$ac_cv_have_decl_imaxdiv" >&6; }
-if test $ac_cv_have_decl_imaxdiv = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_imaxdiv" >&5
+$as_echo "$ac_cv_have_decl_imaxdiv" >&6; }
+if test "x$ac_cv_have_decl_imaxdiv" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_IMAXDIV 1
@@ -15998,10 +18361,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether strtoimax is declared" >&5
-echo $ECHO_N "checking whether strtoimax is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether strtoimax is declared" >&5
+$as_echo_n "checking whether strtoimax is declared... " >&6; }
 if test "${ac_cv_have_decl_strtoimax+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -16027,20 +18390,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_strtoimax=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_strtoimax=no
@@ -16048,9 +18412,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strtoimax" >&5
-echo "${ECHO_T}$ac_cv_have_decl_strtoimax" >&6; }
-if test $ac_cv_have_decl_strtoimax = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strtoimax" >&5
+$as_echo "$ac_cv_have_decl_strtoimax" >&6; }
+if test "x$ac_cv_have_decl_strtoimax" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_STRTOIMAX 1
@@ -16066,10 +18430,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether strtoumax is declared" >&5
-echo $ECHO_N "checking whether strtoumax is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether strtoumax is declared" >&5
+$as_echo_n "checking whether strtoumax is declared... " >&6; }
 if test "${ac_cv_have_decl_strtoumax+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -16095,20 +18459,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_strtoumax=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_strtoumax=no
@@ -16116,9 +18481,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strtoumax" >&5
-echo "${ECHO_T}$ac_cv_have_decl_strtoumax" >&6; }
-if test $ac_cv_have_decl_strtoumax = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strtoumax" >&5
+$as_echo "$ac_cv_have_decl_strtoumax" >&6; }
+if test "x$ac_cv_have_decl_strtoumax" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_STRTOUMAX 1
   HAVE_DECL_STRTOUMAX=1;
 
 
+  GNULIB_NL_LANGINFO=0;
+    HAVE_NL_LANGINFO=1;
+  REPLACE_NL_LANGINFO=0;
+
+
+
+
 
 
-    { echo "$as_me:$LINENO: checking whether we are using the GNU C Library 2.1 or newer" >&5
-echo $ECHO_N "checking whether we are using the GNU C Library 2.1 or newer... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking whether we are using the GNU C Library 2.1 or newer" >&5
+$as_echo_n "checking whether we are using the GNU C Library 2.1 or newer... " >&6; }
 if test "${ac_cv_gnu_library_2_1+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -16178,26 +18550,116 @@ rm -f conftest*
 
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_gnu_library_2_1" >&5
-echo "${ECHO_T}$ac_cv_gnu_library_2_1" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_gnu_library_2_1" >&5
+$as_echo "$ac_cv_gnu_library_2_1" >&6; }
 
     GLIBC21="$ac_cv_gnu_library_2_1"
 
 
 
-  GNULIB_LCHMOD=0;
-  GNULIB_LSTAT=0;
-    HAVE_LCHMOD=1;
-  REPLACE_LSTAT=0;
-  REPLACE_MKDIR=0;
 
+{ $as_echo "$as_me:$LINENO: checking whether lstat dereferences a symlink specified with a trailing slash" >&5
+$as_echo_n "checking whether lstat dereferences a symlink specified with a trailing slash... " >&6; }
+if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  rm -f conftest.sym conftest.file
+echo >conftest.file
+if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_lstat_dereferences_slashed_symlink=no
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+struct stat sbuf;
+     /* Linux will dereference the symlink and fail.
+       That is better in the sense that it means we will not
+       have to compile and use the lstat wrapper.  */
+     return lstat ("conftest.sym/", &sbuf) == 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_lstat_dereferences_slashed_symlink=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_lstat_dereferences_slashed_symlink=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
 
 
+else
+  # If the `ln -s' command failed, then we probably don't even
+  # have an lstat function.
+  ac_cv_func_lstat_dereferences_slashed_symlink=no
+fi
+rm -f conftest.sym conftest.file
 
-  { echo "$as_me:$LINENO: checking whether malloc, realloc, calloc are POSIX compliant" >&5
-echo $ECHO_N "checking whether malloc, realloc, calloc are POSIX compliant... $ECHO_C" >&6; }
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5
+$as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; }
+
+test $ac_cv_func_lstat_dereferences_slashed_symlink = yes &&
+
+cat >>confdefs.h <<_ACEOF
+#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1
+_ACEOF
+
+
+if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS lstat.$ac_objext"
+
+fi
+
+
+  { $as_echo "$as_me:$LINENO: checking whether malloc, realloc, calloc are POSIX compliant" >&5
+$as_echo_n "checking whether malloc, realloc, calloc are POSIX compliant... " >&6; }
 if test "${gl_cv_func_malloc_posix+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
                         cat >conftest.$ac_ext <<_ACEOF
@@ -16224,20 +18686,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gl_cv_func_malloc_posix=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gl_cv_func_malloc_posix=no
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_malloc_posix" >&5
-echo "${ECHO_T}$gl_cv_func_malloc_posix" >&6; }
-
-
-  GNULIB_MALLOC_POSIX=0;
-  GNULIB_REALLOC_POSIX=0;
-  GNULIB_CALLOC_POSIX=0;
-  GNULIB_ATOLL=0;
-  GNULIB_GETLOADAVG=0;
-  GNULIB_GETSUBOPT=0;
-  GNULIB_MKDTEMP=0;
-  GNULIB_MKSTEMP=0;
-  GNULIB_PUTENV=0;
-  GNULIB_RANDOM_R=0;
-  GNULIB_RPMATCH=0;
-  GNULIB_SETENV=0;
-  GNULIB_STRTOD=0;
-  GNULIB_STRTOLL=0;
-  GNULIB_STRTOULL=0;
-  GNULIB_UNSETENV=0;
-    HAVE_ATOLL=1;
-  HAVE_CALLOC_POSIX=1;
-  HAVE_GETSUBOPT=1;
-  HAVE_MALLOC_POSIX=1;
-  HAVE_MKDTEMP=1;
-  HAVE_REALLOC_POSIX=1;
-  HAVE_RANDOM_R=1;
-  HAVE_RPMATCH=1;
-  HAVE_SETENV=1;
-  HAVE_STRTOD=1;
-  HAVE_STRTOLL=1;
-  HAVE_STRTOULL=1;
-  HAVE_STRUCT_RANDOM_DATA=1;
-  HAVE_SYS_LOADAVG_H=0;
-  HAVE_UNSETENV=1;
-  HAVE_DECL_GETLOADAVG=1;
-  REPLACE_MKSTEMP=0;
-  REPLACE_PUTENV=0;
-  REPLACE_STRTOD=0;
-  VOID_UNSETENV=0;
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_malloc_posix" >&5
+$as_echo "$gl_cv_func_malloc_posix" >&6; }
 
 
 
 for ac_header in stdlib.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -16320,32 +18746,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -16359,51 +18786,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -16412,31 +18840,34 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 
 done
 
-{ echo "$as_me:$LINENO: checking for GNU libc compatible malloc" >&5
-echo $ECHO_N "checking for GNU libc compatible malloc... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for GNU libc compatible malloc" >&5
+$as_echo_n "checking for GNU libc compatible malloc... " >&6; }
 if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then
   ac_cv_func_malloc_0_nonnull=no
@@ -16467,36 +18898,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_func_malloc_0_nonnull=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 ac_cv_func_malloc_0_nonnull=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_malloc_0_nonnull" >&5
-echo "${ECHO_T}$ac_cv_func_malloc_0_nonnull" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_malloc_0_nonnull" >&5
+$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; }
 if test $ac_cv_func_malloc_0_nonnull = yes; then
   gl_cv_func_malloc_0_nonnull=1
 else
@@ -16517,10 +18951,10 @@ _ACEOF
 
 
 
-  { echo "$as_me:$LINENO: checking for a traditional japanese locale" >&5
-echo $ECHO_N "checking for a traditional japanese locale... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for a traditional japanese locale" >&5
+$as_echo_n "checking for a traditional japanese locale... " >&6; }
 if test "${gt_cv_locale_ja+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
     cat >conftest.$ac_ext <<_ACEOF
@@ -16581,7 +19015,7 @@ _ACEOF
     if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && test -s conftest$ac_exeext; then
       # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
       # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the
@@ -16623,17 +19057,116 @@ _ACEOF
     rm -fr conftest*
 
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_locale_ja" >&5
-echo "${ECHO_T}$gt_cv_locale_ja" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_ja" >&5
+$as_echo "$gt_cv_locale_ja" >&6; }
   LOCALE_JA=$gt_cv_locale_ja
 
 
 
 
-  { echo "$as_me:$LINENO: checking for a french Unicode locale" >&5
-echo $ECHO_N "checking for a french Unicode locale... $ECHO_C" >&6; }
+
+  { $as_echo "$as_me:$LINENO: checking for a transitional chinese locale" >&5
+$as_echo_n "checking for a transitional chinese locale... " >&6; }
+if test "${gt_cv_locale_zh_CN+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+  const char *p;
+  /* Check whether the given locale name is recognized by the system.  */
+  if (setlocale (LC_ALL, "") == NULL) return 1;
+  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+     On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+     some unit tests fail.  */
+#if HAVE_LANGINFO_CODESET
+  {
+    const char *cs = nl_langinfo (CODESET);
+    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
+      return 1;
+  }
+#endif
+#ifdef __CYGWIN__
+  /* On Cygwin, avoid locale names without encoding suffix, because the
+     locale_charset() function relies on the encoding suffix.  Note that
+     LC_ALL is set on the command line.  */
+  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+#endif
+  /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+     This excludes the UTF-8 encoding.  */
+  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+  if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+  for (p = buf; *p != '\0'; p++)
+    if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+      return 1;
+  /* Check whether a typical GB18030 multibyte sequence is recognized as a
+     single wide character.  This excludes the GB2312 and GBK encodings.  */
+  if (mblen ("\203\062\332\066", 5) != 4)
+    return 1;
+  return 0;
+}
+
+_ACEOF
+    if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest$ac_exeext; then
+      # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+      # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the
+      # configure script would override the LC_ALL setting. Likewise for
+      # LC_CTYPE, which is also set at the beginning of the configure script.
+      # Test for the locale name without encoding suffix.
+      if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+        gt_cv_locale_zh_CN=zh_CN
+      else
+        # Test for the locale name with explicit encoding suffix.
+        if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+          gt_cv_locale_zh_CN=zh_CN.GB18030
+        else
+          # None found.
+          gt_cv_locale_zh_CN=none
+        fi
+      fi
+    else
+      # If there was a link error, due to mblen(), the system is so old that
+      # it certainly doesn't have a chinese locale.
+      gt_cv_locale_zh_CN=none
+    fi
+    rm -fr conftest*
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_zh_CN" >&5
+$as_echo "$gt_cv_locale_zh_CN" >&6; }
+  LOCALE_ZH_CN=$gt_cv_locale_zh_CN
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking for a french Unicode locale" >&5
+$as_echo_n "checking for a french Unicode locale... " >&6; }
 if test "${gt_cv_locale_fr_utf8+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
     cat >conftest.$ac_ext <<_ACEOF
@@ -16697,7 +19230,7 @@ _ACEOF
     if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && test -s conftest$ac_exeext; then
       # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
       # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the
@@ -16724,115 +19257,972 @@ _ACEOF
     rm -fr conftest*
 
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_locale_fr_utf8" >&5
-echo "${ECHO_T}$gt_cv_locale_fr_utf8" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr_utf8" >&5
+$as_echo "$gt_cv_locale_fr_utf8" >&6; }
   LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
 
 
 
+  GNULIB_MEMCHR=0;
+  GNULIB_MEMMEM=0;
+  GNULIB_MEMPCPY=0;
+  GNULIB_MEMRCHR=0;
+  GNULIB_RAWMEMCHR=0;
+  GNULIB_STPCPY=0;
+  GNULIB_STPNCPY=0;
+  GNULIB_STRCHRNUL=0;
+  GNULIB_STRDUP=0;
+  GNULIB_STRNDUP=0;
+  GNULIB_STRNLEN=0;
+  GNULIB_STRPBRK=0;
+  GNULIB_STRSEP=0;
+  GNULIB_STRSTR=0;
+  GNULIB_STRCASESTR=0;
+  GNULIB_STRTOK_R=0;
+  GNULIB_MBSLEN=0;
+  GNULIB_MBSNLEN=0;
+  GNULIB_MBSCHR=0;
+  GNULIB_MBSRCHR=0;
+  GNULIB_MBSSTR=0;
+  GNULIB_MBSCASECMP=0;
+  GNULIB_MBSNCASECMP=0;
+  GNULIB_MBSPCASECMP=0;
+  GNULIB_MBSCASESTR=0;
+  GNULIB_MBSCSPN=0;
+  GNULIB_MBSPBRK=0;
+  GNULIB_MBSSPN=0;
+  GNULIB_MBSSEP=0;
+  GNULIB_MBSTOK_R=0;
+  GNULIB_STRERROR=0;
+  GNULIB_STRSIGNAL=0;
+  GNULIB_STRVERSCMP=0;
+  HAVE_MBSLEN=0;
+    HAVE_DECL_MEMMEM=1;
+  HAVE_MEMPCPY=1;
+  HAVE_DECL_MEMRCHR=1;
+  HAVE_RAWMEMCHR=1;
+  HAVE_STPCPY=1;
+  HAVE_STPNCPY=1;
+  HAVE_STRCHRNUL=1;
+  HAVE_DECL_STRDUP=1;
+  HAVE_DECL_STRNDUP=1;
+  HAVE_DECL_STRNLEN=1;
+  HAVE_STRPBRK=1;
+  HAVE_STRSEP=1;
+  HAVE_STRCASESTR=1;
+  HAVE_DECL_STRTOK_R=1;
+  HAVE_DECL_STRERROR=1;
+  HAVE_DECL_STRSIGNAL=1;
+  HAVE_STRVERSCMP=1;
+  REPLACE_MEMCHR=0;
+  REPLACE_MEMMEM=0;
+  REPLACE_STRDUP=0;
+  REPLACE_STRSTR=0;
+  REPLACE_STRCASESTR=0;
+  REPLACE_STRERROR=0;
+  REPLACE_STRNDUP=0;
+  REPLACE_STRSIGNAL=0;
+  REPLACE_STRTOK_R=0;
+  UNDEFINE_STRTOK_R=0;
+
+
+  { $as_echo "$as_me:$LINENO: checking whether mbrtowc and mbstate_t are properly declared" >&5
+$as_echo_n "checking whether mbrtowc and mbstate_t are properly declared... " >&6; }
+if test "${ac_cv_func_mbrtowc+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <wchar.h>
+int
+main ()
+{
+wchar_t wc;
+             char const s[] = "";
+             size_t n = 1;
+             mbstate_t state;
+             return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_func_mbrtowc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_mbrtowc=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_mbrtowc" >&5
+$as_echo "$ac_cv_func_mbrtowc" >&6; }
+  if test $ac_cv_func_mbrtowc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MBRTOWC 1
+_ACEOF
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+  # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it
+  # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is
+  # irrelevant for anonymous mappings.
+  { $as_echo "$as_me:$LINENO: checking for mmap" >&5
+$as_echo_n "checking for mmap... " >&6; }
+if test "${ac_cv_func_mmap+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define mmap to an innocuous variant, in case <limits.h> declares mmap.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define mmap innocuous_mmap
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char mmap (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef mmap
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char mmap ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_mmap || defined __stub___mmap
+choke me
+#endif
+
+int
+main ()
+{
+return mmap ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_func_mmap=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_func_mmap=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_mmap" >&5
+$as_echo "$ac_cv_func_mmap" >&6; }
+if test "x$ac_cv_func_mmap" = x""yes; then
+  gl_have_mmap=yes
+else
+  gl_have_mmap=no
+fi
+
+
+  # Try to allow MAP_ANONYMOUS.
+  gl_have_mmap_anonymous=no
+  if test $gl_have_mmap = yes; then
+    { $as_echo "$as_me:$LINENO: checking for MAP_ANONYMOUS" >&5
+$as_echo_n "checking for MAP_ANONYMOUS... " >&6; }
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <sys/mman.h>
+#ifdef MAP_ANONYMOUS
+    I cant identify this map.
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "I cant identify this map." >/dev/null 2>&1; then
+  gl_have_mmap_anonymous=yes
+fi
+rm -f conftest*
+
+    if test $gl_have_mmap_anonymous != yes; then
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <sys/mman.h>
+#ifdef MAP_ANON
+    I cant identify this map.
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "I cant identify this map." >/dev/null 2>&1; then
+
+cat >>confdefs.h <<\_ACEOF
+#define MAP_ANONYMOUS MAP_ANON
+_ACEOF
+
+         gl_have_mmap_anonymous=yes
+fi
+rm -f conftest*
+
+    fi
+    { $as_echo "$as_me:$LINENO: result: $gl_have_mmap_anonymous" >&5
+$as_echo "$gl_have_mmap_anonymous" >&6; }
+    if test $gl_have_mmap_anonymous = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MAP_ANONYMOUS 1
+_ACEOF
+
+    fi
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in memchr
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  eval "$as_ac_var=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+
+    gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext"
+
+fi
+done
+
+
+  if test $ac_cv_func_memchr = no; then
+
+
+for ac_header in bp-sym.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to bug-tar@gnu.org ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+    REPLACE_MEMCHR=1
+  fi
+
+  if test $ac_cv_func_memchr = yes; then
+    # Detect platform-specific bugs in some versions of glibc:
+    # memchr should not dereference anything with length 0
+    #   http://bugzilla.redhat.com/499689
+    # memchr should not dereference overestimated length after a match
+    #   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737
+    #   http://sourceware.org/bugzilla/show_bug.cgi?id=10162
+    # Assume that memchr works on platforms that lack mprotect.
+    { $as_echo "$as_me:$LINENO: checking whether memchr works" >&5
+$as_echo_n "checking whether memchr works... " >&6; }
+if test "${gl_cv_func_memchr_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then
+         gl_cv_func_memchr_works="guessing no"
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <string.h>
+#if HAVE_SYS_MMAN_H
+# include <fcntl.h>
+# include <unistd.h>
+# include <sys/types.h>
+# include <sys/mman.h>
+# ifndef MAP_FILE
+#  define MAP_FILE 0
+# endif
+#endif
+
+int
+main ()
+{
+
+  char *fence = NULL;
+#if HAVE_SYS_MMAN_H && HAVE_MPROTECT
+# if HAVE_MAP_ANONYMOUS
+  const int flags = MAP_ANONYMOUS | MAP_PRIVATE;
+  const int fd = -1;
+# else /* !HAVE_MAP_ANONYMOUS */
+  const int flags = MAP_FILE | MAP_PRIVATE;
+  int fd = open ("/dev/zero", O_RDONLY, 0666);
+  if (fd >= 0)
+# endif
+    {
+      int pagesize = getpagesize ();
+      char *two_pages =
+        (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE,
+                       flags, fd, 0);
+      if (two_pages != (char *)(-1)
+          && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0)
+        fence = two_pages + pagesize;
+    }
+#endif
+  if (fence)
+    {
+      if (memchr (fence, 0, 0))
+        return 1;
+      strcpy (fence - 9, "12345678");
+      if (memchr (fence - 9, 0, 79) != fence - 1)
+        return 2;
+    }
+  return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_memchr_works=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gl_cv_func_memchr_works=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_memchr_works" >&5
+$as_echo "$gl_cv_func_memchr_works" >&6; }
+    if test "$gl_cv_func_memchr_works" != yes; then
+
+
+for ac_header in bp-sym.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to bug-tar@gnu.org ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+      REPLACE_MEMCHR=1
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS memchr.$ac_objext"
+
+    fi
+  fi
 
-  { echo "$as_me:$LINENO: checking for a transitional chinese locale" >&5
-echo $ECHO_N "checking for a transitional chinese locale... $ECHO_C" >&6; }
-if test "${gt_cv_locale_zh_CN+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+{ $as_echo "$as_me:$LINENO: checking whether memrchr is declared" >&5
+$as_echo_n "checking whether memrchr is declared... " >&6; }
+if test "${ac_cv_have_decl_memrchr+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
-
-    cat >conftest.$ac_ext <<_ACEOF
+  cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-
-#include <locale.h>
-#include <stdlib.h>
-#include <time.h>
-#if HAVE_LANGINFO_CODESET
-# include <langinfo.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-struct tm t;
-char buf[16];
-int main ()
+$ac_includes_default
+int
+main ()
 {
-  const char *p;
-  /* Check whether the given locale name is recognized by the system.  */
-  if (setlocale (LC_ALL, "") == NULL) return 1;
-  /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
-     On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
-     is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
-     On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
-     succeeds but then nl_langinfo(CODESET) is "646". In this situation,
-     some unit tests fail.  */
-#if HAVE_LANGINFO_CODESET
-  {
-    const char *cs = nl_langinfo (CODESET);
-    if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
-      return 1;
-  }
-#endif
-#ifdef __CYGWIN__
-  /* On Cygwin, avoid locale names without encoding suffix, because the
-     locale_charset() function relies on the encoding suffix.  Note that
-     LC_ALL is set on the command line.  */
-  if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+#ifndef memrchr
+  (void) memrchr;
 #endif
-  /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
-     This excludes the UTF-8 encoding.  */
-  t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
-  if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
-  for (p = buf; *p != '\0'; p++)
-    if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
-      return 1;
-  /* Check whether a typical GB18030 multibyte sequence is recognized as a
-     single wide character.  This excludes the GB2312 and GBK encodings.  */
-  if (mblen ("\203\062\332\066", 5) != 4)
-    return 1;
+
+  ;
   return 0;
 }
-
 _ACEOF
-    if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s conftest$ac_exeext; then
-      # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
-      # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the
-      # configure script would override the LC_ALL setting. Likewise for
-      # LC_CTYPE, which is also set at the beginning of the configure script.
-      # Test for the locale name without encoding suffix.
-      if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
-        gt_cv_locale_zh_CN=zh_CN
-      else
-        # Test for the locale name with explicit encoding suffix.
-        if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
-          gt_cv_locale_zh_CN=zh_CN.GB18030
-        else
-          # None found.
-          gt_cv_locale_zh_CN=none
-        fi
-      fi
-    else
-      # If there was a link error, due to mblen(), the system is so old that
-      # it certainly doesn't have a chinese locale.
-      gt_cv_locale_zh_CN=none
-    fi
-    rm -fr conftest*
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_memrchr=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl_memrchr=no
+fi
 
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_locale_zh_CN" >&5
-echo "${ECHO_T}$gt_cv_locale_zh_CN" >&6; }
-  LOCALE_ZH_CN=$gt_cv_locale_zh_CN
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_memrchr" >&5
+$as_echo "$ac_cv_have_decl_memrchr" >&6; }
+if test "x$ac_cv_have_decl_memrchr" = x""yes; then
 
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MEMRCHR 1
+_ACEOF
 
 
-  { echo "$as_me:$LINENO: checking whether mbrtowc and mbstate_t are properly declared" >&5
-echo $ECHO_N "checking whether mbrtowc and mbstate_t are properly declared... $ECHO_C" >&6; }
-if test "${ac_cv_func_mbrtowc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MEMRCHR 0
+_ACEOF
+
+
+fi
+
+
+
+  GNULIB_MKTIME=0;
+  GNULIB_NANOSLEEP=0;
+  GNULIB_STRPTIME=0;
+  GNULIB_TIMEGM=0;
+        REPLACE_LOCALTIME_R=GNULIB_PORTCHECK;
+  REPLACE_MKTIME=GNULIB_PORTCHECK;
+  REPLACE_NANOSLEEP=GNULIB_PORTCHECK;
+  REPLACE_STRPTIME=GNULIB_PORTCHECK;
+  REPLACE_TIMEGM=GNULIB_PORTCHECK;
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:$LINENO: checking whether unlink honors trailing slashes" >&5
+$as_echo_n "checking whether unlink honors trailing slashes... " >&6; }
+if test "${gl_cv_func_unlink_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  touch conftest.file
+     # Assume that if we have lstat, we can also check symlinks.
+     if test $ac_cv_func_lstat = yes; then
+       ln -s conftest.file conftest.lnk
+     fi
+     if test "$cross_compiling" = yes; then
+  gl_cv_func_unlink_works="guessing no"
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -16840,120 +20230,99 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <wchar.h>
+#include <unistd.h>
+           #include <errno.h>
+
 int
 main ()
 {
-wchar_t wc;
-             char const s[] = "";
-             size_t n = 1;
-             mbstate_t state;
-             return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));
+if (!unlink ("conftest.file/") || errno != ENOTDIR) return 1;
+#if HAVE_LSTAT
+      if (!unlink ("conftest.lnk/") || errno != ENOTDIR) return 2;
+#endif
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
+rm -f conftest$ac_exeext
 if { (ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_func_mbrtowc=yes
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_unlink_works=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_func_mbrtowc=no
+( exit $ac_status )
+gl_cv_func_unlink_works=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+
+     rm -f conftest.file conftest.lnk
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_mbrtowc" >&5
-echo "${ECHO_T}$ac_cv_func_mbrtowc" >&6; }
-  if test $ac_cv_func_mbrtowc = yes; then
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_unlink_works" >&5
+$as_echo "$gl_cv_func_unlink_works" >&6; }
+  if test x"$gl_cv_func_unlink_works" != xyes; then
+    REPLACE_UNLINK=1
+
+
+
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_MBRTOWC 1
-_ACEOF
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS unlink.$ac_objext"
 
   fi
 
 
-  GNULIB_MEMMEM=0;
-  GNULIB_MEMPCPY=0;
-  GNULIB_MEMRCHR=0;
-  GNULIB_RAWMEMCHR=0;
-  GNULIB_STPCPY=0;
-  GNULIB_STPNCPY=0;
-  GNULIB_STRCHRNUL=0;
-  GNULIB_STRDUP=0;
-  GNULIB_STRNDUP=0;
-  GNULIB_STRNLEN=0;
-  GNULIB_STRPBRK=0;
-  GNULIB_STRSEP=0;
-  GNULIB_STRSTR=0;
-  GNULIB_STRCASESTR=0;
-  GNULIB_STRTOK_R=0;
-  GNULIB_MBSLEN=0;
-  GNULIB_MBSNLEN=0;
-  GNULIB_MBSCHR=0;
-  GNULIB_MBSRCHR=0;
-  GNULIB_MBSSTR=0;
-  GNULIB_MBSCASECMP=0;
-  GNULIB_MBSNCASECMP=0;
-  GNULIB_MBSPCASECMP=0;
-  GNULIB_MBSCASESTR=0;
-  GNULIB_MBSCSPN=0;
-  GNULIB_MBSPBRK=0;
-  GNULIB_MBSSPN=0;
-  GNULIB_MBSSEP=0;
-  GNULIB_MBSTOK_R=0;
-  GNULIB_STRERROR=0;
-  GNULIB_STRSIGNAL=0;
-  GNULIB_STRVERSCMP=0;
-    HAVE_DECL_MEMMEM=1;
-  HAVE_MEMPCPY=1;
-  HAVE_DECL_MEMRCHR=1;
-  HAVE_RAWMEMCHR=1;
-  HAVE_STPCPY=1;
-  HAVE_STPNCPY=1;
-  HAVE_STRCHRNUL=1;
-  HAVE_DECL_STRDUP=1;
-  HAVE_STRNDUP=1;
-  HAVE_DECL_STRNDUP=1;
-  HAVE_DECL_STRNLEN=1;
-  HAVE_STRPBRK=1;
-  HAVE_STRSEP=1;
-  HAVE_STRCASESTR=1;
-  HAVE_DECL_STRTOK_R=1;
-  HAVE_DECL_STRERROR=1;
-  HAVE_DECL_STRSIGNAL=1;
-  HAVE_STRVERSCMP=1;
-  REPLACE_MEMMEM=0;
-  REPLACE_STRDUP=0;
-  REPLACE_STRSTR=0;
-  REPLACE_STRCASESTR=0;
-  REPLACE_STRERROR=0;
-  REPLACE_STRSIGNAL=0;
 
-{ echo "$as_me:$LINENO: checking whether memrchr is declared" >&5
-echo $ECHO_N "checking whether memrchr is declared... $ECHO_C" >&6; }
-if test "${ac_cv_have_decl_memrchr+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+
+
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_func_setenv = no; then
+    HAVE_SETENV=0
+  else
+    { $as_echo "$as_me:$LINENO: checking whether setenv validates arguments" >&5
+$as_echo_n "checking whether setenv validates arguments... " >&6; }
+if test "${gl_cv_func_setenv_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then
+  gl_cv_func_setenv_works="guessing no"
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -16961,77 +20330,345 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-$ac_includes_default
+
+       #include <stdlib.h>
+       #include <errno.h>
+
 int
 main ()
 {
-#ifndef memrchr
-  (void) memrchr;
-#endif
+
+       if (setenv ("", "", 0) != -1) return 1;
+       if (errno != EINVAL) return 2;
+       if (setenv ("a", "=", 1) != 0) return 3;
+       if (strcmp (getenv ("a"), "=") != 0) return 4;
 
   ;
   return 0;
 }
 _ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_setenv_works=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gl_cv_func_setenv_works=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_setenv_works" >&5
+$as_echo "$gl_cv_func_setenv_works" >&6; }
+    if test "$gl_cv_func_setenv_works" != yes; then
+      REPLACE_SETENV=1
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS setenv.$ac_objext"
+
+    fi
+  fi
+
+
+
+
+
+
+
+
+
+
+for ac_header in search.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
 rm -f conftest.$ac_objext
 if { (ac_try="$ac_compile"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  ac_cv_have_decl_memrchr=yes
+  ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_have_decl_memrchr=no
+       ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_memrchr" >&5
-echo "${ECHO_T}$ac_cv_have_decl_memrchr" >&6; }
-if test $ac_cv_have_decl_memrchr = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_MEMRCHR 1
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
 _ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to bug-tar@gnu.org ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
 else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_MEMRCHR 0
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
-
 fi
 
+done
+
+
+for ac_func in tsearch
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
 
+#undef $ac_func
 
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
 
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  eval "$as_ac_var=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+       eval "$as_ac_var=no"
+fi
 
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
 
+fi
+done
 
 
 
 
 
-{ echo "$as_me:$LINENO: checking whether snprintf is declared" >&5
-echo $ECHO_N "checking whether snprintf is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether snprintf is declared" >&5
+$as_echo_n "checking whether snprintf is declared... " >&6; }
 if test "${ac_cv_have_decl_snprintf+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -17057,20 +20694,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_snprintf=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_snprintf=no
@@ -17078,9 +20716,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_snprintf" >&5
-echo "${ECHO_T}$ac_cv_have_decl_snprintf" >&6; }
-if test $ac_cv_have_decl_snprintf = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_snprintf" >&5
+$as_echo "$ac_cv_have_decl_snprintf" >&6; }
+if test "x$ac_cv_have_decl_snprintf" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_SNPRINTF 1
 
 
 
+    REPLACE_NULL=0;
+  HAVE_WCHAR_T=1;
+  STDDEF_H='';
+
+
+  { $as_echo "$as_me:$LINENO: checking for wchar_t" >&5
+$as_echo_n "checking for wchar_t... " >&6; }
+if test "${gt_cv_c_wchar_t+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stddef.h>
+       wchar_t foo = (wchar_t)'\0';
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gt_cv_c_wchar_t=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       gt_cv_c_wchar_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_c_wchar_t" >&5
+$as_echo "$gt_cv_c_wchar_t" >&6; }
+  if test $gt_cv_c_wchar_t = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_WCHAR_T 1
+_ACEOF
+
+  fi
+
+
+
+
 
 
 
     HAVE_STRCASECMP=1;
   HAVE_DECL_STRNCASECMP=1;
 
-{ echo "$as_me:$LINENO: checking whether strdup is declared" >&5
-echo $ECHO_N "checking whether strdup is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether strdup is declared" >&5
+$as_echo_n "checking whether strdup is declared... " >&6; }
 if test "${ac_cv_have_decl_strdup+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -17135,20 +20840,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_strdup=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_strdup=no
@@ -17156,9 +20862,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strdup" >&5
-echo "${ECHO_T}$ac_cv_have_decl_strdup" >&6; }
-if test $ac_cv_have_decl_strdup = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strdup" >&5
+$as_echo "$ac_cv_have_decl_strdup" >&6; }
+if test "x$ac_cv_have_decl_strdup" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_STRDUP 1
 
 
   if test -z "$ERRNO_H"; then
-    { echo "$as_me:$LINENO: checking for working strerror function" >&5
-echo $ECHO_N "checking for working strerror function... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for working strerror function" >&5
+$as_echo_n "checking for working strerror function... " >&6; }
 if test "${gl_cv_func_working_strerror+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then
            cat >conftest.$ac_ext <<_ACEOF
@@ -17208,20 +20914,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gl_cv_func_working_strerror=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gl_cv_func_working_strerror=no
@@ -17252,37 +20959,40 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_func_working_strerror=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 gl_cv_func_working_strerror=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_working_strerror" >&5
-echo "${ECHO_T}$gl_cv_func_working_strerror" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_working_strerror" >&5
+$as_echo "$gl_cv_func_working_strerror" >&6; }
     if test $gl_cv_func_working_strerror = no; then
                   REPLACE_STRERROR=1
     fi
@@ -17291,10 +21001,10 @@ echo "${ECHO_T}$gl_cv_func_working_strerror" >&6; }
   fi
   if test $REPLACE_STRERROR = 1; then
 
-  { echo "$as_me:$LINENO: checking whether strerror is declared" >&5
-echo $ECHO_N "checking whether strerror is declared... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether strerror is declared" >&5
+$as_echo_n "checking whether strerror is declared... " >&6; }
 if test "${ac_cv_have_decl_strerror+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -17320,20 +21030,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_strerror=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_strerror=no
@@ -17341,9 +21052,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strerror" >&5
-echo "${ECHO_T}$ac_cv_have_decl_strerror" >&6; }
-if test $ac_cv_have_decl_strerror = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strerror" >&5
+$as_echo "$ac_cv_have_decl_strerror" >&6; }
+if test "x$ac_cv_have_decl_strerror" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_STRERROR 1
 
 for ac_header in winsock2.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -17398,32 +21110,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -17437,51 +21150,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -17490,21 +21204,24 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -17532,14 +21249,14 @@ done
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_string_h='<'string.h'>'
      else
-       { echo "$as_me:$LINENO: checking absolute name of <string.h>" >&5
-echo $ECHO_N "checking absolute name of <string.h>... $ECHO_C" >&6; }
+       { $as_echo "$as_me:$LINENO: checking absolute name of <string.h>" >&5
+$as_echo_n "checking absolute name of <string.h>... " >&6; }
 if test "${gl_cv_next_string_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-         if test $ac_cv_header_string_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
+          if test $ac_cv_header_string_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -17548,27 +21265,37 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <string.h>
 
 _ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_string_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/string.h#{
-                s#.*"\(.*/string.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_string_h='<'string.h'>'
-         fi
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_string_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/string.h#{
+                 s#.*"\(.*/string.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_string_h='<'string.h'>'
+          fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_string_h" >&5
-echo "${ECHO_T}$gl_cv_next_string_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_string_h" >&5
+$as_echo "$gl_cv_next_string_h" >&6; }
      fi
      NEXT_STRING_H=$gl_cv_next_string_h
 
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'string.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_string_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive
+
+
 
 
 
@@ -17587,17 +21314,102 @@ echo "${ECHO_T}$gl_cv_next_string_h" >&6; }
 
 
 
+
+  for gl_func in memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup     strndup strnlen strpbrk strsep strcasestr strtok_r strsignal strverscmp; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:$LINENO: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_gl_Symbol=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_gl_Symbol=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+     as_val=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+
+      done
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_strings_h='<'strings.h'>'
      else
-       { echo "$as_me:$LINENO: checking absolute name of <strings.h>" >&5
-echo $ECHO_N "checking absolute name of <strings.h>... $ECHO_C" >&6; }
+       { $as_echo "$as_me:$LINENO: checking absolute name of <strings.h>" >&5
+$as_echo_n "checking absolute name of <strings.h>... " >&6; }
 if test "${gl_cv_next_strings_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-         if test $ac_cv_header_strings_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
+          if test $ac_cv_header_strings_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -17606,34 +21418,115 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <strings.h>
 
 _ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_strings_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/strings.h#{
-                s#.*"\(.*/strings.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_strings_h='<'strings.h'>'
-         fi
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_strings_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/strings.h#{
+                 s#.*"\(.*/strings.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_strings_h='<'strings.h'>'
+          fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_strings_h" >&5
-echo "${ECHO_T}$gl_cv_next_strings_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_strings_h" >&5
+$as_echo "$gl_cv_next_strings_h" >&6; }
      fi
      NEXT_STRINGS_H=$gl_cv_next_strings_h
 
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'strings.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_strings_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STRINGS_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+  for gl_func in strcasecmp strncasecmp; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:$LINENO: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <strings.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_gl_Symbol=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_gl_Symbol=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+     as_val=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
 
+      done
 
 
-{ echo "$as_me:$LINENO: checking whether strndup is declared" >&5
-echo $ECHO_N "checking whether strndup is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether strndup is declared" >&5
+$as_echo_n "checking whether strndup is declared... " >&6; }
 if test "${ac_cv_have_decl_strndup+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -17659,20 +21552,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_strndup=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_strndup=no
@@ -17680,9 +21574,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strndup" >&5
-echo "${ECHO_T}$ac_cv_have_decl_strndup" >&6; }
-if test $ac_cv_have_decl_strndup = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strndup" >&5
+$as_echo "$ac_cv_have_decl_strndup" >&6; }
+if test "x$ac_cv_have_decl_strndup" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_STRNDUP 1
@@ -17698,10 +21592,12 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether strnlen is declared" >&5
-echo $ECHO_N "checking whether strnlen is declared... $ECHO_C" >&6; }
+
+
+{ $as_echo "$as_me:$LINENO: checking whether strnlen is declared" >&5
+$as_echo_n "checking whether strnlen is declared... " >&6; }
 if test "${ac_cv_have_decl_strnlen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -17727,20 +21623,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_strnlen=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_strnlen=no
@@ -17748,9 +21645,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strnlen" >&5
-echo "${ECHO_T}$ac_cv_have_decl_strnlen" >&6; }
-if test $ac_cv_have_decl_strnlen = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strnlen" >&5
+$as_echo "$ac_cv_have_decl_strnlen" >&6; }
+if test "x$ac_cv_have_decl_strnlen" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_STRNLEN 1
 
 
 
-        REPLACE_LOCALTIME_R=GNULIB_PORTCHECK;
-  REPLACE_NANOSLEEP=GNULIB_PORTCHECK;
-  REPLACE_STRPTIME=GNULIB_PORTCHECK;
-  REPLACE_TIMEGM=GNULIB_PORTCHECK;
-
-
 
 
 
 
 
 
-  { echo "$as_me:$LINENO: checking for struct timespec in <time.h>" >&5
-echo $ECHO_N "checking for struct timespec in <time.h>... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for struct timespec in <time.h>" >&5
+$as_echo_n "checking for struct timespec in <time.h>... " >&6; }
 if test "${gl_cv_sys_struct_timespec_in_time_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -17812,20 +21703,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gl_cv_sys_struct_timespec_in_time_h=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gl_cv_sys_struct_timespec_in_time_h=no
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_sys_struct_timespec_in_time_h" >&5
-echo "${ECHO_T}$gl_cv_sys_struct_timespec_in_time_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_sys_struct_timespec_in_time_h" >&5
+$as_echo "$gl_cv_sys_struct_timespec_in_time_h" >&6; }
 
   TIME_H_DEFINES_STRUCT_TIMESPEC=0
   SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0
   if test $gl_cv_sys_struct_timespec_in_time_h = yes; then
     TIME_H_DEFINES_STRUCT_TIMESPEC=1
   else
-    { echo "$as_me:$LINENO: checking for struct timespec in <sys/time.h>" >&5
-echo $ECHO_N "checking for struct timespec in <sys/time.h>... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for struct timespec in <sys/time.h>" >&5
+$as_echo_n "checking for struct timespec in <sys/time.h>... " >&6; }
 if test "${gl_cv_sys_struct_timespec_in_sys_time_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -17868,20 +21760,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gl_cv_sys_struct_timespec_in_sys_time_h=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gl_cv_sys_struct_timespec_in_sys_time_h=no
@@ -17889,8 +21782,8 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_sys_struct_timespec_in_sys_time_h" >&5
-echo "${ECHO_T}$gl_cv_sys_struct_timespec_in_sys_time_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_sys_struct_timespec_in_sys_time_h" >&5
+$as_echo "$gl_cv_sys_struct_timespec_in_sys_time_h" >&6; }
     if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then
       SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1
     fi
@@ -17915,14 +21808,14 @@ echo "${ECHO_T}$gl_cv_sys_struct_timespec_in_sys_time_h" >&6; }
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_time_h='<'time.h'>'
      else
-       { echo "$as_me:$LINENO: checking absolute name of <time.h>" >&5
-echo $ECHO_N "checking absolute name of <time.h>... $ECHO_C" >&6; }
+       { $as_echo "$as_me:$LINENO: checking absolute name of <time.h>" >&5
+$as_echo_n "checking absolute name of <time.h>... " >&6; }
 if test "${gl_cv_next_time_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-         if test $ac_cv_header_time_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
+          if test $ac_cv_header_time_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -17931,27 +21824,35 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <time.h>
 
 _ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_time_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/time.h#{
-                s#.*"\(.*/time.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_time_h='<'time.h'>'
-         fi
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_time_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/time.h#{
+                 s#.*"\(.*/time.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_time_h='<'time.h'>'
+          fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_time_h" >&5
-echo "${ECHO_T}$gl_cv_next_time_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_time_h" >&5
+$as_echo "$gl_cv_next_time_h" >&6; }
      fi
      NEXT_TIME_H=$gl_cv_next_time_h
 
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'time.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_time_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_TIME_H=$gl_next_as_first_directive
 
 
 
@@ -17962,169 +21863,10 @@ echo "${ECHO_T}$gl_cv_next_time_h" >&6; }
 
 
 
-
-
-
-
-
-
-{ echo "$as_me:$LINENO: checking whether utime accepts a null argument" >&5
-echo $ECHO_N "checking whether utime accepts a null argument... $ECHO_C" >&6; }
-if test "${ac_cv_func_utime_null+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  rm -f conftest.data; >conftest.data
-# Sequent interprets utime(file, 0) to mean use start of epoch.  Wrong.
-if test "$cross_compiling" = yes; then
-  ac_cv_func_utime_null=no
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-              #ifdef HAVE_UTIME_H
-              # include <utime.h>
-              #endif
-int
-main ()
-{
-struct stat s, t;
-  return ! (stat ("conftest.data", &s) == 0
-           && utime ("conftest.data", 0) == 0
-           && stat ("conftest.data", &t) == 0
-           && t.st_mtime >= s.st_mtime
-           && t.st_mtime - s.st_mtime < 120);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_utime_null=yes
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_func_utime_null=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_utime_null" >&5
-echo "${ECHO_T}$ac_cv_func_utime_null" >&6; }
-if test $ac_cv_func_utime_null = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_UTIME_NULL 1
-_ACEOF
-
-fi
-rm -f conftest.data
-
-
-
-
-
-
-
-
-
-
-  { echo "$as_me:$LINENO: checking for struct utimbuf" >&5
-echo $ECHO_N "checking for struct utimbuf... $ECHO_C" >&6; }
-if test "${gl_cv_sys_struct_utimbuf+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#if HAVE_SYS_TIME_H
-            #include <sys/time.h>
-           #endif
-           #include <time.h>
-           #ifdef HAVE_UTIME_H
-            #include <utime.h>
-           #endif
-
-int
-main ()
-{
-static struct utimbuf x; x.actime = x.modtime;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  gl_cv_sys_struct_utimbuf=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       gl_cv_sys_struct_utimbuf=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $gl_cv_sys_struct_utimbuf" >&5
-echo "${ECHO_T}$gl_cv_sys_struct_utimbuf" >&6; }
-
-  if test $gl_cv_sys_struct_utimbuf = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_STRUCT_UTIMBUF 1
-_ACEOF
-
-  fi
-
-
-  { echo "$as_me:$LINENO: checking determine whether the utimes function works" >&5
-echo $ECHO_N "checking determine whether the utimes function works... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether the utimes function works" >&5
+$as_echo_n "checking whether the utimes function works... " >&6; }
 if test "${gl_cv_func_working_utimes+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
   if test "$cross_compiling" = yes; then
@@ -18158,11 +21900,11 @@ main ()
   int fd;
 
   int ok = ((f = fopen (file, "w"))
-           && fclose (f) == 0
-           && utimes (file, timeval) == 0
-           && lstat (file, &sbuf) == 0
-           && sbuf.st_atime == timeval[0].tv_sec
-           && sbuf.st_mtime == timeval[1].tv_sec);
+            && fclose (f) == 0
+            && utimes (file, timeval) == 0
+            && lstat (file, &sbuf) == 0
+            && sbuf.st_atime == timeval[0].tv_sec
+            && sbuf.st_mtime == timeval[1].tv_sec);
   unlink (file);
   if (!ok)
     exit (1);
@@ -18180,8 +21922,8 @@ main ()
     exit (1);
 
   ok = (0 <= (fd = open (file, O_WRONLY|O_CREAT, 0444))
-             && close (fd) == 0
-             && utimes (file, NULL) == 0);
+              && close (fd) == 0
+              && utimes (file, NULL) == 0);
   unlink (file);
 
   exit (!ok);
@@ -18194,36 +21936,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_func_working_utimes=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 gl_cv_func_working_utimes=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_working_utimes" >&5
-echo "${ECHO_T}$gl_cv_func_working_utimes" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_working_utimes" >&5
+$as_echo "$gl_cv_func_working_utimes" >&6; }
 
   if test $gl_cv_func_working_utimes = yes; then
 
@@ -18244,10 +21989,10 @@ _ACEOF
 
 
 
-  { echo "$as_me:$LINENO: checking for wchar_t" >&5
-echo $ECHO_N "checking for wchar_t... $ECHO_C" >&6; }
-if test "${gt_cv_c_wchar_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:$LINENO: checking for struct utimbuf" >&5
+$as_echo_n "checking for struct utimbuf... " >&6; }
+if test "${gl_cv_sys_struct_utimbuf+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -18255,12 +22000,18 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <stddef.h>
-       wchar_t foo = (wchar_t)'\0';
+#if HAVE_SYS_TIME_H
+             #include <sys/time.h>
+            #endif
+            #include <time.h>
+            #ifdef HAVE_UTIME_H
+             #include <utime.h>
+            #endif
+
 int
 main ()
 {
-
+static struct utimbuf x; x.actime = x.modtime;
   ;
   return 0;
 }
@@ -18271,42 +22022,56 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  gt_cv_c_wchar_t=yes
+  gl_cv_sys_struct_utimbuf=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       gt_cv_c_wchar_t=no
+       gl_cv_sys_struct_utimbuf=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_c_wchar_t" >&5
-echo "${ECHO_T}$gt_cv_c_wchar_t" >&6; }
-  if test $gt_cv_c_wchar_t = yes; then
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_sys_struct_utimbuf" >&5
+$as_echo "$gl_cv_sys_struct_utimbuf" >&6; }
+
+  if test $gl_cv_sys_struct_utimbuf = yes; then
 
 cat >>confdefs.h <<\_ACEOF
-#define HAVE_WCHAR_T 1
+#define HAVE_STRUCT_UTIMBUF 1
 _ACEOF
 
   fi
 
 
-  { echo "$as_me:$LINENO: checking for wint_t" >&5
-echo $ECHO_N "checking for wint_t... $ECHO_C" >&6; }
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking for wint_t" >&5
+$as_echo_n "checking for wint_t... " >&6; }
 if test "${gt_cv_c_wint_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -18338,20 +22103,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gt_cv_c_wint_t=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gt_cv_c_wint_t=no
@@ -18359,8 +22125,8 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_c_wint_t" >&5
-echo "${ECHO_T}$gt_cv_c_wint_t" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_c_wint_t" >&5
+$as_echo "$gt_cv_c_wint_t" >&6; }
   if test $gt_cv_c_wint_t = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -18370,10 +22136,10 @@ _ACEOF
   fi
 
 
-  { echo "$as_me:$LINENO: checking for inttypes.h" >&5
-echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for inttypes.h" >&5
+$as_echo_n "checking for inttypes.h... " >&6; }
 if test "${gl_cv_header_inttypes_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -18397,20 +22163,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gl_cv_header_inttypes_h=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gl_cv_header_inttypes_h=no
@@ -18418,8 +22185,8 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_header_inttypes_h" >&5
-echo "${ECHO_T}$gl_cv_header_inttypes_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_inttypes_h" >&5
+$as_echo "$gl_cv_header_inttypes_h" >&6; }
   if test $gl_cv_header_inttypes_h = yes; then
 
 cat >>confdefs.h <<_ACEOF
@@ -18429,10 +22196,10 @@ _ACEOF
   fi
 
 
-  { echo "$as_me:$LINENO: checking for stdint.h" >&5
-echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for stdint.h" >&5
+$as_echo_n "checking for stdint.h... " >&6; }
 if test "${gl_cv_header_stdint_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -18456,20 +22223,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gl_cv_header_stdint_h=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gl_cv_header_stdint_h=no
@@ -18477,8 +22245,8 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_header_stdint_h" >&5
-echo "${ECHO_T}$gl_cv_header_stdint_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_stdint_h" >&5
+$as_echo "$gl_cv_header_stdint_h" >&6; }
   if test $gl_cv_header_stdint_h = yes; then
 
 cat >>confdefs.h <<_ACEOF
@@ -18490,10 +22258,10 @@ _ACEOF
 
 
 
-  { echo "$as_me:$LINENO: checking for intmax_t" >&5
-echo $ECHO_N "checking for intmax_t... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for intmax_t" >&5
+$as_echo_n "checking for intmax_t... " >&6; }
 if test "${gt_cv_c_intmax_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -18525,20 +22293,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gt_cv_c_intmax_t=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gt_cv_c_intmax_t=no
@@ -18546,8 +22315,8 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_c_intmax_t" >&5
-echo "${ECHO_T}$gt_cv_c_intmax_t" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_c_intmax_t" >&5
+$as_echo "$gt_cv_c_intmax_t" >&6; }
   if test $gt_cv_c_intmax_t = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -18566,10 +22335,192 @@ _ACEOF
 
   fi
 
-{ echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5
-echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6; }
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  eval "$as_ac_var=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_ac_var=no"
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+      { $as_echo "$as_me:$LINENO: checking whether _snprintf is declared" >&5
+$as_echo_n "checking whether _snprintf is declared... " >&6; }
+if test "${ac_cv_have_decl__snprintf+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdio.h>
+
+int
+main ()
+{
+#ifndef _snprintf
+  (void) _snprintf;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl__snprintf=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_have_decl__snprintf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl__snprintf" >&5
+$as_echo "$ac_cv_have_decl__snprintf" >&6; }
+if test "x$ac_cv_have_decl__snprintf" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__SNPRINTF 1
+_ACEOF
+
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__SNPRINTF 0
+_ACEOF
+
+
+fi
+
+
+
+{ $as_echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5
+$as_echo_n "checking whether vsnprintf is declared... " >&6; }
 if test "${ac_cv_have_decl_vsnprintf+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -18595,20 +22546,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_vsnprintf=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_vsnprintf=no
@@ -18616,9 +22568,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5
-echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6; }
-if test $ac_cv_have_decl_vsnprintf = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5
+$as_echo "$ac_cv_have_decl_vsnprintf" >&6; }
+if test "x$ac_cv_have_decl_vsnprintf" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_VSNPRINTF 1
@@ -18661,7 +22613,7 @@ fi
 
 
 
-  gl_source_base='.#bootmp/lib'
+  gl_source_base='gnu'
 
 
 
 
   # Define an additional variable used in the Makefile substitution.
   if test $ac_cv_working_alloca_h = yes; then
-    { echo "$as_me:$LINENO: checking for alloca as a compiler built-in" >&5
-echo $ECHO_N "checking for alloca as a compiler built-in... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for alloca as a compiler built-in" >&5
+$as_echo_n "checking for alloca as a compiler built-in... " >&6; }
 if test "${gl_cv_rpl_alloca+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
       cat >conftest.$ac_ext <<_ACEOF
@@ -18701,8 +22653,8 @@ rm -f conftest*
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_rpl_alloca" >&5
-echo "${ECHO_T}$gl_cv_rpl_alloca" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_rpl_alloca" >&5
+$as_echo "$gl_cv_rpl_alloca" >&6; }
     if test $gl_cv_rpl_alloca = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -18736,33 +22688,34 @@ _ACEOF
 
 
 
+  GETOPT_H=getopt.h
 
+cat >>confdefs.h <<\_ACEOF
+#define __GETOPT_PREFIX rpl_
+_ACEOF
 
 
 
+    GNULIB_UNISTD_H_GETOPT=1
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS getopt.$ac_objext"
 
 
 
 
 
+  gl_LIBOBJS="$gl_LIBOBJS getopt.$ac_objext"
 
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS getopt1.$ac_objext"
 
 
-  GETOPT_H=getopt.h
 
-cat >>confdefs.h <<\_ACEOF
-#define __GETOPT_PREFIX rpl_
-_ACEOF
 
 
+  gl_LIBOBJS="$gl_LIBOBJS getopt1.$ac_objext"
 
 
 
@@ -18772,10 +22725,10 @@ _ACEOF
 
 
 
-  { echo "$as_me:$LINENO: checking whether program_invocation_name is declared" >&5
-echo $ECHO_N "checking whether program_invocation_name is declared... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether program_invocation_name is declared" >&5
+$as_echo_n "checking whether program_invocation_name is declared... " >&6; }
 if test "${ac_cv_have_decl_program_invocation_name+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -18802,20 +22755,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_program_invocation_name=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_program_invocation_name=no
@@ -18823,9 +22777,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_program_invocation_name" >&5
-echo "${ECHO_T}$ac_cv_have_decl_program_invocation_name" >&6; }
-if test $ac_cv_have_decl_program_invocation_name = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_program_invocation_name" >&5
+$as_echo "$ac_cv_have_decl_program_invocation_name" >&6; }
+if test "x$ac_cv_have_decl_program_invocation_name" = x""yes; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1
@@ -18839,10 +22793,10 @@ _ACEOF
 
 fi
 
-  { echo "$as_me:$LINENO: checking whether program_invocation_short_name is declared" >&5
-echo $ECHO_N "checking whether program_invocation_short_name is declared... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether program_invocation_short_name is declared" >&5
+$as_echo_n "checking whether program_invocation_short_name is declared... " >&6; }
 if test "${ac_cv_have_decl_program_invocation_short_name+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -18869,20 +22823,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_program_invocation_short_name=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_program_invocation_short_name=no
@@ -18890,9 +22845,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_program_invocation_short_name" >&5
-echo "${ECHO_T}$ac_cv_have_decl_program_invocation_short_name" >&6; }
-if test $ac_cv_have_decl_program_invocation_short_name = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_program_invocation_short_name" >&5
+$as_echo "$ac_cv_have_decl_program_invocation_short_name" >&6; }
+if test "x$ac_cv_have_decl_program_invocation_short_name" = x""yes; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1
@@ -18911,8 +22866,8 @@ fi
   # are defined elsewhere. It is improbable that only one of them will
   # be defined and other not, I prefer to stay on the safe side and to
   # test each one separately.
-  { echo "$as_me:$LINENO: checking whether program_invocation_name is defined" >&5
-echo $ECHO_N "checking whether program_invocation_name is defined... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether program_invocation_name is defined" >&5
+$as_echo_n "checking whether program_invocation_name is defined... " >&6; }
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -18934,38 +22889,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_PROGRAM_INVOCATION_NAME 1
 _ACEOF
 
-                 { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+                 { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-        { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+        { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 
-  { echo "$as_me:$LINENO: checking whether program_invocation_short_name is defined" >&5
-echo $ECHO_N "checking whether program_invocation_short_name is defined... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether program_invocation_short_name is defined" >&5
+$as_echo_n "checking whether program_invocation_short_name is defined... " >&6; }
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -18987,33 +22946,37 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
 
 cat >>confdefs.h <<\_ACEOF
 #define HAVE_PROGRAM_INVOCATION_SHORT_NAME 1
 _ACEOF
 
-                 { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+                 { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-        { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+        { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 
@@ -19121,6 +23084,9 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
 
 
 
+
+
+
 
 
 
@@ -19131,10 +23097,10 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
 
 
 
-         { echo "$as_me:$LINENO: checking whether btowc(EOF) is correct" >&5
-echo $ECHO_N "checking whether btowc(EOF) is correct... $ECHO_C" >&6; }
+         { $as_echo "$as_me:$LINENO: checking whether btowc(EOF) is correct" >&5
+$as_echo_n "checking whether btowc(EOF) is correct... " >&6; }
 if test "${gl_cv_func_btowc_eof+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
                         case "$host_os" in
@@ -19145,11 +23111,7 @@ else
         esac
         if test $LOCALE_FR != none; then
           if test "$cross_compiling" = yes; then
-  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+  :
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -19178,29 +23140,32 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_func_btowc_eof=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 gl_cv_func_btowc_eof=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
@@ -19208,8 +23173,8 @@ fi
         fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_btowc_eof" >&5
-echo "${ECHO_T}$gl_cv_func_btowc_eof" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_btowc_eof" >&5
+$as_echo "$gl_cv_func_btowc_eof" >&6; }
     case "$gl_cv_func_btowc_eof" in
       *yes) ;;
       *) REPLACE_BTOWC=1 ;;
@@ -19217,8 +23182,7 @@ echo "${ECHO_T}$gl_cv_func_btowc_eof" >&6; }
   fi
   if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then
 
-
-  WCHAR_H=wchar.h
+    :
 
 
 
@@ -19240,30 +23204,8 @@ echo "${ECHO_T}$gl_cv_func_btowc_eof" >&6; }
   GNULIB_BTOWC=1
 
 
-
-
-
-
-
-
-
-
-
-
-  if test $ac_cv_func_canonicalize_file_name = no; then
-
-
-
-
-
-
-
-
-  gl_LIBOBJS="$gl_LIBOBJS canonicalize-lgpl.$ac_objext"
-
-
 cat >>confdefs.h <<\_ACEOF
-#define realpath rpl_realpath
+#define GNULIB_BTOWC 1
 _ACEOF
 
 
@@ -19277,6 +23219,7 @@ _ACEOF
 
 
 
+  gl_LIBOBJS="$gl_LIBOBJS canonicalize.$ac_objext"
 
 
 
@@ -19284,95 +23227,39 @@ _ACEOF
 
 
 
-  fi
-
-
-
-cat >>confdefs.h <<\_ACEOF
-#define GNULIB_CANONICALIZE_LGPL 1
-_ACEOF
-
-
-
-  { echo "$as_me:$LINENO: checking whether this system has an arbitrary file name length limit" >&5
-echo $ECHO_N "checking whether this system has an arbitrary file name length limit... $ECHO_C" >&6; }
-if test "${gl_cv_have_arbitrary_file_name_length_limit+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <unistd.h>
-#include <limits.h>
-#if defined PATH_MAX || defined MAXPATHLEN
-have_arbitrary_file_name_length_limit
-#endif
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "have_arbitrary_file_name_length_limit" >/dev/null 2>&1; then
-  gl_cv_have_arbitrary_file_name_length_limit=yes
-else
-  gl_cv_have_arbitrary_file_name_length_limit=no
-fi
-rm -f conftest*
-
-fi
-{ echo "$as_me:$LINENO: result: $gl_cv_have_arbitrary_file_name_length_limit" >&5
-echo "${ECHO_T}$gl_cv_have_arbitrary_file_name_length_limit" >&6; }
-
-  if test $gl_cv_have_arbitrary_file_name_length_limit = yes; then
-
-
-
-
-
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS chdir-long.$ac_objext"
-
-
-  :
 
+  if test $ac_cv_func_canonicalize_file_name = no; then
+    HAVE_CANONICALIZE_FILE_NAME=0
+  elif test "$gl_cv_func_realpath_works" != yes; then
+    REPLACE_CANONICALIZE_FILE_NAME=1
   fi
 
 
 
-
-
-
-
-  if test $ac_cv_func_chown_works = no; then
-
 cat >>confdefs.h <<\_ACEOF
-#define CHOWN_FAILS_TO_HONOR_ID_OF_NEGATIVE_ONE 1
+#define GNULIB_CANONICALIZE 1
 _ACEOF
 
-  fi
-
-  # If chown has either of the above problems, then we need the wrapper.
-  if test $ac_cv_func_chown_works$gl_cv_func_chown_follows_symlink = yesyes; then
-    : # no wrapper needed
-  else
-    REPLACE_CHOWN=1
-
 
 
 
+  GNULIB_CANONICALIZE_FILE_NAME=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_CANONICALIZE_FILE_NAME 1
+_ACEOF
 
 
-  gl_LIBOBJS="$gl_LIBOBJS chown.$ac_objext"
 
 
-  { echo "$as_me:$LINENO: checking for fchown" >&5
-echo $ECHO_N "checking for fchown... $ECHO_C" >&6; }
-if test "${ac_cv_func_fchown+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:$LINENO: checking whether this system has an arbitrary file name length limit" >&5
+$as_echo_n "checking whether this system has an arbitrary file name length limit... " >&6; }
+if test "${gl_cv_have_arbitrary_file_name_length_limit+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -19380,79 +23267,25 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-/* Define fchown to an innocuous variant, in case <limits.h> declares fchown.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define fchown innocuous_fchown
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char fchown (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef fchown
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char fchown ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_fchown || defined __stub___fchown
-choke me
+#include <unistd.h>
+#include <limits.h>
+#if defined PATH_MAX || defined MAXPATHLEN
+have_arbitrary_file_name_length_limit
 #endif
-
-int
-main ()
-{
-return fchown ();
-  ;
-  return 0;
-}
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_func_fchown=yes
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "have_arbitrary_file_name_length_limit" >/dev/null 2>&1; then
+  gl_cv_have_arbitrary_file_name_length_limit=yes
 else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_cv_func_fchown=no
+  gl_cv_have_arbitrary_file_name_length_limit=no
 fi
+rm -f conftest*
 
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_fchown" >&5
-echo "${ECHO_T}$ac_cv_func_fchown" >&6; }
-if test $ac_cv_func_fchown = yes; then
-  :
-else
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_have_arbitrary_file_name_length_limit" >&5
+$as_echo "$gl_cv_have_arbitrary_file_name_length_limit" >&6; }
+
+  if test $gl_cv_have_arbitrary_file_name_length_limit = yes; then
 
 
 
@@ -19461,18 +23294,27 @@ else
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS fchown-stub.$ac_objext"
+  gl_LIBOBJS="$gl_LIBOBJS chdir-long.$ac_objext"
 
-fi
 
 
+  :
+
   fi
 
 
 
+
   GNULIB_CHOWN=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_CHOWN 1
+_ACEOF
+
+
+
+
 
 
   # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function.
   # Save and restore LIBS so e.g., -lrt, isn't added to it.  Otherwise, *all*
   # programs in the package would end up linked with that potentially-shared
   # library, inducing unnecessary run-time overhead.
+  LIB_CLOCK_GETTIME=
+
   gl_saved_libs=$LIBS
-    { echo "$as_me:$LINENO: checking for library containing clock_gettime" >&5
-echo $ECHO_N "checking for library containing clock_gettime... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for library containing clock_gettime" >&5
+$as_echo_n "checking for library containing clock_gettime... " >&6; }
 if test "${ac_cv_search_clock_gettime+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
 cat >conftest.$ac_ext <<_ACEOF
@@ -19523,26 +23367,30 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   ac_cv_search_clock_gettime=$ac_res
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext
   if test "${ac_cv_search_clock_gettime+set}" = set; then
@@ -19557,8 +23405,8 @@ fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_search_clock_gettime" >&5
-echo "${ECHO_T}$ac_cv_search_clock_gettime" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_clock_gettime" >&5
+$as_echo "$ac_cv_search_clock_gettime" >&6; }
 ac_res=$ac_cv_search_clock_gettime
 if test "$ac_res" != no; then
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 
 
-
 for ac_func in clock_gettime clock_settime
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -19628,35 +23475,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -19672,6 +23526,13 @@ done
   GNULIB_CLOSE=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_CLOSE 1
+_ACEOF
+
+
+
+
 
 
 
@@ -19706,10 +23567,10 @@ _ACEOF
 
     :
 
-  { echo "$as_me:$LINENO: checking for d_ino member in directory struct" >&5
-echo $ECHO_N "checking for d_ino member in directory struct... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for d_ino member in directory struct" >&5
+$as_echo_n "checking for d_ino member in directory struct... " >&6; }
 if test "${gl_cv_struct_dirent_d_ino+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then
   gl_cv_struct_dirent_d_ino=no
@@ -19721,21 +23582,21 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
-            #include <sys/stat.h>
-            #include <dirent.h>
+             #include <sys/stat.h>
+             #include <dirent.h>
 
 int
 main ()
 {
 DIR *dp = opendir (".");
-            struct dirent *e;
-            struct stat st;
-            if (! dp)
-              return 1;
-            e = readdir (dp);
-            return ! (e
-                      && stat (e->d_name, &st) == 0
-                      && e->d_ino == st.st_ino);
+             struct dirent *e;
+             struct stat st;
+             if (! dp)
+               return 1;
+             e = readdir (dp);
+             return ! (e
+                       && stat (e->d_name, &st) == 0
+                       && e->d_ino == st.st_ino);
   ;
   return 0;
 }
@@ -19746,36 +23607,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_struct_dirent_d_ino=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 gl_cv_struct_dirent_d_ino=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_struct_dirent_d_ino" >&5
-echo "${ECHO_T}$gl_cv_struct_dirent_d_ino" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_struct_dirent_d_ino" >&5
+$as_echo "$gl_cv_struct_dirent_d_ino" >&6; }
    if test $gl_cv_struct_dirent_d_ino = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -19802,14 +23666,14 @@ _ACEOF
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_dirent_h='<'dirent.h'>'
      else
-       { echo "$as_me:$LINENO: checking absolute name of <dirent.h>" >&5
-echo $ECHO_N "checking absolute name of <dirent.h>... $ECHO_C" >&6; }
+       { $as_echo "$as_me:$LINENO: checking absolute name of <dirent.h>" >&5
+$as_echo_n "checking absolute name of <dirent.h>... " >&6; }
 if test "${gl_cv_next_dirent_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-         if test $ac_cv_header_dirent_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
+          if test $ac_cv_header_dirent_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -19818,27 +23682,119 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <dirent.h>
 
 _ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_dirent_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/dirent.h#{
-                s#.*"\(.*/dirent.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_dirent_h='<'dirent.h'>'
-         fi
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_dirent_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/dirent.h#{
+                 s#.*"\(.*/dirent.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_dirent_h='<'dirent.h'>'
+          fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_dirent_h" >&5
-echo "${ECHO_T}$gl_cv_next_dirent_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_dirent_h" >&5
+$as_echo "$gl_cv_next_dirent_h" >&6; }
      fi
      NEXT_DIRENT_H=$gl_cv_next_dirent_h
 
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'dirent.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_dirent_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_DIRENT_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+  for gl_func in alphasort dirfd fdopendir scandir; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:$LINENO: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <dirent.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_gl_Symbol=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_gl_Symbol=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+     as_val=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+
+      done
+
+
+
+
+
+
+
+
 
 
 
@@ -19846,7 +23802,22 @@ echo "${ECHO_T}$gl_cv_next_dirent_h" >&6; }
 
 
 
-  DIRENT_H='dirent.h'
+
+
+  gl_LIBOBJS="$gl_LIBOBJS opendir-safer.$ac_objext"
+
+
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_DIRENT_SAFER 1
+_ACEOF
+
+
+
+
+
+    :
 
 
 
@@ -19857,11 +23828,11 @@ echo "${ECHO_T}$gl_cv_next_dirent_h" >&6; }
 
 for ac_func in dirfd
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -19914,44 +23885,51 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 done
 
-  { echo "$as_me:$LINENO: checking whether dirfd is declared" >&5
-echo $ECHO_N "checking whether dirfd is declared... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether dirfd is declared" >&5
+$as_echo_n "checking whether dirfd is declared... " >&6; }
 if test "${ac_cv_have_decl_dirfd+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -19979,20 +23957,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_dirfd=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_dirfd=no
@@ -20000,9 +23979,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_dirfd" >&5
-echo "${ECHO_T}$ac_cv_have_decl_dirfd" >&6; }
-if test $ac_cv_have_decl_dirfd = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_dirfd" >&5
+$as_echo "$ac_cv_have_decl_dirfd" >&6; }
+if test "x$ac_cv_have_decl_dirfd" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_DIRFD 1
     HAVE_DECL_DIRFD=0
   fi
 
-  { echo "$as_me:$LINENO: checking whether dirfd is a macro" >&5
-echo $ECHO_N "checking whether dirfd is a macro... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether dirfd is a macro" >&5
+$as_echo_n "checking whether dirfd is a macro... " >&6; }
 if test "${gl_cv_func_dirfd_macro+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -20049,8 +24028,8 @@ fi
 rm -f conftest*
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_dirfd_macro" >&5
-echo "${ECHO_T}$gl_cv_func_dirfd_macro" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_dirfd_macro" >&5
+$as_echo "$gl_cv_func_dirfd_macro" >&6; }
 
   # Use the replacement only if we have no function, macro,
   # or declaration with that name.
@@ -20067,11 +24046,11 @@ echo "${ECHO_T}$gl_cv_func_dirfd_macro" >&6; }
 
 for ac_func in dirfd
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -20124,199 +24103,588 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+
+    gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext"
+
+fi
+done
+
+
+    { $as_echo "$as_me:$LINENO: checking how to get the file descriptor associated with an open DIR*" >&5
+$as_echo_n "checking how to get the file descriptor associated with an open DIR*... " >&6; }
+if test "${gl_cv_sys_dir_fd_member_name+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+        dirfd_save_CFLAGS=$CFLAGS
+        for ac_expr in d_fd dd_fd; do
+
+          CFLAGS="$CFLAGS -DDIR_FD_MEMBER_NAME=$ac_expr"
+          cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+             #include <sys/types.h>
+             #include <dirent.h>
+int
+main ()
+{
+DIR *dir_p = opendir("."); (void) dir_p->DIR_FD_MEMBER_NAME;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  dir_fd_found=yes
+
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+          CFLAGS=$dirfd_save_CFLAGS
+          test "$dir_fd_found" = yes && break
+        done
+        test "$dir_fd_found" = yes || ac_expr=no_such_member
+
+        gl_cv_sys_dir_fd_member_name=$ac_expr
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_sys_dir_fd_member_name" >&5
+$as_echo "$gl_cv_sys_dir_fd_member_name" >&6; }
+    if test $gl_cv_sys_dir_fd_member_name != no_such_member; then
+
+cat >>confdefs.h <<_ACEOF
+#define DIR_FD_MEMBER_NAME $gl_cv_sys_dir_fd_member_name
+_ACEOF
+
+    fi
+
+
+  fi
+
+
+
+  GNULIB_DIRFD=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_DIRFD 1
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS basename.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS dirname.$ac_objext"
+
+
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_DIRNAME 1
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS basename-lgpl.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS dirname-lgpl.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS stripslash.$ac_objext"
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking whether // is distinct from /" >&5
+$as_echo_n "checking whether // is distinct from /... " >&6; }
+if test "${gl_cv_double_slash_root+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+   if test x"$cross_compiling" = xyes ; then
+        # When cross-compiling, there is no way to tell whether // is special
+        # short of a list of hosts.  However, the only known hosts to date
+        # that have a distinct // are Apollo DomainOS (too old to port to),
+        # Cygwin, and z/OS.  If anyone knows of another system for which // has
+        # special semantics and is distinct from /, please report it to
+        # <bug-gnulib@gnu.org>.
+        case $host in
+          *-cygwin | i370-ibm-openedition)
+            gl_cv_double_slash_root=yes ;;
+          *)
+            # Be optimistic and assume that / and // are the same when we
+            # don't know.
+            gl_cv_double_slash_root='unknown, assuming no' ;;
+        esac
+      else
+        set x `ls -di / // 2>/dev/null`
+        if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then
+          gl_cv_double_slash_root=no
+        else
+          gl_cv_double_slash_root=yes
+        fi
+      fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_double_slash_root" >&5
+$as_echo "$gl_cv_double_slash_root" >&6; }
+  if test "$gl_cv_double_slash_root" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1
+_ACEOF
+
+  fi
+
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_func_dup2 = no; then
+    HAVE_DUP2=0
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS dup2.$ac_objext"
+
+  else
+    { $as_echo "$as_me:$LINENO: checking whether dup2 works" >&5
+$as_echo_n "checking whether dup2 works... " >&6; }
+if test "${gl_cv_func_dup2_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then
+  case "$host_os" in
+           mingw*) # on this platform, dup2 always returns 0 for success
+             gl_cv_func_dup2_works=no;;
+           cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0
+             gl_cv_func_dup2_works=no;;
+           linux*) # On linux between 2008-07-27 and 2009-05-11, dup2 of a
+                   # closed fd may yield -EBADF instead of -1 / errno=EBADF.
+             gl_cv_func_dup2_works=no;;
+           freebsd*) # on FreeBSD 6.1, dup2(1,1000000) gives EMFILE, not EBADF.
+             gl_cv_func_dup2_works=no;;
+           *) gl_cv_func_dup2_works=yes;;
+         esac
+else
+  cat >conftest.$ac_ext <<_ACEOF
+
+         /* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <unistd.h>
+#include <errno.h>
+int
+main ()
+{
+if (dup2 (1, 1) == 0)
+              return 1;
+            close (0);
+            if (dup2 (0, 0) != -1)
+              return 2;
+            /* Many gnulib modules require POSIX conformance of EBADF.  */
+            if (dup2 (1, 1000000) == -1 && errno != EBADF)
+              return 3;
+            return 0;
+
+  ;
+  return 0;
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_dup2_works=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gl_cv_func_dup2_works=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_dup2_works" >&5
+$as_echo "$gl_cv_func_dup2_works" >&6; }
+    if test "$gl_cv_func_dup2_works" = no; then
+
+
+  if test $ac_cv_func_dup2 = yes; then
+    REPLACE_DUP2=1
+  fi
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS dup2.$ac_objext"
+
+
+    fi
+  fi
+
+
+
+  GNULIB_DUP2=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_DUP2 1
+_ACEOF
+
+
+
+
+
+
+  GNULIB_ENVIRON=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_ENVIRON 1
 _ACEOF
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:$LINENO: checking for error_at_line" >&5
+$as_echo_n "checking for error_at_line... " >&6; }
+if test "${ac_cv_lib_error_at_line+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <error.h>
+int
+main ()
+{
+error_at_line (0, 0, "", 0, "an error occurred");
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_lib_error_at_line=yes
 else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_cv_lib_error_at_line=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_error_at_line" >&5
+$as_echo "$ac_cv_lib_error_at_line" >&6; }
+if test $ac_cv_lib_error_at_line = no; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS error.$ac_objext"
+
+fi
+
+
+
+
+  :
+
+
+
+
+  XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error:3:c-format"
+
+
+
+  XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error_at_line:5:c-format"
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS exclude.$ac_objext"
+
+
+
+
+
+
+
+
 
-    gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext"
 
-fi
-done
 
 
-    { echo "$as_me:$LINENO: checking how to get the file descriptor associated with an open DIR*" >&5
-echo $ECHO_N "checking how to get the file descriptor associated with an open DIR*... $ECHO_C" >&6; }
-if test "${gl_cv_sys_dir_fd_member_name+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
+  if test $ac_cv_func_fchdir = no; then
+    REPLACE_FCHDIR=1
 
-       dirfd_save_CFLAGS=$CFLAGS
-       for ac_expr in d_fd dd_fd; do
 
-         CFLAGS="$CFLAGS -DDIR_FD_MEMBER_NAME=$ac_expr"
-         cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <sys/types.h>
-            #include <dirent.h>
-int
-main ()
-{
-DIR *dir_p = opendir("."); (void) dir_p->DIR_FD_MEMBER_NAME;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  dir_fd_found=yes
 
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
 
-fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-         CFLAGS=$dirfd_save_CFLAGS
-         test "$dir_fd_found" = yes && break
-       done
-       test "$dir_fd_found" = yes || ac_expr=no_such_member
 
-       gl_cv_sys_dir_fd_member_name=$ac_expr
 
+  gl_LIBOBJS="$gl_LIBOBJS fchdir.$ac_objext"
 
-fi
-{ echo "$as_me:$LINENO: result: $gl_cv_sys_dir_fd_member_name" >&5
-echo "${ECHO_T}$gl_cv_sys_dir_fd_member_name" >&6; }
-    if test $gl_cv_sys_dir_fd_member_name != no_such_member; then
+    :
 
-cat >>confdefs.h <<_ACEOF
-#define DIR_FD_MEMBER_NAME $gl_cv_sys_dir_fd_member_name
+cat >>confdefs.h <<\_ACEOF
+#define REPLACE_FCHDIR 1
 _ACEOF
 
-    fi
-
+                REPLACE_OPENDIR=1
+    REPLACE_CLOSEDIR=1
+    REPLACE_DUP=1
 
-  fi
 
+  REPLACE_OPEN=1
 
 
-  GNULIB_DIRFD=1
 
 
 
 
 
 
+  gl_LIBOBJS="$gl_LIBOBJS open.$ac_objext"
 
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS basename.$ac_objext"
+  :
 
 
 
 
+  REPLACE_CLOSE=1
 
 
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS dirname.$ac_objext"
 
 
 
+  gl_LIBOBJS="$gl_LIBOBJS close.$ac_objext"
 
 
 
+  REPLACE_FCLOSE=1
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS stripslash.$ac_objext"
 
 
 
 
 
+  gl_LIBOBJS="$gl_LIBOBJS fclose.$ac_objext"
 
 
 
-  { echo "$as_me:$LINENO: checking whether // is distinct from /" >&5
-echo $ECHO_N "checking whether // is distinct from /... $ECHO_C" >&6; }
-if test "${gl_cv_double_slash_root+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-   if test x"$cross_compiling" = xyes ; then
-       # When cross-compiling, there is no way to tell whether // is special
-       # short of a list of hosts.  However, the only known hosts to date
-       # that have a distinct // are Apollo DomainOS (too old to port to),
-       # Cygwin, and z/OS.  If anyone knows of another system for which // has
-       # special semantics and is distinct from /, please report it to
-       # <bug-gnulib@gnu.org>.
-       case $host in
-         *-cygwin | i370-ibm-openedition)
-           gl_cv_double_slash_root=yes ;;
-         *)
-           # Be optimistic and assume that / and // are the same when we
-           # don't know.
-           gl_cv_double_slash_root='unknown, assuming no' ;;
-       esac
-      else
-       set x `ls -di / // 2>/dev/null`
-       if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then
-         gl_cv_double_slash_root=no
-       else
-         gl_cv_double_slash_root=yes
-       fi
-      fi
-fi
-{ echo "$as_me:$LINENO: result: $gl_cv_double_slash_root" >&5
-echo "${ECHO_T}$gl_cv_double_slash_root" >&6; }
-  if test "$gl_cv_double_slash_root" = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1
-_ACEOF
 
+  if test $ac_cv_func_dup2 = yes; then
+    REPLACE_DUP2=1
   fi
 
 
@@ -20326,9 +24694,8 @@ _ACEOF
 
 
 
+  gl_LIBOBJS="$gl_LIBOBJS dup2.$ac_objext"
 
-  if test $ac_cv_func_dup2 = no; then
-    HAVE_DUP2=0
 
 
 
@@ -20337,87 +24704,107 @@ _ACEOF
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS dup2.$ac_objext"
 
+  if test $ac_cv_func_fcntl = no; then
+    HAVE_FCNTL=0
+  else
+    REPLACE_FCNTL=1
   fi
 
 
 
-  GNULIB_DUP2=1
 
 
 
 
 
+  gl_LIBOBJS="$gl_LIBOBJS fcntl.$ac_objext"
 
-  { echo "$as_me:$LINENO: checking if environ is properly declared" >&5
-echo $ECHO_N "checking if environ is properly declared... $ECHO_C" >&6; }
-  if test "${gt_cv_var_environ_declaration+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
 
-    cat >conftest.$ac_ext <<_ACEOF
+
+    :
+
+    { $as_echo "$as_me:$LINENO: checking whether open can visit directories" >&5
+$as_echo_n "checking whether open can visit directories... " >&6; }
+if test "${gl_cv_func_open_directory_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then
+  gl_cv_func_open_directory_works="guessing no"
+else
+  cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <unistd.h>
-      extern struct { int foo; } environ;
+#include <fcntl.h>
+
 int
 main ()
 {
-environ.foo = 1;
+return open(".", O_RDONLY) < 0;
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  gt_cv_var_environ_declaration=no
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_open_directory_works=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       gt_cv_var_environ_declaration=yes
+( exit $ac_status )
+gl_cv_func_open_directory_works=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
-  { echo "$as_me:$LINENO: result: $gt_cv_var_environ_declaration" >&5
-echo "${ECHO_T}$gt_cv_var_environ_declaration" >&6; }
-  if test $gt_cv_var_environ_declaration = yes; then
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_open_directory_works" >&5
+$as_echo "$gl_cv_func_open_directory_works" >&6; }
+    if test "$gl_cv_func_open_directory_works" != yes; then
 
 cat >>confdefs.h <<\_ACEOF
-#define HAVE_ENVIRON_DECL 1
+#define REPLACE_OPEN_DIRECTORY 1
 _ACEOF
 
+      REPLACE_FSTAT=1
+    fi
   fi
 
 
-  if test $gt_cv_var_environ_declaration != yes; then
-    HAVE_DECL_ENVIRON=0
-  fi
 
+  GNULIB_FCHDIR=1
 
 
-  GNULIB_ENVIRON=1
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_FCHDIR 1
+_ACEOF
 
 
 
@@ -20425,18 +24812,62 @@ _ACEOF
 
 
 
+  GNULIB_FCLOSE=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_FCLOSE 1
+_ACEOF
 
 
 
 
 
 
-{ echo "$as_me:$LINENO: checking for error_at_line" >&5
-echo $ECHO_N "checking for error_at_line... $ECHO_C" >&6; }
-if test "${ac_cv_lib_error_at_line+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+
+
+
+
+
+
+  if test $ac_cv_func_fcntl = no; then
+
+
+
+
+
+
+
+
+  if test $ac_cv_func_fcntl = no; then
+    HAVE_FCNTL=0
+  else
+    REPLACE_FCNTL=1
+  fi
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS fcntl.$ac_objext"
+
+
+  else
+        { $as_echo "$as_me:$LINENO: checking whether fcntl handles F_DUPFD correctly" >&5
+$as_echo_n "checking whether fcntl handles F_DUPFD correctly... " >&6; }
+if test "${gl_cv_func_fcntl_f_dupfd_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then
+  # Guess that it works on glibc systems
+          case $host_os in #((
+            *-gnu*) gl_cv_func_fcntl_f_dupfd_works="guessing yes";;
+            *)      gl_cv_func_fcntl_f_dupfd_works="guessing no";;
+          esac
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -20444,84 +24875,193 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <error.h>
+
+#include <fcntl.h>
+
 int
 main ()
 {
-error_at_line (0, 0, "", 0, "an error occurred");
+return fcntl (0, F_DUPFD, -1) != -1;
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
+rm -f conftest$ac_exeext
 if { (ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_error_at_line=yes
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_fcntl_f_dupfd_works=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_lib_error_at_line=no
+( exit $ac_status )
+gl_cv_func_fcntl_f_dupfd_works=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_error_at_line" >&5
-echo "${ECHO_T}$ac_cv_lib_error_at_line" >&6; }
-if test $ac_cv_lib_error_at_line = no; then
 
 
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_fcntl_f_dupfd_works" >&5
+$as_echo "$gl_cv_func_fcntl_f_dupfd_works" >&6; }
+    case $gl_cv_func_fcntl_f_dupfd_works in
+      *yes) ;;
+      *)
 
 
 
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS error.$ac_objext"
 
-fi
+  if test $ac_cv_func_fcntl = no; then
+    HAVE_FCNTL=0
+  else
+    REPLACE_FCNTL=1
+  fi
 
 
 
-  :
 
 
 
 
-  XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error:3:c-format"
 
+  gl_LIBOBJS="$gl_LIBOBJS fcntl.$ac_objext"
 
 
-  XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error_at_line:5:c-format"
 
+cat >>confdefs.h <<\_ACEOF
+#define FCNTL_DUPFD_BUGGY 1
+_ACEOF
+ ;;
+    esac
 
+        { $as_echo "$as_me:$LINENO: checking whether fcntl understands F_DUPFD_CLOEXEC" >&5
+$as_echo_n "checking whether fcntl understands F_DUPFD_CLOEXEC... " >&6; }
+if test "${gl_cv_func_fcntl_f_dupfd_cloexec+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
 
+#include <fcntl.h>
+#ifndef F_DUPFD_CLOEXEC
+choke me
+#endif
 
+int
+main ()
+{
 
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
 
+#ifdef __linux__
+/* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace
+   it to support the semantics on older kernels that failed with EINVAL.  */
+choke me
+#endif
 
+int
+main ()
+{
 
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gl_cv_func_fcntl_f_dupfd_cloexec=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+       gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check"
+fi
 
-  gl_LIBOBJS="$gl_LIBOBJS exclude.$ac_objext"
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+       gl_cv_func_fcntl_f_dupfd_cloexec=no
+fi
 
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_fcntl_f_dupfd_cloexec" >&5
+$as_echo "$gl_cv_func_fcntl_f_dupfd_cloexec" >&6; }
+    if test "$gl_cv_func_fcntl_f_dupfd_cloexec" != yes; then
 
 
 
 
 
 
+  if test $ac_cv_func_fcntl = no; then
+    HAVE_FCNTL=0
+  else
+    REPLACE_FCNTL=1
+  fi
 
-  gl_LIBOBJS="$gl_LIBOBJS exitfail.$ac_objext"
 
 
-    :
 
 
 
 
 
+  gl_LIBOBJS="$gl_LIBOBJS fcntl.$ac_objext"
 
 
+          fi
+  fi
 
 
 
-  if test $ac_cv_func_fchdir = no; then
-    REPLACE_FCHDIR=1
+  GNULIB_FCNTL=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_FCNTL 1
+_ACEOF
 
 
 
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS fchdir.$ac_objext"
 
-    :
 
-cat >>confdefs.h <<\_ACEOF
-#define FCHDIR_REPLACEMENT 1
-_ACEOF
 
 
 
-  if test $REPLACE_OPEN != 1; then
 
 
 
 
 
 
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_fcntl_h='<'fcntl.h'>'
+     else
+       { $as_echo "$as_me:$LINENO: checking absolute name of <fcntl.h>" >&5
+$as_echo_n "checking absolute name of <fcntl.h>... " >&6; }
+if test "${gl_cv_next_fcntl_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
 
+          if test $ac_cv_header_fcntl_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <fcntl.h>
 
-  gl_LIBOBJS="$gl_LIBOBJS open.$ac_objext"
+_ACEOF
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_fcntl_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/fcntl.h#{
+                 s#.*"\(.*/fcntl.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_fcntl_h='<'fcntl.h'>'
+          fi
 
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_fcntl_h" >&5
+$as_echo "$gl_cv_next_fcntl_h" >&6; }
+     fi
+     NEXT_FCNTL_H=$gl_cv_next_fcntl_h
 
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'fcntl.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_fcntl_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_FCNTL_H=$gl_next_as_first_directive
 
-  :
 
-  fi
-  REPLACE_OPEN=1
 
 
 
-  if test $REPLACE_CLOSE != 1; then
 
 
+  for gl_func in fcntl openat; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:$LINENO: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <fcntl.h>
 
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_gl_Symbol=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+       eval "$as_gl_Symbol=no"
+fi
 
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+     as_val=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
 
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
 
+      done
 
-  gl_LIBOBJS="$gl_LIBOBJS close.$ac_objext"
 
-  fi
-  REPLACE_CLOSE=1
 
 
-  if test $REPLACE_FCLOSE != 1; then
 
 
 
 
 
 
+  if test $ac_cv_func_fdopendir = no; then
 
 
-  gl_LIBOBJS="$gl_LIBOBJS fclose.$ac_objext"
 
-  fi
-  REPLACE_FCLOSE=1
 
-  LIB_CLOSE="-lws2_32"
 
 
 
 
-  DIRENT_H='dirent.h'
+  gl_LIBOBJS="$gl_LIBOBJS openat-proc.$ac_objext"
 
-  fi
 
 
 
-  GNULIB_FCHDIR=1
 
 
 
 
 
-  GNULIB_FCLOSE=1
+  gl_LIBOBJS="$gl_LIBOBJS fdopendir.$ac_objext"
 
 
+    :
 
-  { echo "$as_me:$LINENO: checking for working fcntl.h" >&5
-echo $ECHO_N "checking for working fcntl.h... $ECHO_C" >&6; }
-if test "${gl_cv_header_working_fcntl_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+    HAVE_FDOPENDIR=0
+  else
+    { $as_echo "$as_me:$LINENO: checking whether fdopendir works" >&5
+$as_echo_n "checking whether fdopendir works... " >&6; }
+if test "${gl_cv_func_fdopendir_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then
-  gl_cv_header_working_fcntl_h=cross-compiling
+  gl_cv_func_fdopendir_works="guessing no"
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -20649,48 +25286,16 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <sys/types.h>
-          #include <sys/stat.h>
-          #include <unistd.h>
-          #include <fcntl.h>
-          #ifndef O_NOATIME
-           #define O_NOATIME 0
-          #endif
-          #ifndef O_NOFOLLOW
-           #define O_NOFOLLOW 0
-          #endif
-          static int const constants[] =
-           {
-             O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
-             O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
-           };
-
-int
-main ()
-{
-
-           int status = !constants;
-           {
-             static char const sym[] = "conftest.sym";
-             if (symlink (".", sym) != 0
-                 || close (open (sym, O_RDONLY | O_NOFOLLOW)) == 0)
-               status |= 32;
-           }
-           {
-             static char const file[] = "confdefs.h";
-             int fd = open (file, O_RDONLY | O_NOATIME);
-             char c;
-             struct stat st0, st1;
-             if (fd < 0
-                 || fstat (fd, &st0) != 0
-                 || sleep (1) != 0
-                 || read (fd, &c, 1) != 1
-                 || close (fd) != 0
-                 || stat (file, &st1) != 0
-                 || st0.st_atime != st1.st_atime)
-               status |= 64;
-           }
-           return status;
+
+#include <dirent.h>
+#include <fcntl.h>
+
+int
+main ()
+{
+int fd = open ("conftest.c", O_RDONLY);
+     if (fd < 0) return 2;
+     return !!fdopendir (fd);
   ;
   return 0;
 }
@@ -20701,128 +25306,45 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  gl_cv_header_working_fcntl_h=yes
+  gl_cv_func_fdopendir_works=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-case $? in #(
-       32) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
-       64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
-       96) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
-        *) gl_cv_header_working_fcntl_h='no';;
-       esac
+gl_cv_func_fdopendir_works=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_header_working_fcntl_h" >&5
-echo "${ECHO_T}$gl_cv_header_working_fcntl_h" >&6; }
-
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_WORKING_O_NOATIME $ac_val
-_ACEOF
-
-
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_WORKING_O_NOFOLLOW $ac_val
-_ACEOF
-
-
-
-
-
-
-
-
-
-
-
-
-
-     if test $gl_cv_have_include_next = yes; then
-       gl_cv_next_fcntl_h='<'fcntl.h'>'
-     else
-       { echo "$as_me:$LINENO: checking absolute name of <fcntl.h>" >&5
-echo $ECHO_N "checking absolute name of <fcntl.h>... $ECHO_C" >&6; }
-if test "${gl_cv_next_fcntl_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-         if test $ac_cv_header_fcntl_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <fcntl.h>
-
-_ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_fcntl_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/fcntl.h#{
-                s#.*"\(.*/fcntl.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_fcntl_h='<'fcntl.h'>'
-         fi
-
-fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_fcntl_h" >&5
-echo "${ECHO_T}$gl_cv_next_fcntl_h" >&6; }
-     fi
-     NEXT_FCNTL_H=$gl_cv_next_fcntl_h
-
-
-
-  FCNTL_H='fcntl.h'
-
-
-
-
-
-
-
-
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_fdopendir_works" >&5
+$as_echo "$gl_cv_func_fdopendir_works" >&6; }
+    if test "$gl_cv_func_fdopendir_works" != yes; then
+      REPLACE_FDOPENDIR=1
 
+    :
 
 
-  gl_LIBOBJS="$gl_LIBOBJS open-safer.$ac_objext"
 
 
 
@@ -20830,23 +25352,27 @@ echo "${ECHO_T}$gl_cv_next_fcntl_h" >&6; }
 
 
 
+  gl_LIBOBJS="$gl_LIBOBJS fdopendir.$ac_objext"
 
+    fi
+  fi
 
-  gl_LIBOBJS="$gl_LIBOBJS creat-safer.$ac_objext"
 
 
+  GNULIB_FDOPENDIR=1
 
 
 cat >>confdefs.h <<\_ACEOF
-#define GNULIB_FCNTL_SAFER 1
+#define GNULIB_FDOPENDIR 1
 _ACEOF
 
 
 
-  { echo "$as_me:$LINENO: checking for struct stat.st_blocks" >&5
-echo $ECHO_N "checking for struct stat.st_blocks... $ECHO_C" >&6; }
+
+  { $as_echo "$as_me:$LINENO: checking for struct stat.st_blocks" >&5
+$as_echo_n "checking for struct stat.st_blocks... " >&6; }
 if test "${ac_cv_member_struct_stat_st_blocks+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -20871,20 +25397,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_blocks=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -20910,20 +25437,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_blocks=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_member_struct_stat_st_blocks=no
@@ -20934,9 +25462,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_blocks" >&5
-echo "${ECHO_T}$ac_cv_member_struct_stat_st_blocks" >&6; }
-if test $ac_cv_member_struct_stat_st_blocks = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_blocks" >&5
+$as_echo "$ac_cv_member_struct_stat_st_blocks" >&6; }
+if test "x$ac_cv_member_struct_stat_st_blocks" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_STAT_ST_BLOCKS 1
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_float_h='<'float.h'>'
      else
-       { echo "$as_me:$LINENO: checking absolute name of <float.h>" >&5
-echo $ECHO_N "checking absolute name of <float.h>... $ECHO_C" >&6; }
+       { $as_echo "$as_me:$LINENO: checking absolute name of <float.h>" >&5
+$as_echo_n "checking absolute name of <float.h>... " >&6; }
 if test "${gl_cv_next_float_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-         if test $ac_cv_header_float_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
+          if test $ac_cv_header_float_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -21010,45 +25538,64 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <float.h>
 
 _ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_float_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/float.h#{
-                s#.*"\(.*/float.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_float_h='<'float.h'>'
-         fi
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_float_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/float.h#{
+                 s#.*"\(.*/float.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_float_h='<'float.h'>'
+          fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_float_h" >&5
-echo "${ECHO_T}$gl_cv_next_float_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_float_h" >&5
+$as_echo "$gl_cv_next_float_h" >&6; }
      fi
      NEXT_FLOAT_H=$gl_cv_next_float_h
 
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'float.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_float_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_FLOAT_H=$gl_next_as_first_directive
+
 
 
       ;;
   esac
 
 
-  # No macro. You should also use one of fnmatch-posix or fnmatch-gnu.
+
+
 
 
 
   FNMATCH_H=
-  { echo "$as_me:$LINENO: checking for working GNU fnmatch" >&5
-echo $ECHO_N "checking for working GNU fnmatch... $ECHO_C" >&6; }
-if test "${ac_cv_func_fnmatch_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-              if test "$cross_compiling" = yes; then
-  ac_cv_func_fnmatch_gnu=cross
+  gl_fnmatch_required_lowercase=`echo $gl_fnmatch_required | tr 'A-Z' 'a-z'`
+  gl_fnmatch_cache_var="gl_cv_func_fnmatch_${gl_fnmatch_required_lowercase}"
+  { $as_echo "$as_me:$LINENO: checking for working $gl_fnmatch_required fnmatch" >&5
+$as_echo_n "checking for working $gl_fnmatch_required fnmatch... " >&6; }
+if { as_var=$gl_fnmatch_cache_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+                           if test $gl_fnmatch_required = GNU; then
+       gl_fnmatch_gnu_start=
+       gl_fnmatch_gnu_end=
+     else
+       gl_fnmatch_gnu_start='#if 0'
+       gl_fnmatch_gnu_end='#endif'
+     fi
+     if test "$cross_compiling" = yes; then
+  eval "$gl_fnmatch_cache_var=\"guessing no\""
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -21057,52 +25604,56 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <fnmatch.h>
-          static int
-          y (char const *pattern, char const *string, int flags)
-          {
-            return fnmatch (pattern, string, flags) == 0;
-          }
-          static int
-          n (char const *pattern, char const *string, int flags)
-          {
-            return fnmatch (pattern, string, flags) == FNM_NOMATCH;
-          }
+            static int
+            y (char const *pattern, char const *string, int flags)
+            {
+              return fnmatch (pattern, string, flags) == 0;
+            }
+            static int
+            n (char const *pattern, char const *string, int flags)
+            {
+              return fnmatch (pattern, string, flags) == FNM_NOMATCH;
+            }
 
 int
 main ()
 {
 char const *Apat = 'A' < '\\\\' ? "[A-\\\\\\\\]" : "[\\\\\\\\-A]";
-          char const *apat = 'a' < '\\\\' ? "[a-\\\\\\\\]" : "[\\\\\\\\-a]";
-          static char const A_1[] = { 'A' - 1, 0 };
-          static char const A01[] = { 'A' + 1, 0 };
-          static char const a_1[] = { 'a' - 1, 0 };
-          static char const a01[] = { 'a' + 1, 0 };
-          static char const bs_1[] = { '\\\\' - 1, 0 };
-          static char const bs01[] = { '\\\\' + 1, 0 };
-          return
-           !(n ("a*", "", 0)
-             && y ("a*", "abc", 0)
-             && n ("d*/*1", "d/s/1", FNM_PATHNAME)
-             && y ("a\\\\bc", "abc", 0)
-             && n ("a\\\\bc", "abc", FNM_NOESCAPE)
-             && y ("*x", ".x", 0)
-             && n ("*x", ".x", FNM_PERIOD)
-             && y (Apat, "\\\\", 0) && y (Apat, "A", 0)
-             && y (apat, "\\\\", 0) && y (apat, "a", 0)
-             && n (Apat, A_1, 0) == ('A' < '\\\\')
-             && n (apat, a_1, 0) == ('a' < '\\\\')
-             && y (Apat, A01, 0) == ('A' < '\\\\')
-             && y (apat, a01, 0) == ('a' < '\\\\')
-             && y (Apat, bs_1, 0) == ('A' < '\\\\')
-             && y (apat, bs_1, 0) == ('a' < '\\\\')
-             && n (Apat, bs01, 0) == ('A' < '\\\\')
-             && n (apat, bs01, 0) == ('a' < '\\\\')
-             && y ("xxXX", "xXxX", FNM_CASEFOLD)
-                   && y ("a++(x|yy)b", "a+xyyyyxb", FNM_EXTMATCH)
-                   && n ("d*/*1", "d/s/1", FNM_FILE_NAME)
-                   && y ("*", "x", FNM_FILE_NAME | FNM_LEADING_DIR)
-                   && y ("x*", "x/y/z", FNM_FILE_NAME | FNM_LEADING_DIR)
-                   && y ("*c*", "c/x", FNM_FILE_NAME | FNM_LEADING_DIR));
+            char const *apat = 'a' < '\\\\' ? "[a-\\\\\\\\]" : "[\\\\\\\\-a]";
+            static char const A_1[] = { 'A' - 1, 0 };
+            static char const A01[] = { 'A' + 1, 0 };
+            static char const a_1[] = { 'a' - 1, 0 };
+            static char const a01[] = { 'a' + 1, 0 };
+            static char const bs_1[] = { '\\\\' - 1, 0 };
+            static char const bs01[] = { '\\\\' + 1, 0 };
+            return
+             !(n ("a*", "", 0)
+               && y ("a*", "abc", 0)
+               && n ("d*/*1", "d/s/1", FNM_PATHNAME)
+               && y ("a\\\\bc", "abc", 0)
+               && n ("a\\\\bc", "abc", FNM_NOESCAPE)
+               && y ("*x", ".x", 0)
+               && n ("*x", ".x", FNM_PERIOD)
+               && y (Apat, "\\\\", 0) && y (Apat, "A", 0)
+               && y (apat, "\\\\", 0) && y (apat, "a", 0)
+               && n (Apat, A_1, 0) == ('A' < '\\\\')
+               && n (apat, a_1, 0) == ('a' < '\\\\')
+               && y (Apat, A01, 0) == ('A' < '\\\\')
+               && y (apat, a01, 0) == ('a' < '\\\\')
+               && y (Apat, bs_1, 0) == ('A' < '\\\\')
+               && y (apat, bs_1, 0) == ('a' < '\\\\')
+               && n (Apat, bs01, 0) == ('A' < '\\\\')
+               && n (apat, bs01, 0) == ('a' < '\\\\')
+               $gl_fnmatch_gnu_start
+               && y ("xxXX", "xXxX", FNM_CASEFOLD)
+               && y ("a++(x|yy)b", "a+xyyyyxb", FNM_EXTMATCH)
+               && n ("d*/*1", "d/s/1", FNM_FILE_NAME)
+               && y ("*", "x", FNM_FILE_NAME | FNM_LEADING_DIR)
+               && y ("x*", "x/y/z", FNM_FILE_NAME | FNM_LEADING_DIR)
+               && y ("*c*", "c/x", FNM_FILE_NAME | FNM_LEADING_DIR)
+               $gl_fnmatch_gnu_end
+              );
+
   ;
   return 0;
 }
@@ -21113,43 +25664,67 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  ac_cv_func_fnmatch_gnu=yes
+  eval "$gl_fnmatch_cache_var=yes"
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-ac_cv_func_fnmatch_gnu=no
+eval "$gl_fnmatch_cache_var=no"
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
+
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_fnmatch_gnu" >&5
-echo "${ECHO_T}$ac_cv_func_fnmatch_gnu" >&6; }
-if test $ac_cv_func_fnmatch_gnu = yes; then
-  rm -f lib/fnmatch.h
-else
-  { echo "$as_me:$LINENO: checking whether isblank is declared" >&5
-echo $ECHO_N "checking whether isblank is declared... $ECHO_C" >&6; }
+ac_res=`eval 'as_val=${'$gl_fnmatch_cache_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval "gl_fnmatch_result=\"\$$gl_fnmatch_cache_var\""
+  if test "$gl_fnmatch_result" = yes; then
+            rm -f "$gl_source_base/fnmatch.h"
+  else
+    FNMATCH_H=fnmatch.h
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS fnmatch.$ac_objext"
+
+
+cat >>confdefs.h <<_ACEOF
+#define fnmatch ${gl_fnmatch_required_lowercase}_fnmatch
+_ACEOF
+
+
+    { $as_echo "$as_me:$LINENO: checking whether isblank is declared" >&5
+$as_echo_n "checking whether isblank is declared... " >&6; }
 if test "${ac_cv_have_decl_isblank+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -21176,20 +25751,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_isblank=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_isblank=no
@@ -21197,9 +25773,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_isblank" >&5
-echo "${ECHO_T}$ac_cv_have_decl_isblank" >&6; }
-if test $ac_cv_have_decl_isblank = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_isblank" >&5
+$as_echo "$ac_cv_have_decl_isblank" >&6; }
+if test "x$ac_cv_have_decl_isblank" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_ISBLANK 1
 
 
 
+  fi
 
 
 
 
 
-
-
-
-  gl_LIBOBJS="$gl_LIBOBJS fnmatch.$ac_objext"
-
-FNMATCH_H=fnmatch.h
-
-fi
-
-
-  if test $ac_cv_func_fnmatch_gnu != yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define fnmatch gnu_fnmatch
-_ACEOF
-
-  fi
 
 
 
@@ -21284,10 +25844,10 @@ _ACEOF
 #      include <stdio_ext.h>
 #     endif
 '
-  { echo "$as_me:$LINENO: checking whether __fpending is declared" >&5
-echo $ECHO_N "checking whether __fpending is declared... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether __fpending is declared" >&5
+$as_echo_n "checking whether __fpending is declared... " >&6; }
 if test "${ac_cv_have_decl___fpending+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -21314,20 +25874,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl___fpending=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl___fpending=no
@@ -21335,9 +25896,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl___fpending" >&5
-echo "${ECHO_T}$ac_cv_have_decl___fpending" >&6; }
-if test $ac_cv_have_decl___fpending = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl___fpending" >&5
+$as_echo "$ac_cv_have_decl___fpending" >&6; }
+if test "x$ac_cv_have_decl___fpending" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL___FPENDING 1
 
 
   if test $ac_cv_func___fpending = no; then
-    { echo "$as_me:$LINENO: checking how to determine the number of pending output bytes on a stream" >&5
-echo $ECHO_N "checking how to determine the number of pending output bytes on a stream... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking how to determine the number of pending output bytes on a stream" >&5
+$as_echo_n "checking how to determine the number of pending output bytes on a stream... " >&6; }
 if test "${ac_cv_sys_pending_output_n_bytes+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-       for ac_expr in                                                    \
-                                                                         \
-           '# glibc2'                                                    \
-           'fp->_IO_write_ptr - fp->_IO_write_base'                      \
-                                                                         \
-           '# traditional Unix'                                          \
-           'fp->_ptr - fp->_base'                                        \
-                                                                         \
-           '# BSD'                                                       \
-           'fp->_p - fp->_bf._base'                                      \
-                                                                         \
-           '# SCO, Unixware'                                             \
-           '(fp->__ptr ? fp->__ptr - fp->__base : 0)'                    \
-                                                                         \
-           '# QNX'                                                       \
-           '(fp->_Mode & 0x2000 /*_MWRITE*/ ? fp->_Next - fp->_Buf : 0)' \
-                                                                         \
-           '# old glibc?'                                                \
-           'fp->__bufp - fp->__buffer'                                   \
-                                                                         \
-           '# old glibc iostream?'                                       \
-           'fp->_pptr - fp->_pbase'                                      \
-                                                                         \
-           '# emx+gcc'                                                   \
-           'fp->_ptr - fp->_buffer'                                      \
-                                                                         \
-           '# VMS'                                                       \
-           '(*fp)->_ptr - (*fp)->_base'                                  \
-                                                                         \
-           '# e.g., DGUX R4.11; the info is not available'               \
-           1                                                             \
-           ; do
-
-         # Skip each embedded comment.
-         case "$ac_expr" in '#'*) continue;; esac
-
-         cat >conftest.$ac_ext <<_ACEOF
+  $as_echo_n "(cached) " >&6
+else
+
+        for ac_expr in                                                    \
+                                                                          \
+            '# glibc2'                                                    \
+            'fp->_IO_write_ptr - fp->_IO_write_base'                      \
+                                                                          \
+            '# traditional Unix'                                          \
+            'fp->_ptr - fp->_base'                                        \
+                                                                          \
+            '# BSD'                                                       \
+            'fp->_p - fp->_bf._base'                                      \
+                                                                          \
+            '# SCO, Unixware'                                             \
+            '(fp->__ptr ? fp->__ptr - fp->__base : 0)'                    \
+                                                                          \
+            '# QNX'                                                       \
+            '(fp->_Mode & 0x2000 /*_MWRITE*/ ? fp->_Next - fp->_Buf : 0)' \
+                                                                          \
+            '# old glibc?'                                                \
+            'fp->__bufp - fp->__buffer'                                   \
+                                                                          \
+            '# old glibc iostream?'                                       \
+            'fp->_pptr - fp->_pbase'                                      \
+                                                                          \
+            '# emx+gcc'                                                   \
+            'fp->_ptr - fp->_buffer'                                      \
+                                                                          \
+            '# VMS'                                                       \
+            '(*fp)->_ptr - (*fp)->_base'                                  \
+                                                                          \
+            '# e.g., DGUX R4.11; the info is not available'               \
+            1                                                             \
+            ; do
+
+          # Skip each embedded comment.
+          case "$ac_expr" in '#'*) continue;; esac
+
+          cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <stdio.h>
-
 int
 main ()
 {
@@ -21418,13 +25978,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -21432,22 +25993,22 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
   fp_done=yes
 
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-         test "$fp_done" = yes && break
-       done
+          test "$fp_done" = yes && break
+        done
 
-       ac_cv_sys_pending_output_n_bytes=$ac_expr
+        ac_cv_sys_pending_output_n_bytes=$ac_expr
 
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sys_pending_output_n_bytes" >&5
-echo "${ECHO_T}$ac_cv_sys_pending_output_n_bytes" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_sys_pending_output_n_bytes" >&5
+$as_echo "$ac_cv_sys_pending_output_n_bytes" >&6; }
 
 cat >>confdefs.h <<_ACEOF
 #define PENDING_OUTPUT_N_BYTES $ac_cv_sys_pending_output_n_bytes
@@ -21472,10 +26033,10 @@ _ACEOF
 
 
 
-  { echo "$as_me:$LINENO: checking for fseeko" >&5
-echo $ECHO_N "checking for fseeko... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for fseeko" >&5
+$as_echo_n "checking for fseeko... " >&6; }
 if test "${gl_cv_func_fseeko+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
       cat >conftest.$ac_ext <<_ACEOF
@@ -21485,6 +26046,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <stdio.h>
+
 int
 main ()
 {
@@ -21499,34 +26061,38 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   gl_cv_func_fseeko=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gl_cv_func_fseeko=no
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_fseeko" >&5
-echo "${ECHO_T}$gl_cv_func_fseeko" >&6; }
-  if test $gl_cv_func_fseeko = no; then
-    HAVE_FSEEKO=0
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_fseeko" >&5
+$as_echo "$gl_cv_func_fseeko" >&6; }
+  if test $gl_cv_func_fseeko = no \
+      || test $gl_cv_var_stdin_large_offset = no; then
 
 
 
@@ -21541,26 +26107,19 @@ echo "${ECHO_T}$gl_cv_func_fseeko" >&6; }
 
   REPLACE_FSEEKO=1
 
-  elif test $gl_cv_var_stdin_large_offset = no; then
-
-
-
-
-
-
-
 
+  fi
 
-  gl_LIBOBJS="$gl_LIBOBJS fseeko.$ac_objext"
 
 
-  REPLACE_FSEEKO=1
+  GNULIB_FSEEKO=1
 
-  fi
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_FSEEKO 1
+_ACEOF
 
 
-  GNULIB_FSEEKO=1
 
 
 
@@ -21587,11 +26146,11 @@ echo "${ECHO_T}$gl_cv_func_fseeko" >&6; }
 
 for ac_func in chsize
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -21644,35 +26203,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -21687,19 +26253,21 @@ done
         # If someone lacks ftruncate, make configure fail, and request
         # a bug report to inform us about it.
         if test x"$SKIP_FTRUNCATE_CHECK" != xyes; then
-          { { echo "$as_me:$LINENO: error: Your system lacks the ftruncate function.
-             Please report this, along with the output of \"uname -a\", to the
-             bug-coreutils@gnu.org mailing list.  To continue past this point,
-             rerun configure with SKIP_FTRUNCATE_CHECK=yes.
-             E.g., ./configure SKIP_FTRUNCATE_CHECK=yes
+          { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: Your system lacks the ftruncate function.
+              Please report this, along with the output of \"uname -a\", to the
+              bug-coreutils@gnu.org mailing list.  To continue past this point,
+              rerun configure with SKIP_FTRUNCATE_CHECK=yes.
+              E.g., ./configure SKIP_FTRUNCATE_CHECK=yes
 See \`config.log' for more details." >&5
-echo "$as_me: error: Your system lacks the ftruncate function.
-             Please report this, along with the output of \"uname -a\", to the
-             bug-coreutils@gnu.org mailing list.  To continue past this point,
-             rerun configure with SKIP_FTRUNCATE_CHECK=yes.
-             E.g., ./configure SKIP_FTRUNCATE_CHECK=yes
+$as_echo "$as_me: error: Your system lacks the ftruncate function.
+              Please report this, along with the output of \"uname -a\", to the
+              bug-coreutils@gnu.org mailing list.  To continue past this point,
+              rerun configure with SKIP_FTRUNCATE_CHECK=yes.
+              E.g., ./configure SKIP_FTRUNCATE_CHECK=yes
 See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+   { (exit 1); exit 1; }; }; }
         fi
     esac
   fi
@@ -21709,22 +26277,31 @@ See \`config.log' for more details." >&2;}
   GNULIB_FTRUNCATE=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_FTRUNCATE 1
+_ACEOF
+
+
+
+
 
 
 
   gl_abort_bug=no
-  case $gl_cv_func_getcwd_null in
-  yes)
+  case $gl_cv_func_getcwd_null,$host_os in
+  *,mingw*)
+    gl_cv_func_getcwd_path_max=yes;;
+  yes,*)
 
 
 
 
 
 
-  { echo "$as_me:$LINENO: checking whether getcwd handles long file names properly" >&5
-echo $ECHO_N "checking whether getcwd handles long file names properly... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether getcwd handles long file names properly" >&5
+$as_echo_n "checking whether getcwd handles long file names properly... " >&6; }
 if test "${gl_cv_func_getcwd_path_max+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   # Arrange for deletion of the temporary directory this test creates.
      ac_clean_files="$ac_clean_files confdir3"
@@ -21791,7 +26368,7 @@ main ()
   exit (0);
 #else
   char buf[PATH_MAX * (DIR_NAME_SIZE / DOTDOTSLASH_LEN + 1)
-          + DIR_NAME_SIZE + BUF_SLOP];
+           + DIR_NAME_SIZE + BUF_SLOP];
   char *cwd = getcwd (buf, PATH_MAX);
   size_t initial_cwd_len;
   size_t cwd_len;
@@ -21810,58 +26387,58 @@ main ()
 
       cwd_len += DIR_NAME_SIZE;
       /* If mkdir or chdir fails, it could be that this system cannot create
-        any file with an absolute name longer than PATH_MAX, such as cygwin.
-        If so, leave fail as 0, because the current working directory can't
-        be too long for getcwd if it can't even be created.  For other
-        errors, be pessimistic and consider that as a failure, too.  */
+         any file with an absolute name longer than PATH_MAX, such as cygwin.
+         If so, leave fail as 0, because the current working directory can't
+         be too long for getcwd if it can't even be created.  For other
+         errors, be pessimistic and consider that as a failure, too.  */
       if (mkdir (DIR_NAME, S_IRWXU) < 0 || chdir (DIR_NAME) < 0)
-       {
-         if (! (errno == ERANGE || is_ENAMETOOLONG (errno)))
-           fail = 2;
-         break;
-       }
+        {
+          if (! (errno == ERANGE || is_ENAMETOOLONG (errno)))
+            fail = 2;
+          break;
+        }
 
       if (PATH_MAX <= cwd_len && cwd_len < PATH_MAX + DIR_NAME_SIZE)
-       {
-         c = getcwd (buf, PATH_MAX);
-         if (!c && errno == ENOENT)
-           {
-             fail = 1;
-             break;
-           }
-         if (c || ! (errno == ERANGE || is_ENAMETOOLONG (errno)))
-           {
-             fail = 2;
-             break;
-           }
-       }
+        {
+          c = getcwd (buf, PATH_MAX);
+          if (!c && errno == ENOENT)
+            {
+              fail = 1;
+              break;
+            }
+          if (c || ! (errno == ERANGE || is_ENAMETOOLONG (errno)))
+            {
+              fail = 2;
+              break;
+            }
+        }
 
       if (dotdot_max <= cwd_len - initial_cwd_len)
-       {
-         if (dotdot_max + DIR_NAME_SIZE < cwd_len - initial_cwd_len)
-           break;
-         c = getcwd (buf, cwd_len + 1);
-         if (!c)
-           {
-             if (! (errno == ERANGE || errno == ENOENT
-                    || is_ENAMETOOLONG (errno)))
-               {
-                 fail = 2;
-                 break;
-               }
-             if (AT_FDCWD || errno == ERANGE || errno == ENOENT)
-               {
-                 fail = 1;
-                 break;
-               }
-           }
-       }
+        {
+          if (dotdot_max + DIR_NAME_SIZE < cwd_len - initial_cwd_len)
+            break;
+          c = getcwd (buf, cwd_len + 1);
+          if (!c)
+            {
+              if (! (errno == ERANGE || errno == ENOENT
+                     || is_ENAMETOOLONG (errno)))
+                {
+                  fail = 2;
+                  break;
+                }
+              if (AT_FDCWD || errno == ERANGE || errno == ENOENT)
+                {
+                  fail = 1;
+                  break;
+                }
+            }
+        }
 
       if (c && strlen (c) != cwd_len)
-       {
-         fail = 2;
-         break;
-       }
+        {
+          fail = 2;
+          break;
+        }
       ++n_chdirs;
     }
 
@@ -21875,10 +26452,10 @@ main ()
     rmdir (DIR_NAME);
     for (i = 0; i <= n_chdirs; i++)
       {
-       if (chdir ("..") < 0)
-         break;
-       if (rmdir (DIR_NAME) != 0)
-         break;
+        if (chdir ("..") < 0)
+          break;
+        if (rmdir (DIR_NAME) != 0)
+          break;
       }
   }
 
@@ -21893,24 +26470,26 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_func_getcwd_path_max=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
@@ -21919,14 +26498,15 @@ case $? in
      *) gl_cv_func_getcwd_path_max=no;;
      esac
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_getcwd_path_max" >&5
-echo "${ECHO_T}$gl_cv_func_getcwd_path_max" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_getcwd_path_max" >&5
+$as_echo "$gl_cv_func_getcwd_path_max" >&6; }
   case $gl_cv_func_getcwd_path_max in
   no,*)
 
@@ -21944,11 +26524,11 @@ _ACEOF
 
 for ac_func in getpagesize
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -22001,44 +26581,51 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 done
 
-  { echo "$as_me:$LINENO: checking whether getcwd aborts when 4k < cwd_length < 16k" >&5
-echo $ECHO_N "checking whether getcwd aborts when 4k < cwd_length < 16k... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether getcwd aborts when 4k < cwd_length < 16k" >&5
+$as_echo_n "checking whether getcwd aborts when 4k < cwd_length < 16k... " >&6; }
 if test "${gl_cv_func_getcwd_abort_bug+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   # Remove any remnants of a previous test.
      rm -rf confdir-14B---
@@ -22099,14 +26686,14 @@ main ()
   initial_cwd_len = strlen (cwd);
   free (cwd);
   desired_depth = ((TARGET_LEN - 1 - initial_cwd_len)
-                  / (1 + strlen (dir_name)));
+                   / (1 + strlen (dir_name)));
   for (d = 0; d < desired_depth; d++)
     {
       if (mkdir (dir_name, S_IRWXU) < 0 || chdir (dir_name) < 0)
-       {
-         fail = 3; /* Unable to construct deep hierarchy.  */
-         break;
-       }
+        {
+          fail = 3; /* Unable to construct deep hierarchy.  */
+          break;
+        }
     }
 
   /* If libc has the bug in question, this invocation of getcwd
@@ -22121,7 +26708,7 @@ main ()
   while (0 < d--)
     {
       if (chdir ("..") < 0)
-       break;
+        break;
       rmdir (dir_name);
     }
 
@@ -22135,37 +26722,40 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_func_getcwd_abort_bug=no
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 gl_cv_func_getcwd_abort_bug=yes
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_getcwd_abort_bug" >&5
-echo "${ECHO_T}$gl_cv_func_getcwd_abort_bug" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_getcwd_abort_bug" >&5
+$as_echo "$gl_cv_func_getcwd_abort_bug" >&6; }
   if test $gl_cv_func_getcwd_abort_bug = yes; then
   gl_abort_bug=yes
 fi
@@ -22174,7 +26764,7 @@ fi
   esac
 
   case $gl_cv_func_getcwd_null,$gl_cv_func_getcwd_path_max,$gl_abort_bug in
-  yes,yes,no) ;;
+  *yes,yes,no) ;;
   *)
     REPLACE_GETCWD=1
 
   GNULIB_GETCWD=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_GETCWD 1
+_ACEOF
+
+
+
 
 
 
 
 
-  { echo "$as_me:$LINENO: checking for struct tm.tm_zone" >&5
-echo $ECHO_N "checking for struct tm.tm_zone... $ECHO_C" >&6; }
+
+  { $as_echo "$as_me:$LINENO: checking for struct tm.tm_zone" >&5
+$as_echo_n "checking for struct tm.tm_zone... " >&6; }
 if test "${ac_cv_member_struct_tm_tm_zone+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -22235,20 +26832,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_tm_tm_zone=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -22277,20 +26875,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_tm_tm_zone=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_member_struct_tm_tm_zone=no
@@ -22301,9 +26900,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_tm_tm_zone" >&5
-echo "${ECHO_T}$ac_cv_member_struct_tm_tm_zone" >&6; }
-if test $ac_cv_member_struct_tm_tm_zone = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_tm_tm_zone" >&5
+$as_echo "$ac_cv_member_struct_tm_tm_zone" >&6; }
+if test "x$ac_cv_member_struct_tm_tm_zone" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_TM_TM_ZONE 1
@@ -22319,10 +26918,10 @@ cat >>confdefs.h <<\_ACEOF
 _ACEOF
 
 else
-  { echo "$as_me:$LINENO: checking whether tzname is declared" >&5
-echo $ECHO_N "checking whether tzname is declared... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether tzname is declared" >&5
+$as_echo_n "checking whether tzname is declared... " >&6; }
 if test "${ac_cv_have_decl_tzname+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -22349,20 +26948,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_tzname=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_tzname=no
@@ -22370,9 +26970,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_tzname" >&5
-echo "${ECHO_T}$ac_cv_have_decl_tzname" >&6; }
-if test $ac_cv_have_decl_tzname = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_tzname" >&5
+$as_echo "$ac_cv_have_decl_tzname" >&6; }
+if test "x$ac_cv_have_decl_tzname" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_TZNAME 1
@@ -22388,10 +26988,10 @@ _ACEOF
 fi
 
 
-  { echo "$as_me:$LINENO: checking for tzname" >&5
-echo $ECHO_N "checking for tzname... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for tzname" >&5
+$as_echo_n "checking for tzname... " >&6; }
 if test "${ac_cv_var_tzname+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -22418,31 +27018,35 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   ac_cv_var_tzname=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_var_tzname=no
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_var_tzname" >&5
-echo "${ECHO_T}$ac_cv_var_tzname" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_var_tzname" >&5
+$as_echo "$ac_cv_var_tzname" >&6; }
   if test $ac_cv_var_tzname = yes; then
 
 cat >>confdefs.h <<\_ACEOF
 
 
 
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
 
+#include <time.h> /* for time_t */
+#include <limits.h> /* for CHAR_BIT, LONG_MIN, LONG_MAX */
+#define TYPE_MINIMUM(t) \
+  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
+#define TYPE_MAXIMUM(t) \
+  ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
+typedef int verify_min[2 * (LONG_MIN <= TYPE_MINIMUM (time_t)) - 1];
+typedef int verify_max[2 * (TYPE_MAXIMUM (time_t) <= LONG_MAX) - 1];
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+
+cat >>confdefs.h <<\_ACEOF
+#define TIME_T_FITS_IN_LONG_INT 1
+_ACEOF
+
+
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
 
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
 
 
 
 
-for ac_func in getdelim
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+
+
+
+  if test $ac_cv_func_getdelim = yes; then
+        { $as_echo "$as_me:$LINENO: checking for working getdelim function" >&5
+$as_echo_n "checking for working getdelim function... " >&6; }
+if test "${gl_cv_func_working_getdelim+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
+  echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data
+    if test "$cross_compiling" = yes; then
+        cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
 
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ >= 2)
+  Lucky GNU user
+ #endif
 #endif
 
-#undef $ac_func
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Lucky GNU user" >/dev/null 2>&1; then
+  gl_cv_func_working_getdelim=yes
+else
+  gl_cv_func_working_getdelim=no
+fi
+rm -f conftest*
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
 
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#    include <stdio.h>
+#    include <stdlib.h>
+#    include <string.h>
+    int main ()
+    {
+      FILE *in = fopen ("./conftest.data", "r");
+      if (!in)
+        return 1;
+      {
+        /* Test result for a NULL buffer and a zero size.
+           Based on a test program from Karl Heuer.  */
+        char *line = NULL;
+        size_t siz = 0;
+        int len = getdelim (&line, &siz, '\n', in);
+        if (!(len == 4 && line && strcmp (line, "foo\n") == 0))
+          return 1;
+      }
+      {
+        /* Test result for a NULL buffer and a non-zero size.
+           This crashes on FreeBSD 8.0.  */
+        char *line = NULL;
+        size_t siz = (size_t)(~0) / 4;
+        if (getdelim (&line, &siz, '\n', in) == -1)
+          return 1;
+      }
+      return 0;
+    }
+
+_ACEOF
+rm -f conftest$ac_exeext
 if { (ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_working_getdelim=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       eval "$as_ac_var=no"
+( exit $ac_status )
+gl_cv_func_working_getdelim=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_working_getdelim" >&5
+$as_echo "$gl_cv_func_working_getdelim" >&6; }
+  else
+    gl_cv_func_working_getdelim=no
+  fi
 
-else
+  if test $ac_cv_have_decl_getdelim = no; then
+    HAVE_DECL_GETDELIM=0
+  fi
 
-    gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext"
+  if test $gl_cv_func_working_getdelim = no; then
+    if test $ac_cv_func_getdelim = yes; then
+      REPLACE_GETDELIM=1
+    fi
 
-fi
-done
 
 
 
@@ -22572,17 +27252,18 @@ done
 
 
 
-  if test $ac_cv_func_getdelim = no; then
+  gl_LIBOBJS="$gl_LIBOBJS getdelim.$ac_objext"
+
 
 
 
 for ac_func in flockfile funlockfile
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -22635,44 +27316,51 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 done
 
-  { echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5
-echo $ECHO_N "checking whether getc_unlocked is declared... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5
+$as_echo_n "checking whether getc_unlocked is declared... " >&6; }
 if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -22698,20 +27386,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_getc_unlocked=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_getc_unlocked=no
@@ -22719,9 +27408,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_getc_unlocked" >&6; }
-if test $ac_cv_have_decl_getc_unlocked = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5
+$as_echo "$ac_cv_have_decl_getc_unlocked" >&6; }
+if test "x$ac_cv_have_decl_getc_unlocked" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_GETC_UNLOCKED 1
 
   fi
 
-  if test $ac_cv_have_decl_getdelim = no; then
-    HAVE_DECL_GETDELIM=0
+
+
+  GNULIB_GETDELIM=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_GETDELIM 1
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_func_getdtablesize != yes; then
+    HAVE_GETDTABLESIZE=0
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS getdtablesize.$ac_objext"
+
   fi
 
 
 
-  GNULIB_GETDELIM=1
+  GNULIB_GETDTABLESIZE=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_GETDTABLESIZE 1
+_ACEOF
+
+
 
 
 
 
 
   gl_getline_needs_run_time_check=no
-  { echo "$as_me:$LINENO: checking for getline" >&5
-echo $ECHO_N "checking for getline... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for getline" >&5
+$as_echo_n "checking for getline... " >&6; }
 if test "${ac_cv_func_getline+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -22815,44 +27540,48 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   ac_cv_func_getline=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_func_getline=no
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_getline" >&5
-echo "${ECHO_T}$ac_cv_func_getline" >&6; }
-if test $ac_cv_func_getline = yes; then
-               gl_getline_needs_run_time_check=yes
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_getline" >&5
+$as_echo "$ac_cv_func_getline" >&6; }
+if test "x$ac_cv_func_getline" = x""yes; then
+                   gl_getline_needs_run_time_check=yes
 else
   am_cv_func_working_getline=no
 fi
 
   if test $gl_getline_needs_run_time_check = yes; then
-    { echo "$as_me:$LINENO: checking for working getline function" >&5
-echo $ECHO_N "checking for working getline function... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for working getline function" >&5
+$as_echo_n "checking for working getline function... " >&6; }
 if test "${am_cv_func_working_getline+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
-  echo fooN |tr -d '\012'|tr N '\012' > conftest.data
+  echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data
     if test "$cross_compiling" = yes; then
         cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -22890,15 +27619,28 @@ cat >>conftest.$ac_ext <<_ACEOF
 #    include <stdlib.h>
 #    include <string.h>
     int main ()
-    { /* Based on a test program from Karl Heuer.  */
-      char *line = NULL;
-      size_t siz = 0;
-      int len;
+    {
       FILE *in = fopen ("./conftest.data", "r");
       if (!in)
-       return 1;
-      len = getline (&line, &siz, in);
-      exit ((len == 4 && line && strcmp (line, "foo\n") == 0) ? 0 : 1);
+        return 1;
+      {
+        /* Test result for a NULL buffer and a zero size.
+           Based on a test program from Karl Heuer.  */
+        char *line = NULL;
+        size_t siz = 0;
+        int len = getline (&line, &siz, in);
+        if (!(len == 4 && line && strcmp (line, "foo\n") == 0))
+          return 1;
+      }
+      {
+        /* Test result for a NULL buffer and a non-zero size.
+           This crashes on FreeBSD 8.0.  */
+        char *line = NULL;
+        size_t siz = (size_t)(~0) / 4;
+        if (getline (&line, &siz, in) == -1)
+          return 1;
+      }
+      return 0;
     }
 
 _ACEOF
@@ -22908,36 +27650,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   am_cv_func_working_getline=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 am_cv_func_working_getline=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
-{ echo "$as_me:$LINENO: result: $am_cv_func_working_getline" >&5
-echo "${ECHO_T}$am_cv_func_working_getline" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $am_cv_func_working_getline" >&5
+$as_echo "$am_cv_func_working_getline" >&6; }
   fi
 
   if test $ac_cv_have_decl_getline = no; then
@@ -22945,7 +27690,7 @@ echo "${ECHO_T}$am_cv_func_working_getline" >&6; }
   fi
 
   if test $am_cv_func_working_getline = no; then
-    REPLACE_GETLINE=1
+                REPLACE_GETLINE=1
 
 
 
@@ -22972,102 +27717,129 @@ echo "${ECHO_T}$am_cv_func_working_getline" >&6; }
 
 
 
-for ac_func in getdelim
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+
+  if test $ac_cv_func_getdelim = yes; then
+        { $as_echo "$as_me:$LINENO: checking for working getdelim function" >&5
+$as_echo_n "checking for working getdelim function... " >&6; }
+if test "${gl_cv_func_working_getdelim+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
+  echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data
+    if test "$cross_compiling" = yes; then
+        cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
 
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ >= 2)
+  Lucky GNU user
+ #endif
 #endif
 
-#undef $ac_func
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Lucky GNU user" >/dev/null 2>&1; then
+  gl_cv_func_working_getdelim=yes
+else
+  gl_cv_func_working_getdelim=no
+fi
+rm -f conftest*
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
 
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#    include <stdio.h>
+#    include <stdlib.h>
+#    include <string.h>
+    int main ()
+    {
+      FILE *in = fopen ("./conftest.data", "r");
+      if (!in)
+        return 1;
+      {
+        /* Test result for a NULL buffer and a zero size.
+           Based on a test program from Karl Heuer.  */
+        char *line = NULL;
+        size_t siz = 0;
+        int len = getdelim (&line, &siz, '\n', in);
+        if (!(len == 4 && line && strcmp (line, "foo\n") == 0))
+          return 1;
+      }
+      {
+        /* Test result for a NULL buffer and a non-zero size.
+           This crashes on FreeBSD 8.0.  */
+        char *line = NULL;
+        size_t siz = (size_t)(~0) / 4;
+        if (getdelim (&line, &siz, '\n', in) == -1)
+          return 1;
+      }
+      return 0;
+    }
+
+_ACEOF
+rm -f conftest$ac_exeext
 if { (ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_working_getdelim=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       eval "$as_ac_var=no"
+( exit $ac_status )
+gl_cv_func_working_getdelim=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_working_getdelim" >&5
+$as_echo "$gl_cv_func_working_getdelim" >&6; }
+  else
+    gl_cv_func_working_getdelim=no
+  fi
 
-else
+  if test $ac_cv_have_decl_getdelim = no; then
+    HAVE_DECL_GETDELIM=0
+  fi
 
-    gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext"
+  if test $gl_cv_func_working_getdelim = no; then
+    if test $ac_cv_func_getdelim = yes; then
+      REPLACE_GETDELIM=1
+    fi
 
-fi
-done
 
 
 
@@ -23075,17 +27847,18 @@ done
 
 
 
-  if test $ac_cv_func_getdelim = no; then
+  gl_LIBOBJS="$gl_LIBOBJS getdelim.$ac_objext"
+
 
 
 
 for ac_func in flockfile funlockfile
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -23138,44 +27911,51 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 done
 
-  { echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5
-echo $ECHO_N "checking whether getc_unlocked is declared... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5
+$as_echo_n "checking whether getc_unlocked is declared... " >&6; }
 if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -23201,20 +27981,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_getc_unlocked=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_getc_unlocked=no
@@ -23222,9 +28003,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5
-echo "${ECHO_T}$ac_cv_have_decl_getc_unlocked" >&6; }
-if test $ac_cv_have_decl_getc_unlocked = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5
+$as_echo "$ac_cv_have_decl_getc_unlocked" >&6; }
+if test "x$ac_cv_have_decl_getc_unlocked" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_GETC_UNLOCKED 1
 
   fi
 
-  if test $ac_cv_have_decl_getdelim = no; then
-    HAVE_DECL_GETDELIM=0
-  fi
-
 
   fi
 
@@ -23255,8 +28032,9 @@ fi
   GNULIB_GETLINE=1
 
 
-
-  if test -n "$GETOPT_H"; then
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_GETLINE 1
+_ACEOF
 
 
 
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS getopt.$ac_objext"
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_GETOPT_GNU 1
+_ACEOF
 
 
 
@@ -23275,8 +28055,8 @@ fi
 
 
 
+  if test -n "$gl_replace_getopt"; then
 
-  gl_LIBOBJS="$gl_LIBOBJS getopt1.$ac_objext"
 
 
   GETOPT_H=getopt.h
@@ -23287,6 +28067,28 @@ _ACEOF
 
 
 
+    GNULIB_UNISTD_H_GETOPT=1
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS getopt.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS getopt1.$ac_objext"
+
+
 
 
 
 
 
 
+
 for ac_func in getpagesize
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -23360,35 +28163,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -23399,20 +28209,21 @@ done
 
 for ac_header in OS.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -23428,32 +28239,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -23467,51 +28279,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -23520,21 +28333,24 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -23547,20 +28363,21 @@ done
 
 for ac_header in sys/param.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -23576,32 +28393,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -23615,51 +28433,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -23668,21 +28487,24 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -23714,6 +28536,13 @@ done
   GNULIB_GETPAGESIZE=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_GETPAGESIZE 1
+_ACEOF
+
+
+
+
 
 
 
@@ -23749,10 +28578,180 @@ done
 
 
 
-  { echo "$as_me:$LINENO: checking for gettimeofday with POSIX signature" >&5
-echo $ECHO_N "checking for gettimeofday with POSIX signature... $ECHO_C" >&6; }
-if test "${gl_cv_func_gettimeofday_posix_signature+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+  gl_gettimeofday_timezone=void
+  if test $ac_cv_func_gettimeofday != yes; then
+    HAVE_GETTIMEOFDAY=0
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS gettimeofday.$ac_objext"
+
+
+
+for ac_header in sys/timeb.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to bug-tar@gnu.org ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_func in _ftime
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -23760,58 +28759,101 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <sys/time.h>
-           struct timeval c;
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
 
 int
 main ()
 {
-
-           int (*f) (struct timeval *restrict, void *restrict) = gettimeofday;
-           int x = f (&c, 0);
-           return !(x | c.tv_sec | c.tv_usec);
-
+return $ac_func ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  gl_cv_func_gettimeofday_posix_signature=yes
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       gl_cv_func_gettimeofday_posix_signature=no
+       eval "$as_ac_var=no"
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_gettimeofday_posix_signature" >&5
-echo "${ECHO_T}$gl_cv_func_gettimeofday_posix_signature" >&6; }
+done
 
 
+  else
+
 
 
- { echo "$as_me:$LINENO: checking whether gettimeofday clobbers localtime buffer" >&5
-echo $ECHO_N "checking whether gettimeofday clobbers localtime buffer... $ECHO_C" >&6; }
+ { $as_echo "$as_me:$LINENO: checking whether gettimeofday clobbers localtime buffer" >&5
+$as_echo_n "checking whether gettimeofday clobbers localtime buffer... " >&6; }
 if test "${gl_cv_func_gettimeofday_clobber+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then
        gl_cv_func_gettimeofday_clobber=yes
@@ -23823,22 +28865,22 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <string.h>
-         #include <sys/time.h>
-         #include <time.h>
-         #include <stdlib.h>
+          #include <sys/time.h>
+          #include <time.h>
+          #include <stdlib.h>
 
 int
 main ()
 {
 
-         time_t t = 0;
-         struct tm *lt;
-         struct tm saved_lt;
-         struct timeval tv;
-         lt = localtime (&t);
-         saved_lt = *lt;
-         gettimeofday (&tv, NULL);
-         return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0;
+          time_t t = 0;
+          struct tm *lt;
+          struct tm saved_lt;
+          struct timeval tv;
+          lt = localtime (&t);
+          saved_lt = *lt;
+          gettimeofday (&tv, NULL);
+          return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0;
 
   ;
   return 0;
@@ -23850,40 +28892,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_func_gettimeofday_clobber=no
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 gl_cv_func_gettimeofday_clobber=yes
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_gettimeofday_clobber" >&5
-echo "${ECHO_T}$gl_cv_func_gettimeofday_clobber" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_gettimeofday_clobber" >&5
+$as_echo "$gl_cv_func_gettimeofday_clobber" >&6; }
 
  if test $gl_cv_func_gettimeofday_clobber = yes; then
    REPLACE_GETTIMEOFDAY=1
-   SYS_TIME_H=sys/time.h
 
 
 
@@ -23899,20 +28943,21 @@ echo "${ECHO_T}$gl_cv_func_gettimeofday_clobber" >&6; }
 
 for ac_header in sys/timeb.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -23928,32 +28973,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -23967,51 +29013,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -24020,21 +29067,24 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -24044,11 +29094,11 @@ done
 
 for ac_func in _ftime
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -24101,35 +29151,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -24154,11 +29211,115 @@ _ACEOF
 
  fi
 
+    { $as_echo "$as_me:$LINENO: checking for gettimeofday with POSIX signature" >&5
+$as_echo_n "checking for gettimeofday with POSIX signature... " >&6; }
+if test "${gl_cv_func_gettimeofday_posix_signature+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/time.h>
+              struct timeval c;
+              int gettimeofday (struct timeval *restrict, void *restrict);
+
+int
+main ()
+{
+/* glibc uses struct timezone * rather than the POSIX void *
+                 if _GNU_SOURCE is defined.  However, since the only portable
+                 use of gettimeofday uses NULL as the second parameter, and
+                 since the glibc definition is actually more typesafe, it is
+                 not worth wrapping this to get a compliant signature.  */
+              int (*f) (struct timeval *restrict, void *restrict)
+                = gettimeofday;
+              int x = f (&c, 0);
+              return !(x | c.tv_sec | c.tv_usec);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gl_cv_func_gettimeofday_posix_signature=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/time.h>
+int gettimeofday (struct timeval *restrict, struct timezone *restrict);
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gl_cv_func_gettimeofday_posix_signature=almost
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       gl_cv_func_gettimeofday_posix_signature=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
 
-  if test $gl_cv_func_gettimeofday_posix_signature != yes; then
-    REPLACE_GETTIMEOFDAY=1
-    SYS_TIME_H=sys/time.h
-    if test $gl_cv_func_gettimeofday_clobber != yes; then
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_gettimeofday_posix_signature" >&5
+$as_echo "$gl_cv_func_gettimeofday_posix_signature" >&6; }
+    if test $gl_cv_func_gettimeofday_posix_signature = almost; then
+      gl_gettimeofday_timezone='struct timezone'
+    elif test $gl_cv_func_gettimeofday_posix_signature != yes; then
+      REPLACE_GETTIMEOFDAY=1
 
 
 
@@ -24173,20 +29334,21 @@ _ACEOF
 
 for ac_header in sys/timeb.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -24202,32 +29364,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -24241,51 +29404,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -24294,21 +29458,24 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -24318,11 +29485,11 @@ done
 
 for ac_func in _ftime
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -24375,35 +29542,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -24413,6 +29587,22 @@ done
     fi
   fi
 
+cat >>confdefs.h <<_ACEOF
+#define GETTIMEOFDAY_TIMEZONE $gl_gettimeofday_timezone
+_ACEOF
+
+
+
+
+  GNULIB_GETTIMEOFDAY=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_GETTIMEOFDAY 1
+_ACEOF
+
+
+
 
 
 
@@ -24443,10 +29633,10 @@ done
 
 
 
-  { echo "$as_me:$LINENO: checking whether the compiler generally respects inline" >&5
-echo $ECHO_N "checking whether the compiler generally respects inline... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether the compiler generally respects inline" >&5
+$as_echo_n "checking whether the compiler generally respects inline... " >&6; }
 if test "${gl_cv_c_inline_effective+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test $ac_cv_c_inline = no; then
        gl_cv_c_inline_effective=no
@@ -24474,20 +29664,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gl_cv_c_inline_effective=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gl_cv_c_inline_effective=no
@@ -24497,8 +29688,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
      fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_c_inline_effective" >&5
-echo "${ECHO_T}$gl_cv_c_inline_effective" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_c_inline_effective" >&5
+$as_echo "$gl_cv_c_inline_effective" >&6; }
   if test $gl_cv_c_inline_effective = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -24578,21 +29769,27 @@ _ACEOF
 
 
 
-              { echo "$as_me:$LINENO: checking whether inttypes.h conforms to C99" >&5
-echo $ECHO_N "checking whether inttypes.h conforms to C99... $ECHO_C" >&6; }
+
+
+
+
+
+
+              { $as_echo "$as_me:$LINENO: checking whether inttypes.h conforms to C99" >&5
+$as_echo_n "checking whether inttypes.h conforms to C99... " >&6; }
 if test "${gl_cv_header_working_inttypes_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   gl_cv_header_working_inttypes_h=no
      if test "$gl_cv_header_working_stdint_h" = yes \
-       && test $ac_cv_header_inttypes_h = yes \
-       && test "$ac_cv_have_decl_imaxabs" = yes \
-       && test "$ac_cv_have_decl_imaxdiv" = yes \
-       && test "$ac_cv_have_decl_strtoimax" = yes \
-       && test "$ac_cv_have_decl_strtoumax" = yes; then
+        && test $ac_cv_header_inttypes_h = yes \
+        && test "$ac_cv_have_decl_imaxabs" = yes \
+        && test "$ac_cv_have_decl_imaxdiv" = yes \
+        && test "$ac_cv_have_decl_strtoimax" = yes \
+        && test "$ac_cv_have_decl_strtoumax" = yes; then
        cat >conftest.$ac_ext <<_ACEOF
 
-        /* confdefs.h.  */
+         /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
@@ -24711,20 +29908,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gl_cv_header_working_inttypes_h=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
      fi
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_header_working_inttypes_h" >&5
-echo "${ECHO_T}$gl_cv_header_working_inttypes_h" >&6; }
-
-    if false && test $gl_cv_header_working_inttypes_h = yes; then
-        INTTYPES_H=''
-  else
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_working_inttypes_h" >&5
+$as_echo "$gl_cv_header_working_inttypes_h" >&6; }
 
 
 
@@ -24755,14 +29949,14 @@ echo "${ECHO_T}$gl_cv_header_working_inttypes_h" >&6; }
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_inttypes_h='<'inttypes.h'>'
      else
-       { echo "$as_me:$LINENO: checking absolute name of <inttypes.h>" >&5
-echo $ECHO_N "checking absolute name of <inttypes.h>... $ECHO_C" >&6; }
+       { $as_echo "$as_me:$LINENO: checking absolute name of <inttypes.h>" >&5
+$as_echo_n "checking absolute name of <inttypes.h>... " >&6; }
 if test "${gl_cv_next_inttypes_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-         if test $ac_cv_header_inttypes_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
+          if test $ac_cv_header_inttypes_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -24771,27 +29965,36 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <inttypes.h>
 
 _ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_inttypes_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/inttypes.h#{
-                s#.*"\(.*/inttypes.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_inttypes_h='<'inttypes.h'>'
-         fi
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_inttypes_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/inttypes.h#{
+                 s#.*"\(.*/inttypes.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_inttypes_h='<'inttypes.h'>'
+          fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_inttypes_h" >&5
-echo "${ECHO_T}$gl_cv_next_inttypes_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_inttypes_h" >&5
+$as_echo "$gl_cv_next_inttypes_h" >&6; }
      fi
      NEXT_INTTYPES_H=$gl_cv_next_inttypes_h
 
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'inttypes.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_inttypes_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H=$gl_next_as_first_directive
+
 
 
 
@@ -24805,26 +30008,26 @@ _ACEOF
 
 
 
-    PRIPTR_PREFIX=
-    if test -n "$STDINT_H"; then
-            PRIPTR_PREFIX='"l"'
-    else
-            for glpfx in '' l ll I64; do
-        case $glpfx in
-          '')  gltype1='int';;
-          l)   gltype1='long int';;
-          ll)  gltype1='long long int';;
-          I64) gltype1='__int64';;
-        esac
-        cat >conftest.$ac_ext <<_ACEOF
+  PRIPTR_PREFIX=
+  if test -n "$STDINT_H"; then
+        PRIPTR_PREFIX='"l"'
+  else
+        for glpfx in '' l ll I64; do
+      case $glpfx in
+        '')  gltype1='int';;
+        l)   gltype1='long int';;
+        ll)  gltype1='long long int';;
+        I64) gltype1='__int64';;
+      esac
+      cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <stdint.h>
-             extern intptr_t foo;
-             extern $gltype1 foo;
+           extern intptr_t foo;
+           extern $gltype1 foo;
 int
 main ()
 {
@@ -24839,136 +30042,525 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   PRIPTR_PREFIX='"'$glpfx'"'
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-        test -n "$PRIPTR_PREFIX" && break
+      test -n "$PRIPTR_PREFIX" && break
+    done
+  fi
+
+
+  if test "$ac_cv_have_decl_imaxabs" = yes; then
+    HAVE_DECL_IMAXABS=1
+  else
+    HAVE_DECL_IMAXABS=0
+  fi
+
+  if test "$ac_cv_have_decl_imaxdiv" = yes; then
+    HAVE_DECL_IMAXDIV=1
+  else
+    HAVE_DECL_IMAXDIV=0
+  fi
+
+  if test "$ac_cv_have_decl_strtoimax" = yes; then
+    HAVE_DECL_STRTOIMAX=1
+  else
+    HAVE_DECL_STRTOIMAX=0
+  fi
+
+  if test "$ac_cv_have_decl_strtoumax" = yes; then
+    HAVE_DECL_STRTOUMAX=1
+  else
+    HAVE_DECL_STRTOUMAX=0
+  fi
+
+
+  { $as_echo "$as_me:$LINENO: checking whether INT32_MAX < INTMAX_MAX" >&5
+$as_echo_n "checking whether INT32_MAX < INTMAX_MAX... " >&6; }
+if test "${gl_cv_test_INT32_MAX_LT_INTMAX_MAX+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Work also in C++ mode.  */
+            #define __STDC_LIMIT_MACROS 1
+
+            /* Work if build is not clean.  */
+            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+            #include <limits.h>
+            #if HAVE_STDINT_H
+             #include <stdint.h>
+            #endif
+
+            #if defined INT32_MAX && defined INTMAX_MAX
+             #define CONDITION (INT32_MAX < INTMAX_MAX)
+            #elif HAVE_LONG_LONG_INT
+             #define CONDITION (sizeof (int) < sizeof (long long int))
+            #else
+             #define CONDITION 0
+            #endif
+            int test[CONDITION ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gl_cv_test_INT32_MAX_LT_INTMAX_MAX=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       gl_cv_test_INT32_MAX_LT_INTMAX_MAX=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&5
+$as_echo "$gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&6; }
+  if test $gl_cv_test_INT32_MAX_LT_INTMAX_MAX = yes; then
+    INT32_MAX_LT_INTMAX_MAX=1;
+  else
+    INT32_MAX_LT_INTMAX_MAX=0;
+  fi
+
+
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+  { $as_echo "$as_me:$LINENO: checking whether INT64_MAX == LONG_MAX" >&5
+$as_echo_n "checking whether INT64_MAX == LONG_MAX... " >&6; }
+if test "${gl_cv_test_INT64_MAX_EQ_LONG_MAX+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Work also in C++ mode.  */
+            #define __STDC_LIMIT_MACROS 1
+
+            /* Work if build is not clean.  */
+            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+            #include <limits.h>
+            #if HAVE_STDINT_H
+             #include <stdint.h>
+            #endif
+
+            #if defined INT64_MAX
+             #define CONDITION (INT64_MAX == LONG_MAX)
+            #elif HAVE_LONG_LONG_INT
+             #define CONDITION (sizeof (long long int) == sizeof (long int))
+            #else
+             #define CONDITION 0
+            #endif
+            int test[CONDITION ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gl_cv_test_INT64_MAX_EQ_LONG_MAX=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       gl_cv_test_INT64_MAX_EQ_LONG_MAX=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&5
+$as_echo "$gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&6; }
+  if test $gl_cv_test_INT64_MAX_EQ_LONG_MAX = yes; then
+    INT64_MAX_EQ_LONG_MAX=1;
+  else
+    INT64_MAX_EQ_LONG_MAX=0;
+  fi
+
+
+  else
+    INT64_MAX_EQ_LONG_MAX=-1
+  fi
+
+  { $as_echo "$as_me:$LINENO: checking whether UINT32_MAX < UINTMAX_MAX" >&5
+$as_echo_n "checking whether UINT32_MAX < UINTMAX_MAX... " >&6; }
+if test "${gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Work also in C++ mode.  */
+            #define __STDC_LIMIT_MACROS 1
+
+            /* Work if build is not clean.  */
+            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+            #include <limits.h>
+            #if HAVE_STDINT_H
+             #include <stdint.h>
+            #endif
+
+            #if defined UINT32_MAX && defined UINTMAX_MAX
+             #define CONDITION (UINT32_MAX < UINTMAX_MAX)
+            #elif HAVE_LONG_LONG_INT
+             #define CONDITION (sizeof (unsigned int) < sizeof (unsigned long long int))
+            #else
+             #define CONDITION 0
+            #endif
+            int test[CONDITION ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&5
+$as_echo "$gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&6; }
+  if test $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX = yes; then
+    UINT32_MAX_LT_UINTMAX_MAX=1;
+  else
+    UINT32_MAX_LT_UINTMAX_MAX=0;
+  fi
+
+
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+  { $as_echo "$as_me:$LINENO: checking whether UINT64_MAX == ULONG_MAX" >&5
+$as_echo_n "checking whether UINT64_MAX == ULONG_MAX... " >&6; }
+if test "${gl_cv_test_UINT64_MAX_EQ_ULONG_MAX+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Work also in C++ mode.  */
+            #define __STDC_LIMIT_MACROS 1
+
+            /* Work if build is not clean.  */
+            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+            #include <limits.h>
+            #if HAVE_STDINT_H
+             #include <stdint.h>
+            #endif
+
+            #if defined UINT64_MAX
+             #define CONDITION (UINT64_MAX == ULONG_MAX)
+            #elif HAVE_LONG_LONG_INT
+             #define CONDITION (sizeof (unsigned long long int) == sizeof (unsigned long int))
+            #else
+             #define CONDITION 0
+            #endif
+            int test[CONDITION ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&5
+$as_echo "$gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&6; }
+  if test $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX = yes; then
+    UINT64_MAX_EQ_ULONG_MAX=1;
+  else
+    UINT64_MAX_EQ_ULONG_MAX=0;
+  fi
+
+
+  else
+    UINT64_MAX_EQ_ULONG_MAX=-1
+  fi
+
+
+
+
+
+
+  for gl_func in imaxabs imaxdiv strtoimax strtoumax; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:$LINENO: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <inttypes.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_gl_Symbol=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_gl_Symbol=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+     as_val=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+
       done
-    fi
 
 
-    if test "$ac_cv_have_decl_imaxabs" = yes; then
-      HAVE_DECL_IMAXABS=1
-    else
-      HAVE_DECL_IMAXABS=0
-    fi
 
-    if test "$ac_cv_have_decl_imaxdiv" = yes; then
-      HAVE_DECL_IMAXDIV=1
-    else
-      HAVE_DECL_IMAXDIV=0
-    fi
 
-    if test "$ac_cv_have_decl_strtoimax" = yes; then
-      HAVE_DECL_STRTOIMAX=1
-    else
-      HAVE_DECL_STRTOIMAX=0
-    fi
 
-    if test "$ac_cv_have_decl_strtoumax" = yes; then
-      HAVE_DECL_STRTOUMAX=1
-    else
-      HAVE_DECL_STRTOUMAX=0
-    fi
 
 
-  { echo "$as_me:$LINENO: checking whether INT32_MAX < INTMAX_MAX" >&5
-echo $ECHO_N "checking whether INT32_MAX < INTMAX_MAX... $ECHO_C" >&6; }
-if test "${gl_cv_test_INT32_MAX_LT_INTMAX_MAX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_langinfo_h='<'langinfo.h'>'
+     else
+       { $as_echo "$as_me:$LINENO: checking absolute name of <langinfo.h>" >&5
+$as_echo_n "checking absolute name of <langinfo.h>... " >&6; }
+if test "${gl_cv_next_langinfo_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
+
+          if test $ac_cv_header_langinfo_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-/* Work also in C++ mode.  */
-           #define __STDC_LIMIT_MACROS 1
+#include <langinfo.h>
 
-           /* Work if build is not clean.  */
-           #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+_ACEOF
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_langinfo_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/langinfo.h#{
+                 s#.*"\(.*/langinfo.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_langinfo_h='<'langinfo.h'>'
+          fi
 
-           #include <limits.h>
-           #if HAVE_STDINT_H
-            #include <stdint.h>
-           #endif
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_langinfo_h" >&5
+$as_echo "$gl_cv_next_langinfo_h" >&6; }
+     fi
+     NEXT_LANGINFO_H=$gl_cv_next_langinfo_h
 
-           #if defined INT32_MAX && defined INTMAX_MAX
-            #define CONDITION (INT32_MAX < INTMAX_MAX)
-           #elif HAVE_LONG_LONG_INT
-            #define CONDITION (sizeof (int) < sizeof (long long int))
-           #else
-            #define CONDITION 0
-           #endif
-           int test[CONDITION ? 1 : -1];
-int
-main ()
-{
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'langinfo.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_langinfo_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H=$gl_next_as_first_directive
 
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  gl_cv_test_INT32_MAX_LT_INTMAX_MAX=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-       gl_cv_test_INT32_MAX_LT_INTMAX_MAX=no
-fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&5
-echo "${ECHO_T}$gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&6; }
-  if test $gl_cv_test_INT32_MAX_LT_INTMAX_MAX = yes; then
-    INT32_MAX_LT_INTMAX_MAX=1;
-  else
-    INT32_MAX_LT_INTMAX_MAX=0;
-  fi
 
+    HAVE_LANGINFO_CODESET=0
+  HAVE_LANGINFO_ERA=0
 
-    if test $APPLE_UNIVERSAL_BUILD = 0; then
 
-  { echo "$as_me:$LINENO: checking whether INT64_MAX == LONG_MAX" >&5
-echo $ECHO_N "checking whether INT64_MAX == LONG_MAX... $ECHO_C" >&6; }
-if test "${gl_cv_test_INT64_MAX_EQ_LONG_MAX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+
+
+
+  if test $ac_cv_header_langinfo_h = yes; then
+    HAVE_LANGINFO_H=1
+            { $as_echo "$as_me:$LINENO: checking whether langinfo.h defines CODESET" >&5
+$as_echo_n "checking whether langinfo.h defines CODESET... " >&6; }
+if test "${gl_cv_header_langinfo_codeset+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -24976,25 +30568,9 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-/* Work also in C++ mode.  */
-           #define __STDC_LIMIT_MACROS 1
-
-           /* Work if build is not clean.  */
-           #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-
-           #include <limits.h>
-           #if HAVE_STDINT_H
-            #include <stdint.h>
-           #endif
+#include <langinfo.h>
+int a = CODESET;
 
-           #if defined INT64_MAX
-            #define CONDITION (INT64_MAX == LONG_MAX)
-           #elif HAVE_LONG_LONG_INT
-            #define CONDITION (sizeof (long long int) == sizeof (long int))
-           #else
-            #define CONDITION 0
-           #endif
-           int test[CONDITION ? 1 : -1];
 int
 main ()
 {
@@ -25009,44 +30585,38 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  gl_cv_test_INT64_MAX_EQ_LONG_MAX=yes
+  gl_cv_header_langinfo_codeset=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       gl_cv_test_INT64_MAX_EQ_LONG_MAX=no
+       gl_cv_header_langinfo_codeset=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&5
-echo "${ECHO_T}$gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&6; }
-  if test $gl_cv_test_INT64_MAX_EQ_LONG_MAX = yes; then
-    INT64_MAX_EQ_LONG_MAX=1;
-  else
-    INT64_MAX_EQ_LONG_MAX=0;
-  fi
-
 
-    else
-      INT64_MAX_EQ_LONG_MAX=-1
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_langinfo_codeset" >&5
+$as_echo "$gl_cv_header_langinfo_codeset" >&6; }
+    if test $gl_cv_header_langinfo_codeset = yes; then
+      HAVE_LANGINFO_CODESET=1
     fi
-
-  { echo "$as_me:$LINENO: checking whether UINT32_MAX < UINTMAX_MAX" >&5
-echo $ECHO_N "checking whether UINT32_MAX < UINTMAX_MAX... $ECHO_C" >&6; }
-if test "${gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+    { $as_echo "$as_me:$LINENO: checking whether langinfo.h defines ERA" >&5
+$as_echo_n "checking whether langinfo.h defines ERA... " >&6; }
+if test "${gl_cv_header_langinfo_era+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -25054,25 +30624,9 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-/* Work also in C++ mode.  */
-           #define __STDC_LIMIT_MACROS 1
-
-           /* Work if build is not clean.  */
-           #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-
-           #include <limits.h>
-           #if HAVE_STDINT_H
-            #include <stdint.h>
-           #endif
+#include <langinfo.h>
+int a = ERA;
 
-           #if defined UINT32_MAX && defined UINTMAX_MAX
-            #define CONDITION (UINT32_MAX < UINTMAX_MAX)
-           #elif HAVE_LONG_LONG_INT
-            #define CONDITION (sizeof (unsigned int) < sizeof (unsigned long long int))
-           #else
-            #define CONDITION 0
-           #endif
-           int test[CONDITION ? 1 : -1];
 int
 main ()
 {
@@ -25087,42 +30641,49 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=yes
+  gl_cv_header_langinfo_era=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=no
+       gl_cv_header_langinfo_era=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&5
-echo "${ECHO_T}$gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&6; }
-  if test $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX = yes; then
-    UINT32_MAX_LT_UINTMAX_MAX=1;
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_langinfo_era" >&5
+$as_echo "$gl_cv_header_langinfo_era" >&6; }
+    if test $gl_cv_header_langinfo_era = yes; then
+      HAVE_LANGINFO_ERA=1
+    fi
   else
-    UINT32_MAX_LT_UINTMAX_MAX=0;
+    HAVE_LANGINFO_H=0
   fi
 
 
-    if test $APPLE_UNIVERSAL_BUILD = 0; then
 
-  { echo "$as_me:$LINENO: checking whether UINT64_MAX == ULONG_MAX" >&5
-echo $ECHO_N "checking whether UINT64_MAX == ULONG_MAX... $ECHO_C" >&6; }
-if test "${gl_cv_test_UINT64_MAX_EQ_ULONG_MAX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+
+
+  for gl_func in nl_langinfo; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:$LINENO: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -25130,29 +30691,13 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-/* Work also in C++ mode.  */
-           #define __STDC_LIMIT_MACROS 1
-
-           /* Work if build is not clean.  */
-           #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-
-           #include <limits.h>
-           #if HAVE_STDINT_H
-            #include <stdint.h>
-           #endif
+#include <langinfo.h>
 
-           #if defined UINT64_MAX
-            #define CONDITION (UINT64_MAX == ULONG_MAX)
-           #elif HAVE_LONG_LONG_INT
-            #define CONDITION (sizeof (unsigned long long int) == sizeof (unsigned long int))
-           #else
-            #define CONDITION 0
-           #endif
-           int test[CONDITION ? 1 : -1];
 int
 main ()
 {
-
+#undef $gl_func
+  (void) $gl_func;
   ;
   return 0;
 }
@@ -25163,42 +30708,49 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=yes
+  eval "$as_gl_Symbol=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=no
+       eval "$as_gl_Symbol=no"
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&5
-echo "${ECHO_T}$gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&6; }
-  if test $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX = yes; then
-    UINT64_MAX_EQ_ULONG_MAX=1;
-  else
-    UINT64_MAX_EQ_ULONG_MAX=0;
-  fi
+ac_res=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+     as_val=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+
+      done
+
+
+
 
 
-    else
-      UINT64_MAX_EQ_ULONG_MAX=-1
-    fi
 
-    INTTYPES_H='inttypes.h'
-  fi
 
 
 
@@ -25215,11 +30767,11 @@ echo "${ECHO_T}$gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&6; }
 
 for ac_func in lchown
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -25272,35 +30824,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
@@ -25312,6 +30871,19 @@ done
 
 
   if test $ac_cv_func_lchown = no; then
+    HAVE_LCHOWN=0
+  elif test "$gl_cv_func_chown_slash_works" != yes \
+      || test "$gl_cv_func_chown_ctime_works" != yes; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS lchown.$ac_objext"
+
     REPLACE_LCHOWN=1
   fi
 
@@ -25320,6 +30892,14 @@ done
   GNULIB_LCHOWN=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_LCHOWN 1
+_ACEOF
+
+
+
+
+
 
 
 
@@ -25334,10 +30914,10 @@ done
 
 
 
-  { echo "$as_me:$LINENO: checking whether lseek detects pipes" >&5
-echo $ECHO_N "checking whether lseek detects pipes... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether lseek detects pipes" >&5
+$as_echo_n "checking whether lseek detects pipes... " >&6; }
 if test "${gl_cv_func_lseek_pipe+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test $cross_compiling = no; then
        cat >conftest.$ac_ext <<_ACEOF
@@ -25357,32 +30937,37 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   if test -s conftest$ac_exeext \
-            && ./conftest$ac_exeext < conftest.$ac_ext \
-            && { echo hi | ./conftest$ac_exeext; test $? = 1; }; then
-           gl_cv_func_lseek_pipe=yes
-         else
-           gl_cv_func_lseek_pipe=no
-         fi
+             && ./conftest$ac_exeext < conftest.$ac_ext \
+             && test 1 = "`echo hi \
+               | { ./conftest$ac_exeext; echo $?; cat >/dev/null; }`"; then
+            gl_cv_func_lseek_pipe=yes
+          else
+            gl_cv_func_lseek_pipe=no
+          fi
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gl_cv_func_lseek_pipe=no
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
      else
@@ -25399,20 +30984,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gl_cv_func_lseek_pipe=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gl_cv_func_lseek_pipe=no
@@ -25421,8 +31007,8 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
      fi
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_lseek_pipe" >&5
-echo "${ECHO_T}$gl_cv_func_lseek_pipe" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_lseek_pipe" >&5
+$as_echo "$gl_cv_func_lseek_pipe" >&6; }
   if test $gl_cv_func_lseek_pipe = no; then
 
 
@@ -25450,6 +31036,13 @@ _ACEOF
   GNULIB_LSEEK=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_LSEEK 1
+_ACEOF
+
+
+
+
 
 
 
@@ -25458,16 +31051,185 @@ _ACEOF
 
 
   if test $ac_cv_func_lstat = yes; then
-    { echo "$as_me:$LINENO: checking whether lstat dereferences a symlink specified with a trailing slash" >&5
-echo $ECHO_N "checking whether lstat dereferences a symlink specified with a trailing slash... $ECHO_C" >&6; }
-if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+    if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then
+            REPLACE_LSTAT=1
+    fi
+    # Prerequisites of lib/lstat.c.
+
+  else
+    HAVE_LSTAT=0
+  fi
+
+
+
+  GNULIB_LSTAT=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_LSTAT 1
+_ACEOF
+
+
+
+
+for ac_header in stdlib.h
+do
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to bug-tar@gnu.org ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+
+fi
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+{ $as_echo "$as_me:$LINENO: checking for GNU libc compatible malloc" >&5
+$as_echo_n "checking for GNU libc compatible malloc... " >&6; }
+if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
-  rm -f conftest.sym conftest.file
-echo >conftest.file
-if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then
   if test "$cross_compiling" = yes; then
-  ac_cv_func_lstat_dereferences_slashed_symlink=no
+  ac_cv_func_malloc_0_nonnull=no
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -25475,15 +31237,16 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-$ac_includes_default
+#if defined STDC_HEADERS || defined HAVE_STDLIB_H
+# include <stdlib.h>
+#else
+char *malloc ();
+#endif
+
 int
 main ()
 {
-struct stat sbuf;
-     /* Linux will dereference the symlink and fail.
-       That is better in the sense that it means we will not
-       have to compile and use the lstat wrapper.  */
-     return lstat ("conftest.sym/", &sbuf) == 0;
+return ! malloc (0);
   ;
   return 0;
 }
@@ -25494,227 +31257,561 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_malloc_0_nonnull=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_malloc_0_nonnull=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_malloc_0_nonnull" >&5
+$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; }
+if test $ac_cv_func_malloc_0_nonnull = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MALLOC 1
+_ACEOF
+
+else
+  cat >>confdefs.h <<\_ACEOF
+#define HAVE_MALLOC 0
+_ACEOF
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext"
+
+
+cat >>confdefs.h <<\_ACEOF
+#define malloc rpl_malloc
+_ACEOF
+
+fi
+
+
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_MALLOC_GNU 1
+_ACEOF
+
+
+
+  if test $gl_cv_func_malloc_posix = yes; then
+    HAVE_MALLOC_POSIX=1
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MALLOC_POSIX 1
+_ACEOF
+
+  else
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext"
+
+    HAVE_MALLOC_POSIX=0
+  fi
+
+
+
+
+  GNULIB_MALLOC_POSIX=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_MALLOC_POSIX 1
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then
+
+
+
+     { $as_echo "$as_me:$LINENO: checking whether mbrtowc handles incomplete characters" >&5
+$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; }
+if test "${gl_cv_func_mbrtowc_incomplete_state+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+              # Guess no on AIX and OSF/1.
+        osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;;
+              # Guess yes otherwise.
+        *)    gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;;
+      esac
+      if test $LOCALE_JA != none; then
+        if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+  if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+    {
+      const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        if (mbsinit (&state))
+          return 1;
+    }
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_mbrtowc_incomplete_state=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gl_cv_func_mbrtowc_incomplete_state=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+      fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_incomplete_state" >&5
+$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; }
+
+
+
+
+     { $as_echo "$as_me:$LINENO: checking whether mbrtowc works as well as mbtowc" >&5
+$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; }
+if test "${gl_cv_func_mbrtowc_sanitycheck+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                    # Guess no on Solaris 8.
+        solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;;
+                    # Guess yes otherwise.
+        *)          gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;;
+      esac
+      if test $LOCALE_ZH_CN != none; then
+        if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+  /* This fails on Solaris 8:
+     mbrtowc returns 2, and sets wc to 0x00F0.
+     mbtowc returns 4 (correct) and sets wc to 0x5EDC.  */
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 6, &state) != 4
+          && mbtowc (&wc, input + 3, 6) == 4)
+        return 1;
+    }
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  ac_cv_func_lstat_dereferences_slashed_symlink=yes
+  gl_cv_func_mbrtowc_sanitycheck=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-ac_cv_func_lstat_dereferences_slashed_symlink=no
+gl_cv_func_mbrtowc_sanitycheck=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
-else
-  # If the `ln -s' command failed, then we probably don't even
-  # have an lstat function.
-  ac_cv_func_lstat_dereferences_slashed_symlink=no
-fi
-rm -f conftest.sym conftest.file
+      fi
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5
-echo "${ECHO_T}$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; }
-
-test $ac_cv_func_lstat_dereferences_slashed_symlink = yes &&
-
-cat >>confdefs.h <<_ACEOF
-#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1
-_ACEOF
-
-
-if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then
-
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_sanitycheck" >&5
+$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; }
 
+    REPLACE_MBSTATE_T=0
+    case "$gl_cv_func_mbrtowc_incomplete_state" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+    case "$gl_cv_func_mbrtowc_sanitycheck" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+  else
+    REPLACE_MBSTATE_T=1
+  fi
+  if test $REPLACE_MBSTATE_T = 1; then
 
+    :
 
+  fi
 
+  if test $REPLACE_MBSTATE_T = 1; then
+    REPLACE_MBRTOWC=1
+  fi
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS lstat.$ac_objext"
 
-fi
 
-        if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then
-      REPLACE_LSTAT=1
-    fi
-    # Prerequisites of lib/lstat.c.
 
+  if test $ac_cv_func_mbrtowc = no; then
+    HAVE_MBRTOWC=0
   fi
+  if test $HAVE_MBRTOWC != 0 && test $REPLACE_MBRTOWC != 1; then
 
 
 
-  GNULIB_LSTAT=1
-
+     { $as_echo "$as_me:$LINENO: checking whether mbrtowc handles a NULL string argument" >&5
+$as_echo_n "checking whether mbrtowc handles a NULL string argument... " >&6; }
+if test "${gl_cv_func_mbrtowc_null_arg+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
 
-for ac_header in stdlib.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+                  case "$host_os" in
+              # Guess no on OSF/1.
+        osf*) gl_cv_func_mbrtowc_null_arg="guessing no" ;;
+              # Guess yes otherwise.
+        *)    gl_cv_func_mbrtowc_null_arg="guessing yes" ;;
+      esac
+      if test $LOCALE_FR_UTF8 != none; then
+        if test "$cross_compiling" = yes; then
+  :
 else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
+  cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
+
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+    {
+      mbstate_t state;
+      wchar_t wc;
+      int ret;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      wc = (wchar_t) 0xBADFACE;
+      mbrtowc (&wc, NULL, 5, &state);
+      /* Check that wc was not modified.  */
+      if (wc != (wchar_t) 0xBADFACE)
+        return 1;
+    }
+  return 0;
+}
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_mbrtowc_null_arg=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_header_compiler=no
+( exit $ac_status )
+gl_cv_func_mbrtowc_null_arg=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
 
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
+      fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_null_arg" >&5
+$as_echo "$gl_cv_func_mbrtowc_null_arg" >&6; }
+
+
+
+
+
+     { $as_echo "$as_me:$LINENO: checking whether mbrtowc has a correct return value" >&5
+$as_echo_n "checking whether mbrtowc has a correct return value... " >&6; }
+if test "${gl_cv_func_mbrtowc_retval+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+                  case "$host_os" in
+                          # Guess no on HP-UX and Solaris.
+        hpux* | solaris*) gl_cv_func_mbrtowc_retval="guessing no" ;;
+                          # Guess yes otherwise.
+        *)                gl_cv_func_mbrtowc_retval="guessing yes" ;;
+      esac
+      if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none; then
+        if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <$ac_header>
+
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+  /* This fails on Solaris.  */
+  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+    {
+      char input[] = "B\303\274\303\237er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        {
+          input[1] = '\0';
+          if (mbrtowc (&wc, input + 2, 5, &state) != 1)
+            return 1;
+        }
+    }
+  /* This fails on HP-UX 11.11.  */
+  if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+    {
+      char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        {
+          input[1] = '\0';
+          if (mbrtowc (&wc, input + 2, 5, &state) != 2)
+            return 1;
+        }
+    }
+  return 0;
+}
 _ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_mbrtowc_retval=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-  ac_header_preproc=no
+( exit $ac_status )
+gl_cv_func_mbrtowc_retval=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
 
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ------------------------------ ##
-## Report this to bug-tar@gnu.org ##
-## ------------------------------ ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+      fi
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_retval" >&5
+$as_echo "$gl_cv_func_mbrtowc_retval" >&6; }
 
-fi
 
-done
 
-{ echo "$as_me:$LINENO: checking for GNU libc compatible malloc" >&5
-echo $ECHO_N "checking for GNU libc compatible malloc... $ECHO_C" >&6; }
-if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+     { $as_echo "$as_me:$LINENO: checking whether mbrtowc returns 0 when parsing a NUL character" >&5
+$as_echo_n "checking whether mbrtowc returns 0 when parsing a NUL character... " >&6; }
+if test "${gl_cv_func_mbrtowc_nul_retval+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
-  if test "$cross_compiling" = yes; then
-  ac_cv_func_malloc_0_nonnull=no
+
+                  case "$host_os" in
+                       # Guess no on Solaris 8 and 9.
+        solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;;
+                       # Guess yes otherwise.
+        *)             gl_cv_func_mbrtowc_nul_retval="guessing yes" ;;
+      esac
+      if test $LOCALE_ZH_CN != none; then
+        if test "$cross_compiling" = yes; then
+  :
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -25722,17 +31819,22 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#if defined STDC_HEADERS || defined HAVE_STDLIB_H
-# include <stdlib.h>
-#else
-char *malloc ();
-#endif
 
-int
-main ()
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
 {
-return ! malloc (0);
-  ;
+  /* This fails on Solaris 8 and 9.  */
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, "", 1, &state) != 0)
+        return 1;
+    }
   return 0;
 }
 _ACEOF
@@ -25742,103 +31844,111 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  ac_cv_func_malloc_0_nonnull=yes
+  gl_cv_func_mbrtowc_nul_retval=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-ac_cv_func_malloc_0_nonnull=no
+gl_cv_func_mbrtowc_nul_retval=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
+      fi
+
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_malloc_0_nonnull" >&5
-echo "${ECHO_T}$ac_cv_func_malloc_0_nonnull" >&6; }
-if test $ac_cv_func_malloc_0_nonnull = yes; then
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_nul_retval" >&5
+$as_echo "$gl_cv_func_mbrtowc_nul_retval" >&6; }
 
+    case "$gl_cv_func_mbrtowc_null_arg" in
+      *yes) ;;
+      *)
 cat >>confdefs.h <<\_ACEOF
-#define HAVE_MALLOC 1
+#define MBRTOWC_NULL_ARG_BUG 1
 _ACEOF
 
-else
-  cat >>confdefs.h <<\_ACEOF
-#define HAVE_MALLOC 0
+         REPLACE_MBRTOWC=1
+         ;;
+    esac
+    case "$gl_cv_func_mbrtowc_retval" in
+      *yes) ;;
+      *)
+cat >>confdefs.h <<\_ACEOF
+#define MBRTOWC_RETVAL_BUG 1
 _ACEOF
 
-
-
-
-
-
-
-
-
-  gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext"
-
-
+         REPLACE_MBRTOWC=1
+         ;;
+    esac
+    case "$gl_cv_func_mbrtowc_nul_retval" in
+      *yes) ;;
+      *)
 cat >>confdefs.h <<\_ACEOF
-#define malloc rpl_malloc
+#define MBRTOWC_NUL_RETVAL_BUG 1
 _ACEOF
 
-fi
-
-
+         REPLACE_MBRTOWC=1
+         ;;
+    esac
+  fi
+  if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then
 
+    :
 
-cat >>confdefs.h <<\_ACEOF
-#define GNULIB_MALLOC_GNU 1
-_ACEOF
 
 
 
-  if test $gl_cv_func_malloc_posix = yes; then
-    HAVE_MALLOC_POSIX=1
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_MALLOC_POSIX 1
-_ACEOF
 
-  else
 
 
 
+  gl_LIBOBJS="$gl_LIBOBJS mbrtowc.$ac_objext"
 
 
+  :
 
+  fi
 
 
-  gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext"
 
-    HAVE_MALLOC_POSIX=0
-  fi
+  GNULIB_MBRTOWC=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_MBRTOWC 1
+_ACEOF
 
 
-  GNULIB_MALLOC_POSIX=1
 
 
 
+  GNULIB_MBSCASECMP=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_MBSCASECMP 1
+_ACEOF
 
 
 
@@ -25866,10 +31976,10 @@ _ACEOF
 
 
 
-     { echo "$as_me:$LINENO: checking whether mbrtowc handles incomplete characters" >&5
-echo $ECHO_N "checking whether mbrtowc handles incomplete characters... $ECHO_C" >&6; }
+     { $as_echo "$as_me:$LINENO: checking whether mbrtowc handles incomplete characters" >&5
+$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; }
 if test "${gl_cv_func_mbrtowc_incomplete_state+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
                   case "$host_os" in
@@ -25880,11 +31990,7 @@ else
       esac
       if test $LOCALE_JA != none; then
         if test "$cross_compiling" = yes; then
-  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+  :
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -25918,29 +32024,32 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_func_mbrtowc_incomplete_state=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 gl_cv_func_mbrtowc_incomplete_state=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
       fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_incomplete_state" >&5
-echo "${ECHO_T}$gl_cv_func_mbrtowc_incomplete_state" >&6; }
-
-    case "$gl_cv_func_mbrtowc_incomplete_state" in
-      *yes) REPLACE_MBSTATE_T=0 ;;
-      *)    REPLACE_MBSTATE_T=1 ;;
-    esac
-  else
-    REPLACE_MBSTATE_T=1
-  fi
-  if test $REPLACE_MBSTATE_T = 1; then
-
-
-  WCHAR_H=wchar.h
-
-  fi
-
-  if test $REPLACE_MBSTATE_T = 1; then
-    REPLACE_MBRTOWC=1
-  fi
-
-
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_incomplete_state" >&5
+$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; }
 
 
 
 
-  if test $ac_cv_func_mbrtowc = no; then
-    HAVE_MBRTOWC=0
-  fi
-  if test $HAVE_MBRTOWC != 0 && test $REPLACE_MBRTOWC != 1; then
-
-
-
-     { echo "$as_me:$LINENO: checking whether mbrtowc handles a NULL string argument" >&5
-echo $ECHO_N "checking whether mbrtowc handles a NULL string argument... $ECHO_C" >&6; }
-if test "${gl_cv_func_mbrtowc_null_arg+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+     { $as_echo "$as_me:$LINENO: checking whether mbrtowc works as well as mbtowc" >&5
+$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; }
+if test "${gl_cv_func_mbrtowc_sanitycheck+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
 
                   case "$host_os" in
-              # Guess no on OSF/1.
-        osf*) gl_cv_func_mbrtowc_null_arg="guessing no" ;;
-              # Guess yes otherwise.
-        *)    gl_cv_func_mbrtowc_null_arg="guessing yes" ;;
+                    # Guess no on Solaris 8.
+        solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;;
+                    # Guess yes otherwise.
+        *)          gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;;
       esac
-      if test $LOCALE_FR_UTF8 != none; then
+      if test $LOCALE_ZH_CN != none; then
         if test "$cross_compiling" = yes; then
-  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+  :
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -26009,21 +32087,23 @@ cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 #include <locale.h>
+#include <stdlib.h>
 #include <string.h>
 #include <wchar.h>
 int main ()
 {
-  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+  /* This fails on Solaris 8:
+     mbrtowc returns 2, and sets wc to 0x00F0.
+     mbtowc returns 4 (correct) and sets wc to 0x5EDC.  */
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
     {
+      char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */
       mbstate_t state;
       wchar_t wc;
-      int ret;
 
       memset (&state, '\0', sizeof (mbstate_t));
-      wc = (wchar_t) 0xBADFACE;
-      mbrtowc (&wc, NULL, 5, &state);
-      /* Check that wc was not modified.  */
-      if (wc != (wchar_t) 0xBADFACE)
+      if (mbrtowc (&wc, input + 3, 6, &state) != 4
+          && mbtowc (&wc, input + 3, 6) == 4)
         return 1;
     }
   return 0;
@@ -26035,29 +32115,32 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  gl_cv_func_mbrtowc_null_arg=yes
+  gl_cv_func_mbrtowc_sanitycheck=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-gl_cv_func_mbrtowc_null_arg=no
+gl_cv_func_mbrtowc_sanitycheck=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
       fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_null_arg" >&5
-echo "${ECHO_T}$gl_cv_func_mbrtowc_null_arg" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_sanitycheck" >&5
+$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; }
 
+    REPLACE_MBSTATE_T=0
+    case "$gl_cv_func_mbrtowc_incomplete_state" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+    case "$gl_cv_func_mbrtowc_sanitycheck" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+  else
+    REPLACE_MBSTATE_T=1
+  fi
+  if test $REPLACE_MBSTATE_T = 1; then
 
+    :
 
+  fi
 
+  if test $REPLACE_MBSTATE_T = 1; then
+    REPLACE_MBSINIT=1
+  fi
 
-     { echo "$as_me:$LINENO: checking whether mbrtowc has a correct return value" >&5
-echo $ECHO_N "checking whether mbrtowc has a correct return value... $ECHO_C" >&6; }
-if test "${gl_cv_func_mbrtowc_retval+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+
+
+
+
+  if test $ac_cv_func_mbsinit = no; then
+    HAVE_MBSINIT=0
+  fi
+  if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then
+
+    :
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS mbsinit.$ac_objext"
+
+
+  :
+
+  fi
+
+
+
+  GNULIB_MBSINIT=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_MBSINIT 1
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then
+
+
+
+     { $as_echo "$as_me:$LINENO: checking whether mbrtowc handles incomplete characters" >&5
+$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; }
+if test "${gl_cv_func_mbrtowc_incomplete_state+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
 
                   case "$host_os" in
-                          # Guess no on HP-UX and Solaris.
-        hpux* | solaris*) gl_cv_func_mbrtowc_retval="guessing no" ;;
-                          # Guess yes otherwise.
-        *)                gl_cv_func_mbrtowc_retval="guessing yes" ;;
+              # Guess no on AIX and OSF/1.
+        osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;;
+              # Guess yes otherwise.
+        *)    gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;;
       esac
-      if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none; then
+      if test $LOCALE_JA != none; then
         if test "$cross_compiling" = yes; then
-  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+  :
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -26104,35 +32263,16 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <wchar.h>
 int main ()
 {
-  /* This fails on Solaris.  */
-  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
-    {
-      char input[] = "B\303\274\303\237er"; /* "Büßer" */
-      mbstate_t state;
-      wchar_t wc;
-
-      memset (&state, '\0', sizeof (mbstate_t));
-      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
-        {
-          input[1] = '\0';
-          if (mbrtowc (&wc, input + 2, 5, &state) != 1)
-            return 1;
-        }
-    }
-  /* This fails on HP-UX 11.11.  */
   if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
     {
-      char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+      const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
       mbstate_t state;
       wchar_t wc;
 
       memset (&state, '\0', sizeof (mbstate_t));
       if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
-        {
-          input[1] = '\0';
-          if (mbrtowc (&wc, input + 2, 5, &state) != 2)
-            return 1;
-        }
+        if (mbsinit (&state))
+          return 1;
     }
   return 0;
 }
@@ -26143,29 +32283,32 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  gl_cv_func_mbrtowc_retval=yes
+  gl_cv_func_mbrtowc_incomplete_state=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-gl_cv_func_mbrtowc_retval=no
+gl_cv_func_mbrtowc_incomplete_state=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
       fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_retval" >&5
-echo "${ECHO_T}$gl_cv_func_mbrtowc_retval" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_incomplete_state" >&5
+$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; }
 
 
 
 
-     { echo "$as_me:$LINENO: checking whether mbrtowc returns 0 when parsing a NUL character" >&5
-echo $ECHO_N "checking whether mbrtowc returns 0 when parsing a NUL character... $ECHO_C" >&6; }
-if test "${gl_cv_func_mbrtowc_nul_retval+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+     { $as_echo "$as_me:$LINENO: checking whether mbrtowc works as well as mbtowc" >&5
+$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; }
+if test "${gl_cv_func_mbrtowc_sanitycheck+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
 
                   case "$host_os" in
-                    # Guess no on Solaris 9.
-        solaris2.9) gl_cv_func_mbrtowc_nul_retval="guessing no" ;;
+                    # Guess no on Solaris 8.
+        solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;;
                     # Guess yes otherwise.
-        *)          gl_cv_func_mbrtowc_nul_retval="guessing yes" ;;
+        *)          gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;;
       esac
       if test $LOCALE_ZH_CN != none; then
         if test "$cross_compiling" = yes; then
-  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+  :
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -26207,18 +32346,23 @@ cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
 #include <locale.h>
+#include <stdlib.h>
 #include <string.h>
 #include <wchar.h>
 int main ()
 {
-  /* This fails on Solaris 9.  */
+  /* This fails on Solaris 8:
+     mbrtowc returns 2, and sets wc to 0x00F0.
+     mbtowc returns 4 (correct) and sets wc to 0x5EDC.  */
   if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
     {
+      char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */
       mbstate_t state;
       wchar_t wc;
 
       memset (&state, '\0', sizeof (mbstate_t));
-      if (mbrtowc (&wc, "", 1, &state) != 0)
+      if (mbrtowc (&wc, input + 3, 6, &state) != 4
+          && mbtowc (&wc, input + 3, 6) == 4)
         return 1;
     }
   return 0;
@@ -26230,29 +32374,32 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  gl_cv_func_mbrtowc_nul_retval=yes
+  gl_cv_func_mbrtowc_sanitycheck=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-gl_cv_func_mbrtowc_nul_retval=no
+gl_cv_func_mbrtowc_sanitycheck=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
       fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_nul_retval" >&5
-echo "${ECHO_T}$gl_cv_func_mbrtowc_nul_retval" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_sanitycheck" >&5
+$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; }
 
-    case "$gl_cv_func_mbrtowc_null_arg" in
+    REPLACE_MBSTATE_T=0
+    case "$gl_cv_func_mbrtowc_incomplete_state" in
       *yes) ;;
-      *)
-cat >>confdefs.h <<\_ACEOF
-#define MBRTOWC_NULL_ARG_BUG 1
-_ACEOF
-
-         REPLACE_MBRTOWC=1
-         ;;
+      *) REPLACE_MBSTATE_T=1 ;;
     esac
-    case "$gl_cv_func_mbrtowc_retval" in
+    case "$gl_cv_func_mbrtowc_sanitycheck" in
       *yes) ;;
-      *)
-cat >>confdefs.h <<\_ACEOF
-#define MBRTOWC_RETVAL_BUG 1
-_ACEOF
-
-         REPLACE_MBRTOWC=1
-         ;;
-    esac
-    case "$gl_cv_func_mbrtowc_nul_retval" in
-      *yes) ;;
-      *)
-cat >>confdefs.h <<\_ACEOF
-#define MBRTOWC_NUL_RETVAL_BUG 1
-_ACEOF
-
-         REPLACE_MBRTOWC=1
-         ;;
+      *) REPLACE_MBSTATE_T=1 ;;
     esac
+  else
+    REPLACE_MBSTATE_T=1
   fi
-  if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then
-
-
-  WCHAR_H=wchar.h
-
-
-
-
-
-
-
-
-
-  gl_LIBOBJS="$gl_LIBOBJS mbrtowc.$ac_objext"
-
+  if test $REPLACE_MBSTATE_T = 1; then
 
-  :
+    :
 
   fi
 
-
-
-  GNULIB_MBRTOWC=1
-
-
-
-
-  :
-
-
-
-
-  GNULIB_MBSCASECMP=1
-
-
-
-
-
-
-
-
-
-
-
-
-
+  if test $REPLACE_MBSTATE_T = 1; then
+    REPLACE_MBSRTOWCS=1
+  fi
 
 
 
 
 
 
+  if test $ac_cv_func_mbsrtowcs = no; then
+    HAVE_MBSRTOWCS=0
+  fi
+  if test $HAVE_MBSRTOWCS != 0 && test $REPLACE_MBSRTOWCS != 1; then
 
 
-  if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then
 
 
 
-     { echo "$as_me:$LINENO: checking whether mbrtowc handles incomplete characters" >&5
-echo $ECHO_N "checking whether mbrtowc handles incomplete characters... $ECHO_C" >&6; }
-if test "${gl_cv_func_mbrtowc_incomplete_state+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+     { $as_echo "$as_me:$LINENO: checking whether mbsrtowcs works" >&5
+$as_echo_n "checking whether mbsrtowcs works... " >&6; }
+if test "${gl_cv_func_mbsrtowcs_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
 
                   case "$host_os" in
-              # Guess no on AIX and OSF/1.
-        osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;;
-              # Guess yes otherwise.
-        *)    gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;;
+                          # Guess no on HP-UX and Solaris.
+        hpux* | solaris*) gl_cv_func_mbsrtowcs_works="guessing no" ;;
+                          # Guess yes otherwise.
+        *)                gl_cv_func_mbsrtowcs_works="guessing yes" ;;
       esac
-      if test $LOCALE_JA != none; then
+      if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then
         if test "$cross_compiling" = yes; then
-  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+  :
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -26384,16 +32474,49 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <wchar.h>
 int main ()
 {
+  /* Test whether the function works when started with a conversion state
+     in non-initial state.  This fails on HP-UX 11.11 and Solaris 10.  */
+  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+    {
+      const char input[] = "B\303\274\303\237er";
+      mbstate_t state;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (NULL, input + 1, 1, &state) == (size_t)(-2))
+        if (!mbsinit (&state))
+          {
+            const char *src = input + 2;
+            if (mbsrtowcs (NULL, &src, 10, &state) != 4)
+              return 1;
+          }
+    }
   if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
     {
-      const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+      const char input[] = "<\306\374\313\334\270\354>";
       mbstate_t state;
-      wchar_t wc;
 
       memset (&state, '\0', sizeof (mbstate_t));
-      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
-        if (mbsinit (&state))
-          return 1;
+      if (mbrtowc (NULL, input + 3, 1, &state) == (size_t)(-2))
+        if (!mbsinit (&state))
+          {
+            const char *src = input + 4;
+            if (mbsrtowcs (NULL, &src, 10, &state) != 3)
+              return 1;
+          }
+    }
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      const char input[] = "B\250\271\201\060\211\070er";
+      mbstate_t state;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (NULL, input + 1, 1, &state) == (size_t)(-2))
+        if (!mbsinit (&state))
+          {
+            const char *src = input + 2;
+            if (mbsrtowcs (NULL, &src, 10, &state) != 4)
+              return 1;
+          }
     }
   return 0;
 }
@@ -26404,29 +32527,32 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  gl_cv_func_mbrtowc_incomplete_state=yes
+  gl_cv_func_mbsrtowcs_works=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-gl_cv_func_mbrtowc_incomplete_state=no
+gl_cv_func_mbsrtowcs_works=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
       fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_incomplete_state" >&5
-echo "${ECHO_T}$gl_cv_func_mbrtowc_incomplete_state" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbsrtowcs_works" >&5
+$as_echo "$gl_cv_func_mbsrtowcs_works" >&6; }
 
-    case "$gl_cv_func_mbrtowc_incomplete_state" in
-      *yes) REPLACE_MBSTATE_T=0 ;;
-      *)    REPLACE_MBSTATE_T=1 ;;
+    case "$gl_cv_func_mbsrtowcs_works" in
+      *yes) ;;
+      *) REPLACE_MBSRTOWCS=1 ;;
     esac
-  else
-    REPLACE_MBSTATE_T=1
   fi
-  if test $REPLACE_MBSTATE_T = 1; then
-
-
-  WCHAR_H=wchar.h
+  if test $HAVE_MBSRTOWCS = 0 || test $REPLACE_MBSRTOWCS = 1; then
 
-  fi
+    :
 
-  if test $REPLACE_MBSTATE_T = 1; then
-    REPLACE_MBSINIT=1
-  fi
 
 
 
 
 
 
-  if test $ac_cv_func_mbsinit = no; then
-    HAVE_MBSINIT=0
-  fi
-  if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then
 
 
-  WCHAR_H=wchar.h
+  gl_LIBOBJS="$gl_LIBOBJS mbsrtowcs.$ac_objext"
 
 
 
@@ -26476,7 +32590,7 @@ echo "${ECHO_T}$gl_cv_func_mbrtowc_incomplete_state" >&6; }
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS mbsinit.$ac_objext"
+  gl_LIBOBJS="$gl_LIBOBJS mbsrtowcs-state.$ac_objext"
 
 
   :
@@ -26485,7 +32599,15 @@ echo "${ECHO_T}$gl_cv_func_mbrtowc_incomplete_state" >&6; }
 
 
 
-  GNULIB_MBSINIT=1
+  GNULIB_MBSRTOWCS=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_MBSRTOWCS 1
+_ACEOF
+
+
+
 
 
 
@@ -26495,6 +32617,18 @@ echo "${ECHO_T}$gl_cv_func_mbrtowc_incomplete_state" >&6; }
 
 
 
+  GNULIB_MEMCHR=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_MEMCHR 1
+_ACEOF
+
+
+
+
+
+
 
 
 
@@ -26509,11 +32643,11 @@ echo "${ECHO_T}$gl_cv_func_mbrtowc_incomplete_state" >&6; }
 
 for ac_func in mempcpy
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -26566,35 +32700,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
@@ -26617,6 +32758,13 @@ done
   GNULIB_MEMPCPY=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_MEMPCPY 1
+_ACEOF
+
+
+
+
 
 
 
@@ -26639,11 +32787,11 @@ done
 
 for ac_func in memrchr
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -26696,35 +32844,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
@@ -26744,6 +32899,191 @@ done
   GNULIB_MEMRCHR=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_MEMRCHR 1
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking whether mkdir handles trailing slash" >&5
+$as_echo_n "checking whether mkdir handles trailing slash... " >&6; }
+if test "${gl_cv_func_mkdir_trailing_slash_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  rm -rf conftest.dir
+      if test "$cross_compiling" = yes; then
+  gl_cv_func_mkdir_trailing_slash_works="guessing no"
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#       include <sys/types.h>
+#       include <sys/stat.h>
+
+int
+main ()
+{
+return mkdir ("conftest.dir/", 0700);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_mkdir_trailing_slash_works=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gl_cv_func_mkdir_trailing_slash_works=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+    rm -rf conftest.dir
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mkdir_trailing_slash_works" >&5
+$as_echo "$gl_cv_func_mkdir_trailing_slash_works" >&6; }
+  if test "$gl_cv_func_mkdir_trailing_slash_works" != yes; then
+    REPLACE_MKDIR=1
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS mkdir.$ac_objext"
+
+  fi
+
+  { $as_echo "$as_me:$LINENO: checking whether mkdir handles trailing dot" >&5
+$as_echo_n "checking whether mkdir handles trailing dot... " >&6; }
+if test "${gl_cv_func_mkdir_trailing_dot_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  rm -rf conftest.dir
+      if test "$cross_compiling" = yes; then
+  gl_cv_func_mkdir_trailing_dot_works="guessing no"
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#       include <sys/types.h>
+#       include <sys/stat.h>
+
+int
+main ()
+{
+return !mkdir ("conftest.dir/./", 0700);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_mkdir_trailing_dot_works=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gl_cv_func_mkdir_trailing_dot_works=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+    rm -rf conftest.dir
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mkdir_trailing_dot_works" >&5
+$as_echo "$gl_cv_func_mkdir_trailing_dot_works" >&6; }
+  if test "$gl_cv_func_mkdir_trailing_dot_works" != yes; then
+    REPLACE_MKDIR=1
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS mkdir.$ac_objext"
+
+
+cat >>confdefs.h <<\_ACEOF
+#define FUNC_MKDIR_DOT_BUG 1
+_ACEOF
+
+  fi
+
+
 
 
 
@@ -26756,11 +33096,11 @@ done
 
 for ac_func in mkdtemp
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -26813,35 +33153,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
@@ -26863,6 +33210,14 @@ done
   GNULIB_MKDTEMP=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_MKDTEMP 1
+_ACEOF
+
+
+
+
+
 
 
 
@@ -26882,10 +33237,10 @@ if test $APPLE_UNIVERSAL_BUILD = 1; then
   # But we need a configuration result that is valid in both modes.
   ac_cv_func_working_mktime=no
 fi
-{ echo "$as_me:$LINENO: checking for working mktime" >&5
-echo $ECHO_N "checking for working mktime... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for working mktime" >&5
+$as_echo_n "checking for working mktime... " >&6; }
 if test "${ac_cv_func_working_mktime+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then
   ac_cv_func_working_mktime=no
@@ -26957,8 +33312,8 @@ static int
 mktime_test (time_t now)
 {
   return (mktime_test1 (now)
-         && mktime_test1 ((time_t) (time_t_max - now))
-         && mktime_test1 ((time_t) (time_t_min + now)));
+          && mktime_test1 ((time_t) (time_t_max - now))
+          && mktime_test1 ((time_t) (time_t_min + now)));
 }
 
 static int
@@ -26988,17 +33343,17 @@ bigtime_test (int j)
     {
       struct tm *lt = localtime (&now);
       if (! (lt
-            && lt->tm_year == tm.tm_year
-            && lt->tm_mon == tm.tm_mon
-            && lt->tm_mday == tm.tm_mday
-            && lt->tm_hour == tm.tm_hour
-            && lt->tm_min == tm.tm_min
-            && lt->tm_sec == tm.tm_sec
-            && lt->tm_yday == tm.tm_yday
-            && lt->tm_wday == tm.tm_wday
-            && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst)
-                 == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst))))
-       return 0;
+             && lt->tm_year == tm.tm_year
+             && lt->tm_mon == tm.tm_mon
+             && lt->tm_mday == tm.tm_mday
+             && lt->tm_hour == tm.tm_hour
+             && lt->tm_min == tm.tm_min
+             && lt->tm_sec == tm.tm_sec
+             && lt->tm_yday == tm.tm_yday
+             && lt->tm_wday == tm.tm_wday
+             && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst)
+                  == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst))))
+        return 0;
     }
   return 1;
 }
@@ -27030,7 +33385,7 @@ year_2050_test ()
      to the correct answer that we can assume the discrepancy is
      due to leap seconds.  */
   return (t == (time_t) -1
-         || (0 < t && answer - 120 <= t && t <= answer + 120));
+          || (0 < t && answer - 120 <= t && t <= answer + 120));
 }
 
 int
@@ -27048,7 +33403,7 @@ main ()
     {
       t = (time_t_max << 1) + 1;
       if (t <= time_t_max)
-       break;
+        break;
       time_t_max = t;
     }
   time_t_min = - ((time_t) ~ (time_t) 0 == (time_t) -1) - time_t_max;
@@ -27057,23 +33412,23 @@ main ()
   for (i = 0; i < N_STRINGS; i++)
     {
       if (tz_strings[i])
-       putenv (tz_strings[i]);
+        putenv (tz_strings[i]);
 
       for (t = 0; t <= time_t_max - delta; t += delta)
-       if (! mktime_test (t))
-         return 1;
+        if (! mktime_test (t))
+          return 1;
       if (! (mktime_test ((time_t) 1)
-            && mktime_test ((time_t) (60 * 60))
-            && mktime_test ((time_t) (60 * 60 * 24))))
-       return 1;
+             && mktime_test ((time_t) (60 * 60))
+             && mktime_test ((time_t) (60 * 60 * 24))))
+        return 1;
 
       for (j = 1; ; j <<= 1)
-       if (! bigtime_test (j))
-         return 1;
-       else if (INT_MAX / 2 < j)
-         break;
+        if (! bigtime_test (j))
+          return 1;
+        else if (INT_MAX / 2 < j)
+          break;
       if (! bigtime_test (INT_MAX))
-       return 1;
+        return 1;
     }
   return ! (irix_6_4_bug () && spring_forward_gap () && year_2050_test ());
 }
@@ -27084,36 +33439,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_func_working_mktime=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 ac_cv_func_working_mktime=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_working_mktime" >&5
-echo "${ECHO_T}$ac_cv_func_working_mktime" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_working_mktime" >&5
+$as_echo "$ac_cv_func_working_mktime" >&6; }
 if test $ac_cv_func_working_mktime = no; then
 
 
@@ -27128,15 +33486,26 @@ if test $ac_cv_func_working_mktime = no; then
 fi
 
     if test $ac_cv_func_working_mktime = no; then
+    REPLACE_MKTIME=1
+
+
+
+  else
+    REPLACE_MKTIME=0
+  fi
+
+
+
+  GNULIB_MKTIME=1
+
 
 cat >>confdefs.h <<\_ACEOF
-#define mktime rpl_mktime
+#define GNULIB_MKTIME 1
 _ACEOF
 
 
 
 
-  fi
 
 
 
@@ -27145,9 +33514,62 @@ _ACEOF
 
 
 
+  gl_LIBOBJS="$gl_LIBOBJS modechange.$ac_objext"
 
 
-  gl_LIBOBJS="$gl_LIBOBJS modechange.$ac_objext"
+
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_func_nl_langinfo = yes; then
+    if test $HAVE_LANGINFO_CODESET = 1 && test $HAVE_LANGINFO_ERA = 1; then
+      :
+    else
+      REPLACE_NL_LANGINFO=1
+
+cat >>confdefs.h <<\_ACEOF
+#define REPLACE_NL_LANGINFO 1
+_ACEOF
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS nl_langinfo.$ac_objext"
+
+    fi
+  else
+    HAVE_NL_LANGINFO=0
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS nl_langinfo.$ac_objext"
+
+  fi
+
+
+
+  GNULIB_NL_LANGINFO=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_NL_LANGINFO 1
+_ACEOF
 
 
 
@@ -27163,10 +33585,10 @@ _ACEOF
 
 
 
-{ echo "$as_me:$LINENO: checking for obstacks" >&5
-echo $ECHO_N "checking for obstacks... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for obstacks" >&5
+$as_echo_n "checking for obstacks... " >&6; }
 if test "${ac_cv_func_obstack+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -27194,31 +33616,35 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   ac_cv_func_obstack=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_func_obstack=no
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_obstack" >&5
-echo "${ECHO_T}$ac_cv_func_obstack" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_obstack" >&5
+$as_echo "$ac_cv_func_obstack" >&6; }
 if test $ac_cv_func_obstack = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -27244,7 +33670,7 @@ fi
     mingw* | pw*)
 
 
-  if test $REPLACE_OPEN != 1; then
+  REPLACE_OPEN=1
 
 
 
 
 
 
+
   :
 
-  fi
-  REPLACE_OPEN=1
 
       ;;
     *)
-                  { echo "$as_me:$LINENO: checking whether open recognizes a trailing slash" >&5
-echo $ECHO_N "checking whether open recognizes a trailing slash... $ECHO_C" >&6; }
+
+
+
+
+
+
+      { $as_echo "$as_me:$LINENO: checking whether open recognizes a trailing slash" >&5
+$as_echo_n "checking whether open recognizes a trailing slash... " >&6; }
 if test "${gl_cv_func_open_slash+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
-
+  # Assume that if we have lstat, we can also check symlinks.
+          if test $ac_cv_func_lstat = yes; then
+            touch conftest.tmp
+            ln -s conftest.tmp conftest.lnk
+          fi
           if test "$cross_compiling" = yes; then
 
              case "$host_os" in
+               freebsd*)        gl_cv_func_open_slash="guessing no" ;;
                solaris2.[0-9]*) gl_cv_func_open_slash="guessing no" ;;
                hpux*)           gl_cv_func_open_slash="guessing no" ;;
                *)               gl_cv_func_open_slash="guessing yes" ;;
@@ -27292,6 +33728,9 @@ cat >>conftest.$ac_ext <<_ACEOF
 #endif
 int main ()
 {
+#if HAVE_LSTAT
+  if (open ("conftest.lnk/", O_RDONLY) != -1) return 2;
+#endif
   return open ("conftest.sl/", O_CREAT, 0600) >= 0;
 }
 _ACEOF
@@ -27301,38 +33740,41 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_func_open_slash=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 gl_cv_func_open_slash=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
-          rm -f conftest.sl
+          rm -f conftest.sl conftest.tmp conftest.lnk
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_open_slash" >&5
-echo "${ECHO_T}$gl_cv_func_open_slash" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_open_slash" >&5
+$as_echo "$gl_cv_func_open_slash" >&6; }
       case "$gl_cv_func_open_slash" in
         *no)
 
@@ -27342,7 +33784,7 @@ _ACEOF
 
 
 
-  if test $REPLACE_OPEN != 1; then
+  REPLACE_OPEN=1
 
 
 
@@ -27355,10 +33797,9 @@ _ACEOF
 
 
 
+
   :
 
-  fi
-  REPLACE_OPEN=1
 
           ;;
       esac
@@ -27377,6 +33818,25 @@ _ACEOF
   GNULIB_OPEN=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_OPEN 1
+_ACEOF
+
+
+
+
+
+  GNULIB_OPENAT=1
+
+
+  GNULIB_FCHMODAT=1
+  GNULIB_FSTATAT=1
+  GNULIB_MKDIRAT=1
+
+
+  GNULIB_FCHOWNAT=1
+  GNULIB_UNLINKAT=1
+
 
 
 
@@ -27425,13 +33885,23 @@ _ACEOF
 
 
 
-for ac_func in fchmodat mkdirat openat
+
+
+
+
+
+
+
+
+
+
+for ac_func in fchmodat fstatat mkdirat openat unlinkat
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -27484,35 +33954,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
@@ -27524,9 +34001,38 @@ done
 
 
 
+
   case $ac_cv_func_openat+$ac_cv_func_lstat_dereferences_slashed_symlink in
-  yes+yes) ;;
+  yes+yes)
+    # GNU/Hurd has unlinkat, but it has the same bug as unlink.
+    if test $REPLACE_UNLINK = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS unlinkat.$ac_objext"
+
+      REPLACE_UNLINKAT=1
+    fi ;;
   yes+*)
+    # Solaris 9 has *at functions, but uniformly mishandles trailing
+    # slash in all of them.
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS openat.$ac_objext"
+
+    REPLACE_OPENAT=1
+
 
 
 
@@ -27535,26 +34041,42 @@ done
 
 
   gl_LIBOBJS="$gl_LIBOBJS fstatat.$ac_objext"
-;;
+
+    REPLACE_FSTATAT=1
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS unlinkat.$ac_objext"
+
+    REPLACE_UNLINKAT=1
+    ;;
   *)
+    HAVE_OPENAT=0
+    HAVE_UNLINKAT=0 # No known system with unlinkat but not openat
+    HAVE_FSTATAT=0 # No known system with fstatat but not openat
 
-cat >>confdefs.h <<\_ACEOF
-#define __OPENAT_PREFIX rpl_
-_ACEOF
 
 
   :
 ;;
   esac
+  if test $ac_cv_func_fchmodat != yes; then
+    HAVE_FCHMODAT=0
+  fi
+  if test $ac_cv_func_mkdirat != yes; then
+    HAVE_MKDIRAT=0
+  fi
 
-  # Assume we'll use the replacement function.
-  # The only case in which we won't is when we have fchownat, and it works.
-  use_replacement_fchownat=yes
 
-  { echo "$as_me:$LINENO: checking for fchownat" >&5
-echo $ECHO_N "checking for fchownat... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for fchownat" >&5
+$as_echo_n "checking for fchownat... " >&6; }
 if test "${ac_cv_func_fchownat+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -27607,43 +34129,41 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   ac_cv_func_fchownat=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_func_fchownat=no
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_fchownat" >&5
-echo "${ECHO_T}$ac_cv_func_fchownat" >&6; }
-if test $ac_cv_func_fchownat = yes; then
-  have_fchownat=yes
-else
-  have_fchownat=no
-fi
-
-  if test $have_fchownat = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_fchownat" >&5
+$as_echo "$ac_cv_func_fchownat" >&6; }
+if test "x$ac_cv_func_fchownat" = x""yes; then
 
-  { echo "$as_me:$LINENO: checking whether fchownat works with AT_SYMLINK_NOFOLLOW" >&5
-echo $ECHO_N "checking whether fchownat works with AT_SYMLINK_NOFOLLOW... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether fchownat works with AT_SYMLINK_NOFOLLOW" >&5
+$as_echo_n "checking whether fchownat works with AT_SYMLINK_NOFOLLOW... " >&6; }
 if test "${gl_cv_func_fchownat_nofollow_works+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
      gl_dangle=conftest.dangle
@@ -27671,8 +34191,8 @@ int
 main ()
 {
   return (fchownat (AT_FDCWD, "$gl_dangle", -1, getgid (),
-                   AT_SYMLINK_NOFOLLOW) != 0
-         && errno == ENOENT);
+                    AT_SYMLINK_NOFOLLOW) != 0
+          && errno == ENOENT);
 }
 
 _ACEOF
@@ -27682,66 +34202,58 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_func_fchownat_nofollow_works=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 gl_cv_func_fchownat_nofollow_works=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_fchownat_nofollow_works" >&5
-echo "${ECHO_T}$gl_cv_func_fchownat_nofollow_works" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_fchownat_nofollow_works" >&5
+$as_echo "$gl_cv_func_fchownat_nofollow_works" >&6; }
   if test $gl_cv_func_fchownat_nofollow_works = no; then
-  :
-else
-  use_replacement_fchownat=no
-fi
-
-
-  fi
-
-  if test $use_replacement_fchownat = yes; then
-
-
-
-
-
-
-
-
-  gl_LIBOBJS="$gl_LIBOBJS fchownat.$ac_objext"
-
+  REPLACE_FCHOWNAT=1
 
 cat >>confdefs.h <<\_ACEOF
-#define fchownat rpl_fchownat
+#define FCHOWNAT_NOFOLLOW_BUG 1
 _ACEOF
 
-  fi
+fi
 
 
+else
+  HAVE_FCHOWNAT=0
+fi
 
+  if test $REPLACE_CHOWN = 1; then
+    REPLACE_FCHOWNAT=1
+  fi
+  if test $HAVE_FCHOWNAT = 0 || test $REPLACE_FCHOWNAT = 1; then
 
 
 
@@ -27750,7 +34262,9 @@ _ACEOF
 
 
 
+  gl_LIBOBJS="$gl_LIBOBJS fchownat.$ac_objext"
 
+  fi
 
 
 
@@ -27758,7 +34272,6 @@ _ACEOF
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS quote.$ac_objext"
 
 
 
@@ -27771,21 +34284,111 @@ _ACEOF
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS quotearg.$ac_objext"
+for ac_func in getppriv
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
 
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
 
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
 
+#undef $ac_func
 
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
 
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  eval "$as_ac_var=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+       eval "$as_ac_var=no"
+fi
 
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
 
+fi
+done
 
 
-   { echo "$as_me:$LINENO: checking for mbstate_t" >&5
-echo $ECHO_N "checking for mbstate_t... $ECHO_C" >&6; }
-if test "${ac_cv_type_mbstate_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:$LINENO: checking whether program_invocation_name is declared" >&5
+$as_echo_n "checking whether program_invocation_name is declared... " >&6; }
+if test "${ac_cv_have_decl_program_invocation_name+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -27793,12 +34396,15 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-$ac_includes_default
-#          include <wchar.h>
+#include <errno.h>
+
 int
 main ()
 {
-mbstate_t x; return sizeof x;
+#ifndef program_invocation_name
+  (void) program_invocation_name;
+#endif
+
   ;
   return 0;
 }
@@ -27809,48 +34415,50 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  ac_cv_type_mbstate_t=yes
+  ac_cv_have_decl_program_invocation_name=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_type_mbstate_t=no
+       ac_cv_have_decl_program_invocation_name=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_mbstate_t" >&5
-echo "${ECHO_T}$ac_cv_type_mbstate_t" >&6; }
-   if test $ac_cv_type_mbstate_t = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_program_invocation_name" >&5
+$as_echo "$ac_cv_have_decl_program_invocation_name" >&6; }
+if test "x$ac_cv_have_decl_program_invocation_name" = x""yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_MBSTATE_T 1
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PROGRAM_INVOCATION_NAME 1
 _ACEOF
 
-   else
 
-cat >>confdefs.h <<\_ACEOF
-#define mbstate_t int
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PROGRAM_INVOCATION_NAME 0
 _ACEOF
 
-   fi
+
+fi
 
 
-  { echo "$as_me:$LINENO: checking whether mbrtowc and mbstate_t are properly declared" >&5
-echo $ECHO_N "checking whether mbrtowc and mbstate_t are properly declared... $ECHO_C" >&6; }
-if test "${ac_cv_func_mbrtowc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  { $as_echo "$as_me:$LINENO: checking whether program_invocation_short_name is declared" >&5
+$as_echo_n "checking whether program_invocation_short_name is declared... " >&6; }
+if test "${ac_cv_have_decl_program_invocation_short_name+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -27858,57 +34466,88 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <wchar.h>
+#include <errno.h>
+
 int
 main ()
 {
-wchar_t wc;
-             char const s[] = "";
-             size_t n = 1;
-             mbstate_t state;
-             return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));
+#ifndef program_invocation_short_name
+  (void) program_invocation_short_name;
+#endif
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_func_mbrtowc=yes
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_program_invocation_short_name=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_func_mbrtowc=no
+       ac_cv_have_decl_program_invocation_short_name=no
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_mbrtowc" >&5
-echo "${ECHO_T}$ac_cv_func_mbrtowc" >&6; }
-  if test $ac_cv_func_mbrtowc = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_program_invocation_short_name" >&5
+$as_echo "$ac_cv_have_decl_program_invocation_short_name" >&6; }
+if test "x$ac_cv_have_decl_program_invocation_short_name" = x""yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_MBRTOWC 1
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1
 _ACEOF
 
-  fi
+
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 0
+_ACEOF
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS quote.$ac_objext"
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS quotearg.$ac_objext"
 
 
 
@@ -27926,11 +34565,11 @@ _ACEOF
 
 for ac_func in rawmemchr
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -27983,35 +34622,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
@@ -28032,6 +34678,13 @@ done
   GNULIB_RAWMEMCHR=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_RAWMEMCHR 1
+_ACEOF
+
+
+
+
 
 
 
@@ -28054,6 +34707,157 @@ done
 
   :
 
+  else
+    { $as_echo "$as_me:$LINENO: checking whether readlink signature is correct" >&5
+$as_echo_n "checking whether readlink signature is correct... " >&6; }
+if test "${gl_cv_decl_readlink_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <unistd.h>
+      /* Cause compilation failure if original declaration has wrong type.  */
+      ssize_t readlink (const char *, char *, size_t);
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gl_cv_decl_readlink_works=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       gl_cv_decl_readlink_works=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_decl_readlink_works" >&5
+$as_echo "$gl_cv_decl_readlink_works" >&6; }
+            { $as_echo "$as_me:$LINENO: checking whether readlink handles trailing slash correctly" >&5
+$as_echo_n "checking whether readlink handles trailing slash correctly... " >&6; }
+if test "${gl_cv_func_readlink_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  # We have readlink, so assume ln -s works.
+       ln -s conftest.no-such conftest.link
+       ln -s conftest.link conftest.lnk2
+       if test "$cross_compiling" = yes; then
+  gl_cv_func_readlink_works="guessing no"
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <unistd.h>
+
+int
+main ()
+{
+char buf[20];
+      return readlink ("conftest.lnk2/", buf, sizeof buf) != -1;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_readlink_works=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gl_cv_func_readlink_works=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+      rm -f conftest.link conftest.lnk2
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_readlink_works" >&5
+$as_echo "$gl_cv_func_readlink_works" >&6; }
+    if test "$gl_cv_func_readlink_works" != yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define READLINK_TRAILING_SLASH_BUG 1
+_ACEOF
+
+      REPLACE_READLINK=1
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS readlink.$ac_objext"
+
+    elif test "$gl_cv_decl_readlink_works" != yes; then
+      REPLACE_READLINK=1
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS readlink.$ac_objext"
+
+    fi
   fi
 
 
@@ -28061,6 +34865,13 @@ done
   GNULIB_READLINK=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_READLINK 1
+_ACEOF
+
+
+
+
 
   if test $gl_cv_func_malloc_posix = yes; then
     HAVE_REALLOC_POSIX=1
@@ -28089,6 +34900,13 @@ _ACEOF
   GNULIB_REALLOC_POSIX=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_REALLOC_POSIX 1
+_ACEOF
+
+
+
+
 
 
 
 
   case $with_included_regex in #(
   yes|no) ac_use_included_regex=$with_included_regex
-       ;;
+        ;;
   '')
     # If the system regex support is good enough that it passes the
     # following run test, then default to *not* using the included regex.c.
     # If cross compiling, assume the test would fail and use the included
     # regex.c.
-    { echo "$as_me:$LINENO: checking for working re_compile_pattern" >&5
-echo $ECHO_N "checking for working re_compile_pattern... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for working re_compile_pattern" >&5
+$as_echo_n "checking for working re_compile_pattern... " >&6; }
 if test "${gl_cv_func_re_compile_pattern_working+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then
          gl_cv_func_re_compile_pattern_working=no
@@ -28126,132 +34944,139 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-          #if HAVE_LOCALE_H
-           #include <locale.h>
-          #endif
-          #include <limits.h>
-          #include <regex.h>
+           #if HAVE_LOCALE_H
+            #include <locale.h>
+           #endif
+           #include <limits.h>
+           #include <regex.h>
 
 int
 main ()
 {
 static struct re_pattern_buffer regex;
-           unsigned char folded_chars[UCHAR_MAX + 1];
-           int i;
-           const char *s;
-           struct re_registers regs;
-
-           #if HAVE_LOCALE_H
-             /* http://sourceware.org/ml/libc-hacker/2006-09/msg00008.html
-                This test needs valgrind to catch the bug on Debian
-                GNU/Linux 3.1 x86, but it might catch the bug better
-                on other platforms and it shouldn't hurt to try the
-                test here.  */
-             if (setlocale (LC_ALL, "en_US.UTF-8"))
-               {
-                 static char const pat[] = "insert into";
-                 static char const data[] =
-                   "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK";
-                 re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE
-                                | RE_ICASE);
-                 memset (&regex, 0, sizeof regex);
-                 s = re_compile_pattern (pat, sizeof pat - 1, &regex);
-                 if (s)
-                   return 1;
-                 if (re_search (&regex, data, sizeof data - 1,
-                                0, sizeof data - 1, &regs)
-                     != -1)
-                   return 1;
-                 if (! setlocale (LC_ALL, "C"))
-                   return 1;
-               }
-           #endif
-
-           /* This test is from glibc bug 3957, reported by Andrew Mackey.  */
-           re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE);
-           memset (&regex, 0, sizeof regex);
-           s = re_compile_pattern ("a[^x]b", 6, &regex);
-           if (s)
-             return 1;
-
-           /* This should fail, but succeeds for glibc-2.5.  */
-           if (re_search (&regex, "a\nb", 3, 0, 3, &regs) != -1)
-             return 1;
-
-           /* This regular expression is from Spencer ere test number 75
-              in grep-2.3.  */
-           re_set_syntax (RE_SYNTAX_POSIX_EGREP);
-           memset (&regex, 0, sizeof regex);
-           for (i = 0; i <= UCHAR_MAX; i++)
-             folded_chars[i] = i;
-           regex.translate = folded_chars;
-           s = re_compile_pattern ("a[[:]:]]b\n", 11, &regex);
-           /* This should fail with _Invalid character class name_ error.  */
-           if (!s)
-             return 1;
-
-           /* This should succeed, but does not for glibc-2.1.3.  */
-           memset (&regex, 0, sizeof regex);
-           s = re_compile_pattern ("{1", 2, &regex);
-
-           if (s)
-             return 1;
-
-           /* The following example is derived from a problem report
-              against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>.  */
-           memset (&regex, 0, sizeof regex);
-           s = re_compile_pattern ("[an\371]*n", 7, &regex);
-           if (s)
-             return 1;
-
-           /* This should match, but does not for glibc-2.2.1.  */
-           if (re_match (&regex, "an", 2, 0, &regs) != 2)
-             return 1;
-
-           memset (&regex, 0, sizeof regex);
-           s = re_compile_pattern ("x", 1, &regex);
-           if (s)
-             return 1;
-
-           /* glibc-2.2.93 does not work with a negative RANGE argument.  */
-           if (re_search (&regex, "wxy", 3, 2, -2, &regs) != 1)
-             return 1;
-
-           /* The version of regex.c in older versions of gnulib
-              ignored RE_ICASE.  Detect that problem too.  */
-           re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE);
-           memset (&regex, 0, sizeof regex);
-           s = re_compile_pattern ("x", 1, &regex);
-           if (s)
-             return 1;
-
-           if (re_search (&regex, "WXY", 3, 0, 3, &regs) < 0)
-             return 1;
-
-           /* Catch a bug reported by Vin Shelton in
-              http://lists.gnu.org/archive/html/bug-coreutils/2007-06/msg00089.html
-              */
-           re_set_syntax (RE_SYNTAX_POSIX_BASIC
-                          & ~RE_CONTEXT_INVALID_DUP
-                          & ~RE_NO_EMPTY_RANGES);
-           memset (&regex, 0, sizeof regex);
-           s = re_compile_pattern ("[[:alnum:]_-]\\\\+$", 16, &regex);
-           if (s)
-             return 1;
-
-           /* REG_STARTEND was added to glibc on 2004-01-15.
-              Reject older versions.  */
-           if (! REG_STARTEND)
-             return 1;
-
-           /* Reject hosts whose regoff_t values are too narrow.
-              These include glibc 2.3.5 on hosts with 64-bit ptrdiff_t
-              and 32-bit int.  */
-           if (sizeof (regoff_t) < sizeof (ptrdiff_t)
-               || sizeof (regoff_t) < sizeof (ssize_t))
-             return 1;
-
-           return 0;
+            unsigned char folded_chars[UCHAR_MAX + 1];
+            int i;
+            const char *s;
+            struct re_registers regs;
+
+            #if HAVE_LOCALE_H
+              /* http://sourceware.org/ml/libc-hacker/2006-09/msg00008.html
+                 This test needs valgrind to catch the bug on Debian
+                 GNU/Linux 3.1 x86, but it might catch the bug better
+                 on other platforms and it shouldn't hurt to try the
+                 test here.  */
+              if (setlocale (LC_ALL, "en_US.UTF-8"))
+                {
+                  static char const pat[] = "insert into";
+                  static char const data[] =
+                    "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK";
+                  re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE
+                                 | RE_ICASE);
+                  memset (&regex, 0, sizeof regex);
+                  s = re_compile_pattern (pat, sizeof pat - 1, &regex);
+                  if (s)
+                    return 1;
+                  if (re_search (&regex, data, sizeof data - 1,
+                                 0, sizeof data - 1, &regs)
+                      != -1)
+                    return 1;
+                  if (! setlocale (LC_ALL, "C"))
+                    return 1;
+                }
+            #endif
+
+            /* This test is from glibc bug 3957, reported by Andrew Mackey.  */
+            re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE);
+            memset (&regex, 0, sizeof regex);
+            s = re_compile_pattern ("a[^x]b", 6, &regex);
+            if (s)
+              return 1;
+
+            /* This should fail, but succeeds for glibc-2.5.  */
+            if (re_search (&regex, "a\nb", 3, 0, 3, &regs) != -1)
+              return 1;
+
+            /* This regular expression is from Spencer ere test number 75
+               in grep-2.3.  */
+            re_set_syntax (RE_SYNTAX_POSIX_EGREP);
+            memset (&regex, 0, sizeof regex);
+            for (i = 0; i <= UCHAR_MAX; i++)
+              folded_chars[i] = i;
+            regex.translate = folded_chars;
+            s = re_compile_pattern ("a[[:]:]]b\n", 11, &regex);
+            /* This should fail with _Invalid character class name_ error.  */
+            if (!s)
+              return 1;
+
+            /* Ensure that [b-a] is diagnosed as invalid. */
+            re_set_syntax (RE_SYNTAX_POSIX_EGREP);
+            memset (&regex, 0, sizeof regex);
+            s = re_compile_pattern ("a[b-a]", 6, &regex);
+            if (s == 0)
+              return 1;
+
+            /* This should succeed, but does not for glibc-2.1.3.  */
+            memset (&regex, 0, sizeof regex);
+            s = re_compile_pattern ("{1", 2, &regex);
+
+            if (s)
+              return 1;
+
+            /* The following example is derived from a problem report
+               against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>.  */
+            memset (&regex, 0, sizeof regex);
+            s = re_compile_pattern ("[an\371]*n", 7, &regex);
+            if (s)
+              return 1;
+
+            /* This should match, but does not for glibc-2.2.1.  */
+            if (re_match (&regex, "an", 2, 0, &regs) != 2)
+              return 1;
+
+            memset (&regex, 0, sizeof regex);
+            s = re_compile_pattern ("x", 1, &regex);
+            if (s)
+              return 1;
+
+            /* glibc-2.2.93 does not work with a negative RANGE argument.  */
+            if (re_search (&regex, "wxy", 3, 2, -2, &regs) != 1)
+              return 1;
+
+            /* The version of regex.c in older versions of gnulib
+               ignored RE_ICASE.  Detect that problem too.  */
+            re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE);
+            memset (&regex, 0, sizeof regex);
+            s = re_compile_pattern ("x", 1, &regex);
+            if (s)
+              return 1;
+
+            if (re_search (&regex, "WXY", 3, 0, 3, &regs) < 0)
+              return 1;
+
+            /* Catch a bug reported by Vin Shelton in
+               http://lists.gnu.org/archive/html/bug-coreutils/2007-06/msg00089.html
+               */
+            re_set_syntax (RE_SYNTAX_POSIX_BASIC
+                           & ~RE_CONTEXT_INVALID_DUP
+                           & ~RE_NO_EMPTY_RANGES);
+            memset (&regex, 0, sizeof regex);
+            s = re_compile_pattern ("[[:alnum:]_-]\\\\+$", 16, &regex);
+            if (s)
+              return 1;
+
+            /* REG_STARTEND was added to glibc on 2004-01-15.
+               Reject older versions.  */
+            if (! REG_STARTEND)
+              return 1;
+
+            /* Reject hosts whose regoff_t values are too narrow.
+               These include glibc 2.3.5 on hosts with 64-bit ptrdiff_t
+               and 32-bit int.  */
+            if (sizeof (regoff_t) < sizeof (ptrdiff_t)
+                || sizeof (regoff_t) < sizeof (ssize_t))
+              return 1;
+
+            return 0;
   ;
   return 0;
 }
@@ -28262,43 +35087,46 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_func_re_compile_pattern_working=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 gl_cv_func_re_compile_pattern_working=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_re_compile_pattern_working" >&5
-echo "${ECHO_T}$gl_cv_func_re_compile_pattern_working" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_re_compile_pattern_working" >&5
+$as_echo "$gl_cv_func_re_compile_pattern_working" >&6; }
     case $gl_cv_func_re_compile_pattern_working in #(
     yes) ac_use_included_regex=no;; #(
     no) ac_use_included_regex=yes;;
     esac
     ;;
-  *) { { echo "$as_me:$LINENO: error: Invalid value for --with-included-regex: $with_included_regex" >&5
-echo "$as_me: error: Invalid value for --with-included-regex: $with_included_regex" >&2;}
+  *) { { $as_echo "$as_me:$LINENO: error: Invalid value for --with-included-regex: $with_included_regex" >&5
+$as_echo "$as_me: error: Invalid value for --with-included-regex: $with_included_regex" >&2;}
    { (exit 1); exit 1; }; }
     ;;
   esac
@@ -28399,22 +35227,24 @@ _ACEOF
 
 
 
+
 for ac_header in libintl.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -28430,32 +35260,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -28469,51 +35300,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -28522,21 +35354,24 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -28553,10 +35388,10 @@ done
 
 
 
-  { echo "$as_me:$LINENO: checking whether isblank is declared" >&5
-echo $ECHO_N "checking whether isblank is declared... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether isblank is declared" >&5
+$as_echo_n "checking whether isblank is declared... " >&6; }
 if test "${ac_cv_have_decl_isblank+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -28583,20 +35418,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_isblank=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_isblank=no
@@ -28604,9 +35440,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_isblank" >&5
-echo "${ECHO_T}$ac_cv_have_decl_isblank" >&6; }
-if test $ac_cv_have_decl_isblank = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_isblank" >&5
+$as_echo "$ac_cv_have_decl_isblank" >&6; }
+if test "x$ac_cv_have_decl_isblank" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_ISBLANK 1
 
 
 
-
-for ac_func in rpmatch
+for ac_func in rmdir
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -28697,35 +35532,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
 done
 
 
-  if test $ac_cv_func_rpmatch = no; then
-    HAVE_RPMATCH=0
-
-  { echo "$as_me:$LINENO: checking for nl_langinfo and YESEXPR" >&5
-echo $ECHO_N "checking for nl_langinfo and YESEXPR... $ECHO_C" >&6; }
-if test "${gl_cv_langinfo_yesexpr+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  if test $ac_cv_func_rmdir = no; then
+    REPLACE_RMDIR=1
+    # If someone lacks rmdir, make configure fail, and request
+    # a bug report to inform us about it.
+    if test x"$SKIP_RMDIR_CHECK" != xyes; then
+      { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { $as_echo "$as_me:$LINENO: error: Your system lacks the rmdir function.
+              Please report this, along with the output of \"uname -a\", to the
+              bug-coreutils@gnu.org mailing list.  To continue past this point,
+              rerun configure with SKIP_RMDIR_CHECK=yes.
+              E.g., ./configure SKIP_RMDIR_CHECK=yes
+See \`config.log' for more details." >&5
+$as_echo "$as_me: error: Your system lacks the rmdir function.
+              Please report this, along with the output of \"uname -a\", to the
+              bug-coreutils@gnu.org mailing list.  To continue past this point,
+              rerun configure with SKIP_RMDIR_CHECK=yes.
+              E.g., ./configure SKIP_RMDIR_CHECK=yes
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }; }
+    fi
+  else
+        { $as_echo "$as_me:$LINENO: checking whether rmdir works" >&5
+$as_echo_n "checking whether rmdir works... " >&6; }
+if test "${gl_cv_func_rmdir_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  mkdir conftest.dir
+       touch conftest.file
+       if test "$cross_compiling" = yes; then
+  gl_cv_func_rmdir_works="guessing no"
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -28750,135 +35616,61 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <langinfo.h>
+#include <stdio.h>
+             #include <errno.h>
+             #include <unistd.h>
+
 int
 main ()
 {
-char* cs = nl_langinfo(YESEXPR); return !cs;
+return !rmdir ("conftest.file/") || errno != ENOTDIR
+       || !rmdir ("conftest.dir/./");
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
+rm -f conftest$ac_exeext
 if { (ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
   ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  gl_cv_langinfo_yesexpr=yes
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_rmdir_works=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       gl_cv_langinfo_yesexpr=no
+( exit $ac_status )
+gl_cv_func_rmdir_works=no
 fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_langinfo_yesexpr" >&5
-echo "${ECHO_T}$gl_cv_langinfo_yesexpr" >&6; }
-  if test $gl_cv_langinfo_yesexpr = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_LANGINFO_YESEXPR 1
-_ACEOF
-
-  fi
-
-  fi
 
 
-
-  GNULIB_RPMATCH=1
-
-
-
-
-
-
-
-
-
-
-  gl_LIBOBJS="$gl_LIBOBJS safe-read.$ac_objext"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-  gl_LIBOBJS="$gl_LIBOBJS safe-write.$ac_objext"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-  gl_LIBOBJS="$gl_LIBOBJS save-cwd.$ac_objext"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-  gl_LIBOBJS="$gl_LIBOBJS savedir.$ac_objext"
-
-
-
-
-
-
-
-
-
-
-  if test $ac_cv_func_setenv = no; then
-    HAVE_SETENV=0
+       rm -rf conftest.dir conftest.file
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_rmdir_works" >&5
+$as_echo "$gl_cv_func_rmdir_works" >&6; }
+    if test x"$gl_cv_func_rmdir_works" != xyes; then
+      REPLACE_RMDIR=1
 
 
 
@@ -28887,170 +35679,42 @@ _ACEOF
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS setenv.$ac_objext"
+  gl_LIBOBJS="$gl_LIBOBJS rmdir.$ac_objext"
 
+    fi
+  fi
 
 
 
+  GNULIB_RMDIR=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_RMDIR 1
+_ACEOF
 
 
 
 
 
-for ac_header in search.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_header_compiler=no
-fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
 
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-  ac_header_preproc=no
-fi
 
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
 
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ------------------------------ ##
-## Report this to bug-tar@gnu.org ##
-## ------------------------------ ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
 
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
 
-fi
 
-done
 
 
-for ac_func in tsearch
+for ac_func in rpmatch
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -29103,41 +35767,229 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
+else
+
+    gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext"
+
 fi
 done
 
 
+  if test $ac_cv_func_rpmatch = no; then
+    HAVE_RPMATCH=0
+
+  { $as_echo "$as_me:$LINENO: checking for nl_langinfo and YESEXPR" >&5
+$as_echo_n "checking for nl_langinfo and YESEXPR... " >&6; }
+if test "${gl_cv_langinfo_yesexpr+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <langinfo.h>
+int
+main ()
+{
+char* cs = nl_langinfo(YESEXPR); return !cs;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  gl_cv_langinfo_yesexpr=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       gl_cv_langinfo_yesexpr=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_langinfo_yesexpr" >&5
+$as_echo "$gl_cv_langinfo_yesexpr" >&6; }
+  if test $gl_cv_langinfo_yesexpr = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LANGINFO_YESEXPR 1
+_ACEOF
+
+  fi
+
+  fi
+
+
+
+  GNULIB_RPMATCH=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_RPMATCH 1
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS safe-read.$ac_objext"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS safe-write.$ac_objext"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS same.$ac_objext"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS save-cwd.$ac_objext"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS savedir.$ac_objext"
+
+
+
+
+  if test $HAVE_SETENV$REPLACE_SETENV != 10; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS setenv.$ac_objext"
+
   fi
 
 
@@ -29145,23 +35997,31 @@ done
   GNULIB_SETENV=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_SETENV 1
+_ACEOF
+
+
+
+
 
 for ac_header in stdint.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -29177,32 +36037,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -29216,51 +36077,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -29269,31 +36131,34 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 
 done
 
-    { echo "$as_me:$LINENO: checking for SIZE_MAX" >&5
-echo $ECHO_N "checking for SIZE_MAX... $ECHO_C" >&6; }
-  if test "${gl_cv_size_max+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+    { $as_echo "$as_me:$LINENO: checking for SIZE_MAX" >&5
+$as_echo_n "checking for SIZE_MAX... " >&6; }
+if test "${gl_cv_size_max+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
 
     gl_cv_size_max=
@@ -29346,13 +36211,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -29383,20 +36249,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo=`expr $ac_mid + 1`
@@ -29410,7 +36277,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -29437,13 +36304,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -29474,20 +36342,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_hi=`expr '(' $ac_mid ')' - 1`
@@ -29501,7 +36370,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo= ac_hi=
@@ -29538,20 +36407,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo=`expr '(' $ac_mid ')' + 1`
@@ -29588,15 +36458,17 @@ main ()
       long int i = longval ();
       if (i != (sizeof (size_t) * CHAR_BIT - 1))
        return 1;
-      fprintf (f, "%ld\n", i);
+      fprintf (f, "%ld", i);
     }
   else
     {
       unsigned long int i = ulongval ();
       if (i != (sizeof (size_t) * CHAR_BIT - 1))
        return 1;
-      fprintf (f, "%lu\n", i);
+      fprintf (f, "%lu", i);
     }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
   return ferror (f) || fclose (f) != 0;
 
   ;
@@ -29609,29 +36481,32 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   size_t_bits_minus_1=`cat conftest.val`
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 size_t_bits_minus_1=
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
@@ -29660,13 +36535,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -29696,20 +36572,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo=`expr $ac_mid + 1`
@@ -29723,7 +36600,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -29749,13 +36626,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -29785,20 +36663,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_hi=`expr '(' $ac_mid ')' - 1`
@@ -29812,7 +36691,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo= ac_hi=
@@ -29848,20 +36727,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo=`expr '(' $ac_mid ')' + 1`
@@ -29897,15 +36777,17 @@ main ()
       long int i = longval ();
       if (i != (sizeof (size_t) <= sizeof (unsigned int)))
        return 1;
-      fprintf (f, "%ld\n", i);
+      fprintf (f, "%ld", i);
     }
   else
     {
       unsigned long int i = ulongval ();
       if (i != (sizeof (size_t) <= sizeof (unsigned int)))
        return 1;
-      fprintf (f, "%lu\n", i);
+      fprintf (f, "%lu", i);
     }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
   return ferror (f) || fclose (f) != 0;
 
   ;
@@ -29918,29 +36800,32 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   fits_in_uint=`cat conftest.val`
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 fits_in_uint=
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
@@ -29970,20 +36855,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   fits_in_uint=0
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -30002,9 +36888,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
     fi
 
 fi
-
-  { echo "$as_me:$LINENO: result: $gl_cv_size_max" >&5
-echo "${ECHO_T}$gl_cv_size_max" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_size_max" >&5
+$as_echo "$gl_cv_size_max" >&6; }
   if test "$gl_cv_size_max" != yes; then
 
 cat >>confdefs.h <<_ACEOF
@@ -30015,10 +36900,12 @@ _ACEOF
 
 
 
-            { echo "$as_me:$LINENO: checking whether sleep is declared" >&5
-echo $ECHO_N "checking whether sleep is declared... $ECHO_C" >&6; }
+
+
+            { $as_echo "$as_me:$LINENO: checking whether sleep is declared" >&5
+$as_echo_n "checking whether sleep is declared... " >&6; }
 if test "${ac_cv_have_decl_sleep+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -30045,20 +36932,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_sleep=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_sleep=no
@@ -30066,9 +36954,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_sleep" >&5
-echo "${ECHO_T}$ac_cv_have_decl_sleep" >&6; }
-if test $ac_cv_have_decl_sleep = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_sleep" >&5
+$as_echo "$ac_cv_have_decl_sleep" >&6; }
+if test "x$ac_cv_have_decl_sleep" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_SLEEP 1
@@ -30084,6 +36972,12 @@ _ACEOF
 fi
 
 
+
+
+
+
+
+
   if test $ac_cv_have_decl_sleep != yes; then
     HAVE_SLEEP=0
 
 
   gl_LIBOBJS="$gl_LIBOBJS sleep.$ac_objext"
 
-    :
+  else
+        { $as_echo "$as_me:$LINENO: checking for working sleep" >&5
+$as_echo_n "checking for working sleep... " >&6; }
+if test "${gl_cv_func_sleep_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then
+  gl_cv_func_sleep_works="guessing no"
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <errno.h>
+#include <unistd.h>
+#include <signal.h>
+static void
+handle_alarm (int sig)
+{
+  if (sig != SIGALRM)
+    _exit (2);
+}
+
+int
+main ()
+{
+
+    /* Failure to compile this test due to missing alarm is okay,
+       since all such platforms (mingw) also lack sleep.  */
+    unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days.  */
+    unsigned int remaining;
+    signal (SIGALRM, handle_alarm);
+    alarm (1);
+    remaining = sleep (pentecost);
+    return !(pentecost - 10 < remaining && remaining <= pentecost);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_sleep_works=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gl_cv_func_sleep_works=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_sleep_works" >&5
+$as_echo "$gl_cv_func_sleep_works" >&6; }
+    if test "$gl_cv_func_sleep_works" != yes; then
+      REPLACE_SLEEP=1
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS sleep.$ac_objext"
+
+    fi
   fi
 
 
   GNULIB_SLEEP=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_SLEEP 1
+_ACEOF
+
+
+
+
 
   gl_cv_func_snprintf_usable=no
 
 for ac_func in snprintf
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -30166,35 +37160,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -30203,10 +37204,10 @@ done
   if test $ac_cv_func_snprintf = yes; then
 
 
-  { echo "$as_me:$LINENO: checking whether snprintf respects a size of 1" >&5
-echo $ECHO_N "checking whether snprintf respects a size of 1... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether snprintf respects a size of 1" >&5
+$as_echo_n "checking whether snprintf respects a size of 1... " >&6; }
 if test "${gl_cv_func_snprintf_size1+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
       if test "$cross_compiling" = yes; then
@@ -30233,37 +37234,40 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_func_snprintf_size1=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 gl_cv_func_snprintf_size1=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_snprintf_size1" >&5
-echo "${ECHO_T}$gl_cv_func_snprintf_size1" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_snprintf_size1" >&5
+$as_echo "$gl_cv_func_snprintf_size1" >&6; }
 
     case "$gl_cv_func_snprintf_size1" in
       *yes)
@@ -30303,10 +37307,17 @@ echo "${ECHO_T}$gl_cv_func_snprintf_size1" >&6; }
   GNULIB_SNPRINTF=1
 
 
-  { echo "$as_me:$LINENO: checking for ssize_t" >&5
-echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6; }
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_SNPRINTF 1
+_ACEOF
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking for ssize_t" >&5
+$as_echo_n "checking for ssize_t... " >&6; }
 if test "${gt_cv_ssize_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -30330,20 +37341,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gt_cv_ssize_t=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gt_cv_ssize_t=no
@@ -30351,8 +37363,8 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_ssize_t" >&5
-echo "${ECHO_T}$gt_cv_ssize_t" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_ssize_t" >&5
+$as_echo "$gt_cv_ssize_t" >&6; }
   if test $gt_cv_ssize_t = no; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -30370,11 +37382,201 @@ _ACEOF
 
 
 
+    { $as_echo "$as_me:$LINENO: checking whether stat handles trailing slashes on directories" >&5
+$as_echo_n "checking whether stat handles trailing slashes on directories... " >&6; }
+if test "${gl_cv_func_stat_dir_slash+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then
+  case $host_os in
+            mingw*) gl_cv_func_stat_dir_slash="guessing no";;
+            *) gl_cv_func_stat_dir_slash="guessing yes";;
+          esac
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/stat.h>
+
+int
+main ()
+{
+struct stat st; return stat (".", &st) != stat ("./", &st);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_stat_dir_slash=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gl_cv_func_stat_dir_slash=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_stat_dir_slash" >&5
+$as_echo "$gl_cv_func_stat_dir_slash" >&6; }
+      { $as_echo "$as_me:$LINENO: checking whether stat handles trailing slashes on files" >&5
+$as_echo_n "checking whether stat handles trailing slashes on files... " >&6; }
+if test "${gl_cv_func_stat_file_slash+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  touch conftest.tmp
+       # Assume that if we have lstat, we can also check symlinks.
+       if test $ac_cv_func_lstat = yes; then
+         ln -s conftest.tmp conftest.lnk
+       fi
+       if test "$cross_compiling" = yes; then
+  gl_cv_func_stat_file_slash="guessing no"
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/stat.h>
+
+int
+main ()
+{
+struct stat st;
+      if (!stat ("conftest.tmp/", &st)) return 1;
+#if HAVE_LSTAT
+      if (!stat ("conftest.lnk/", &st)) return 2;
+#endif
 
-  { echo "$as_me:$LINENO: checking for struct stat.st_atim.tv_nsec" >&5
-echo $ECHO_N "checking for struct stat.st_atim.tv_nsec... $ECHO_C" >&6; }
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_stat_file_slash=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gl_cv_func_stat_file_slash=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+       rm -f conftest.tmp conftest.lnk
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_stat_file_slash" >&5
+$as_echo "$gl_cv_func_stat_file_slash" >&6; }
+  case $gl_cv_func_stat_dir_slash in
+    *no) REPLACE_STAT=1
+
+cat >>confdefs.h <<\_ACEOF
+#define REPLACE_FUNC_STAT_DIR 1
+_ACEOF
+;;
+  esac
+  case $gl_cv_func_stat_file_slash in
+    *no) REPLACE_STAT=1
+
+cat >>confdefs.h <<\_ACEOF
+#define REPLACE_FUNC_STAT_FILE 1
+_ACEOF
+;;
+  esac
+  if test $REPLACE_STAT = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS stat.$ac_objext"
+
+
+  fi
+
+
+
+  GNULIB_STAT=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_STAT 1
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:$LINENO: checking for struct stat.st_atim.tv_nsec" >&5
+$as_echo_n "checking for struct stat.st_atim.tv_nsec... " >&6; }
 if test "${ac_cv_member_struct_stat_st_atim_tv_nsec+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -30401,20 +37603,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_atim_tv_nsec=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -30442,20 +37645,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_atim_tv_nsec=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_member_struct_stat_st_atim_tv_nsec=no
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_atim_tv_nsec" >&5
-echo "${ECHO_T}$ac_cv_member_struct_stat_st_atim_tv_nsec" >&6; }
-if test $ac_cv_member_struct_stat_st_atim_tv_nsec = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_atim_tv_nsec" >&5
+$as_echo "$ac_cv_member_struct_stat_st_atim_tv_nsec" >&6; }
+if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1
 _ACEOF
 
-{ echo "$as_me:$LINENO: checking whether struct stat.st_atim is of type struct timespec" >&5
-echo $ECHO_N "checking whether struct stat.st_atim is of type struct timespec... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether struct stat.st_atim is of type struct timespec" >&5
+$as_echo_n "checking whether struct stat.st_atim is of type struct timespec... " >&6; }
 if test "${ac_cv_typeof_struct_stat_st_atim_is_struct_timespec+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -30486,20 +37690,20 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
-           #include <sys/types.h>
-           #include <sys/stat.h>
-           #if HAVE_SYS_TIME_H
-           # include <sys/time.h>
-           #endif
-           #include <time.h>
-           struct timespec ts;
-           struct stat st;
+            #include <sys/types.h>
+            #include <sys/stat.h>
+            #if HAVE_SYS_TIME_H
+            # include <sys/time.h>
+            #endif
+            #include <time.h>
+            struct timespec ts;
+            struct stat st;
 
 int
 main ()
 {
 
-           st.st_atim = ts;
+            st.st_atim = ts;
 
   ;
   return 0;
@@ -30511,20 +37715,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no
@@ -30532,8 +37737,8 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&5
-echo "${ECHO_T}$ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&5
+$as_echo "$ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&6; }
      if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -30542,10 +37747,10 @@ _ACEOF
 
      fi
 else
-  { echo "$as_me:$LINENO: checking for struct stat.st_atimespec.tv_nsec" >&5
-echo $ECHO_N "checking for struct stat.st_atimespec.tv_nsec... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for struct stat.st_atimespec.tv_nsec" >&5
+$as_echo_n "checking for struct stat.st_atimespec.tv_nsec... " >&6; }
 if test "${ac_cv_member_struct_stat_st_atimespec_tv_nsec+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -30554,7 +37759,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
-       #include <sys/stat.h>
+        #include <sys/stat.h>
 
 int
 main ()
@@ -30572,20 +37777,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_atimespec_tv_nsec=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -30595,7 +37801,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
-       #include <sys/stat.h>
+        #include <sys/stat.h>
 
 int
 main ()
@@ -30613,20 +37819,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_atimespec_tv_nsec=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_member_struct_stat_st_atimespec_tv_nsec=no
@@ -30637,9 +37844,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_atimespec_tv_nsec" >&5
-echo "${ECHO_T}$ac_cv_member_struct_stat_st_atimespec_tv_nsec" >&6; }
-if test $ac_cv_member_struct_stat_st_atimespec_tv_nsec = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_atimespec_tv_nsec" >&5
+$as_echo "$ac_cv_member_struct_stat_st_atimespec_tv_nsec" >&6; }
+if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1
@@ -30647,10 +37854,10 @@ _ACEOF
 
 
 else
-  { echo "$as_me:$LINENO: checking for struct stat.st_atimensec" >&5
-echo $ECHO_N "checking for struct stat.st_atimensec... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for struct stat.st_atimensec" >&5
+$as_echo_n "checking for struct stat.st_atimensec... " >&6; }
 if test "${ac_cv_member_struct_stat_st_atimensec+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -30659,7 +37866,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
-          #include <sys/stat.h>
+           #include <sys/stat.h>
 
 int
 main ()
@@ -30677,20 +37884,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_atimensec=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -30700,7 +37908,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
-          #include <sys/stat.h>
+           #include <sys/stat.h>
 
 int
 main ()
@@ -30718,20 +37926,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_atimensec=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_member_struct_stat_st_atimensec=no
@@ -30742,9 +37951,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_atimensec" >&5
-echo "${ECHO_T}$ac_cv_member_struct_stat_st_atimensec" >&6; }
-if test $ac_cv_member_struct_stat_st_atimensec = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_atimensec" >&5
+$as_echo "$ac_cv_member_struct_stat_st_atimensec" >&6; }
+if test "x$ac_cv_member_struct_stat_st_atimensec" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_STAT_ST_ATIMENSEC 1
@@ -30752,10 +37961,10 @@ _ACEOF
 
 
 else
-  { echo "$as_me:$LINENO: checking for struct stat.st_atim.st__tim.tv_nsec" >&5
-echo $ECHO_N "checking for struct stat.st_atim.st__tim.tv_nsec... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for struct stat.st_atim.st__tim.tv_nsec" >&5
+$as_echo_n "checking for struct stat.st_atim.st__tim.tv_nsec... " >&6; }
 if test "${ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -30764,7 +37973,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
-             #include <sys/stat.h>
+              #include <sys/stat.h>
 
 int
 main ()
@@ -30782,20 +37991,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -30805,7 +38015,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
-             #include <sys/stat.h>
+              #include <sys/stat.h>
 
 int
 main ()
@@ -30823,20 +38033,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec=no
@@ -30847,9 +38058,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" >&5
-echo "${ECHO_T}$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" >&6; }
-if test $ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" >&5
+$as_echo "$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" >&6; }
+if test "x$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC 1
 
 
 
-  { echo "$as_me:$LINENO: checking for struct stat.st_birthtimespec.tv_nsec" >&5
-echo $ECHO_N "checking for struct stat.st_birthtimespec.tv_nsec... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for struct stat.st_birthtimespec.tv_nsec" >&5
+$as_echo_n "checking for struct stat.st_birthtimespec.tv_nsec... " >&6; }
 if test "${ac_cv_member_struct_stat_st_birthtimespec_tv_nsec+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -30904,20 +38115,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_birthtimespec_tv_nsec=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -30945,20 +38157,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_birthtimespec_tv_nsec=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_member_struct_stat_st_birthtimespec_tv_nsec=no
@@ -30969,9 +38182,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" >&5
-echo "${ECHO_T}$ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" >&6; }
-if test $ac_cv_member_struct_stat_st_birthtimespec_tv_nsec = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" >&5
+$as_echo "$ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" >&6; }
+if test "x$ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC 1
@@ -30979,10 +38192,10 @@ _ACEOF
 
 
 else
-  { echo "$as_me:$LINENO: checking for struct stat.st_birthtimensec" >&5
-echo $ECHO_N "checking for struct stat.st_birthtimensec... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for struct stat.st_birthtimensec" >&5
+$as_echo_n "checking for struct stat.st_birthtimensec... " >&6; }
 if test "${ac_cv_member_struct_stat_st_birthtimensec+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -30991,7 +38204,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
-       #include <sys/stat.h>
+        #include <sys/stat.h>
 
 int
 main ()
@@ -31009,20 +38222,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_birthtimensec=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -31032,7 +38246,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
-       #include <sys/stat.h>
+        #include <sys/stat.h>
 
 int
 main ()
@@ -31050,20 +38264,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_birthtimensec=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_member_struct_stat_st_birthtimensec=no
@@ -31074,9 +38289,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_birthtimensec" >&5
-echo "${ECHO_T}$ac_cv_member_struct_stat_st_birthtimensec" >&6; }
-if test $ac_cv_member_struct_stat_st_birthtimensec = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_birthtimensec" >&5
+$as_echo "$ac_cv_member_struct_stat_st_birthtimensec" >&6; }
+if test "x$ac_cv_member_struct_stat_st_birthtimensec" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC 1
@@ -31084,10 +38299,10 @@ _ACEOF
 
 
 else
-  { echo "$as_me:$LINENO: checking for struct stat.st_birthtim.tv_nsec" >&5
-echo $ECHO_N "checking for struct stat.st_birthtim.tv_nsec... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for struct stat.st_birthtim.tv_nsec" >&5
+$as_echo_n "checking for struct stat.st_birthtim.tv_nsec... " >&6; }
 if test "${ac_cv_member_struct_stat_st_birthtim_tv_nsec+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -31096,7 +38311,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
-         #include <sys/stat.h>
+          #include <sys/stat.h>
 
 int
 main ()
@@ -31114,20 +38329,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_birthtim_tv_nsec=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -31137,7 +38353,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <sys/types.h>
-         #include <sys/stat.h>
+          #include <sys/stat.h>
 
 int
 main ()
@@ -31155,20 +38371,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_birthtim_tv_nsec=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_member_struct_stat_st_birthtim_tv_nsec=no
@@ -31179,9 +38396,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_birthtim_tv_nsec" >&5
-echo "${ECHO_T}$ac_cv_member_struct_stat_st_birthtim_tv_nsec" >&6; }
-if test $ac_cv_member_struct_stat_st_birthtim_tv_nsec = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_birthtim_tv_nsec" >&5
+$as_echo "$ac_cv_member_struct_stat_st_birthtim_tv_nsec" >&6; }
+if test "x$ac_cv_member_struct_stat_st_birthtim_tv_nsec" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC 1
 
   STDARG_H='';
   NEXT_STDARG_H='<stdarg.h>';
-  { echo "$as_me:$LINENO: checking for va_copy" >&5
-echo $ECHO_N "checking for va_copy... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for va_copy" >&5
+$as_echo_n "checking for va_copy... " >&6; }
   if test "${gl_cv_func_va_copy+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
     cat >conftest.$ac_ext <<_ACEOF
@@ -31229,20 +38446,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gl_cv_func_va_copy=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gl_cv_func_va_copy=no
@@ -31251,8 +38469,8 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 
-  { echo "$as_me:$LINENO: result: $gl_cv_func_va_copy" >&5
-echo "${ECHO_T}$gl_cv_func_va_copy" >&6; }
+  { $as_echo "$as_me:$LINENO: result: $gl_cv_func_va_copy" >&5
+$as_echo "$gl_cv_func_va_copy" >&6; }
   if test $gl_cv_func_va_copy = no; then
                                     cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -31289,14 +38507,14 @@ rm -f conftest*
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_stdarg_h='<'stdarg.h'>'
      else
-       { echo "$as_me:$LINENO: checking absolute name of <stdarg.h>" >&5
-echo $ECHO_N "checking absolute name of <stdarg.h>... $ECHO_C" >&6; }
+       { $as_echo "$as_me:$LINENO: checking absolute name of <stdarg.h>" >&5
+$as_echo_n "checking absolute name of <stdarg.h>... " >&6; }
 if test "${gl_cv_next_stdarg_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-         if test $ac_cv_header_stdarg_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
+          if test $ac_cv_header_stdarg_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -31305,27 +38523,36 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <stdarg.h>
 
 _ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_stdarg_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/stdarg.h#{
-                s#.*"\(.*/stdarg.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_stdarg_h='<'stdarg.h'>'
-         fi
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_stdarg_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/stdarg.h#{
+                 s#.*"\(.*/stdarg.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_stdarg_h='<'stdarg.h'>'
+          fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_stdarg_h" >&5
-echo "${ECHO_T}$gl_cv_next_stdarg_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_stdarg_h" >&5
+$as_echo "$gl_cv_next_stdarg_h" >&6; }
      fi
      NEXT_STDARG_H=$gl_cv_next_stdarg_h
 
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stdarg.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stdarg_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDARG_H=$gl_next_as_first_directive
+
 
 
             if test "$gl_cv_next_stdarg_h" = '""'; then
@@ -31333,8 +38560,11 @@ echo "${ECHO_T}$gl_cv_next_stdarg_h" >&6; }
         NEXT_STDARG_H="$gl_cv_next_stdarg_h"
       fi
     else
-                  if test "${gl_cv_func___va_copy+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+  saved_as_echo_n="$as_echo_n"
+  as_echo_n=':'
+  if test "${gl_cv_func___va_copy+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
 
         cat >conftest.$ac_ext <<_ACEOF
@@ -31362,20 +38592,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gl_cv_func___va_copy=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gl_cv_func___va_copy=no
@@ -31384,6 +38615,8 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 
+  as_echo_n="$saved_as_echo_n"
+
       if test $gl_cv_func___va_copy = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -31424,6 +38657,134 @@ _ACEOF
 
 
 
+  if test $gt_cv_c_wchar_t = no; then
+    HAVE_WCHAR_T=0
+    STDDEF_H=stddef.h
+  fi
+  { $as_echo "$as_me:$LINENO: checking whether NULL can be used in arbitrary expressions" >&5
+$as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; }
+if test "${gl_cv_decl_null_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stddef.h>
+      int test[2 * (sizeof NULL == sizeof (void *)) -1];
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gl_cv_decl_null_works=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       gl_cv_decl_null_works=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_decl_null_works" >&5
+$as_echo "$gl_cv_decl_null_works" >&6; }
+  if test $gl_cv_decl_null_works = no; then
+    REPLACE_NULL=1
+    STDDEF_H=stddef.h
+  fi
+  if test -n "$STDDEF_H"; then
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_stddef_h='<'stddef.h'>'
+     else
+       { $as_echo "$as_me:$LINENO: checking absolute name of <stddef.h>" >&5
+$as_echo_n "checking absolute name of <stddef.h>... " >&6; }
+if test "${gl_cv_next_stddef_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+          if test $ac_cv_header_stddef_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stddef.h>
+
+_ACEOF
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_stddef_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/stddef.h#{
+                 s#.*"\(.*/stddef.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_stddef_h='<'stddef.h'>'
+          fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_stddef_h" >&5
+$as_echo "$gl_cv_next_stddef_h" >&6; }
+     fi
+     NEXT_STDDEF_H=$gl_cv_next_stddef_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stddef.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stddef_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive
+
+
+
+  fi
+
+
+
+
   if test $ac_cv_type_long_long_int = yes; then
     HAVE_LONG_LONG_INT=1
   else
@@ -31466,14 +38827,14 @@ _ACEOF
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_stdint_h='<'stdint.h'>'
      else
-       { echo "$as_me:$LINENO: checking absolute name of <stdint.h>" >&5
-echo $ECHO_N "checking absolute name of <stdint.h>... $ECHO_C" >&6; }
+       { $as_echo "$as_me:$LINENO: checking absolute name of <stdint.h>" >&5
+$as_echo_n "checking absolute name of <stdint.h>... " >&6; }
 if test "${gl_cv_next_stdint_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-         if test $ac_cv_header_stdint_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
+          if test $ac_cv_header_stdint_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -31482,27 +38843,36 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <stdint.h>
 
 _ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_stdint_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/stdint.h#{
-                s#.*"\(.*/stdint.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_stdint_h='<'stdint.h'>'
-         fi
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_stdint_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/stdint.h#{
+                 s#.*"\(.*/stdint.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_stdint_h='<'stdint.h'>'
+          fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_stdint_h" >&5
-echo "${ECHO_T}$gl_cv_next_stdint_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_stdint_h" >&5
+$as_echo "$gl_cv_next_stdint_h" >&6; }
      fi
      NEXT_STDINT_H=$gl_cv_next_stdint_h
 
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stdint.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stdint_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive
+
 
 
   if test $ac_cv_header_stdint_h = yes; then
@@ -31513,10 +38883,10 @@ echo "${ECHO_T}$gl_cv_next_stdint_h" >&6; }
 
 
     if test $ac_cv_header_stdint_h = yes; then
-    { echo "$as_me:$LINENO: checking whether stdint.h conforms to C99" >&5
-echo $ECHO_N "checking whether stdint.h conforms to C99... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking whether stdint.h conforms to C99" >&5
+$as_echo_n "checking whether stdint.h conforms to C99... " >&6; }
 if test "${gl_cv_header_working_stdint_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   gl_cv_header_working_stdint_h=no
        cat >conftest.$ac_ext <<_ACEOF
@@ -31692,29 +39062,150 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
+                                                    if test "$cross_compiling" = yes; then
+                 gl_cv_header_working_stdint_h=yes
+
+else
+  cat >conftest.$ac_ext <<_ACEOF
+
+            /* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
+#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+
+#include <stdio.h>
+#include <string.h>
+#define MVAL(macro) MVAL1(macro)
+#define MVAL1(expression) #expression
+static const char *macro_values[] =
+  {
+#ifdef INT8_MAX
+    MVAL (INT8_MAX),
+#endif
+#ifdef INT16_MAX
+    MVAL (INT16_MAX),
+#endif
+#ifdef INT32_MAX
+    MVAL (INT32_MAX),
+#endif
+#ifdef INT64_MAX
+    MVAL (INT64_MAX),
+#endif
+#ifdef UINT8_MAX
+    MVAL (UINT8_MAX),
+#endif
+#ifdef UINT16_MAX
+    MVAL (UINT16_MAX),
+#endif
+#ifdef UINT32_MAX
+    MVAL (UINT32_MAX),
+#endif
+#ifdef UINT64_MAX
+    MVAL (UINT64_MAX),
+#endif
+    NULL
+  };
+
+int
+main ()
+{
+
+  const char **mv;
+  for (mv = macro_values; *mv != NULL; mv++)
+    {
+      const char *value = *mv;
+      /* Test whether it looks like a cast expression.  */
+      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
+          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
+          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
+          || strncmp (value, "((int)"/*)*/, 6) == 0
+          || strncmp (value, "((signed short)"/*)*/, 15) == 0
+          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
+        return 1;
+    }
+  return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   gl_cv_header_working_stdint_h=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+
+else
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_header_working_stdint_h" >&5
-echo "${ECHO_T}$gl_cv_header_working_stdint_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_working_stdint_h" >&5
+$as_echo "$gl_cv_header_working_stdint_h" >&6; }
   fi
   if test "$gl_cv_header_working_stdint_h" = yes; then
     STDINT_H=
@@ -31723,20 +39214,21 @@ echo "${ECHO_T}$gl_cv_header_working_stdint_h" >&6; }
 
 for ac_header in sys/inttypes.h sys/bitypes.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -31752,32 +39244,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -31791,51 +39284,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -31844,21 +39338,24 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -31893,10 +39390,10 @@ done
 
 
   for gltype in ptrdiff_t size_t ; do
-    { echo "$as_me:$LINENO: checking for bit size of $gltype" >&5
-echo $ECHO_N "checking for bit size of $gltype... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for bit size of $gltype" >&5
+$as_echo_n "checking for bit size of $gltype... " >&6; }
 if { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then
   # Depending upon the size, compute the lo and hi bounds.
@@ -31934,13 +39431,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -31981,20 +39479,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo=`expr $ac_mid + 1`
@@ -32008,7 +39507,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -32045,13 +39544,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -32092,20 +39592,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_hi=`expr '(' $ac_mid ')' - 1`
@@ -32119,7 +39620,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo= ac_hi=
@@ -32166,20 +39667,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo=`expr '(' $ac_mid ')' + 1`
@@ -32226,15 +39728,17 @@ main ()
       long int i = longval ();
       if (i != (sizeof ($gltype) * CHAR_BIT))
        return 1;
-      fprintf (f, "%ld\n", i);
+      fprintf (f, "%ld", i);
     }
   else
     {
       unsigned long int i = ulongval ();
       if (i != (sizeof ($gltype) * CHAR_BIT))
        return 1;
-      fprintf (f, "%lu\n", i);
+      fprintf (f, "%lu", i);
     }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
   return ferror (f) || fclose (f) != 0;
 
   ;
@@ -32247,38 +39751,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   result=`cat conftest.val`
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 result=unknown
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
        eval gl_cv_bitsizeof_${gltype}=\$result
 
 fi
-ac_res=`eval echo '${'gl_cv_bitsizeof_${gltype}'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'gl_cv_bitsizeof_${gltype}'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
     eval result=\$gl_cv_bitsizeof_${gltype}
     if test $result = unknown; then
                                                 result=0
@@ -32299,10 +39807,10 @@ _ACEOF
 
 
   for gltype in sig_atomic_t wchar_t wint_t ; do
-    { echo "$as_me:$LINENO: checking for bit size of $gltype" >&5
-echo $ECHO_N "checking for bit size of $gltype... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for bit size of $gltype" >&5
+$as_echo_n "checking for bit size of $gltype... " >&6; }
 if { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then
   # Depending upon the size, compute the lo and hi bounds.
@@ -32340,13 +39848,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -32387,20 +39896,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo=`expr $ac_mid + 1`
@@ -32414,7 +39924,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -32451,13 +39961,14 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
@@ -32498,20 +40009,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_lo=$ac_mid; break
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_hi=`expr '(' $ac_mid ')' - 1`
@@ -32525,7 +40037,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
   done
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo= ac_hi=
@@ -32572,20 +40084,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_hi=$ac_mid
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_lo=`expr '(' $ac_mid ')' + 1`
@@ -32632,15 +40145,17 @@ main ()
       long int i = longval ();
       if (i != (sizeof ($gltype) * CHAR_BIT))
        return 1;
-      fprintf (f, "%ld\n", i);
+      fprintf (f, "%ld", i);
     }
   else
     {
       unsigned long int i = ulongval ();
       if (i != (sizeof ($gltype) * CHAR_BIT))
        return 1;
-      fprintf (f, "%lu\n", i);
+      fprintf (f, "%lu", i);
     }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
   return ferror (f) || fclose (f) != 0;
 
   ;
@@ -32653,38 +40168,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   result=`cat conftest.val`
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 result=unknown
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 rm -f conftest.val
        eval gl_cv_bitsizeof_${gltype}=\$result
 
 fi
-ac_res=`eval echo '${'gl_cv_bitsizeof_${gltype}'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'gl_cv_bitsizeof_${gltype}'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
     eval result=\$gl_cv_bitsizeof_${gltype}
     if test $result = unknown; then
                                                 result=0
@@ -32704,10 +40223,10 @@ _ACEOF
 
 
   for gltype in sig_atomic_t wchar_t wint_t ; do
-    { echo "$as_me:$LINENO: checking whether $gltype is signed" >&5
-echo $ECHO_N "checking whether $gltype is signed... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking whether $gltype is signed" >&5
+$as_echo_n "checking whether $gltype is signed... " >&6; }
 if { as_var=gl_cv_type_${gltype}_signed; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -32741,20 +40260,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   result=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        result=no
@@ -32764,9 +40284,10 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
        eval gl_cv_type_${gltype}_signed=\$result
 
 fi
-ac_res=`eval echo '${'gl_cv_type_${gltype}_signed'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'gl_cv_type_${gltype}_signed'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
     eval result=\$gl_cv_type_${gltype}_signed
     GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
     if test "$result" = yes; then
@@ -32789,10 +40310,10 @@ _ACEOF
 
 
   for gltype in ptrdiff_t size_t ; do
-    { echo "$as_me:$LINENO: checking for $gltype integer literal suffix" >&5
-echo $ECHO_N "checking for $gltype integer literal suffix... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for $gltype integer literal suffix" >&5
+$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
 if { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval gl_cv_type_${gltype}_suffix=no
        eval result=\$gl_cv_type_${gltype}_signed
@@ -32804,12 +40325,12 @@ else
        for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
          case $glsuf in
            '')  gltype1='int';;
-           l)  gltype1='long int';;
-           ll) gltype1='long long int';;
-           i64)        gltype1='__int64';;
-           u)  gltype1='unsigned int';;
-           ul) gltype1='unsigned long int';;
-           ull)        gltype1='unsigned long long int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
            ui64)gltype1='unsigned __int64';;
          esac
          cat >conftest.$ac_ext <<_ACEOF
@@ -32845,20 +40366,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   eval gl_cv_type_${gltype}_suffix=\$glsuf
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -32869,9 +40391,10 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
          test "$result" != no && break
        done
 fi
-ac_res=`eval echo '${'gl_cv_type_${gltype}_suffix'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'gl_cv_type_${gltype}_suffix'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
     GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
     eval result=\$gl_cv_type_${gltype}_suffix
     test "$result" = no && result=
@@ -32890,10 +40413,10 @@ _ACEOF
 
 
   for gltype in sig_atomic_t wchar_t wint_t ; do
-    { echo "$as_me:$LINENO: checking for $gltype integer literal suffix" >&5
-echo $ECHO_N "checking for $gltype integer literal suffix... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for $gltype integer literal suffix" >&5
+$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
 if { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval gl_cv_type_${gltype}_suffix=no
        eval result=\$gl_cv_type_${gltype}_signed
@@ -32905,12 +40428,12 @@ else
        for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
          case $glsuf in
            '')  gltype1='int';;
-           l)  gltype1='long int';;
-           ll) gltype1='long long int';;
-           i64)        gltype1='__int64';;
-           u)  gltype1='unsigned int';;
-           ul) gltype1='unsigned long int';;
-           ull)        gltype1='unsigned long long int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
            ui64)gltype1='unsigned __int64';;
          esac
          cat >conftest.$ac_ext <<_ACEOF
@@ -32946,20 +40469,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   eval gl_cv_type_${gltype}_suffix=\$glsuf
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
@@ -32970,9 +40494,10 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
          test "$result" != no && break
        done
 fi
-ac_res=`eval echo '${'gl_cv_type_${gltype}_suffix'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'gl_cv_type_${gltype}_suffix'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
     GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
     eval result=\$gl_cv_type_${gltype}_suffix
     test "$result" = no && result=
@@ -33002,17 +40527,18 @@ _ACEOF
 
 
 
+
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_stdio_h='<'stdio.h'>'
      else
-       { echo "$as_me:$LINENO: checking absolute name of <stdio.h>" >&5
-echo $ECHO_N "checking absolute name of <stdio.h>... $ECHO_C" >&6; }
+       { $as_echo "$as_me:$LINENO: checking absolute name of <stdio.h>" >&5
+$as_echo_n "checking absolute name of <stdio.h>... " >&6; }
 if test "${gl_cv_next_stdio_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-         if test $ac_cv_header_stdio_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
+          if test $ac_cv_header_stdio_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -33021,27 +40547,36 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <stdio.h>
 
 _ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_stdio_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/stdio.h#{
-                s#.*"\(.*/stdio.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_stdio_h='<'stdio.h'>'
-         fi
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_stdio_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/stdio.h#{
+                 s#.*"\(.*/stdio.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_stdio_h='<'stdio.h'>'
+          fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_stdio_h" >&5
-echo "${ECHO_T}$gl_cv_next_stdio_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_stdio_h" >&5
+$as_echo "$gl_cv_next_stdio_h" >&6; }
      fi
      NEXT_STDIO_H=$gl_cv_next_stdio_h
 
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stdio.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stdio_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDIO_H=$gl_next_as_first_directive
+
 
 
       GNULIB_FPRINTF=1
@@ -33068,18 +40603,99 @@ echo "${ECHO_T}$gl_cv_next_stdio_h" >&6; }
 
 
 
+  for gl_func in dprintf fpurge fseeko ftello getdelim getline popen renameat     snprintf vdprintf vsnprintf; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:$LINENO: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdio.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_gl_Symbol=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_gl_Symbol=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+     as_val=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+
+      done
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_stdlib_h='<'stdlib.h'>'
      else
-       { echo "$as_me:$LINENO: checking absolute name of <stdlib.h>" >&5
-echo $ECHO_N "checking absolute name of <stdlib.h>... $ECHO_C" >&6; }
+       { $as_echo "$as_me:$LINENO: checking absolute name of <stdlib.h>" >&5
+$as_echo_n "checking absolute name of <stdlib.h>... " >&6; }
 if test "${gl_cv_next_stdlib_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-         if test $ac_cv_header_stdlib_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
+          if test $ac_cv_header_stdlib_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -33088,53 +40704,55 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <stdlib.h>
 
 _ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_stdlib_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/stdlib.h#{
-                s#.*"\(.*/stdlib.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_stdlib_h='<'stdlib.h'>'
-         fi
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_stdlib_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/stdlib.h#{
+                 s#.*"\(.*/stdlib.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_stdlib_h='<'stdlib.h'>'
+          fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_stdlib_h" >&5
-echo "${ECHO_T}$gl_cv_next_stdlib_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_stdlib_h" >&5
+$as_echo "$gl_cv_next_stdlib_h" >&6; }
      fi
      NEXT_STDLIB_H=$gl_cv_next_stdlib_h
 
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stdlib.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stdlib_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDLIB_H=$gl_next_as_first_directive
+
 
 
 
 for ac_header in random.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+  $as_echo_n "(cached) " >&6
 else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
+  cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
+
 #include <$ac_header>
 _ACEOF
 rm -f conftest.$ac_objext
@@ -33143,130 +40761,94 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
+  eval "$as_ac_Header=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_header_compiler=no
+       eval "$as_ac_Header=no"
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+fi
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
 
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+fi
+
+done
+
+  if test $ac_cv_header_random_h = yes; then
+    HAVE_RANDOM_H=1
+  else
+    HAVE_RANDOM_H=0
+  fi
+
+  { $as_echo "$as_me:$LINENO: checking for struct random_data" >&5
+$as_echo_n "checking for struct random_data... " >&6; }
+if test "${ac_cv_type_struct_random_data+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_type_struct_random_data=no
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <$ac_header>
+#include <stdlib.h>
+      #if HAVE_RANDOM_H
+      # include <random.h>
+      #endif
+
+
+int
+main ()
+{
+if (sizeof (struct random_data))
+       return 0;
+  ;
+  return 0;
+}
 _ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-    ( cat <<\_ASBOX
-## ------------------------------ ##
-## Report this to bug-tar@gnu.org ##
-## ------------------------------ ##
-_ASBOX
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-  if test $ac_cv_header_random_h = yes; then
-    HAVE_RANDOM_H=1
-  else
-    HAVE_RANDOM_H=0
-  fi
-
-  { echo "$as_me:$LINENO: checking for struct random_data" >&5
-echo $ECHO_N "checking for struct random_data... $ECHO_C" >&6; }
-if test "${ac_cv_type_struct_random_data+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
+       } && test -s conftest.$ac_objext; then
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -33279,14 +40861,11 @@ cat >>conftest.$ac_ext <<_ACEOF
       #endif
 
 
-typedef struct random_data ac__type_new_;
 int
 main ()
 {
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
-  return 0;
+if (sizeof ((struct random_data)))
+         return 0;
   ;
   return 0;
 }
@@ -33297,30 +40876,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  ac_cv_type_struct_random_data=yes
+  :
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_type_struct_random_data=no
+       ac_cv_type_struct_random_data=yes
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_struct_random_data" >&5
-echo "${ECHO_T}$ac_cv_type_struct_random_data" >&6; }
-if test $ac_cv_type_struct_random_data = yes; then
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_struct_random_data" >&5
+$as_echo "$ac_cv_type_struct_random_data" >&6; }
+if test "x$ac_cv_type_struct_random_data" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_RANDOM_DATA 1
 
 
 
-for ac_func in stpcpy
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+
+
+
+
+
+  for gl_func in atoll canonicalize_file_name getloadavg getsubopt mkdtemp     mkostemp mkostemps mkstemp mkstemps random_r initstat_r srandom_r     setstate_r realpath rpmatch setenv strtod strtoll strtoull unsetenv; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:$LINENO: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -33361,100 +40954,70 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
+#include <stdlib.h>
+#if HAVE_SYS_LOADAVG_H
+# include <sys/loadavg.h>
 #endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
+#if HAVE_RANDOM_H
+# include <random.h>
 #endif
 
 int
 main ()
 {
-return $ac_func ();
+#undef $gl_func
+  (void) $gl_func;
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  eval "$as_ac_var=yes"
+       } && test -s conftest.$ac_objext; then
+  eval "$as_gl_Symbol=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       eval "$as_ac_var=no"
+       eval "$as_gl_Symbol=no"
 fi
 
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+     as_val=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
 _ACEOF
 
-else
-
-    gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext"
-
+                     eval ac_cv_have_decl_$gl_func=yes
 fi
-done
 
+      done
 
-  if test $ac_cv_func_stpcpy = no; then
-    HAVE_STPCPY=0
-
-  :
-
-  fi
 
 
 
-  GNULIB_STPCPY=1
 
 
 
@@ -33468,13 +41031,13 @@ done
 
 
 
-for ac_func in strcasecmp
+for ac_func in stpcpy
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -33527,35 +41090,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
@@ -33566,8 +41136,8 @@ fi
 done
 
 
-  if test $ac_cv_func_strcasecmp = no; then
-    HAVE_STRCASECMP=0
+  if test $ac_cv_func_stpcpy = no; then
+    HAVE_STPCPY=0
 
   :
 
@@ -33575,6 +41145,12 @@ done
 
 
 
+  GNULIB_STPCPY=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_STPCPY 1
+_ACEOF
 
 
 
@@ -33584,13 +41160,19 @@ done
 
 
 
-for ac_func in strncasecmp
+
+
+
+
+
+
+for ac_func in strcasecmp
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -33643,35 +41225,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
 done
 
 
-  if test $ac_cv_func_strncasecmp = no; then
+  if test $ac_cv_func_strcasecmp = no; then
+    HAVE_STRCASECMP=0
 
   :
 
   fi
-  { echo "$as_me:$LINENO: checking whether strncasecmp is declared" >&5
-echo $ECHO_N "checking whether strncasecmp is declared... $ECHO_C" >&6; }
-if test "${ac_cv_have_decl_strncasecmp+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-#ifndef strncasecmp
-  (void) strncasecmp;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_have_decl_strncasecmp=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_cv_have_decl_strncasecmp=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strncasecmp" >&5
-echo "${ECHO_T}$ac_cv_have_decl_strncasecmp" >&6; }
-if test $ac_cv_have_decl_strncasecmp = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRNCASECMP 1
-_ACEOF
-
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRNCASECMP 0
-_ACEOF
-
-
-fi
-
-
-  if test $ac_cv_have_decl_strncasecmp = no; then
-    HAVE_DECL_STRNCASECMP=0
-  fi
 
 
 
 
 
 
-
-
-
-for ac_func in strchrnul
+for ac_func in strncasecmp
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -33832,35 +41348,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
 done
 
 
-  if test $ac_cv_func_strchrnul = no; then
-    HAVE_STRCHRNUL=0
-    :
+  if test $ac_cv_func_strncasecmp = no; then
+
+  :
+
   fi
+  { $as_echo "$as_me:$LINENO: checking whether strncasecmp is declared" >&5
+$as_echo_n "checking whether strncasecmp is declared... " >&6; }
+if test "${ac_cv_have_decl_strncasecmp+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+#ifndef strncasecmp
+  (void) strncasecmp;
+#endif
 
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_strncasecmp=yes
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+       ac_cv_have_decl_strncasecmp=no
+fi
 
-  GNULIB_STRCHRNUL=1
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strncasecmp" >&5
+$as_echo "$ac_cv_have_decl_strncasecmp" >&6; }
+if test "x$ac_cv_have_decl_strncasecmp" = x""yes; then
 
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRNCASECMP 1
+_ACEOF
 
 
+else
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRNCASECMP 0
+_ACEOF
 
-  if test $gl_cv_func_malloc_posix != yes; then
-    REPLACE_STRDUP=1
 
+fi
 
 
+  if test $ac_cv_have_decl_strncasecmp = no; then
+    HAVE_DECL_STRNCASECMP=0
+  fi
 
 
 
 
 
-  gl_LIBOBJS="$gl_LIBOBJS strdup.$ac_objext"
 
-  else
 
 
 
@@ -33905,13 +41486,13 @@ done
 
 
 
-for ac_func in strdup
+for ac_func in strchrnul
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -33964,35 +41545,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
 done
 
 
+  if test $ac_cv_func_strchrnul = no; then
+    HAVE_STRCHRNUL=0
+    :
   fi
 
 
 
-
-  if test $ac_cv_have_decl_strdup = no; then
-    HAVE_DECL_STRDUP=0
-  fi
-  :
-
-
-
-  GNULIB_STRDUP=1
-
-
-
-  if test $REPLACE_STRERROR = 1; then
-
-
-
-
+  GNULIB_STRCHRNUL=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_STRCHRNUL 1
+_ACEOF
 
 
-  gl_LIBOBJS="$gl_LIBOBJS strerror.$ac_objext"
 
 
-cat >>confdefs.h <<_ACEOF
-#define REPLACE_STRERROR $REPLACE_STRERROR
-_ACEOF
 
-  fi
 
+  if test $gl_cv_func_malloc_posix != yes; then
+    REPLACE_STRDUP=1
 
 
-  GNULIB_STRERROR=1
 
 
 
 
 
 
+  gl_LIBOBJS="$gl_LIBOBJS strdup.$ac_objext"
 
+  else
 
 
 
@@ -34055,21 +41631,14 @@ _ACEOF
 
 
 
-  if test $ac_cv_have_decl_strndup = no; then
-    HAVE_DECL_STRNDUP=0
-  fi
 
-  # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'.
-  { echo "$as_me:$LINENO: checking for working strndup" >&5
-echo $ECHO_N "checking for working strndup... $ECHO_C" >&6; }
-if test "${gl_cv_func_strndup+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test "$cross_compiling" = yes; then
-  { echo "$as_me:$LINENO: checking for strndup" >&5
-echo $ECHO_N "checking for strndup... $ECHO_C" >&6; }
-if test "${ac_cv_func_strndup+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+for ac_func in strdup
+do
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -34077,12 +41646,12 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-/* Define strndup to an innocuous variant, in case <limits.h> declares strndup.
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define strndup innocuous_strndup
+#define $ac_func innocuous_$ac_func
 
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char strndup (); below.
+    which can conflict with char $ac_func (); below.
     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
     <limits.h> exists even on freestanding compilers.  */
 
@@ -34092,7 +41661,7 @@ cat >>conftest.$ac_ext <<_ACEOF
 # include <assert.h>
 #endif
 
-#undef strndup
+#undef $ac_func
 
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
@@ -34100,18 +41669,18 @@ cat >>conftest.$ac_ext <<_ACEOF
 #ifdef __cplusplus
 extern "C"
 #endif
-char strndup ();
+char $ac_func ();
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
-#if defined __stub_strndup || defined __stub___strndup
+#if defined __stub_$ac_func || defined __stub___$ac_func
 choke me
 #endif
 
 int
 main ()
 {
-return strndup ();
+return $ac_func ();
   ;
   return 0;
 }
@@ -34122,66 +41691,150 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_func_strndup=yes
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_func_strndup=no
+       eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_strndup" >&5
-echo "${ECHO_T}$ac_cv_func_strndup" >&6; }
-if test $ac_cv_func_strndup = yes; then
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
 
-#ifdef _AIX
-               too risky
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "too risky" >/dev/null 2>&1; then
-  gl_cv_func_strndup=no
 else
-  gl_cv_func_strndup=yes
-fi
-rm -f conftest*
 
-else
-  gl_cv_func_strndup=no
+    gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext"
+
 fi
+done
+
+
+  fi
+
+
+
+
+  if test $ac_cv_have_decl_strdup = no; then
+    HAVE_DECL_STRDUP=0
+  fi
+  :
+
+
+
+  GNULIB_STRDUP=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_STRDUP 1
+_ACEOF
+
+
+
+
+
+  if test $REPLACE_STRERROR = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS strerror.$ac_objext"
+
+
+cat >>confdefs.h <<_ACEOF
+#define REPLACE_STRERROR $REPLACE_STRERROR
+_ACEOF
+
+  fi
+
+
+
+  GNULIB_STRERROR=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_STRERROR 1
+_ACEOF
+
+
+
+
+
+
+
+
+
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_have_decl_strndup = no; then
+    HAVE_DECL_STRNDUP=0
+  fi
+
+  if test $ac_cv_func_strndup = yes; then
+    # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'.
+    { $as_echo "$as_me:$LINENO: checking for working strndup" >&5
+$as_echo_n "checking for working strndup... " >&6; }
+if test "${gl_cv_func_strndup_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then
+  case $host_os in
+            aix*) gl_cv_func_strndup_works="guessing no";;
+            *) gl_cv_func_strndup_works="guessing yes";;
+          esac
 else
   cat >conftest.$ac_ext <<_ACEOF
 
-       /* confdefs.h.  */
+         /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <string.h>
-                        #include <stdlib.h>
+                           #include <stdlib.h>
 int
 main ()
 {
@@ -34204,44 +41857,55 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  gl_cv_func_strndup=yes
+  gl_cv_func_strndup_works=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-gl_cv_func_strndup=no
+gl_cv_func_strndup_works=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_strndup" >&5
-echo "${ECHO_T}$gl_cv_func_strndup" >&6; }
-  if test $gl_cv_func_strndup = yes; then
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_strndup_works" >&5
+$as_echo "$gl_cv_func_strndup_works" >&6; }
+    case $gl_cv_func_strndup_works in
+      *no)
+        REPLACE_STRNDUP=1
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_STRNDUP 1
-_ACEOF
 
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS strndup.$ac_objext"
+
+        ;;
+    esac
   else
-    HAVE_STRNDUP=0
 
 
 
@@ -34252,7 +41916,6 @@ _ACEOF
 
   gl_LIBOBJS="$gl_LIBOBJS strndup.$ac_objext"
 
-    :
   fi
 
 
@@ -34260,6 +41923,13 @@ _ACEOF
   GNULIB_STRNDUP=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_STRNDUP 1
+_ACEOF
+
+
+
+
 
 
 
@@ -34271,10 +41941,10 @@ _ACEOF
     HAVE_DECL_STRNLEN=0
   fi
 
-  { echo "$as_me:$LINENO: checking for working strnlen" >&5
-echo $ECHO_N "checking for working strnlen... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for working strnlen" >&5
+$as_echo_n "checking for working strnlen... " >&6; }
 if test "${ac_cv_func_strnlen_working+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then
   ac_cv_func_strnlen_working=no
@@ -34315,36 +41985,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   ac_cv_func_strnlen_working=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 ac_cv_func_strnlen_working=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_strnlen_working" >&5
-echo "${ECHO_T}$ac_cv_func_strnlen_working" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_strnlen_working" >&5
+$as_echo "$ac_cv_func_strnlen_working" >&6; }
 test $ac_cv_func_strnlen_working = no &&
 
 
@@ -34374,13 +42047,20 @@ _ACEOF
   GNULIB_STRNLEN=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_STRNLEN 1
+_ACEOF
+
+
+
 
 
 
-  { echo "$as_me:$LINENO: checking whether <inttypes.h> defines strtoimax as a macro" >&5
-echo $ECHO_N "checking whether <inttypes.h> defines strtoimax as a macro... $ECHO_C" >&6; }
+
+  { $as_echo "$as_me:$LINENO: checking whether <inttypes.h> defines strtoimax as a macro" >&5
+$as_echo_n "checking whether <inttypes.h> defines strtoimax as a macro... " >&6; }
 if test "${gl_cv_func_strtoimax_macro+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -34402,8 +42082,8 @@ fi
 rm -f conftest*
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_strtoimax_macro" >&5
-echo "${ECHO_T}$gl_cv_func_strtoimax_macro" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_strtoimax_macro" >&5
+$as_echo "$gl_cv_func_strtoimax_macro" >&6; }
 
   if test "$gl_cv_func_strtoimax_macro" != yes; then
 
@@ -34417,11 +42097,11 @@ echo "${ECHO_T}$gl_cv_func_strtoimax_macro" >&6; }
 
 for ac_func in strtoimax
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -34474,35 +42154,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
@@ -34515,10 +42202,10 @@ done
 
     if test $ac_cv_func_strtoimax = no; then
 
-  { echo "$as_me:$LINENO: checking whether strtoll is declared" >&5
-echo $ECHO_N "checking whether strtoll is declared... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether strtoll is declared" >&5
+$as_echo_n "checking whether strtoll is declared... " >&6; }
 if test "${ac_cv_have_decl_strtoll+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -34544,20 +42231,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_strtoll=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_strtoll=no
@@ -34565,9 +42253,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strtoll" >&5
-echo "${ECHO_T}$ac_cv_have_decl_strtoll" >&6; }
-if test $ac_cv_have_decl_strtoll = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strtoll" >&5
+$as_echo "$ac_cv_have_decl_strtoll" >&6; }
+if test "x$ac_cv_have_decl_strtoll" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_STRTOLL 1
 
 for ac_func in strtol
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -34661,35 +42349,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
@@ -34716,11 +42411,11 @@ done
 
 for ac_func in strtoll
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -34773,35 +42468,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
@@ -34825,6 +42527,13 @@ done
   GNULIB_STRTOLL=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_STRTOLL 1
+_ACEOF
+
+
+
+
 
 
 
@@ -34836,11 +42545,11 @@ done
 
 for ac_func in strtoul
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -34893,35 +42602,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
@@ -34948,11 +42664,11 @@ done
 
 for ac_func in strtoull
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -35005,35 +42721,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
@@ -35057,13 +42780,20 @@ done
   GNULIB_STRTOULL=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_STRTOULL 1
+_ACEOF
+
+
+
+
 
 
 
-  { echo "$as_me:$LINENO: checking whether <inttypes.h> defines strtoumax as a macro" >&5
-echo $ECHO_N "checking whether <inttypes.h> defines strtoumax as a macro... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether <inttypes.h> defines strtoumax as a macro" >&5
+$as_echo_n "checking whether <inttypes.h> defines strtoumax as a macro... " >&6; }
 if test "${gl_cv_func_strtoumax_macro+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -35085,8 +42815,8 @@ fi
 rm -f conftest*
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_strtoumax_macro" >&5
-echo "${ECHO_T}$gl_cv_func_strtoumax_macro" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_strtoumax_macro" >&5
+$as_echo "$gl_cv_func_strtoumax_macro" >&6; }
 
   if test "$gl_cv_func_strtoumax_macro" != yes; then
 
@@ -35100,11 +42830,11 @@ echo "${ECHO_T}$gl_cv_func_strtoumax_macro" >&6; }
 
 for ac_func in strtoumax
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -35157,35 +42887,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
@@ -35198,10 +42935,10 @@ done
 
     if test $ac_cv_func_strtoumax = no; then
 
-  { echo "$as_me:$LINENO: checking whether strtoull is declared" >&5
-echo $ECHO_N "checking whether strtoull is declared... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether strtoull is declared" >&5
+$as_echo_n "checking whether strtoull is declared... " >&6; }
 if test "${ac_cv_have_decl_strtoull+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -35227,20 +42964,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_strtoull=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_strtoull=no
@@ -35248,9 +42986,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strtoull" >&5
-echo "${ECHO_T}$ac_cv_have_decl_strtoull" >&6; }
-if test $ac_cv_have_decl_strtoull = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strtoull" >&5
+$as_echo "$ac_cv_have_decl_strtoull" >&6; }
+if test "x$ac_cv_have_decl_strtoull" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_STRTOULL 1
 
 
 
-  if test $ac_cv_func_lstat = yes; then
-    HAVE_LSTAT=1
-  else
-    HAVE_LSTAT=0
-  fi
-
-
-
-
-
-
-
-
 
 
 
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_sys_stat_h='<'sys/stat.h'>'
      else
-       { echo "$as_me:$LINENO: checking absolute name of <sys/stat.h>" >&5
-echo $ECHO_N "checking absolute name of <sys/stat.h>... $ECHO_C" >&6; }
+       { $as_echo "$as_me:$LINENO: checking absolute name of <sys/stat.h>" >&5
+$as_echo_n "checking absolute name of <sys/stat.h>... " >&6; }
 if test "${gl_cv_next_sys_stat_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-         if test $ac_cv_header_sys_stat_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
+          if test $ac_cv_header_sys_stat_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -35325,38 +43050,46 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <sys/stat.h>
 
 _ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_sys_stat_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/sys/stat.h#{
-                s#.*"\(.*/sys/stat.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_sys_stat_h='<'sys/stat.h'>'
-         fi
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_sys_stat_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/sys/stat.h#{
+                 s#.*"\(.*/sys/stat.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_sys_stat_h='<'sys/stat.h'>'
+          fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_sys_stat_h" >&5
-echo "${ECHO_T}$gl_cv_next_sys_stat_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_sys_stat_h" >&5
+$as_echo "$gl_cv_next_sys_stat_h" >&6; }
      fi
      NEXT_SYS_STAT_H=$gl_cv_next_sys_stat_h
 
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'sys/stat.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_sys_stat_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H=$gl_next_as_first_directive
 
 
-  SYS_STAT_H='sys/stat.h'
 
 
-      { echo "$as_me:$LINENO: checking for nlink_t" >&5
-echo $ECHO_N "checking for nlink_t... $ECHO_C" >&6; }
+      { $as_echo "$as_me:$LINENO: checking for nlink_t" >&5
+$as_echo_n "checking for nlink_t... " >&6; }
 if test "${ac_cv_type_nlink_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
+  ac_cv_type_nlink_t=no
+cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -35365,14 +43098,47 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <sys/types.h>
      #include <sys/stat.h>
 
-typedef nlink_t ac__type_new_;
 int
 main ()
 {
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
+if (sizeof (nlink_t))
+       return 0;
+  ;
   return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+     #include <sys/stat.h>
+
+int
+main ()
+{
+if (sizeof ((nlink_t)))
+         return 0;
   ;
   return 0;
 }
@@ -35383,30 +43149,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  ac_cv_type_nlink_t=yes
+  :
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_type_nlink_t=no
+       ac_cv_type_nlink_t=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_nlink_t" >&5
-echo "${ECHO_T}$ac_cv_type_nlink_t" >&6; }
-if test $ac_cv_type_nlink_t = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_nlink_t" >&5
+$as_echo "$ac_cv_type_nlink_t" >&6; }
+if test "x$ac_cv_type_nlink_t" = x""yes; then
   :
 else
 
 
 
 
-  { echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
-echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; }
+
+
+
+
+
+
+
+
+
+
+
+
+  for gl_func in fchmodat fstatat futimens lchmod lstat mkdirat mkfifo mkfifoat     mknod mknodat stat utimensat; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:$LINENO: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/stat.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_gl_Symbol=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_gl_Symbol=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+     as_val=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+
+      done
+
+
+  { $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
   if test "${ac_cv_path_mkdir+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
     MKDIR_P="$ac_install_sh -d"
   fi
 fi
-{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5
-echo "${ECHO_T}$MKDIR_P" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
 
 
 
 
-  { echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
-echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
   if test "${ac_cv_path_mkdir+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
@@ -35502,8 +43359,9 @@ fi
     MKDIR_P="$ac_install_sh -d"
   fi
 fi
-{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5
-echo "${ECHO_T}$MKDIR_P" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
 
 
 
@@ -35528,14 +43386,14 @@ echo "${ECHO_T}$MKDIR_P" >&6; }
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_sysexits_h='<'sysexits.h'>'
      else
-       { echo "$as_me:$LINENO: checking absolute name of <sysexits.h>" >&5
-echo $ECHO_N "checking absolute name of <sysexits.h>... $ECHO_C" >&6; }
+       { $as_echo "$as_me:$LINENO: checking absolute name of <sysexits.h>" >&5
+$as_echo_n "checking absolute name of <sysexits.h>... " >&6; }
 if test "${gl_cv_next_sysexits_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-         if test $ac_cv_header_sysexits_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
+          if test $ac_cv_header_sysexits_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -35544,27 +43402,36 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <sysexits.h>
 
 _ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_sysexits_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/sysexits.h#{
-                s#.*"\(.*/sysexits.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_sysexits_h='<'sysexits.h'>'
-         fi
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_sysexits_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/sysexits.h#{
+                 s#.*"\(.*/sysexits.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_sysexits_h='<'sysexits.h'>'
+          fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_sysexits_h" >&5
-echo "${ECHO_T}$gl_cv_next_sysexits_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_sysexits_h" >&5
+$as_echo "$gl_cv_next_sysexits_h" >&6; }
      fi
      NEXT_SYSEXITS_H=$gl_cv_next_sysexits_h
 
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'sysexits.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_sysexits_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H=$gl_next_as_first_directive
+
 
 
     cat >conftest.$ac_ext <<_ACEOF
@@ -35578,25 +43445,25 @@ int
 main ()
 {
 switch (0)
-       {
-       case EX_OK:
-       case EX_USAGE:
-       case EX_DATAERR:
-       case EX_NOINPUT:
-       case EX_NOUSER:
-       case EX_NOHOST:
-       case EX_UNAVAILABLE:
-       case EX_SOFTWARE:
-       case EX_OSERR:
-       case EX_OSFILE:
-       case EX_CANTCREAT:
-       case EX_IOERR:
-       case EX_TEMPFAIL:
-       case EX_PROTOCOL:
-       case EX_NOPERM:
-       case EX_CONFIG:
-         break;
-       }
+          {
+          case EX_OK:
+          case EX_USAGE:
+          case EX_DATAERR:
+          case EX_NOINPUT:
+          case EX_NOUSER:
+          case EX_NOHOST:
+          case EX_UNAVAILABLE:
+          case EX_SOFTWARE:
+          case EX_OSERR:
+          case EX_OSFILE:
+          case EX_CANTCREAT:
+          case EX_IOERR:
+          case EX_TEMPFAIL:
+          case EX_PROTOCOL:
+          case EX_NOPERM:
+          case EX_CONFIG:
+            break;
+          }
 
   ;
   return 0;
@@ -35608,20 +43475,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   SYSEXITS_H=
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        SYSEXITS_H=sysexits.h
@@ -35661,10 +43529,10 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
 
-  { echo "$as_me:$LINENO: checking whether localtime_r is compatible with its POSIX signature" >&5
-echo $ECHO_N "checking whether localtime_r is compatible with its POSIX signature... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether localtime_r is compatible with its POSIX signature" >&5
+$as_echo_n "checking whether localtime_r is compatible with its POSIX signature... " >&6; }
 if test "${gl_cv_time_r_posix+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -35677,12 +43545,12 @@ int
 main ()
 {
 /* We don't need to append 'restrict's to the argument types,
-          even though the POSIX signature has the 'restrict's,
-          since C99 says they can't affect type compatibility.  */
-       struct tm * (*ptr) (time_t const *, struct tm *) = localtime_r;
-        if (ptr) return 0;
-        /* Check the return type is a pointer.  On HP-UX 10 it is 'int'.  */
-        *localtime_r (0, 0);
+              even though the POSIX signature has the 'restrict's,
+              since C99 says they can't affect type compatibility.  */
+           struct tm * (*ptr) (time_t const *, struct tm *) = localtime_r;
+           if (ptr) return 0;
+           /* Check the return type is a pointer.  On HP-UX 10 it is 'int'.  */
+           *localtime_r (0, 0);
   ;
   return 0;
 }
@@ -35693,20 +43561,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gl_cv_time_r_posix=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gl_cv_time_r_posix=no
@@ -35714,8 +43583,8 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_time_r_posix" >&5
-echo "${ECHO_T}$gl_cv_time_r_posix" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_time_r_posix" >&5
+$as_echo "$gl_cv_time_r_posix" >&6; }
   if test $gl_cv_time_r_posix = yes; then
     REPLACE_LOCALTIME_R=0
   else
@@ -35752,17 +43621,18 @@ echo "${ECHO_T}$gl_cv_time_r_posix" >&6; }
 
 
 
+
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_unistd_h='<'unistd.h'>'
      else
-       { echo "$as_me:$LINENO: checking absolute name of <unistd.h>" >&5
-echo $ECHO_N "checking absolute name of <unistd.h>... $ECHO_C" >&6; }
+       { $as_echo "$as_me:$LINENO: checking absolute name of <unistd.h>" >&5
+$as_echo_n "checking absolute name of <unistd.h>... " >&6; }
 if test "${gl_cv_next_unistd_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-         if test $ac_cv_header_unistd_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
+          if test $ac_cv_header_unistd_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -35771,27 +43641,36 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <unistd.h>
 
 _ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_unistd_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/unistd.h#{
-                s#.*"\(.*/unistd.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_unistd_h='<'unistd.h'>'
-         fi
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_unistd_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/unistd.h#{
+                 s#.*"\(.*/unistd.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_unistd_h='<'unistd.h'>'
+          fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_unistd_h" >&5
-echo "${ECHO_T}$gl_cv_next_unistd_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_unistd_h" >&5
+$as_echo "$gl_cv_next_unistd_h" >&6; }
      fi
      NEXT_UNISTD_H=$gl_cv_next_unistd_h
 
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'unistd.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_unistd_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_UNISTD_H=$gl_next_as_first_directive
+
 
 
 
@@ -35823,6 +43702,121 @@ echo "${ECHO_T}$gl_cv_next_unistd_h" >&6; }
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  for gl_func in chown dup2 dup3 environ euidaccess faccessat fchdir fchownat     fsync ftruncate getcwd getdomainname getdtablesize getgroups     gethostname getlogin getlogin_r getpagesize getusershell setusershell     endusershell lchown link linkat lseek pipe2 pread readlink readlinkat     rmdir sleep symlink symlinkat unlink unlinkat usleep; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:$LINENO: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <unistd.h>
+/* Some systems declare various items in the wrong headers.  */
+#ifndef __GLIBC__
+# include <fcntl.h>
+# include <stdio.h>
+# include <stdlib.h>
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#  include <io.h>
+# endif
+#endif
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_gl_Symbol=yes"
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       eval "$as_gl_Symbol=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+     as_val=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+
+      done
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
   gl_LIBOBJS="$gl_LIBOBJS dup-safer.$ac_objext"
 
 
@@ -35849,6 +43843,108 @@ echo "${ECHO_T}$gl_cv_next_unistd_h" >&6; }
 
 
 
+    { $as_echo "$as_me:$LINENO: checking whether unlink honors trailing slashes" >&5
+$as_echo_n "checking whether unlink honors trailing slashes... " >&6; }
+if test "${gl_cv_func_unlink_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  touch conftest.file
+     # Assume that if we have lstat, we can also check symlinks.
+     if test $ac_cv_func_lstat = yes; then
+       ln -s conftest.file conftest.lnk
+     fi
+     if test "$cross_compiling" = yes; then
+  gl_cv_func_unlink_works="guessing no"
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <unistd.h>
+           #include <errno.h>
+
+int
+main ()
+{
+if (!unlink ("conftest.file/") || errno != ENOTDIR) return 1;
+#if HAVE_LSTAT
+      if (!unlink ("conftest.lnk/") || errno != ENOTDIR) return 2;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_unlink_works=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gl_cv_func_unlink_works=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+     rm -f conftest.file conftest.lnk
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_unlink_works" >&5
+$as_echo "$gl_cv_func_unlink_works" >&6; }
+  if test x"$gl_cv_func_unlink_works" != xyes; then
+    REPLACE_UNLINK=1
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS unlink.$ac_objext"
+
+  fi
+
+
+
+  GNULIB_UNLINK=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_UNLINK 1
+_ACEOF
+
+
+
+
+
+
 
 
 
@@ -35867,17 +43963,18 @@ echo "${ECHO_T}$gl_cv_next_unistd_h" >&6; }
 
 
   # The Hurd, the Linux kernel, the FreeBSD kernel version 2.2 and later,
-  # and Cygwin never let anyone (even root) unlink directories.
+  # Cygwin, and mingw never let anyone (even root) unlink directories.
   # If anyone knows of another system for which unlink can never
   # remove a directory, please report it to <bug-coreutils@gnu.org>.
   # Unfortunately this is difficult to test for, since it requires root access
   # and might create garbage in the file system,
   # so the code below simply relies on the kernel name and version number.
-  case $host in
-  *-*-gnu[0-9]* | \
-  *-*-linux-* | *-*-linux | \
-  *-*-freebsd2.2* | *-*-freebsd[3-9]* | *-*-freebsd[1-9][0-9]* | \
-  *-cygwin)
+  case $host_os in
+  gnu[0-9]* | \
+  linux-* | linux | \
+  freebsd2.2* | freebsd[3-9]* | freebsd[1-9][0-9]* | \
+  cygwin | \
+  mingw*)
 
 cat >>confdefs.h <<\_ACEOF
 #define UNLINK_CANNOT_UNLINK_DIR 1
@@ -35952,11 +44049,11 @@ _ACEOF
 
 for ac_func in unsetenv
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -36009,35 +44106,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -36065,10 +44169,10 @@ done
 
 
   else
-    echo "$as_me:$LINENO: checking for unsetenv() return type" >&5
-echo $ECHO_N "checking for unsetenv() return type... $ECHO_C" >&6; }
+        { $as_echo "$as_me:$LINENO: checking for unsetenv() return type" >&5
+$as_echo_n "checking for unsetenv() return type... " >&6; }
 if test "${gt_cv_func_unsetenv_ret+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -36101,20 +44205,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gt_cv_func_unsetenv_ret='int'
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gt_cv_func_unsetenv_ret='void'
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_func_unsetenv_ret" >&5
-echo "${ECHO_T}$gt_cv_func_unsetenv_ret" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_func_unsetenv_ret" >&5
+$as_echo "$gt_cv_func_unsetenv_ret" >&6; }
     if test $gt_cv_func_unsetenv_ret = 'void'; then
-      VOID_UNSETENV=1
-    fi
-  fi
-
-
-
-  GNULIB_UNSETENV=1
-
-
-
-  if test $ac_cv_func_utime_null = no; then
-
-
-
-
-
-
-
-
-  gl_LIBOBJS="$gl_LIBOBJS utime.$ac_objext"
-
 
 cat >>confdefs.h <<\_ACEOF
-#define utime rpl_utime
+#define VOID_UNSETENV 1
 _ACEOF
 
+      REPLACE_UNSETENV=1
 
 
 
@@ -36159,14 +44244,17 @@ _ACEOF
 
 
 
-  { echo "$as_me:$LINENO: checking whether utimes accepts a null argument" >&5
-echo $ECHO_N "checking whether utimes accepts a null argument... $ECHO_C" >&6; }
-if test "${ac_cv_func_utimes_null+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  gl_LIBOBJS="$gl_LIBOBJS unsetenv.$ac_objext"
+
+    fi
+
+        { $as_echo "$as_me:$LINENO: checking whether unsetenv works on duplicates" >&5
+$as_echo_n "checking whether unsetenv works on duplicates... " >&6; }
+if test "${gl_cv_func_unsetenv_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
-  rm -f conftest.data; > conftest.data
-if test "$cross_compiling" = yes; then
-  ac_cv_func_utimes_null=no
+  if test "$cross_compiling" = yes; then
+  gl_cv_func_unsetenv_works="guessing no"
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -36175,19 +44263,21 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 
-/* In case stat has been defined to rpl_stat, undef it here.  */
-#undef stat
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/time.h>
+       #include <stdlib.h>
+
 int
-main () {
-struct stat s, t;
-return ! (stat ("conftest.data", &s) == 0
-         && utimes ("conftest.data", 0) == 0
-         && stat ("conftest.data", &t) == 0
-         && t.st_mtime >= s.st_mtime
-         && t.st_mtime - s.st_mtime < 120));
+main ()
+{
+
+       char entry[] = "b=2";
+       if (putenv ((char *) "a=1")) return 1;
+       if (putenv (entry)) return 2;
+       entry[0] = 'a';
+       unsetenv ("a");
+       if (getenv ("a")) return 3;
+
+  ;
+  return 0;
 }
 _ACEOF
 rm -f conftest$ac_exeext
@@ -36196,52 +44286,67 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
-  ac_cv_func_utimes_null=yes
+  gl_cv_func_unsetenv_works=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
-ac_cv_func_utimes_null=no
+gl_cv_func_unsetenv_works=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
-rm -f core core.* *.core
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_utimes_null" >&5
-echo "${ECHO_T}$ac_cv_func_utimes_null" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_unsetenv_works" >&5
+$as_echo "$gl_cv_func_unsetenv_works" >&6; }
+    if test "$gl_cv_func_unsetenv_works" != yes; then
+      REPLACE_UNSETENV=1
+
 
-    if test $ac_cv_func_utimes_null = yes; then
 
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_UTIMES_NULL 1
-_ACEOF
 
-    fi
 
 
 
+
+  gl_LIBOBJS="$gl_LIBOBJS unsetenv.$ac_objext"
+
+    fi
   fi
 
 
 
+  GNULIB_UNSETENV=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_UNSETENV 1
+_ACEOF
+
+
+
+
+
 
 
 
@@ -36270,6 +44375,88 @@ _ACEOF
 
 
 
+  if test $ac_cv_func_futimens = no && test $ac_cv_func_futimesat = yes; then
+                { $as_echo "$as_me:$LINENO: checking whether futimesat handles NULL file" >&5
+$as_echo_n "checking whether futimesat handles NULL file... " >&6; }
+if test "${gl_cv_func_futimesat_works+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  touch conftest.file
+       if test "$cross_compiling" = yes; then
+  gl_cv_func_futimesat_works="guessing no"
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <stddef.h>
+#include <sys/times.h>
+
+int
+main ()
+{
+    int fd = open ("conftest.file", O_RDWR);
+          if (fd < 0) return 1;
+          if (futimesat (fd, NULL, NULL)) return 2;
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_futimesat_works=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gl_cv_func_futimesat_works=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+      rm -f conftest.file
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_futimesat_works" >&5
+$as_echo "$gl_cv_func_futimesat_works" >&6; }
+    if test "$gl_cv_func_futimesat_works" != yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define FUTIMESAT_NULL_BUG 1
+_ACEOF
+
+    fi
+  fi
+
+
+
 
 
 
@@ -36340,26 +44527,58 @@ _ACEOF
 
 
 
-  { echo "$as_me:$LINENO: checking for ptrdiff_t" >&5
-echo $ECHO_N "checking for ptrdiff_t... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for ptrdiff_t" >&5
+$as_echo_n "checking for ptrdiff_t... " >&6; }
 if test "${ac_cv_type_ptrdiff_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
+  ac_cv_type_ptrdiff_t=no
+cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 $ac_includes_default
-typedef ptrdiff_t ac__type_new_;
 int
 main ()
 {
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
+if (sizeof (ptrdiff_t))
+       return 0;
+  ;
   return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if (sizeof ((ptrdiff_t)))
+         return 0;
   ;
   return 0;
 }
@@ -36370,30 +44589,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  ac_cv_type_ptrdiff_t=yes
+  :
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_type_ptrdiff_t=no
+       ac_cv_type_ptrdiff_t=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_ptrdiff_t" >&5
-echo "${ECHO_T}$ac_cv_type_ptrdiff_t" >&6; }
-if test $ac_cv_type_ptrdiff_t = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_ptrdiff_t" >&5
+$as_echo "$ac_cv_type_ptrdiff_t" >&6; }
+if test "x$ac_cv_type_ptrdiff_t" = x""yes; then
   :
 else
 
 
 
 
+  fi
 
 
 
-for ac_func in snprintf wcslen
+for ac_func in vasprintf
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -36472,113 +44701,155 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 done
 
-      { echo "$as_me:$LINENO: checking whether _snprintf is declared" >&5
-echo $ECHO_N "checking whether _snprintf is declared... $ECHO_C" >&6; }
-if test "${ac_cv_have_decl__snprintf+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdio.h>
+  if test $ac_cv_func_vasprintf = no; then
 
-int
-main ()
-{
-#ifndef _snprintf
-  (void) _snprintf;
-#endif
 
-  ;
-  return 0;
-}
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS vasprintf.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS asprintf.$ac_objext"
+
+
+  if test $ac_cv_func_vasprintf = yes; then
+    REPLACE_VASPRINTF=1
+  else
+    HAVE_VASPRINTF=0
+  fi
+
+
+
+
+
+
+
+
+  fi
+
+
+
+  GNULIB_VASPRINTF=1
+
+
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_VASPRINTF 1
 _ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_have_decl__snprintf=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_have_decl__snprintf=no
-fi
 
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl__snprintf" >&5
-echo "${ECHO_T}$ac_cv_have_decl__snprintf" >&6; }
-if test $ac_cv_have_decl__snprintf = yes; then
 
+
+
+  XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=asprintf:2:c-format"
+
+
+
+  XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=vasprintf:2:c-format"
+
+
+# Check whether --with-packager was given.
+if test "${with_packager+set}" = set; then
+  withval=$with_packager;       case $withval in
+        yes|no) ;;
+        *)
 cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL__SNPRINTF 1
+#define PACKAGE_PACKAGER "$withval"
 _ACEOF
+ ;;
+      esac
+
+fi
 
 
-else
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL__SNPRINTF 0
-_ACEOF
 
+# Check whether --with-packager-version was given.
+if test "${with_packager_version+set}" = set; then
+  withval=$with_packager_version;       case $withval in
+        yes|no) ;;
+        *)
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_PACKAGER_VERSION "$withval"
+_ACEOF
+ ;;
+      esac
 
 fi
 
 
 
+# Check whether --with-packager-bug-reports was given.
+if test "${with_packager_bug_reports+set}" = set; then
+  withval=$with_packager_bug_reports;       case $withval in
+        yes|no) ;;
+        *)
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_PACKAGER_BUG_REPORTS "$withval"
+_ACEOF
+ ;;
+      esac
 
+fi
 
 
+  if test "X$with_packager" = "X" && \
+     test "X$with_packager_version$with_packager_bug_reports" != "X"
+  then
+    { { $as_echo "$as_me:$LINENO: error: The --with-packager-{bug-reports,version} options require --with-packager" >&5
+$as_echo "$as_me: error: The --with-packager-{bug-reports,version} options require --with-packager" >&2;}
+   { (exit 1); exit 1; }; }
   fi
 
 
 
 for ac_func in vsnprintf
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -36644,35 +44915,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -36681,10 +44959,10 @@ done
   if test $ac_cv_func_vsnprintf = yes; then
 
 
-  { echo "$as_me:$LINENO: checking whether snprintf respects a size of 1" >&5
-echo $ECHO_N "checking whether snprintf respects a size of 1... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether snprintf respects a size of 1" >&5
+$as_echo_n "checking whether snprintf respects a size of 1... " >&6; }
 if test "${gl_cv_func_snprintf_size1+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
       if test "$cross_compiling" = yes; then
@@ -36711,37 +44989,40 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_func_snprintf_size1=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 gl_cv_func_snprintf_size1=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_snprintf_size1" >&5
-echo "${ECHO_T}$gl_cv_func_snprintf_size1" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_snprintf_size1" >&5
+$as_echo "$gl_cv_func_snprintf_size1" >&6; }
 
     case "$gl_cv_func_snprintf_size1" in
       *yes)
@@ -36781,15 +45062,140 @@ echo "${ECHO_T}$gl_cv_func_snprintf_size1" >&6; }
   GNULIB_VSNPRINTF=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_VSNPRINTF 1
+_ACEOF
+
+
+
+
+
+
 
-  { echo "$as_me:$LINENO: checking whether <wchar.h> is standalone" >&5
-echo $ECHO_N "checking whether <wchar.h> is standalone... $ECHO_C" >&6; }
-if test "${gl_cv_header_wchar_h_standalone+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_wchar_h='<'wchar.h'>'
+     else
+       { $as_echo "$as_me:$LINENO: checking absolute name of <wchar.h>" >&5
+$as_echo_n "checking absolute name of <wchar.h>... " >&6; }
+if test "${gl_cv_next_wchar_h+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+
+          if test $ac_cv_header_wchar_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <wchar.h>
+
+_ACEOF
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_wchar_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/wchar.h#{
+                 s#.*"\(.*/wchar.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_wchar_h='<'wchar.h'>'
+          fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_wchar_h" >&5
+$as_echo "$gl_cv_next_wchar_h" >&6; }
+     fi
+     NEXT_WCHAR_H=$gl_cv_next_wchar_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'wchar.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_wchar_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive
+
+
+
+  if test $ac_cv_header_wchar_h = yes; then
+    HAVE_WCHAR_H=1
+  else
+    HAVE_WCHAR_H=0
+  fi
+
+
+
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  for gl_func in btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb     wcsrtombs wcsnrtombs wcwidth; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:$LINENO: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Some systems require additional headers.  */
+#ifndef __GLIBC__
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+#endif
 #include <wchar.h>
-wchar_t w;
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
 _ACEOF
 rm -f conftest.$ac_objext
 if { (ac_try="$ac_compile"
@@ -36797,41 +45203,45 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  gl_cv_header_wchar_h_standalone=yes
+  eval "$as_gl_Symbol=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       gl_cv_header_wchar_h_standalone=no
+       eval "$as_gl_Symbol=no"
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_header_wchar_h_standalone" >&5
-echo "${ECHO_T}$gl_cv_header_wchar_h_standalone" >&6; }
+ac_res=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+     as_val=`eval 'as_val=${'$as_gl_Symbol'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
 
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
 
-  if test $gt_cv_c_wint_t = yes; then
-    HAVE_WINT_T=1
-  else
-    HAVE_WINT_T=0
-  fi
+      done
 
 
-  if test $gl_cv_header_wchar_h_standalone != yes || test $gt_cv_c_wint_t != yes; then
-    WCHAR_H=wchar.h
-  fi
 
 
 
@@ -36839,11 +45249,6 @@ echo "${ECHO_T}$gl_cv_header_wchar_h_standalone" >&6; }
 
 
 
-  if test $ac_cv_header_wchar_h = yes; then
-    HAVE_WCHAR_H=1
-  else
-    HAVE_WCHAR_H=0
-  fi
 
 
 
@@ -36856,53 +45261,207 @@ echo "${ECHO_T}$gl_cv_header_wchar_h_standalone" >&6; }
 
 
 
-     if test $gl_cv_have_include_next = yes; then
-       gl_cv_next_wchar_h='<'wchar.h'>'
-     else
-       { echo "$as_me:$LINENO: checking absolute name of <wchar.h>" >&5
-echo $ECHO_N "checking absolute name of <wchar.h>... $ECHO_C" >&6; }
-if test "${gl_cv_next_wchar_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+
+  if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then
+
+
+
+     { $as_echo "$as_me:$LINENO: checking whether mbrtowc handles incomplete characters" >&5
+$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; }
+if test "${gl_cv_func_mbrtowc_incomplete_state+set}" = set; then
+  $as_echo_n "(cached) " >&6
 else
 
-         if test $ac_cv_header_wchar_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
+                  case "$host_os" in
+              # Guess no on AIX and OSF/1.
+        osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;;
+              # Guess yes otherwise.
+        *)    gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;;
+      esac
+      if test $LOCALE_JA != none; then
+        if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
+
+#include <locale.h>
+#include <string.h>
 #include <wchar.h>
+int main ()
+{
+  if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+    {
+      const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
 
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+        if (mbsinit (&state))
+          return 1;
+    }
+  return 0;
+}
 _ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_wchar_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/wchar.h#{
-                s#.*"\(.*/wchar.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_wchar_h='<'wchar.h'>'
-         fi
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_mbrtowc_incomplete_state=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+( exit $ac_status )
+gl_cv_func_mbrtowc_incomplete_state=no
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_wchar_h" >&5
-echo "${ECHO_T}$gl_cv_next_wchar_h" >&6; }
-     fi
-     NEXT_WCHAR_H=$gl_cv_next_wchar_h
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+      fi
+
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_incomplete_state" >&5
+$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; }
+
+
+
+
+     { $as_echo "$as_me:$LINENO: checking whether mbrtowc works as well as mbtowc" >&5
+$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; }
+if test "${gl_cv_func_mbrtowc_sanitycheck+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
 
+                  case "$host_os" in
+                    # Guess no on Solaris 8.
+        solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;;
+                    # Guess yes otherwise.
+        *)          gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;;
+      esac
+      if test $LOCALE_ZH_CN != none; then
+        if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
 
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+  /* This fails on Solaris 8:
+     mbrtowc returns 2, and sets wc to 0x00F0.
+     mbtowc returns 4 (correct) and sets wc to 0x5EDC.  */
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
 
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 6, &state) != 4
+          && mbtowc (&wc, input + 3, 6) == 4)
+        return 1;
+    }
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gl_cv_func_mbrtowc_sanitycheck=yes
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+( exit $ac_status )
+gl_cv_func_mbrtowc_sanitycheck=no
+fi
+rm -rf conftest.dSYM
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
 
 
+      fi
 
+fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_sanitycheck" >&5
+$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; }
 
+    REPLACE_MBSTATE_T=0
+    case "$gl_cv_func_mbrtowc_incomplete_state" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+    case "$gl_cv_func_mbrtowc_sanitycheck" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+  else
+    REPLACE_MBSTATE_T=1
+  fi
+  if test $REPLACE_MBSTATE_T = 1; then
+
+    :
+
+  fi
+
+  if test $REPLACE_MBSTATE_T = 1; then
+    REPLACE_WCRTOMB=1
+  fi
 
 
 
@@ -36911,32 +45470,28 @@ echo "${ECHO_T}$gl_cv_next_wchar_h" >&6; }
 
   if test $ac_cv_func_wcrtomb = no; then
     HAVE_WCRTOMB=0
-  else
-
+  fi
+  if test $HAVE_WCRTOMB != 0 && test $REPLACE_WCRTOMB != 1; then
 
 
 
 
 
-         { echo "$as_me:$LINENO: checking whether wcrtomb return value is correct" >&5
-echo $ECHO_N "checking whether wcrtomb return value is correct... $ECHO_C" >&6; }
+         { $as_echo "$as_me:$LINENO: checking whether wcrtomb return value is correct" >&5
+$as_echo_n "checking whether wcrtomb return value is correct... " >&6; }
 if test "${gl_cv_func_wcrtomb_retval+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
                         case "$host_os" in
-                           # Guess no on OSF/1 and Solaris.
-          osf* | solaris*) gl_cv_func_wcrtomb_retval="guessing no" ;;
-                           # Guess yes otherwise.
-          *)               gl_cv_func_wcrtomb_retval="guessing yes" ;;
+                                   # Guess no on AIX 4, OSF/1 and Solaris.
+          aix4* | osf* | solaris*) gl_cv_func_wcrtomb_retval="guessing no" ;;
+                                   # Guess yes otherwise.
+          *)                       gl_cv_func_wcrtomb_retval="guessing yes" ;;
         esac
         if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then
           if test "$cross_compiling" = yes; then
-  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
+  :
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -36980,29 +45535,32 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_func_wcrtomb_retval=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 gl_cv_func_wcrtomb_retval=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
@@ -37010,8 +45568,8 @@ fi
         fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_wcrtomb_retval" >&5
-echo "${ECHO_T}$gl_cv_func_wcrtomb_retval" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_wcrtomb_retval" >&5
+$as_echo "$gl_cv_func_wcrtomb_retval" >&6; }
     case "$gl_cv_func_wcrtomb_retval" in
       *yes) ;;
       *) REPLACE_WCRTOMB=1 ;;
@@ -37019,8 +45577,7 @@ echo "${ECHO_T}$gl_cv_func_wcrtomb_retval" >&6; }
   fi
   if test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1; then
 
-
-  WCHAR_H=wchar.h
+    :
 
 
 
@@ -37042,6 +45599,14 @@ echo "${ECHO_T}$gl_cv_func_wcrtomb_retval" >&6; }
   GNULIB_WCRTOMB=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_WCRTOMB 1
+_ACEOF
+
+
+
+
+
 
 
 
@@ -37071,13 +45636,12 @@ echo "${ECHO_T}$gl_cv_func_wcrtomb_retval" >&6; }
   fi
 
 
-  WCTYPE_H=wctype.h
   if test $ac_cv_header_wctype_h = yes; then
     if test $ac_cv_func_iswcntrl = yes; then
-                  { echo "$as_me:$LINENO: checking whether iswcntrl works" >&5
-echo $ECHO_N "checking whether iswcntrl works... $ECHO_C" >&6; }
+                  { $as_echo "$as_me:$LINENO: checking whether iswcntrl works" >&5
+$as_echo_n "checking whether iswcntrl works... " >&6; }
 if test "${gl_cv_func_iswcntrl_works+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
           if test "$cross_compiling" = yes; then
@@ -37105,20 +45669,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   gl_cv_func_iswcntrl_works=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gl_cv_func_iswcntrl_works=no
@@ -37133,12 +45698,13 @@ _ACEOF
 cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
-#include <stddef.h>
-                      #include <stdio.h>
-                      #include <time.h>
-                      #include <wchar.h>
-                      #include <wctype.h>
-                      int main () { return iswprint ('x') == 0; }
+
+                            #include <stddef.h>
+                            #include <stdio.h>
+                            #include <time.h>
+                            #include <wchar.h>
+                            #include <wctype.h>
+                            int main () { return iswprint ('x') == 0; }
 _ACEOF
 rm -f conftest$ac_exeext
 if { (ac_try="$ac_link"
@@ -37146,40 +45712,40 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_func_iswcntrl_works=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 gl_cv_func_iswcntrl_works=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_iswcntrl_works" >&5
-echo "${ECHO_T}$gl_cv_func_iswcntrl_works" >&6; }
-      if test $gl_cv_func_iswcntrl_works = yes; then
-        WCTYPE_H=
-      fi
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_iswcntrl_works" >&5
+$as_echo "$gl_cv_func_iswcntrl_works" >&6; }
     fi
 
 
@@ -37195,14 +45761,14 @@ echo "${ECHO_T}$gl_cv_func_iswcntrl_works" >&6; }
      if test $gl_cv_have_include_next = yes; then
        gl_cv_next_wctype_h='<'wctype.h'>'
      else
-       { echo "$as_me:$LINENO: checking absolute name of <wctype.h>" >&5
-echo $ECHO_N "checking absolute name of <wctype.h>... $ECHO_C" >&6; }
+       { $as_echo "$as_me:$LINENO: checking absolute name of <wctype.h>" >&5
+$as_echo_n "checking absolute name of <wctype.h>... " >&6; }
 if test "${gl_cv_next_wctype_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
-         if test $ac_cv_header_wctype_h = yes; then
-           cat >conftest.$ac_ext <<_ACEOF
+          if test $ac_cv_header_wctype_h = yes; then
+            cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -37211,27 +45777,36 @@ cat >>conftest.$ac_ext <<_ACEOF
 #include <wctype.h>
 
 _ACEOF
-                                                                   case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-                                   gl_cv_next_wctype_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-              sed -n '\#/wctype.h#{
-                s#.*"\(.*/wctype.h\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'
-         else
-           gl_cv_next_wctype_h='<'wctype.h'>'
-         fi
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_wctype_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/wctype.h#{
+                 s#.*"\(.*/wctype.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_wctype_h='<'wctype.h'>'
+          fi
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_next_wctype_h" >&5
-echo "${ECHO_T}$gl_cv_next_wctype_h" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_wctype_h" >&5
+$as_echo "$gl_cv_next_wctype_h" >&6; }
      fi
      NEXT_WCTYPE_H=$gl_cv_next_wctype_h
 
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'wctype.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_wctype_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H=$gl_next_as_first_directive
+
 
 
     HAVE_WCTYPE_H=1
@@ -37240,7 +45815,6 @@ echo "${ECHO_T}$gl_cv_next_wctype_h" >&6; }
   fi
 
 
-
   if test "$gl_cv_func_iswcntrl_works" = no; then
     REPLACE_ISWCNTRL=1
   else
@@ -37269,10 +45843,10 @@ echo "${ECHO_T}$gl_cv_next_wctype_h" >&6; }
 
 
 
-  { echo "$as_me:$LINENO: checking whether wcwidth is declared" >&5
-echo $ECHO_N "checking whether wcwidth is declared... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether wcwidth is declared" >&5
+$as_echo_n "checking whether wcwidth is declared... " >&6; }
 if test "${ac_cv_have_decl_wcwidth+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -37310,20 +45884,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_wcwidth=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_wcwidth=no
@@ -37331,9 +45906,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_wcwidth" >&5
-echo "${ECHO_T}$ac_cv_have_decl_wcwidth" >&6; }
-if test $ac_cv_have_decl_wcwidth = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_wcwidth" >&5
+$as_echo "$ac_cv_have_decl_wcwidth" >&6; }
+if test "x$ac_cv_have_decl_wcwidth" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_WCWIDTH 1
   if test $ac_cv_func_wcwidth = no; then
     REPLACE_WCWIDTH=1
   else
-                { echo "$as_me:$LINENO: checking whether wcwidth works reasonably in UTF-8 locales" >&5
-echo $ECHO_N "checking whether wcwidth works reasonably in UTF-8 locales... $ECHO_C" >&6; }
+                { $as_echo "$as_me:$LINENO: checking whether wcwidth works reasonably in UTF-8 locales" >&5
+$as_echo_n "checking whether wcwidth works reasonably in UTF-8 locales... " >&6; }
 if test "${gl_cv_func_wcwidth_works+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
         if test "$cross_compiling" = yes; then
-  gl_cv_func_wcwidth_works="guessing no"
+
+           case "$host_os" in
+                     # Guess yes on glibc systems.
+             *-gnu*) gl_cv_func_wcwidth_works="guessing yes";;
+             *)      gl_cv_func_wcwidth_works="guessing no";;
+           esac
+
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -37404,37 +45985,40 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   gl_cv_func_wcwidth_works=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 gl_cv_func_wcwidth_works=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_func_wcwidth_works" >&5
-echo "${ECHO_T}$gl_cv_func_wcwidth_works" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_wcwidth_works" >&5
+$as_echo "$gl_cv_func_wcwidth_works" >&6; }
     case "$gl_cv_func_wcwidth_works" in
       *yes) ;;
       *no) REPLACE_WCWIDTH=1 ;;
@@ -37455,8 +46039,7 @@ echo "${ECHO_T}$gl_cv_func_wcwidth_works" >&6; }
 
   if test $REPLACE_WCWIDTH = 1 || test $HAVE_DECL_WCWIDTH = 0; then
 
-
-  WCHAR_H=wchar.h
+    :
 
   fi
 
@@ -37465,6 +46048,13 @@ echo "${ECHO_T}$gl_cv_func_wcwidth_works" >&6; }
   GNULIB_WCWIDTH=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_WCWIDTH 1
+_ACEOF
+
+
+
+
 
 
 
@@ -37473,6 +46063,13 @@ echo "${ECHO_T}$gl_cv_func_wcwidth_works" >&6; }
   GNULIB_WRITE=1
 
 
+cat >>confdefs.h <<\_ACEOF
+#define GNULIB_WRITE 1
+_ACEOF
+
+
+
+
 
 
 
@@ -37512,20 +46109,21 @@ echo "${ECHO_T}$gl_cv_func_wcwidth_works" >&6; }
 
 for ac_header in stdint.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -37541,32 +46139,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -37580,51 +46179,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -37633,21 +46233,24 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -37697,6 +46300,13 @@ done
 
 
 
+  XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=xasprintf:1:c-format"
+
+
+
+
+
+
 
 
 
@@ -37712,7 +46322,7 @@ done
 
 
 
-  gl_source_base='.#bootmp/tests'
+  gl_source_base='tests'
 
 
 
@@ -37720,9 +46330,9 @@ done
 
 
 
-  LIBTAR_LIBDEPS="$gl_libdeps"
+  LIBGNU_LIBDEPS="$gl_libdeps"
 
-  LIBTAR_LTLIBDEPS="$gl_ltlibdeps"
+  LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
 
 
 # paxutils modules
@@ -37734,10 +46344,10 @@ done
 
 
 
-{ echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
-echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
+$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
 if test "${ac_cv_header_time+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -37764,20 +46374,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_header_time=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_header_time=no
@@ -37785,8 +46396,8 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
-echo "${ECHO_T}$ac_cv_header_time" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
+$as_echo "$ac_cv_header_time" >&6; }
 if test $ac_cv_header_time = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -37795,10 +46406,10 @@ _ACEOF
 
 fi
 
-{ echo "$as_me:$LINENO: checking for struct stat.st_blksize" >&5
-echo $ECHO_N "checking for struct stat.st_blksize... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for struct stat.st_blksize" >&5
+$as_echo_n "checking for struct stat.st_blksize... " >&6; }
 if test "${ac_cv_member_struct_stat_st_blksize+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -37823,20 +46434,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_blksize=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -37862,20 +46474,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_blksize=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_member_struct_stat_st_blksize=no
@@ -37886,9 +46499,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_blksize" >&5
-echo "${ECHO_T}$ac_cv_member_struct_stat_st_blksize" >&6; }
-if test $ac_cv_member_struct_stat_st_blksize = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_blksize" >&5
+$as_echo "$ac_cv_member_struct_stat_st_blksize" >&6; }
+if test "x$ac_cv_member_struct_stat_st_blksize" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_STAT_ST_BLKSIZE 1
   # Set LIB_SETSOCKOPT to -lnsl -lsocket if necessary.
   pu_save_LIBS=$LIBS
   LIB_SETSOCKOPT=
-  { echo "$as_me:$LINENO: checking for library containing setsockopt" >&5
-echo $ECHO_N "checking for library containing setsockopt... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for library containing setsockopt" >&5
+$as_echo_n "checking for library containing setsockopt... " >&6; }
 if test "${ac_cv_search_setsockopt+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
 cat >conftest.$ac_ext <<_ACEOF
@@ -37952,26 +46565,30 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   ac_cv_search_setsockopt=$ac_res
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext
   if test "${ac_cv_search_setsockopt+set}" = set; then
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_search_setsockopt" >&5
-echo "${ECHO_T}$ac_cv_search_setsockopt" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_setsockopt" >&5
+$as_echo "$ac_cv_search_setsockopt" >&6; }
 ac_res=$ac_cv_search_setsockopt
 if test "$ac_res" != no; then
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 else
-  { echo "$as_me:$LINENO: checking for library containing setsockopt" >&5
-echo $ECHO_N "checking for library containing setsockopt... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for library containing setsockopt" >&5
+$as_echo_n "checking for library containing setsockopt... " >&6; }
 if test "${ac_cv_search_setsockopt+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
 cat >conftest.$ac_ext <<_ACEOF
@@ -38034,26 +46651,30 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   ac_cv_search_setsockopt=$ac_res
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext
   if test "${ac_cv_search_setsockopt+set}" = set; then
@@ -38068,8 +46689,8 @@ fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_search_setsockopt" >&5
-echo "${ECHO_T}$ac_cv_search_setsockopt" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_setsockopt" >&5
+$as_echo "$ac_cv_search_setsockopt" >&6; }
 ac_res=$ac_cv_search_setsockopt
 if test "$ac_res" != no; then
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
-  { echo "$as_me:$LINENO: checking for library containing setsockopt" >&5
-echo $ECHO_N "checking for library containing setsockopt... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for library containing setsockopt" >&5
+$as_echo_n "checking for library containing setsockopt... " >&6; }
 if test "${ac_cv_search_setsockopt+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
 cat >conftest.$ac_ext <<_ACEOF
@@ -38119,26 +46740,30 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   ac_cv_search_setsockopt=$ac_res
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext
   if test "${ac_cv_search_setsockopt+set}" = set; then
@@ -38153,8 +46778,8 @@ fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_search_setsockopt" >&5
-echo "${ECHO_T}$ac_cv_search_setsockopt" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_setsockopt" >&5
+$as_echo "$ac_cv_search_setsockopt" >&6; }
 ac_res=$ac_cv_search_setsockopt
 if test "$ac_res" != no; then
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
   enable_rmt() {
     if test $ac_cv_header_sys_mtio_h = yes; then
-      { echo "$as_me:$LINENO: checking for remote tape header files" >&5
-echo $ECHO_N "checking for remote tape header files... $ECHO_C" >&6; }
+      { $as_echo "$as_me:$LINENO: checking for remote tape header files" >&5
+$as_echo_n "checking for remote tape header files... " >&6; }
 if test "${pu_cv_header_rmt+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -38192,20 +46817,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   pu_cv_header_rmt=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   pu_cv_header_rmt=no
@@ -38213,8 +46839,8 @@ fi
 
 rm -f conftest.err conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $pu_cv_header_rmt" >&5
-echo "${ECHO_T}$pu_cv_header_rmt" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $pu_cv_header_rmt" >&5
+$as_echo "$pu_cv_header_rmt" >&6; }
       test $pu_cv_header_rmt = yes && PU_RMT_PROG='rmt$(EXEEXT)'
 
     fi
@@ -38223,20 +46849,21 @@ echo "${ECHO_T}$pu_cv_header_rmt" >&6; }
 
 for ac_header in sys/mtio.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -38252,32 +46879,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -38291,51 +46919,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -38344,31 +46973,34 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 
 done
 
-  { echo "$as_me:$LINENO: checking which ioctl field to test for reversed bytes" >&5
-echo $ECHO_N "checking which ioctl field to test for reversed bytes... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking which ioctl field to test for reversed bytes" >&5
+$as_echo_n "checking which ioctl field to test for reversed bytes... " >&6; }
 if test "${pu_cv_header_mtio_check_field+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -38388,8 +47020,8 @@ fi
 rm -f conftest*
 
 fi
-{ echo "$as_me:$LINENO: result: $pu_cv_header_mtio_check_field" >&5
-echo "${ECHO_T}$pu_cv_header_mtio_check_field" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $pu_cv_header_mtio_check_field" >&5
+$as_echo "$pu_cv_header_mtio_check_field" >&6; }
 
 cat >>confdefs.h <<_ACEOF
 #define MTIO_CHECK_FIELD $pu_cv_header_mtio_check_field
@@ -38404,29 +47036,29 @@ _ACEOF
        DEFAULT_RMT_DIR='$(libexecdir)'
   fi
 
-  { echo "$as_me:$LINENO: checking whether to build rmt" >&5
-echo $ECHO_N "checking whether to build rmt... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether to build rmt" >&5
+$as_echo_n "checking whether to build rmt... " >&6; }
 
 # Check whether --with-rmt was given.
 if test "${with_rmt+set}" = set; then
   withval=$with_rmt; case $withval in
-              yes|no) { { echo "$as_me:$LINENO: error: Invalid argument to --with-rmt" >&5
-echo "$as_me: error: Invalid argument to --with-rmt" >&2;}
+              yes|no) { { $as_echo "$as_me:$LINENO: error: Invalid argument to --with-rmt" >&5
+$as_echo "$as_me: error: Invalid argument to --with-rmt" >&2;}
    { (exit 1); exit 1; }; };;
               /*)     DEFAULT_RMT_COMMAND=$withval
-                      { echo "$as_me:$LINENO: result: no, use $withval instead" >&5
-echo "${ECHO_T}no, use $withval instead" >&6; };;
-              *)      { { echo "$as_me:$LINENO: error: Argument to --with-rmt must be an absolute file name" >&5
-echo "$as_me: error: Argument to --with-rmt must be an absolute file name" >&2;}
+                      { $as_echo "$as_me:$LINENO: result: no, use $withval instead" >&5
+$as_echo "no, use $withval instead" >&6; };;
+              *)      { { $as_echo "$as_me:$LINENO: error: Argument to --with-rmt must be an absolute file name" >&5
+$as_echo "$as_me: error: Argument to --with-rmt must be an absolute file name" >&2;}
    { (exit 1); exit 1; }; };;
                esac
 else
-  { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
+  { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
                 enable_rmt
                 if test "$PU_RMT_PROG" = ""; then
-                  { echo "$as_me:$LINENO: WARNING: not building rmt, required header files are missing" >&5
-echo "$as_me: WARNING: not building rmt, required header files are missing" >&2;}
+                  { $as_echo "$as_me:$LINENO: WARNING: not building rmt, required header files are missing" >&5
+$as_echo "$as_me: WARNING: not building rmt, required header files are missing" >&2;}
                 fi
 fi
 
@@ -38493,11 +47125,11 @@ _ACEOF
 
 for ac_header in sys/buf.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -38517,20 +47149,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   eval "$as_ac_Header=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_Header=no"
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -38553,10 +47189,10 @@ done
 
 
 
-  { echo "$as_me:$LINENO: checking for struct stat.st_blksize" >&5
-echo $ECHO_N "checking for struct stat.st_blksize... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for struct stat.st_blksize" >&5
+$as_echo_n "checking for struct stat.st_blksize... " >&6; }
 if test "${ac_cv_member_struct_stat_st_blksize+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -38581,20 +47217,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_blksize=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        cat >conftest.$ac_ext <<_ACEOF
@@ -38620,20 +47257,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_member_struct_stat_st_blksize=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_member_struct_stat_st_blksize=no
@@ -38644,9 +47282,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_blksize" >&5
-echo "${ECHO_T}$ac_cv_member_struct_stat_st_blksize" >&6; }
-if test $ac_cv_member_struct_stat_st_blksize = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_blksize" >&5
+$as_echo "$ac_cv_member_struct_stat_st_blksize" >&6; }
+if test "x$ac_cv_member_struct_stat_st_blksize" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_STAT_ST_BLKSIZE 1
 
 
 
+  { $as_echo "$as_me:$LINENO: checking for library containing gethostbyname" >&5
+$as_echo_n "checking for library containing gethostbyname... " >&6; }
+if test "${ac_cv_search_gethostbyname+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' nsl; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
+  ac_cv_search_gethostbyname=$ac_res
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_gethostbyname+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_gethostbyname+set}" = set; then
+  :
+else
+  ac_cv_search_gethostbyname=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_search_gethostbyname" >&5
+$as_echo "$ac_cv_search_gethostbyname" >&6; }
+ac_res=$ac_cv_search_gethostbyname
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+
 
 
 
 
 for ac_func in fsync getdtablesize lstat mkfifo readlink symlink setlocale utimes
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -38739,44 +47465,51 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 done
 
-{ echo "$as_me:$LINENO: checking whether getgrgid is declared" >&5
-echo $ECHO_N "checking whether getgrgid is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether getgrgid is declared" >&5
+$as_echo_n "checking whether getgrgid is declared... " >&6; }
 if test "${ac_cv_have_decl_getgrgid+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -38803,20 +47536,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_getgrgid=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_getgrgid=no
@@ -38824,9 +47558,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getgrgid" >&5
-echo "${ECHO_T}$ac_cv_have_decl_getgrgid" >&6; }
-if test $ac_cv_have_decl_getgrgid = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_getgrgid" >&5
+$as_echo "$ac_cv_have_decl_getgrgid" >&6; }
+if test "x$ac_cv_have_decl_getgrgid" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_GETGRGID 1
@@ -38842,10 +47576,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether getpwuid is declared" >&5
-echo $ECHO_N "checking whether getpwuid is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether getpwuid is declared" >&5
+$as_echo_n "checking whether getpwuid is declared... " >&6; }
 if test "${ac_cv_have_decl_getpwuid+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -38872,20 +47606,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_getpwuid=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_getpwuid=no
@@ -38893,9 +47628,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getpwuid" >&5
-echo "${ECHO_T}$ac_cv_have_decl_getpwuid" >&6; }
-if test $ac_cv_have_decl_getpwuid = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_getpwuid" >&5
+$as_echo "$ac_cv_have_decl_getpwuid" >&6; }
+if test "x$ac_cv_have_decl_getpwuid" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_GETPWUID 1
@@ -38911,10 +47646,10 @@ _ACEOF
 fi
 
 
-{ echo "$as_me:$LINENO: checking whether time is declared" >&5
-echo $ECHO_N "checking whether time is declared... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking whether time is declared" >&5
+$as_echo_n "checking whether time is declared... " >&6; }
 if test "${ac_cv_have_decl_time+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -38941,20 +47676,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_cv_have_decl_time=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_cv_have_decl_time=no
@@ -38962,9 +47698,9 @@ fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_time" >&5
-echo "${ECHO_T}$ac_cv_have_decl_time" >&6; }
-if test $ac_cv_have_decl_time = yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_time" >&5
+$as_echo "$ac_cv_have_decl_time" >&6; }
+if test "x$ac_cv_have_decl_time" = x""yes; then
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_TIME 1
 
 for ac_func in waitpid
 do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
+$as_echo_n "checking for $ac_func... " >&6; }
 if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -39041,35 +47777,42 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$as_ac_var=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$as_ac_var=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$as_ac_var'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+ac_res=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+as_val=`eval 'as_val=${'$as_ac_var'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
 
 else
@@ -39084,10 +47827,10 @@ done
 
 
 
-{ echo "$as_me:$LINENO: checking for remote shell" >&5
-echo $ECHO_N "checking for remote shell... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for remote shell" >&5
+$as_echo_n "checking for remote shell... " >&6; }
 if test "${tar_cv_path_RSH+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -n "$RSH"; then
     tar_cv_path_RSH=$RSH
@@ -39110,26 +47853,27 @@ else
     done
   fi
 fi
-{ echo "$as_me:$LINENO: result: $tar_cv_path_RSH" >&5
-echo "${ECHO_T}$tar_cv_path_RSH" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $tar_cv_path_RSH" >&5
+$as_echo "$tar_cv_path_RSH" >&6; }
 if test $tar_cv_path_RSH = no; then
 
 for ac_header in netdb.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -39145,32 +47889,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -39184,51 +47929,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -39237,21 +47983,24 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
@@ -39266,8 +48015,121 @@ _ACEOF
 
 fi
 
-{ echo "$as_me:$LINENO: checking for default archive format" >&5
-echo $ECHO_N "checking for default archive format... $ECHO_C" >&6; }
+
+
+
+
+# Check whether --with-compress was given.
+if test "${with_compress+set}" = set; then
+  withval=$with_compress; tar_cv_compressor_compress=${withval}
+else
+  tar_cv_compressor_compress=compress
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define COMPRESS_PROGRAM "$tar_cv_compressor_compress"
+_ACEOF
+
+
+
+
+
+# Check whether --with-gzip was given.
+if test "${with_gzip+set}" = set; then
+  withval=$with_gzip; tar_cv_compressor_gzip=${withval}
+else
+  tar_cv_compressor_gzip=gzip
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define GZIP_PROGRAM "$tar_cv_compressor_gzip"
+_ACEOF
+
+
+
+
+
+# Check whether --with-bzip2 was given.
+if test "${with_bzip2+set}" = set; then
+  withval=$with_bzip2; tar_cv_compressor_bzip2=${withval}
+else
+  tar_cv_compressor_bzip2=bzip2
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define BZIP2_PROGRAM "$tar_cv_compressor_bzip2"
+_ACEOF
+
+
+
+
+
+# Check whether --with-lzip was given.
+if test "${with_lzip+set}" = set; then
+  withval=$with_lzip; tar_cv_compressor_lzip=${withval}
+else
+  tar_cv_compressor_lzip=lzip
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define LZIP_PROGRAM "$tar_cv_compressor_lzip"
+_ACEOF
+
+
+
+
+
+# Check whether --with-lzma was given.
+if test "${with_lzma+set}" = set; then
+  withval=$with_lzma; tar_cv_compressor_lzma=${withval}
+else
+  tar_cv_compressor_lzma=lzma
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define LZMA_PROGRAM "$tar_cv_compressor_lzma"
+_ACEOF
+
+
+
+
+
+# Check whether --with-lzop was given.
+if test "${with_lzop+set}" = set; then
+  withval=$with_lzop; tar_cv_compressor_lzop=${withval}
+else
+  tar_cv_compressor_lzop=lzop
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define LZOP_PROGRAM "$tar_cv_compressor_lzop"
+_ACEOF
+
+
+
+
+
+# Check whether --with-xz was given.
+if test "${with_xz+set}" = set; then
+  withval=$with_xz; tar_cv_compressor_xz=${withval}
+else
+  tar_cv_compressor_xz=xz
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define XZ_PROGRAM "$tar_cv_compressor_xz"
+_ACEOF
+
+
+{ $as_echo "$as_me:$LINENO: checking for default archive format" >&5
+$as_echo_n "checking for default archive format... " >&6; }
 
 
 
@@ -39276,8 +48138,8 @@ if test -z "$DEFAULT_ARCHIVE_FORMAT"; then
 fi
 case $DEFAULT_ARCHIVE_FORMAT in
   V7|OLDGNU|USTAR|POSIX|GNU) ;;
-  *) { { echo "$as_me:$LINENO: error: Invalid format name" >&5
-echo "$as_me: error: Invalid format name" >&2;}
+  *) { { $as_echo "$as_me:$LINENO: error: Invalid format name" >&5
+$as_echo "$as_me: error: Invalid format name" >&2;}
    { (exit 1); exit 1; }; };;
 esac
 
@@ -39285,19 +48147,19 @@ cat >>confdefs.h <<_ACEOF
 #define DEFAULT_ARCHIVE_FORMAT ${DEFAULT_ARCHIVE_FORMAT}_FORMAT
 _ACEOF
 
-{ echo "$as_me:$LINENO: result: $DEFAULT_ARCHIVE_FORMAT" >&5
-echo "${ECHO_T}$DEFAULT_ARCHIVE_FORMAT" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $DEFAULT_ARCHIVE_FORMAT" >&5
+$as_echo "$DEFAULT_ARCHIVE_FORMAT" >&6; }
 
-{ echo "$as_me:$LINENO: checking for default archive" >&5
-echo $ECHO_N "checking for default archive... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for default archive" >&5
+$as_echo_n "checking for default archive... " >&6; }
 
 
 if test -z "$DEFAULT_ARCHIVE"; then
   DEFAULT_ARCHIVE=-
 else
   if test -z "`ls $DEFAULT_ARCHIVE 2>/dev/null`"; then
-    { echo "$as_me:$LINENO: WARNING: DEFAULT_ARCHIVE \`$DEFAULT_ARCHIVE' not found on this system" >&5
-echo "$as_me: WARNING: DEFAULT_ARCHIVE \`$DEFAULT_ARCHIVE' not found on this system" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: DEFAULT_ARCHIVE \`$DEFAULT_ARCHIVE' not found on this system" >&5
+$as_echo "$as_me: WARNING: DEFAULT_ARCHIVE \`$DEFAULT_ARCHIVE' not found on this system" >&2;}
   fi
   # FIXME: Look for DEFTAPE in <sys/mtio.h>.
   # FIXME: Let DEVICE_PREFIX be configured from the environment.
@@ -39333,23 +48195,23 @@ cat >>confdefs.h <<_ACEOF
 #define DEFAULT_ARCHIVE "$DEFAULT_ARCHIVE"
 _ACEOF
 
-{ echo "$as_me:$LINENO: result: $DEFAULT_ARCHIVE" >&5
-echo "${ECHO_T}$DEFAULT_ARCHIVE" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $DEFAULT_ARCHIVE" >&5
+$as_echo "$DEFAULT_ARCHIVE" >&6; }
 
 
-{ echo "$as_me:$LINENO: checking for default blocking" >&5
-echo $ECHO_N "checking for default blocking... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for default blocking" >&5
+$as_echo_n "checking for default blocking... " >&6; }
 DEFAULT_BLOCKING=${DEFAULT_BLOCKING-20}
 
 cat >>confdefs.h <<_ACEOF
 #define DEFAULT_BLOCKING $DEFAULT_BLOCKING
 _ACEOF
 
-{ echo "$as_me:$LINENO: result: $DEFAULT_BLOCKING" >&5
-echo "${ECHO_T}$DEFAULT_BLOCKING" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $DEFAULT_BLOCKING" >&5
+$as_echo "$DEFAULT_BLOCKING" >&6; }
 
-{ echo "$as_me:$LINENO: checking for default quoting style" >&5
-echo $ECHO_N "checking for default quoting style... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for default quoting style" >&5
+$as_echo_n "checking for default quoting style... " >&6; }
 
 
 DEFAULT_QUOTING_STYLE="escape"
@@ -39357,12 +48219,12 @@ DEFAULT_QUOTING_STYLE="escape"
 
 case $DEFAULT_QUOTING_STYLE in
           literal|shell|shell-always|c|escape|locale|clocale) ;;
-*)  { { echo "$as_me:$LINENO: error: Invalid quoting style" >&5
-echo "$as_me: error: Invalid quoting style" >&2;}
+*)  { { $as_echo "$as_me:$LINENO: error: Invalid quoting style" >&5
+$as_echo "$as_me: error: Invalid quoting style" >&2;}
    { (exit 1); exit 1; }; };;
 esac
-{ echo "$as_me:$LINENO: result: $DEFAULT_QUOTING_STYLE" >&5
-echo "${ECHO_T}$DEFAULT_QUOTING_STYLE" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $DEFAULT_QUOTING_STYLE" >&5
+$as_echo "$DEFAULT_QUOTING_STYLE" >&6; }
 DEFAULT_QUOTING_STYLE=`echo ${DEFAULT_QUOTING_STYLE}|sed 's/-/_/g'`_quoting_style
 
 cat >>confdefs.h <<_ACEOF
@@ -39411,8 +48273,8 @@ fi
 ac_prog=ld
 if test "$GCC" = yes; then
   # Check if gcc -print-prog-name=ld gives a path.
-  { echo "$as_me:$LINENO: checking for ld used by GCC" >&5
-echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for ld used by GCC" >&5
+$as_echo_n "checking for ld used by GCC... " >&6; }
   case $host in
   *-*-mingw*)
     # gcc leaves a trailing carriage return which upsets mingw
@@ -39427,7 +48289,7 @@ echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; }
       # Canonicalize the path of ld
       ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
       while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
-       ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+        ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
       done
       test -z "$LD" && LD="$ac_prog"
       ;;
@@ -39441,14 +48303,14 @@ echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; }
     ;;
   esac
 elif test "$with_gnu_ld" = yes; then
-  { echo "$as_me:$LINENO: checking for GNU ld" >&5
-echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
 else
-  { echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
 fi
 if test "${acl_cv_path_LD+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
   IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
@@ -39461,9 +48323,9 @@ else
       # Break only if it was the GNU/non-GNU ld that we prefer.
       case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
       *GNU* | *'with BFD'*)
-       test "$with_gnu_ld" != no && break ;;
+        test "$with_gnu_ld" != no && break ;;
       *)
-       test "$with_gnu_ld" != yes && break ;;
+        test "$with_gnu_ld" != yes && break ;;
       esac
     fi
   done
 
 LD="$acl_cv_path_LD"
 if test -n "$LD"; then
-  { echo "$as_me:$LINENO: result: $LD" >&5
-echo "${ECHO_T}$LD" >&6; }
+  { $as_echo "$as_me:$LINENO: result: $LD" >&5
+$as_echo "$LD" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
-test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
    { (exit 1); exit 1; }; }
-{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
 if test "${acl_cv_prog_gnu_ld+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   # I'd rather use --version here, but apparently some GNU ld's only accept -v.
 case `$LD -v 2>&1 </dev/null` in
@@ -39497,17 +48359,17 @@ case `$LD -v 2>&1 </dev/null` in
   acl_cv_prog_gnu_ld=no ;;
 esac
 fi
-{ echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
-echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
+$as_echo "$acl_cv_prog_gnu_ld" >&6; }
 with_gnu_ld=$acl_cv_prog_gnu_ld
 
 
 
 
-                                                { echo "$as_me:$LINENO: checking for shared library run path origin" >&5
-echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6; }
+                                                { $as_echo "$as_me:$LINENO: checking for shared library run path origin" >&5
+$as_echo_n "checking for shared library run path origin... " >&6; }
 if test "${acl_cv_rpath+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
     CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
@@ -39517,8 +48379,8 @@ else
     acl_cv_rpath=done
 
 fi
-{ echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
-echo "${ECHO_T}$acl_cv_rpath" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
+$as_echo "$acl_cv_rpath" >&6; }
   wl="$acl_cv_wl"
   acl_libext="$acl_cv_libext"
   acl_shlibext="$acl_cv_shlibext"
   acl_libdirstem2=
   case "$host_os" in
     solaris*)
-                                    { echo "$as_me:$LINENO: checking for 64-bit host" >&5
-echo $ECHO_N "checking for 64-bit host... $ECHO_C" >&6; }
+                                    { $as_echo "$as_me:$LINENO: checking for 64-bit host" >&5
+$as_echo_n "checking for 64-bit host... " >&6; }
 if test "${gl_cv_solaris_64bit+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -39569,8 +48431,8 @@ rm -f conftest*
 
 
 fi
-{ echo "$as_me:$LINENO: result: $gl_cv_solaris_64bit" >&5
-echo "${ECHO_T}$gl_cv_solaris_64bit" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gl_cv_solaris_64bit" >&5
+$as_echo "$gl_cv_solaris_64bit" >&6; }
       if test $gl_cv_solaris_64bit = yes; then
         acl_libdirstem=lib/64
         case "$host_cpu" in
@@ -39587,6 +48449,9 @@ echo "${ECHO_T}$gl_cv_solaris_64bit" >&6; }
           if test -d "$searchdir"; then
             case "$searchdir" in
               */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+              */../ | */.. )
+                # Better ignore directories of this form. They are misleading.
+                ;;
               *) searchdir=`cd "$searchdir" && pwd`
                  case "$searchdir" in
                    */lib64 ) acl_libdirstem=lib64 ;;
@@ -39660,6 +48525,7 @@ fi
   LTLIBICONV=
   INCICONV=
   LIBICONV_PREFIX=
+      HAVE_LIBICONV=
   rpathdirs=
   ltrpathdirs=
   names_already_handled=
   done
 
 
-  { echo "$as_me:$LINENO: checking for iconv" >&5
-echo $ECHO_N "checking for iconv... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for iconv" >&5
+$as_echo_n "checking for iconv... " >&6; }
 if test "${am_cv_func_iconv+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
     am_cv_func_iconv="no, consider installing GNU libiconv"
@@ -40127,26 +48993,30 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   am_cv_func_iconv=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
     if test "$am_cv_func_iconv" != yes; then
@@ -40176,40 +49046,44 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   am_cv_lib_iconv=yes
         am_cv_func_iconv=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
       LIBS="$am_save_LIBS"
     fi
 
 fi
-{ echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
-echo "${ECHO_T}$am_cv_func_iconv" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
+$as_echo "$am_cv_func_iconv" >&6; }
   if test "$am_cv_func_iconv" = yes; then
-    { echo "$as_me:$LINENO: checking for working iconv" >&5
-echo $ECHO_N "checking for working iconv... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for working iconv" >&5
+$as_echo_n "checking for working iconv... " >&6; }
 if test "${am_cv_func_iconv_works+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
             am_save_LIBS="$LIBS"
@@ -40252,6 +49126,25 @@ int main ()
           return 1;
       }
   }
+  /* Test against Solaris 10 bug: Failures are not distinguishable from
+     successful returns.  */
+  {
+    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+    if (cd_ascii_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\263";
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_ascii_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
 #if 0 /* This bug could be worked around by the caller.  */
   /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
   {
@@ -40292,29 +49185,32 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   am_cv_func_iconv_works=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 am_cv_func_iconv_works=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
@@ -40322,8 +49218,8 @@ fi
       LIBS="$am_save_LIBS"
 
 fi
-{ echo "$as_me:$LINENO: result: $am_cv_func_iconv_works" >&5
-echo "${ECHO_T}$am_cv_func_iconv_works" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $am_cv_func_iconv_works" >&5
+$as_echo "$am_cv_func_iconv_works" >&6; }
     case "$am_cv_func_iconv_works" in
       *no) am_func_iconv=no am_cv_lib_iconv=no ;;
       *)   am_func_iconv=yes ;;
@@ -40339,10 +49235,10 @@ _ACEOF
 
   fi
   if test "$am_cv_lib_iconv" = yes; then
-    { echo "$as_me:$LINENO: checking how to link with libiconv" >&5
-echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6; }
-    { echo "$as_me:$LINENO: result: $LIBICONV" >&5
-echo "${ECHO_T}$LIBICONV" >&6; }
+    { $as_echo "$as_me:$LINENO: checking how to link with libiconv" >&5
+$as_echo_n "checking how to link with libiconv... " >&6; }
+    { $as_echo "$as_me:$LINENO: result: $LIBICONV" >&5
+$as_echo "$LIBICONV" >&6; }
   else
             CPPFLAGS="$am_save_CPPFLAGS"
     LIBICONV=
@@ -40352,10 +49248,10 @@ echo "${ECHO_T}$LIBICONV" >&6; }
 
 
   if test "$am_cv_func_iconv" = yes; then
-    { echo "$as_me:$LINENO: checking for iconv declaration" >&5
-echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for iconv declaration" >&5
+$as_echo_n "checking for iconv declaration... " >&6; }
     if test "${am_cv_proto_iconv+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
       cat >conftest.$ac_ext <<_ACEOF
@@ -40391,20 +49287,21 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   am_cv_proto_iconv_arg1=""
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        am_cv_proto_iconv_arg1="const"
@@ -40415,10 +49312,10 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 
     am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
-    { echo "$as_me:$LINENO: result: ${ac_t:-
-         }$am_cv_proto_iconv" >&5
-echo "${ECHO_T}${ac_t:-
-         }$am_cv_proto_iconv" >&6; }
+    { $as_echo "$as_me:$LINENO: result:
+         $am_cv_proto_iconv" >&5
+$as_echo "
+         $am_cv_proto_iconv" >&6; }
 
 cat >>confdefs.h <<_ACEOF
 #define ICONV_CONST $am_cv_proto_iconv_arg1
@@ -40429,20 +49326,21 @@ _ACEOF
 
 for ac_header in iconv.h
 do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 else
   # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5
+$as_echo_n "checking $ac_header usability... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -40458,32 +49356,33 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
   ac_header_compiler=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_header_compiler=no
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
 
 # Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5
+$as_echo_n "checking $ac_header presence... " >&6; }
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
@@ -40497,51 +49396,52 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } >/dev/null && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then
   ac_header_preproc=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
   ac_header_preproc=no
 fi
 
 rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
 
 # So?  What about this header?
 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
   yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
     ac_header_preproc=yes
     ;;
   no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
     ( cat <<\_ASBOX
 ## ------------------------------ ##
 ## Report this to bug-tar@gnu.org ##
@@ -40550,33 +49450,37 @@ _ASBOX
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5
+$as_echo_n "checking for $ac_header... " >&6; }
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   eval "$as_ac_Header=\$ac_header_preproc"
 fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
 fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+as_val=`eval 'as_val=${'$as_ac_Header'}
+                $as_echo "$as_val"'`
+   if test "x$as_val" = x""yes; then
   cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
 
 fi
 
 done
 
-{ echo "$as_me:$LINENO: checking for iconv_t" >&5
-echo $ECHO_N "checking for iconv_t... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for iconv_t" >&5
+$as_echo_n "checking for iconv_t... " >&6; }
 if test "${ac_cv_type_iconv_t+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
+  ac_cv_type_iconv_t=no
+cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
 _ACEOF
 cat confdefs.h >>conftest.$ac_ext
@@ -40588,14 +49492,50 @@ cat >>conftest.$ac_ext <<_ACEOF
 #endif
 
 
-typedef iconv_t ac__type_new_;
 int
 main ()
 {
-if ((ac__type_new_ *) 0)
-  return 0;
-if (sizeof (ac__type_new_))
+if (sizeof (iconv_t))
+       return 0;
+  ;
   return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#ifdef HAVE_ICONV_H
+# include <iconv.h>
+#endif
+
+
+int
+main ()
+{
+if (sizeof ((iconv_t)))
+         return 0;
   ;
   return 0;
 }
@@ -40606,30 +49546,39 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_compile") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
        } && test -s conftest.$ac_objext; then
-  ac_cv_type_iconv_t=yes
+  :
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_cv_type_iconv_t=no
+       ac_cv_type_iconv_t=yes
 fi
 
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
 fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_iconv_t" >&5
-echo "${ECHO_T}$ac_cv_type_iconv_t" >&6; }
-if test $ac_cv_type_iconv_t = yes; then
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_iconv_t" >&5
+$as_echo "$ac_cv_type_iconv_t" >&6; }
+if test "x$ac_cv_type_iconv_t" = x""yes; then
   :
 else
 
@@ -40642,8 +49591,8 @@ fi
 
 # Gettext.
 
-  { echo "$as_me:$LINENO: checking whether NLS is requested" >&5
-echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+$as_echo_n "checking whether NLS is requested... " >&6; }
     # Check whether --enable-nls was given.
 if test "${enable_nls+set}" = set; then
   enableval=$enable_nls; USE_NLS=$enableval
@@ -40651,8 +49600,8 @@ else
   USE_NLS=yes
 fi
 
-  { echo "$as_me:$LINENO: result: $USE_NLS" >&5
-echo "${ECHO_T}$USE_NLS" >&6; }
+  { $as_echo "$as_me:$LINENO: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
 
 
 
@@ -40692,10 +49641,10 @@ rm -f conf$$.file
 
 # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_path_MSGFMT+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   case "$MSGFMT" in
   [\\/]* | ?:[\\/]*)
@@ -40724,19 +49673,19 @@ esac
 fi
 MSGFMT="$ac_cv_path_MSGFMT"
 if test "$MSGFMT" != ":"; then
-  { echo "$as_me:$LINENO: result: $MSGFMT" >&5
-echo "${ECHO_T}$MSGFMT" >&6; }
+  { $as_echo "$as_me:$LINENO: result: $MSGFMT" >&5
+$as_echo "$MSGFMT" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
   # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_path_GMSGFMT+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   case $GMSGFMT in
   [\\/]* | ?:[\\/]*)
@@ -40751,7 +49700,7 @@ do
   for ac_exec_ext in '' $ac_executable_extensions; do
   if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -40764,11 +49713,11 @@ esac
 fi
 GMSGFMT=$ac_cv_path_GMSGFMT
 if test -n "$GMSGFMT"; then
-  { echo "$as_me:$LINENO: result: $GMSGFMT" >&5
-echo "${ECHO_T}$GMSGFMT" >&6; }
+  { $as_echo "$as_me:$LINENO: result: $GMSGFMT" >&5
+$as_echo "$GMSGFMT" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
@@ -40815,10 +49764,10 @@ rm -f conf$$.file
 
 # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_path_XGETTEXT+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   case "$XGETTEXT" in
   [\\/]* | ?:[\\/]*)
@@ -40847,11 +49796,11 @@ esac
 fi
 XGETTEXT="$ac_cv_path_XGETTEXT"
 if test "$XGETTEXT" != ":"; then
-  { echo "$as_me:$LINENO: result: $XGETTEXT" >&5
-echo "${ECHO_T}$XGETTEXT" >&6; }
+  { $as_echo "$as_me:$LINENO: result: $XGETTEXT" >&5
+$as_echo "$XGETTEXT" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
     rm -f messages.po
@@ -40893,10 +49842,10 @@ rm -f conf$$.file
 
 # Extract the first word of "msgmerge", so it can be a program name with args.
 set dummy msgmerge; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_path_MSGMERGE+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   case "$MSGMERGE" in
   [\\/]* | ?:[\\/]*)
@@ -40924,11 +49873,11 @@ esac
 fi
 MSGMERGE="$ac_cv_path_MSGMERGE"
 if test "$MSGMERGE" != ":"; then
-  { echo "$as_me:$LINENO: result: $MSGMERGE" >&5
-echo "${ECHO_T}$MSGMERGE" >&6; }
+  { $as_echo "$as_me:$LINENO: result: $MSGMERGE" >&5
+$as_echo "$MSGMERGE" >&6; }
 else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
+  { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
 
 
 
-    { echo "$as_me:$LINENO: checking for CFPreferencesCopyAppValue" >&5
-echo $ECHO_N "checking for CFPreferencesCopyAppValue... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for CFPreferencesCopyAppValue" >&5
+$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; }
 if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   gt_save_LIBS="$LIBS"
      LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
@@ -40992,32 +49941,36 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   gt_cv_func_CFPreferencesCopyAppValue=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gt_cv_func_CFPreferencesCopyAppValue=no
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
      LIBS="$gt_save_LIBS"
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
-echo "${ECHO_T}$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
   if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -41025,10 +49978,10 @@ cat >>confdefs.h <<\_ACEOF
 _ACEOF
 
   fi
-    { echo "$as_me:$LINENO: checking for CFLocaleCopyCurrent" >&5
-echo $ECHO_N "checking for CFLocaleCopyCurrent... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for CFLocaleCopyCurrent" >&5
+$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; }
 if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   gt_save_LIBS="$LIBS"
      LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
@@ -41053,32 +50006,36 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   gt_cv_func_CFLocaleCopyCurrent=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        gt_cv_func_CFLocaleCopyCurrent=no
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
      LIBS="$gt_save_LIBS"
 fi
-{ echo "$as_me:$LINENO: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
-echo "${ECHO_T}$gt_cv_func_CFLocaleCopyCurrent" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
+$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; }
   if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
 
 cat >>confdefs.h <<\_ACEOF
@@ -41128,10 +50085,10 @@ typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
           gt_expression_test_code=
         fi
 
-        { echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5
-echo $ECHO_N "checking for GNU gettext in libc... $ECHO_C" >&6; }
+        { $as_echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5
+$as_echo_n "checking for GNU gettext in libc... " >&6; }
 if { as_var=$gt_func_gnugettext_libc; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
@@ -41158,32 +50115,37 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$gt_func_gnugettext_libc=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$gt_func_gnugettext_libc=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
 fi
-ac_res=`eval echo '${'$gt_func_gnugettext_libc'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$gt_func_gnugettext_libc'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
 
         if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
 
@@ -41216,10 +50178,10 @@ echo "${ECHO_T}$ac_res" >&6; }
   done
 
 
-  { echo "$as_me:$LINENO: checking for iconv" >&5
-echo $ECHO_N "checking for iconv... $ECHO_C" >&6; }
+  { $as_echo "$as_me:$LINENO: checking for iconv" >&5
+$as_echo_n "checking for iconv... " >&6; }
 if test "${am_cv_func_iconv+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
     am_cv_func_iconv="no, consider installing GNU libiconv"
@@ -41248,26 +50210,30 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   am_cv_func_iconv=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
     if test "$am_cv_func_iconv" != yes; then
@@ -41297,40 +50263,44 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   am_cv_lib_iconv=yes
         am_cv_func_iconv=yes
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
       LIBS="$am_save_LIBS"
     fi
 
 fi
-{ echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
-echo "${ECHO_T}$am_cv_func_iconv" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
+$as_echo "$am_cv_func_iconv" >&6; }
   if test "$am_cv_func_iconv" = yes; then
-    { echo "$as_me:$LINENO: checking for working iconv" >&5
-echo $ECHO_N "checking for working iconv... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking for working iconv" >&5
+$as_echo_n "checking for working iconv... " >&6; }
 if test "${am_cv_func_iconv_works+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
 
             am_save_LIBS="$LIBS"
@@ -41373,6 +50343,25 @@ int main ()
           return 1;
       }
   }
+  /* Test against Solaris 10 bug: Failures are not distinguishable from
+     successful returns.  */
+  {
+    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+    if (cd_ascii_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\263";
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_ascii_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
 #if 0 /* This bug could be worked around by the caller.  */
   /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
   {
@@ -41413,29 +50402,32 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
   { (case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); }; }; then
   am_cv_func_iconv_works=yes
 else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+$as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ( exit $ac_status )
 am_cv_func_iconv_works=no
 fi
+rm -rf conftest.dSYM
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
 
@@ -41443,8 +50435,8 @@ fi
       LIBS="$am_save_LIBS"
 
 fi
-{ echo "$as_me:$LINENO: result: $am_cv_func_iconv_works" >&5
-echo "${ECHO_T}$am_cv_func_iconv_works" >&6; }
+{ $as_echo "$as_me:$LINENO: result: $am_cv_func_iconv_works" >&5
+$as_echo "$am_cv_func_iconv_works" >&6; }
     case "$am_cv_func_iconv_works" in
       *no) am_func_iconv=no am_cv_lib_iconv=no ;;
       *)   am_func_iconv=yes ;;
@@ -41460,10 +50452,10 @@ _ACEOF
 
   fi
   if test "$am_cv_lib_iconv" = yes; then
-    { echo "$as_me:$LINENO: checking how to link with libiconv" >&5
-echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6; }
-    { echo "$as_me:$LINENO: result: $LIBICONV" >&5
-echo "${ECHO_T}$LIBICONV" >&6; }
+    { $as_echo "$as_me:$LINENO: checking how to link with libiconv" >&5
+$as_echo_n "checking how to link with libiconv... " >&6; }
+    { $as_echo "$as_me:$LINENO: result: $LIBICONV" >&5
+$as_echo "$LIBICONV" >&6; }
   else
             CPPFLAGS="$am_save_CPPFLAGS"
     LIBICONV=
@@ -41529,6 +50521,7 @@ fi
   LTLIBINTL=
   INCINTL=
   LIBINTL_PREFIX=
+      HAVE_LIBINTL=
   rpathdirs=
   ltrpathdirs=
   names_already_handled=
 
 
 
-          { echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5
-echo $ECHO_N "checking for GNU gettext in libintl... $ECHO_C" >&6; }
+          { $as_echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5
+$as_echo_n "checking for GNU gettext in libintl... " >&6; }
 if { as_var=$gt_func_gnugettext_libintl; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
+  $as_echo_n "(cached) " >&6
 else
   gt_save_CPPFLAGS="$CPPFLAGS"
             CPPFLAGS="$CPPFLAGS $INCINTL"
@@ -41971,26 +50964,30 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   eval "$gt_func_gnugettext_libintl=yes"
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        eval "$gt_func_gnugettext_libintl=no"
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
                         if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
@@ -42024,38 +51021,43 @@ case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
   (eval "$ac_link") 2>conftest.er1
   ac_status=$?
   grep -v '^ *+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
   (exit $ac_status); } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then
   LIBINTL="$LIBINTL $LIBICONV"
                 LTLIBINTL="$LTLIBINTL $LTLIBICONV"
                 eval "$gt_func_gnugettext_libintl=yes"
 
 else
-  echo "$as_me: failed program was:" >&5
+  $as_echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 
 fi
 
+rm -rf conftest.dSYM
 rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
       conftest$ac_exeext conftest.$ac_ext
             fi
             CPPFLAGS="$gt_save_CPPFLAGS"
             LIBS="$gt_save_LIBS"
 fi
-ac_res=`eval echo '${'$gt_func_gnugettext_libintl'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
+ac_res=`eval 'as_val=${'$gt_func_gnugettext_libintl'}
+                $as_echo "$as_val"'`
+              { $as_echo "$as_me:$LINENO: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
         fi
 
                                         if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
@@ -42091,13 +51093,13 @@ _ACEOF
     fi
   fi
 
-  { echo "$as_me:$LINENO: checking whether to use NLS" >&5
-echo $ECHO_N "checking whether to use NLS... $ECHO_C" >&6; }
-  { echo "$as_me:$LINENO: result: $USE_NLS" >&5
-echo "${ECHO_T}$USE_NLS" >&6; }
+  { $as_echo "$as_me:$LINENO: checking whether to use NLS" >&5
+$as_echo_n "checking whether to use NLS... " >&6; }
+  { $as_echo "$as_me:$LINENO: result: $USE_NLS" >&5
+$as_echo "$USE_NLS" >&6; }
   if test "$USE_NLS" = "yes"; then
-    { echo "$as_me:$LINENO: checking where the gettext function comes from" >&5
-echo $ECHO_N "checking where the gettext function comes from... $ECHO_C" >&6; }
+    { $as_echo "$as_me:$LINENO: checking where the gettext function comes from" >&5
+$as_echo_n "checking where the gettext function comes from... " >&6; }
     if test "$gt_use_preinstalled_gnugettext" = "yes"; then
       if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
         gt_source="external libintl"
@@ -42107,18 +51109,18 @@ echo $ECHO_N "checking where the gettext function comes from... $ECHO_C" >&6; }
     else
       gt_source="included intl directory"
     fi
-    { echo "$as_me:$LINENO: result: $gt_source" >&5
-echo "${ECHO_T}$gt_source" >&6; }
+    { $as_echo "$as_me:$LINENO: result: $gt_source" >&5
+$as_echo "$gt_source" >&6; }
   fi
 
   if test "$USE_NLS" = "yes"; then
 
     if test "$gt_use_preinstalled_gnugettext" = "yes"; then
       if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
-        { echo "$as_me:$LINENO: checking how to link with libintl" >&5
-echo $ECHO_N "checking how to link with libintl... $ECHO_C" >&6; }
-        { echo "$as_me:$LINENO: result: $LIBINTL" >&5
-echo "${ECHO_T}$LIBINTL" >&6; }
+        { $as_echo "$as_me:$LINENO: checking how to link with libintl" >&5
+$as_echo_n "checking how to link with libintl... " >&6; }
+        { $as_echo "$as_me:$LINENO: result: $LIBINTL" >&5
+$as_echo "$LIBINTL" >&6; }
 
   for element in $INCINTL; do
     haveit=
@@ -42199,7 +51201,7 @@ else
        BACKUP_SED_COND='/^\#IF_DATE_FORMAT_OK/,/^\#ELSE_DATE_FORMAT_OK/d;/^\#ENDIF_DATE_FORMAT_OK/d'
 fi
 
-ac_config_files="$ac_config_files Makefile doc/Makefile lib/Makefile po/Makefile.in scripts/Makefile rmt/Makefile src/Makefile"
+ac_config_files="$ac_config_files Makefile doc/Makefile gnu/Makefile lib/Makefile po/Makefile.in scripts/Makefile rmt/Makefile src/Makefile"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -42228,11 +51230,12 @@ _ACEOF
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       esac
       case $ac_var in #(
       _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
       *) $as_unset $ac_var ;;
       esac ;;
     esac
@@ -42265,12 +51268,12 @@ echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
     test "x$cache_file" != "x/dev/null" &&
-      { echo "$as_me:$LINENO: updating cache $cache_file" >&5
-echo "$as_me: updating cache $cache_file" >&6;}
+      { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
     cat confcache >$cache_file
   else
-    { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
-echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+    { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
   fi
 fi
 rm -f confcache
@@ -42286,7 +51289,7 @@ ac_ltlibobjs=
 for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   # 1. Remove the extension, and $U if already installed.
   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`echo "$ac_i" | sed "$ac_script"`
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
   # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
   #    will be set to the directory where LIBOBJS objects are built.
   ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
@@ -42297,24 +51300,32 @@ LIBOBJS=$ac_libobjs
 LTLIBOBJS=$ac_ltlibobjs
 
 
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+fi
+
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+  { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
 Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"AMDEP\" was never defined.
+$as_echo "$as_me: error: conditional \"AMDEP\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
 if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+  { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
 Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
 if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"GL_COND_LIBTOOL\" was never defined.
+  { { $as_echo "$as_me:$LINENO: error: conditional \"GL_COND_LIBTOOL\" was never defined.
 Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"GL_COND_LIBTOOL\" was never defined.
+$as_echo "$as_me: error: conditional \"GL_COND_LIBTOOL\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
@@ -42324,7 +51335,7 @@ fi
     if test -n "$gl_LIBOBJS"; then
       # Remove the extension.
       sed_drop_objext='s/\.o$//;s/\.obj$//'
-      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed "$sed_drop_objext" | sort | uniq`; do
+      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
         gl_libobjs="$gl_libobjs $i.$ac_objext"
         gl_ltlibobjs="$gl_ltlibobjs $i.lo"
       done
@@ -42340,7 +51351,7 @@ fi
     if test -n "$gltests_LIBOBJS"; then
       # Remove the extension.
       sed_drop_objext='s/\.o$//;s/\.obj$//'
-      for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed "$sed_drop_objext" | sort | uniq`; do
+      for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
         gltests_libobjs="$gltests_libobjs $i.$ac_objext"
         gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
       done
 
 
 : ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
+{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 #! $SHELL
 # Generated by $as_me.
 # Run this file to recreate the current configuration.
@@ -42369,7 +51381,7 @@ ac_cs_silent=false
 SHELL=\${CONFIG_SHELL-$SHELL}
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 ## --------------------- ##
 ## M4sh Initialization.  ##
 ## --------------------- ##
@@ -42379,7 +51391,7 @@ DUALCASE=1; export DUALCASE # for MKS sh
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
@@ -42401,17 +51413,45 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
 as_cr_digits='0123456789'
 as_cr_alnum=$as_cr_Letters$as_cr_digits
 
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in
+      *"$as_nl"*)
+       expr "X$arg" : "X\\(.*\\)$as_nl";
+       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
 # The user is always right.
 if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
 fi
 
 # Support unset when possible.
@@ -42427,8 +51467,6 @@ fi
 # there to prevent editors from complaining about space-tab.
 # (If _AS_PATH_WALK were called with IFS unset, it would disable word
 # splitting by setting IFS to empty value.)
-as_nl='
-'
 IFS=" ""       $as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
@@ -42451,7 +51489,7 @@ if test "x$as_myself" = x; then
   as_myself=$0
 fi
 if test ! -f "$as_myself"; then
-  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
   { (exit 1); exit 1; }
 fi
 
@@ -42464,17 +51502,10 @@ PS2='> '
 PS4='+ '
 
 # NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-  fi
-done
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
 
 # Required to use basename.
 if expr a : '\(a\)' >/dev/null 2>&1 &&
@@ -42496,7 +51527,7 @@ as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
         X"$0" : 'X\(//\)$' \| \
         X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X/"$0" |
+$as_echo X/"$0" |
     sed '/^.*\/\([^/][^/]*\)\/*$/{
            s//\1/
            q
@@ -42547,7 +51578,7 @@ $as_unset CDPATH
       s/-\n.*//
     ' >$as_me.lineno &&
   chmod +x "$as_me.lineno" ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
    { (exit 1); exit 1; }; }
 
   # Don't try to exec as it changes $[0], causing all sort of problems
@@ -42575,7 +51606,6 @@ case `echo -n x` in
 *)
   ECHO_N='-n';;
 esac
-
 if expr a : '\(a\)' >/dev/null 2>&1 &&
    test "X`expr 00001 : '.*\(...\)'`" = X001; then
   as_expr=expr
@@ -42588,19 +51618,22 @@ if test -d conf$$.dir; then
   rm -f conf$$.dir/conf$$.file
 else
   rm -f conf$$.dir
-  mkdir conf$$.dir
-fi
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s='ln -s'
-  # ... but there are two gotchas:
-  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-  # In both cases, we have to default to `cp -p'.
-  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
     as_ln_s='cp -p'
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
+  fi
 else
   as_ln_s='cp -p'
 fi
@@ -42625,10 +51658,10 @@ else
   as_test_x='
     eval sh -c '\''
       if test -d "$1"; then
-        test -d "$1/.";
+       test -d "$1/.";
       else
        case $1 in
-        -*)set "./$1";;
+       -*)set "./$1";;
        esac;
        case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
        ???[sx]*):;;*)false;;esac;fi
@@ -42650,8 +51683,8 @@ exec 6>&1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by GNU tar $as_me 1.22, which was
-generated by GNU Autoconf 2.61.  Invocation command line was
+This file was extended by GNU tar $as_me 1.23, which was
+generated by GNU Autoconf 2.63.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -42664,7 +51697,16 @@ on `(hostname || uname -n) 2>/dev/null | sed 1q`
 
 _ACEOF
 
-cat >>$CONFIG_STATUS <<_ACEOF
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 # Files that config.status was made for.
 config_files="$ac_config_files"
 config_headers="$ac_config_headers"
@@ -42672,22 +51714,23 @@ config_commands="$ac_config_commands"
 
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 ac_cs_usage="\
 \`$as_me' instantiates files from templates according to the
 current configuration.
 
-Usage: $0 [OPTIONS] [FILE]...
+Usage: $0 [OPTION]... [FILE]...
 
   -h, --help       print this help, then exit
   -V, --version    print version number and configuration settings, then exit
-  -q, --quiet      do not print progress messages
+  -q, --quiet, --silent
+                   do not print progress messages
   -d, --debug      don't remove temporary files
       --recheck    update $as_me by reconfiguring in the same conditions
-  --file=FILE[:TEMPLATE]
-                  instantiate the configuration file FILE
-  --header=FILE[:TEMPLATE]
-                  instantiate the configuration header FILE
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
 
 Configuration files:
 $config_files
@@ -42701,13 +51744,13 @@ $config_commands
 Report bugs to <bug-autoconf@gnu.org>."
 
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_version="\\
-GNU tar config.status 1.22
-configured by $0, generated by GNU Autoconf 2.61,
-  with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+GNU tar config.status 1.23
+configured by $0, generated by GNU Autoconf 2.63,
+  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
-Copyright (C) 2006 Free Software Foundation, Inc.
+Copyright (C) 2008 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -42715,11 +51758,12 @@ ac_pwd='$ac_pwd'
 srcdir='$srcdir'
 INSTALL='$INSTALL'
 MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value.  By we need to know if files were specified by the user.
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
 ac_need_defaults=:
 while test $# != 0
 do
   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
     ac_cs_recheck=: ;;
   --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    echo "$ac_cs_version"; exit ;;
+    $as_echo "$ac_cs_version"; exit ;;
   --debug | --debu | --deb | --de | --d | -d )
     debug=: ;;
   --file | --fil | --fi | --f )
     $ac_shift
-    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    CONFIG_FILES="$CONFIG_FILES '$ac_optarg'"
     ac_need_defaults=false;;
   --header | --heade | --head | --hea )
     $ac_shift
-    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'"
     ac_need_defaults=false;;
   --he | --h)
     # Conflict between --help and --header
-    { echo "$as_me: error: ambiguous option: $1
+    { $as_echo "$as_me: error: ambiguous option: $1
 Try \`$0 --help' for more information." >&2
    { (exit 1); exit 1; }; };;
   --help | --hel | -h )
-    echo "$ac_cs_usage"; exit ;;
+    $as_echo "$ac_cs_usage"; exit ;;
   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
   | -silent | --silent | --silen | --sile | --sil | --si | --s)
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) { echo "$as_me: error: unrecognized option: $1
+  -*) { $as_echo "$as_me: error: unrecognized option: $1
 Try \`$0 --help' for more information." >&2
    { (exit 1); exit 1; }; } ;;
 
@@ -42783,27 +51833,29 @@ if $ac_cs_silent; then
 fi
 
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
-  CONFIG_SHELL=$SHELL
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
   export CONFIG_SHELL
-  exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  exec "\$@"
 fi
 
 _ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 exec 5>>config.log
 {
   echo
   sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
 ## Running $as_me. ##
 _ASBOX
-  echo "$ac_log"
+  $as_echo "$ac_log"
 } >&5
 
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 #
 # INIT-COMMANDS
 #
@@ -42818,13 +51870,13 @@ AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
 
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 
 # Handling of arguments.
 for ac_config_target in $ac_config_targets
 do
   case $ac_config_target in
-    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.hin" ;;
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;;
     "tests/atconfig") CONFIG_COMMANDS="$CONFIG_COMMANDS tests/atconfig" ;;
     "tests/atlocal") CONFIG_FILES="$CONFIG_FILES tests/atlocal" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
     "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+    "gnu/Makefile") CONFIG_FILES="$CONFIG_FILES gnu/Makefile" ;;
     "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
     "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
     "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;;
     "rmt/Makefile") CONFIG_FILES="$CONFIG_FILES rmt/Makefile" ;;
     "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
 
-  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+  *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
    { (exit 1); exit 1; }; };;
   esac
 done
@@ -42880,758 +51933,143 @@ $debug ||
   (umask 077 && mkdir "$tmp")
 } ||
 {
-   echo "$me: cannot create a temporary directory in ." >&2
+   $as_echo "$as_me: cannot create a temporary directory in ." >&2
    { (exit 1); exit 1; }
 }
 
-#
-# Set up the sed scripts for CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
 if test -n "$CONFIG_FILES"; then
 
-_ACEOF
-
-
-
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  cat >conf$$subs.sed <<_ACEOF
-SHELL!$SHELL$ac_delim
-PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
-PACKAGE_NAME!$PACKAGE_NAME$ac_delim
-PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
-PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
-PACKAGE_STRING!$PACKAGE_STRING$ac_delim
-PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
-exec_prefix!$exec_prefix$ac_delim
-prefix!$prefix$ac_delim
-program_transform_name!$program_transform_name$ac_delim
-bindir!$bindir$ac_delim
-sbindir!$sbindir$ac_delim
-libexecdir!$libexecdir$ac_delim
-datarootdir!$datarootdir$ac_delim
-datadir!$datadir$ac_delim
-sysconfdir!$sysconfdir$ac_delim
-sharedstatedir!$sharedstatedir$ac_delim
-localstatedir!$localstatedir$ac_delim
-includedir!$includedir$ac_delim
-oldincludedir!$oldincludedir$ac_delim
-docdir!$docdir$ac_delim
-infodir!$infodir$ac_delim
-htmldir!$htmldir$ac_delim
-dvidir!$dvidir$ac_delim
-pdfdir!$pdfdir$ac_delim
-psdir!$psdir$ac_delim
-libdir!$libdir$ac_delim
-localedir!$localedir$ac_delim
-mandir!$mandir$ac_delim
-DEFS!$DEFS$ac_delim
-ECHO_C!$ECHO_C$ac_delim
-ECHO_N!$ECHO_N$ac_delim
-ECHO_T!$ECHO_T$ac_delim
-LIBS!$LIBS$ac_delim
-build_alias!$build_alias$ac_delim
-host_alias!$host_alias$ac_delim
-target_alias!$target_alias$ac_delim
-INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
-INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
-INSTALL_DATA!$INSTALL_DATA$ac_delim
-am__isrc!$am__isrc$ac_delim
-CYGPATH_W!$CYGPATH_W$ac_delim
-PACKAGE!$PACKAGE$ac_delim
-VERSION!$VERSION$ac_delim
-ACLOCAL!$ACLOCAL$ac_delim
-AUTOCONF!$AUTOCONF$ac_delim
-AUTOMAKE!$AUTOMAKE$ac_delim
-AUTOHEADER!$AUTOHEADER$ac_delim
-MAKEINFO!$MAKEINFO$ac_delim
-install_sh!$install_sh$ac_delim
-STRIP!$STRIP$ac_delim
-INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim
-mkdir_p!$mkdir_p$ac_delim
-AWK!$AWK$ac_delim
-SET_MAKE!$SET_MAKE$ac_delim
-am__leading_dot!$am__leading_dot$ac_delim
-AMTAR!$AMTAR$ac_delim
-am__tar!$am__tar$ac_delim
-am__untar!$am__untar$ac_delim
-CC!$CC$ac_delim
-CFLAGS!$CFLAGS$ac_delim
-LDFLAGS!$LDFLAGS$ac_delim
-CPPFLAGS!$CPPFLAGS$ac_delim
-ac_ct_CC!$ac_ct_CC$ac_delim
-EXEEXT!$EXEEXT$ac_delim
-OBJEXT!$OBJEXT$ac_delim
-DEPDIR!$DEPDIR$ac_delim
-am__include!$am__include$ac_delim
-am__quote!$am__quote$ac_delim
-AMDEP_TRUE!$AMDEP_TRUE$ac_delim
-AMDEP_FALSE!$AMDEP_FALSE$ac_delim
-AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim
-CCDEPMODE!$CCDEPMODE$ac_delim
-am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim
-am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim
-RANLIB!$RANLIB$ac_delim
-YACC!$YACC$ac_delim
-YFLAGS!$YFLAGS$ac_delim
-build!$build$ac_delim
-build_cpu!$build_cpu$ac_delim
-build_vendor!$build_vendor$ac_delim
-build_os!$build_os$ac_delim
-host!$host$ac_delim
-host_cpu!$host_cpu$ac_delim
-host_vendor!$host_vendor$ac_delim
-host_os!$host_os$ac_delim
-CPP!$CPP$ac_delim
-GREP!$GREP$ac_delim
-EGREP!$EGREP$ac_delim
-STDBOOL_H!$STDBOOL_H$ac_delim
-HAVE__BOOL!$HAVE__BOOL$ac_delim
-GL_COND_LIBTOOL_TRUE!$GL_COND_LIBTOOL_TRUE$ac_delim
-GL_COND_LIBTOOL_FALSE!$GL_COND_LIBTOOL_FALSE$ac_delim
-ALLOCA!$ALLOCA$ac_delim
-ALLOCA_H!$ALLOCA_H$ac_delim
-GETOPT_H!$GETOPT_H$ac_delim
-GNULIB_BTOWC!$GNULIB_BTOWC$ac_delim
-_ACEOF
-
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
-    break
-  elif $ac_last_try; then
-    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
-   { (exit 1); exit 1; }; }
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
-if test -n "$ac_eof"; then
-  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
-  ac_eof=`expr $ac_eof + 1`
-fi
-
-cat >>$CONFIG_STATUS <<_ACEOF
-cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-_ACEOF
-sed '
-s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
-s/^/s,@/; s/!/@,|#_!!_#|/
-:n
-t n
-s/'"$ac_delim"'$/,g/; t
-s/$/\\/; p
-N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
-' >>$CONFIG_STATUS <conf$$subs.sed
-rm -f conf$$subs.sed
-cat >>$CONFIG_STATUS <<_ACEOF
-CEOF$ac_eof
-_ACEOF
 
-
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  cat >conf$$subs.sed <<_ACEOF
-GNULIB_WCTOB!$GNULIB_WCTOB$ac_delim
-GNULIB_MBSINIT!$GNULIB_MBSINIT$ac_delim
-GNULIB_MBRTOWC!$GNULIB_MBRTOWC$ac_delim
-GNULIB_MBRLEN!$GNULIB_MBRLEN$ac_delim
-GNULIB_MBSRTOWCS!$GNULIB_MBSRTOWCS$ac_delim
-GNULIB_MBSNRTOWCS!$GNULIB_MBSNRTOWCS$ac_delim
-GNULIB_WCRTOMB!$GNULIB_WCRTOMB$ac_delim
-GNULIB_WCSRTOMBS!$GNULIB_WCSRTOMBS$ac_delim
-GNULIB_WCSNRTOMBS!$GNULIB_WCSNRTOMBS$ac_delim
-GNULIB_WCWIDTH!$GNULIB_WCWIDTH$ac_delim
-HAVE_BTOWC!$HAVE_BTOWC$ac_delim
-HAVE_MBSINIT!$HAVE_MBSINIT$ac_delim
-HAVE_MBRTOWC!$HAVE_MBRTOWC$ac_delim
-HAVE_MBRLEN!$HAVE_MBRLEN$ac_delim
-HAVE_MBSRTOWCS!$HAVE_MBSRTOWCS$ac_delim
-HAVE_MBSNRTOWCS!$HAVE_MBSNRTOWCS$ac_delim
-HAVE_WCRTOMB!$HAVE_WCRTOMB$ac_delim
-HAVE_WCSRTOMBS!$HAVE_WCSRTOMBS$ac_delim
-HAVE_WCSNRTOMBS!$HAVE_WCSNRTOMBS$ac_delim
-HAVE_DECL_WCTOB!$HAVE_DECL_WCTOB$ac_delim
-HAVE_DECL_WCWIDTH!$HAVE_DECL_WCWIDTH$ac_delim
-REPLACE_MBSTATE_T!$REPLACE_MBSTATE_T$ac_delim
-REPLACE_BTOWC!$REPLACE_BTOWC$ac_delim
-REPLACE_WCTOB!$REPLACE_WCTOB$ac_delim
-REPLACE_MBSINIT!$REPLACE_MBSINIT$ac_delim
-REPLACE_MBRTOWC!$REPLACE_MBRTOWC$ac_delim
-REPLACE_MBRLEN!$REPLACE_MBRLEN$ac_delim
-REPLACE_MBSRTOWCS!$REPLACE_MBSRTOWCS$ac_delim
-REPLACE_MBSNRTOWCS!$REPLACE_MBSNRTOWCS$ac_delim
-REPLACE_WCRTOMB!$REPLACE_WCRTOMB$ac_delim
-REPLACE_WCSRTOMBS!$REPLACE_WCSRTOMBS$ac_delim
-REPLACE_WCWIDTH!$REPLACE_WCWIDTH$ac_delim
-WCHAR_H!$WCHAR_H$ac_delim
-LOCALE_FR!$LOCALE_FR$ac_delim
-GNULIB_CHOWN!$GNULIB_CHOWN$ac_delim
-GNULIB_CLOSE!$GNULIB_CLOSE$ac_delim
-GNULIB_DUP2!$GNULIB_DUP2$ac_delim
-GNULIB_ENVIRON!$GNULIB_ENVIRON$ac_delim
-GNULIB_EUIDACCESS!$GNULIB_EUIDACCESS$ac_delim
-GNULIB_FCHDIR!$GNULIB_FCHDIR$ac_delim
-GNULIB_FSYNC!$GNULIB_FSYNC$ac_delim
-GNULIB_FTRUNCATE!$GNULIB_FTRUNCATE$ac_delim
-GNULIB_GETCWD!$GNULIB_GETCWD$ac_delim
-GNULIB_GETDOMAINNAME!$GNULIB_GETDOMAINNAME$ac_delim
-GNULIB_GETDTABLESIZE!$GNULIB_GETDTABLESIZE$ac_delim
-GNULIB_GETHOSTNAME!$GNULIB_GETHOSTNAME$ac_delim
-GNULIB_GETLOGIN_R!$GNULIB_GETLOGIN_R$ac_delim
-GNULIB_GETPAGESIZE!$GNULIB_GETPAGESIZE$ac_delim
-GNULIB_GETUSERSHELL!$GNULIB_GETUSERSHELL$ac_delim
-GNULIB_LCHOWN!$GNULIB_LCHOWN$ac_delim
-GNULIB_LINK!$GNULIB_LINK$ac_delim
-GNULIB_LSEEK!$GNULIB_LSEEK$ac_delim
-GNULIB_READLINK!$GNULIB_READLINK$ac_delim
-GNULIB_SLEEP!$GNULIB_SLEEP$ac_delim
-GNULIB_UNISTD_H_SIGPIPE!$GNULIB_UNISTD_H_SIGPIPE$ac_delim
-GNULIB_WRITE!$GNULIB_WRITE$ac_delim
-HAVE_DUP2!$HAVE_DUP2$ac_delim
-HAVE_EUIDACCESS!$HAVE_EUIDACCESS$ac_delim
-HAVE_FSYNC!$HAVE_FSYNC$ac_delim
-HAVE_FTRUNCATE!$HAVE_FTRUNCATE$ac_delim
-HAVE_GETDOMAINNAME!$HAVE_GETDOMAINNAME$ac_delim
-HAVE_GETDTABLESIZE!$HAVE_GETDTABLESIZE$ac_delim
-HAVE_GETHOSTNAME!$HAVE_GETHOSTNAME$ac_delim
-HAVE_GETPAGESIZE!$HAVE_GETPAGESIZE$ac_delim
-HAVE_GETUSERSHELL!$HAVE_GETUSERSHELL$ac_delim
-HAVE_LINK!$HAVE_LINK$ac_delim
-HAVE_READLINK!$HAVE_READLINK$ac_delim
-HAVE_SLEEP!$HAVE_SLEEP$ac_delim
-HAVE_DECL_ENVIRON!$HAVE_DECL_ENVIRON$ac_delim
-HAVE_DECL_GETLOGIN_R!$HAVE_DECL_GETLOGIN_R$ac_delim
-HAVE_OS_H!$HAVE_OS_H$ac_delim
-HAVE_SYS_PARAM_H!$HAVE_SYS_PARAM_H$ac_delim
-REPLACE_CHOWN!$REPLACE_CHOWN$ac_delim
-REPLACE_CLOSE!$REPLACE_CLOSE$ac_delim
-REPLACE_FCHDIR!$REPLACE_FCHDIR$ac_delim
-REPLACE_GETCWD!$REPLACE_GETCWD$ac_delim
-REPLACE_GETPAGESIZE!$REPLACE_GETPAGESIZE$ac_delim
-REPLACE_LCHOWN!$REPLACE_LCHOWN$ac_delim
-REPLACE_LSEEK!$REPLACE_LSEEK$ac_delim
-REPLACE_WRITE!$REPLACE_WRITE$ac_delim
-UNISTD_H_HAVE_WINSOCK2_H!$UNISTD_H_HAVE_WINSOCK2_H$ac_delim
-LIB_CLOCK_GETTIME!$LIB_CLOCK_GETTIME$ac_delim
-GNULIB_DIRFD!$GNULIB_DIRFD$ac_delim
-GNULIB_SCANDIR!$GNULIB_SCANDIR$ac_delim
-GNULIB_ALPHASORT!$GNULIB_ALPHASORT$ac_delim
-HAVE_DECL_DIRFD!$HAVE_DECL_DIRFD$ac_delim
-HAVE_SCANDIR!$HAVE_SCANDIR$ac_delim
-HAVE_ALPHASORT!$HAVE_ALPHASORT$ac_delim
-DIRENT_H!$DIRENT_H$ac_delim
-INCLUDE_NEXT!$INCLUDE_NEXT$ac_delim
-INCLUDE_NEXT_AS_FIRST_DIRECTIVE!$INCLUDE_NEXT_AS_FIRST_DIRECTIVE$ac_delim
-PRAGMA_SYSTEM_HEADER!$PRAGMA_SYSTEM_HEADER$ac_delim
-NEXT_DIRENT_H!$NEXT_DIRENT_H$ac_delim
-NEXT_ERRNO_H!$NEXT_ERRNO_H$ac_delim
-ERRNO_H!$ERRNO_H$ac_delim
-EMULTIHOP_HIDDEN!$EMULTIHOP_HIDDEN$ac_delim
-EMULTIHOP_VALUE!$EMULTIHOP_VALUE$ac_delim
-_ACEOF
-
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
-    break
-  elif $ac_last_try; then
-    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
-   { (exit 1); exit 1; }; }
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
-if test -n "$ac_eof"; then
-  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
-  ac_eof=`expr $ac_eof + 1`
+ac_cr='\r'
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
 fi
 
-cat >>$CONFIG_STATUS <<_ACEOF
-cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-_ACEOF
-sed '
-s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
-s/^/s,@/; s/!/@,|#_!!_#|/
-:n
-t n
-s/'"$ac_delim"'$/,g/; t
-s/$/\\/; p
-N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
-' >>$CONFIG_STATUS <conf$$subs.sed
-rm -f conf$$subs.sed
-cat >>$CONFIG_STATUS <<_ACEOF
-CEOF$ac_eof
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
 _ACEOF
 
 
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  cat >conf$$subs.sed <<_ACEOF
-ENOLINK_HIDDEN!$ENOLINK_HIDDEN$ac_delim
-ENOLINK_VALUE!$ENOLINK_VALUE$ac_delim
-EOVERFLOW_HIDDEN!$EOVERFLOW_HIDDEN$ac_delim
-EOVERFLOW_VALUE!$EOVERFLOW_VALUE$ac_delim
-GNULIB_OPEN!$GNULIB_OPEN$ac_delim
-REPLACE_OPEN!$REPLACE_OPEN$ac_delim
-GNULIB_FPRINTF!$GNULIB_FPRINTF$ac_delim
-GNULIB_FPRINTF_POSIX!$GNULIB_FPRINTF_POSIX$ac_delim
-GNULIB_PRINTF!$GNULIB_PRINTF$ac_delim
-GNULIB_PRINTF_POSIX!$GNULIB_PRINTF_POSIX$ac_delim
-GNULIB_SNPRINTF!$GNULIB_SNPRINTF$ac_delim
-GNULIB_SPRINTF_POSIX!$GNULIB_SPRINTF_POSIX$ac_delim
-GNULIB_VFPRINTF!$GNULIB_VFPRINTF$ac_delim
-GNULIB_VFPRINTF_POSIX!$GNULIB_VFPRINTF_POSIX$ac_delim
-GNULIB_VPRINTF!$GNULIB_VPRINTF$ac_delim
-GNULIB_VPRINTF_POSIX!$GNULIB_VPRINTF_POSIX$ac_delim
-GNULIB_VSNPRINTF!$GNULIB_VSNPRINTF$ac_delim
-GNULIB_VSPRINTF_POSIX!$GNULIB_VSPRINTF_POSIX$ac_delim
-GNULIB_DPRINTF!$GNULIB_DPRINTF$ac_delim
-GNULIB_VDPRINTF!$GNULIB_VDPRINTF$ac_delim
-GNULIB_VASPRINTF!$GNULIB_VASPRINTF$ac_delim
-GNULIB_OBSTACK_PRINTF!$GNULIB_OBSTACK_PRINTF$ac_delim
-GNULIB_OBSTACK_PRINTF_POSIX!$GNULIB_OBSTACK_PRINTF_POSIX$ac_delim
-GNULIB_FOPEN!$GNULIB_FOPEN$ac_delim
-GNULIB_FREOPEN!$GNULIB_FREOPEN$ac_delim
-GNULIB_FSEEK!$GNULIB_FSEEK$ac_delim
-GNULIB_FSEEKO!$GNULIB_FSEEKO$ac_delim
-GNULIB_FTELL!$GNULIB_FTELL$ac_delim
-GNULIB_FTELLO!$GNULIB_FTELLO$ac_delim
-GNULIB_FFLUSH!$GNULIB_FFLUSH$ac_delim
-GNULIB_FCLOSE!$GNULIB_FCLOSE$ac_delim
-GNULIB_FPUTC!$GNULIB_FPUTC$ac_delim
-GNULIB_PUTC!$GNULIB_PUTC$ac_delim
-GNULIB_PUTCHAR!$GNULIB_PUTCHAR$ac_delim
-GNULIB_FPUTS!$GNULIB_FPUTS$ac_delim
-GNULIB_PUTS!$GNULIB_PUTS$ac_delim
-GNULIB_FWRITE!$GNULIB_FWRITE$ac_delim
-GNULIB_GETDELIM!$GNULIB_GETDELIM$ac_delim
-GNULIB_GETLINE!$GNULIB_GETLINE$ac_delim
-GNULIB_PERROR!$GNULIB_PERROR$ac_delim
-GNULIB_STDIO_H_SIGPIPE!$GNULIB_STDIO_H_SIGPIPE$ac_delim
-REPLACE_STDIO_WRITE_FUNCS!$REPLACE_STDIO_WRITE_FUNCS$ac_delim
-REPLACE_FPRINTF!$REPLACE_FPRINTF$ac_delim
-REPLACE_VFPRINTF!$REPLACE_VFPRINTF$ac_delim
-REPLACE_PRINTF!$REPLACE_PRINTF$ac_delim
-REPLACE_VPRINTF!$REPLACE_VPRINTF$ac_delim
-REPLACE_SNPRINTF!$REPLACE_SNPRINTF$ac_delim
-HAVE_DECL_SNPRINTF!$HAVE_DECL_SNPRINTF$ac_delim
-REPLACE_VSNPRINTF!$REPLACE_VSNPRINTF$ac_delim
-HAVE_DECL_VSNPRINTF!$HAVE_DECL_VSNPRINTF$ac_delim
-REPLACE_SPRINTF!$REPLACE_SPRINTF$ac_delim
-REPLACE_VSPRINTF!$REPLACE_VSPRINTF$ac_delim
-HAVE_DPRINTF!$HAVE_DPRINTF$ac_delim
-REPLACE_DPRINTF!$REPLACE_DPRINTF$ac_delim
-HAVE_VDPRINTF!$HAVE_VDPRINTF$ac_delim
-REPLACE_VDPRINTF!$REPLACE_VDPRINTF$ac_delim
-HAVE_VASPRINTF!$HAVE_VASPRINTF$ac_delim
-REPLACE_VASPRINTF!$REPLACE_VASPRINTF$ac_delim
-HAVE_DECL_OBSTACK_PRINTF!$HAVE_DECL_OBSTACK_PRINTF$ac_delim
-REPLACE_OBSTACK_PRINTF!$REPLACE_OBSTACK_PRINTF$ac_delim
-REPLACE_FOPEN!$REPLACE_FOPEN$ac_delim
-REPLACE_FREOPEN!$REPLACE_FREOPEN$ac_delim
-HAVE_FSEEKO!$HAVE_FSEEKO$ac_delim
-REPLACE_FSEEKO!$REPLACE_FSEEKO$ac_delim
-REPLACE_FSEEK!$REPLACE_FSEEK$ac_delim
-HAVE_FTELLO!$HAVE_FTELLO$ac_delim
-REPLACE_FTELLO!$REPLACE_FTELLO$ac_delim
-REPLACE_FTELL!$REPLACE_FTELL$ac_delim
-REPLACE_FFLUSH!$REPLACE_FFLUSH$ac_delim
-REPLACE_FCLOSE!$REPLACE_FCLOSE$ac_delim
-HAVE_DECL_GETDELIM!$HAVE_DECL_GETDELIM$ac_delim
-HAVE_DECL_GETLINE!$HAVE_DECL_GETLINE$ac_delim
-REPLACE_GETLINE!$REPLACE_GETLINE$ac_delim
-REPLACE_PERROR!$REPLACE_PERROR$ac_delim
-LIB_CLOSE!$LIB_CLOSE$ac_delim
-NEXT_FCNTL_H!$NEXT_FCNTL_H$ac_delim
-FCNTL_H!$FCNTL_H$ac_delim
-NEXT_FLOAT_H!$NEXT_FLOAT_H$ac_delim
-FLOAT_H!$FLOAT_H$ac_delim
-FNMATCH_H!$FNMATCH_H$ac_delim
-LIBINTL!$LIBINTL$ac_delim
-LTLIBINTL!$LTLIBINTL$ac_delim
-NEXT_SYS_TIME_H!$NEXT_SYS_TIME_H$ac_delim
-HAVE_SYS_TIME_H!$HAVE_SYS_TIME_H$ac_delim
-HAVE_STRUCT_TIMEVAL!$HAVE_STRUCT_TIMEVAL$ac_delim
-REPLACE_GETTIMEOFDAY!$REPLACE_GETTIMEOFDAY$ac_delim
-SYS_TIME_H!$SYS_TIME_H$ac_delim
-HAVE_LONG_LONG_INT!$HAVE_LONG_LONG_INT$ac_delim
-HAVE_UNSIGNED_LONG_LONG_INT!$HAVE_UNSIGNED_LONG_LONG_INT$ac_delim
-HAVE_INTTYPES_H!$HAVE_INTTYPES_H$ac_delim
-HAVE_SYS_TYPES_H!$HAVE_SYS_TYPES_H$ac_delim
-NEXT_STDINT_H!$NEXT_STDINT_H$ac_delim
-HAVE_STDINT_H!$HAVE_STDINT_H$ac_delim
-HAVE_SYS_INTTYPES_H!$HAVE_SYS_INTTYPES_H$ac_delim
-HAVE_SYS_BITYPES_H!$HAVE_SYS_BITYPES_H$ac_delim
-APPLE_UNIVERSAL_BUILD!$APPLE_UNIVERSAL_BUILD$ac_delim
-BITSIZEOF_PTRDIFF_T!$BITSIZEOF_PTRDIFF_T$ac_delim
-_ACEOF
-
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
-    break
-  elif $ac_last_try; then
-    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
    { (exit 1); exit 1; }; }
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
-if test -n "$ac_eof"; then
-  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
-  ac_eof=`expr $ac_eof + 1`
-fi
-
-cat >>$CONFIG_STATUS <<_ACEOF
-cat >"\$tmp/subs-3.sed" <<\CEOF$ac_eof
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-_ACEOF
-sed '
-s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
-s/^/s,@/; s/!/@,|#_!!_#|/
-:n
-t n
-s/'"$ac_delim"'$/,g/; t
-s/$/\\/; p
-N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
-' >>$CONFIG_STATUS <conf$$subs.sed
-rm -f conf$$subs.sed
-cat >>$CONFIG_STATUS <<_ACEOF
-CEOF$ac_eof
-_ACEOF
-
-
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
-  cat >conf$$subs.sed <<_ACEOF
-BITSIZEOF_SIZE_T!$BITSIZEOF_SIZE_T$ac_delim
-BITSIZEOF_SIG_ATOMIC_T!$BITSIZEOF_SIG_ATOMIC_T$ac_delim
-BITSIZEOF_WCHAR_T!$BITSIZEOF_WCHAR_T$ac_delim
-BITSIZEOF_WINT_T!$BITSIZEOF_WINT_T$ac_delim
-HAVE_SIGNED_SIG_ATOMIC_T!$HAVE_SIGNED_SIG_ATOMIC_T$ac_delim
-HAVE_SIGNED_WCHAR_T!$HAVE_SIGNED_WCHAR_T$ac_delim
-HAVE_SIGNED_WINT_T!$HAVE_SIGNED_WINT_T$ac_delim
-PTRDIFF_T_SUFFIX!$PTRDIFF_T_SUFFIX$ac_delim
-SIZE_T_SUFFIX!$SIZE_T_SUFFIX$ac_delim
-SIG_ATOMIC_T_SUFFIX!$SIG_ATOMIC_T_SUFFIX$ac_delim
-WCHAR_T_SUFFIX!$WCHAR_T_SUFFIX$ac_delim
-WINT_T_SUFFIX!$WINT_T_SUFFIX$ac_delim
-STDINT_H!$STDINT_H$ac_delim
-PRI_MACROS_BROKEN!$PRI_MACROS_BROKEN$ac_delim
-GNULIB_IMAXABS!$GNULIB_IMAXABS$ac_delim
-GNULIB_IMAXDIV!$GNULIB_IMAXDIV$ac_delim
-GNULIB_STRTOIMAX!$GNULIB_STRTOIMAX$ac_delim
-GNULIB_STRTOUMAX!$GNULIB_STRTOUMAX$ac_delim
-HAVE_DECL_IMAXABS!$HAVE_DECL_IMAXABS$ac_delim
-HAVE_DECL_IMAXDIV!$HAVE_DECL_IMAXDIV$ac_delim
-HAVE_DECL_STRTOIMAX!$HAVE_DECL_STRTOIMAX$ac_delim
-HAVE_DECL_STRTOUMAX!$HAVE_DECL_STRTOUMAX$ac_delim
-NEXT_INTTYPES_H!$NEXT_INTTYPES_H$ac_delim
-PRIPTR_PREFIX!$PRIPTR_PREFIX$ac_delim
-INT32_MAX_LT_INTMAX_MAX!$INT32_MAX_LT_INTMAX_MAX$ac_delim
-INT64_MAX_EQ_LONG_MAX!$INT64_MAX_EQ_LONG_MAX$ac_delim
-UINT32_MAX_LT_UINTMAX_MAX!$UINT32_MAX_LT_UINTMAX_MAX$ac_delim
-UINT64_MAX_EQ_ULONG_MAX!$UINT64_MAX_EQ_ULONG_MAX$ac_delim
-INTTYPES_H!$INTTYPES_H$ac_delim
-GLIBC21!$GLIBC21$ac_delim
-LOCALCHARSET_TESTS_ENVIRONMENT!$LOCALCHARSET_TESTS_ENVIRONMENT$ac_delim
-GNULIB_LCHMOD!$GNULIB_LCHMOD$ac_delim
-GNULIB_LSTAT!$GNULIB_LSTAT$ac_delim
-HAVE_LCHMOD!$HAVE_LCHMOD$ac_delim
-REPLACE_LSTAT!$REPLACE_LSTAT$ac_delim
-REPLACE_MKDIR!$REPLACE_MKDIR$ac_delim
-HAVE_MALLOC_POSIX!$HAVE_MALLOC_POSIX$ac_delim
-GNULIB_MALLOC_POSIX!$GNULIB_MALLOC_POSIX$ac_delim
-GNULIB_REALLOC_POSIX!$GNULIB_REALLOC_POSIX$ac_delim
-GNULIB_CALLOC_POSIX!$GNULIB_CALLOC_POSIX$ac_delim
-GNULIB_ATOLL!$GNULIB_ATOLL$ac_delim
-GNULIB_GETLOADAVG!$GNULIB_GETLOADAVG$ac_delim
-GNULIB_GETSUBOPT!$GNULIB_GETSUBOPT$ac_delim
-GNULIB_MKDTEMP!$GNULIB_MKDTEMP$ac_delim
-GNULIB_MKSTEMP!$GNULIB_MKSTEMP$ac_delim
-GNULIB_PUTENV!$GNULIB_PUTENV$ac_delim
-GNULIB_RANDOM_R!$GNULIB_RANDOM_R$ac_delim
-GNULIB_RPMATCH!$GNULIB_RPMATCH$ac_delim
-GNULIB_SETENV!$GNULIB_SETENV$ac_delim
-GNULIB_STRTOD!$GNULIB_STRTOD$ac_delim
-GNULIB_STRTOLL!$GNULIB_STRTOLL$ac_delim
-GNULIB_STRTOULL!$GNULIB_STRTOULL$ac_delim
-GNULIB_UNSETENV!$GNULIB_UNSETENV$ac_delim
-HAVE_ATOLL!$HAVE_ATOLL$ac_delim
-HAVE_CALLOC_POSIX!$HAVE_CALLOC_POSIX$ac_delim
-HAVE_GETSUBOPT!$HAVE_GETSUBOPT$ac_delim
-HAVE_MKDTEMP!$HAVE_MKDTEMP$ac_delim
-HAVE_REALLOC_POSIX!$HAVE_REALLOC_POSIX$ac_delim
-HAVE_RANDOM_R!$HAVE_RANDOM_R$ac_delim
-HAVE_RPMATCH!$HAVE_RPMATCH$ac_delim
-HAVE_SETENV!$HAVE_SETENV$ac_delim
-HAVE_STRTOD!$HAVE_STRTOD$ac_delim
-HAVE_STRTOLL!$HAVE_STRTOLL$ac_delim
-HAVE_STRTOULL!$HAVE_STRTOULL$ac_delim
-HAVE_STRUCT_RANDOM_DATA!$HAVE_STRUCT_RANDOM_DATA$ac_delim
-HAVE_SYS_LOADAVG_H!$HAVE_SYS_LOADAVG_H$ac_delim
-HAVE_UNSETENV!$HAVE_UNSETENV$ac_delim
-HAVE_DECL_GETLOADAVG!$HAVE_DECL_GETLOADAVG$ac_delim
-REPLACE_MKSTEMP!$REPLACE_MKSTEMP$ac_delim
-REPLACE_PUTENV!$REPLACE_PUTENV$ac_delim
-REPLACE_STRTOD!$REPLACE_STRTOD$ac_delim
-VOID_UNSETENV!$VOID_UNSETENV$ac_delim
-LOCALE_JA!$LOCALE_JA$ac_delim
-LOCALE_FR_UTF8!$LOCALE_FR_UTF8$ac_delim
-LOCALE_ZH_CN!$LOCALE_ZH_CN$ac_delim
-GNULIB_MEMMEM!$GNULIB_MEMMEM$ac_delim
-GNULIB_MEMPCPY!$GNULIB_MEMPCPY$ac_delim
-GNULIB_MEMRCHR!$GNULIB_MEMRCHR$ac_delim
-GNULIB_RAWMEMCHR!$GNULIB_RAWMEMCHR$ac_delim
-GNULIB_STPCPY!$GNULIB_STPCPY$ac_delim
-GNULIB_STPNCPY!$GNULIB_STPNCPY$ac_delim
-GNULIB_STRCHRNUL!$GNULIB_STRCHRNUL$ac_delim
-GNULIB_STRDUP!$GNULIB_STRDUP$ac_delim
-GNULIB_STRNDUP!$GNULIB_STRNDUP$ac_delim
-GNULIB_STRNLEN!$GNULIB_STRNLEN$ac_delim
-GNULIB_STRPBRK!$GNULIB_STRPBRK$ac_delim
-GNULIB_STRSEP!$GNULIB_STRSEP$ac_delim
-GNULIB_STRSTR!$GNULIB_STRSTR$ac_delim
-GNULIB_STRCASESTR!$GNULIB_STRCASESTR$ac_delim
-GNULIB_STRTOK_R!$GNULIB_STRTOK_R$ac_delim
-GNULIB_MBSLEN!$GNULIB_MBSLEN$ac_delim
-GNULIB_MBSNLEN!$GNULIB_MBSNLEN$ac_delim
-GNULIB_MBSCHR!$GNULIB_MBSCHR$ac_delim
-GNULIB_MBSRCHR!$GNULIB_MBSRCHR$ac_delim
-GNULIB_MBSSTR!$GNULIB_MBSSTR$ac_delim
-GNULIB_MBSCASECMP!$GNULIB_MBSCASECMP$ac_delim
-GNULIB_MBSNCASECMP!$GNULIB_MBSNCASECMP$ac_delim
-_ACEOF
-
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
-    break
-  elif $ac_last_try; then
-    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+  . ./conf$$subs.sh ||
+    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
    { (exit 1); exit 1; }; }
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
-if test -n "$ac_eof"; then
-  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
-  ac_eof=`expr $ac_eof + 1`
-fi
 
-cat >>$CONFIG_STATUS <<_ACEOF
-cat >"\$tmp/subs-4.sed" <<\CEOF$ac_eof
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-_ACEOF
-sed '
-s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
-s/^/s,@/; s/!/@,|#_!!_#|/
-:n
-t n
-s/'"$ac_delim"'$/,g/; t
-s/$/\\/; p
-N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
-' >>$CONFIG_STATUS <conf$$subs.sed
-rm -f conf$$subs.sed
-cat >>$CONFIG_STATUS <<_ACEOF
-CEOF$ac_eof
-_ACEOF
-
-
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  cat >conf$$subs.sed <<_ACEOF
-GNULIB_MBSPCASECMP!$GNULIB_MBSPCASECMP$ac_delim
-GNULIB_MBSCASESTR!$GNULIB_MBSCASESTR$ac_delim
-GNULIB_MBSCSPN!$GNULIB_MBSCSPN$ac_delim
-GNULIB_MBSPBRK!$GNULIB_MBSPBRK$ac_delim
-GNULIB_MBSSPN!$GNULIB_MBSSPN$ac_delim
-GNULIB_MBSSEP!$GNULIB_MBSSEP$ac_delim
-GNULIB_MBSTOK_R!$GNULIB_MBSTOK_R$ac_delim
-GNULIB_STRERROR!$GNULIB_STRERROR$ac_delim
-GNULIB_STRSIGNAL!$GNULIB_STRSIGNAL$ac_delim
-GNULIB_STRVERSCMP!$GNULIB_STRVERSCMP$ac_delim
-HAVE_DECL_MEMMEM!$HAVE_DECL_MEMMEM$ac_delim
-HAVE_MEMPCPY!$HAVE_MEMPCPY$ac_delim
-HAVE_DECL_MEMRCHR!$HAVE_DECL_MEMRCHR$ac_delim
-HAVE_RAWMEMCHR!$HAVE_RAWMEMCHR$ac_delim
-HAVE_STPCPY!$HAVE_STPCPY$ac_delim
-HAVE_STPNCPY!$HAVE_STPNCPY$ac_delim
-HAVE_STRCHRNUL!$HAVE_STRCHRNUL$ac_delim
-HAVE_DECL_STRDUP!$HAVE_DECL_STRDUP$ac_delim
-HAVE_STRNDUP!$HAVE_STRNDUP$ac_delim
-HAVE_DECL_STRNDUP!$HAVE_DECL_STRNDUP$ac_delim
-HAVE_DECL_STRNLEN!$HAVE_DECL_STRNLEN$ac_delim
-HAVE_STRPBRK!$HAVE_STRPBRK$ac_delim
-HAVE_STRSEP!$HAVE_STRSEP$ac_delim
-HAVE_STRCASESTR!$HAVE_STRCASESTR$ac_delim
-HAVE_DECL_STRTOK_R!$HAVE_DECL_STRTOK_R$ac_delim
-HAVE_DECL_STRERROR!$HAVE_DECL_STRERROR$ac_delim
-HAVE_DECL_STRSIGNAL!$HAVE_DECL_STRSIGNAL$ac_delim
-HAVE_STRVERSCMP!$HAVE_STRVERSCMP$ac_delim
-REPLACE_MEMMEM!$REPLACE_MEMMEM$ac_delim
-REPLACE_STRDUP!$REPLACE_STRDUP$ac_delim
-REPLACE_STRSTR!$REPLACE_STRSTR$ac_delim
-REPLACE_STRCASESTR!$REPLACE_STRCASESTR$ac_delim
-REPLACE_STRERROR!$REPLACE_STRERROR$ac_delim
-REPLACE_STRSIGNAL!$REPLACE_STRSIGNAL$ac_delim
-STDARG_H!$STDARG_H$ac_delim
-NEXT_STDARG_H!$NEXT_STDARG_H$ac_delim
-NEXT_STDIO_H!$NEXT_STDIO_H$ac_delim
-NEXT_STDLIB_H!$NEXT_STDLIB_H$ac_delim
-HAVE_RANDOM_H!$HAVE_RANDOM_H$ac_delim
-HAVE_STRCASECMP!$HAVE_STRCASECMP$ac_delim
-HAVE_DECL_STRNCASECMP!$HAVE_DECL_STRNCASECMP$ac_delim
-NEXT_STRING_H!$NEXT_STRING_H$ac_delim
-NEXT_STRINGS_H!$NEXT_STRINGS_H$ac_delim
-HAVE_LSTAT!$HAVE_LSTAT$ac_delim
-NEXT_SYS_STAT_H!$NEXT_SYS_STAT_H$ac_delim
-SYS_STAT_H!$SYS_STAT_H$ac_delim
-NEXT_SYSEXITS_H!$NEXT_SYSEXITS_H$ac_delim
-HAVE_SYSEXITS_H!$HAVE_SYSEXITS_H$ac_delim
-SYSEXITS_H!$SYSEXITS_H$ac_delim
-REPLACE_LOCALTIME_R!$REPLACE_LOCALTIME_R$ac_delim
-REPLACE_NANOSLEEP!$REPLACE_NANOSLEEP$ac_delim
-REPLACE_STRPTIME!$REPLACE_STRPTIME$ac_delim
-REPLACE_TIMEGM!$REPLACE_TIMEGM$ac_delim
-NEXT_TIME_H!$NEXT_TIME_H$ac_delim
-TIME_H_DEFINES_STRUCT_TIMESPEC!$TIME_H_DEFINES_STRUCT_TIMESPEC$ac_delim
-SYS_TIME_H_DEFINES_STRUCT_TIMESPEC!$SYS_TIME_H_DEFINES_STRUCT_TIMESPEC$ac_delim
-NEXT_UNISTD_H!$NEXT_UNISTD_H$ac_delim
-HAVE_UNISTD_H!$HAVE_UNISTD_H$ac_delim
-HAVE_WINT_T!$HAVE_WINT_T$ac_delim
-HAVE_WCHAR_H!$HAVE_WCHAR_H$ac_delim
-NEXT_WCHAR_H!$NEXT_WCHAR_H$ac_delim
-HAVE_ISWCNTRL!$HAVE_ISWCNTRL$ac_delim
-NEXT_WCTYPE_H!$NEXT_WCTYPE_H$ac_delim
-HAVE_WCTYPE_H!$HAVE_WCTYPE_H$ac_delim
-WCTYPE_H!$WCTYPE_H$ac_delim
-REPLACE_ISWCNTRL!$REPLACE_ISWCNTRL$ac_delim
-LIBTAR_LIBDEPS!$LIBTAR_LIBDEPS$ac_delim
-LIBTAR_LTLIBDEPS!$LIBTAR_LTLIBDEPS$ac_delim
-LIB_SETSOCKOPT!$LIB_SETSOCKOPT$ac_delim
-PU_RMT_PROG!$PU_RMT_PROG$ac_delim
-DEFAULT_RMT_DIR!$DEFAULT_RMT_DIR$ac_delim
-DEFAULT_RMT_COMMAND!$DEFAULT_RMT_COMMAND$ac_delim
-LIBOBJS!$LIBOBJS$ac_delim
-DEFAULT_ARCHIVE_FORMAT!$DEFAULT_ARCHIVE_FORMAT$ac_delim
-DEFAULT_ARCHIVE!$DEFAULT_ARCHIVE$ac_delim
-DEFAULT_BLOCKING!$DEFAULT_BLOCKING$ac_delim
-DEFAULT_QUOTING_STYLE!$DEFAULT_QUOTING_STYLE$ac_delim
-LIBICONV!$LIBICONV$ac_delim
-LTLIBICONV!$LTLIBICONV$ac_delim
-USE_NLS!$USE_NLS$ac_delim
-GETTEXT_MACRO_VERSION!$GETTEXT_MACRO_VERSION$ac_delim
-MSGFMT!$MSGFMT$ac_delim
-GMSGFMT!$GMSGFMT$ac_delim
-MSGFMT_015!$MSGFMT_015$ac_delim
-GMSGFMT_015!$GMSGFMT_015$ac_delim
-XGETTEXT!$XGETTEXT$ac_delim
-XGETTEXT_015!$XGETTEXT_015$ac_delim
-MSGMERGE!$MSGMERGE$ac_delim
-XGETTEXT_EXTRA_OPTIONS!$XGETTEXT_EXTRA_OPTIONS$ac_delim
-INTL_MACOSX_LIBS!$INTL_MACOSX_LIBS$ac_delim
-INTLLIBS!$INTLLIBS$ac_delim
-POSUB!$POSUB$ac_delim
-AUTOM4TE!$AUTOM4TE$ac_delim
-BACKUP_LIBEXEC_SCRIPTS!$BACKUP_LIBEXEC_SCRIPTS$ac_delim
-BACKUP_SBIN_SCRIPTS!$BACKUP_SBIN_SCRIPTS$ac_delim
-BACKUP_SED_COND!$BACKUP_SED_COND$ac_delim
-LTLIBOBJS!$LTLIBOBJS$ac_delim
-_ACEOF
-
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
     break
   elif $ac_last_try; then
-    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
    { (exit 1); exit 1; }; }
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
 done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\).*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\).*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = "\a"
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
 
-ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
-if test -n "$ac_eof"; then
-  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
-  ac_eof=`expr $ac_eof + 1`
-fi
-
-cat >>$CONFIG_STATUS <<_ACEOF
-cat >"\$tmp/subs-5.sed" <<\CEOF$ac_eof
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-_ACEOF
-sed '
-s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
-s/^/s,@/; s/!/@,|#_!!_#|/
-:n
-t n
-s/'"$ac_delim"'$/,g/; t
-s/$/\\/; p
-N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
-' >>$CONFIG_STATUS <conf$$subs.sed
-rm -f conf$$subs.sed
-cat >>$CONFIG_STATUS <<_ACEOF
-CEOF$ac_eof
-_ACEOF
-
+  print line
+}
 
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  cat >conf$$subs.sed <<_ACEOF
-gl_LIBOBJS!$gl_LIBOBJS$ac_delim
-gl_LTLIBOBJS!$gl_LTLIBOBJS$ac_delim
-gltests_LIBOBJS!$gltests_LIBOBJS$ac_delim
-gltests_LTLIBOBJS!$gltests_LTLIBOBJS$ac_delim
+_ACAWK
 _ACEOF
-
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 4; then
-    break
-  elif $ac_last_try; then
-    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+  || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5
+$as_echo "$as_me: error: could not setup config files machinery" >&2;}
    { (exit 1); exit 1; }; }
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
-if test -n "$ac_eof"; then
-  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
-  ac_eof=`expr $ac_eof + 1`
-fi
-
-cat >>$CONFIG_STATUS <<_ACEOF
-cat >"\$tmp/subs-6.sed" <<\CEOF$ac_eof
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
 _ACEOF
-sed '
-s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
-s/^/s,@/; s/!/@,|#_!!_#|/
-:n
-t n
-s/'"$ac_delim"'$/,g/; t
-s/$/\\/; p
-N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
-' >>$CONFIG_STATUS <conf$$subs.sed
-rm -f conf$$subs.sed
-cat >>$CONFIG_STATUS <<_ACEOF
-:end
-s/|#_!!_#|//g
-CEOF$ac_eof
-_ACEOF
-
 
 # VPATH may cause trouble with some makes, so we remove $(srcdir),
 # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
@@ -43648,19 +52086,133 @@ s/^[^=]*=[    ]*$//
 }'
 fi
 
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 fi # test -n "$CONFIG_FILES"
 
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
 
-for ac_tag in  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_t"; then
+    break
+  elif $ac_last_try; then
+    { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5
+$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[    ]*#[    ]*define[       ][      ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[    ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[        ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[    ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[        ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = "\a"
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5
+$as_echo "$as_me: error: could not setup config headers machinery" >&2;}
+   { (exit 1); exit 1; }; }
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+shift
+for ac_tag
 do
   case $ac_tag in
   :[FHLC]) ac_mode=$ac_tag; continue;;
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
-echo "$as_me: error: Invalid tag $ac_tag." >&2;}
+  :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5
+$as_echo "$as_me: error: invalid tag $ac_tag" >&2;}
    { (exit 1); exit 1; }; };;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
@@ -43689,26 +52241,38 @@ echo "$as_me: error: Invalid tag $ac_tag." >&2;}
           [\\/$]*) false;;
           *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
           esac ||
-          { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
-echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+          { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;}
    { (exit 1); exit 1; }; };;
       esac
-      ac_file_inputs="$ac_file_inputs $ac_f"
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      ac_file_inputs="$ac_file_inputs '$ac_f'"
     done
 
     # Let's still pretend it is `configure' which instantiates (i.e., don't
     # use $as_me), people would be surprised to read:
     #    /* config.h.  Generated by config.status.  */
-    configure_input="Generated from "`IFS=:
-         echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+    configure_input='Generated from '`
+         $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+       `' by configure.'
     if test x"$ac_file" != x-; then
       configure_input="$ac_file.  $configure_input"
-      { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
+      { $as_echo "$as_me:$LINENO: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
     fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin";;
+    *:-:* | *:-) cat >"$tmp/stdin" \
+      || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; } ;;
     esac
     ;;
   esac
@@ -43718,7 +52282,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$ac_file" : 'X\(//\)[^/]' \| \
         X"$ac_file" : 'X\(//\)$' \| \
         X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$ac_file" |
+$as_echo X"$ac_file" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -43744,7 +52308,7 @@ echo X"$ac_file" |
     as_dirs=
     while :; do
       case $as_dir in #(
-      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
       *) as_qdir=$as_dir;;
       esac
       as_dirs="'$as_qdir' $as_dirs"
@@ -43753,7 +52317,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$as_dir" : 'X\(//\)[^/]' \| \
         X"$as_dir" : 'X\(//\)$' \| \
         X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$as_dir" |
+$as_echo X"$as_dir" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -43774,17 +52338,17 @@ echo X"$as_dir" |
       test -d "$as_dir" && break
     done
     test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-echo "$as_me: error: cannot create directory $as_dir" >&2;}
+  } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
    { (exit 1); exit 1; }; }; }
   ac_builddir=.
 
 case "$ac_dir" in
 .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
 *)
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
   # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
   case $ac_top_builddir_sub in
   "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
   *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -43829,12 +52393,13 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
   esac
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # If the template does not know about datarootdir, expand it.
 # FIXME: This hack should be removed a few years after 2.60.
 ac_datarootdir_hack=; ac_datarootdir_seen=
 
-case `sed -n '/datarootdir/ {
+ac_sed_dataroot='
+/datarootdir/ {
   p
   q
 }
@@ -43843,13 +52408,14 @@ case `sed -n '/datarootdir/ {
 /@infodir@/p
 /@localedir@/p
 /@mandir@/p
-' $ac_file_inputs` in
+'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
 *datarootdir*) ac_datarootdir_seen=yes;;
 *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+  { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
 _ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
   ac_datarootdir_hack='
   s&@datadir@&$datadir&g
   s&@docdir@&$docdir&g
@@ -43863,15 +52429,16 @@ _ACEOF
 # Neutralize VPATH when `$srcdir' = `.'.
 # Shell code in configure.ac might set extrasub.
 # FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF
-  sed "$ac_vpsub
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
 $extrasub
 _ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 :t
 /@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s&@configure_input@&$configure_input&;t t
+s|@configure_input@|$ac_sed_conf_input|;t t
 s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
 s&@srcdir@&$ac_srcdir&;t t
 s&@abs_srcdir@&$ac_abs_srcdir&;t t
 s&@top_srcdir@&$ac_top_srcdir&;t t
@@ -43882,121 +52449,60 @@ s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
 s&@INSTALL@&$ac_INSTALL&;t t
 s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
-" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" | sed -f "$tmp/subs-3.sed" | sed -f "$tmp/subs-4.sed" | sed -f "$tmp/subs-5.sed" | sed -f "$tmp/subs-6.sed" >$tmp/out
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+  || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
 
 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
   { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
   { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
-  { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+  { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined." >&5
-echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined." >&2;}
 
   rm -f "$tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out"; rm -f "$tmp/out";;
-  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
-  esac
+  -) cat "$tmp/out" && rm -f "$tmp/out";;
+  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  esac \
+  || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
  ;;
   :H)
   #
   # CONFIG_HEADER
   #
-_ACEOF
-
-# Transform confdefs.h into a sed script `conftest.defines', that
-# substitutes the proper values into config.h.in to produce config.h.
-rm -f conftest.defines conftest.tail
-# First, append a space to every undef/define line, to ease matching.
-echo 's/$/ /' >conftest.defines
-# Then, protect against being on the right side of a sed subst, or in
-# an unquoted here document, in config.status.  If some macros were
-# called several times there might be several #defines for the same
-# symbol, which is useless.  But do not sort them, since the last
-# AC_DEFINE must be honored.
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
-# NAME is the cpp macro being defined, VALUE is the value it is being given.
-# PARAMS is the parameter list in the macro definition--in most cases, it's
-# just an empty string.
-ac_dA='s,^\\([  #]*\\)[^        ]*\\([  ]*'
-ac_dB='\\)[     (].*,\\1define\\2'
-ac_dC=' '
-ac_dD=' ,'
-
-uniq confdefs.h |
-  sed -n '
-       t rset
-       :rset
-       s/^[     ]*#[    ]*define[       ][      ]*//
-       t ok
-       d
-       :ok
-       s/[\\&,]/\\&/g
-       s/^\('"$ac_word_re"'\)\(([^()]*)\)[      ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
-       s/^\('"$ac_word_re"'\)[  ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
-  ' >>conftest.defines
-
-# Remove the space that was appended to ease matching.
-# Then replace #undef with comments.  This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-# (The regexp can be short, since the line contains either #define or #undef.)
-echo 's/ $//
-s,^[    #]*u.*,/* & */,' >>conftest.defines
-
-# Break up conftest.defines:
-ac_max_sed_lines=50
-
-# First sed command is:         sed -f defines.sed $ac_file_inputs >"$tmp/out1"
-# Second one is:        sed -f defines.sed "$tmp/out1" >"$tmp/out2"
-# Third one will be:    sed -f defines.sed "$tmp/out2" >"$tmp/out1"
-# et cetera.
-ac_in='$ac_file_inputs'
-ac_out='"$tmp/out1"'
-ac_nxt='"$tmp/out2"'
-
-while :
-do
-  # Write a here document:
-    cat >>$CONFIG_STATUS <<_ACEOF
-    # First, check the format of the line:
-    cat >"\$tmp/defines.sed" <<\\CEOF
-/^[     ]*#[    ]*undef[        ][      ]*$ac_word_re[  ]*\$/b def
-/^[     ]*#[    ]*define[       ][      ]*$ac_word_re[(         ]/b def
-b
-:def
-_ACEOF
-  sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
-  echo 'CEOF
-    sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
-  ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
-  sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
-  grep . conftest.tail >/dev/null || break
-  rm -f conftest.defines
-  mv conftest.tail conftest.defines
-done
-rm -f conftest.defines conftest.tail
-
-echo "ac_result=$ac_in" >>$CONFIG_STATUS
-cat >>$CONFIG_STATUS <<\_ACEOF
   if test x"$ac_file" != x-; then
-    echo "/* $configure_input  */" >"$tmp/config.h"
-    cat "$ac_result" >>"$tmp/config.h"
-    if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
-      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-echo "$as_me: $ac_file is unchanged" >&6;}
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+    } >"$tmp/config.h" \
+      || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
+    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
-      rm -f $ac_file
-      mv "$tmp/config.h" $ac_file
+      rm -f "$ac_file"
+      mv "$tmp/config.h" "$ac_file" \
+       || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5
+$as_echo "$as_me: error: could not create $ac_file" >&2;}
+   { (exit 1); exit 1; }; }
     fi
   else
-    echo "/* $configure_input  */"
-    cat "$ac_result"
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5
+$as_echo "$as_me: error: could not create -" >&2;}
+   { (exit 1); exit 1; }; }
   fi
-  rm -f "$tmp/out12"
-# Compute $ac_file's index in $config_headers.
-_am_arg=$ac_file
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
 _am_stamp_count=1
 for _am_header in $config_headers :; do
   case $_am_header in
@@ -44011,7 +52517,7 @@ $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$_am_arg" : 'X\(//\)[^/]' \| \
         X"$_am_arg" : 'X\(//\)$' \| \
         X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$_am_arg" |
+$as_echo X"$_am_arg" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -44031,30 +52537,40 @@ echo X"$_am_arg" |
          s/.*/./; q'`/stamp-h$_am_stamp_count
  ;;
 
-  :C)  { echo "$as_me:$LINENO: executing $ac_file commands" >&5
-echo "$as_me: executing $ac_file commands" >&6;}
+  :C)  { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
  ;;
   esac
 
 
   case $ac_file$ac_mode in
-    "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
-  # Strip MF so we end up with the name of the file.
-  mf=`echo "$mf" | sed -e 's/:.*$//'`
-  # Check whether this is an Automake generated Makefile or not.
-  # We used to match only the files named `Makefile.in', but
-  # some people rename them; so instead we look at the file content.
-  # Grep'ing the first line is not enough: some people post-process
-  # each Makefile.in and add a new line on top of each file to say so.
-  # Grep'ing the whole file is not good either: AIX grep has a line
-  # limit of 2048, but all sed's we know have understand at least 4000.
-  if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
-    dirpart=`$as_dirname -- "$mf" ||
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`$as_dirname -- "$mf" ||
 $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$mf" : 'X\(//\)[^/]' \| \
         X"$mf" : 'X\(//\)$' \| \
         X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$mf" |
+$as_echo X"$mf" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -44072,33 +52588,33 @@ echo X"$mf" |
            q
          }
          s/.*/./; q'`
-  else
-    continue
-  fi
-  # Extract the definition of DEPDIR, am__include, and am__quote
-  # from the Makefile without running `make'.
-  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-  test -z "$DEPDIR" && continue
-  am__include=`sed -n 's/^am__include = //p' < "$mf"`
-  test -z "am__include" && continue
-  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-  # When using ansi2knr, U may be empty or an underscore; expand it
-  U=`sed -n 's/^U = //p' < "$mf"`
-  # Find all dependency output files, they are included files with
-  # $(DEPDIR) in their names.  We invoke sed twice because it is the
-  # simplest approach to changing $(DEPDIR) to its actual value in the
-  # expansion.
-  for file in `sed -n "
-    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-    # Make sure the directory exists.
-    test -f "$dirpart/$file" && continue
-    fdir=`$as_dirname -- "$file" ||
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`$as_dirname -- "$file" ||
 $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$file" : 'X\(//\)[^/]' \| \
         X"$file" : 'X\(//\)$' \| \
         X"$file" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$file" |
+$as_echo X"$file" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -44116,7 +52632,7 @@ echo X"$file" |
            q
          }
          s/.*/./; q'`
-    { as_dir=$dirpart/$fdir
+      { as_dir=$dirpart/$fdir
   case $as_dir in #(
   -*) as_dir=./$as_dir;;
   esac
@@ -44124,7 +52640,7 @@ echo X"$file" |
     as_dirs=
     while :; do
       case $as_dir in #(
-      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
       *) as_qdir=$as_dir;;
       esac
       as_dirs="'$as_qdir' $as_dirs"
@@ -44133,7 +52649,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$as_dir" : 'X\(//\)[^/]' \| \
         X"$as_dir" : 'X\(//\)$' \| \
         X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$as_dir" |
+$as_echo X"$as_dir" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -44154,13 +52670,14 @@ echo X"$as_dir" |
       test -d "$as_dir" && break
     done
     test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-echo "$as_me: error: cannot create directory $as_dir" >&2;}
+  } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
    { (exit 1); exit 1; }; }; }
-    # echo "creating $dirpart/$file"
-    echo '# dummy' > "$dirpart/$file"
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
   done
-done
+}
  ;;
     "po-directories":C)
     for ac_file in $CONFIG_FILES; do
@@ -44308,6 +52825,11 @@ _ACEOF
 chmod +x $CONFIG_STATUS
 ac_clean_files=$ac_clean_files_save
 
+test $ac_write_fail = 0 ||
+  { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+
 
 # configure is writing to config.log, and then calls config.status.
 # config.status does its own redirection, appending to config.log.
@@ -44329,4 +52851,8 @@ if test "$no_create" != yes; then
   # would make configure fail if this is the last instruction.
   $ac_cs_success || { (exit 1); exit 1; }
 fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
 
index 762f8e4576dbf536893c172584f55593b9066e19..5535b7097a97ef382d9107959b0da189ebc1d85f 100644 (file)
@@ -1,7 +1,8 @@
 # Configure template for GNU tar.  -*- autoconf -*-
 
 # Copyright (C) 1991, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 # 02110-1301, USA.
 
-AC_INIT([GNU tar], [1.22], [bug-tar@gnu.org])
+AC_INIT([GNU tar], [1.23], [bug-tar@gnu.org])
 AC_CONFIG_SRCDIR([src/tar.c])
 AC_CONFIG_AUX_DIR([build-aux])
-AC_CONFIG_HEADERS([config.h:config.hin])
-AC_PREREQ([2.60])
-AM_INIT_AUTOMAKE([1.9 gnits tar-ustar dist-bzip2 dist-shar std-options])
+AC_CONFIG_HEADERS([config.h])
+AC_PREREQ([2.63])
+AM_INIT_AUTOMAKE([1.11 gnits tar-ustar dist-bzip2 dist-shar std-options silent-rules])
+
+# Enable silent rules by default:
+AM_SILENT_RULES([yes])
 
 AC_PROG_CC
 AC_EXEEXT
@@ -48,7 +52,6 @@ AC_CHECK_HEADERS([sys/buf.h], [], [],
 #endif])
 
 AC_HEADER_SYS_WAIT
-AM_STDBOOL_H
 
 AC_HEADER_DIRENT
 AC_HEADER_MAJOR
@@ -122,6 +125,14 @@ else
     [Define to the full path of your rsh, if any.])
 fi
 
+TAR_COMPR_PROGRAM(compress)
+TAR_COMPR_PROGRAM(gzip)
+TAR_COMPR_PROGRAM(bzip2)
+TAR_COMPR_PROGRAM(lzip)
+TAR_COMPR_PROGRAM(lzma)
+TAR_COMPR_PROGRAM(lzop)
+TAR_COMPR_PROGRAM(xz)
+
 AC_MSG_CHECKING(for default archive format)
 
 AC_ARG_VAR([DEFAULT_ARCHIVE_FORMAT],
@@ -241,6 +252,7 @@ fi
 
 AC_OUTPUT([Makefile\
            doc/Makefile\
+          gnu/Makefile\
            lib/Makefile\
            po/Makefile.in\
            scripts/Makefile\
index 656e487987bae07b94e452620bfa98a20438caf2..88c132a0cca440463e000ff5a3ca2bd53bd31070 100644 (file)
@@ -1,8 +1,9 @@
-tar (1.22-3) unstable; urgency=low
+tar (1.23-1) unstable; urgency=low
 
+  * new upstream version, fixes security issue in rmt (CVE-2010-0624)
   * add suggests for lzma and xz-utils, closes: #523499
 
- -- Bdale Garbee <bdale@gag.com>  Tue, 26 Jan 2010 15:21:30 -0700
+ -- Bdale Garbee <bdale@gag.com>  Wed, 10 Mar 2010 09:51:37 -0700
 
 tar (1.22-2) unstable; urgency=low
 
diff --git a/gnu/Makefile.am b/gnu/Makefile.am
new file mode 100644 (file)
index 0000000..b34cc13
--- /dev/null
@@ -0,0 +1,2457 @@
+## DO NOT EDIT! GENERATED AUTOMATICALLY!
+## Process this file with automake to produce Makefile.in.
+# Copyright (C) 2002-2010 Free Software Foundation, Inc.
+#
+# This file is free software, distributed under the terms of the GNU
+# General Public License.  As a special exception to the GNU General
+# Public License, this file may be distributed as part of a program
+# that contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+# Reproduce by: gnulib-tool --import --dir=. --local-dir=gl --lib=libgnu --source-base=gnu --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=lock --no-libtool --macro-prefix=gl alloca argmatch argp argp-version-etc backupfile canonicalize closeout configmake dirname error exclude exitfail fileblocks fnmatch-gnu fseeko ftruncate full-write getdate getline getopt getopt-gnu getpagesize gettext gettime gitlog-to-changelog hash human inttostr inttypes lchown localcharset mkdtemp modechange obstack priv-set progname quote quotearg rpmatch safe-read save-cwd savedir setenv snprintf stat-time stdbool stdint stpcpy strdup-posix strerror strtol strtoul timespec unlinkdir unlocked-io utimens version-etc-fsf xalloc xalloc-die xgetcwd xstrtoumax xvasprintf
+
+AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects
+
+SUBDIRS =
+noinst_HEADERS =
+noinst_LIBRARIES =
+noinst_LTLIBRARIES =
+EXTRA_DIST =
+BUILT_SOURCES =
+SUFFIXES =
+MOSTLYCLEANFILES = core *.stackdump
+MOSTLYCLEANDIRS =
+CLEANFILES =
+DISTCLEANFILES =
+MAINTAINERCLEANFILES =
+
+AM_CPPFLAGS =
+AM_CFLAGS =
+
+noinst_LIBRARIES += libgnu.a
+
+libgnu_a_SOURCES =
+libgnu_a_LIBADD = $(gl_LIBOBJS)
+libgnu_a_DEPENDENCIES = $(gl_LIBOBJS)
+EXTRA_libgnu_a_SOURCES =
+
+## begin gnulib module alloca
+
+
+EXTRA_DIST += alloca.c
+
+EXTRA_libgnu_a_SOURCES += alloca.c
+
+libgnu_a_LIBADD += @ALLOCA@
+libgnu_a_DEPENDENCIES += @ALLOCA@
+## end   gnulib module alloca
+
+## begin gnulib module alloca-opt
+
+BUILT_SOURCES += $(ALLOCA_H)
+
+# We need the following in order to create <alloca.h> when the system
+# doesn't have one that works with the given compiler.
+alloca.h: alloca.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         cat $(srcdir)/alloca.in.h; \
+       } > $@-t && \
+       mv -f $@-t $@
+MOSTLYCLEANFILES += alloca.h alloca.h-t
+
+EXTRA_DIST += alloca.in.h
+
+## end   gnulib module alloca-opt
+
+## begin gnulib module areadlink-with-size
+
+libgnu_a_SOURCES += areadlink-with-size.c
+
+EXTRA_DIST += areadlink.h
+
+## end   gnulib module areadlink-with-size
+
+## begin gnulib module arg-nonnull
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+
+BUILT_SOURCES += arg-nonnull.h
+# The arg-nonnull.h that gets inserted into generated .h files is the same as
+# build-aux/arg-nonnull.h, except that it has the copyright header cut off.
+arg-nonnull.h: $(top_srcdir)/build-aux/arg-nonnull.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       sed -n -e '/GL_ARG_NONNULL/,$$p' \
+         < $(top_srcdir)/build-aux/arg-nonnull.h \
+         > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t
+
+ARG_NONNULL_H=arg-nonnull.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/arg-nonnull.h
+
+## end   gnulib module arg-nonnull
+
+## begin gnulib module argmatch
+
+
+EXTRA_DIST += argmatch.c argmatch.h
+
+EXTRA_libgnu_a_SOURCES += argmatch.c
+
+## end   gnulib module argmatch
+
+## begin gnulib module argp
+
+libgnu_a_SOURCES += argp.h argp-ba.c argp-eexst.c \
+           argp-fmtstream.c argp-fmtstream.h argp-fs-xinl.c argp-help.c \
+           argp-namefrob.h argp-parse.c argp-pin.c argp-pv.c argp-pvh.c \
+           argp-xinl.c
+
+## end   gnulib module argp
+
+## begin gnulib module argp-version-etc
+
+libgnu_a_SOURCES += argp-version-etc.h argp-version-etc.c
+
+## end   gnulib module argp-version-etc
+
+## begin gnulib module backupfile
+
+
+EXTRA_DIST += backupfile.c backupfile.h
+
+EXTRA_libgnu_a_SOURCES += backupfile.c
+
+## end   gnulib module backupfile
+
+## begin gnulib module bitrotate
+
+libgnu_a_SOURCES += bitrotate.h
+
+## end   gnulib module bitrotate
+
+## begin gnulib module btowc
+
+
+EXTRA_DIST += btowc.c
+
+EXTRA_libgnu_a_SOURCES += btowc.c
+
+## end   gnulib module btowc
+
+## begin gnulib module c++defs
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+
+BUILT_SOURCES += c++defs.h
+# The c++defs.h that gets inserted into generated .h files is the same as
+# build-aux/c++defs.h, except that it has the copyright header cut off.
+c++defs.h: $(top_srcdir)/build-aux/c++defs.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       sed -n -e '/_GL_CXXDEFS/,$$p' \
+         < $(top_srcdir)/build-aux/c++defs.h \
+         > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += c++defs.h c++defs.h-t
+
+CXXDEFS_H=c++defs.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/c++defs.h
+
+## end   gnulib module c++defs
+
+## begin gnulib module c-ctype
+
+libgnu_a_SOURCES += c-ctype.h c-ctype.c
+
+## end   gnulib module c-ctype
+
+## begin gnulib module canonicalize
+
+
+EXTRA_DIST += canonicalize.c canonicalize.h
+
+EXTRA_libgnu_a_SOURCES += canonicalize.c
+
+## end   gnulib module canonicalize
+
+## begin gnulib module chdir-long
+
+
+EXTRA_DIST += chdir-long.c chdir-long.h
+
+EXTRA_libgnu_a_SOURCES += chdir-long.c
+
+## end   gnulib module chdir-long
+
+## begin gnulib module chown
+
+
+EXTRA_DIST += chown.c fchown-stub.c
+
+EXTRA_libgnu_a_SOURCES += chown.c fchown-stub.c
+
+## end   gnulib module chown
+
+## begin gnulib module close
+
+
+EXTRA_DIST += close.c
+
+EXTRA_libgnu_a_SOURCES += close.c
+
+## end   gnulib module close
+
+## begin gnulib module close-hook
+
+libgnu_a_SOURCES += close-hook.c
+
+EXTRA_DIST += close-hook.h
+
+## end   gnulib module close-hook
+
+## begin gnulib module close-stream
+
+
+EXTRA_DIST += close-stream.c close-stream.h
+
+EXTRA_libgnu_a_SOURCES += close-stream.c
+
+## end   gnulib module close-stream
+
+## begin gnulib module closeout
+
+
+EXTRA_DIST += closeout.c closeout.h
+
+EXTRA_libgnu_a_SOURCES += closeout.c
+
+## end   gnulib module closeout
+
+## begin gnulib module configmake
+
+# Retrieve values of the variables through 'configure' followed by
+# 'make', not directly through 'configure', so that a user who
+# sets some of these variables consistently on the 'make' command
+# line gets correct results.
+#
+# One advantage of this approach, compared to the classical
+# approach of adding -DLIBDIR=\"$(libdir)\" etc. to AM_CPPFLAGS,
+# is that it protects against the use of undefined variables.
+# If, say, $(libdir) is not set in the Makefile, LIBDIR is not
+# defined by this module, and code using LIBDIR gives a
+# compilation error.
+#
+# Another advantage is that 'make' output is shorter.
+#
+# Listed in the same order as the GNU makefile conventions.
+# The Automake-defined pkg* macros are appended, in the order
+# listed in the Automake 1.10a+ documentation.
+configmake.h: Makefile
+       $(AM_V_GEN)rm -f $@-t && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         echo '#define PREFIX "$(prefix)"'; \
+         echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
+         echo '#define BINDIR "$(bindir)"'; \
+         echo '#define SBINDIR "$(sbindir)"'; \
+         echo '#define LIBEXECDIR "$(libexecdir)"'; \
+         echo '#define DATAROOTDIR "$(datarootdir)"'; \
+         echo '#define DATADIR "$(datadir)"'; \
+         echo '#define SYSCONFDIR "$(sysconfdir)"'; \
+         echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \
+         echo '#define LOCALSTATEDIR "$(localstatedir)"'; \
+         echo '#define INCLUDEDIR "$(includedir)"'; \
+         echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \
+         echo '#define DOCDIR "$(docdir)"'; \
+         echo '#define INFODIR "$(infodir)"'; \
+         echo '#define HTMLDIR "$(htmldir)"'; \
+         echo '#define DVIDIR "$(dvidir)"'; \
+         echo '#define PDFDIR "$(pdfdir)"'; \
+         echo '#define PSDIR "$(psdir)"'; \
+         echo '#define LIBDIR "$(libdir)"'; \
+         echo '#define LISPDIR "$(lispdir)"'; \
+         echo '#define LOCALEDIR "$(localedir)"'; \
+         echo '#define MANDIR "$(mandir)"'; \
+         echo '#define MANEXT "$(manext)"'; \
+         echo '#define PKGDATADIR "$(pkgdatadir)"'; \
+         echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \
+         echo '#define PKGLIBDIR "$(pkglibdir)"'; \
+         echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \
+       } | sed '/""/d' > $@-t && \
+       if test -f $@ && cmp $@-t $@ > /dev/null; then \
+         rm -f $@-t; \
+       else \
+         rm -f $@; mv $@-t $@; \
+       fi
+
+BUILT_SOURCES += configmake.h
+CLEANFILES += configmake.h configmake.h-t
+
+## end   gnulib module configmake
+
+## begin gnulib module dirent
+
+BUILT_SOURCES += dirent.h
+
+# We need the following in order to create <dirent.h> when the system
+# doesn't have one that works with the given compiler.
+dirent.h: dirent.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_DIRENT_H''@|$(NEXT_DIRENT_H)|g' \
+             -e 's|@''GNULIB_DIRFD''@|$(GNULIB_DIRFD)|g' \
+             -e 's|@''GNULIB_FDOPENDIR''@|$(GNULIB_FDOPENDIR)|g' \
+             -e 's|@''GNULIB_SCANDIR''@|$(GNULIB_SCANDIR)|g' \
+             -e 's|@''GNULIB_ALPHASORT''@|$(GNULIB_ALPHASORT)|g' \
+             -e 's|@''HAVE_DECL_DIRFD''@|$(HAVE_DECL_DIRFD)|g' \
+             -e 's|@''HAVE_FDOPENDIR''@|$(HAVE_FDOPENDIR)|g' \
+             -e 's|@''HAVE_SCANDIR''@|$(HAVE_SCANDIR)|g' \
+             -e 's|@''HAVE_ALPHASORT''@|$(HAVE_ALPHASORT)|g' \
+             -e 's|@''REPLACE_CLOSEDIR''@|$(REPLACE_CLOSEDIR)|g' \
+             -e 's|@''REPLACE_FDOPENDIR''@|$(REPLACE_FDOPENDIR)|g' \
+             -e 's|@''REPLACE_OPENDIR''@|$(REPLACE_OPENDIR)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/dirent.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += dirent.h dirent.h-t
+
+EXTRA_DIST += dirent.in.h
+
+## end   gnulib module dirent
+
+## begin gnulib module dirent-safer
+
+
+EXTRA_DIST += dirent--.h dirent-safer.h opendir-safer.c
+
+EXTRA_libgnu_a_SOURCES += opendir-safer.c
+
+## end   gnulib module dirent-safer
+
+## begin gnulib module dirfd
+
+
+EXTRA_DIST += dirfd.c
+
+EXTRA_libgnu_a_SOURCES += dirfd.c
+
+## end   gnulib module dirfd
+
+## begin gnulib module dirname
+
+
+EXTRA_DIST += basename.c dirname.c stripslash.c
+
+EXTRA_libgnu_a_SOURCES += basename.c dirname.c stripslash.c
+
+## end   gnulib module dirname
+
+## begin gnulib module dirname-lgpl
+
+
+EXTRA_DIST += basename-lgpl.c dirname-lgpl.c dirname.h stripslash.c
+
+EXTRA_libgnu_a_SOURCES += basename-lgpl.c dirname-lgpl.c stripslash.c
+
+## end   gnulib module dirname-lgpl
+
+## begin gnulib module dup2
+
+
+EXTRA_DIST += dup2.c
+
+EXTRA_libgnu_a_SOURCES += dup2.c
+
+## end   gnulib module dup2
+
+## begin gnulib module errno
+
+BUILT_SOURCES += $(ERRNO_H)
+
+# We need the following in order to create <errno.h> when the system
+# doesn't have one that is POSIX compliant.
+errno.h: errno.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \
+             -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \
+             -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \
+             -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \
+             -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \
+             -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \
+             -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \
+             < $(srcdir)/errno.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += errno.h errno.h-t
+
+EXTRA_DIST += errno.in.h
+
+## end   gnulib module errno
+
+## begin gnulib module error
+
+
+EXTRA_DIST += error.c error.h
+
+EXTRA_libgnu_a_SOURCES += error.c
+
+## end   gnulib module error
+
+## begin gnulib module exclude
+
+
+EXTRA_DIST += exclude.c exclude.h
+
+EXTRA_libgnu_a_SOURCES += exclude.c
+
+## end   gnulib module exclude
+
+## begin gnulib module exitfail
+
+libgnu_a_SOURCES += exitfail.c
+
+EXTRA_DIST += exitfail.h
+
+## end   gnulib module exitfail
+
+## begin gnulib module fchdir
+
+
+EXTRA_DIST += fchdir.c
+
+EXTRA_libgnu_a_SOURCES += fchdir.c
+
+## end   gnulib module fchdir
+
+## begin gnulib module fclose
+
+
+EXTRA_DIST += fclose.c
+
+EXTRA_libgnu_a_SOURCES += fclose.c
+
+## end   gnulib module fclose
+
+## begin gnulib module fcntl
+
+
+EXTRA_DIST += fcntl.c
+
+EXTRA_libgnu_a_SOURCES += fcntl.c
+
+## end   gnulib module fcntl
+
+## begin gnulib module fcntl-h
+
+BUILT_SOURCES += fcntl.h
+
+# We need the following in order to create <fcntl.h> when the system
+# doesn't have one that works with the given compiler.
+fcntl.h: fcntl.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \
+             -e 's|@''GNULIB_FCNTL''@|$(GNULIB_FCNTL)|g' \
+             -e 's|@''GNULIB_OPEN''@|$(GNULIB_OPEN)|g' \
+             -e 's|@''GNULIB_OPENAT''@|$(GNULIB_OPENAT)|g' \
+             -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \
+             -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \
+             -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \
+             -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \
+             -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/fcntl.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += fcntl.h fcntl.h-t
+
+EXTRA_DIST += fcntl.in.h
+
+## end   gnulib module fcntl-h
+
+## begin gnulib module fdopendir
+
+
+EXTRA_DIST += fdopendir.c openat-priv.h openat-proc.c
+
+EXTRA_libgnu_a_SOURCES += fdopendir.c openat-proc.c
+
+## end   gnulib module fdopendir
+
+## begin gnulib module file-set
+
+libgnu_a_SOURCES += file-set.c
+
+EXTRA_DIST += file-set.h
+
+## end   gnulib module file-set
+
+## begin gnulib module fileblocks
+
+
+EXTRA_DIST += fileblocks.c
+
+EXTRA_libgnu_a_SOURCES += fileblocks.c
+
+## end   gnulib module fileblocks
+
+## begin gnulib module float
+
+BUILT_SOURCES += $(FLOAT_H)
+
+# We need the following in order to create <float.h> when the system
+# doesn't have one that works with the given compiler.
+float.h: float.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \
+             < $(srcdir)/float.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += float.h float.h-t
+
+EXTRA_DIST += float.in.h
+
+## end   gnulib module float
+
+## begin gnulib module fnmatch
+
+BUILT_SOURCES += $(FNMATCH_H)
+
+# We need the following in order to create <fnmatch.h> when the system
+# doesn't have one that supports the required API.
+fnmatch.h: fnmatch.in.h $(ARG_NONNULL_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             < $(srcdir)/fnmatch.in.h; \
+       } > $@-t && \
+       mv -f $@-t $@
+MOSTLYCLEANFILES += fnmatch.h fnmatch.h-t
+
+EXTRA_DIST += fnmatch.c fnmatch.in.h fnmatch_loop.c
+
+EXTRA_libgnu_a_SOURCES += fnmatch.c fnmatch_loop.c
+
+## end   gnulib module fnmatch
+
+## begin gnulib module fpending
+
+
+EXTRA_DIST += fpending.c fpending.h
+
+EXTRA_libgnu_a_SOURCES += fpending.c
+
+## end   gnulib module fpending
+
+## begin gnulib module fseeko
+
+
+EXTRA_DIST += fseeko.c stdio-impl.h
+
+EXTRA_libgnu_a_SOURCES += fseeko.c
+
+## end   gnulib module fseeko
+
+## begin gnulib module ftruncate
+
+
+EXTRA_DIST += ftruncate.c
+
+EXTRA_libgnu_a_SOURCES += ftruncate.c
+
+## end   gnulib module ftruncate
+
+## begin gnulib module full-write
+
+libgnu_a_SOURCES += full-write.h full-write.c
+
+## end   gnulib module full-write
+
+## begin gnulib module getcwd
+
+
+EXTRA_DIST += getcwd.c
+
+EXTRA_libgnu_a_SOURCES += getcwd.c
+
+## end   gnulib module getcwd
+
+## begin gnulib module getdate
+
+libgnu_a_SOURCES += getdate.y
+BUILT_SOURCES += getdate.c
+MAINTAINERCLEANFILES += getdate.c
+EXTRA_DIST += getdate.c
+
+EXTRA_DIST += getdate.h
+
+## end   gnulib module getdate
+
+## begin gnulib module getdelim
+
+
+EXTRA_DIST += getdelim.c
+
+EXTRA_libgnu_a_SOURCES += getdelim.c
+
+## end   gnulib module getdelim
+
+## begin gnulib module getdtablesize
+
+
+EXTRA_DIST += getdtablesize.c
+
+EXTRA_libgnu_a_SOURCES += getdtablesize.c
+
+## end   gnulib module getdtablesize
+
+## begin gnulib module getline
+
+
+EXTRA_DIST += getline.c
+
+EXTRA_libgnu_a_SOURCES += getline.c
+
+## end   gnulib module getline
+
+## begin gnulib module getopt-posix
+
+BUILT_SOURCES += $(GETOPT_H)
+
+# We need the following in order to create <getopt.h> when the system
+# doesn't have one that works with the given compiler.
+getopt.h: getopt.in.h $(ARG_NONNULL_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             < $(srcdir)/getopt.in.h; \
+       } > $@-t && \
+       mv -f $@-t $@
+MOSTLYCLEANFILES += getopt.h getopt.h-t
+
+EXTRA_DIST += getopt.c getopt.in.h getopt1.c getopt_int.h
+
+EXTRA_libgnu_a_SOURCES += getopt.c getopt1.c
+
+## end   gnulib module getopt-posix
+
+## begin gnulib module getpagesize
+
+
+EXTRA_DIST += getpagesize.c
+
+EXTRA_libgnu_a_SOURCES += getpagesize.c
+
+## end   gnulib module getpagesize
+
+## begin gnulib module gettext
+
+# This is for those projects which use "gettextize --intl" to put a source-code
+# copy of libintl into their package. In such projects, every Makefile.am needs
+# -I$(top_builddir)/intl, so that <libintl.h> can be found in this directory.
+# For the Makefile.ams in other directories it is the maintainer's
+# responsibility; for the one from gnulib we do it here.
+# This option has no effect when the user disables NLS (because then the intl
+# directory contains no libintl.h file) or when the project does not use
+# "gettextize --intl".
+#AM_CPPFLAGS += -I$(top_builddir)/intl
+
+EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath
+
+## end   gnulib module gettext
+
+## begin gnulib module gettext-h
+
+libgnu_a_SOURCES += gettext.h
+
+## end   gnulib module gettext-h
+
+## begin gnulib module gettime
+
+
+EXTRA_DIST += gettime.c
+
+EXTRA_libgnu_a_SOURCES += gettime.c
+
+## end   gnulib module gettime
+
+## begin gnulib module gettimeofday
+
+
+EXTRA_DIST += gettimeofday.c
+
+EXTRA_libgnu_a_SOURCES += gettimeofday.c
+
+## end   gnulib module gettimeofday
+
+## begin gnulib module gitlog-to-changelog
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/gitlog-to-changelog
+
+## end   gnulib module gitlog-to-changelog
+
+## begin gnulib module hash
+
+
+EXTRA_DIST += hash.c hash.h
+
+EXTRA_libgnu_a_SOURCES += hash.c
+
+## end   gnulib module hash
+
+## begin gnulib module hash-pjw
+
+libgnu_a_SOURCES += hash-pjw.h hash-pjw.c
+
+## end   gnulib module hash-pjw
+
+## begin gnulib module hash-triple
+
+libgnu_a_SOURCES += hash-triple.c
+
+EXTRA_DIST += hash-triple.h
+
+## end   gnulib module hash-triple
+
+## begin gnulib module havelib
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath
+
+## end   gnulib module havelib
+
+## begin gnulib module human
+
+
+EXTRA_DIST += human.c human.h
+
+EXTRA_libgnu_a_SOURCES += human.c
+
+## end   gnulib module human
+
+## begin gnulib module intprops
+
+
+EXTRA_DIST += intprops.h
+
+## end   gnulib module intprops
+
+## begin gnulib module inttostr
+
+
+EXTRA_DIST += imaxtostr.c inttostr.c inttostr.h offtostr.c uinttostr.c umaxtostr.c
+
+EXTRA_libgnu_a_SOURCES += imaxtostr.c inttostr.c offtostr.c uinttostr.c umaxtostr.c
+
+## end   gnulib module inttostr
+
+## begin gnulib module inttypes
+
+BUILT_SOURCES += inttypes.h
+
+# We need the following in order to create <inttypes.h> when the system
+# doesn't have one that works with the given compiler.
+inttypes.h: inttypes.in.h $(WARN_ON_USE_H) $(ARG_NONNULL_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \
+             -e 's/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \
+             -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+             -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+             -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+             -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \
+             -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \
+             -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \
+             -e 's/@''GNULIB_STRTOIMAX''@/$(GNULIB_STRTOIMAX)/g' \
+             -e 's/@''GNULIB_STRTOUMAX''@/$(GNULIB_STRTOUMAX)/g' \
+             -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \
+             -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \
+             -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \
+             -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \
+             -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \
+             -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \
+             -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \
+             -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/inttypes.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += inttypes.h inttypes.h-t
+
+EXTRA_DIST += inttypes.in.h
+
+## end   gnulib module inttypes
+
+## begin gnulib module langinfo
+
+BUILT_SOURCES += langinfo.h
+
+# We need the following in order to create an empty placeholder for
+# <langinfo.h> when the system doesn't have one.
+langinfo.h: langinfo.in.h $(CXXDEFS_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''HAVE_LANGINFO_H''@|$(HAVE_LANGINFO_H)|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_LANGINFO_H''@|$(NEXT_LANGINFO_H)|g' \
+             -e 's|@''GNULIB_NL_LANGINFO''@|$(GNULIB_NL_LANGINFO)|g' \
+             -e 's|@''HAVE_LANGINFO_CODESET''@|$(HAVE_LANGINFO_CODESET)|g' \
+             -e 's|@''HAVE_LANGINFO_ERA''@|$(HAVE_LANGINFO_ERA)|g' \
+             -e 's|@''HAVE_NL_LANGINFO''@|$(HAVE_NL_LANGINFO)|g' \
+             -e 's|@''REPLACE_NL_LANGINFO''@|$(REPLACE_NL_LANGINFO)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/langinfo.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += langinfo.h langinfo.h-t
+
+EXTRA_DIST += langinfo.in.h
+
+## end   gnulib module langinfo
+
+## begin gnulib module lchown
+
+
+EXTRA_DIST += lchown.c
+
+EXTRA_libgnu_a_SOURCES += lchown.c
+
+## end   gnulib module lchown
+
+## begin gnulib module localcharset
+
+libgnu_a_SOURCES += localcharset.h localcharset.c
+
+# We need the following in order to install a simple file in $(libdir)
+# which is shared with other installed packages. We use a list of referencing
+# packages so that "make uninstall" will remove the file if and only if it
+# is not used by another installed package.
+# On systems with glibc-2.1 or newer, the file is redundant, therefore we
+# avoid installing it.
+
+all-local: charset.alias ref-add.sed ref-del.sed
+
+charset_alias = $(DESTDIR)$(libdir)/charset.alias
+charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
+install-exec-local: install-exec-localcharset
+install-exec-localcharset: all-local
+       if test $(GLIBC21) = no; then \
+         case '$(host_os)' in \
+           darwin[56]*) \
+             need_charset_alias=true ;; \
+           darwin* | cygwin* | mingw* | pw32* | cegcc*) \
+             need_charset_alias=false ;; \
+           *) \
+             need_charset_alias=true ;; \
+         esac ; \
+       else \
+         need_charset_alias=false ; \
+       fi ; \
+       if $$need_charset_alias; then \
+         $(mkinstalldirs) $(DESTDIR)$(libdir) ; \
+       fi ; \
+       if test -f $(charset_alias); then \
+         sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \
+         $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
+         rm -f $(charset_tmp) ; \
+       else \
+         if $$need_charset_alias; then \
+           sed -f ref-add.sed charset.alias > $(charset_tmp) ; \
+           $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
+           rm -f $(charset_tmp) ; \
+         fi ; \
+       fi
+
+uninstall-local: uninstall-localcharset
+uninstall-localcharset: all-local
+       if test -f $(charset_alias); then \
+         sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \
+         if grep '^# Packages using this file: $$' $(charset_tmp) \
+             > /dev/null; then \
+           rm -f $(charset_alias); \
+         else \
+           $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \
+         fi; \
+         rm -f $(charset_tmp); \
+       fi
+
+charset.alias: config.charset
+       $(AM_V_GEN)rm -f t-$@ $@ && \
+       $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \
+       mv t-$@ $@
+
+SUFFIXES += .sed .sin
+.sin.sed:
+       $(AM_V_GEN)rm -f t-$@ $@ && \
+       sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \
+       mv t-$@ $@
+
+CLEANFILES += charset.alias ref-add.sed ref-del.sed
+
+EXTRA_DIST += config.charset ref-add.sin ref-del.sin
+
+## end   gnulib module localcharset
+
+## begin gnulib module lseek
+
+
+EXTRA_DIST += lseek.c
+
+EXTRA_libgnu_a_SOURCES += lseek.c
+
+## end   gnulib module lseek
+
+## begin gnulib module lstat
+
+
+EXTRA_DIST += lstat.c
+
+EXTRA_libgnu_a_SOURCES += lstat.c
+
+## end   gnulib module lstat
+
+## begin gnulib module malloc
+
+
+EXTRA_DIST += malloc.c
+
+EXTRA_libgnu_a_SOURCES += malloc.c
+
+## end   gnulib module malloc
+
+## begin gnulib module malloc-posix
+
+
+EXTRA_DIST += malloc.c
+
+EXTRA_libgnu_a_SOURCES += malloc.c
+
+## end   gnulib module malloc-posix
+
+## begin gnulib module malloca
+
+libgnu_a_SOURCES += malloca.c
+
+EXTRA_DIST += malloca.h malloca.valgrind
+
+## end   gnulib module malloca
+
+## begin gnulib module mbchar
+
+libgnu_a_SOURCES += mbchar.c
+
+EXTRA_DIST += mbchar.h
+
+## end   gnulib module mbchar
+
+## begin gnulib module mbrtowc
+
+
+EXTRA_DIST += mbrtowc.c
+
+EXTRA_libgnu_a_SOURCES += mbrtowc.c
+
+## end   gnulib module mbrtowc
+
+## begin gnulib module mbscasecmp
+
+libgnu_a_SOURCES += mbscasecmp.c
+
+## end   gnulib module mbscasecmp
+
+## begin gnulib module mbsinit
+
+
+EXTRA_DIST += mbsinit.c
+
+EXTRA_libgnu_a_SOURCES += mbsinit.c
+
+## end   gnulib module mbsinit
+
+## begin gnulib module mbsrtowcs
+
+
+EXTRA_DIST += mbsrtowcs-state.c mbsrtowcs.c
+
+EXTRA_libgnu_a_SOURCES += mbsrtowcs-state.c mbsrtowcs.c
+
+## end   gnulib module mbsrtowcs
+
+## begin gnulib module mbuiter
+
+libgnu_a_SOURCES += mbuiter.h
+
+## end   gnulib module mbuiter
+
+## begin gnulib module memchr
+
+
+EXTRA_DIST += memchr.c memchr.valgrind
+
+EXTRA_libgnu_a_SOURCES += memchr.c
+
+## end   gnulib module memchr
+
+## begin gnulib module mempcpy
+
+
+EXTRA_DIST += mempcpy.c
+
+EXTRA_libgnu_a_SOURCES += mempcpy.c
+
+## end   gnulib module mempcpy
+
+## begin gnulib module memrchr
+
+
+EXTRA_DIST += memrchr.c
+
+EXTRA_libgnu_a_SOURCES += memrchr.c
+
+## end   gnulib module memrchr
+
+## begin gnulib module mkdir
+
+
+EXTRA_DIST += mkdir.c
+
+EXTRA_libgnu_a_SOURCES += mkdir.c
+
+## end   gnulib module mkdir
+
+## begin gnulib module mkdtemp
+
+
+EXTRA_DIST += mkdtemp.c
+
+EXTRA_libgnu_a_SOURCES += mkdtemp.c
+
+## end   gnulib module mkdtemp
+
+## begin gnulib module mktime
+
+
+EXTRA_DIST += mktime-internal.h mktime.c
+
+EXTRA_libgnu_a_SOURCES += mktime.c
+
+## end   gnulib module mktime
+
+## begin gnulib module modechange
+
+
+EXTRA_DIST += modechange.c modechange.h
+
+EXTRA_libgnu_a_SOURCES += modechange.c
+
+## end   gnulib module modechange
+
+## begin gnulib module nl_langinfo
+
+
+EXTRA_DIST += nl_langinfo.c
+
+EXTRA_libgnu_a_SOURCES += nl_langinfo.c
+
+## end   gnulib module nl_langinfo
+
+## begin gnulib module obstack
+
+
+EXTRA_DIST += obstack.c obstack.h
+
+EXTRA_libgnu_a_SOURCES += obstack.c
+
+## end   gnulib module obstack
+
+## begin gnulib module open
+
+
+EXTRA_DIST += open.c
+
+EXTRA_libgnu_a_SOURCES += open.c
+
+## end   gnulib module open
+
+## begin gnulib module openat
+
+
+EXTRA_DIST += at-func.c fchmodat.c fchownat.c fstatat.c mkdirat.c openat-priv.h openat-proc.c openat.c openat.h unlinkat.c
+
+EXTRA_libgnu_a_SOURCES += at-func.c fchmodat.c fchownat.c fstatat.c mkdirat.c openat-proc.c openat.c unlinkat.c
+
+## end   gnulib module openat
+
+## begin gnulib module openat-die
+
+libgnu_a_SOURCES += openat-die.c
+
+## end   gnulib module openat-die
+
+## begin gnulib module pathmax
+
+
+EXTRA_DIST += pathmax.h
+
+## end   gnulib module pathmax
+
+## begin gnulib module priv-set
+
+libgnu_a_SOURCES += priv-set.c
+
+EXTRA_DIST += priv-set.h
+
+## end   gnulib module priv-set
+
+## begin gnulib module progname
+
+libgnu_a_SOURCES += progname.h progname.c
+
+## end   gnulib module progname
+
+## begin gnulib module quote
+
+
+EXTRA_DIST += quote.c quote.h
+
+EXTRA_libgnu_a_SOURCES += quote.c
+
+## end   gnulib module quote
+
+## begin gnulib module quotearg
+
+
+EXTRA_DIST += quotearg.c quotearg.h
+
+EXTRA_libgnu_a_SOURCES += quotearg.c
+
+## end   gnulib module quotearg
+
+## begin gnulib module rawmemchr
+
+
+EXTRA_DIST += rawmemchr.c rawmemchr.valgrind
+
+EXTRA_libgnu_a_SOURCES += rawmemchr.c
+
+## end   gnulib module rawmemchr
+
+## begin gnulib module readlink
+
+
+EXTRA_DIST += readlink.c
+
+EXTRA_libgnu_a_SOURCES += readlink.c
+
+## end   gnulib module readlink
+
+## begin gnulib module realloc-posix
+
+
+EXTRA_DIST += realloc.c
+
+EXTRA_libgnu_a_SOURCES += realloc.c
+
+## end   gnulib module realloc-posix
+
+## begin gnulib module regex
+
+
+EXTRA_DIST += regcomp.c regex.c regex.h regex_internal.c regex_internal.h regexec.c
+
+EXTRA_libgnu_a_SOURCES += regcomp.c regex.c regex_internal.c regexec.c
+
+## end   gnulib module regex
+
+## begin gnulib module rmdir
+
+
+EXTRA_DIST += rmdir.c
+
+EXTRA_libgnu_a_SOURCES += rmdir.c
+
+## end   gnulib module rmdir
+
+## begin gnulib module rpmatch
+
+
+EXTRA_DIST += rpmatch.c
+
+EXTRA_libgnu_a_SOURCES += rpmatch.c
+
+## end   gnulib module rpmatch
+
+## begin gnulib module safe-read
+
+
+EXTRA_DIST += safe-read.c safe-read.h
+
+EXTRA_libgnu_a_SOURCES += safe-read.c
+
+## end   gnulib module safe-read
+
+## begin gnulib module safe-write
+
+
+EXTRA_DIST += safe-write.c safe-write.h
+
+EXTRA_libgnu_a_SOURCES += safe-write.c
+
+## end   gnulib module safe-write
+
+## begin gnulib module same
+
+
+EXTRA_DIST += same.c same.h
+
+EXTRA_libgnu_a_SOURCES += same.c
+
+## end   gnulib module same
+
+## begin gnulib module same-inode
+
+
+EXTRA_DIST += same-inode.h
+
+## end   gnulib module same-inode
+
+## begin gnulib module save-cwd
+
+
+EXTRA_DIST += save-cwd.c save-cwd.h
+
+EXTRA_libgnu_a_SOURCES += save-cwd.c
+
+## end   gnulib module save-cwd
+
+## begin gnulib module savedir
+
+
+EXTRA_DIST += savedir.c savedir.h
+
+EXTRA_libgnu_a_SOURCES += savedir.c
+
+## end   gnulib module savedir
+
+## begin gnulib module setenv
+
+
+EXTRA_DIST += setenv.c
+
+EXTRA_libgnu_a_SOURCES += setenv.c
+
+## end   gnulib module setenv
+
+## begin gnulib module size_max
+
+libgnu_a_SOURCES += size_max.h
+
+## end   gnulib module size_max
+
+## begin gnulib module sleep
+
+
+EXTRA_DIST += sleep.c
+
+EXTRA_libgnu_a_SOURCES += sleep.c
+
+## end   gnulib module sleep
+
+## begin gnulib module snprintf
+
+
+EXTRA_DIST += snprintf.c
+
+EXTRA_libgnu_a_SOURCES += snprintf.c
+
+## end   gnulib module snprintf
+
+## begin gnulib module stat
+
+
+EXTRA_DIST += stat.c
+
+EXTRA_libgnu_a_SOURCES += stat.c
+
+## end   gnulib module stat
+
+## begin gnulib module stat-macros
+
+
+EXTRA_DIST += stat-macros.h
+
+## end   gnulib module stat-macros
+
+## begin gnulib module stat-time
+
+
+EXTRA_DIST += stat-time.h
+
+## end   gnulib module stat-time
+
+## begin gnulib module stdarg
+
+BUILT_SOURCES += $(STDARG_H)
+
+# We need the following in order to create <stdarg.h> when the system
+# doesn't have one that works with the given compiler.
+stdarg.h: stdarg.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \
+             < $(srcdir)/stdarg.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += stdarg.h stdarg.h-t
+
+EXTRA_DIST += stdarg.in.h
+
+## end   gnulib module stdarg
+
+## begin gnulib module stdbool
+
+BUILT_SOURCES += $(STDBOOL_H)
+
+# We need the following in order to create <stdbool.h> when the system
+# doesn't have one that works.
+stdbool.h: stdbool.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += stdbool.h stdbool.h-t
+
+EXTRA_DIST += stdbool.in.h
+
+## end   gnulib module stdbool
+
+## begin gnulib module stddef
+
+BUILT_SOURCES += $(STDDEF_H)
+
+# We need the following in order to create <stddef.h> when the system
+# doesn't have one that works with the given compiler.
+stddef.h: stddef.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+             -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
+             -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
+             < $(srcdir)/stddef.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += stddef.h stddef.h-t
+
+EXTRA_DIST += stddef.in.h
+
+## end   gnulib module stddef
+
+## begin gnulib module stdint
+
+BUILT_SOURCES += $(STDINT_H)
+
+# We need the following in order to create <stdint.h> when the system
+# doesn't have one that works with the given compiler.
+stdint.h: stdint.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
+             -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
+             -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+             -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
+             -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
+             -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+             -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+             -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+             -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
+             -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
+             -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
+             -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
+             -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
+             -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
+             -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
+             -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
+             -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
+             < $(srcdir)/stdint.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += stdint.h stdint.h-t
+
+EXTRA_DIST += stdint.in.h
+
+## end   gnulib module stdint
+
+## begin gnulib module stdio
+
+BUILT_SOURCES += stdio.h
+
+# We need the following in order to create <stdio.h> when the system
+# doesn't have one that works with the given compiler.
+stdio.h: stdio.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \
+             -e 's|@''GNULIB_DPRINTF''@|$(GNULIB_DPRINTF)|g' \
+             -e 's|@''GNULIB_FCLOSE''@|$(GNULIB_FCLOSE)|g' \
+             -e 's|@''GNULIB_FFLUSH''@|$(GNULIB_FFLUSH)|g' \
+             -e 's|@''GNULIB_FOPEN''@|$(GNULIB_FOPEN)|g' \
+             -e 's|@''GNULIB_FPRINTF''@|$(GNULIB_FPRINTF)|g' \
+             -e 's|@''GNULIB_FPRINTF_POSIX''@|$(GNULIB_FPRINTF_POSIX)|g' \
+             -e 's|@''GNULIB_FPURGE''@|$(GNULIB_FPURGE)|g' \
+             -e 's|@''GNULIB_FPUTC''@|$(GNULIB_FPUTC)|g' \
+             -e 's|@''GNULIB_FPUTS''@|$(GNULIB_FPUTS)|g' \
+             -e 's|@''GNULIB_FREOPEN''@|$(GNULIB_FREOPEN)|g' \
+             -e 's|@''GNULIB_FSEEK''@|$(GNULIB_FSEEK)|g' \
+             -e 's|@''GNULIB_FSEEKO''@|$(GNULIB_FSEEKO)|g' \
+             -e 's|@''GNULIB_FTELL''@|$(GNULIB_FTELL)|g' \
+             -e 's|@''GNULIB_FTELLO''@|$(GNULIB_FTELLO)|g' \
+             -e 's|@''GNULIB_FWRITE''@|$(GNULIB_FWRITE)|g' \
+             -e 's|@''GNULIB_GETDELIM''@|$(GNULIB_GETDELIM)|g' \
+             -e 's|@''GNULIB_GETLINE''@|$(GNULIB_GETLINE)|g' \
+             -e 's|@''GNULIB_OBSTACK_PRINTF''@|$(GNULIB_OBSTACK_PRINTF)|g' \
+             -e 's|@''GNULIB_OBSTACK_PRINTF_POSIX''@|$(GNULIB_OBSTACK_PRINTF_POSIX)|g' \
+             -e 's|@''GNULIB_PERROR''@|$(GNULIB_PERROR)|g' \
+             -e 's|@''GNULIB_POPEN''@|$(GNULIB_POPEN)|g' \
+             -e 's|@''GNULIB_PRINTF''@|$(GNULIB_PRINTF)|g' \
+             -e 's|@''GNULIB_PRINTF_POSIX''@|$(GNULIB_PRINTF_POSIX)|g' \
+             -e 's|@''GNULIB_PUTC''@|$(GNULIB_PUTC)|g' \
+             -e 's|@''GNULIB_PUTCHAR''@|$(GNULIB_PUTCHAR)|g' \
+             -e 's|@''GNULIB_PUTS''@|$(GNULIB_PUTS)|g' \
+             -e 's|@''GNULIB_REMOVE''@|$(GNULIB_REMOVE)|g' \
+             -e 's|@''GNULIB_RENAME''@|$(GNULIB_RENAME)|g' \
+             -e 's|@''GNULIB_RENAMEAT''@|$(GNULIB_RENAMEAT)|g' \
+             -e 's|@''GNULIB_SNPRINTF''@|$(GNULIB_SNPRINTF)|g' \
+             -e 's|@''GNULIB_SPRINTF_POSIX''@|$(GNULIB_SPRINTF_POSIX)|g' \
+             -e 's|@''GNULIB_STDIO_H_SIGPIPE''@|$(GNULIB_STDIO_H_SIGPIPE)|g' \
+             -e 's|@''GNULIB_VASPRINTF''@|$(GNULIB_VASPRINTF)|g' \
+             -e 's|@''GNULIB_VDPRINTF''@|$(GNULIB_VDPRINTF)|g' \
+             -e 's|@''GNULIB_VFPRINTF''@|$(GNULIB_VFPRINTF)|g' \
+             -e 's|@''GNULIB_VFPRINTF_POSIX''@|$(GNULIB_VFPRINTF_POSIX)|g' \
+             -e 's|@''GNULIB_VPRINTF''@|$(GNULIB_VPRINTF)|g' \
+             -e 's|@''GNULIB_VPRINTF_POSIX''@|$(GNULIB_VPRINTF_POSIX)|g' \
+             -e 's|@''GNULIB_VSNPRINTF''@|$(GNULIB_VSNPRINTF)|g' \
+             -e 's|@''GNULIB_VSPRINTF_POSIX''@|$(GNULIB_VSPRINTF_POSIX)|g' \
+             < $(srcdir)/stdio.in.h | \
+         sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \
+             -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \
+             -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \
+             -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \
+             -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \
+             -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \
+             -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \
+             -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \
+             -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \
+             -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \
+             -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \
+             -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \
+             -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \
+             -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \
+             -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \
+             -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \
+             -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \
+             -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \
+             -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \
+             -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \
+             -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \
+             -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \
+             -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \
+             -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \
+             -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \
+             -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \
+             -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \
+             -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \
+             -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \
+             -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \
+             -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \
+             -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \
+             -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \
+             -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \
+             -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \
+             -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \
+             -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \
+             -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \
+             -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += stdio.h stdio.h-t
+
+EXTRA_DIST += stdio-write.c stdio.in.h
+
+EXTRA_libgnu_a_SOURCES += stdio-write.c
+
+## end   gnulib module stdio
+
+## begin gnulib module stdlib
+
+BUILT_SOURCES += stdlib.h
+
+# We need the following in order to create <stdlib.h> when the system
+# doesn't have one that works with the given compiler.
+stdlib.h: stdlib.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \
+             -e 's|@''GNULIB_ATOLL''@|$(GNULIB_ATOLL)|g' \
+             -e 's|@''GNULIB_CALLOC_POSIX''@|$(GNULIB_CALLOC_POSIX)|g' \
+             -e 's|@''GNULIB_CANONICALIZE_FILE_NAME''@|$(GNULIB_CANONICALIZE_FILE_NAME)|g' \
+             -e 's|@''GNULIB_GETLOADAVG''@|$(GNULIB_GETLOADAVG)|g' \
+             -e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \
+             -e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \
+             -e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \
+             -e 's|@''GNULIB_MKOSTEMP''@|$(GNULIB_MKOSTEMP)|g' \
+             -e 's|@''GNULIB_MKOSTEMPS''@|$(GNULIB_MKOSTEMPS)|g' \
+             -e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \
+             -e 's|@''GNULIB_MKSTEMPS''@|$(GNULIB_MKSTEMPS)|g' \
+             -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \
+             -e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \
+             -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \
+             -e 's|@''GNULIB_REALPATH''@|$(GNULIB_REALPATH)|g' \
+             -e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|g' \
+             -e 's|@''GNULIB_SETENV''@|$(GNULIB_SETENV)|g' \
+             -e 's|@''GNULIB_STRTOD''@|$(GNULIB_STRTOD)|g' \
+             -e 's|@''GNULIB_STRTOLL''@|$(GNULIB_STRTOLL)|g' \
+             -e 's|@''GNULIB_STRTOULL''@|$(GNULIB_STRTOULL)|g' \
+             -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \
+             -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \
+             -e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|g' \
+             -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \
+             -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \
+             -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \
+             -e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \
+             -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
+             -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \
+             -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \
+             -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \
+             -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \
+             -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \
+             -e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \
+             -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \
+             -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
+             -e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|g' \
+             -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
+             -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \
+             -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \
+             -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \
+             -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \
+             -e 's|@''HAVE_UNSETENV''@|$(HAVE_UNSETENV)|g' \
+             -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \
+             -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
+             -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
+             -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \
+             -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \
+             -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
+             -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/stdlib.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += stdlib.h stdlib.h-t
+
+EXTRA_DIST += stdlib.in.h
+
+## end   gnulib module stdlib
+
+## begin gnulib module stpcpy
+
+
+EXTRA_DIST += stpcpy.c
+
+EXTRA_libgnu_a_SOURCES += stpcpy.c
+
+## end   gnulib module stpcpy
+
+## begin gnulib module strcase
+
+
+EXTRA_DIST += strcasecmp.c strncasecmp.c
+
+EXTRA_libgnu_a_SOURCES += strcasecmp.c strncasecmp.c
+
+## end   gnulib module strcase
+
+## begin gnulib module strchrnul
+
+
+EXTRA_DIST += strchrnul.c strchrnul.valgrind
+
+EXTRA_libgnu_a_SOURCES += strchrnul.c
+
+## end   gnulib module strchrnul
+
+## begin gnulib module strdup-posix
+
+
+EXTRA_DIST += strdup.c
+
+EXTRA_libgnu_a_SOURCES += strdup.c
+
+## end   gnulib module strdup-posix
+
+## begin gnulib module streq
+
+
+EXTRA_DIST += streq.h
+
+## end   gnulib module streq
+
+## begin gnulib module strerror
+
+
+EXTRA_DIST += strerror.c
+
+EXTRA_libgnu_a_SOURCES += strerror.c
+
+## end   gnulib module strerror
+
+## begin gnulib module string
+
+BUILT_SOURCES += string.h
+
+# We need the following in order to create <string.h> when the system
+# doesn't have one that works with the given compiler.
+string.h: string.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
+             -e 's|@''GNULIB_MBSLEN''@|$(GNULIB_MBSLEN)|g' \
+             -e 's|@''GNULIB_MBSNLEN''@|$(GNULIB_MBSNLEN)|g' \
+             -e 's|@''GNULIB_MBSCHR''@|$(GNULIB_MBSCHR)|g' \
+             -e 's|@''GNULIB_MBSRCHR''@|$(GNULIB_MBSRCHR)|g' \
+             -e 's|@''GNULIB_MBSSTR''@|$(GNULIB_MBSSTR)|g' \
+             -e 's|@''GNULIB_MBSCASECMP''@|$(GNULIB_MBSCASECMP)|g' \
+             -e 's|@''GNULIB_MBSNCASECMP''@|$(GNULIB_MBSNCASECMP)|g' \
+             -e 's|@''GNULIB_MBSPCASECMP''@|$(GNULIB_MBSPCASECMP)|g' \
+             -e 's|@''GNULIB_MBSCASESTR''@|$(GNULIB_MBSCASESTR)|g' \
+             -e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \
+             -e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \
+             -e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \
+             -e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \
+             -e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \
+             -e 's|@''GNULIB_MEMCHR''@|$(GNULIB_MEMCHR)|g' \
+             -e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \
+             -e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \
+             -e 's|@''GNULIB_MEMRCHR''@|$(GNULIB_MEMRCHR)|g' \
+             -e 's|@''GNULIB_RAWMEMCHR''@|$(GNULIB_RAWMEMCHR)|g' \
+             -e 's|@''GNULIB_STPCPY''@|$(GNULIB_STPCPY)|g' \
+             -e 's|@''GNULIB_STPNCPY''@|$(GNULIB_STPNCPY)|g' \
+             -e 's|@''GNULIB_STRCHRNUL''@|$(GNULIB_STRCHRNUL)|g' \
+             -e 's|@''GNULIB_STRDUP''@|$(GNULIB_STRDUP)|g' \
+             -e 's|@''GNULIB_STRNDUP''@|$(GNULIB_STRNDUP)|g' \
+             -e 's|@''GNULIB_STRNLEN''@|$(GNULIB_STRNLEN)|g' \
+             -e 's|@''GNULIB_STRPBRK''@|$(GNULIB_STRPBRK)|g' \
+             -e 's|@''GNULIB_STRSEP''@|$(GNULIB_STRSEP)|g' \
+             -e 's|@''GNULIB_STRSTR''@|$(GNULIB_STRSTR)|g' \
+             -e 's|@''GNULIB_STRCASESTR''@|$(GNULIB_STRCASESTR)|g' \
+             -e 's|@''GNULIB_STRTOK_R''@|$(GNULIB_STRTOK_R)|g' \
+             -e 's|@''GNULIB_STRERROR''@|$(GNULIB_STRERROR)|g' \
+             -e 's|@''GNULIB_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \
+             -e 's|@''GNULIB_STRVERSCMP''@|$(GNULIB_STRVERSCMP)|g' \
+             < $(srcdir)/string.in.h | \
+         sed -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
+             -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
+             -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
+             -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
+             -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \
+             -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
+             -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
+             -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
+             -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
+             -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
+             -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
+             -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
+             -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
+             -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
+             -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
+             -e 's|@''HAVE_DECL_STRERROR''@|$(HAVE_DECL_STRERROR)|g' \
+             -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
+             -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
+             -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
+             -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+             -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
+             -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
+             -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
+             -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
+             -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \
+             -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
+             -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
+             -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+             < $(srcdir)/string.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += string.h string.h-t
+
+EXTRA_DIST += string.in.h
+
+## end   gnulib module string
+
+## begin gnulib module strings
+
+BUILT_SOURCES += strings.h
+
+# We need the following in order to create <strings.h> when the system
+# doesn't have one that works with the given compiler.
+strings.h: strings.in.h $(WARN_ON_USE_H) $(ARG_NONNULL_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \
+             -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \
+             -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/strings.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += strings.h strings.h-t
+
+EXTRA_DIST += strings.in.h
+
+## end   gnulib module strings
+
+## begin gnulib module strndup
+
+
+EXTRA_DIST += strndup.c
+
+EXTRA_libgnu_a_SOURCES += strndup.c
+
+## end   gnulib module strndup
+
+## begin gnulib module strnlen
+
+
+EXTRA_DIST += strnlen.c
+
+EXTRA_libgnu_a_SOURCES += strnlen.c
+
+## end   gnulib module strnlen
+
+## begin gnulib module strnlen1
+
+libgnu_a_SOURCES += strnlen1.h strnlen1.c
+
+## end   gnulib module strnlen1
+
+## begin gnulib module strtoimax
+
+
+EXTRA_DIST += strtoimax.c
+
+EXTRA_libgnu_a_SOURCES += strtoimax.c
+
+## end   gnulib module strtoimax
+
+## begin gnulib module strtol
+
+
+EXTRA_DIST += strtol.c
+
+EXTRA_libgnu_a_SOURCES += strtol.c
+
+## end   gnulib module strtol
+
+## begin gnulib module strtoll
+
+
+EXTRA_DIST += strtoll.c
+
+EXTRA_libgnu_a_SOURCES += strtoll.c
+
+## end   gnulib module strtoll
+
+## begin gnulib module strtoul
+
+
+EXTRA_DIST += strtoul.c
+
+EXTRA_libgnu_a_SOURCES += strtoul.c
+
+## end   gnulib module strtoul
+
+## begin gnulib module strtoull
+
+
+EXTRA_DIST += strtoull.c
+
+EXTRA_libgnu_a_SOURCES += strtoull.c
+
+## end   gnulib module strtoull
+
+## begin gnulib module strtoumax
+
+
+EXTRA_DIST += strtoumax.c
+
+EXTRA_libgnu_a_SOURCES += strtoumax.c
+
+## end   gnulib module strtoumax
+
+## begin gnulib module sys_stat
+
+BUILT_SOURCES += sys/stat.h
+
+# We need the following in order to create <sys/stat.h> when the system
+# has one that is incomplete.
+sys/stat.h: sys_stat.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_at)$(MKDIR_P) sys
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
+             -e 's|@''GNULIB_FCHMODAT''@|$(GNULIB_FCHMODAT)|g' \
+             -e 's|@''GNULIB_FSTATAT''@|$(GNULIB_FSTATAT)|g' \
+             -e 's|@''GNULIB_FUTIMENS''@|$(GNULIB_FUTIMENS)|g' \
+             -e 's|@''GNULIB_LCHMOD''@|$(GNULIB_LCHMOD)|g' \
+             -e 's|@''GNULIB_LSTAT''@|$(GNULIB_LSTAT)|g' \
+             -e 's|@''GNULIB_MKDIRAT''@|$(GNULIB_MKDIRAT)|g' \
+             -e 's|@''GNULIB_MKFIFO''@|$(GNULIB_MKFIFO)|g' \
+             -e 's|@''GNULIB_MKFIFOAT''@|$(GNULIB_MKFIFOAT)|g' \
+             -e 's|@''GNULIB_MKNOD''@|$(GNULIB_MKNOD)|g' \
+             -e 's|@''GNULIB_MKNODAT''@|$(GNULIB_MKNODAT)|g' \
+             -e 's|@''GNULIB_STAT''@|$(GNULIB_STAT)|g' \
+             -e 's|@''GNULIB_UTIMENSAT''@|$(GNULIB_UTIMENSAT)|g' \
+             -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \
+             -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \
+             -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \
+             -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \
+             -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \
+             -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \
+             -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \
+             -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \
+             -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \
+             -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \
+             -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \
+             -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \
+             -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \
+             -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \
+             -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \
+             -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \
+             -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \
+             -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \
+             -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \
+             -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/sys_stat.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t
+MOSTLYCLEANDIRS += sys
+
+EXTRA_DIST += sys_stat.in.h
+
+## end   gnulib module sys_stat
+
+## begin gnulib module sys_time
+
+BUILT_SOURCES += sys/time.h
+
+# We need the following in order to create <sys/time.h> when the system
+# doesn't have one that works with the given compiler.
+sys/time.h: sys_time.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_at)$(MKDIR_P) sys
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \
+             -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \
+             -e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \
+             -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \
+             -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/sys_time.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += sys/time.h sys/time.h-t
+
+EXTRA_DIST += sys_time.in.h
+
+## end   gnulib module sys_time
+
+## begin gnulib module sysexits
+
+BUILT_SOURCES += $(SYSEXITS_H)
+
+# We need the following in order to create <sysexits.h> when the system
+# doesn't have one that works with the given compiler.
+sysexits.h: sysexits.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''HAVE_SYSEXITS_H''@|$(HAVE_SYSEXITS_H)|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_SYSEXITS_H''@|$(NEXT_SYSEXITS_H)|g' \
+             < $(srcdir)/sysexits.in.h; \
+       } > $@-t && \
+       mv -f $@-t $@
+MOSTLYCLEANFILES += sysexits.h sysexits.h-t
+
+EXTRA_DIST += sysexits.in.h
+
+## end   gnulib module sysexits
+
+## begin gnulib module tempname
+
+
+EXTRA_DIST += tempname.c tempname.h
+
+EXTRA_libgnu_a_SOURCES += tempname.c
+
+## end   gnulib module tempname
+
+## begin gnulib module time
+
+BUILT_SOURCES += time.h
+
+# We need the following in order to create <time.h> when the system
+# doesn't have one that works with the given compiler.
+time.h: time.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \
+             -e 's|@''GNULIB_MKTIME''@|$(GNULIB_MKTIME)|g' \
+             -e 's|@''GNULIB_NANOSLEEP''@|$(GNULIB_NANOSLEEP)|g' \
+             -e 's|@''GNULIB_STRPTIME''@|$(GNULIB_STRPTIME)|g' \
+             -e 's|@''GNULIB_TIMEGM''@|$(GNULIB_TIMEGM)|g' \
+             -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \
+             -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \
+             -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \
+             -e 's|@''REPLACE_STRPTIME''@|$(REPLACE_STRPTIME)|g' \
+             -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \
+             -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
+             -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/time.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += time.h time.h-t
+
+EXTRA_DIST += time.in.h
+
+## end   gnulib module time
+
+## begin gnulib module time_r
+
+
+EXTRA_DIST += time_r.c
+
+EXTRA_libgnu_a_SOURCES += time_r.c
+
+## end   gnulib module time_r
+
+## begin gnulib module timespec
+
+
+EXTRA_DIST += timespec.h
+
+## end   gnulib module timespec
+
+## begin gnulib module unistd
+
+BUILT_SOURCES += unistd.h
+
+# We need the following in order to create an empty placeholder for
+# <unistd.h> when the system doesn't have one.
+unistd.h: unistd.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
+             -e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \
+             -e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|g' \
+             -e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \
+             -e 's|@''GNULIB_DUP3''@|$(GNULIB_DUP3)|g' \
+             -e 's|@''GNULIB_ENVIRON''@|$(GNULIB_ENVIRON)|g' \
+             -e 's|@''GNULIB_EUIDACCESS''@|$(GNULIB_EUIDACCESS)|g' \
+             -e 's|@''GNULIB_FACCESSAT''@|$(GNULIB_FACCESSAT)|g' \
+             -e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \
+             -e 's|@''GNULIB_FCHOWNAT''@|$(GNULIB_FCHOWNAT)|g' \
+             -e 's|@''GNULIB_FSYNC''@|$(GNULIB_FSYNC)|g' \
+             -e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \
+             -e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \
+             -e 's|@''GNULIB_GETDOMAINNAME''@|$(GNULIB_GETDOMAINNAME)|g' \
+             -e 's|@''GNULIB_GETDTABLESIZE''@|$(GNULIB_GETDTABLESIZE)|g' \
+             -e 's|@''GNULIB_GETGROUPS''@|$(GNULIB_GETGROUPS)|g' \
+             -e 's|@''GNULIB_GETHOSTNAME''@|$(GNULIB_GETHOSTNAME)|g' \
+             -e 's|@''GNULIB_GETLOGIN''@|$(GNULIB_GETLOGIN)|g' \
+             -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \
+             -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \
+             -e 's|@''GNULIB_GETUSERSHELL''@|$(GNULIB_GETUSERSHELL)|g' \
+             -e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \
+             -e 's|@''GNULIB_LINK''@|$(GNULIB_LINK)|g' \
+             -e 's|@''GNULIB_LINKAT''@|$(GNULIB_LINKAT)|g' \
+             -e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \
+             -e 's|@''GNULIB_PIPE2''@|$(GNULIB_PIPE2)|g' \
+             -e 's|@''GNULIB_PREAD''@|$(GNULIB_PREAD)|g' \
+             -e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \
+             -e 's|@''GNULIB_READLINKAT''@|$(GNULIB_READLINKAT)|g' \
+             -e 's|@''GNULIB_RMDIR''@|$(GNULIB_RMDIR)|g' \
+             -e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \
+             -e 's|@''GNULIB_SYMLINK''@|$(GNULIB_SYMLINK)|g' \
+             -e 's|@''GNULIB_SYMLINKAT''@|$(GNULIB_SYMLINKAT)|g' \
+             -e 's|@''GNULIB_UNISTD_H_GETOPT''@|$(GNULIB_UNISTD_H_GETOPT)|g' \
+             -e 's|@''GNULIB_UNISTD_H_SIGPIPE''@|$(GNULIB_UNISTD_H_SIGPIPE)|g' \
+             -e 's|@''GNULIB_UNLINK''@|$(GNULIB_UNLINK)|g' \
+             -e 's|@''GNULIB_UNLINKAT''@|$(GNULIB_UNLINKAT)|g' \
+             -e 's|@''GNULIB_USLEEP''@|$(GNULIB_USLEEP)|g' \
+             -e 's|@''GNULIB_WRITE''@|$(GNULIB_WRITE)|g' \
+             < $(srcdir)/unistd.in.h | \
+         sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \
+             -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
+             -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \
+             -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \
+             -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \
+             -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \
+             -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \
+             -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
+             -e 's|@''HAVE_GETDOMAINNAME''@|$(HAVE_GETDOMAINNAME)|g' \
+             -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \
+             -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \
+             -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \
+             -e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \
+             -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
+             -e 's|@''HAVE_GETUSERSHELL''@|$(HAVE_GETUSERSHELL)|g' \
+             -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \
+             -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
+             -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \
+             -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \
+             -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \
+             -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
+             -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \
+             -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
+             -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \
+             -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \
+             -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \
+             -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \
+             -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
+             -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
+             -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
+             -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
+             -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
+             -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
+             -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \
+             -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \
+             -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \
+             -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \
+             -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
+             -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \
+             -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
+             -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
+             -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
+             -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \
+             -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
+             -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \
+             -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \
+             -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \
+             -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \
+             -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \
+             -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \
+             -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \
+             -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \
+             -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \
+             -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \
+             -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += unistd.h unistd.h-t
+
+EXTRA_DIST += unistd.in.h
+
+## end   gnulib module unistd
+
+## begin gnulib module unistd-safer
+
+
+EXTRA_DIST += dup-safer.c fd-safer.c pipe-safer.c unistd--.h unistd-safer.h
+
+EXTRA_libgnu_a_SOURCES += dup-safer.c fd-safer.c pipe-safer.c
+
+## end   gnulib module unistd-safer
+
+## begin gnulib module unitypes
+
+
+EXTRA_DIST += unitypes.h
+
+## end   gnulib module unitypes
+
+## begin gnulib module uniwidth/base
+
+
+EXTRA_DIST += localcharset.h uniwidth.h
+
+## end   gnulib module uniwidth/base
+
+## begin gnulib module uniwidth/width
+
+libgnu_a_SOURCES += uniwidth/width.c
+
+EXTRA_DIST += uniwidth/cjk.h
+
+## end   gnulib module uniwidth/width
+
+## begin gnulib module unlink
+
+
+EXTRA_DIST += unlink.c
+
+EXTRA_libgnu_a_SOURCES += unlink.c
+
+## end   gnulib module unlink
+
+## begin gnulib module unlinkdir
+
+
+EXTRA_DIST += unlinkdir.c unlinkdir.h
+
+EXTRA_libgnu_a_SOURCES += unlinkdir.c
+
+## end   gnulib module unlinkdir
+
+## begin gnulib module unlocked-io
+
+
+EXTRA_DIST += unlocked-io.h
+
+## end   gnulib module unlocked-io
+
+## begin gnulib module unsetenv
+
+
+EXTRA_DIST += unsetenv.c
+
+EXTRA_libgnu_a_SOURCES += unsetenv.c
+
+## end   gnulib module unsetenv
+
+## begin gnulib module utimens
+
+
+EXTRA_DIST += utimens.c utimens.h
+
+EXTRA_libgnu_a_SOURCES += utimens.c
+
+## end   gnulib module utimens
+
+## begin gnulib module vasnprintf
+
+
+EXTRA_DIST += asnprintf.c float+.h printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h
+
+EXTRA_libgnu_a_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c
+
+## end   gnulib module vasnprintf
+
+## begin gnulib module vasprintf
+
+
+EXTRA_DIST += asprintf.c vasprintf.c
+
+EXTRA_libgnu_a_SOURCES += asprintf.c vasprintf.c
+
+## end   gnulib module vasprintf
+
+## begin gnulib module verify
+
+libgnu_a_SOURCES += verify.h
+
+## end   gnulib module verify
+
+## begin gnulib module version-etc
+
+libgnu_a_SOURCES += version-etc.h version-etc.c
+
+## end   gnulib module version-etc
+
+## begin gnulib module version-etc-fsf
+
+libgnu_a_SOURCES += version-etc-fsf.c
+
+## end   gnulib module version-etc-fsf
+
+## begin gnulib module vsnprintf
+
+
+EXTRA_DIST += vsnprintf.c
+
+EXTRA_libgnu_a_SOURCES += vsnprintf.c
+
+## end   gnulib module vsnprintf
+
+## begin gnulib module warn-on-use
+
+BUILT_SOURCES += warn-on-use.h
+# The warn-on-use.h that gets inserted into generated .h files is the same as
+# build-aux/warn-on-use.h, except that it has the copyright header cut off.
+warn-on-use.h: $(top_srcdir)/build-aux/warn-on-use.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       sed -n -e '/^.ifndef/,$$p' \
+         < $(top_srcdir)/build-aux/warn-on-use.h \
+         > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t
+
+WARN_ON_USE_H=warn-on-use.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/warn-on-use.h
+
+## end   gnulib module warn-on-use
+
+## begin gnulib module wchar
+
+BUILT_SOURCES += wchar.h
+
+# We need the following in order to create <wchar.h> when the system
+# version does not work standalone.
+wchar.h: wchar.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
+             -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
+             -e 's|@''GNULIB_BTOWC''@|$(GNULIB_BTOWC)|g' \
+             -e 's|@''GNULIB_WCTOB''@|$(GNULIB_WCTOB)|g' \
+             -e 's|@''GNULIB_MBSINIT''@|$(GNULIB_MBSINIT)|g' \
+             -e 's|@''GNULIB_MBRTOWC''@|$(GNULIB_MBRTOWC)|g' \
+             -e 's|@''GNULIB_MBRLEN''@|$(GNULIB_MBRLEN)|g' \
+             -e 's|@''GNULIB_MBSRTOWCS''@|$(GNULIB_MBSRTOWCS)|g' \
+             -e 's|@''GNULIB_MBSNRTOWCS''@|$(GNULIB_MBSNRTOWCS)|g' \
+             -e 's|@''GNULIB_WCRTOMB''@|$(GNULIB_WCRTOMB)|g' \
+             -e 's|@''GNULIB_WCSRTOMBS''@|$(GNULIB_WCSRTOMBS)|g' \
+             -e 's|@''GNULIB_WCSNRTOMBS''@|$(GNULIB_WCSNRTOMBS)|g' \
+             -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \
+             -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
+             -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
+             -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
+             -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
+             -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
+             -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
+             -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
+             -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
+             -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
+             -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
+             -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
+             -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
+             -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
+             -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
+             -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
+             -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
+             -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
+             -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
+             -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
+             -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
+             -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
+             -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
+             -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
+             -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+           < $(srcdir)/wchar.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += wchar.h wchar.h-t
+
+EXTRA_DIST += wchar.in.h
+
+## end   gnulib module wchar
+
+## begin gnulib module wcrtomb
+
+
+EXTRA_DIST += wcrtomb.c
+
+EXTRA_libgnu_a_SOURCES += wcrtomb.c
+
+## end   gnulib module wcrtomb
+
+## begin gnulib module wctype
+
+BUILT_SOURCES += wctype.h
+
+# We need the following in order to create <wctype.h> when the system
+# doesn't have one that works with the given compiler.
+wctype.h: wctype.in.h $(CXXDEFS_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
+             -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
+             -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
+             -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/wctype.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += wctype.h wctype.h-t
+
+EXTRA_DIST += wctype.in.h
+
+## end   gnulib module wctype
+
+## begin gnulib module wcwidth
+
+
+EXTRA_DIST += wcwidth.c
+
+EXTRA_libgnu_a_SOURCES += wcwidth.c
+
+## end   gnulib module wcwidth
+
+## begin gnulib module write
+
+
+EXTRA_DIST += write.c
+
+EXTRA_libgnu_a_SOURCES += write.c
+
+## end   gnulib module write
+
+## begin gnulib module xalloc
+
+
+EXTRA_DIST += xalloc.h xmalloc.c
+
+EXTRA_libgnu_a_SOURCES += xmalloc.c
+
+## end   gnulib module xalloc
+
+## begin gnulib module xalloc-die
+
+libgnu_a_SOURCES += xalloc-die.c
+
+## end   gnulib module xalloc-die
+
+## begin gnulib module xgetcwd
+
+
+EXTRA_DIST += xgetcwd.c xgetcwd.h
+
+EXTRA_libgnu_a_SOURCES += xgetcwd.c
+
+## end   gnulib module xgetcwd
+
+## begin gnulib module xsize
+
+libgnu_a_SOURCES += xsize.h
+
+## end   gnulib module xsize
+
+## begin gnulib module xstrndup
+
+libgnu_a_SOURCES += xstrndup.h xstrndup.c
+
+## end   gnulib module xstrndup
+
+## begin gnulib module xstrtol
+
+
+EXTRA_DIST += xstrtol-error.c xstrtol.c xstrtol.h xstrtoul.c
+
+EXTRA_libgnu_a_SOURCES += xstrtol-error.c xstrtol.c xstrtoul.c
+
+## end   gnulib module xstrtol
+
+## begin gnulib module xstrtoumax
+
+libgnu_a_SOURCES += xstrtoumax.c
+
+## end   gnulib module xstrtoumax
+
+## begin gnulib module xvasprintf
+
+libgnu_a_SOURCES += xvasprintf.h xvasprintf.c xasprintf.c
+
+EXTRA_DIST += xalloc.h
+
+## end   gnulib module xvasprintf
+
+
+mostlyclean-local: mostlyclean-generic
+       @for dir in '' $(MOSTLYCLEANDIRS); do \
+         if test -n "$$dir" && test -d $$dir; then \
+           echo "rmdir $$dir"; rmdir $$dir; \
+         fi; \
+       done; \
+       :
diff --git a/gnu/Makefile.in b/gnu/Makefile.in
new file mode 100644 (file)
index 0000000..de497b9
--- /dev/null
@@ -0,0 +1,2538 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (C) 2002-2010 Free Software Foundation, Inc.
+#
+# This file is free software, distributed under the terms of the GNU
+# General Public License.  As a special exception to the GNU General
+# Public License, this file may be distributed as part of a program
+# that contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+# Reproduce by: gnulib-tool --import --dir=. --local-dir=gl --lib=libgnu --source-base=gnu --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --avoid=lock --no-libtool --macro-prefix=gl alloca argmatch argp argp-version-etc backupfile canonicalize closeout configmake dirname error exclude exitfail fileblocks fnmatch-gnu fseeko ftruncate full-write getdate getline getopt getopt-gnu getpagesize gettext gettime gitlog-to-changelog hash human inttostr inttypes lchown localcharset mkdtemp modechange obstack priv-set progname quote quotearg rpmatch safe-read save-cwd savedir setenv snprintf stat-time stdbool stdint stpcpy strdup-posix strerror strtol strtoul timespec unlinkdir unlocked-io utimens version-etc-fsf xalloc xalloc-die xgetcwd xstrtoumax xvasprintf
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = gnu
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in alloca.c getdate.c
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+       $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argmatch.m4 \
+       $(top_srcdir)/m4/argp.m4 $(top_srcdir)/m4/backupfile.m4 \
+       $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \
+       $(top_srcdir)/m4/canonicalize.m4 \
+       $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/chown.m4 \
+       $(top_srcdir)/m4/clock_time.m4 \
+       $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \
+       $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
+       $(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/dirent-safer.m4 \
+       $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \
+       $(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dos.m4 \
+       $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+       $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+       $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+       $(top_srcdir)/m4/exclude.m4 $(top_srcdir)/m4/extensions.m4 \
+       $(top_srcdir)/m4/fchdir.m4 $(top_srcdir)/m4/fclose.m4 \
+       $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \
+       $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \
+       $(top_srcdir)/m4/fileblocks.m4 $(top_srcdir)/m4/float_h.m4 \
+       $(top_srcdir)/m4/fnmatch.m4 $(top_srcdir)/m4/fpending.m4 \
+       $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftruncate.m4 \
+       $(top_srcdir)/m4/getcwd-abort-bug.m4 \
+       $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \
+       $(top_srcdir)/m4/getdate.m4 $(top_srcdir)/m4/getdelim.m4 \
+       $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getline.m4 \
+       $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \
+       $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettime.m4 \
+       $(top_srcdir)/m4/gettimeofday.m4 $(top_srcdir)/m4/glibc21.m4 \
+       $(top_srcdir)/m4/gnulib-common.m4 \
+       $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/hash.m4 \
+       $(top_srcdir)/m4/human.m4 $(top_srcdir)/m4/iconv.m4 \
+       $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \
+       $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
+       $(top_srcdir)/m4/inttostr.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
+       $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
+       $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/lchown.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 \
+       $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
+       $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \
+       $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \
+       $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/malloc.m4 \
+       $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/mbchar.m4 \
+       $(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+       $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbsrtowcs.m4 \
+       $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/memchr.m4 \
+       $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/memrchr.m4 \
+       $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkdtemp.m4 \
+       $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \
+       $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/modechange.m4 \
+       $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nl_langinfo.m4 \
+       $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/open.m4 \
+       $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/pathmax.m4 \
+       $(top_srcdir)/m4/paxutils.m4 $(top_srcdir)/m4/po.m4 \
+       $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/priv-set.m4 \
+       $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/quote.m4 \
+       $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+       $(top_srcdir)/m4/readlink.m4 $(top_srcdir)/m4/realloc.m4 \
+       $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rmdir.m4 \
+       $(top_srcdir)/m4/rmt.m4 $(top_srcdir)/m4/rpmatch.m4 \
+       $(top_srcdir)/m4/rtapelib.m4 $(top_srcdir)/m4/safe-read.m4 \
+       $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/same.m4 \
+       $(top_srcdir)/m4/save-cwd.m4 $(top_srcdir)/m4/savedir.m4 \
+       $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/size_max.m4 \
+       $(top_srcdir)/m4/sleep.m4 $(top_srcdir)/m4/snprintf.m4 \
+       $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
+       $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \
+       $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
+       $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
+       $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
+       $(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strcase.m4 \
+       $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \
+       $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \
+       $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strndup.m4 \
+       $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strtoimax.m4 \
+       $(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/strtoll.m4 \
+       $(top_srcdir)/m4/strtoul.m4 $(top_srcdir)/m4/strtoull.m4 \
+       $(top_srcdir)/m4/strtoumax.m4 $(top_srcdir)/m4/sys_stat_h.m4 \
+       $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sysexits.m4 \
+       $(top_srcdir)/m4/system.m4 $(top_srcdir)/m4/tempname.m4 \
+       $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \
+       $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \
+       $(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
+       $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+       $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utimbuf.m4 \
+       $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes.m4 \
+       $(top_srcdir)/m4/vasnprintf.m4 $(top_srcdir)/m4/vasprintf.m4 \
+       $(top_srcdir)/m4/version-etc.m4 $(top_srcdir)/m4/vsnprintf.m4 \
+       $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \
+       $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
+       $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
+       $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/write.m4 \
+       $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xgetcwd.m4 \
+       $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrndup.m4 \
+       $(top_srcdir)/m4/xstrtol.m4 $(top_srcdir)/m4/xvasprintf.m4 \
+       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+AR = ar
+ARFLAGS = cru
+AM_V_AR = $(am__v_AR_$(V))
+am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY))
+am__v_AR_0 = @echo "  AR    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+libgnu_a_AR = $(AR) $(ARFLAGS)
+am__DEPENDENCIES_1 =
+am__dirstamp = $(am__leading_dot)dirstamp
+am_libgnu_a_OBJECTS = areadlink-with-size.$(OBJEXT) argp-ba.$(OBJEXT) \
+       argp-eexst.$(OBJEXT) argp-fmtstream.$(OBJEXT) \
+       argp-fs-xinl.$(OBJEXT) argp-help.$(OBJEXT) \
+       argp-parse.$(OBJEXT) argp-pin.$(OBJEXT) argp-pv.$(OBJEXT) \
+       argp-pvh.$(OBJEXT) argp-xinl.$(OBJEXT) \
+       argp-version-etc.$(OBJEXT) c-ctype.$(OBJEXT) \
+       close-hook.$(OBJEXT) exitfail.$(OBJEXT) file-set.$(OBJEXT) \
+       full-write.$(OBJEXT) getdate.$(OBJEXT) hash-pjw.$(OBJEXT) \
+       hash-triple.$(OBJEXT) localcharset.$(OBJEXT) malloca.$(OBJEXT) \
+       mbchar.$(OBJEXT) mbscasecmp.$(OBJEXT) openat-die.$(OBJEXT) \
+       priv-set.$(OBJEXT) progname.$(OBJEXT) strnlen1.$(OBJEXT) \
+       uniwidth/width.$(OBJEXT) version-etc.$(OBJEXT) \
+       version-etc-fsf.$(OBJEXT) xalloc-die.$(OBJEXT) \
+       xstrndup.$(OBJEXT) xstrtoumax.$(OBJEXT) xvasprintf.$(OBJEXT) \
+       xasprintf.$(OBJEXT)
+libgnu_a_OBJECTS = $(am_libgnu_a_OBJECTS)
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
+AM_V_YACC = $(am__v_YACC_$(V))
+am__v_YACC_ = $(am__v_YACC_$(AM_DEFAULT_VERBOSITY))
+am__v_YACC_0 = @echo "  YACC  " $@;
+YLWRAP = $(top_srcdir)/build-aux/ylwrap
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libgnu_a_SOURCES) $(EXTRA_libgnu_a_SOURCES)
+DIST_SOURCES = $(libgnu_a_SOURCES) $(EXTRA_libgnu_a_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+       html-recursive info-recursive install-data-recursive \
+       install-dvi-recursive install-exec-recursive \
+       install-html-recursive install-info-recursive \
+       install-pdf-recursive install-ps-recursive install-recursive \
+       installcheck-recursive installdirs-recursive pdf-recursive \
+       ps-recursive uninstall-recursive
+HEADERS = $(noinst_HEADERS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+       distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOM4TE = @AUTOM4TE@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BACKUP_LIBEXEC_SCRIPTS = @BACKUP_LIBEXEC_SCRIPTS@
+BACKUP_SBIN_SCRIPTS = @BACKUP_SBIN_SCRIPTS@
+BACKUP_SED_COND = @BACKUP_SED_COND@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_ARCHIVE = @DEFAULT_ARCHIVE@
+DEFAULT_ARCHIVE_FORMAT = @DEFAULT_ARCHIVE_FORMAT@
+DEFAULT_BLOCKING = @DEFAULT_BLOCKING@
+DEFAULT_QUOTING_STYLE = @DEFAULT_QUOTING_STYLE@
+DEFAULT_RMT_COMMAND = @DEFAULT_RMT_COMMAND@
+DEFAULT_RMT_DIR = @DEFAULT_RMT_DIR@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+EXEEXT = @EXEEXT@
+FLOAT_H = @FLOAT_H@
+FNMATCH_H = @FNMATCH_H@
+GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_ALPHASORT = @GNULIB_ALPHASORT@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+GNULIB_DIRFD = @GNULIB_DIRFD@
+GNULIB_DPRINTF = @GNULIB_DPRINTF@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_DUP3 = @GNULIB_DUP3@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
+GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
+GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FCNTL = @GNULIB_FCNTL@
+GNULIB_FDOPENDIR = @GNULIB_FDOPENDIR@
+GNULIB_FFLUSH = @GNULIB_FFLUSH@
+GNULIB_FOPEN = @GNULIB_FOPEN@
+GNULIB_FPRINTF = @GNULIB_FPRINTF@
+GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
+GNULIB_FPUTC = @GNULIB_FPUTC@
+GNULIB_FPUTS = @GNULIB_FPUTS@
+GNULIB_FREOPEN = @GNULIB_FREOPEN@
+GNULIB_FSEEK = @GNULIB_FSEEK@
+GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FSTATAT = @GNULIB_FSTATAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTELL = @GNULIB_FTELL@
+GNULIB_FTELLO = @GNULIB_FTELLO@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
+GNULIB_FWRITE = @GNULIB_FWRITE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDELIM = @GNULIB_GETDELIM@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLINE = @GNULIB_GETLINE@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_IMAXABS = @GNULIB_IMAXABS@
+GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
+GNULIB_LCHMOD = @GNULIB_LCHMOD@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_LSTAT = @GNULIB_LSTAT@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKFIFO = @GNULIB_MKFIFO@
+GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
+GNULIB_MKNOD = @GNULIB_MKNOD@
+GNULIB_MKNODAT = @GNULIB_MKNODAT@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_MKTIME = @GNULIB_MKTIME@
+GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
+GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@
+GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
+GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
+GNULIB_OPEN = @GNULIB_OPEN@
+GNULIB_OPENAT = @GNULIB_OPENAT@
+GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PRINTF = @GNULIB_PRINTF@
+GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
+GNULIB_PUTC = @GNULIB_PUTC@
+GNULIB_PUTCHAR = @GNULIB_PUTCHAR@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PUTS = @GNULIB_PUTS@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SCANDIR = @GNULIB_SCANDIR@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
+GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_STAT = @GNULIB_STAT@
+GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
+GNULIB_STPCPY = @GNULIB_STPCPY@
+GNULIB_STPNCPY = @GNULIB_STPNCPY@
+GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
+GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
+GNULIB_STRDUP = @GNULIB_STRDUP@
+GNULIB_STRERROR = @GNULIB_STRERROR@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRPTIME = @GNULIB_STRPTIME@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_STRTOLL = @GNULIB_STRTOLL@
+GNULIB_STRTOULL = @GNULIB_STRTOULL@
+GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
+GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_SYMLINK = @GNULIB_SYMLINK@
+GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
+GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
+GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
+GNULIB_UNLINK = @GNULIB_UNLINK@
+GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_USLEEP = @GNULIB_USLEEP@
+GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
+GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
+GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
+GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
+GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@
+GNULIB_VPRINTF = @GNULIB_VPRINTF@
+GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@
+GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@
+GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@
+GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WRITE = @GNULIB_WRITE@
+GREP = @GREP@
+HAVE_ALPHASORT = @HAVE_ALPHASORT@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@
+HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDOPENDIR = @HAVE_FDOPENDIR@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GETUSERSHELL = @HAVE_GETUSERSHELL@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SCANDIR = @HAVE_SCANDIR@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASECMP = @HAVE_STRCASECMP@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE__BOOL = @HAVE__BOOL@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_SETSOCKOPT = @LIB_SETSOCKOPT@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_DIRENT_H = @NEXT_DIRENT_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
+NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRINGS_H = @NEXT_STRINGS_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+PU_RMT_PROG = @PU_RMT_PROG@
+RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_FCHDIR = @REPLACE_FCHDIR@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_OPENDIR = @REPLACE_OPENDIR@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRPTIME = @REPLACE_STRPTIME@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WRITE = @REPLACE_WRITE@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDARG_H = @STDARG_H@
+STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYSEXITS_H = @SYSEXITS_H@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects
+SUBDIRS = 
+noinst_HEADERS = 
+noinst_LIBRARIES = libgnu.a
+noinst_LTLIBRARIES = 
+
+# This is for those projects which use "gettextize --intl" to put a source-code
+# copy of libintl into their package. In such projects, every Makefile.am needs
+# -I$(top_builddir)/intl, so that <libintl.h> can be found in this directory.
+# For the Makefile.ams in other directories it is the maintainer's
+# responsibility; for the one from gnulib we do it here.
+# This option has no effect when the user disables NLS (because then the intl
+# directory contains no libintl.h file) or when the project does not use
+# "gettextize --intl".
+#AM_CPPFLAGS += -I$(top_builddir)/intl
+EXTRA_DIST = alloca.c alloca.in.h areadlink.h \
+       $(top_srcdir)/build-aux/arg-nonnull.h argmatch.c argmatch.h \
+       backupfile.c backupfile.h btowc.c \
+       $(top_srcdir)/build-aux/c++defs.h canonicalize.c \
+       canonicalize.h chdir-long.c chdir-long.h chown.c fchown-stub.c \
+       close.c close-hook.h close-stream.c close-stream.h closeout.c \
+       closeout.h dirent.in.h dirent--.h dirent-safer.h \
+       opendir-safer.c dirfd.c basename.c dirname.c stripslash.c \
+       basename-lgpl.c dirname-lgpl.c dirname.h stripslash.c dup2.c \
+       errno.in.h error.c error.h exclude.c exclude.h exitfail.h \
+       fchdir.c fclose.c fcntl.c fcntl.in.h fdopendir.c openat-priv.h \
+       openat-proc.c file-set.h fileblocks.c float.in.h fnmatch.c \
+       fnmatch.in.h fnmatch_loop.c fpending.c fpending.h fseeko.c \
+       stdio-impl.h ftruncate.c getcwd.c getdate.c getdate.h \
+       getdelim.c getdtablesize.c getline.c getopt.c getopt.in.h \
+       getopt1.c getopt_int.h getpagesize.c \
+       $(top_srcdir)/build-aux/config.rpath gettime.c gettimeofday.c \
+       $(top_srcdir)/build-aux/gitlog-to-changelog hash.c hash.h \
+       hash-triple.h $(top_srcdir)/build-aux/config.rpath human.c \
+       human.h intprops.h imaxtostr.c inttostr.c inttostr.h \
+       offtostr.c uinttostr.c umaxtostr.c inttypes.in.h langinfo.in.h \
+       lchown.c config.charset ref-add.sin ref-del.sin lseek.c \
+       lstat.c malloc.c malloc.c malloca.h malloca.valgrind mbchar.h \
+       mbrtowc.c mbsinit.c mbsrtowcs-state.c mbsrtowcs.c memchr.c \
+       memchr.valgrind mempcpy.c memrchr.c mkdir.c mkdtemp.c \
+       mktime-internal.h mktime.c modechange.c modechange.h \
+       nl_langinfo.c obstack.c obstack.h open.c at-func.c fchmodat.c \
+       fchownat.c fstatat.c mkdirat.c openat-priv.h openat-proc.c \
+       openat.c openat.h unlinkat.c pathmax.h priv-set.h quote.c \
+       quote.h quotearg.c quotearg.h rawmemchr.c rawmemchr.valgrind \
+       readlink.c realloc.c regcomp.c regex.c regex.h \
+       regex_internal.c regex_internal.h regexec.c rmdir.c rpmatch.c \
+       safe-read.c safe-read.h safe-write.c safe-write.h same.c \
+       same.h same-inode.h save-cwd.c save-cwd.h savedir.c savedir.h \
+       setenv.c sleep.c snprintf.c stat.c stat-macros.h stat-time.h \
+       stdarg.in.h stdbool.in.h stddef.in.h stdint.in.h stdio-write.c \
+       stdio.in.h stdlib.in.h stpcpy.c strcasecmp.c strncasecmp.c \
+       strchrnul.c strchrnul.valgrind strdup.c streq.h strerror.c \
+       string.in.h strings.in.h strndup.c strnlen.c strtoimax.c \
+       strtol.c strtoll.c strtoul.c strtoull.c strtoumax.c \
+       sys_stat.in.h sys_time.in.h sysexits.in.h tempname.c \
+       tempname.h time.in.h time_r.c timespec.h unistd.in.h \
+       dup-safer.c fd-safer.c pipe-safer.c unistd--.h unistd-safer.h \
+       unitypes.h localcharset.h uniwidth.h uniwidth/cjk.h unlink.c \
+       unlinkdir.c unlinkdir.h unlocked-io.h unsetenv.c utimens.c \
+       utimens.h asnprintf.c float+.h printf-args.c printf-args.h \
+       printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h \
+       asprintf.c vasprintf.c vsnprintf.c \
+       $(top_srcdir)/build-aux/warn-on-use.h wchar.in.h wcrtomb.c \
+       wctype.in.h wcwidth.c write.c xalloc.h xmalloc.c xgetcwd.c \
+       xgetcwd.h xstrtol-error.c xstrtol.c xstrtol.h xstrtoul.c \
+       xalloc.h
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+BUILT_SOURCES = $(ALLOCA_H) arg-nonnull.h c++defs.h configmake.h \
+       dirent.h $(ERRNO_H) fcntl.h $(FLOAT_H) $(FNMATCH_H) getdate.c \
+       $(GETOPT_H) inttypes.h langinfo.h $(STDARG_H) $(STDBOOL_H) \
+       $(STDDEF_H) $(STDINT_H) stdio.h stdlib.h string.h strings.h \
+       sys/stat.h sys/time.h $(SYSEXITS_H) time.h unistd.h \
+       warn-on-use.h wchar.h wctype.h
+SUFFIXES = .sed .sin
+MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t arg-nonnull.h \
+       arg-nonnull.h-t c++defs.h c++defs.h-t dirent.h dirent.h-t \
+       errno.h errno.h-t fcntl.h fcntl.h-t float.h float.h-t \
+       fnmatch.h fnmatch.h-t getopt.h getopt.h-t inttypes.h \
+       inttypes.h-t langinfo.h langinfo.h-t stdarg.h stdarg.h-t \
+       stdbool.h stdbool.h-t stddef.h stddef.h-t stdint.h stdint.h-t \
+       stdio.h stdio.h-t stdlib.h stdlib.h-t string.h string.h-t \
+       strings.h strings.h-t sys/stat.h sys/stat.h-t sys/time.h \
+       sys/time.h-t sysexits.h sysexits.h-t time.h time.h-t unistd.h \
+       unistd.h-t warn-on-use.h warn-on-use.h-t wchar.h wchar.h-t \
+       wctype.h wctype.h-t
+MOSTLYCLEANDIRS = sys
+CLEANFILES = configmake.h configmake.h-t charset.alias ref-add.sed \
+       ref-del.sed
+DISTCLEANFILES = 
+MAINTAINERCLEANFILES = getdate.c
+AM_CPPFLAGS = 
+AM_CFLAGS = 
+libgnu_a_SOURCES = areadlink-with-size.c argp.h argp-ba.c argp-eexst.c \
+       argp-fmtstream.c argp-fmtstream.h argp-fs-xinl.c argp-help.c \
+       argp-namefrob.h argp-parse.c argp-pin.c argp-pv.c argp-pvh.c \
+       argp-xinl.c argp-version-etc.h argp-version-etc.c bitrotate.h \
+       c-ctype.h c-ctype.c close-hook.c exitfail.c file-set.c \
+       full-write.h full-write.c getdate.y gettext.h hash-pjw.h \
+       hash-pjw.c hash-triple.c localcharset.h localcharset.c \
+       malloca.c mbchar.c mbscasecmp.c mbuiter.h openat-die.c \
+       priv-set.c progname.h progname.c size_max.h strnlen1.h \
+       strnlen1.c uniwidth/width.c verify.h version-etc.h \
+       version-etc.c version-etc-fsf.c xalloc-die.c xsize.h \
+       xstrndup.h xstrndup.c xstrtoumax.c xvasprintf.h xvasprintf.c \
+       xasprintf.c
+libgnu_a_LIBADD = $(gl_LIBOBJS) @ALLOCA@
+libgnu_a_DEPENDENCIES = $(gl_LIBOBJS) @ALLOCA@
+EXTRA_libgnu_a_SOURCES = alloca.c argmatch.c backupfile.c btowc.c \
+       canonicalize.c chdir-long.c chown.c fchown-stub.c close.c \
+       close-stream.c closeout.c opendir-safer.c dirfd.c basename.c \
+       dirname.c stripslash.c basename-lgpl.c dirname-lgpl.c \
+       stripslash.c dup2.c error.c exclude.c fchdir.c fclose.c \
+       fcntl.c fdopendir.c openat-proc.c fileblocks.c fnmatch.c \
+       fnmatch_loop.c fpending.c fseeko.c ftruncate.c getcwd.c \
+       getdelim.c getdtablesize.c getline.c getopt.c getopt1.c \
+       getpagesize.c gettime.c gettimeofday.c hash.c human.c \
+       imaxtostr.c inttostr.c offtostr.c uinttostr.c umaxtostr.c \
+       lchown.c lseek.c lstat.c malloc.c malloc.c mbrtowc.c mbsinit.c \
+       mbsrtowcs-state.c mbsrtowcs.c memchr.c mempcpy.c memrchr.c \
+       mkdir.c mkdtemp.c mktime.c modechange.c nl_langinfo.c \
+       obstack.c open.c at-func.c fchmodat.c fchownat.c fstatat.c \
+       mkdirat.c openat-proc.c openat.c unlinkat.c quote.c quotearg.c \
+       rawmemchr.c readlink.c realloc.c regcomp.c regex.c \
+       regex_internal.c regexec.c rmdir.c rpmatch.c safe-read.c \
+       safe-write.c same.c save-cwd.c savedir.c setenv.c sleep.c \
+       snprintf.c stat.c stdio-write.c stpcpy.c strcasecmp.c \
+       strncasecmp.c strchrnul.c strdup.c strerror.c strndup.c \
+       strnlen.c strtoimax.c strtol.c strtoll.c strtoul.c strtoull.c \
+       strtoumax.c tempname.c time_r.c dup-safer.c fd-safer.c \
+       pipe-safer.c unlink.c unlinkdir.c unsetenv.c utimens.c \
+       asnprintf.c printf-args.c printf-parse.c vasnprintf.c \
+       asprintf.c vasprintf.c vsnprintf.c wcrtomb.c wcwidth.c write.c \
+       xmalloc.c xgetcwd.c xstrtol-error.c xstrtol.c xstrtoul.c
+ARG_NONNULL_H = arg-nonnull.h
+CXXDEFS_H = c++defs.h
+charset_alias = $(DESTDIR)$(libdir)/charset.alias
+charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
+WARN_ON_USE_H = warn-on-use.h
+all: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .sed .sin .c .o .obj .y
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits gnu/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnits gnu/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLIBRARIES:
+       -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+uniwidth/$(am__dirstamp):
+       @$(MKDIR_P) uniwidth
+       @: > uniwidth/$(am__dirstamp)
+uniwidth/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) uniwidth/$(DEPDIR)
+       @: > uniwidth/$(DEPDIR)/$(am__dirstamp)
+uniwidth/width.$(OBJEXT): uniwidth/$(am__dirstamp) \
+       uniwidth/$(DEPDIR)/$(am__dirstamp)
+libgnu.a: $(libgnu_a_OBJECTS) $(libgnu_a_DEPENDENCIES) 
+       $(AM_V_at)-rm -f libgnu.a
+       $(AM_V_AR)$(libgnu_a_AR) libgnu.a $(libgnu_a_OBJECTS) $(libgnu_a_LIBADD)
+       $(AM_V_at)$(RANLIB) libgnu.a
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+       -rm -f uniwidth/width.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/alloca.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloca.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/areadlink-with-size.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argmatch.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-ba.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-eexst.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-fmtstream.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-fs-xinl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-help.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-parse.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-pin.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-pv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-pvh.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-version-etc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-xinl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asnprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/at-func.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/backupfile.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename-lgpl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btowc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-ctype.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/canonicalize.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chdir-long.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chown.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close-hook.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close-stream.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/closeout.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirfd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirname-lgpl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirname.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup-safer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exclude.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exitfail.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchdir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchmodat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchown-stub.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchownat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fclose.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcntl.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fd-safer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdopendir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file-set.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileblocks.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnmatch.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnmatch_loop.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fpending.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fseeko.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstatat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftruncate.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/full-write.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getcwd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdate.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdelim.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdtablesize.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getline.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpagesize.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettimeofday.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash-pjw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash-triple.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/human.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imaxtostr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inttostr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lchown.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localcharset.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lseek.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lstat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloca.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbchar.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbrtowc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbscasecmp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsinit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsrtowcs-state.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsrtowcs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memchr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mempcpy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memrchr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkdir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkdirat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkdtemp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mktime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/modechange.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nl_langinfo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obstack.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/offtostr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/open.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openat-die.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openat-proc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opendir-safer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipe-safer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-args.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-parse.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/priv-set.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progname.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quote.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotearg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rawmemchr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readlink.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/realloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regcomp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex_internal.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regexec.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rmdir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmatch.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/safe-read.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/safe-write.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/same.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/save-cwd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/savedir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setenv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sleep.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdio-write.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stpcpy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strcasecmp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strchrnul.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strdup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stripslash.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strncasecmp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strndup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoimax.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtol.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoll.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoul.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoull.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoumax.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tempname.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/time_r.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uinttostr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umaxtostr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlink.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlinkat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlinkdir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unsetenv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utimens.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vasnprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vasprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version-etc-fsf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version-etc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vsnprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcrtomb.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcwidth.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/write.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xalloc-die.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xasprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetcwd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrndup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrtol-error.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrtol.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrtoul.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrtoumax.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xvasprintf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/width.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.y.c:
+       $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) all-local
+installdirs: installdirs-recursive
+installdirs-am:
+install: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+       -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+       -rm -f uniwidth/$(DEPDIR)/$(am__dirstamp)
+       -rm -f uniwidth/$(am__dirstamp)
+       -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+       -rm -f getdate.c
+       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+       -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-noinstLIBRARIES clean-noinstLTLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -rf $(DEPDIR) ./$(DEPDIR) uniwidth/$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-exec-local
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -rf $(DEPDIR) ./$(DEPDIR) uniwidth/$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-local
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-local
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
+       ctags-recursive install install-am install-strip \
+       tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am all-local check check-am clean clean-generic \
+       clean-noinstLIBRARIES clean-noinstLTLIBRARIES ctags \
+       ctags-recursive distclean distclean-compile distclean-generic \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-exec-local \
+       install-html install-html-am install-info install-info-am \
+       install-man install-pdf install-pdf-am install-ps \
+       install-ps-am install-strip installcheck installcheck-am \
+       installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-local pdf pdf-am ps ps-am tags \
+       tags-recursive uninstall uninstall-am uninstall-local
+
+
+# We need the following in order to create <alloca.h> when the system
+# doesn't have one that works with the given compiler.
+alloca.h: alloca.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         cat $(srcdir)/alloca.in.h; \
+       } > $@-t && \
+       mv -f $@-t $@
+# The arg-nonnull.h that gets inserted into generated .h files is the same as
+# build-aux/arg-nonnull.h, except that it has the copyright header cut off.
+arg-nonnull.h: $(top_srcdir)/build-aux/arg-nonnull.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       sed -n -e '/GL_ARG_NONNULL/,$$p' \
+         < $(top_srcdir)/build-aux/arg-nonnull.h \
+         > $@-t && \
+       mv $@-t $@
+# The c++defs.h that gets inserted into generated .h files is the same as
+# build-aux/c++defs.h, except that it has the copyright header cut off.
+c++defs.h: $(top_srcdir)/build-aux/c++defs.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       sed -n -e '/_GL_CXXDEFS/,$$p' \
+         < $(top_srcdir)/build-aux/c++defs.h \
+         > $@-t && \
+       mv $@-t $@
+
+# Retrieve values of the variables through 'configure' followed by
+# 'make', not directly through 'configure', so that a user who
+# sets some of these variables consistently on the 'make' command
+# line gets correct results.
+#
+# One advantage of this approach, compared to the classical
+# approach of adding -DLIBDIR=\"$(libdir)\" etc. to AM_CPPFLAGS,
+# is that it protects against the use of undefined variables.
+# If, say, $(libdir) is not set in the Makefile, LIBDIR is not
+# defined by this module, and code using LIBDIR gives a
+# compilation error.
+#
+# Another advantage is that 'make' output is shorter.
+#
+# Listed in the same order as the GNU makefile conventions.
+# The Automake-defined pkg* macros are appended, in the order
+# listed in the Automake 1.10a+ documentation.
+configmake.h: Makefile
+       $(AM_V_GEN)rm -f $@-t && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         echo '#define PREFIX "$(prefix)"'; \
+         echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
+         echo '#define BINDIR "$(bindir)"'; \
+         echo '#define SBINDIR "$(sbindir)"'; \
+         echo '#define LIBEXECDIR "$(libexecdir)"'; \
+         echo '#define DATAROOTDIR "$(datarootdir)"'; \
+         echo '#define DATADIR "$(datadir)"'; \
+         echo '#define SYSCONFDIR "$(sysconfdir)"'; \
+         echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \
+         echo '#define LOCALSTATEDIR "$(localstatedir)"'; \
+         echo '#define INCLUDEDIR "$(includedir)"'; \
+         echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \
+         echo '#define DOCDIR "$(docdir)"'; \
+         echo '#define INFODIR "$(infodir)"'; \
+         echo '#define HTMLDIR "$(htmldir)"'; \
+         echo '#define DVIDIR "$(dvidir)"'; \
+         echo '#define PDFDIR "$(pdfdir)"'; \
+         echo '#define PSDIR "$(psdir)"'; \
+         echo '#define LIBDIR "$(libdir)"'; \
+         echo '#define LISPDIR "$(lispdir)"'; \
+         echo '#define LOCALEDIR "$(localedir)"'; \
+         echo '#define MANDIR "$(mandir)"'; \
+         echo '#define MANEXT "$(manext)"'; \
+         echo '#define PKGDATADIR "$(pkgdatadir)"'; \
+         echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \
+         echo '#define PKGLIBDIR "$(pkglibdir)"'; \
+         echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \
+       } | sed '/""/d' > $@-t && \
+       if test -f $@ && cmp $@-t $@ > /dev/null; then \
+         rm -f $@-t; \
+       else \
+         rm -f $@; mv $@-t $@; \
+       fi
+
+# We need the following in order to create <dirent.h> when the system
+# doesn't have one that works with the given compiler.
+dirent.h: dirent.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_DIRENT_H''@|$(NEXT_DIRENT_H)|g' \
+             -e 's|@''GNULIB_DIRFD''@|$(GNULIB_DIRFD)|g' \
+             -e 's|@''GNULIB_FDOPENDIR''@|$(GNULIB_FDOPENDIR)|g' \
+             -e 's|@''GNULIB_SCANDIR''@|$(GNULIB_SCANDIR)|g' \
+             -e 's|@''GNULIB_ALPHASORT''@|$(GNULIB_ALPHASORT)|g' \
+             -e 's|@''HAVE_DECL_DIRFD''@|$(HAVE_DECL_DIRFD)|g' \
+             -e 's|@''HAVE_FDOPENDIR''@|$(HAVE_FDOPENDIR)|g' \
+             -e 's|@''HAVE_SCANDIR''@|$(HAVE_SCANDIR)|g' \
+             -e 's|@''HAVE_ALPHASORT''@|$(HAVE_ALPHASORT)|g' \
+             -e 's|@''REPLACE_CLOSEDIR''@|$(REPLACE_CLOSEDIR)|g' \
+             -e 's|@''REPLACE_FDOPENDIR''@|$(REPLACE_FDOPENDIR)|g' \
+             -e 's|@''REPLACE_OPENDIR''@|$(REPLACE_OPENDIR)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/dirent.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <errno.h> when the system
+# doesn't have one that is POSIX compliant.
+errno.h: errno.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \
+             -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \
+             -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \
+             -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \
+             -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \
+             -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \
+             -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \
+             < $(srcdir)/errno.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <fcntl.h> when the system
+# doesn't have one that works with the given compiler.
+fcntl.h: fcntl.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \
+             -e 's|@''GNULIB_FCNTL''@|$(GNULIB_FCNTL)|g' \
+             -e 's|@''GNULIB_OPEN''@|$(GNULIB_OPEN)|g' \
+             -e 's|@''GNULIB_OPENAT''@|$(GNULIB_OPENAT)|g' \
+             -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \
+             -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \
+             -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \
+             -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \
+             -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/fcntl.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <float.h> when the system
+# doesn't have one that works with the given compiler.
+float.h: float.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \
+             < $(srcdir)/float.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <fnmatch.h> when the system
+# doesn't have one that supports the required API.
+fnmatch.h: fnmatch.in.h $(ARG_NONNULL_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             < $(srcdir)/fnmatch.in.h; \
+       } > $@-t && \
+       mv -f $@-t $@
+
+# We need the following in order to create <getopt.h> when the system
+# doesn't have one that works with the given compiler.
+getopt.h: getopt.in.h $(ARG_NONNULL_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             < $(srcdir)/getopt.in.h; \
+       } > $@-t && \
+       mv -f $@-t $@
+
+# We need the following in order to create <inttypes.h> when the system
+# doesn't have one that works with the given compiler.
+inttypes.h: inttypes.in.h $(WARN_ON_USE_H) $(ARG_NONNULL_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \
+             -e 's/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \
+             -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+             -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+             -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+             -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \
+             -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \
+             -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \
+             -e 's/@''GNULIB_STRTOIMAX''@/$(GNULIB_STRTOIMAX)/g' \
+             -e 's/@''GNULIB_STRTOUMAX''@/$(GNULIB_STRTOUMAX)/g' \
+             -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \
+             -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \
+             -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \
+             -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \
+             -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \
+             -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \
+             -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \
+             -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/inttypes.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create an empty placeholder for
+# <langinfo.h> when the system doesn't have one.
+langinfo.h: langinfo.in.h $(CXXDEFS_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''HAVE_LANGINFO_H''@|$(HAVE_LANGINFO_H)|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_LANGINFO_H''@|$(NEXT_LANGINFO_H)|g' \
+             -e 's|@''GNULIB_NL_LANGINFO''@|$(GNULIB_NL_LANGINFO)|g' \
+             -e 's|@''HAVE_LANGINFO_CODESET''@|$(HAVE_LANGINFO_CODESET)|g' \
+             -e 's|@''HAVE_LANGINFO_ERA''@|$(HAVE_LANGINFO_ERA)|g' \
+             -e 's|@''HAVE_NL_LANGINFO''@|$(HAVE_NL_LANGINFO)|g' \
+             -e 's|@''REPLACE_NL_LANGINFO''@|$(REPLACE_NL_LANGINFO)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/langinfo.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to install a simple file in $(libdir)
+# which is shared with other installed packages. We use a list of referencing
+# packages so that "make uninstall" will remove the file if and only if it
+# is not used by another installed package.
+# On systems with glibc-2.1 or newer, the file is redundant, therefore we
+# avoid installing it.
+
+all-local: charset.alias ref-add.sed ref-del.sed
+install-exec-local: install-exec-localcharset
+install-exec-localcharset: all-local
+       if test $(GLIBC21) = no; then \
+         case '$(host_os)' in \
+           darwin[56]*) \
+             need_charset_alias=true ;; \
+           darwin* | cygwin* | mingw* | pw32* | cegcc*) \
+             need_charset_alias=false ;; \
+           *) \
+             need_charset_alias=true ;; \
+         esac ; \
+       else \
+         need_charset_alias=false ; \
+       fi ; \
+       if $$need_charset_alias; then \
+         $(mkinstalldirs) $(DESTDIR)$(libdir) ; \
+       fi ; \
+       if test -f $(charset_alias); then \
+         sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \
+         $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
+         rm -f $(charset_tmp) ; \
+       else \
+         if $$need_charset_alias; then \
+           sed -f ref-add.sed charset.alias > $(charset_tmp) ; \
+           $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
+           rm -f $(charset_tmp) ; \
+         fi ; \
+       fi
+
+uninstall-local: uninstall-localcharset
+uninstall-localcharset: all-local
+       if test -f $(charset_alias); then \
+         sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \
+         if grep '^# Packages using this file: $$' $(charset_tmp) \
+             > /dev/null; then \
+           rm -f $(charset_alias); \
+         else \
+           $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \
+         fi; \
+         rm -f $(charset_tmp); \
+       fi
+
+charset.alias: config.charset
+       $(AM_V_GEN)rm -f t-$@ $@ && \
+       $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \
+       mv t-$@ $@
+.sin.sed:
+       $(AM_V_GEN)rm -f t-$@ $@ && \
+       sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \
+       mv t-$@ $@
+
+# We need the following in order to create <stdarg.h> when the system
+# doesn't have one that works with the given compiler.
+stdarg.h: stdarg.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \
+             < $(srcdir)/stdarg.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <stdbool.h> when the system
+# doesn't have one that works.
+stdbool.h: stdbool.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <stddef.h> when the system
+# doesn't have one that works with the given compiler.
+stddef.h: stddef.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+             -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
+             -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
+             < $(srcdir)/stddef.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <stdint.h> when the system
+# doesn't have one that works with the given compiler.
+stdint.h: stdint.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
+             -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
+             -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+             -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
+             -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
+             -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+             -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+             -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+             -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
+             -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
+             -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
+             -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
+             -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
+             -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
+             -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
+             -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
+             -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
+             < $(srcdir)/stdint.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <stdio.h> when the system
+# doesn't have one that works with the given compiler.
+stdio.h: stdio.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \
+             -e 's|@''GNULIB_DPRINTF''@|$(GNULIB_DPRINTF)|g' \
+             -e 's|@''GNULIB_FCLOSE''@|$(GNULIB_FCLOSE)|g' \
+             -e 's|@''GNULIB_FFLUSH''@|$(GNULIB_FFLUSH)|g' \
+             -e 's|@''GNULIB_FOPEN''@|$(GNULIB_FOPEN)|g' \
+             -e 's|@''GNULIB_FPRINTF''@|$(GNULIB_FPRINTF)|g' \
+             -e 's|@''GNULIB_FPRINTF_POSIX''@|$(GNULIB_FPRINTF_POSIX)|g' \
+             -e 's|@''GNULIB_FPURGE''@|$(GNULIB_FPURGE)|g' \
+             -e 's|@''GNULIB_FPUTC''@|$(GNULIB_FPUTC)|g' \
+             -e 's|@''GNULIB_FPUTS''@|$(GNULIB_FPUTS)|g' \
+             -e 's|@''GNULIB_FREOPEN''@|$(GNULIB_FREOPEN)|g' \
+             -e 's|@''GNULIB_FSEEK''@|$(GNULIB_FSEEK)|g' \
+             -e 's|@''GNULIB_FSEEKO''@|$(GNULIB_FSEEKO)|g' \
+             -e 's|@''GNULIB_FTELL''@|$(GNULIB_FTELL)|g' \
+             -e 's|@''GNULIB_FTELLO''@|$(GNULIB_FTELLO)|g' \
+             -e 's|@''GNULIB_FWRITE''@|$(GNULIB_FWRITE)|g' \
+             -e 's|@''GNULIB_GETDELIM''@|$(GNULIB_GETDELIM)|g' \
+             -e 's|@''GNULIB_GETLINE''@|$(GNULIB_GETLINE)|g' \
+             -e 's|@''GNULIB_OBSTACK_PRINTF''@|$(GNULIB_OBSTACK_PRINTF)|g' \
+             -e 's|@''GNULIB_OBSTACK_PRINTF_POSIX''@|$(GNULIB_OBSTACK_PRINTF_POSIX)|g' \
+             -e 's|@''GNULIB_PERROR''@|$(GNULIB_PERROR)|g' \
+             -e 's|@''GNULIB_POPEN''@|$(GNULIB_POPEN)|g' \
+             -e 's|@''GNULIB_PRINTF''@|$(GNULIB_PRINTF)|g' \
+             -e 's|@''GNULIB_PRINTF_POSIX''@|$(GNULIB_PRINTF_POSIX)|g' \
+             -e 's|@''GNULIB_PUTC''@|$(GNULIB_PUTC)|g' \
+             -e 's|@''GNULIB_PUTCHAR''@|$(GNULIB_PUTCHAR)|g' \
+             -e 's|@''GNULIB_PUTS''@|$(GNULIB_PUTS)|g' \
+             -e 's|@''GNULIB_REMOVE''@|$(GNULIB_REMOVE)|g' \
+             -e 's|@''GNULIB_RENAME''@|$(GNULIB_RENAME)|g' \
+             -e 's|@''GNULIB_RENAMEAT''@|$(GNULIB_RENAMEAT)|g' \
+             -e 's|@''GNULIB_SNPRINTF''@|$(GNULIB_SNPRINTF)|g' \
+             -e 's|@''GNULIB_SPRINTF_POSIX''@|$(GNULIB_SPRINTF_POSIX)|g' \
+             -e 's|@''GNULIB_STDIO_H_SIGPIPE''@|$(GNULIB_STDIO_H_SIGPIPE)|g' \
+             -e 's|@''GNULIB_VASPRINTF''@|$(GNULIB_VASPRINTF)|g' \
+             -e 's|@''GNULIB_VDPRINTF''@|$(GNULIB_VDPRINTF)|g' \
+             -e 's|@''GNULIB_VFPRINTF''@|$(GNULIB_VFPRINTF)|g' \
+             -e 's|@''GNULIB_VFPRINTF_POSIX''@|$(GNULIB_VFPRINTF_POSIX)|g' \
+             -e 's|@''GNULIB_VPRINTF''@|$(GNULIB_VPRINTF)|g' \
+             -e 's|@''GNULIB_VPRINTF_POSIX''@|$(GNULIB_VPRINTF_POSIX)|g' \
+             -e 's|@''GNULIB_VSNPRINTF''@|$(GNULIB_VSNPRINTF)|g' \
+             -e 's|@''GNULIB_VSPRINTF_POSIX''@|$(GNULIB_VSPRINTF_POSIX)|g' \
+             < $(srcdir)/stdio.in.h | \
+         sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \
+             -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \
+             -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \
+             -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \
+             -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \
+             -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \
+             -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \
+             -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \
+             -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \
+             -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \
+             -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \
+             -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \
+             -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \
+             -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \
+             -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \
+             -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \
+             -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \
+             -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \
+             -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \
+             -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \
+             -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \
+             -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \
+             -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \
+             -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \
+             -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \
+             -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \
+             -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \
+             -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \
+             -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \
+             -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \
+             -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \
+             -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \
+             -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \
+             -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \
+             -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \
+             -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \
+             -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \
+             -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \
+             -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <stdlib.h> when the system
+# doesn't have one that works with the given compiler.
+stdlib.h: stdlib.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \
+             -e 's|@''GNULIB_ATOLL''@|$(GNULIB_ATOLL)|g' \
+             -e 's|@''GNULIB_CALLOC_POSIX''@|$(GNULIB_CALLOC_POSIX)|g' \
+             -e 's|@''GNULIB_CANONICALIZE_FILE_NAME''@|$(GNULIB_CANONICALIZE_FILE_NAME)|g' \
+             -e 's|@''GNULIB_GETLOADAVG''@|$(GNULIB_GETLOADAVG)|g' \
+             -e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \
+             -e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \
+             -e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \
+             -e 's|@''GNULIB_MKOSTEMP''@|$(GNULIB_MKOSTEMP)|g' \
+             -e 's|@''GNULIB_MKOSTEMPS''@|$(GNULIB_MKOSTEMPS)|g' \
+             -e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \
+             -e 's|@''GNULIB_MKSTEMPS''@|$(GNULIB_MKSTEMPS)|g' \
+             -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \
+             -e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \
+             -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \
+             -e 's|@''GNULIB_REALPATH''@|$(GNULIB_REALPATH)|g' \
+             -e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|g' \
+             -e 's|@''GNULIB_SETENV''@|$(GNULIB_SETENV)|g' \
+             -e 's|@''GNULIB_STRTOD''@|$(GNULIB_STRTOD)|g' \
+             -e 's|@''GNULIB_STRTOLL''@|$(GNULIB_STRTOLL)|g' \
+             -e 's|@''GNULIB_STRTOULL''@|$(GNULIB_STRTOULL)|g' \
+             -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \
+             -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \
+             -e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|g' \
+             -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \
+             -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \
+             -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \
+             -e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \
+             -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
+             -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \
+             -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \
+             -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \
+             -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \
+             -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \
+             -e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \
+             -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \
+             -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
+             -e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|g' \
+             -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
+             -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \
+             -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \
+             -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \
+             -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \
+             -e 's|@''HAVE_UNSETENV''@|$(HAVE_UNSETENV)|g' \
+             -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \
+             -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
+             -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
+             -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \
+             -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \
+             -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
+             -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/stdlib.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <string.h> when the system
+# doesn't have one that works with the given compiler.
+string.h: string.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
+             -e 's|@''GNULIB_MBSLEN''@|$(GNULIB_MBSLEN)|g' \
+             -e 's|@''GNULIB_MBSNLEN''@|$(GNULIB_MBSNLEN)|g' \
+             -e 's|@''GNULIB_MBSCHR''@|$(GNULIB_MBSCHR)|g' \
+             -e 's|@''GNULIB_MBSRCHR''@|$(GNULIB_MBSRCHR)|g' \
+             -e 's|@''GNULIB_MBSSTR''@|$(GNULIB_MBSSTR)|g' \
+             -e 's|@''GNULIB_MBSCASECMP''@|$(GNULIB_MBSCASECMP)|g' \
+             -e 's|@''GNULIB_MBSNCASECMP''@|$(GNULIB_MBSNCASECMP)|g' \
+             -e 's|@''GNULIB_MBSPCASECMP''@|$(GNULIB_MBSPCASECMP)|g' \
+             -e 's|@''GNULIB_MBSCASESTR''@|$(GNULIB_MBSCASESTR)|g' \
+             -e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \
+             -e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \
+             -e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \
+             -e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \
+             -e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \
+             -e 's|@''GNULIB_MEMCHR''@|$(GNULIB_MEMCHR)|g' \
+             -e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \
+             -e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \
+             -e 's|@''GNULIB_MEMRCHR''@|$(GNULIB_MEMRCHR)|g' \
+             -e 's|@''GNULIB_RAWMEMCHR''@|$(GNULIB_RAWMEMCHR)|g' \
+             -e 's|@''GNULIB_STPCPY''@|$(GNULIB_STPCPY)|g' \
+             -e 's|@''GNULIB_STPNCPY''@|$(GNULIB_STPNCPY)|g' \
+             -e 's|@''GNULIB_STRCHRNUL''@|$(GNULIB_STRCHRNUL)|g' \
+             -e 's|@''GNULIB_STRDUP''@|$(GNULIB_STRDUP)|g' \
+             -e 's|@''GNULIB_STRNDUP''@|$(GNULIB_STRNDUP)|g' \
+             -e 's|@''GNULIB_STRNLEN''@|$(GNULIB_STRNLEN)|g' \
+             -e 's|@''GNULIB_STRPBRK''@|$(GNULIB_STRPBRK)|g' \
+             -e 's|@''GNULIB_STRSEP''@|$(GNULIB_STRSEP)|g' \
+             -e 's|@''GNULIB_STRSTR''@|$(GNULIB_STRSTR)|g' \
+             -e 's|@''GNULIB_STRCASESTR''@|$(GNULIB_STRCASESTR)|g' \
+             -e 's|@''GNULIB_STRTOK_R''@|$(GNULIB_STRTOK_R)|g' \
+             -e 's|@''GNULIB_STRERROR''@|$(GNULIB_STRERROR)|g' \
+             -e 's|@''GNULIB_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \
+             -e 's|@''GNULIB_STRVERSCMP''@|$(GNULIB_STRVERSCMP)|g' \
+             < $(srcdir)/string.in.h | \
+         sed -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
+             -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
+             -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
+             -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
+             -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \
+             -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
+             -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
+             -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
+             -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
+             -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
+             -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
+             -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
+             -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
+             -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
+             -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
+             -e 's|@''HAVE_DECL_STRERROR''@|$(HAVE_DECL_STRERROR)|g' \
+             -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
+             -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
+             -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
+             -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+             -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
+             -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
+             -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
+             -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
+             -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \
+             -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
+             -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
+             -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+             < $(srcdir)/string.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <strings.h> when the system
+# doesn't have one that works with the given compiler.
+strings.h: strings.in.h $(WARN_ON_USE_H) $(ARG_NONNULL_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \
+             -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \
+             -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/strings.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <sys/stat.h> when the system
+# has one that is incomplete.
+sys/stat.h: sys_stat.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_at)$(MKDIR_P) sys
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
+             -e 's|@''GNULIB_FCHMODAT''@|$(GNULIB_FCHMODAT)|g' \
+             -e 's|@''GNULIB_FSTATAT''@|$(GNULIB_FSTATAT)|g' \
+             -e 's|@''GNULIB_FUTIMENS''@|$(GNULIB_FUTIMENS)|g' \
+             -e 's|@''GNULIB_LCHMOD''@|$(GNULIB_LCHMOD)|g' \
+             -e 's|@''GNULIB_LSTAT''@|$(GNULIB_LSTAT)|g' \
+             -e 's|@''GNULIB_MKDIRAT''@|$(GNULIB_MKDIRAT)|g' \
+             -e 's|@''GNULIB_MKFIFO''@|$(GNULIB_MKFIFO)|g' \
+             -e 's|@''GNULIB_MKFIFOAT''@|$(GNULIB_MKFIFOAT)|g' \
+             -e 's|@''GNULIB_MKNOD''@|$(GNULIB_MKNOD)|g' \
+             -e 's|@''GNULIB_MKNODAT''@|$(GNULIB_MKNODAT)|g' \
+             -e 's|@''GNULIB_STAT''@|$(GNULIB_STAT)|g' \
+             -e 's|@''GNULIB_UTIMENSAT''@|$(GNULIB_UTIMENSAT)|g' \
+             -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \
+             -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \
+             -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \
+             -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \
+             -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \
+             -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \
+             -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \
+             -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \
+             -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \
+             -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \
+             -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \
+             -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \
+             -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \
+             -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \
+             -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \
+             -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \
+             -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \
+             -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \
+             -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \
+             -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/sys_stat.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <sys/time.h> when the system
+# doesn't have one that works with the given compiler.
+sys/time.h: sys_time.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_at)$(MKDIR_P) sys
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \
+             -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \
+             -e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \
+             -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \
+             -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/sys_time.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <sysexits.h> when the system
+# doesn't have one that works with the given compiler.
+sysexits.h: sysexits.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''HAVE_SYSEXITS_H''@|$(HAVE_SYSEXITS_H)|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_SYSEXITS_H''@|$(NEXT_SYSEXITS_H)|g' \
+             < $(srcdir)/sysexits.in.h; \
+       } > $@-t && \
+       mv -f $@-t $@
+
+# We need the following in order to create <time.h> when the system
+# doesn't have one that works with the given compiler.
+time.h: time.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \
+             -e 's|@''GNULIB_MKTIME''@|$(GNULIB_MKTIME)|g' \
+             -e 's|@''GNULIB_NANOSLEEP''@|$(GNULIB_NANOSLEEP)|g' \
+             -e 's|@''GNULIB_STRPTIME''@|$(GNULIB_STRPTIME)|g' \
+             -e 's|@''GNULIB_TIMEGM''@|$(GNULIB_TIMEGM)|g' \
+             -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \
+             -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \
+             -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \
+             -e 's|@''REPLACE_STRPTIME''@|$(REPLACE_STRPTIME)|g' \
+             -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \
+             -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
+             -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/time.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create an empty placeholder for
+# <unistd.h> when the system doesn't have one.
+unistd.h: unistd.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
+             -e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \
+             -e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|g' \
+             -e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \
+             -e 's|@''GNULIB_DUP3''@|$(GNULIB_DUP3)|g' \
+             -e 's|@''GNULIB_ENVIRON''@|$(GNULIB_ENVIRON)|g' \
+             -e 's|@''GNULIB_EUIDACCESS''@|$(GNULIB_EUIDACCESS)|g' \
+             -e 's|@''GNULIB_FACCESSAT''@|$(GNULIB_FACCESSAT)|g' \
+             -e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \
+             -e 's|@''GNULIB_FCHOWNAT''@|$(GNULIB_FCHOWNAT)|g' \
+             -e 's|@''GNULIB_FSYNC''@|$(GNULIB_FSYNC)|g' \
+             -e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \
+             -e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \
+             -e 's|@''GNULIB_GETDOMAINNAME''@|$(GNULIB_GETDOMAINNAME)|g' \
+             -e 's|@''GNULIB_GETDTABLESIZE''@|$(GNULIB_GETDTABLESIZE)|g' \
+             -e 's|@''GNULIB_GETGROUPS''@|$(GNULIB_GETGROUPS)|g' \
+             -e 's|@''GNULIB_GETHOSTNAME''@|$(GNULIB_GETHOSTNAME)|g' \
+             -e 's|@''GNULIB_GETLOGIN''@|$(GNULIB_GETLOGIN)|g' \
+             -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \
+             -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \
+             -e 's|@''GNULIB_GETUSERSHELL''@|$(GNULIB_GETUSERSHELL)|g' \
+             -e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \
+             -e 's|@''GNULIB_LINK''@|$(GNULIB_LINK)|g' \
+             -e 's|@''GNULIB_LINKAT''@|$(GNULIB_LINKAT)|g' \
+             -e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \
+             -e 's|@''GNULIB_PIPE2''@|$(GNULIB_PIPE2)|g' \
+             -e 's|@''GNULIB_PREAD''@|$(GNULIB_PREAD)|g' \
+             -e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \
+             -e 's|@''GNULIB_READLINKAT''@|$(GNULIB_READLINKAT)|g' \
+             -e 's|@''GNULIB_RMDIR''@|$(GNULIB_RMDIR)|g' \
+             -e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \
+             -e 's|@''GNULIB_SYMLINK''@|$(GNULIB_SYMLINK)|g' \
+             -e 's|@''GNULIB_SYMLINKAT''@|$(GNULIB_SYMLINKAT)|g' \
+             -e 's|@''GNULIB_UNISTD_H_GETOPT''@|$(GNULIB_UNISTD_H_GETOPT)|g' \
+             -e 's|@''GNULIB_UNISTD_H_SIGPIPE''@|$(GNULIB_UNISTD_H_SIGPIPE)|g' \
+             -e 's|@''GNULIB_UNLINK''@|$(GNULIB_UNLINK)|g' \
+             -e 's|@''GNULIB_UNLINKAT''@|$(GNULIB_UNLINKAT)|g' \
+             -e 's|@''GNULIB_USLEEP''@|$(GNULIB_USLEEP)|g' \
+             -e 's|@''GNULIB_WRITE''@|$(GNULIB_WRITE)|g' \
+             < $(srcdir)/unistd.in.h | \
+         sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \
+             -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
+             -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \
+             -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \
+             -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \
+             -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \
+             -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \
+             -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
+             -e 's|@''HAVE_GETDOMAINNAME''@|$(HAVE_GETDOMAINNAME)|g' \
+             -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \
+             -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \
+             -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \
+             -e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \
+             -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
+             -e 's|@''HAVE_GETUSERSHELL''@|$(HAVE_GETUSERSHELL)|g' \
+             -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \
+             -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
+             -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \
+             -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \
+             -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \
+             -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
+             -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \
+             -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
+             -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \
+             -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \
+             -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \
+             -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \
+             -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
+             -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
+             -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
+             -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
+             -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
+             -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
+             -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \
+             -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \
+             -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \
+             -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \
+             -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
+             -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \
+             -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
+             -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
+             -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
+             -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \
+             -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
+             -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \
+             -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \
+             -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \
+             -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \
+             -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \
+             -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \
+             -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \
+             -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \
+             -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \
+             -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \
+             -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+       } > $@-t && \
+       mv $@-t $@
+# The warn-on-use.h that gets inserted into generated .h files is the same as
+# build-aux/warn-on-use.h, except that it has the copyright header cut off.
+warn-on-use.h: $(top_srcdir)/build-aux/warn-on-use.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       sed -n -e '/^.ifndef/,$$p' \
+         < $(top_srcdir)/build-aux/warn-on-use.h \
+         > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <wchar.h> when the system
+# version does not work standalone.
+wchar.h: wchar.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
+             -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
+             -e 's|@''GNULIB_BTOWC''@|$(GNULIB_BTOWC)|g' \
+             -e 's|@''GNULIB_WCTOB''@|$(GNULIB_WCTOB)|g' \
+             -e 's|@''GNULIB_MBSINIT''@|$(GNULIB_MBSINIT)|g' \
+             -e 's|@''GNULIB_MBRTOWC''@|$(GNULIB_MBRTOWC)|g' \
+             -e 's|@''GNULIB_MBRLEN''@|$(GNULIB_MBRLEN)|g' \
+             -e 's|@''GNULIB_MBSRTOWCS''@|$(GNULIB_MBSRTOWCS)|g' \
+             -e 's|@''GNULIB_MBSNRTOWCS''@|$(GNULIB_MBSNRTOWCS)|g' \
+             -e 's|@''GNULIB_WCRTOMB''@|$(GNULIB_WCRTOMB)|g' \
+             -e 's|@''GNULIB_WCSRTOMBS''@|$(GNULIB_WCSRTOMBS)|g' \
+             -e 's|@''GNULIB_WCSNRTOMBS''@|$(GNULIB_WCSNRTOMBS)|g' \
+             -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \
+             -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
+             -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
+             -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
+             -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
+             -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
+             -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
+             -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
+             -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
+             -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
+             -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
+             -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
+             -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
+             -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
+             -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
+             -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
+             -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
+             -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
+             -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
+             -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
+             -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
+             -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
+             -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
+             -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
+             -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+           < $(srcdir)/wchar.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <wctype.h> when the system
+# doesn't have one that works with the given compiler.
+wctype.h: wctype.in.h $(CXXDEFS_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
+             -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
+             -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
+             -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/wctype.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+mostlyclean-local: mostlyclean-generic
+       @for dir in '' $(MOSTLYCLEANDIRS); do \
+         if test -n "$$dir" && test -d $$dir; then \
+           echo "rmdir $$dir"; rmdir $$dir; \
+         fi; \
+       done; \
+       :
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gnu/alloca.c b/gnu/alloca.c
new file mode 100644 (file)
index 0000000..8d98020
--- /dev/null
@@ -0,0 +1,491 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* alloca.c -- allocate automatically reclaimed memory
+   (Mostly) portable public-domain implementation -- D A Gwyn
+
+   This implementation of the PWB library alloca function,
+   which is used to allocate space off the run-time stack so
+   that it is automatically reclaimed upon procedure exit,
+   was inspired by discussions with J. Q. Johnson of Cornell.
+   J.Otto Tennant <jot@cray.com> contributed the Cray support.
+
+   There are some preprocessor constants that can
+   be defined when compiling for your specific system, for
+   improved efficiency; however, the defaults should be okay.
+
+   The general concept of this implementation is to keep
+   track of all alloca-allocated blocks, and reclaim any
+   that are found to be deeper in the stack than the current
+   invocation.  This heuristic does not reclaim storage as
+   soon as it becomes invalid, but it will do so eventually.
+
+   As a special case, alloca(0) reclaims storage without
+   allocating any.  It is a good idea to use alloca(0) in
+   your main control loop, etc. to force garbage collection.  */
+
+#include <config.h>
+
+#include <alloca.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+#ifdef emacs
+# include "lisp.h"
+# include "blockinput.h"
+# ifdef EMACS_FREE
+#  undef free
+#  define free EMACS_FREE
+# endif
+#else
+# define memory_full() abort ()
+#endif
+
+/* If compiling with GCC 2, this file's not needed.  */
+#if !defined (__GNUC__) || __GNUC__ < 2
+
+/* If someone has defined alloca as a macro,
+   there must be some other way alloca is supposed to work.  */
+# ifndef alloca
+
+#  ifdef emacs
+#   ifdef static
+/* actually, only want this if static is defined as ""
+   -- this is for usg, in which emacs must undefine static
+   in order to make unexec workable
+   */
+#    ifndef STACK_DIRECTION
+you
+lose
+-- must know STACK_DIRECTION at compile-time
+/* Using #error here is not wise since this file should work for
+   old and obscure compilers.  */
+#    endif /* STACK_DIRECTION undefined */
+#   endif /* static */
+#  endif /* emacs */
+
+/* If your stack is a linked list of frames, you have to
+   provide an "address metric" ADDRESS_FUNCTION macro.  */
+
+#  if defined (CRAY) && defined (CRAY_STACKSEG_END)
+long i00afunc ();
+#   define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg))
+#  else
+#   define ADDRESS_FUNCTION(arg) &(arg)
+#  endif
+
+/* Define STACK_DIRECTION if you know the direction of stack
+   growth for your system; otherwise it will be automatically
+   deduced at run-time.
+
+   STACK_DIRECTION > 0 => grows toward higher addresses
+   STACK_DIRECTION < 0 => grows toward lower addresses
+   STACK_DIRECTION = 0 => direction of growth unknown  */
+
+#  ifndef STACK_DIRECTION
+#   define STACK_DIRECTION      0       /* Direction unknown.  */
+#  endif
+
+#  if STACK_DIRECTION != 0
+
+#   define STACK_DIR    STACK_DIRECTION /* Known at compile-time.  */
+
+#  else /* STACK_DIRECTION == 0; need run-time code.  */
+
+static int stack_dir;           /* 1 or -1 once known.  */
+#   define STACK_DIR    stack_dir
+
+static void
+find_stack_direction (void)
+{
+  static char *addr = NULL;     /* Address of first `dummy', once known.  */
+  auto char dummy;              /* To get stack address.  */
+
+  if (addr == NULL)
+    {                           /* Initial entry.  */
+      addr = ADDRESS_FUNCTION (dummy);
+
+      find_stack_direction ();  /* Recurse once.  */
+    }
+  else
+    {
+      /* Second entry.  */
+      if (ADDRESS_FUNCTION (dummy) > addr)
+        stack_dir = 1;          /* Stack grew upward.  */
+      else
+        stack_dir = -1;         /* Stack grew downward.  */
+    }
+}
+
+#  endif /* STACK_DIRECTION == 0 */
+
+/* An "alloca header" is used to:
+   (a) chain together all alloca'ed blocks;
+   (b) keep track of stack depth.
+
+   It is very important that sizeof(header) agree with malloc
+   alignment chunk size.  The following default should work okay.  */
+
+#  ifndef       ALIGN_SIZE
+#   define ALIGN_SIZE   sizeof(double)
+#  endif
+
+typedef union hdr
+{
+  char align[ALIGN_SIZE];       /* To force sizeof(header).  */
+  struct
+    {
+      union hdr *next;          /* For chaining headers.  */
+      char *deep;               /* For stack depth measure.  */
+    } h;
+} header;
+
+static header *last_alloca_header = NULL;       /* -> last alloca header.  */
+
+/* Return a pointer to at least SIZE bytes of storage,
+   which will be automatically reclaimed upon exit from
+   the procedure that called alloca.  Originally, this space
+   was supposed to be taken from the current stack frame of the
+   caller, but that method cannot be made to work for some
+   implementations of C, for example under Gould's UTX/32.  */
+
+void *
+alloca (size_t size)
+{
+  auto char probe;              /* Probes stack depth: */
+  register char *depth = ADDRESS_FUNCTION (probe);
+
+#  if STACK_DIRECTION == 0
+  if (STACK_DIR == 0)           /* Unknown growth direction.  */
+    find_stack_direction ();
+#  endif
+
+  /* Reclaim garbage, defined as all alloca'd storage that
+     was allocated from deeper in the stack than currently.  */
+
+  {
+    register header *hp;        /* Traverses linked list.  */
+
+#  ifdef emacs
+    BLOCK_INPUT;
+#  endif
+
+    for (hp = last_alloca_header; hp != NULL;)
+      if ((STACK_DIR > 0 && hp->h.deep > depth)
+          || (STACK_DIR < 0 && hp->h.deep < depth))
+        {
+          register header *np = hp->h.next;
+
+          free (hp);            /* Collect garbage.  */
+
+          hp = np;              /* -> next header.  */
+        }
+      else
+        break;                  /* Rest are not deeper.  */
+
+    last_alloca_header = hp;    /* -> last valid storage.  */
+
+#  ifdef emacs
+    UNBLOCK_INPUT;
+#  endif
+  }
+
+  if (size == 0)
+    return NULL;                /* No allocation required.  */
+
+  /* Allocate combined header + user data storage.  */
+
+  {
+    /* Address of header.  */
+    register header *new;
+
+    size_t combined_size = sizeof (header) + size;
+    if (combined_size < sizeof (header))
+      memory_full ();
+
+    new = malloc (combined_size);
+
+    if (! new)
+      memory_full ();
+
+    new->h.next = last_alloca_header;
+    new->h.deep = depth;
+
+    last_alloca_header = new;
+
+    /* User storage begins just after header.  */
+
+    return (void *) (new + 1);
+  }
+}
+
+#  if defined (CRAY) && defined (CRAY_STACKSEG_END)
+
+#   ifdef DEBUG_I00AFUNC
+#    include <stdio.h>
+#   endif
+
+#   ifndef CRAY_STACK
+#    define CRAY_STACK
+#    ifndef CRAY2
+/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */
+struct stack_control_header
+  {
+    long shgrow:32;             /* Number of times stack has grown.  */
+    long shaseg:32;             /* Size of increments to stack.  */
+    long shhwm:32;              /* High water mark of stack.  */
+    long shsize:32;             /* Current size of stack (all segments).  */
+  };
+
+/* The stack segment linkage control information occurs at
+   the high-address end of a stack segment.  (The stack
+   grows from low addresses to high addresses.)  The initial
+   part of the stack segment linkage control information is
+   0200 (octal) words.  This provides for register storage
+   for the routine which overflows the stack.  */
+
+struct stack_segment_linkage
+  {
+    long ss[0200];              /* 0200 overflow words.  */
+    long sssize:32;             /* Number of words in this segment.  */
+    long ssbase:32;             /* Offset to stack base.  */
+    long:32;
+    long sspseg:32;             /* Offset to linkage control of previous
+                                   segment of stack.  */
+    long:32;
+    long sstcpt:32;             /* Pointer to task common address block.  */
+    long sscsnm;                /* Private control structure number for
+                                   microtasking.  */
+    long ssusr1;                /* Reserved for user.  */
+    long ssusr2;                /* Reserved for user.  */
+    long sstpid;                /* Process ID for pid based multi-tasking.  */
+    long ssgvup;                /* Pointer to multitasking thread giveup.  */
+    long sscray[7];             /* Reserved for Cray Research.  */
+    long ssa0;
+    long ssa1;
+    long ssa2;
+    long ssa3;
+    long ssa4;
+    long ssa5;
+    long ssa6;
+    long ssa7;
+    long sss0;
+    long sss1;
+    long sss2;
+    long sss3;
+    long sss4;
+    long sss5;
+    long sss6;
+    long sss7;
+  };
+
+#    else /* CRAY2 */
+/* The following structure defines the vector of words
+   returned by the STKSTAT library routine.  */
+struct stk_stat
+  {
+    long now;                   /* Current total stack size.  */
+    long maxc;                  /* Amount of contiguous space which would
+                                   be required to satisfy the maximum
+                                   stack demand to date.  */
+    long high_water;            /* Stack high-water mark.  */
+    long overflows;             /* Number of stack overflow ($STKOFEN) calls.  */
+    long hits;                  /* Number of internal buffer hits.  */
+    long extends;               /* Number of block extensions.  */
+    long stko_mallocs;          /* Block allocations by $STKOFEN.  */
+    long underflows;            /* Number of stack underflow calls ($STKRETN).  */
+    long stko_free;             /* Number of deallocations by $STKRETN.  */
+    long stkm_free;             /* Number of deallocations by $STKMRET.  */
+    long segments;              /* Current number of stack segments.  */
+    long maxs;                  /* Maximum number of stack segments so far.  */
+    long pad_size;              /* Stack pad size.  */
+    long current_address;       /* Current stack segment address.  */
+    long current_size;          /* Current stack segment size.  This
+                                   number is actually corrupted by STKSTAT to
+                                   include the fifteen word trailer area.  */
+    long initial_address;       /* Address of initial segment.  */
+    long initial_size;          /* Size of initial segment.  */
+  };
+
+/* The following structure describes the data structure which trails
+   any stack segment.  I think that the description in 'asdef' is
+   out of date.  I only describe the parts that I am sure about.  */
+
+struct stk_trailer
+  {
+    long this_address;          /* Address of this block.  */
+    long this_size;             /* Size of this block (does not include
+                                   this trailer).  */
+    long unknown2;
+    long unknown3;
+    long link;                  /* Address of trailer block of previous
+                                   segment.  */
+    long unknown5;
+    long unknown6;
+    long unknown7;
+    long unknown8;
+    long unknown9;
+    long unknown10;
+    long unknown11;
+    long unknown12;
+    long unknown13;
+    long unknown14;
+  };
+
+#    endif /* CRAY2 */
+#   endif /* not CRAY_STACK */
+
+#   ifdef CRAY2
+/* Determine a "stack measure" for an arbitrary ADDRESS.
+   I doubt that "lint" will like this much.  */
+
+static long
+i00afunc (long *address)
+{
+  struct stk_stat status;
+  struct stk_trailer *trailer;
+  long *block, size;
+  long result = 0;
+
+  /* We want to iterate through all of the segments.  The first
+     step is to get the stack status structure.  We could do this
+     more quickly and more directly, perhaps, by referencing the
+     $LM00 common block, but I know that this works.  */
+
+  STKSTAT (&status);
+
+  /* Set up the iteration.  */
+
+  trailer = (struct stk_trailer *) (status.current_address
+                                    + status.current_size
+                                    - 15);
+
+  /* There must be at least one stack segment.  Therefore it is
+     a fatal error if "trailer" is null.  */
+
+  if (trailer == 0)
+    abort ();
+
+  /* Discard segments that do not contain our argument address.  */
+
+  while (trailer != 0)
+    {
+      block = (long *) trailer->this_address;
+      size = trailer->this_size;
+      if (block == 0 || size == 0)
+        abort ();
+      trailer = (struct stk_trailer *) trailer->link;
+      if ((block <= address) && (address < (block + size)))
+        break;
+    }
+
+  /* Set the result to the offset in this segment and add the sizes
+     of all predecessor segments.  */
+
+  result = address - block;
+
+  if (trailer == 0)
+    {
+      return result;
+    }
+
+  do
+    {
+      if (trailer->this_size <= 0)
+        abort ();
+      result += trailer->this_size;
+      trailer = (struct stk_trailer *) trailer->link;
+    }
+  while (trailer != 0);
+
+  /* We are done.  Note that if you present a bogus address (one
+     not in any segment), you will get a different number back, formed
+     from subtracting the address of the first block.  This is probably
+     not what you want.  */
+
+  return (result);
+}
+
+#   else /* not CRAY2 */
+/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP.
+   Determine the number of the cell within the stack,
+   given the address of the cell.  The purpose of this
+   routine is to linearize, in some sense, stack addresses
+   for alloca.  */
+
+static long
+i00afunc (long address)
+{
+  long stkl = 0;
+
+  long size, pseg, this_segment, stack;
+  long result = 0;
+
+  struct stack_segment_linkage *ssptr;
+
+  /* Register B67 contains the address of the end of the
+     current stack segment.  If you (as a subprogram) store
+     your registers on the stack and find that you are past
+     the contents of B67, you have overflowed the segment.
+
+     B67 also points to the stack segment linkage control
+     area, which is what we are really interested in.  */
+
+  stkl = CRAY_STACKSEG_END ();
+  ssptr = (struct stack_segment_linkage *) stkl;
+
+  /* If one subtracts 'size' from the end of the segment,
+     one has the address of the first word of the segment.
+
+     If this is not the first segment, 'pseg' will be
+     nonzero.  */
+
+  pseg = ssptr->sspseg;
+  size = ssptr->sssize;
+
+  this_segment = stkl - size;
+
+  /* It is possible that calling this routine itself caused
+     a stack overflow.  Discard stack segments which do not
+     contain the target address.  */
+
+  while (!(this_segment <= address && address <= stkl))
+    {
+#    ifdef DEBUG_I00AFUNC
+      fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl);
+#    endif
+      if (pseg == 0)
+        break;
+      stkl = stkl - pseg;
+      ssptr = (struct stack_segment_linkage *) stkl;
+      size = ssptr->sssize;
+      pseg = ssptr->sspseg;
+      this_segment = stkl - size;
+    }
+
+  result = address - this_segment;
+
+  /* If you subtract pseg from the current end of the stack,
+     you get the address of the previous stack segment's end.
+     This seems a little convoluted to me, but I'll bet you save
+     a cycle somewhere.  */
+
+  while (pseg != 0)
+    {
+#    ifdef DEBUG_I00AFUNC
+      fprintf (stderr, "%011o %011o\n", pseg, size);
+#    endif
+      stkl = stkl - pseg;
+      ssptr = (struct stack_segment_linkage *) stkl;
+      size = ssptr->sssize;
+      pseg = ssptr->sspseg;
+      result += size;
+    }
+  return (result);
+}
+
+#   endif /* not CRAY2 */
+#  endif /* CRAY */
+
+# endif /* no alloca */
+#endif /* not GCC version 3 */
diff --git a/gnu/alloca.in.h b/gnu/alloca.in.h
new file mode 100644 (file)
index 0000000..34f8fe5
--- /dev/null
@@ -0,0 +1,58 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Memory allocation on the stack.
+
+   Copyright (C) 1995, 1999, 2001-2004, 2006-2010 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, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H
+   means there is a real alloca function.  */
+#ifndef _GL_ALLOCA_H
+#define _GL_ALLOCA_H
+
+/* alloca (N) returns a pointer to N bytes of memory
+   allocated on the stack, which will last until the function returns.
+   Use of alloca should be avoided:
+     - inside arguments of function calls - undefined behaviour,
+     - in inline functions - the allocation may actually last until the
+       calling function returns,
+     - for huge N (say, N >= 65536) - you never know how large (or small)
+       the stack is, and when the stack cannot fulfill the memory allocation
+       request, the program just crashes.
+ */
+
+#ifndef alloca
+# ifdef __GNUC__
+#  define alloca __builtin_alloca
+# elif defined _AIX
+#  define alloca __alloca
+# elif defined _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# elif defined __DECC && defined __VMS
+#  define alloca __ALLOCA
+# else
+#  include <stddef.h>
+#  ifdef  __cplusplus
+extern "C"
+#  endif
+void *alloca (size_t);
+# endif
+#endif
+
+#endif /* _GL_ALLOCA_H */
diff --git a/gnu/areadlink-with-size.c b/gnu/areadlink-with-size.c
new file mode 100644 (file)
index 0000000..8370184
--- /dev/null
@@ -0,0 +1,106 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* 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-2010 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>  */
+
+#include <config.h>
+
+#include "areadlink.h"
+
+#include <errno.h>
+#include <limits.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#ifndef SSIZE_MAX
+# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2))
+#endif
+
+/* SYMLINK_MAX is used only for an initial memory-allocation sanity
+   check, so it's OK to guess too small on hosts where there is no
+   arbitrary limit to symbolic link length.  */
+#ifndef SYMLINK_MAX
+# define SYMLINK_MAX 1024
+#endif
+
+#define MAXSIZE (SIZE_MAX < SSIZE_MAX ? SIZE_MAX : SSIZE_MAX)
+
+/* Call readlink to get the symbolic link value of FILE.
+   SIZE is a hint as to how long the link is expected to be;
+   typically it is taken from st_size.  It need not be correct.
+   Return a pointer to that NUL-terminated string in malloc'd storage.
+   If readlink fails, malloc fails, or if the link value is longer
+   than SSIZE_MAX, return NULL (caller may use errno to diagnose).  */
+
+char *
+areadlink_with_size (char const *file, size_t size)
+{
+  /* Some buggy file systems report garbage in st_size.  Defend
+     against them by ignoring outlandish st_size values in the initial
+     memory allocation.  */
+  size_t symlink_max = SYMLINK_MAX;
+  size_t INITIAL_LIMIT_BOUND = 8 * 1024;
+  size_t initial_limit = (symlink_max < INITIAL_LIMIT_BOUND
+                          ? symlink_max + 1
+                          : INITIAL_LIMIT_BOUND);
+
+  /* The initial buffer size for the link value.  */
+  size_t buf_size = size < initial_limit ? size + 1 : initial_limit;
+
+  while (1)
+    {
+      ssize_t r;
+      size_t link_length;
+      char *buffer = malloc (buf_size);
+
+      if (buffer == NULL)
+        return NULL;
+      r = readlink (file, buffer, buf_size);
+      link_length = r;
+
+      /* On AIX 5L v5.3 and HP-UX 11i v2 04/09, readlink returns -1
+         with errno == ERANGE if the buffer is too small.  */
+      if (r < 0 && errno != ERANGE)
+        {
+          int saved_errno = errno;
+          free (buffer);
+          errno = saved_errno;
+          return NULL;
+        }
+
+      if (link_length < buf_size)
+        {
+          buffer[link_length] = 0;
+          return buffer;
+        }
+
+      free (buffer);
+      if (buf_size <= MAXSIZE / 2)
+        buf_size *= 2;
+      else if (buf_size < MAXSIZE)
+        buf_size = MAXSIZE;
+      else
+        {
+          errno = ENOMEM;
+          return NULL;
+        }
+    }
+}
diff --git a/gnu/areadlink.h b/gnu/areadlink.h
new file mode 100644 (file)
index 0000000..d17b4c3
--- /dev/null
@@ -0,0 +1,35 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Read symbolic links without size limitation.
+
+   Copyright (C) 2001, 2003-2004, 2007, 2009-2010 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>  */
+
+#include <stddef.h>
+
+extern char *areadlink (char const *filename);
+extern char *areadlink_with_size (char const *filename, size_t size_hint);
+
+#if GNULIB_AREADLINKAT
+extern char *areadlinkat (int fd, char const *filename);
+#endif
+
+#if GNULIB_AREADLINKAT_WITH_SIZE
+extern char *areadlinkat_with_size (int fd, char const *filename,
+                                    size_t size_hint);
+#endif
diff --git a/gnu/argmatch.c b/gnu/argmatch.c
new file mode 100644 (file)
index 0000000..5a176f8
--- /dev/null
@@ -0,0 +1,279 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* argmatch.c -- find a match for a string in an array
+
+   Copyright (C) 1990, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
+   2009, 2010 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 David MacKenzie <djm@ai.mit.edu>
+   Modified by Akim Demaille <demaille@inf.enst.fr> */
+
+#include <config.h>
+
+/* Specification.  */
+#include "argmatch.h"
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
+#include "error.h"
+#include "quotearg.h"
+#include "quote.h"
+
+#if USE_UNLOCKED_IO
+# include "unlocked-io.h"
+#endif
+
+/* When reporting an invalid argument, show nonprinting characters
+   by using the quoting style ARGMATCH_QUOTING_STYLE.  Do not use
+   literal_quoting_style.  */
+#ifndef ARGMATCH_QUOTING_STYLE
+# define ARGMATCH_QUOTING_STYLE locale_quoting_style
+#endif
+
+/* Non failing version of argmatch call this function after failing. */
+#ifndef ARGMATCH_DIE
+# include "exitfail.h"
+# define ARGMATCH_DIE exit (exit_failure)
+#endif
+
+#ifdef ARGMATCH_DIE_DECL
+ARGMATCH_DIE_DECL;
+#endif
+
+static void
+__argmatch_die (void)
+{
+  ARGMATCH_DIE;
+}
+
+/* Used by XARGMATCH and XARGCASEMATCH.  See description in argmatch.h.
+   Default to __argmatch_die, but allow caller to change this at run-time. */
+argmatch_exit_fn argmatch_die = __argmatch_die;
+
+\f
+/* If ARG is an unambiguous match for an element of the
+   NULL-terminated array ARGLIST, return the index in ARGLIST
+   of the matched element, else -1 if it does not match any element
+   or -2 if it is ambiguous (is a prefix of more than one element).
+
+   If VALLIST is none null, use it to resolve ambiguities limited to
+   synonyms, i.e., for
+     "yes", "yop" -> 0
+     "no", "nope" -> 1
+   "y" is a valid argument, for `0', and "n" for `1'.  */
+
+ptrdiff_t
+argmatch (const char *arg, const char *const *arglist,
+          const char *vallist, size_t valsize)
+{
+  size_t i;                     /* Temporary index in ARGLIST.  */
+  size_t arglen;                /* Length of ARG.  */
+  ptrdiff_t matchind = -1;      /* Index of first nonexact match.  */
+  bool ambiguous = false;       /* If true, multiple nonexact match(es).  */
+
+  arglen = strlen (arg);
+
+  /* Test all elements for either exact match or abbreviated matches.  */
+  for (i = 0; arglist[i]; i++)
+    {
+      if (!strncmp (arglist[i], arg, arglen))
+        {
+          if (strlen (arglist[i]) == arglen)
+            /* Exact match found.  */
+            return i;
+          else if (matchind == -1)
+            /* First nonexact match found.  */
+            matchind = i;
+          else
+            {
+              /* Second nonexact match found.  */
+              if (vallist == NULL
+                  || memcmp (vallist + valsize * matchind,
+                             vallist + valsize * i, valsize))
+                {
+                  /* There is a real ambiguity, or we could not
+                     disambiguate. */
+                  ambiguous = true;
+                }
+            }
+        }
+    }
+  if (ambiguous)
+    return -2;
+  else
+    return matchind;
+}
+
+/* Error reporting for argmatch.
+   CONTEXT is a description of the type of entity that was being matched.
+   VALUE is the invalid value that was given.
+   PROBLEM is the return value from argmatch.  */
+
+void
+argmatch_invalid (const char *context, const char *value, ptrdiff_t problem)
+{
+  char const *format = (problem == -1
+                        ? _("invalid argument %s for %s")
+                        : _("ambiguous argument %s for %s"));
+
+  error (0, 0, format, quotearg_n_style (0, ARGMATCH_QUOTING_STYLE, value),
+         quote_n (1, context));
+}
+
+/* List the valid arguments for argmatch.
+   ARGLIST is the same as in argmatch.
+   VALLIST is a pointer to an array of values.
+   VALSIZE is the size of the elements of VALLIST */
+void
+argmatch_valid (const char *const *arglist,
+                const char *vallist, size_t valsize)
+{
+  size_t i;
+  const char *last_val = NULL;
+
+  /* We try to put synonyms on the same line.  The assumption is that
+     synonyms follow each other */
+  fprintf (stderr, _("Valid arguments are:"));
+  for (i = 0; arglist[i]; i++)
+    if ((i == 0)
+        || memcmp (last_val, vallist + valsize * i, valsize))
+      {
+        fprintf (stderr, "\n  - `%s'", arglist[i]);
+        last_val = vallist + valsize * i;
+      }
+    else
+      {
+        fprintf (stderr, ", `%s'", arglist[i]);
+      }
+  putc ('\n', stderr);
+}
+
+/* Never failing versions of the previous functions.
+
+   CONTEXT is the context for which argmatch is called (e.g.,
+   "--version-control", or "$VERSION_CONTROL" etc.).  Upon failure,
+   calls the (supposed never to return) function EXIT_FN. */
+
+ptrdiff_t
+__xargmatch_internal (const char *context,
+                      const char *arg, const char *const *arglist,
+                      const char *vallist, size_t valsize,
+                      argmatch_exit_fn exit_fn)
+{
+  ptrdiff_t res = argmatch (arg, arglist, vallist, valsize);
+  if (res >= 0)
+    /* Success. */
+    return res;
+
+  /* We failed.  Explain why. */
+  argmatch_invalid (context, arg, res);
+  argmatch_valid (arglist, vallist, valsize);
+  (*exit_fn) ();
+
+  return -1; /* To please the compilers. */
+}
+
+/* Look for VALUE in VALLIST, an array of objects of size VALSIZE and
+   return the first corresponding argument in ARGLIST */
+const char *
+argmatch_to_argument (const char *value,
+                      const char *const *arglist,
+                      const char *vallist, size_t valsize)
+{
+  size_t i;
+
+  for (i = 0; arglist[i]; i++)
+    if (!memcmp (value, vallist + valsize * i, valsize))
+      return arglist[i];
+  return NULL;
+}
+
+#ifdef TEST
+/*
+ * Based on "getversion.c" by David MacKenzie <djm@gnu.ai.mit.edu>
+ */
+char *program_name;
+
+/* When to make backup files.  */
+enum backup_type
+{
+  /* Never make backups.  */
+  no_backups,
+
+  /* Make simple backups of every file.  */
+  simple_backups,
+
+  /* Make numbered backups of files that already have numbered backups,
+     and simple backups of the others.  */
+  numbered_existing_backups,
+
+  /* Make numbered backups of every file.  */
+  numbered_backups
+};
+
+/* Two tables describing arguments (keys) and their corresponding
+   values */
+static const char *const backup_args[] =
+{
+  "no", "none", "off",
+  "simple", "never",
+  "existing", "nil",
+  "numbered", "t",
+  0
+};
+
+static const enum backup_type backup_vals[] =
+{
+  no_backups, no_backups, no_backups,
+  simple_backups, simple_backups,
+  numbered_existing_backups, numbered_existing_backups,
+  numbered_backups, numbered_backups
+};
+
+int
+main (int argc, const char *const *argv)
+{
+  const char *cp;
+  enum backup_type backup_type = no_backups;
+
+  program_name = (char *) argv[0];
+
+  if (argc > 2)
+    {
+      fprintf (stderr, "Usage: %s [VERSION_CONTROL]\n", program_name);
+      exit (1);
+    }
+
+  if ((cp = getenv ("VERSION_CONTROL")))
+    backup_type = XARGMATCH ("$VERSION_CONTROL", cp,
+                             backup_args, backup_vals);
+
+  if (argc == 2)
+    backup_type = XARGMATCH (program_name, argv[1],
+                             backup_args, backup_vals);
+
+  printf ("The version control is `%s'\n",
+          ARGMATCH_TO_ARGUMENT (backup_type, backup_args, backup_vals));
+
+  return 0;
+}
+#endif
diff --git a/gnu/argmatch.h b/gnu/argmatch.h
new file mode 100644 (file)
index 0000000..15eb04d
--- /dev/null
@@ -0,0 +1,104 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* argmatch.h -- definitions and prototypes for argmatch.c
+
+   Copyright (C) 1990, 1998, 1999, 2001, 2002, 2004, 2005, 2009, 2010 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 David MacKenzie <djm@ai.mit.edu>
+   Modified by Akim Demaille <demaille@inf.enst.fr> */
+
+#ifndef ARGMATCH_H_
+# define ARGMATCH_H_ 1
+
+# include <stddef.h>
+
+# include "verify.h"
+
+# define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array))
+
+/* Assert there are as many real arguments as there are values
+   (argument list ends with a NULL guard).  */
+
+# define ARGMATCH_VERIFY(Arglist, Vallist) \
+    verify (ARRAY_CARDINALITY (Arglist) == ARRAY_CARDINALITY (Vallist) + 1)
+
+/* Return the index of the element of ARGLIST (NULL terminated) that
+   matches with ARG.  If VALLIST is not NULL, then use it to resolve
+   false ambiguities (i.e., different matches of ARG but corresponding
+   to the same values in VALLIST).  */
+
+ptrdiff_t argmatch (char const *arg, char const *const *arglist,
+                    char const *vallist, size_t valsize);
+
+# define ARGMATCH(Arg, Arglist, Vallist) \
+  argmatch (Arg, Arglist, (char const *) (Vallist), sizeof *(Vallist))
+
+/* xargmatch calls this function when it fails.  This function should not
+   return.  By default, this is a function that calls ARGMATCH_DIE which
+   in turn defaults to `exit (exit_failure)'.  */
+typedef void (*argmatch_exit_fn) (void);
+extern argmatch_exit_fn argmatch_die;
+
+/* Report on stderr why argmatch failed.  Report correct values. */
+
+void argmatch_invalid (char const *context, char const *value,
+                       ptrdiff_t problem);
+
+/* Left for compatibility with the old name invalid_arg */
+
+# define invalid_arg(Context, Value, Problem) \
+  argmatch_invalid (Context, Value, Problem)
+
+
+
+/* Report on stderr the list of possible arguments.  */
+
+void argmatch_valid (char const *const *arglist,
+                     char const *vallist, size_t valsize);
+
+# define ARGMATCH_VALID(Arglist, Vallist) \
+  argmatch_valid (Arglist, (char const *) (Vallist), sizeof *(Vallist))
+
+
+
+/* Same as argmatch, but upon failure, reports a explanation on the
+   failure, and exits using the function EXIT_FN. */
+
+ptrdiff_t __xargmatch_internal (char const *context,
+                                char const *arg, char const *const *arglist,
+                                char const *vallist, size_t valsize,
+                                argmatch_exit_fn exit_fn);
+
+/* Programmer friendly interface to __xargmatch_internal. */
+
+# define XARGMATCH(Context, Arg, Arglist, Vallist)              \
+  ((Vallist) [__xargmatch_internal (Context, Arg, Arglist,      \
+                                    (char const *) (Vallist),   \
+                                    sizeof *(Vallist),          \
+                                    argmatch_die)])
+
+/* Convert a value into a corresponding argument. */
+
+char const *argmatch_to_argument (char const *value,
+                                  char const *const *arglist,
+                                  char const *vallist, size_t valsize);
+
+# define ARGMATCH_TO_ARGUMENT(Value, Arglist, Vallist)                  \
+  argmatch_to_argument (Value, Arglist,                                 \
+                        (char const *) (Vallist), sizeof *(Vallist))
+
+#endif /* ARGMATCH_H_ */
diff --git a/gnu/argp-ba.c b/gnu/argp-ba.c
new file mode 100644 (file)
index 0000000..d8ae7dd
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Default definition for ARGP_PROGRAM_BUG_ADDRESS.
+   Copyright (C) 1996, 1997, 1999, 2009, 2010 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by Miles Bader <miles@gnu.ai.mit.edu>.
+
+   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 set by the user program, it should point to string that is the
+   bug-reporting address for the program.  It will be printed by argp_help if
+   the ARGP_HELP_BUG_ADDR flag is set (as it is by various standard help
+   messages), embedded in a sentence that says something like `Report bugs to
+   ADDR.'.  */
+const char *argp_program_bug_address
+/* This variable should be zero-initialized.  On most systems, putting it into
+   BSS is sufficient.  Not so on MacOS X 10.3 and 10.4, see
+   <http://lists.gnu.org/archive/html/bug-gnulib/2009-01/msg00329.html>
+   <http://lists.gnu.org/archive/html/bug-gnulib/2009-08/msg00096.html>.  */
+#if defined __ELF__
+  /* On ELF systems, variables in BSS behave well.  */
+#else
+  = (const char *) 0
+#endif
+  ;
diff --git a/gnu/argp-eexst.c b/gnu/argp-eexst.c
new file mode 100644 (file)
index 0000000..cf809aa
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Default definition for ARGP_ERR_EXIT_STATUS
+   Copyright (C) 1997, 2009, 2010 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by Miles Bader <miles@gnu.ai.mit.edu>.
+
+   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/>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <sysexits.h>
+
+#include "argp.h"
+
+/* The exit status that argp will use when exiting due to a parsing error.
+   If not defined or set by the user program, this defaults to EX_USAGE from
+   <sysexits.h>.  */
+error_t argp_err_exit_status = EX_USAGE;
diff --git a/gnu/argp-fmtstream.c b/gnu/argp-fmtstream.c
new file mode 100644 (file)
index 0000000..1cda307
--- /dev/null
@@ -0,0 +1,437 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Word-wrapping and line-truncating streams
+   Copyright (C) 1997-1999, 2001-2003, 2005, 2009-2010 Free Software
+   Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by Miles Bader <miles@gnu.ai.mit.edu>.
+
+   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/>.  */
+
+/* This package emulates glibc `line_wrap_stream' semantics for systems that
+   don't have that.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <stdarg.h>
+#include <ctype.h>
+
+#include "argp-fmtstream.h"
+#include "argp-namefrob.h"
+
+#ifndef ARGP_FMTSTREAM_USE_LINEWRAP
+
+#ifndef isblank
+#define isblank(ch) ((ch)==' ' || (ch)=='\t')
+#endif
+
+#if defined _LIBC && defined USE_IN_LIBIO
+# include <wchar.h>
+# include <libio/libioP.h>
+# define __vsnprintf(s, l, f, a) _IO_vsnprintf (s, l, f, a)
+#endif
+
+#define INIT_BUF_SIZE 200
+#define PRINTF_SIZE_GUESS 150
+\f
+/* Return an argp_fmtstream that outputs to STREAM, and which prefixes lines
+   written on it with LMARGIN spaces and limits them to RMARGIN columns
+   total.  If WMARGIN >= 0, words that extend past RMARGIN are wrapped by
+   replacing the whitespace before them with a newline and WMARGIN spaces.
+   Otherwise, chars beyond RMARGIN are simply dropped until a newline.
+   Returns NULL if there was an error.  */
+argp_fmtstream_t
+__argp_make_fmtstream (FILE *stream,
+                       size_t lmargin, size_t rmargin, ssize_t wmargin)
+{
+  argp_fmtstream_t fs;
+
+  fs = (struct argp_fmtstream *) malloc (sizeof (struct argp_fmtstream));
+  if (fs != NULL)
+    {
+      fs->stream = stream;
+
+      fs->lmargin = lmargin;
+      fs->rmargin = rmargin;
+      fs->wmargin = wmargin;
+      fs->point_col = 0;
+      fs->point_offs = 0;
+
+      fs->buf = (char *) malloc (INIT_BUF_SIZE);
+      if (! fs->buf)
+        {
+          free (fs);
+          fs = 0;
+        }
+      else
+        {
+          fs->p = fs->buf;
+          fs->end = fs->buf + INIT_BUF_SIZE;
+        }
+    }
+
+  return fs;
+}
+#if 0
+/* Not exported.  */
+#ifdef weak_alias
+weak_alias (__argp_make_fmtstream, argp_make_fmtstream)
+#endif
+#endif
+
+/* Flush FS to its stream, and free it (but don't close the stream).  */
+void
+__argp_fmtstream_free (argp_fmtstream_t fs)
+{
+  __argp_fmtstream_update (fs);
+  if (fs->p > fs->buf)
+    {
+#ifdef USE_IN_LIBIO
+      __fxprintf (fs->stream, "%.*s", (int) (fs->p - fs->buf), fs->buf);
+#else
+      fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream);
+#endif
+    }
+  free (fs->buf);
+  free (fs);
+}
+#if 0
+/* Not exported.  */
+#ifdef weak_alias
+weak_alias (__argp_fmtstream_free, argp_fmtstream_free)
+#endif
+#endif
+\f
+/* Process FS's buffer so that line wrapping is done from POINT_OFFS to the
+   end of its buffer.  This code is mostly from glibc stdio/linewrap.c.  */
+void
+__argp_fmtstream_update (argp_fmtstream_t fs)
+{
+  char *buf, *nl;
+  size_t len;
+
+  /* Scan the buffer for newlines.  */
+  buf = fs->buf + fs->point_offs;
+  while (buf < fs->p)
+    {
+      size_t r;
+
+      if (fs->point_col == 0 && fs->lmargin != 0)
+        {
+          /* We are starting a new line.  Print spaces to the left margin.  */
+          const size_t pad = fs->lmargin;
+          if (fs->p + pad < fs->end)
+            {
+              /* We can fit in them in the buffer by moving the
+                 buffer text up and filling in the beginning.  */
+              memmove (buf + pad, buf, fs->p - buf);
+              fs->p += pad; /* Compensate for bigger buffer. */
+              memset (buf, ' ', pad); /* Fill in the spaces.  */
+              buf += pad; /* Don't bother searching them.  */
+            }
+          else
+            {
+              /* No buffer space for spaces.  Must flush.  */
+              size_t i;
+              for (i = 0; i < pad; i++)
+                {
+#ifdef USE_IN_LIBIO
+                  if (_IO_fwide (fs->stream, 0) > 0)
+                    putwc_unlocked (L' ', fs->stream);
+                  else
+#endif
+                    putc_unlocked (' ', fs->stream);
+                }
+            }
+          fs->point_col = pad;
+        }
+
+      len = fs->p - buf;
+      nl = memchr (buf, '\n', len);
+
+      if (fs->point_col < 0)
+        fs->point_col = 0;
+
+      if (!nl)
+        {
+          /* The buffer ends in a partial line.  */
+
+          if (fs->point_col + len < fs->rmargin)
+            {
+              /* The remaining buffer text is a partial line and fits
+                 within the maximum line width.  Advance point for the
+                 characters to be written and stop scanning.  */
+              fs->point_col += len;
+              break;
+            }
+          else
+            /* Set the end-of-line pointer for the code below to
+               the end of the buffer.  */
+            nl = fs->p;
+        }
+      else if (fs->point_col + (nl - buf) < (ssize_t) fs->rmargin)
+        {
+          /* The buffer contains a full line that fits within the maximum
+             line width.  Reset point and scan the next line.  */
+          fs->point_col = 0;
+          buf = nl + 1;
+          continue;
+        }
+
+      /* This line is too long.  */
+      r = fs->rmargin - 1;
+
+      if (fs->wmargin < 0)
+        {
+          /* Truncate the line by overwriting the excess with the
+             newline and anything after it in the buffer.  */
+          if (nl < fs->p)
+            {
+              memmove (buf + (r - fs->point_col), nl, fs->p - nl);
+              fs->p -= buf + (r - fs->point_col) - nl;
+              /* Reset point for the next line and start scanning it.  */
+              fs->point_col = 0;
+              buf += r + 1; /* Skip full line plus \n. */
+            }
+          else
+            {
+              /* The buffer ends with a partial line that is beyond the
+                 maximum line width.  Advance point for the characters
+                 written, and discard those past the max from the buffer.  */
+              fs->point_col += len;
+              fs->p -= fs->point_col - r;
+              break;
+            }
+        }
+      else
+        {
+          /* Do word wrap.  Go to the column just past the maximum line
+             width and scan back for the beginning of the word there.
+             Then insert a line break.  */
+
+          char *p, *nextline;
+          int i;
+
+          p = buf + (r + 1 - fs->point_col);
+          while (p >= buf && !isblank ((unsigned char) *p))
+            --p;
+          nextline = p + 1;     /* This will begin the next line.  */
+
+          if (nextline > buf)
+            {
+              /* Swallow separating blanks.  */
+              if (p >= buf)
+                do
+                  --p;
+                while (p >= buf && isblank ((unsigned char) *p));
+              nl = p + 1;       /* The newline will replace the first blank. */
+            }
+          else
+            {
+              /* A single word that is greater than the maximum line width.
+                 Oh well.  Put it on an overlong line by itself.  */
+              p = buf + (r + 1 - fs->point_col);
+              /* Find the end of the long word.  */
+              if (p < nl)
+                do
+                  ++p;
+                while (p < nl && !isblank ((unsigned char) *p));
+              if (p == nl)
+                {
+                  /* It already ends a line.  No fussing required.  */
+                  fs->point_col = 0;
+                  buf = nl + 1;
+                  continue;
+                }
+              /* We will move the newline to replace the first blank.  */
+              nl = p;
+              /* Swallow separating blanks.  */
+              do
+                ++p;
+              while (isblank ((unsigned char) *p));
+              /* The next line will start here.  */
+              nextline = p;
+            }
+
+          /* Note: There are a bunch of tests below for
+             NEXTLINE == BUF + LEN + 1; this case is where NL happens to fall
+             at the end of the buffer, and NEXTLINE is in fact empty (and so
+             we need not be careful to maintain its contents).  */
+
+          if ((nextline == buf + len + 1
+               ? fs->end - nl < fs->wmargin + 1
+               : nextline - (nl + 1) < fs->wmargin)
+              && fs->p > nextline)
+            {
+              /* The margin needs more blanks than we removed.  */
+              if (fs->end - fs->p > fs->wmargin + 1)
+                /* Make some space for them.  */
+                {
+                  size_t mv = fs->p - nextline;
+                  memmove (nl + 1 + fs->wmargin, nextline, mv);
+                  nextline = nl + 1 + fs->wmargin;
+                  len = nextline + mv - buf;
+                  *nl++ = '\n';
+                }
+              else
+                /* Output the first line so we can use the space.  */
+                {
+#ifdef _LIBC
+                  __fxprintf (fs->stream, "%.*s\n",
+                              (int) (nl - fs->buf), fs->buf);
+#else
+                  if (nl > fs->buf)
+                    fwrite_unlocked (fs->buf, 1, nl - fs->buf, fs->stream);
+                  putc_unlocked ('\n', fs->stream);
+#endif
+
+                  len += buf - fs->buf;
+                  nl = buf = fs->buf;
+                }
+            }
+          else
+            /* We can fit the newline and blanks in before
+               the next word.  */
+            *nl++ = '\n';
+
+          if (nextline - nl >= fs->wmargin
+              || (nextline == buf + len + 1 && fs->end - nextline >= fs->wmargin))
+            /* Add blanks up to the wrap margin column.  */
+            for (i = 0; i < fs->wmargin; ++i)
+              *nl++ = ' ';
+          else
+            for (i = 0; i < fs->wmargin; ++i)
+#ifdef USE_IN_LIBIO
+              if (_IO_fwide (fs->stream, 0) > 0)
+                putwc_unlocked (L' ', fs->stream);
+              else
+#endif
+                putc_unlocked (' ', fs->stream);
+
+          /* Copy the tail of the original buffer into the current buffer
+             position.  */
+          if (nl < nextline)
+            memmove (nl, nextline, buf + len - nextline);
+          len -= nextline - buf;
+
+          /* Continue the scan on the remaining lines in the buffer.  */
+          buf = nl;
+
+          /* Restore bufp to include all the remaining text.  */
+          fs->p = nl + len;
+
+          /* Reset the counter of what has been output this line.  If wmargin
+             is 0, we want to avoid the lmargin getting added, so we set
+             point_col to a magic value of -1 in that case.  */
+          fs->point_col = fs->wmargin ? fs->wmargin : -1;
+        }
+    }
+
+  /* Remember that we've scanned as far as the end of the buffer.  */
+  fs->point_offs = fs->p - fs->buf;
+}
+\f
+/* Ensure that FS has space for AMOUNT more bytes in its buffer, either by
+   growing the buffer, or by flushing it.  True is returned iff we succeed. */
+int
+__argp_fmtstream_ensure (struct argp_fmtstream *fs, size_t amount)
+{
+  if ((size_t) (fs->end - fs->p) < amount)
+    {
+      ssize_t wrote;
+
+      /* Flush FS's buffer.  */
+      __argp_fmtstream_update (fs);
+
+#ifdef _LIBC
+      __fxprintf (fs->stream, "%.*s", (int) (fs->p - fs->buf), fs->buf);
+      wrote = fs->p - fs->buf;
+#else
+      wrote = fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream);
+#endif
+      if (wrote == fs->p - fs->buf)
+        {
+          fs->p = fs->buf;
+          fs->point_offs = 0;
+        }
+      else
+        {
+          fs->p -= wrote;
+          fs->point_offs -= wrote;
+          memmove (fs->buf, fs->buf + wrote, fs->p - fs->buf);
+          return 0;
+        }
+
+      if ((size_t) (fs->end - fs->buf) < amount)
+        /* Gotta grow the buffer.  */
+        {
+          size_t old_size = fs->end - fs->buf;
+          size_t new_size = old_size + amount;
+          char *new_buf;
+
+          if (new_size < old_size || ! (new_buf = realloc (fs->buf, new_size)))
+            {
+              __set_errno (ENOMEM);
+              return 0;
+            }
+
+          fs->buf = new_buf;
+          fs->end = new_buf + new_size;
+          fs->p = fs->buf;
+        }
+    }
+
+  return 1;
+}
+\f
+ssize_t
+__argp_fmtstream_printf (struct argp_fmtstream *fs, const char *fmt, ...)
+{
+  int out;
+  size_t avail;
+  size_t size_guess = PRINTF_SIZE_GUESS; /* How much space to reserve. */
+
+  do
+    {
+      va_list args;
+
+      if (! __argp_fmtstream_ensure (fs, size_guess))
+        return -1;
+
+      va_start (args, fmt);
+      avail = fs->end - fs->p;
+      out = __vsnprintf (fs->p, avail, fmt, args);
+      va_end (args);
+      if ((size_t) out >= avail)
+        size_guess = out + 1;
+    }
+  while ((size_t) out >= avail);
+
+  fs->p += out;
+
+  return out;
+}
+#if 0
+/* Not exported.  */
+#ifdef weak_alias
+weak_alias (__argp_fmtstream_printf, argp_fmtstream_printf)
+#endif
+#endif
+
+#endif /* !ARGP_FMTSTREAM_USE_LINEWRAP */
diff --git a/gnu/argp-fmtstream.h b/gnu/argp-fmtstream.h
new file mode 100644 (file)
index 0000000..f50f4e7
--- /dev/null
@@ -0,0 +1,356 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Word-wrapping and line-truncating streams.
+   Copyright (C) 1997, 2006-2010 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by Miles Bader <miles@gnu.ai.mit.edu>.
+
+   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/>.  */
+
+/* This package emulates glibc `line_wrap_stream' semantics for systems that
+   don't have that.  If the system does have it, it is just a wrapper for
+   that.  This header file is only used internally while compiling argp, and
+   shouldn't be installed.  */
+
+#ifndef _ARGP_FMTSTREAM_H
+#define _ARGP_FMTSTREAM_H
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#ifndef __attribute__
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The __-protected variants of the attributes 'format' and 'printf' are
+   accepted by gcc versions 2.6.4 (effectively 2.7) and later.
+   We enable __attribute__ only if these are supported too, because
+   gnulib and libintl do '#define printf __printf__' when they override
+   the 'printf' function.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+#  define __attribute__(Spec)   /* empty */
+# endif
+#endif
+
+#if    (_LIBC - 0 && !defined (USE_IN_LIBIO)) \
+    || (defined (__GNU_LIBRARY__) && defined (HAVE_LINEWRAP_H))
+/* line_wrap_stream is available, so use that.  */
+#define ARGP_FMTSTREAM_USE_LINEWRAP
+#endif
+
+#ifdef ARGP_FMTSTREAM_USE_LINEWRAP
+/* Just be a simple wrapper for line_wrap_stream; the semantics are
+   *slightly* different, as line_wrap_stream doesn't actually make a new
+   object, it just modifies the given stream (reversibly) to do
+   line-wrapping.  Since we control who uses this code, it doesn't matter.  */
+
+#include <linewrap.h>
+
+typedef FILE *argp_fmtstream_t;
+
+#define argp_make_fmtstream line_wrap_stream
+#define __argp_make_fmtstream line_wrap_stream
+#define argp_fmtstream_free line_unwrap_stream
+#define __argp_fmtstream_free line_unwrap_stream
+
+#define __argp_fmtstream_putc(fs,ch) putc(ch,fs)
+#define argp_fmtstream_putc(fs,ch) putc(ch,fs)
+#define __argp_fmtstream_puts(fs,str) fputs(str,fs)
+#define argp_fmtstream_puts(fs,str) fputs(str,fs)
+#define __argp_fmtstream_write(fs,str,len) fwrite(str,1,len,fs)
+#define argp_fmtstream_write(fs,str,len) fwrite(str,1,len,fs)
+#define __argp_fmtstream_printf fprintf
+#define argp_fmtstream_printf fprintf
+
+#define __argp_fmtstream_lmargin line_wrap_lmargin
+#define argp_fmtstream_lmargin line_wrap_lmargin
+#define __argp_fmtstream_set_lmargin line_wrap_set_lmargin
+#define argp_fmtstream_set_lmargin line_wrap_set_lmargin
+#define __argp_fmtstream_rmargin line_wrap_rmargin
+#define argp_fmtstream_rmargin line_wrap_rmargin
+#define __argp_fmtstream_set_rmargin line_wrap_set_rmargin
+#define argp_fmtstream_set_rmargin line_wrap_set_rmargin
+#define __argp_fmtstream_wmargin line_wrap_wmargin
+#define argp_fmtstream_wmargin line_wrap_wmargin
+#define __argp_fmtstream_set_wmargin line_wrap_set_wmargin
+#define argp_fmtstream_set_wmargin line_wrap_set_wmargin
+#define __argp_fmtstream_point line_wrap_point
+#define argp_fmtstream_point line_wrap_point
+
+#else /* !ARGP_FMTSTREAM_USE_LINEWRAP */
+/* Guess we have to define our own version.  */
+\f
+struct argp_fmtstream
+{
+  FILE *stream;                 /* The stream we're outputting to.  */
+
+  size_t lmargin, rmargin;      /* Left and right margins.  */
+  ssize_t wmargin;              /* Margin to wrap to, or -1 to truncate.  */
+
+  /* Point in buffer to which we've processed for wrapping, but not output.  */
+  size_t point_offs;
+  /* Output column at POINT_OFFS, or -1 meaning 0 but don't add lmargin.  */
+  ssize_t point_col;
+
+  char *buf;                    /* Output buffer.  */
+  char *p;                      /* Current end of text in BUF. */
+  char *end;                    /* Absolute end of BUF.  */
+};
+
+typedef struct argp_fmtstream *argp_fmtstream_t;
+
+/* Return an argp_fmtstream that outputs to STREAM, and which prefixes lines
+   written on it with LMARGIN spaces and limits them to RMARGIN columns
+   total.  If WMARGIN >= 0, words that extend past RMARGIN are wrapped by
+   replacing the whitespace before them with a newline and WMARGIN spaces.
+   Otherwise, chars beyond RMARGIN are simply dropped until a newline.
+   Returns NULL if there was an error.  */
+extern argp_fmtstream_t __argp_make_fmtstream (FILE *__stream,
+                                               size_t __lmargin,
+                                               size_t __rmargin,
+                                               ssize_t __wmargin);
+extern argp_fmtstream_t argp_make_fmtstream (FILE *__stream,
+                                             size_t __lmargin,
+                                             size_t __rmargin,
+                                             ssize_t __wmargin);
+
+/* Flush __FS to its stream, and free it (but don't close the stream).  */
+extern void __argp_fmtstream_free (argp_fmtstream_t __fs);
+extern void argp_fmtstream_free (argp_fmtstream_t __fs);
+
+extern ssize_t __argp_fmtstream_printf (argp_fmtstream_t __fs,
+                                        const char *__fmt, ...)
+     __attribute__ ((__format__ (printf, 2, 3)));
+extern ssize_t argp_fmtstream_printf (argp_fmtstream_t __fs,
+                                      const char *__fmt, ...)
+     __attribute__ ((__format__ (printf, 2, 3)));
+
+#if _LIBC || !defined __OPTIMIZE__
+extern int __argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch);
+extern int argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch);
+
+extern int __argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str);
+extern int argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str);
+
+extern size_t __argp_fmtstream_write (argp_fmtstream_t __fs,
+                                      const char *__str, size_t __len);
+extern size_t argp_fmtstream_write (argp_fmtstream_t __fs,
+                                    const char *__str, size_t __len);
+#endif
+\f
+/* Access macros for various bits of state.  */
+#define argp_fmtstream_lmargin(__fs) ((__fs)->lmargin)
+#define argp_fmtstream_rmargin(__fs) ((__fs)->rmargin)
+#define argp_fmtstream_wmargin(__fs) ((__fs)->wmargin)
+#define __argp_fmtstream_lmargin argp_fmtstream_lmargin
+#define __argp_fmtstream_rmargin argp_fmtstream_rmargin
+#define __argp_fmtstream_wmargin argp_fmtstream_wmargin
+
+#if _LIBC || !defined __OPTIMIZE__
+/* Set __FS's left margin to LMARGIN and return the old value.  */
+extern size_t argp_fmtstream_set_lmargin (argp_fmtstream_t __fs,
+                                          size_t __lmargin);
+extern size_t __argp_fmtstream_set_lmargin (argp_fmtstream_t __fs,
+                                            size_t __lmargin);
+
+/* Set __FS's right margin to __RMARGIN and return the old value.  */
+extern size_t argp_fmtstream_set_rmargin (argp_fmtstream_t __fs,
+                                          size_t __rmargin);
+extern size_t __argp_fmtstream_set_rmargin (argp_fmtstream_t __fs,
+                                            size_t __rmargin);
+
+/* Set __FS's wrap margin to __WMARGIN and return the old value.  */
+extern size_t argp_fmtstream_set_wmargin (argp_fmtstream_t __fs,
+                                          size_t __wmargin);
+extern size_t __argp_fmtstream_set_wmargin (argp_fmtstream_t __fs,
+                                            size_t __wmargin);
+
+/* Return the column number of the current output point in __FS.  */
+extern size_t argp_fmtstream_point (argp_fmtstream_t __fs);
+extern size_t __argp_fmtstream_point (argp_fmtstream_t __fs);
+#endif
+
+/* Internal routines.  */
+extern void _argp_fmtstream_update (argp_fmtstream_t __fs);
+extern void __argp_fmtstream_update (argp_fmtstream_t __fs);
+extern int _argp_fmtstream_ensure (argp_fmtstream_t __fs, size_t __amount);
+extern int __argp_fmtstream_ensure (argp_fmtstream_t __fs, size_t __amount);
+\f
+#ifdef __OPTIMIZE__
+/* Inline versions of above routines.  */
+
+#if !_LIBC
+#define __argp_fmtstream_putc argp_fmtstream_putc
+#define __argp_fmtstream_puts argp_fmtstream_puts
+#define __argp_fmtstream_write argp_fmtstream_write
+#define __argp_fmtstream_set_lmargin argp_fmtstream_set_lmargin
+#define __argp_fmtstream_set_rmargin argp_fmtstream_set_rmargin
+#define __argp_fmtstream_set_wmargin argp_fmtstream_set_wmargin
+#define __argp_fmtstream_point argp_fmtstream_point
+#define __argp_fmtstream_update _argp_fmtstream_update
+#define __argp_fmtstream_ensure _argp_fmtstream_ensure
+#endif
+
+#ifndef ARGP_FS_EI
+# ifdef __GNUC__
+   /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
+      inline semantics, unless -fgnu89-inline is used.  It defines a macro
+      __GNUC_STDC_INLINE__ to indicate this situation or a macro
+      __GNUC_GNU_INLINE__ to indicate the opposite situation.
+
+      GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline
+      semantics but warns, unless -fgnu89-inline is used:
+        warning: C99 inline functions are not supported; using GNU89
+        warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute
+      It defines a macro __GNUC_GNU_INLINE__ to indicate this situation.
+
+      Whereas Apple GCC 4.0.1 build 5479 without -std=c99 or -std=gnu99
+      implements the GNU C inline semantics and defines the macro
+      __GNUC_GNU_INLINE__, but it does not warn and does not support
+      __attribute__ ((__gnu_inline__)).
+
+      All in all, these are the possible combinations.  For every compiler,
+      we need to choose ARGP_FS_EI so that the corresponding table cell
+      contains an "ok".
+
+        \    ARGP_FS_EI                      inline   extern    extern
+          \                                           inline    inline
+      CC    \                                                   __attribute__
+                                                                ((gnu_inline))
+
+      gcc 4.3.0                              error    ok        ok
+      gcc 4.3.0 -std=gnu99 -fgnu89-inline    error    ok        ok
+      gcc 4.3.0 -std=gnu99                   ok       error     ok
+
+      gcc 4.2.2                              error    ok        ok
+      gcc 4.2.2 -std=gnu99 -fgnu89-inline    error    ok        ok
+      gcc 4.2.2 -std=gnu99                   error    warning   ok
+
+      gcc 4.1.2                              error    ok        warning
+      gcc 4.1.2 -std=gnu99                   error    ok        warning
+
+      Apple gcc 4.0.1                        error    ok        warning
+      Apple gcc 4.0.1 -std=gnu99             ok       error     warning
+    */
+#  if defined __GNUC_STDC_INLINE__
+#   define ARGP_FS_EI inline
+#  elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
+#   define ARGP_FS_EI extern inline __attribute__ ((__gnu_inline__))
+#  else
+#   define ARGP_FS_EI extern inline
+#  endif
+# else
+   /* With other compilers, assume the ISO C99 meaning of 'inline', if
+      the compiler supports 'inline' at all.  */
+#  define ARGP_FS_EI inline
+# endif
+#endif
+
+ARGP_FS_EI size_t
+__argp_fmtstream_write (argp_fmtstream_t __fs,
+                        const char *__str, size_t __len)
+{
+  if (__fs->p + __len <= __fs->end || __argp_fmtstream_ensure (__fs, __len))
+    {
+      memcpy (__fs->p, __str, __len);
+      __fs->p += __len;
+      return __len;
+    }
+  else
+    return 0;
+}
+
+ARGP_FS_EI int
+__argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str)
+{
+  size_t __len = strlen (__str);
+  if (__len)
+    {
+      size_t __wrote = __argp_fmtstream_write (__fs, __str, __len);
+      return __wrote == __len ? 0 : -1;
+    }
+  else
+    return 0;
+}
+
+ARGP_FS_EI int
+__argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch)
+{
+  if (__fs->p < __fs->end || __argp_fmtstream_ensure (__fs, 1))
+    return *__fs->p++ = __ch;
+  else
+    return EOF;
+}
+
+/* Set __FS's left margin to __LMARGIN and return the old value.  */
+ARGP_FS_EI size_t
+__argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, size_t __lmargin)
+{
+  size_t __old;
+  if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs)
+    __argp_fmtstream_update (__fs);
+  __old = __fs->lmargin;
+  __fs->lmargin = __lmargin;
+  return __old;
+}
+
+/* Set __FS's right margin to __RMARGIN and return the old value.  */
+ARGP_FS_EI size_t
+__argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, size_t __rmargin)
+{
+  size_t __old;
+  if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs)
+    __argp_fmtstream_update (__fs);
+  __old = __fs->rmargin;
+  __fs->rmargin = __rmargin;
+  return __old;
+}
+
+/* Set FS's wrap margin to __WMARGIN and return the old value.  */
+ARGP_FS_EI size_t
+__argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, size_t __wmargin)
+{
+  size_t __old;
+  if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs)
+    __argp_fmtstream_update (__fs);
+  __old = __fs->wmargin;
+  __fs->wmargin = __wmargin;
+  return __old;
+}
+
+/* Return the column number of the current output point in __FS.  */
+ARGP_FS_EI size_t
+__argp_fmtstream_point (argp_fmtstream_t __fs)
+{
+  if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs)
+    __argp_fmtstream_update (__fs);
+  return __fs->point_col >= 0 ? __fs->point_col : 0;
+}
+
+#if !_LIBC
+#undef __argp_fmtstream_putc
+#undef __argp_fmtstream_puts
+#undef __argp_fmtstream_write
+#undef __argp_fmtstream_set_lmargin
+#undef __argp_fmtstream_set_rmargin
+#undef __argp_fmtstream_set_wmargin
+#undef __argp_fmtstream_point
+#undef __argp_fmtstream_update
+#undef __argp_fmtstream_ensure
+#endif
+
+#endif /* __OPTIMIZE__ */
+
+#endif /* ARGP_FMTSTREAM_USE_LINEWRAP */
+
+#endif /* argp-fmtstream.h */
diff --git a/gnu/argp-fs-xinl.c b/gnu/argp-fs-xinl.c
new file mode 100644 (file)
index 0000000..ad8ee76
--- /dev/null
@@ -0,0 +1,44 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Real definitions for extern inline functions in argp-fmtstream.h
+   Copyright (C) 1997, 2003, 2004, 2009, 2010 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by Miles Bader <miles@gnu.ai.mit.edu>.
+
+   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/>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#define ARGP_FS_EI
+#undef __OPTIMIZE__
+#define __OPTIMIZE__ 1
+#include "argp-fmtstream.h"
+
+#if 0
+/* Not exported.  */
+/* Add weak aliases.  */
+#if _LIBC - 0 && !defined (ARGP_FMTSTREAM_USE_LINEWRAP) && defined (weak_alias)
+
+weak_alias (__argp_fmtstream_putc, argp_fmtstream_putc)
+weak_alias (__argp_fmtstream_puts, argp_fmtstream_puts)
+weak_alias (__argp_fmtstream_write, argp_fmtstream_write)
+weak_alias (__argp_fmtstream_set_lmargin, argp_fmtstream_set_lmargin)
+weak_alias (__argp_fmtstream_set_rmargin, argp_fmtstream_set_rmargin)
+weak_alias (__argp_fmtstream_set_wmargin, argp_fmtstream_set_wmargin)
+weak_alias (__argp_fmtstream_point, argp_fmtstream_point)
+
+#endif
+#endif
diff --git a/gnu/argp-help.c b/gnu/argp-help.c
new file mode 100644 (file)
index 0000000..09bec84
--- /dev/null
@@ -0,0 +1,1953 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Hierarchial argument parsing help output
+   Copyright (C) 1995-2005, 2007, 2009-2010 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by Miles Bader <miles@gnu.ai.mit.edu>.
+
+   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 _GNU_SOURCE
+# define _GNU_SOURCE    1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <alloca.h>
+#include <errno.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <stdarg.h>
+#include <ctype.h>
+#include <limits.h>
+#ifdef USE_IN_LIBIO
+# include <wchar.h>
+#endif
+
+#ifdef _LIBC
+# include <libintl.h>
+# undef dgettext
+# define dgettext(domain, msgid) \
+   INTUSE(__dcgettext) (domain, msgid, LC_MESSAGES)
+#else
+# include "gettext.h"
+#endif
+
+#include "argp.h"
+#include "argp-fmtstream.h"
+#include "argp-namefrob.h"
+
+#ifndef SIZE_MAX
+# define SIZE_MAX ((size_t) -1)
+#endif
+\f
+/* User-selectable (using an environment variable) formatting parameters.
+
+   These may be specified in an environment variable called `ARGP_HELP_FMT',
+   with a contents like:  VAR1=VAL1,VAR2=VAL2,BOOLVAR2,no-BOOLVAR2
+   Where VALn must be a positive integer.  The list of variables is in the
+   UPARAM_NAMES vector, below.  */
+
+/* Default parameters.  */
+#define DUP_ARGS      0         /* True if option argument can be duplicated. */
+#define DUP_ARGS_NOTE 1         /* True to print a note about duplicate args. */
+#define SHORT_OPT_COL 2         /* column in which short options start */
+#define LONG_OPT_COL  6         /* column in which long options start */
+#define DOC_OPT_COL   2         /* column in which doc options start */
+#define OPT_DOC_COL  29         /* column in which option text starts */
+#define HEADER_COL    1         /* column in which group headers are printed */
+#define USAGE_INDENT 12         /* indentation of wrapped usage lines */
+#define RMARGIN      79         /* right margin used for wrapping */
+
+/* User-selectable (using an environment variable) formatting parameters.
+   They must all be of type `int' for the parsing code to work.  */
+struct uparams
+{
+  /* If true, arguments for an option are shown with both short and long
+     options, even when a given option has both, e.g. `-x ARG, --longx=ARG'.
+     If false, then if an option has both, the argument is only shown with
+     the long one, e.g., `-x, --longx=ARG', and a message indicating that
+     this really means both is printed below the options.  */
+  int dup_args;
+
+  /* This is true if when DUP_ARGS is false, and some duplicate arguments have
+     been suppressed, an explanatory message should be printed.  */
+  int dup_args_note;
+
+  /* Various output columns.  */
+  int short_opt_col;      /* column in which short options start */
+  int long_opt_col;       /* column in which long options start */
+  int doc_opt_col;        /* column in which doc options start */
+  int opt_doc_col;        /* column in which option text starts */
+  int header_col;         /* column in which group headers are printed */
+  int usage_indent;       /* indentation of wrapped usage lines */
+  int rmargin;            /* right margin used for wrapping */
+
+  int valid;              /* True when the values in here are valid.  */
+};
+
+/* This is a global variable, as user options are only ever read once.  */
+static struct uparams uparams = {
+  DUP_ARGS, DUP_ARGS_NOTE,
+  SHORT_OPT_COL, LONG_OPT_COL, DOC_OPT_COL, OPT_DOC_COL, HEADER_COL,
+  USAGE_INDENT, RMARGIN,
+  0
+};
+
+/* A particular uparam, and what the user name is.  */
+struct uparam_name
+{
+  const char *name;             /* User name.  */
+  int is_bool;                  /* Whether it's `boolean'.  */
+  size_t uparams_offs;          /* Location of the (int) field in UPARAMS.  */
+};
+
+/* The name-field mappings we know about.  */
+static const struct uparam_name uparam_names[] =
+{
+  { "dup-args",       1, offsetof (struct uparams, dup_args) },
+  { "dup-args-note",  1, offsetof (struct uparams, dup_args_note) },
+  { "short-opt-col",  0, offsetof (struct uparams, short_opt_col) },
+  { "long-opt-col",   0, offsetof (struct uparams, long_opt_col) },
+  { "doc-opt-col",    0, offsetof (struct uparams, doc_opt_col) },
+  { "opt-doc-col",    0, offsetof (struct uparams, opt_doc_col) },
+  { "header-col",     0, offsetof (struct uparams, header_col) },
+  { "usage-indent",   0, offsetof (struct uparams, usage_indent) },
+  { "rmargin",        0, offsetof (struct uparams, rmargin) },
+  { 0 }
+};
+
+static void
+validate_uparams (const struct argp_state *state, struct uparams *upptr)
+{
+  const struct uparam_name *up;
+
+  for (up = uparam_names; up->name; up++)
+    {
+      if (up->is_bool
+          || up->uparams_offs == offsetof (struct uparams, rmargin))
+        continue;
+      if (*(int *)((char *)upptr + up->uparams_offs) >= upptr->rmargin)
+        {
+          __argp_failure (state, 0, 0,
+                          dgettext (state->root_argp->argp_domain,
+                                    "\
+ARGP_HELP_FMT: %s value is less than or equal to %s"),
+                          "rmargin", up->name);
+          return;
+        }
+    }
+  uparams = *upptr;
+  uparams.valid = 1;
+}
+
+/* Read user options from the environment, and fill in UPARAMS appropiately. */
+static void
+fill_in_uparams (const struct argp_state *state)
+{
+  const char *var = getenv ("ARGP_HELP_FMT");
+  struct uparams new_params = uparams;
+
+#define SKIPWS(p) do { while (isspace ((unsigned char) *p)) p++; } while (0);
+
+  if (var)
+    {
+      /* Parse var. */
+      while (*var)
+        {
+          SKIPWS (var);
+
+          if (isalpha ((unsigned char) *var))
+            {
+              size_t var_len;
+              const struct uparam_name *un;
+              int unspec = 0, val = 0;
+              const char *arg = var;
+
+              while (isalnum ((unsigned char) *arg) || *arg == '-' || *arg == '_')
+                arg++;
+              var_len = arg - var;
+
+              SKIPWS (arg);
+
+              if (*arg == '\0' || *arg == ',')
+                unspec = 1;
+              else if (*arg == '=')
+                {
+                  arg++;
+                  SKIPWS (arg);
+                }
+
+              if (unspec)
+                {
+                  if (var[0] == 'n' && var[1] == 'o' && var[2] == '-')
+                    {
+                      val = 0;
+                      var += 3;
+                      var_len -= 3;
+                    }
+                  else
+                    val = 1;
+                }
+              else if (isdigit ((unsigned char) *arg))
+                {
+                  val = atoi (arg);
+                  while (isdigit ((unsigned char) *arg))
+                    arg++;
+                  SKIPWS (arg);
+                }
+
+              for (un = uparam_names; un->name; un++)
+                if (strlen (un->name) == var_len
+                    && strncmp (var, un->name, var_len) == 0)
+                  {
+                    if (unspec && !un->is_bool)
+                      __argp_failure (state, 0, 0,
+                                      dgettext (state->root_argp->argp_domain,
+                                                "\
+%.*s: ARGP_HELP_FMT parameter requires a value"),
+                                      (int) var_len, var);
+                    else if (val < 0)
+                      __argp_failure (state, 0, 0,
+                                      dgettext (state->root_argp->argp_domain,
+                                                "\
+%.*s: ARGP_HELP_FMT parameter must be positive"),
+                                      (int) var_len, var);
+                    else
+                      *(int *)((char *)&new_params + un->uparams_offs) = val;
+                    break;
+                  }
+              if (! un->name)
+                __argp_failure (state, 0, 0,
+                                dgettext (state->root_argp->argp_domain, "\
+%.*s: Unknown ARGP_HELP_FMT parameter"),
+                                (int) var_len, var);
+
+              var = arg;
+              if (*var == ',')
+                var++;
+            }
+          else if (*var)
+            {
+              __argp_failure (state, 0, 0,
+                              dgettext (state->root_argp->argp_domain,
+                                        "Garbage in ARGP_HELP_FMT: %s"), var);
+              break;
+            }
+        }
+      validate_uparams (state, &new_params);
+    }
+}
+\f
+/* Returns true if OPT hasn't been marked invisible.  Visibility only affects
+   whether OPT is displayed or used in sorting, not option shadowing.  */
+#define ovisible(opt) (! ((opt)->flags & OPTION_HIDDEN))
+
+/* Returns true if OPT is an alias for an earlier option.  */
+#define oalias(opt) ((opt)->flags & OPTION_ALIAS)
+
+/* Returns true if OPT is an documentation-only entry.  */
+#define odoc(opt) ((opt)->flags & OPTION_DOC)
+
+/* Returns true if OPT should not be translated */
+#define onotrans(opt) ((opt)->flags & OPTION_NO_TRANS)
+
+/* Returns true if OPT is the end-of-list marker for a list of options.  */
+#define oend(opt) __option_is_end (opt)
+
+/* Returns true if OPT has a short option.  */
+#define oshort(opt) __option_is_short (opt)
+\f
+/*
+   The help format for a particular option is like:
+
+     -xARG, -yARG, --long1=ARG, --long2=ARG        Documentation...
+
+   Where ARG will be omitted if there's no argument, for this option, or
+   will be surrounded by "[" and "]" appropiately if the argument is
+   optional.  The documentation string is word-wrapped appropiately, and if
+   the list of options is long enough, it will be started on a separate line.
+   If there are no short options for a given option, the first long option is
+   indented slighly in a way that's supposed to make most long options appear
+   to be in a separate column.
+
+   For example, the following output (from ps):
+
+     -p PID, --pid=PID          List the process PID
+         --pgrp=PGRP            List processes in the process group PGRP
+     -P, -x, --no-parent        Include processes without parents
+     -Q, --all-fields           Don't elide unusable fields (normally if there's
+                                some reason ps can't print a field for any
+                                process, it's removed from the output entirely)
+     -r, --reverse, --gratuitously-long-reverse-option
+                                Reverse the order of any sort
+         --session[=SID]        Add the processes from the session SID (which
+                                defaults to the sid of the current process)
+
+    Here are some more options:
+     -f ZOT, --foonly=ZOT       Glork a foonly
+     -z, --zaza                 Snit a zar
+
+     -?, --help                 Give this help list
+         --usage                Give a short usage message
+     -V, --version              Print program version
+
+   The struct argp_option array for the above could look like:
+
+   {
+     {"pid",       'p',      "PID",  0, "List the process PID"},
+     {"pgrp",      OPT_PGRP, "PGRP", 0, "List processes in the process group PGRP"},
+     {"no-parent", 'P',       0,     0, "Include processes without parents"},
+     {0,           'x',       0,     OPTION_ALIAS},
+     {"all-fields",'Q',       0,     0, "Don't elide unusable fields (normally"
+                                        " if there's some reason ps can't"
+                                        " print a field for any process, it's"
+                                        " removed from the output entirely)" },
+     {"reverse",   'r',       0,     0, "Reverse the order of any sort"},
+     {"gratuitously-long-reverse-option", 0, 0, OPTION_ALIAS},
+     {"session",   OPT_SESS,  "SID", OPTION_ARG_OPTIONAL,
+                                        "Add the processes from the session"
+                                        " SID (which defaults to the sid of"
+                                        " the current process)" },
+
+     {0,0,0,0, "Here are some more options:"},
+     {"foonly", 'f', "ZOT", 0, "Glork a foonly"},
+     {"zaza", 'z', 0, 0, "Snit a zar"},
+
+     {0}
+   }
+
+   Note that the last three options are automatically supplied by argp_parse,
+   unless you tell it not to with ARGP_NO_HELP.
+
+*/
+\f
+/* Returns true if CH occurs between BEG and END.  */
+static int
+find_char (char ch, char *beg, char *end)
+{
+  while (beg < end)
+    if (*beg == ch)
+      return 1;
+    else
+      beg++;
+  return 0;
+}
+\f
+struct hol_cluster;             /* fwd decl */
+
+struct hol_entry
+{
+  /* First option.  */
+  const struct argp_option *opt;
+  /* Number of options (including aliases).  */
+  unsigned num;
+
+  /* A pointers into the HOL's short_options field, to the first short option
+     letter for this entry.  The order of the characters following this point
+     corresponds to the order of options pointed to by OPT, and there are at
+     most NUM.  A short option recorded in a option following OPT is only
+     valid if it occurs in the right place in SHORT_OPTIONS (otherwise it's
+     probably been shadowed by some other entry).  */
+  char *short_options;
+
+  /* Entries are sorted by their group first, in the order:
+       1, 2, ..., n, 0, -m, ..., -2, -1
+     and then alphabetically within each group.  The default is 0.  */
+  int group;
+
+  /* The cluster of options this entry belongs to, or 0 if none.  */
+  struct hol_cluster *cluster;
+
+  /* The argp from which this option came.  */
+  const struct argp *argp;
+
+  /* Position in the array */
+  unsigned ord;
+};
+
+/* A cluster of entries to reflect the argp tree structure.  */
+struct hol_cluster
+{
+  /* A descriptive header printed before options in this cluster.  */
+  const char *header;
+
+  /* Used to order clusters within the same group with the same parent,
+     according to the order in which they occurred in the parent argp's child
+     list.  */
+  int index;
+
+  /* How to sort this cluster with respect to options and other clusters at the
+     same depth (clusters always follow options in the same group).  */
+  int group;
+
+  /* The cluster to which this cluster belongs, or 0 if it's at the base
+     level.  */
+  struct hol_cluster *parent;
+
+  /* The argp from which this cluster is (eventually) derived.  */
+  const struct argp *argp;
+
+  /* The distance this cluster is from the root.  */
+  int depth;
+
+  /* Clusters in a given hol are kept in a linked list, to make freeing them
+     possible.  */
+  struct hol_cluster *next;
+};
+
+/* A list of options for help.  */
+struct hol
+{
+  /* An array of hol_entry's.  */
+  struct hol_entry *entries;
+  /* The number of entries in this hol.  If this field is zero, the others
+     are undefined.  */
+  unsigned num_entries;
+
+  /* A string containing all short options in this HOL.  Each entry contains
+     pointers into this string, so the order can't be messed with blindly.  */
+  char *short_options;
+
+  /* Clusters of entries in this hol.  */
+  struct hol_cluster *clusters;
+};
+\f
+/* Create a struct hol from the options in ARGP.  CLUSTER is the
+   hol_cluster in which these entries occur, or 0, if at the root.  */
+static struct hol *
+make_hol (const struct argp *argp, struct hol_cluster *cluster)
+{
+  char *so;
+  const struct argp_option *o;
+  const struct argp_option *opts = argp->options;
+  struct hol_entry *entry;
+  unsigned num_short_options = 0;
+  struct hol *hol = malloc (sizeof (struct hol));
+
+  assert (hol);
+
+  hol->num_entries = 0;
+  hol->clusters = 0;
+
+  if (opts)
+    {
+      int cur_group = 0;
+
+      /* The first option must not be an alias.  */
+      assert (! oalias (opts));
+
+      /* Calculate the space needed.  */
+      for (o = opts; ! oend (o); o++)
+        {
+          if (! oalias (o))
+            hol->num_entries++;
+          if (oshort (o))
+            num_short_options++;        /* This is an upper bound.  */
+        }
+
+      hol->entries = malloc (sizeof (struct hol_entry) * hol->num_entries);
+      hol->short_options = malloc (num_short_options + 1);
+
+      assert (hol->entries && hol->short_options);
+      if (SIZE_MAX <= UINT_MAX)
+        assert (hol->num_entries <= SIZE_MAX / sizeof (struct hol_entry));
+
+      /* Fill in the entries.  */
+      so = hol->short_options;
+      for (o = opts, entry = hol->entries; ! oend (o); entry++)
+        {
+          entry->opt = o;
+          entry->num = 0;
+          entry->short_options = so;
+          entry->group = cur_group =
+            o->group
+            ? o->group
+            : ((!o->name && !o->key)
+               ? cur_group + 1
+               : cur_group);
+          entry->cluster = cluster;
+          entry->argp = argp;
+
+          do
+            {
+              entry->num++;
+              if (oshort (o) && ! find_char (o->key, hol->short_options, so))
+                /* O has a valid short option which hasn't already been used.*/
+                *so++ = o->key;
+              o++;
+            }
+          while (! oend (o) && oalias (o));
+        }
+      *so = '\0';               /* null terminated so we can find the length */
+    }
+
+  return hol;
+}
+\f
+/* Add a new cluster to HOL, with the given GROUP and HEADER (taken from the
+   associated argp child list entry), INDEX, and PARENT, and return a pointer
+   to it.  ARGP is the argp that this cluster results from.  */
+static struct hol_cluster *
+hol_add_cluster (struct hol *hol, int group, const char *header, int index,
+                 struct hol_cluster *parent, const struct argp *argp)
+{
+  struct hol_cluster *cl = malloc (sizeof (struct hol_cluster));
+  if (cl)
+    {
+      cl->group = group;
+      cl->header = header;
+
+      cl->index = index;
+      cl->parent = parent;
+      cl->argp = argp;
+      cl->depth = parent ? parent->depth + 1 : 0;
+
+      cl->next = hol->clusters;
+      hol->clusters = cl;
+    }
+  return cl;
+}
+\f
+/* Free HOL and any resources it uses.  */
+static void
+hol_free (struct hol *hol)
+{
+  struct hol_cluster *cl = hol->clusters;
+
+  while (cl)
+    {
+      struct hol_cluster *next = cl->next;
+      free (cl);
+      cl = next;
+    }
+
+  if (hol->num_entries > 0)
+    {
+      free (hol->entries);
+      free (hol->short_options);
+    }
+
+  free (hol);
+}
+\f
+static int
+hol_entry_short_iterate (const struct hol_entry *entry,
+                         int (*func)(const struct argp_option *opt,
+                                     const struct argp_option *real,
+                                     const char *domain, void *cookie),
+                         const char *domain, void *cookie)
+{
+  unsigned nopts;
+  int val = 0;
+  const struct argp_option *opt, *real = entry->opt;
+  char *so = entry->short_options;
+
+  for (opt = real, nopts = entry->num; nopts > 0 && !val; opt++, nopts--)
+    if (oshort (opt) && *so == opt->key)
+      {
+        if (!oalias (opt))
+          real = opt;
+        if (ovisible (opt))
+          val = (*func)(opt, real, domain, cookie);
+        so++;
+      }
+
+  return val;
+}
+
+static inline int
+__attribute__ ((always_inline))
+hol_entry_long_iterate (const struct hol_entry *entry,
+                        int (*func)(const struct argp_option *opt,
+                                    const struct argp_option *real,
+                                    const char *domain, void *cookie),
+                        const char *domain, void *cookie)
+{
+  unsigned nopts;
+  int val = 0;
+  const struct argp_option *opt, *real = entry->opt;
+
+  for (opt = real, nopts = entry->num; nopts > 0 && !val; opt++, nopts--)
+    if (opt->name)
+      {
+        if (!oalias (opt))
+          real = opt;
+        if (ovisible (opt))
+          val = (*func)(opt, real, domain, cookie);
+      }
+
+  return val;
+}
+\f
+/* Iterator that returns true for the first short option.  */
+static int
+until_short (const struct argp_option *opt, const struct argp_option *real,
+             const char *domain, void *cookie)
+{
+  return oshort (opt) ? opt->key : 0;
+}
+
+/* Returns the first valid short option in ENTRY, or 0 if there is none.  */
+static char
+hol_entry_first_short (const struct hol_entry *entry)
+{
+  return hol_entry_short_iterate (entry, until_short,
+                                  entry->argp->argp_domain, 0);
+}
+
+/* Returns the first valid long option in ENTRY, or 0 if there is none.  */
+static const char *
+hol_entry_first_long (const struct hol_entry *entry)
+{
+  const struct argp_option *opt;
+  unsigned num;
+  for (opt = entry->opt, num = entry->num; num > 0; opt++, num--)
+    if (opt->name && ovisible (opt))
+      return opt->name;
+  return 0;
+}
+
+/* Returns the entry in HOL with the long option name NAME, or 0 if there is
+   none.  */
+static struct hol_entry *
+hol_find_entry (struct hol *hol, const char *name)
+{
+  struct hol_entry *entry = hol->entries;
+  unsigned num_entries = hol->num_entries;
+
+  while (num_entries-- > 0)
+    {
+      const struct argp_option *opt = entry->opt;
+      unsigned num_opts = entry->num;
+
+      while (num_opts-- > 0)
+        if (opt->name && ovisible (opt) && strcmp (opt->name, name) == 0)
+          return entry;
+        else
+          opt++;
+
+      entry++;
+    }
+
+  return 0;
+}
+\f
+/* If an entry with the long option NAME occurs in HOL, set it's special
+   sort position to GROUP.  */
+static void
+hol_set_group (struct hol *hol, const char *name, int group)
+{
+  struct hol_entry *entry = hol_find_entry (hol, name);
+  if (entry)
+    entry->group = group;
+}
+\f
+/* Order by group:  0, 1, 2, ..., n, -m, ..., -2, -1.
+   EQ is what to return if GROUP1 and GROUP2 are the same.  */
+static int
+group_cmp (int group1, int group2, int eq)
+{
+  if (group1 == group2)
+    return eq;
+  else if ((group1 < 0 && group2 < 0) || (group1 >= 0 && group2 >= 0))
+    return group1 - group2;
+  else
+    return group2 - group1;
+}
+
+/* Compare clusters CL1 & CL2 by the order that they should appear in
+   output.  */
+static int
+hol_cluster_cmp (const struct hol_cluster *cl1, const struct hol_cluster *cl2)
+{
+  /* If one cluster is deeper than the other, use its ancestor at the same
+     level, so that finding the common ancestor is straightforward.
+
+     clN->depth > 0 means that clN->parent != NULL (see hol_add_cluster) */
+  while (cl1->depth > cl2->depth)
+    cl1 = cl1->parent;
+  while (cl2->depth > cl1->depth)
+    cl2 = cl2->parent;
+
+  /* Now reduce both clusters to their ancestors at the point where both have
+     a common parent; these can be directly compared.  */
+  while (cl1->parent != cl2->parent)
+    cl1 = cl1->parent, cl2 = cl2->parent;
+
+  return group_cmp (cl1->group, cl2->group, cl2->index - cl1->index);
+}
+
+/* Return the ancestor of CL that's just below the root (i.e., has a parent
+   of 0).  */
+static struct hol_cluster *
+hol_cluster_base (struct hol_cluster *cl)
+{
+  while (cl->parent)
+    cl = cl->parent;
+  return cl;
+}
+
+/* Return true if CL1 is a child of CL2.  */
+static int
+hol_cluster_is_child (const struct hol_cluster *cl1,
+                      const struct hol_cluster *cl2)
+{
+  while (cl1 && cl1 != cl2)
+    cl1 = cl1->parent;
+  return cl1 == cl2;
+}
+\f
+/* Given the name of a OPTION_DOC option, modifies NAME to start at the tail
+   that should be used for comparisons, and returns true iff it should be
+   treated as a non-option.  */
+static int
+canon_doc_option (const char **name)
+{
+  int non_opt;
+
+  if (!*name)
+    non_opt = 1;
+  else
+    {
+      /* Skip initial whitespace.  */
+      while (isspace ((unsigned char) **name))
+        (*name)++;
+      /* Decide whether this looks like an option (leading `-') or not.  */
+      non_opt = (**name != '-');
+      /* Skip until part of name used for sorting.  */
+      while (**name && !isalnum ((unsigned char) **name))
+        (*name)++;
+    }
+  return non_opt;
+}
+
+#define HOL_ENTRY_PTRCMP(a,b) ((a)->ord < (b)->ord ? -1 : 1)
+
+/* Order ENTRY1 & ENTRY2 by the order which they should appear in a help
+   listing.  */
+static int
+hol_entry_cmp (const struct hol_entry *entry1,
+               const struct hol_entry *entry2)
+{
+  /* The group numbers by which the entries should be ordered; if either is
+     in a cluster, then this is just the group within the cluster.  */
+  int group1 = entry1->group, group2 = entry2->group;
+  int rc;
+
+  if (entry1->cluster != entry2->cluster)
+    {
+      /* The entries are not within the same cluster, so we can't compare them
+         directly, we have to use the appropiate clustering level too.  */
+      if (! entry1->cluster)
+        /* ENTRY1 is at the `base level', not in a cluster, so we have to
+           compare it's group number with that of the base cluster in which
+           ENTRY2 resides.  Note that if they're in the same group, the
+           clustered option always comes laster.  */
+        return group_cmp (group1, hol_cluster_base (entry2->cluster)->group, -1);
+      else if (! entry2->cluster)
+        /* Likewise, but ENTRY2's not in a cluster.  */
+        return group_cmp (hol_cluster_base (entry1->cluster)->group, group2, 1);
+      else
+        /* Both entries are in clusters, we can just compare the clusters.  */
+        return (rc = hol_cluster_cmp (entry1->cluster, entry2->cluster)) ?
+                rc : HOL_ENTRY_PTRCMP(entry1, entry2);
+    }
+  else if (group1 == group2)
+    /* The entries are both in the same cluster and group, so compare them
+       alphabetically.  */
+    {
+      int short1 = hol_entry_first_short (entry1);
+      int short2 = hol_entry_first_short (entry2);
+      int doc1 = odoc (entry1->opt);
+      int doc2 = odoc (entry2->opt);
+      const char *long1 = hol_entry_first_long (entry1);
+      const char *long2 = hol_entry_first_long (entry2);
+
+      if (doc1)
+        doc1 = canon_doc_option (&long1);
+      if (doc2)
+        doc2 = canon_doc_option (&long2);
+
+      if (doc1 != doc2)
+        /* `documentation' options always follow normal options (or
+           documentation options that *look* like normal options).  */
+        return doc1 - doc2;
+      else if (!short1 && !short2 && long1 && long2)
+        /* Only long options.  */
+        return (rc = __strcasecmp (long1, long2)) ?
+                 rc : HOL_ENTRY_PTRCMP(entry1, entry2);
+      else
+        /* Compare short/short, long/short, short/long, using the first
+           character of long options.  Entries without *any* valid
+           options (such as options with OPTION_HIDDEN set) will be put
+           first, but as they're not displayed, it doesn't matter where
+           they are.  */
+        {
+          unsigned char first1 = short1 ? short1 : long1 ? *long1 : 0;
+          unsigned char first2 = short2 ? short2 : long2 ? *long2 : 0;
+          /* Use tolower, not _tolower, since only the former is
+             guaranteed to work on something already lower case.  */
+          int lower_cmp = tolower (first1) - tolower (first2);
+          /* Compare ignoring case, except when the options are both the
+             same letter, in which case lower-case always comes first.  */
+          return lower_cmp ? lower_cmp :
+                    (rc = first2 - first1) ?
+                     rc : HOL_ENTRY_PTRCMP(entry1, entry2);
+        }
+    }
+  else
+    /* Within the same cluster, but not the same group, so just compare
+       groups.  */
+    return group_cmp (group1, group2, HOL_ENTRY_PTRCMP(entry1, entry2));
+}
+
+/* Version of hol_entry_cmp with correct signature for qsort.  */
+static int
+hol_entry_qcmp (const void *entry1_v, const void *entry2_v)
+{
+  return hol_entry_cmp (entry1_v, entry2_v);
+}
+
+/* Sort HOL by group and alphabetically by option name (with short options
+   taking precedence over long).  Since the sorting is for display purposes
+   only, the shadowing of options isn't effected.  */
+static void
+hol_sort (struct hol *hol)
+{
+  if (hol->num_entries > 0)
+    {
+      unsigned i;
+      struct hol_entry *e;
+      for (i = 0, e = hol->entries; i < hol->num_entries; i++, e++)
+        e->ord = i;
+      qsort (hol->entries, hol->num_entries, sizeof (struct hol_entry),
+             hol_entry_qcmp);
+    }
+}
+\f
+/* Append MORE to HOL, destroying MORE in the process.  Options in HOL shadow
+   any in MORE with the same name.  */
+static void
+hol_append (struct hol *hol, struct hol *more)
+{
+  struct hol_cluster **cl_end = &hol->clusters;
+
+  /* Steal MORE's cluster list, and add it to the end of HOL's.  */
+  while (*cl_end)
+    cl_end = &(*cl_end)->next;
+  *cl_end = more->clusters;
+  more->clusters = 0;
+
+  /* Merge entries.  */
+  if (more->num_entries > 0)
+    {
+      if (hol->num_entries == 0)
+        {
+          hol->num_entries = more->num_entries;
+          hol->entries = more->entries;
+          hol->short_options = more->short_options;
+          more->num_entries = 0;        /* Mark MORE's fields as invalid.  */
+        }
+      else
+        /* Append the entries in MORE to those in HOL, taking care to only add
+           non-shadowed SHORT_OPTIONS values.  */
+        {
+          unsigned left;
+          char *so, *more_so;
+          struct hol_entry *e;
+          unsigned num_entries = hol->num_entries + more->num_entries;
+          struct hol_entry *entries =
+            malloc (num_entries * sizeof (struct hol_entry));
+          unsigned hol_so_len = strlen (hol->short_options);
+          char *short_options =
+            malloc (hol_so_len + strlen (more->short_options) + 1);
+
+          assert (entries && short_options);
+          if (SIZE_MAX <= UINT_MAX)
+            assert (num_entries <= SIZE_MAX / sizeof (struct hol_entry));
+
+          __mempcpy (__mempcpy (entries, hol->entries,
+                                hol->num_entries * sizeof (struct hol_entry)),
+                     more->entries,
+                     more->num_entries * sizeof (struct hol_entry));
+
+          __mempcpy (short_options, hol->short_options, hol_so_len);
+
+          /* Fix up the short options pointers from HOL.  */
+          for (e = entries, left = hol->num_entries; left > 0; e++, left--)
+            e->short_options += (short_options - hol->short_options);
+
+          /* Now add the short options from MORE, fixing up its entries
+             too.  */
+          so = short_options + hol_so_len;
+          more_so = more->short_options;
+          for (left = more->num_entries; left > 0; e++, left--)
+            {
+              int opts_left;
+              const struct argp_option *opt;
+
+              e->short_options = so;
+
+              for (opts_left = e->num, opt = e->opt; opts_left; opt++, opts_left--)
+                {
+                  int ch = *more_so;
+                  if (oshort (opt) && ch == opt->key)
+                    /* The next short option in MORE_SO, CH, is from OPT.  */
+                    {
+                      if (! find_char (ch, short_options,
+                                       short_options + hol_so_len))
+                        /* The short option CH isn't shadowed by HOL's options,
+                           so add it to the sum.  */
+                        *so++ = ch;
+                      more_so++;
+                    }
+                }
+            }
+
+          *so = '\0';
+
+          free (hol->entries);
+          free (hol->short_options);
+
+          hol->entries = entries;
+          hol->num_entries = num_entries;
+          hol->short_options = short_options;
+        }
+    }
+
+  hol_free (more);
+}
+\f
+/* Inserts enough spaces to make sure STREAM is at column COL.  */
+static void
+indent_to (argp_fmtstream_t stream, unsigned col)
+{
+  int needed = col - __argp_fmtstream_point (stream);
+  while (needed-- > 0)
+    __argp_fmtstream_putc (stream, ' ');
+}
+
+/* Output to STREAM either a space, or a newline if there isn't room for at
+   least ENSURE characters before the right margin.  */
+static void
+space (argp_fmtstream_t stream, size_t ensure)
+{
+  if (__argp_fmtstream_point (stream) + ensure
+      >= __argp_fmtstream_rmargin (stream))
+    __argp_fmtstream_putc (stream, '\n');
+  else
+    __argp_fmtstream_putc (stream, ' ');
+}
+
+/* If the option REAL has an argument, we print it in using the printf
+   format REQ_FMT or OPT_FMT depending on whether it's a required or
+   optional argument.  */
+static void
+arg (const struct argp_option *real, const char *req_fmt, const char *opt_fmt,
+     const char *domain, argp_fmtstream_t stream)
+{
+  if (real->arg)
+    {
+      if (real->flags & OPTION_ARG_OPTIONAL)
+        __argp_fmtstream_printf (stream, opt_fmt,
+                                 dgettext (domain, real->arg));
+      else
+        __argp_fmtstream_printf (stream, req_fmt,
+                                 dgettext (domain, real->arg));
+    }
+}
+\f
+/* Helper functions for hol_entry_help.  */
+
+/* State used during the execution of hol_help.  */
+struct hol_help_state
+{
+  /* PREV_ENTRY should contain the previous entry printed, or 0.  */
+  struct hol_entry *prev_entry;
+
+  /* If an entry is in a different group from the previous one, and SEP_GROUPS
+     is true, then a blank line will be printed before any output. */
+  int sep_groups;
+
+  /* True if a duplicate option argument was suppressed (only ever set if
+     UPARAMS.dup_args is false).  */
+  int suppressed_dup_arg;
+};
+
+/* Some state used while printing a help entry (used to communicate with
+   helper functions).  See the doc for hol_entry_help for more info, as most
+   of the fields are copied from its arguments.  */
+struct pentry_state
+{
+  const struct hol_entry *entry;
+  argp_fmtstream_t stream;
+  struct hol_help_state *hhstate;
+
+  /* True if nothing's been printed so far.  */
+  int first;
+
+  /* If non-zero, the state that was used to print this help.  */
+  const struct argp_state *state;
+};
+
+/* If a user doc filter should be applied to DOC, do so.  */
+static const char *
+filter_doc (const char *doc, int key, const struct argp *argp,
+            const struct argp_state *state)
+{
+  if (argp->help_filter)
+    /* We must apply a user filter to this output.  */
+    {
+      void *input = __argp_input (argp, state);
+      return (*argp->help_filter) (key, doc, input);
+    }
+  else
+    /* No filter.  */
+    return doc;
+}
+
+/* Prints STR as a header line, with the margin lines set appropiately, and
+   notes the fact that groups should be separated with a blank line.  ARGP is
+   the argp that should dictate any user doc filtering to take place.  Note
+   that the previous wrap margin isn't restored, but the left margin is reset
+   to 0.  */
+static void
+print_header (const char *str, const struct argp *argp,
+              struct pentry_state *pest)
+{
+  const char *tstr = dgettext (argp->argp_domain, str);
+  const char *fstr = filter_doc (tstr, ARGP_KEY_HELP_HEADER, argp, pest->state);
+
+  if (fstr)
+    {
+      if (*fstr)
+        {
+          if (pest->hhstate->prev_entry)
+            /* Precede with a blank line.  */
+            __argp_fmtstream_putc (pest->stream, '\n');
+          indent_to (pest->stream, uparams.header_col);
+          __argp_fmtstream_set_lmargin (pest->stream, uparams.header_col);
+          __argp_fmtstream_set_wmargin (pest->stream, uparams.header_col);
+          __argp_fmtstream_puts (pest->stream, fstr);
+          __argp_fmtstream_set_lmargin (pest->stream, 0);
+          __argp_fmtstream_putc (pest->stream, '\n');
+        }
+
+      pest->hhstate->sep_groups = 1; /* Separate subsequent groups. */
+    }
+
+  if (fstr != tstr)
+    free ((char *) fstr);
+}
+
+/* Inserts a comma if this isn't the first item on the line, and then makes
+   sure we're at least to column COL.  If this *is* the first item on a line,
+   prints any pending whitespace/headers that should precede this line. Also
+   clears FIRST.  */
+static void
+comma (unsigned col, struct pentry_state *pest)
+{
+  if (pest->first)
+    {
+      const struct hol_entry *pe = pest->hhstate->prev_entry;
+      const struct hol_cluster *cl = pest->entry->cluster;
+
+      if (pest->hhstate->sep_groups && pe && pest->entry->group != pe->group)
+        __argp_fmtstream_putc (pest->stream, '\n');
+
+      if (cl && cl->header && *cl->header
+          && (!pe
+              || (pe->cluster != cl
+                  && !hol_cluster_is_child (pe->cluster, cl))))
+        /* If we're changing clusters, then this must be the start of the
+           ENTRY's cluster unless that is an ancestor of the previous one
+           (in which case we had just popped into a sub-cluster for a bit).
+           If so, then print the cluster's header line.  */
+        {
+          int old_wm = __argp_fmtstream_wmargin (pest->stream);
+          print_header (cl->header, cl->argp, pest);
+          __argp_fmtstream_set_wmargin (pest->stream, old_wm);
+        }
+
+      pest->first = 0;
+    }
+  else
+    __argp_fmtstream_puts (pest->stream, ", ");
+
+  indent_to (pest->stream, col);
+}
+\f
+/* Print help for ENTRY to STREAM.  */
+static void
+hol_entry_help (struct hol_entry *entry, const struct argp_state *state,
+                argp_fmtstream_t stream, struct hol_help_state *hhstate)
+{
+  unsigned num;
+  const struct argp_option *real = entry->opt, *opt;
+  char *so = entry->short_options;
+  int have_long_opt = 0;        /* We have any long options.  */
+  /* Saved margins.  */
+  int old_lm = __argp_fmtstream_set_lmargin (stream, 0);
+  int old_wm = __argp_fmtstream_wmargin (stream);
+  /* PEST is a state block holding some of our variables that we'd like to
+     share with helper functions.  */
+  struct pentry_state pest;
+
+  pest.entry = entry;
+  pest.stream = stream;
+  pest.hhstate = hhstate;
+  pest.first = 1;
+  pest.state = state;
+
+  if (! odoc (real))
+    for (opt = real, num = entry->num; num > 0; opt++, num--)
+      if (opt->name && ovisible (opt))
+        {
+          have_long_opt = 1;
+          break;
+        }
+
+  /* First emit short options.  */
+  __argp_fmtstream_set_wmargin (stream, uparams.short_opt_col); /* For truly bizarre cases. */
+  for (opt = real, num = entry->num; num > 0; opt++, num--)
+    if (oshort (opt) && opt->key == *so)
+      /* OPT has a valid (non shadowed) short option.  */
+      {
+        if (ovisible (opt))
+          {
+            comma (uparams.short_opt_col, &pest);
+            __argp_fmtstream_putc (stream, '-');
+            __argp_fmtstream_putc (stream, *so);
+            if (!have_long_opt || uparams.dup_args)
+              arg (real, " %s", "[%s]", state->root_argp->argp_domain, stream);
+            else if (real->arg)
+              hhstate->suppressed_dup_arg = 1;
+          }
+        so++;
+      }
+
+  /* Now, long options.  */
+  if (odoc (real))
+    /* A `documentation' option.  */
+    {
+      __argp_fmtstream_set_wmargin (stream, uparams.doc_opt_col);
+      for (opt = real, num = entry->num; num > 0; opt++, num--)
+        if (opt->name && *opt->name && ovisible (opt))
+          {
+            comma (uparams.doc_opt_col, &pest);
+            /* Calling dgettext here isn't quite right, since sorting will
+               have been done on the original; but documentation options
+               should be pretty rare anyway...  */
+            __argp_fmtstream_puts (stream,
+                                   onotrans (opt) ?
+                                             opt->name :
+                                   dgettext (state->root_argp->argp_domain,
+                                             opt->name));
+          }
+    }
+  else
+    /* A real long option.  */
+    {
+      int first_long_opt = 1;
+
+      __argp_fmtstream_set_wmargin (stream, uparams.long_opt_col);
+      for (opt = real, num = entry->num; num > 0; opt++, num--)
+        if (opt->name && ovisible (opt))
+          {
+            comma (uparams.long_opt_col, &pest);
+            __argp_fmtstream_printf (stream, "--%s", opt->name);
+            if (first_long_opt || uparams.dup_args)
+              arg (real, "=%s", "[=%s]", state->root_argp->argp_domain,
+                   stream);
+            else if (real->arg)
+              hhstate->suppressed_dup_arg = 1;
+          }
+    }
+
+  /* Next, documentation strings.  */
+  __argp_fmtstream_set_lmargin (stream, 0);
+
+  if (pest.first)
+    {
+      /* Didn't print any switches, what's up?  */
+      if (!oshort (real) && !real->name)
+        /* This is a group header, print it nicely.  */
+        print_header (real->doc, entry->argp, &pest);
+      else
+        /* Just a totally shadowed option or null header; print nothing.  */
+        goto cleanup;           /* Just return, after cleaning up.  */
+    }
+  else
+    {
+      const char *tstr = real->doc ? dgettext (state->root_argp->argp_domain,
+                                               real->doc) : 0;
+      const char *fstr = filter_doc (tstr, real->key, entry->argp, state);
+      if (fstr && *fstr)
+        {
+          unsigned int col = __argp_fmtstream_point (stream);
+
+          __argp_fmtstream_set_lmargin (stream, uparams.opt_doc_col);
+          __argp_fmtstream_set_wmargin (stream, uparams.opt_doc_col);
+
+          if (col > (unsigned int) (uparams.opt_doc_col + 3))
+            __argp_fmtstream_putc (stream, '\n');
+          else if (col >= (unsigned int) uparams.opt_doc_col)
+            __argp_fmtstream_puts (stream, "   ");
+          else
+            indent_to (stream, uparams.opt_doc_col);
+
+          __argp_fmtstream_puts (stream, fstr);
+        }
+      if (fstr && fstr != tstr)
+        free ((char *) fstr);
+
+      /* Reset the left margin.  */
+      __argp_fmtstream_set_lmargin (stream, 0);
+      __argp_fmtstream_putc (stream, '\n');
+    }
+
+  hhstate->prev_entry = entry;
+
+cleanup:
+  __argp_fmtstream_set_lmargin (stream, old_lm);
+  __argp_fmtstream_set_wmargin (stream, old_wm);
+}
+\f
+/* Output a long help message about the options in HOL to STREAM.  */
+static void
+hol_help (struct hol *hol, const struct argp_state *state,
+          argp_fmtstream_t stream)
+{
+  unsigned num;
+  struct hol_entry *entry;
+  struct hol_help_state hhstate = { 0, 0, 0 };
+
+  for (entry = hol->entries, num = hol->num_entries; num > 0; entry++, num--)
+    hol_entry_help (entry, state, stream, &hhstate);
+
+  if (hhstate.suppressed_dup_arg && uparams.dup_args_note)
+    {
+      const char *tstr = dgettext (state->root_argp->argp_domain, "\
+Mandatory or optional arguments to long options are also mandatory or \
+optional for any corresponding short options.");
+      const char *fstr = filter_doc (tstr, ARGP_KEY_HELP_DUP_ARGS_NOTE,
+                                     state ? state->root_argp : 0, state);
+      if (fstr && *fstr)
+        {
+          __argp_fmtstream_putc (stream, '\n');
+          __argp_fmtstream_puts (stream, fstr);
+          __argp_fmtstream_putc (stream, '\n');
+        }
+      if (fstr && fstr != tstr)
+        free ((char *) fstr);
+    }
+}
+\f
+/* Helper functions for hol_usage.  */
+
+/* If OPT is a short option without an arg, append its key to the string
+   pointer pointer to by COOKIE, and advance the pointer.  */
+static int
+add_argless_short_opt (const struct argp_option *opt,
+                       const struct argp_option *real,
+                       const char *domain, void *cookie)
+{
+  char **snao_end = cookie;
+  if (!(opt->arg || real->arg)
+      && !((opt->flags | real->flags) & OPTION_NO_USAGE))
+    *(*snao_end)++ = opt->key;
+  return 0;
+}
+
+/* If OPT is a short option with an arg, output a usage entry for it to the
+   stream pointed at by COOKIE.  */
+static int
+usage_argful_short_opt (const struct argp_option *opt,
+                        const struct argp_option *real,
+                        const char *domain, void *cookie)
+{
+  argp_fmtstream_t stream = cookie;
+  const char *arg = opt->arg;
+  int flags = opt->flags | real->flags;
+
+  if (! arg)
+    arg = real->arg;
+
+  if (arg && !(flags & OPTION_NO_USAGE))
+    {
+      arg = dgettext (domain, arg);
+
+      if (flags & OPTION_ARG_OPTIONAL)
+        __argp_fmtstream_printf (stream, " [-%c[%s]]", opt->key, arg);
+      else
+        {
+          /* Manually do line wrapping so that it (probably) won't
+             get wrapped at the embedded space.  */
+          space (stream, 6 + strlen (arg));
+          __argp_fmtstream_printf (stream, "[-%c %s]", opt->key, arg);
+        }
+    }
+
+  return 0;
+}
+
+/* Output a usage entry for the long option opt to the stream pointed at by
+   COOKIE.  */
+static int
+usage_long_opt (const struct argp_option *opt,
+                const struct argp_option *real,
+                const char *domain, void *cookie)
+{
+  argp_fmtstream_t stream = cookie;
+  const char *arg = opt->arg;
+  int flags = opt->flags | real->flags;
+
+  if (! arg)
+    arg = real->arg;
+
+  if (! (flags & OPTION_NO_USAGE) && !odoc (opt))
+    {
+      if (arg)
+        {
+          arg = dgettext (domain, arg);
+          if (flags & OPTION_ARG_OPTIONAL)
+            __argp_fmtstream_printf (stream, " [--%s[=%s]]", opt->name, arg);
+          else
+            __argp_fmtstream_printf (stream, " [--%s=%s]", opt->name, arg);
+        }
+      else
+        __argp_fmtstream_printf (stream, " [--%s]", opt->name);
+    }
+
+  return 0;
+}
+\f
+/* Print a short usage description for the arguments in HOL to STREAM.  */
+static void
+hol_usage (struct hol *hol, argp_fmtstream_t stream)
+{
+  if (hol->num_entries > 0)
+    {
+      unsigned nentries;
+      struct hol_entry *entry;
+      char *short_no_arg_opts = alloca (strlen (hol->short_options) + 1);
+      char *snao_end = short_no_arg_opts;
+
+      /* First we put a list of short options without arguments.  */
+      for (entry = hol->entries, nentries = hol->num_entries
+           ; nentries > 0
+           ; entry++, nentries--)
+        hol_entry_short_iterate (entry, add_argless_short_opt,
+                                 entry->argp->argp_domain, &snao_end);
+      if (snao_end > short_no_arg_opts)
+        {
+          *snao_end++ = 0;
+          __argp_fmtstream_printf (stream, " [-%s]", short_no_arg_opts);
+        }
+
+      /* Now a list of short options *with* arguments.  */
+      for (entry = hol->entries, nentries = hol->num_entries
+           ; nentries > 0
+           ; entry++, nentries--)
+        hol_entry_short_iterate (entry, usage_argful_short_opt,
+                                 entry->argp->argp_domain, stream);
+
+      /* Finally, a list of long options (whew!).  */
+      for (entry = hol->entries, nentries = hol->num_entries
+           ; nentries > 0
+           ; entry++, nentries--)
+        hol_entry_long_iterate (entry, usage_long_opt,
+                                entry->argp->argp_domain, stream);
+    }
+}
+\f
+/* Make a HOL containing all levels of options in ARGP.  CLUSTER is the
+   cluster in which ARGP's entries should be clustered, or 0.  */
+static struct hol *
+argp_hol (const struct argp *argp, struct hol_cluster *cluster)
+{
+  const struct argp_child *child = argp->children;
+  struct hol *hol = make_hol (argp, cluster);
+  if (child)
+    while (child->argp)
+      {
+        struct hol_cluster *child_cluster =
+          ((child->group || child->header)
+           /* Put CHILD->argp within its own cluster.  */
+           ? hol_add_cluster (hol, child->group, child->header,
+                              child - argp->children, cluster, argp)
+           /* Just merge it into the parent's cluster.  */
+           : cluster);
+        hol_append (hol, argp_hol (child->argp, child_cluster)) ;
+        child++;
+      }
+  return hol;
+}
+\f
+/* Calculate how many different levels with alternative args strings exist in
+   ARGP.  */
+static size_t
+argp_args_levels (const struct argp *argp)
+{
+  size_t levels = 0;
+  const struct argp_child *child = argp->children;
+
+  if (argp->args_doc && strchr (argp->args_doc, '\n'))
+    levels++;
+
+  if (child)
+    while (child->argp)
+      levels += argp_args_levels ((child++)->argp);
+
+  return levels;
+}
+
+/* Print all the non-option args documented in ARGP to STREAM.  Any output is
+   preceded by a space.  LEVELS is a pointer to a byte vector the length
+   returned by argp_args_levels; it should be initialized to zero, and
+   updated by this routine for the next call if ADVANCE is true.  True is
+   returned as long as there are more patterns to output.  */
+static int
+argp_args_usage (const struct argp *argp, const struct argp_state *state,
+                 char **levels, int advance, argp_fmtstream_t stream)
+{
+  char *our_level = *levels;
+  int multiple = 0;
+  const struct argp_child *child = argp->children;
+  const char *tdoc = dgettext (argp->argp_domain, argp->args_doc), *nl = 0;
+  const char *fdoc = filter_doc (tdoc, ARGP_KEY_HELP_ARGS_DOC, argp, state);
+
+  if (fdoc)
+    {
+      const char *cp = fdoc;
+      nl = __strchrnul (cp, '\n');
+      if (*nl != '\0')
+        /* This is a `multi-level' args doc; advance to the correct position
+           as determined by our state in LEVELS, and update LEVELS.  */
+        {
+          int i;
+          multiple = 1;
+          for (i = 0; i < *our_level; i++)
+            cp = nl + 1, nl = __strchrnul (cp, '\n');
+          (*levels)++;
+        }
+
+      /* Manually do line wrapping so that it (probably) won't get wrapped at
+         any embedded spaces.  */
+      space (stream, 1 + nl - cp);
+
+      __argp_fmtstream_write (stream, cp, nl - cp);
+    }
+  if (fdoc && fdoc != tdoc)
+    free ((char *)fdoc);        /* Free user's modified doc string.  */
+
+  if (child)
+    while (child->argp)
+      advance = !argp_args_usage ((child++)->argp, state, levels, advance, stream);
+
+  if (advance && multiple)
+    {
+      /* Need to increment our level.  */
+      if (*nl)
+        /* There's more we can do here.  */
+        {
+          (*our_level)++;
+          advance = 0;          /* Our parent shouldn't advance also. */
+        }
+      else if (*our_level > 0)
+        /* We had multiple levels, but used them up; reset to zero.  */
+        *our_level = 0;
+    }
+
+  return !advance;
+}
+\f
+/* Print the documentation for ARGP to STREAM; if POST is false, then
+   everything preceeding a `\v' character in the documentation strings (or
+   the whole string, for those with none) is printed, otherwise, everything
+   following the `\v' character (nothing for strings without).  Each separate
+   bit of documentation is separated a blank line, and if PRE_BLANK is true,
+   then the first is as well.  If FIRST_ONLY is true, only the first
+   occurrence is output.  Returns true if anything was output.  */
+static int
+argp_doc (const struct argp *argp, const struct argp_state *state,
+          int post, int pre_blank, int first_only,
+          argp_fmtstream_t stream)
+{
+  const char *text;
+  const char *inp_text;
+  size_t inp_text_len = 0;
+  const char *trans_text;
+  void *input = 0;
+  int anything = 0;
+  const struct argp_child *child = argp->children;
+
+  if (argp->doc)
+    {
+      char *vt = strchr (argp->doc, '\v');
+      if (vt)
+        {
+          if (post)
+            inp_text = vt + 1;
+          else
+            {
+              inp_text_len = vt - argp->doc;
+              inp_text = __strndup (argp->doc, inp_text_len);
+            }
+        }
+      else
+        inp_text = post ? 0 : argp->doc;
+      trans_text = inp_text ? dgettext (argp->argp_domain, inp_text) : NULL;
+    }
+  else
+    trans_text = inp_text = 0;
+
+  if (argp->help_filter)
+    /* We have to filter the doc strings.  */
+    {
+      input = __argp_input (argp, state);
+      text =
+        (*argp->help_filter) (post
+                              ? ARGP_KEY_HELP_POST_DOC
+                              : ARGP_KEY_HELP_PRE_DOC,
+                              trans_text, input);
+    }
+  else
+    text = (const char *) trans_text;
+
+  if (text)
+    {
+      if (pre_blank)
+        __argp_fmtstream_putc (stream, '\n');
+
+      __argp_fmtstream_puts (stream, text);
+
+      if (__argp_fmtstream_point (stream) > __argp_fmtstream_lmargin (stream))
+        __argp_fmtstream_putc (stream, '\n');
+
+      anything = 1;
+    }
+
+  if (text && text != trans_text)
+    free ((char *) text);       /* Free TEXT returned from the help filter.  */
+
+  if (inp_text && inp_text_len)
+    free ((char *) inp_text);   /* We copied INP_TEXT, so free it now.  */
+
+  if (post && argp->help_filter)
+    /* Now see if we have to output a ARGP_KEY_HELP_EXTRA text.  */
+    {
+      text = (*argp->help_filter) (ARGP_KEY_HELP_EXTRA, 0, input);
+      if (text)
+        {
+          if (anything || pre_blank)
+            __argp_fmtstream_putc (stream, '\n');
+          __argp_fmtstream_puts (stream, text);
+          free ((char *) text);
+          if (__argp_fmtstream_point (stream)
+              > __argp_fmtstream_lmargin (stream))
+            __argp_fmtstream_putc (stream, '\n');
+          anything = 1;
+        }
+    }
+
+  if (child)
+    while (child->argp && !(first_only && anything))
+      anything |=
+        argp_doc ((child++)->argp, state,
+                  post, anything || pre_blank, first_only,
+                  stream);
+
+  return anything;
+}
+\f
+/* Output a usage message for ARGP to STREAM.  If called from
+   argp_state_help, STATE is the relevent parsing state.  FLAGS are from the
+   set ARGP_HELP_*.  NAME is what to use wherever a `program name' is
+   needed. */
+static void
+_help (const struct argp *argp, const struct argp_state *state, FILE *stream,
+       unsigned flags, char *name)
+{
+  int anything = 0;             /* Whether we've output anything.  */
+  struct hol *hol = 0;
+  argp_fmtstream_t fs;
+
+  if (! stream)
+    return;
+
+#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE)
+  __flockfile (stream);
+#endif
+
+  if (! uparams.valid)
+    fill_in_uparams (state);
+
+  fs = __argp_make_fmtstream (stream, 0, uparams.rmargin, 0);
+  if (! fs)
+    {
+#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE)
+      __funlockfile (stream);
+#endif
+      return;
+    }
+
+  if (flags & (ARGP_HELP_USAGE | ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG))
+    {
+      hol = argp_hol (argp, 0);
+
+      /* If present, these options always come last.  */
+      hol_set_group (hol, "help", -1);
+      hol_set_group (hol, "version", -1);
+
+      hol_sort (hol);
+    }
+
+  if (flags & (ARGP_HELP_USAGE | ARGP_HELP_SHORT_USAGE))
+    /* Print a short `Usage:' message.  */
+    {
+      int first_pattern = 1, more_patterns;
+      size_t num_pattern_levels = argp_args_levels (argp);
+      char *pattern_levels = alloca (num_pattern_levels);
+
+      memset (pattern_levels, 0, num_pattern_levels);
+
+      do
+        {
+          int old_lm;
+          int old_wm = __argp_fmtstream_set_wmargin (fs, uparams.usage_indent);
+          char *levels = pattern_levels;
+
+          if (first_pattern)
+            __argp_fmtstream_printf (fs, "%s %s",
+                                     dgettext (argp->argp_domain, "Usage:"),
+                                     name);
+          else
+            __argp_fmtstream_printf (fs, "%s %s",
+                                     dgettext (argp->argp_domain, "  or: "),
+                                     name);
+
+          /* We set the lmargin as well as the wmargin, because hol_usage
+             manually wraps options with newline to avoid annoying breaks.  */
+          old_lm = __argp_fmtstream_set_lmargin (fs, uparams.usage_indent);
+
+          if (flags & ARGP_HELP_SHORT_USAGE)
+            /* Just show where the options go.  */
+            {
+              if (hol->num_entries > 0)
+                __argp_fmtstream_puts (fs, dgettext (argp->argp_domain,
+                                                     " [OPTION...]"));
+            }
+          else
+            /* Actually print the options.  */
+            {
+              hol_usage (hol, fs);
+              flags |= ARGP_HELP_SHORT_USAGE; /* But only do so once.  */
+            }
+
+          more_patterns = argp_args_usage (argp, state, &levels, 1, fs);
+
+          __argp_fmtstream_set_wmargin (fs, old_wm);
+          __argp_fmtstream_set_lmargin (fs, old_lm);
+
+          __argp_fmtstream_putc (fs, '\n');
+          anything = 1;
+
+          first_pattern = 0;
+        }
+      while (more_patterns);
+    }
+
+  if (flags & ARGP_HELP_PRE_DOC)
+    anything |= argp_doc (argp, state, 0, 0, 1, fs);
+
+  if (flags & ARGP_HELP_SEE)
+    {
+      __argp_fmtstream_printf (fs, dgettext (argp->argp_domain, "\
+Try `%s --help' or `%s --usage' for more information.\n"),
+                               name, name);
+      anything = 1;
+    }
+
+  if (flags & ARGP_HELP_LONG)
+    /* Print a long, detailed help message.  */
+    {
+      /* Print info about all the options.  */
+      if (hol->num_entries > 0)
+        {
+          if (anything)
+            __argp_fmtstream_putc (fs, '\n');
+          hol_help (hol, state, fs);
+          anything = 1;
+        }
+    }
+
+  if (flags & ARGP_HELP_POST_DOC)
+    /* Print any documentation strings at the end.  */
+    anything |= argp_doc (argp, state, 1, anything, 0, fs);
+
+  if ((flags & ARGP_HELP_BUG_ADDR) && argp_program_bug_address)
+    {
+      if (anything)
+        __argp_fmtstream_putc (fs, '\n');
+      __argp_fmtstream_printf (fs, dgettext (argp->argp_domain,
+                                             "Report bugs to %s.\n"),
+                               argp_program_bug_address);
+      anything = 1;
+    }
+
+#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE)
+  __funlockfile (stream);
+#endif
+
+  if (hol)
+    hol_free (hol);
+
+  __argp_fmtstream_free (fs);
+}
+\f
+/* Output a usage message for ARGP to STREAM.  FLAGS are from the set
+   ARGP_HELP_*.  NAME is what to use wherever a `program name' is needed. */
+void __argp_help (const struct argp *argp, FILE *stream,
+                  unsigned flags, char *name)
+{
+  struct argp_state state;
+  memset (&state, 0, sizeof state);
+  state.root_argp = argp;
+  _help (argp, &state, stream, flags, name);
+}
+#ifdef weak_alias
+weak_alias (__argp_help, argp_help)
+#endif
+
+#if ! (defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME)
+char *
+__argp_short_program_name (void)
+{
+# if HAVE_DECL_PROGRAM_INVOCATION_NAME
+  return __argp_base_name (program_invocation_name);
+# else
+  /* FIXME: What now? Miles suggests that it is better to use NULL,
+     but currently the value is passed on directly to fputs_unlocked,
+     so that requires more changes. */
+# if __GNUC__
+#  warning No reasonable value to return
+# endif /* __GNUC__ */
+  return "";
+# endif
+}
+#endif
+
+/* Output, if appropriate, a usage message for STATE to STREAM.  FLAGS are
+   from the set ARGP_HELP_*.  */
+void
+__argp_state_help (const struct argp_state *state, FILE *stream, unsigned flags)
+{
+  if ((!state || ! (state->flags & ARGP_NO_ERRS)) && stream)
+    {
+      if (state && (state->flags & ARGP_LONG_ONLY))
+        flags |= ARGP_HELP_LONG_ONLY;
+
+      _help (state ? state->root_argp : 0, state, stream, flags,
+             state ? state->name : __argp_short_program_name ());
+
+      if (!state || ! (state->flags & ARGP_NO_EXIT))
+        {
+          if (flags & ARGP_HELP_EXIT_ERR)
+            exit (argp_err_exit_status);
+          if (flags & ARGP_HELP_EXIT_OK)
+            exit (0);
+        }
+  }
+}
+#ifdef weak_alias
+weak_alias (__argp_state_help, argp_state_help)
+#endif
+\f
+/* If appropriate, print the printf string FMT and following args, preceded
+   by the program name and `:', to stderr, and followed by a `Try ... --help'
+   message, then exit (1).  */
+void
+__argp_error (const struct argp_state *state, const char *fmt, ...)
+{
+  if (!state || !(state->flags & ARGP_NO_ERRS))
+    {
+      FILE *stream = state ? state->err_stream : stderr;
+
+      if (stream)
+        {
+          va_list ap;
+
+#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE)
+          __flockfile (stream);
+#endif
+
+          va_start (ap, fmt);
+
+#ifdef USE_IN_LIBIO
+          if (_IO_fwide (stream, 0) > 0)
+            {
+              char *buf;
+
+              if (__asprintf (&buf, fmt, ap) < 0)
+                buf = NULL;
+
+              __fwprintf (stream, L"%s: %s\n",
+                          state ? state->name : __argp_short_program_name (),
+                          buf);
+
+              free (buf);
+            }
+          else
+#endif
+            {
+              fputs_unlocked (state
+                              ? state->name : __argp_short_program_name (),
+                              stream);
+              putc_unlocked (':', stream);
+              putc_unlocked (' ', stream);
+
+              vfprintf (stream, fmt, ap);
+
+              putc_unlocked ('\n', stream);
+            }
+
+          __argp_state_help (state, stream, ARGP_HELP_STD_ERR);
+
+          va_end (ap);
+
+#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE)
+          __funlockfile (stream);
+#endif
+        }
+    }
+}
+#ifdef weak_alias
+weak_alias (__argp_error, argp_error)
+#endif
+\f
+/* Similar to the standard gnu error-reporting function error(), but will
+   respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print
+   to STATE->err_stream.  This is useful for argument parsing code that is
+   shared between program startup (when exiting is desired) and runtime
+   option parsing (when typically an error code is returned instead).  The
+   difference between this function and argp_error is that the latter is for
+   *parsing errors*, and the former is for other problems that occur during
+   parsing but don't reflect a (syntactic) problem with the input.  */
+void
+__argp_failure (const struct argp_state *state, int status, int errnum,
+                const char *fmt, ...)
+{
+  if (!state || !(state->flags & ARGP_NO_ERRS))
+    {
+      FILE *stream = state ? state->err_stream : stderr;
+
+      if (stream)
+        {
+#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE)
+          __flockfile (stream);
+#endif
+
+#ifdef USE_IN_LIBIO
+          if (_IO_fwide (stream, 0) > 0)
+            __fwprintf (stream, L"%s",
+                        state ? state->name : __argp_short_program_name ());
+          else
+#endif
+            fputs_unlocked (state
+                            ? state->name : __argp_short_program_name (),
+                            stream);
+
+          if (fmt)
+            {
+              va_list ap;
+
+              va_start (ap, fmt);
+#ifdef USE_IN_LIBIO
+              if (_IO_fwide (stream, 0) > 0)
+                {
+                  char *buf;
+
+                  if (__asprintf (&buf, fmt, ap) < 0)
+                    buf = NULL;
+
+                  __fwprintf (stream, L": %s", buf);
+
+                  free (buf);
+                }
+              else
+#endif
+                {
+                  putc_unlocked (':', stream);
+                  putc_unlocked (' ', stream);
+
+                  vfprintf (stream, fmt, ap);
+                }
+
+              va_end (ap);
+            }
+
+          if (errnum)
+            {
+              char buf[200];
+
+#ifdef USE_IN_LIBIO
+              if (_IO_fwide (stream, 0) > 0)
+                __fwprintf (stream, L": %s",
+                            __strerror_r (errnum, buf, sizeof (buf)));
+              else
+#endif
+                {
+                  char const *s = NULL;
+                  putc_unlocked (':', stream);
+                  putc_unlocked (' ', stream);
+#if _LIBC || (HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P)
+                  s = __strerror_r (errnum, buf, sizeof buf);
+#elif HAVE_DECL_STRERROR_R
+                  if (__strerror_r (errnum, buf, sizeof buf) == 0)
+                    s = buf;
+#endif
+#if !_LIBC
+                  if (! s && ! (s = strerror (errnum)))
+                    s = dgettext (state->root_argp->argp_domain,
+                                  "Unknown system error");
+#endif
+                  fputs (s, stream);
+                }
+            }
+
+#ifdef USE_IN_LIBIO
+          if (_IO_fwide (stream, 0) > 0)
+            putwc_unlocked (L'\n', stream);
+          else
+#endif
+            putc_unlocked ('\n', stream);
+
+#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE)
+          __funlockfile (stream);
+#endif
+
+          if (status && (!state || !(state->flags & ARGP_NO_EXIT)))
+            exit (status);
+        }
+    }
+}
+#ifdef weak_alias
+weak_alias (__argp_failure, argp_failure)
+#endif
diff --git a/gnu/argp-namefrob.h b/gnu/argp-namefrob.h
new file mode 100644 (file)
index 0000000..67d36b9
--- /dev/null
@@ -0,0 +1,159 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Name frobnication for compiling argp outside of glibc
+   Copyright (C) 1997, 2003, 2007, 2009, 2010 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by Miles Bader <miles@gnu.ai.mit.edu>.
+
+   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 !_LIBC
+/* This code is written for inclusion in gnu-libc, and uses names in the
+   namespace reserved for libc.  If we're not compiling in libc, define those
+   names to be the normal ones instead.  */
+
+/* argp-parse functions */
+#undef __argp_parse
+#define __argp_parse argp_parse
+#undef __option_is_end
+#define __option_is_end _option_is_end
+#undef __option_is_short
+#define __option_is_short _option_is_short
+#undef __argp_input
+#define __argp_input _argp_input
+
+/* argp-help functions */
+#undef __argp_help
+#define __argp_help argp_help
+#undef __argp_error
+#define __argp_error argp_error
+#undef __argp_failure
+#define __argp_failure argp_failure
+#undef __argp_state_help
+#define __argp_state_help argp_state_help
+#undef __argp_usage
+#define __argp_usage argp_usage
+
+/* argp-fmtstream functions */
+#undef __argp_make_fmtstream
+#define __argp_make_fmtstream argp_make_fmtstream
+#undef __argp_fmtstream_free
+#define __argp_fmtstream_free argp_fmtstream_free
+#undef __argp_fmtstream_putc
+#define __argp_fmtstream_putc argp_fmtstream_putc
+#undef __argp_fmtstream_puts
+#define __argp_fmtstream_puts argp_fmtstream_puts
+#undef __argp_fmtstream_write
+#define __argp_fmtstream_write argp_fmtstream_write
+#undef __argp_fmtstream_printf
+#define __argp_fmtstream_printf argp_fmtstream_printf
+#undef __argp_fmtstream_set_lmargin
+#define __argp_fmtstream_set_lmargin argp_fmtstream_set_lmargin
+#undef __argp_fmtstream_set_rmargin
+#define __argp_fmtstream_set_rmargin argp_fmtstream_set_rmargin
+#undef __argp_fmtstream_set_wmargin
+#define __argp_fmtstream_set_wmargin argp_fmtstream_set_wmargin
+#undef __argp_fmtstream_point
+#define __argp_fmtstream_point argp_fmtstream_point
+#undef __argp_fmtstream_update
+#define __argp_fmtstream_update _argp_fmtstream_update
+#undef __argp_fmtstream_ensure
+#define __argp_fmtstream_ensure _argp_fmtstream_ensure
+#undef __argp_fmtstream_lmargin
+#define __argp_fmtstream_lmargin argp_fmtstream_lmargin
+#undef __argp_fmtstream_rmargin
+#define __argp_fmtstream_rmargin argp_fmtstream_rmargin
+#undef __argp_fmtstream_wmargin
+#define __argp_fmtstream_wmargin argp_fmtstream_wmargin
+
+/* normal libc functions we call */
+#undef __flockfile
+#define __flockfile flockfile
+#undef __funlockfile
+#define __funlockfile funlockfile
+#undef __mempcpy
+#define __mempcpy mempcpy
+#undef __sleep
+#define __sleep sleep
+#undef __strcasecmp
+#define __strcasecmp strcasecmp
+#undef __strchrnul
+#define __strchrnul strchrnul
+#undef __strerror_r
+#define __strerror_r strerror_r
+#undef __strndup
+#define __strndup strndup
+#undef __vsnprintf
+#define __vsnprintf vsnprintf
+
+#if defined(HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKED
+# define clearerr_unlocked(x) clearerr (x)
+#endif
+#if defined(HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKED
+# define feof_unlocked(x) feof (x)
+# endif
+#if defined(HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKED
+# define ferror_unlocked(x) ferror (x)
+# endif
+#if defined(HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKED
+# define fflush_unlocked(x) fflush (x)
+# endif
+#if defined(HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKED
+# define fgets_unlocked(x,y,z) fgets (x,y,z)
+# endif
+#if defined(HAVE_DECL_FPUTC_UNLOCKED) && !HAVE_DECL_FPUTC_UNLOCKED
+# define fputc_unlocked(x,y) fputc (x,y)
+# endif
+#if defined(HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED
+# define fputs_unlocked(x,y) fputs (x,y)
+# endif
+#if defined(HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_FREAD_UNLOCKED
+# define fread_unlocked(w,x,y,z) fread (w,x,y,z)
+# endif
+#if defined(HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED
+# define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z)
+# endif
+#if defined(HAVE_DECL_GETC_UNLOCKED) && !HAVE_DECL_GETC_UNLOCKED
+# define getc_unlocked(x) getc (x)
+# endif
+#if defined(HAVE_DECL_GETCHAR_UNLOCKED) && !HAVE_DECL_GETCHAR_UNLOCKED
+#  define getchar_unlocked() getchar ()
+# endif
+#if defined(HAVE_DECL_PUTC_UNLOCKED) && !HAVE_DECL_PUTC_UNLOCKED
+# define putc_unlocked(x,y) putc (x,y)
+# endif
+#if defined(HAVE_DECL_PUTCHAR_UNLOCKED) && !HAVE_DECL_PUTCHAR_UNLOCKED
+# define putchar_unlocked(x) putchar (x)
+# endif
+
+#endif /* !_LIBC */
+
+#ifndef __set_errno
+#define __set_errno(e) (errno = (e))
+#endif
+
+#if defined GNULIB_ARGP_DISABLE_DIRNAME
+# define __argp_base_name(arg) arg
+#elif defined GNULIB_ARGP_EXTERN_BASENAME
+extern char *__argp_base_name(const char *arg);
+#else
+# include "dirname.h"
+# define __argp_base_name last_component
+#endif
+
+#if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
+# define __argp_short_program_name()    (program_invocation_short_name)
+#else
+extern char *__argp_short_program_name (void);
+#endif
diff --git a/gnu/argp-parse.c b/gnu/argp-parse.c
new file mode 100644 (file)
index 0000000..eaaad73
--- /dev/null
@@ -0,0 +1,954 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Hierarchial argument parsing, layered over getopt
+   Copyright (C) 1995-2000, 2002-2004, 2009-2010 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by Miles Bader <miles@gnu.ai.mit.edu>.
+
+   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/>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <alloca.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <limits.h>
+#include <getopt.h>
+#include <getopt_int.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+# undef dgettext
+# define dgettext(domain, msgid) \
+   INTUSE(__dcgettext) (domain, msgid, LC_MESSAGES)
+#else
+# include "gettext.h"
+#endif
+#define N_(msgid) msgid
+
+#include "argp.h"
+#include "argp-namefrob.h"
+
+#define alignof(type) offsetof (struct { char c; type x; }, x)
+#define alignto(n, d) ((((n) + (d) - 1) / (d)) * (d))
+
+/* Getopt return values.  */
+#define KEY_END (-1)            /* The end of the options.  */
+#define KEY_ARG 1               /* A non-option argument.  */
+#define KEY_ERR '?'             /* An error parsing the options.  */
+
+/* The meta-argument used to prevent any further arguments being interpreted
+   as options.  */
+#define QUOTE "--"
+
+/* The number of bits we steal in a long-option value for our own use.  */
+#define GROUP_BITS CHAR_BIT
+
+/* The number of bits available for the user value.  */
+#define USER_BITS ((sizeof ((struct option *)0)->val * CHAR_BIT) - GROUP_BITS)
+#define USER_MASK ((1 << USER_BITS) - 1)
+
+/* EZ alias for ARGP_ERR_UNKNOWN.  */
+#define EBADKEY ARGP_ERR_UNKNOWN
+\f
+/* Default options.  */
+
+/* When argp is given the --HANG switch, _ARGP_HANG is set and argp will sleep
+   for one second intervals, decrementing _ARGP_HANG until it's zero.  Thus
+   you can force the program to continue by attaching a debugger and setting
+   it to 0 yourself.  */
+static volatile int _argp_hang;
+
+#define OPT_PROGNAME    -2
+#define OPT_USAGE       -3
+#define OPT_HANG        -4
+
+static const struct argp_option argp_default_options[] =
+{
+  {"help",        '?',          0, 0,  N_("give this help list"), -1},
+  {"usage",       OPT_USAGE,    0, 0,  N_("give a short usage message"), 0},
+  {"program-name",OPT_PROGNAME,N_("NAME"), OPTION_HIDDEN, N_("set the program name"), 0},
+  {"HANG",        OPT_HANG,    N_("SECS"), OPTION_ARG_OPTIONAL | OPTION_HIDDEN,
+     N_("hang for SECS seconds (default 3600)"), 0},
+  {NULL, 0, 0, 0, NULL, 0}
+};
+
+static error_t
+argp_default_parser (int key, char *arg, struct argp_state *state)
+{
+  switch (key)
+    {
+    case '?':
+      __argp_state_help (state, state->out_stream, ARGP_HELP_STD_HELP);
+      break;
+    case OPT_USAGE:
+      __argp_state_help (state, state->out_stream,
+                         ARGP_HELP_USAGE | ARGP_HELP_EXIT_OK);
+      break;
+
+    case OPT_PROGNAME:          /* Set the program name.  */
+#if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_NAME
+      program_invocation_name = arg;
+#endif
+      /* [Note that some systems only have PROGRAM_INVOCATION_SHORT_NAME (aka
+         __PROGNAME), in which case, PROGRAM_INVOCATION_NAME is just defined
+         to be that, so we have to be a bit careful here.]  */
+
+      /* Update what we use for messages.  */
+      state->name = __argp_base_name (arg);
+
+#if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
+      program_invocation_short_name = state->name;
+#endif
+
+      if ((state->flags & (ARGP_PARSE_ARGV0 | ARGP_NO_ERRS))
+          == ARGP_PARSE_ARGV0)
+        /* Update what getopt uses too.  */
+        state->argv[0] = arg;
+
+      break;
+
+    case OPT_HANG:
+      _argp_hang = atoi (arg ? arg : "3600");
+      while (_argp_hang-- > 0)
+        __sleep (1);
+      break;
+
+    default:
+      return EBADKEY;
+    }
+  return 0;
+}
+
+static const struct argp argp_default_argp =
+  {argp_default_options, &argp_default_parser, NULL, NULL, NULL, NULL, "libc"};
+
+\f
+static const struct argp_option argp_version_options[] =
+{
+  {"version",     'V',          0, 0,  N_("print program version"), -1},
+  {NULL, 0, 0, 0, NULL, 0}
+};
+
+static error_t
+argp_version_parser (int key, char *arg, struct argp_state *state)
+{
+  switch (key)
+    {
+    case 'V':
+      if (argp_program_version_hook)
+        (*argp_program_version_hook) (state->out_stream, state);
+      else if (argp_program_version)
+        fprintf (state->out_stream, "%s\n", argp_program_version);
+      else
+        __argp_error (state, dgettext (state->root_argp->argp_domain,
+                                       "(PROGRAM ERROR) No version known!?"));
+      if (! (state->flags & ARGP_NO_EXIT))
+        exit (0);
+      break;
+    default:
+      return EBADKEY;
+    }
+  return 0;
+}
+
+static const struct argp argp_version_argp =
+  {argp_version_options, &argp_version_parser, NULL, NULL, NULL, NULL, "libc"};
+\f
+/* Returns the offset into the getopt long options array LONG_OPTIONS of a
+   long option with called NAME, or -1 if none is found.  Passing NULL as
+   NAME will return the number of options.  */
+static int
+find_long_option (struct option *long_options, const char *name)
+{
+  struct option *l = long_options;
+  while (l->name != NULL)
+    if (name != NULL && strcmp (l->name, name) == 0)
+      return l - long_options;
+    else
+      l++;
+  if (name == NULL)
+    return l - long_options;
+  else
+    return -1;
+}
+
+\f
+/* The state of a `group' during parsing.  Each group corresponds to a
+   particular argp structure from the tree of such descending from the top
+   level argp passed to argp_parse.  */
+struct group
+{
+  /* This group's parsing function.  */
+  argp_parser_t parser;
+
+  /* Which argp this group is from.  */
+  const struct argp *argp;
+
+  /* Points to the point in SHORT_OPTS corresponding to the end of the short
+     options for this group.  We use it to determine from which group a
+     particular short options is from.  */
+  char *short_end;
+
+  /* The number of non-option args sucessfully handled by this parser.  */
+  unsigned args_processed;
+
+  /* This group's parser's parent's group.  */
+  struct group *parent;
+  unsigned parent_index;        /* And the our position in the parent.   */
+
+  /* These fields are swapped into and out of the state structure when
+     calling this group's parser.  */
+  void *input, **child_inputs;
+  void *hook;
+};
+
+/* Call GROUP's parser with KEY and ARG, swapping any group-specific info
+   from STATE before calling, and back into state afterwards.  If GROUP has
+   no parser, EBADKEY is returned.  */
+static error_t
+group_parse (struct group *group, struct argp_state *state, int key, char *arg)
+{
+  if (group->parser)
+    {
+      error_t err;
+      state->hook = group->hook;
+      state->input = group->input;
+      state->child_inputs = group->child_inputs;
+      state->arg_num = group->args_processed;
+      err = (*group->parser)(key, arg, state);
+      group->hook = state->hook;
+      return err;
+    }
+  else
+    return EBADKEY;
+}
+\f
+struct parser
+{
+  const struct argp *argp;
+
+  /* SHORT_OPTS is the getopt short options string for the union of all the
+     groups of options.  */
+  char *short_opts;
+  /* LONG_OPTS is the array of getop long option structures for the union of
+     all the groups of options.  */
+  struct option *long_opts;
+  /* OPT_DATA is the getopt data used for the re-entrant getopt.  */
+  struct _getopt_data opt_data;
+
+  /* States of the various parsing groups.  */
+  struct group *groups;
+  /* The end of the GROUPS array.  */
+  struct group *egroup;
+  /* An vector containing storage for the CHILD_INPUTS field in all groups.  */
+  void **child_inputs;
+
+  /* True if we think using getopt is still useful; if false, then
+     remaining arguments are just passed verbatim with ARGP_KEY_ARG.  This is
+     cleared whenever getopt returns KEY_END, but may be set again if the user
+     moves the next argument pointer backwards.  */
+  int try_getopt;
+
+  /* State block supplied to parsing routines.  */
+  struct argp_state state;
+
+  /* Memory used by this parser.  */
+  void *storage;
+};
+\f
+/* The next usable entries in the various parser tables being filled in by
+   convert_options.  */
+struct parser_convert_state
+{
+  struct parser *parser;
+  char *short_end;
+  struct option *long_end;
+  void **child_inputs_end;
+};
+
+/* Converts all options in ARGP (which is put in GROUP) and ancestors
+   into getopt options stored in SHORT_OPTS and LONG_OPTS; SHORT_END and
+   CVT->LONG_END are the points at which new options are added.  Returns the
+   next unused group entry.  CVT holds state used during the conversion.  */
+static struct group *
+convert_options (const struct argp *argp,
+                 struct group *parent, unsigned parent_index,
+                 struct group *group, struct parser_convert_state *cvt)
+{
+  /* REAL is the most recent non-alias value of OPT.  */
+  const struct argp_option *real = argp->options;
+  const struct argp_child *children = argp->children;
+
+  if (real || argp->parser)
+    {
+      const struct argp_option *opt;
+
+      if (real)
+        for (opt = real; !__option_is_end (opt); opt++)
+          {
+            if (! (opt->flags & OPTION_ALIAS))
+              /* OPT isn't an alias, so we can use values from it.  */
+              real = opt;
+
+            if (! (real->flags & OPTION_DOC))
+              /* A real option (not just documentation).  */
+              {
+                if (__option_is_short (opt))
+                  /* OPT can be used as a short option.  */
+                  {
+                    *cvt->short_end++ = opt->key;
+                    if (real->arg)
+                      {
+                        *cvt->short_end++ = ':';
+                        if (real->flags & OPTION_ARG_OPTIONAL)
+                          *cvt->short_end++ = ':';
+                      }
+                    *cvt->short_end = '\0'; /* keep 0 terminated */
+                  }
+
+                if (opt->name
+                    && find_long_option (cvt->parser->long_opts, opt->name) < 0)
+                  /* OPT can be used as a long option.  */
+                  {
+                    cvt->long_end->name = opt->name;
+                    cvt->long_end->has_arg =
+                      (real->arg
+                       ? (real->flags & OPTION_ARG_OPTIONAL
+                          ? optional_argument
+                          : required_argument)
+                       : no_argument);
+                    cvt->long_end->flag = 0;
+                    /* we add a disambiguating code to all the user's
+                       values (which is removed before we actually call
+                       the function to parse the value); this means that
+                       the user loses use of the high 8 bits in all his
+                       values (the sign of the lower bits is preserved
+                       however)...  */
+                    cvt->long_end->val =
+                      ((opt->key ? opt->key : real->key) & USER_MASK)
+                      + (((group - cvt->parser->groups) + 1) << USER_BITS);
+
+                    /* Keep the LONG_OPTS list terminated.  */
+                    (++cvt->long_end)->name = NULL;
+                  }
+              }
+            }
+
+      group->parser = argp->parser;
+      group->argp = argp;
+      group->short_end = cvt->short_end;
+      group->args_processed = 0;
+      group->parent = parent;
+      group->parent_index = parent_index;
+      group->input = 0;
+      group->hook = 0;
+      group->child_inputs = 0;
+
+      if (children)
+        /* Assign GROUP's CHILD_INPUTS field some space from
+           CVT->child_inputs_end.*/
+        {
+          unsigned num_children = 0;
+          while (children[num_children].argp)
+            num_children++;
+          group->child_inputs = cvt->child_inputs_end;
+          cvt->child_inputs_end += num_children;
+        }
+
+      parent = group++;
+    }
+  else
+    parent = 0;
+
+  if (children)
+    {
+      unsigned index = 0;
+      while (children->argp)
+        group =
+          convert_options (children++->argp, parent, index++, group, cvt);
+    }
+
+  return group;
+}
+
+/* Find the merged set of getopt options, with keys appropiately prefixed. */
+static void
+parser_convert (struct parser *parser, const struct argp *argp, int flags)
+{
+  struct parser_convert_state cvt;
+
+  cvt.parser = parser;
+  cvt.short_end = parser->short_opts;
+  cvt.long_end = parser->long_opts;
+  cvt.child_inputs_end = parser->child_inputs;
+
+  if (flags & ARGP_IN_ORDER)
+    *cvt.short_end++ = '-';
+  else if (flags & ARGP_NO_ARGS)
+    *cvt.short_end++ = '+';
+  *cvt.short_end = '\0';
+
+  cvt.long_end->name = NULL;
+
+  parser->argp = argp;
+
+  if (argp)
+    parser->egroup = convert_options (argp, 0, 0, parser->groups, &cvt);
+  else
+    parser->egroup = parser->groups; /* No parsers at all! */
+}
+\f
+/* Lengths of various parser fields which we will allocated.  */
+struct parser_sizes
+{
+  size_t short_len;             /* Getopt short options string.  */
+  size_t long_len;              /* Getopt long options vector.  */
+  size_t num_groups;            /* Group structures we allocate.  */
+  size_t num_child_inputs;      /* Child input slots.  */
+};
+
+/* For ARGP, increments the NUM_GROUPS field in SZS by the total number of
+ argp structures descended from it, and the SHORT_LEN & LONG_LEN fields by
+ the maximum lengths of the resulting merged getopt short options string and
+ long-options array, respectively.  */
+static void
+calc_sizes (const struct argp *argp,  struct parser_sizes *szs)
+{
+  const struct argp_child *child = argp->children;
+  const struct argp_option *opt = argp->options;
+
+  if (opt || argp->parser)
+    {
+      szs->num_groups++;
+      if (opt)
+        {
+          int num_opts = 0;
+          while (!__option_is_end (opt++))
+            num_opts++;
+          szs->short_len += num_opts * 3; /* opt + up to 2 `:'s */
+          szs->long_len += num_opts;
+        }
+    }
+
+  if (child)
+    while (child->argp)
+      {
+        calc_sizes ((child++)->argp, szs);
+        szs->num_child_inputs++;
+      }
+}
+
+/* Initializes PARSER to parse ARGP in a manner described by FLAGS.  */
+static error_t
+parser_init (struct parser *parser, const struct argp *argp,
+             int argc, char **argv, int flags, void *input)
+{
+  error_t err = 0;
+  struct group *group;
+  struct parser_sizes szs;
+  struct _getopt_data opt_data = _GETOPT_DATA_INITIALIZER;
+  char *storage;
+  size_t glen, gsum;
+  size_t clen, csum;
+  size_t llen, lsum;
+  size_t slen, ssum;
+
+  szs.short_len = (flags & ARGP_NO_ARGS) ? 0 : 1;
+  szs.long_len = 0;
+  szs.num_groups = 0;
+  szs.num_child_inputs = 0;
+
+  if (argp)
+    calc_sizes (argp, &szs);
+
+  /* Lengths of the various bits of storage used by PARSER.  */
+  glen = (szs.num_groups + 1) * sizeof (struct group);
+  clen = szs.num_child_inputs * sizeof (void *);
+  llen = (szs.long_len + 1) * sizeof (struct option);
+  slen = szs.short_len + 1;
+
+  /* Sums of previous lengths, properly aligned.  There's no need to
+     align gsum, since struct group is aligned at least as strictly as
+     void * (since it contains a void * member).  And there's no need
+     to align lsum, since struct option is aligned at least as
+     strictly as char.  */
+  gsum = glen;
+  csum = alignto (gsum + clen, alignof (struct option));
+  lsum = csum + llen;
+  ssum = lsum + slen;
+
+  parser->storage = malloc (ssum);
+  if (! parser->storage)
+    return ENOMEM;
+
+  storage = parser->storage;
+  parser->groups = parser->storage;
+  parser->child_inputs = (void **) (storage + gsum);
+  parser->long_opts = (struct option *) (storage + csum);
+  parser->short_opts = storage + lsum;
+  parser->opt_data = opt_data;
+
+  memset (parser->child_inputs, 0, clen);
+  parser_convert (parser, argp, flags);
+
+  memset (&parser->state, 0, sizeof (struct argp_state));
+  parser->state.root_argp = parser->argp;
+  parser->state.argc = argc;
+  parser->state.argv = argv;
+  parser->state.flags = flags;
+  parser->state.err_stream = stderr;
+  parser->state.out_stream = stdout;
+  parser->state.next = 0;       /* Tell getopt to initialize.  */
+  parser->state.pstate = parser;
+
+  parser->try_getopt = 1;
+
+  /* Call each parser for the first time, giving it a chance to propagate
+     values to child parsers.  */
+  if (parser->groups < parser->egroup)
+    parser->groups->input = input;
+  for (group = parser->groups;
+       group < parser->egroup && (!err || err == EBADKEY);
+       group++)
+    {
+      if (group->parent)
+        /* If a child parser, get the initial input value from the parent. */
+        group->input = group->parent->child_inputs[group->parent_index];
+
+      if (!group->parser
+          && group->argp->children && group->argp->children->argp)
+        /* For the special case where no parsing function is supplied for an
+           argp, propagate its input to its first child, if any (this just
+           makes very simple wrapper argps more convenient).  */
+        group->child_inputs[0] = group->input;
+
+      err = group_parse (group, &parser->state, ARGP_KEY_INIT, 0);
+    }
+  if (err == EBADKEY)
+    err = 0;                    /* Some parser didn't understand.  */
+
+  if (err)
+    return err;
+
+  if (parser->state.flags & ARGP_NO_ERRS)
+    {
+      parser->opt_data.opterr = 0;
+      if (parser->state.flags & ARGP_PARSE_ARGV0)
+        /* getopt always skips ARGV[0], so we have to fake it out.  As long
+           as OPTERR is 0, then it shouldn't actually try to access it.  */
+        parser->state.argv--, parser->state.argc++;
+    }
+  else
+    parser->opt_data.opterr = 1;        /* Print error messages.  */
+
+  if (parser->state.argv == argv && argv[0])
+    /* There's an argv[0]; use it for messages.  */
+    parser->state.name = __argp_base_name (argv[0]);
+  else
+    parser->state.name = __argp_short_program_name ();
+
+  return 0;
+}
+\f
+/* Free any storage consumed by PARSER (but not PARSER itself).  */
+static error_t
+parser_finalize (struct parser *parser,
+                 error_t err, int arg_ebadkey, int *end_index)
+{
+  struct group *group;
+
+  if (err == EBADKEY && arg_ebadkey)
+    /* Suppress errors generated by unparsed arguments.  */
+    err = 0;
+
+  if (! err)
+    {
+      if (parser->state.next == parser->state.argc)
+        /* We successfully parsed all arguments!  Call all the parsers again,
+           just a few more times... */
+        {
+          for (group = parser->groups;
+               group < parser->egroup && (!err || err==EBADKEY);
+               group++)
+            if (group->args_processed == 0)
+              err = group_parse (group, &parser->state, ARGP_KEY_NO_ARGS, 0);
+          for (group = parser->egroup - 1;
+               group >= parser->groups && (!err || err==EBADKEY);
+               group--)
+            err = group_parse (group, &parser->state, ARGP_KEY_END, 0);
+
+          if (err == EBADKEY)
+            err = 0;            /* Some parser didn't understand.  */
+
+          /* Tell the user that all arguments are parsed.  */
+          if (end_index)
+            *end_index = parser->state.next;
+        }
+      else if (end_index)
+        /* Return any remaining arguments to the user.  */
+        *end_index = parser->state.next;
+      else
+        /* No way to return the remaining arguments, they must be bogus. */
+        {
+          if (!(parser->state.flags & ARGP_NO_ERRS)
+              && parser->state.err_stream)
+            fprintf (parser->state.err_stream,
+                     dgettext (parser->argp->argp_domain,
+                               "%s: Too many arguments\n"),
+                     parser->state.name);
+          err = EBADKEY;
+        }
+    }
+
+  /* Okay, we're all done, with either an error or success; call the parsers
+     to indicate which one.  */
+
+  if (err)
+    {
+      /* Maybe print an error message.  */
+      if (err == EBADKEY)
+        /* An appropriate message describing what the error was should have
+           been printed earlier.  */
+        __argp_state_help (&parser->state, parser->state.err_stream,
+                           ARGP_HELP_STD_ERR);
+
+      /* Since we didn't exit, give each parser an error indication.  */
+      for (group = parser->groups; group < parser->egroup; group++)
+        group_parse (group, &parser->state, ARGP_KEY_ERROR, 0);
+    }
+  else
+    /* Notify parsers of success, and propagate back values from parsers.  */
+    {
+      /* We pass over the groups in reverse order so that child groups are
+         given a chance to do there processing before passing back a value to
+         the parent.  */
+      for (group = parser->egroup - 1
+           ; group >= parser->groups && (!err || err == EBADKEY)
+           ; group--)
+        err = group_parse (group, &parser->state, ARGP_KEY_SUCCESS, 0);
+      if (err == EBADKEY)
+        err = 0;                /* Some parser didn't understand.  */
+    }
+
+  /* Call parsers once more, to do any final cleanup.  Errors are ignored.  */
+  for (group = parser->egroup - 1; group >= parser->groups; group--)
+    group_parse (group, &parser->state, ARGP_KEY_FINI, 0);
+
+  if (err == EBADKEY)
+    err = EINVAL;
+
+  free (parser->storage);
+
+  return err;
+}
+\f
+/* Call the user parsers to parse the non-option argument VAL, at the current
+   position, returning any error.  The state NEXT pointer is assumed to have
+   been adjusted (by getopt) to point after this argument; this function will
+   adjust it correctly to reflect however many args actually end up being
+   consumed.  */
+static error_t
+parser_parse_arg (struct parser *parser, char *val)
+{
+  /* Save the starting value of NEXT, first adjusting it so that the arg
+     we're parsing is again the front of the arg vector.  */
+  int index = --parser->state.next;
+  error_t err = EBADKEY;
+  struct group *group;
+  int key = 0;                  /* Which of ARGP_KEY_ARG[S] we used.  */
+
+  /* Try to parse the argument in each parser.  */
+  for (group = parser->groups
+       ; group < parser->egroup && err == EBADKEY
+       ; group++)
+    {
+      parser->state.next++;     /* For ARGP_KEY_ARG, consume the arg.  */
+      key = ARGP_KEY_ARG;
+      err = group_parse (group, &parser->state, key, val);
+
+      if (err == EBADKEY)
+        /* This parser doesn't like ARGP_KEY_ARG; try ARGP_KEY_ARGS instead. */
+        {
+          parser->state.next--; /* For ARGP_KEY_ARGS, put back the arg.  */
+          key = ARGP_KEY_ARGS;
+          err = group_parse (group, &parser->state, key, 0);
+        }
+    }
+
+  if (! err)
+    {
+      if (key == ARGP_KEY_ARGS)
+        /* The default for ARGP_KEY_ARGS is to assume that if NEXT isn't
+           changed by the user, *all* arguments should be considered
+           consumed.  */
+        parser->state.next = parser->state.argc;
+
+      if (parser->state.next > index)
+        /* Remember that we successfully processed a non-option
+           argument -- but only if the user hasn't gotten tricky and set
+           the clock back.  */
+        (--group)->args_processed += (parser->state.next - index);
+      else
+        /* The user wants to reparse some args, give getopt another try.  */
+        parser->try_getopt = 1;
+    }
+
+  return err;
+}
+\f
+/* Call the user parsers to parse the option OPT, with argument VAL, at the
+   current position, returning any error.  */
+static error_t
+parser_parse_opt (struct parser *parser, int opt, char *val)
+{
+  /* The group key encoded in the high bits; 0 for short opts or
+     group_number + 1 for long opts.  */
+  int group_key = opt >> USER_BITS;
+  error_t err = EBADKEY;
+
+  if (group_key == 0)
+    /* A short option.  By comparing OPT's position in SHORT_OPTS to the
+       various starting positions in each group's SHORT_END field, we can
+       determine which group OPT came from.  */
+    {
+      struct group *group;
+      char *short_index = strchr (parser->short_opts, opt);
+
+      if (short_index)
+        for (group = parser->groups; group < parser->egroup; group++)
+          if (group->short_end > short_index)
+            {
+              err = group_parse (group, &parser->state, opt,
+                                 parser->opt_data.optarg);
+              break;
+            }
+    }
+  else
+    /* A long option.  We use shifts instead of masking for extracting
+       the user value in order to preserve the sign.  */
+    err =
+      group_parse (&parser->groups[group_key - 1], &parser->state,
+                   (opt << GROUP_BITS) >> GROUP_BITS,
+                   parser->opt_data.optarg);
+
+  if (err == EBADKEY)
+    /* At least currently, an option not recognized is an error in the
+       parser, because we pre-compute which parser is supposed to deal
+       with each option.  */
+    {
+      static const char bad_key_err[] =
+        N_("(PROGRAM ERROR) Option should have been recognized!?");
+      if (group_key == 0)
+        __argp_error (&parser->state, "-%c: %s", opt,
+                      dgettext (parser->argp->argp_domain, bad_key_err));
+      else
+        {
+          struct option *long_opt = parser->long_opts;
+          while (long_opt->val != opt && long_opt->name)
+            long_opt++;
+          __argp_error (&parser->state, "--%s: %s",
+                        long_opt->name ? long_opt->name : "???",
+                        dgettext (parser->argp->argp_domain, bad_key_err));
+        }
+    }
+
+  return err;
+}
+\f
+/* Parse the next argument in PARSER (as indicated by PARSER->state.next).
+   Any error from the parsers is returned, and *ARGP_EBADKEY indicates
+   whether a value of EBADKEY is due to an unrecognized argument (which is
+   generally not fatal).  */
+static error_t
+parser_parse_next (struct parser *parser, int *arg_ebadkey)
+{
+  int opt;
+  error_t err = 0;
+
+  if (parser->state.quoted && parser->state.next < parser->state.quoted)
+    /* The next argument pointer has been moved to before the quoted
+       region, so pretend we never saw the quoting `--', and give getopt
+       another chance.  If the user hasn't removed it, getopt will just
+       process it again.  */
+    parser->state.quoted = 0;
+
+  if (parser->try_getopt && !parser->state.quoted)
+    /* Give getopt a chance to parse this.  */
+    {
+      /* Put it back in OPTIND for getopt.  */
+      parser->opt_data.optind = parser->state.next;
+      /* Distinguish KEY_ERR from a real option.  */
+      parser->opt_data.optopt = KEY_END;
+      if (parser->state.flags & ARGP_LONG_ONLY)
+        opt = _getopt_long_only_r (parser->state.argc, parser->state.argv,
+                                   parser->short_opts, parser->long_opts, 0,
+                                   &parser->opt_data);
+      else
+        opt = _getopt_long_r (parser->state.argc, parser->state.argv,
+                              parser->short_opts, parser->long_opts, 0,
+                              &parser->opt_data);
+      /* And see what getopt did.  */
+      parser->state.next = parser->opt_data.optind;
+
+      if (opt == KEY_END)
+        /* Getopt says there are no more options, so stop using
+           getopt; we'll continue if necessary on our own.  */
+        {
+          parser->try_getopt = 0;
+          if (parser->state.next > 1
+              && strcmp (parser->state.argv[parser->state.next - 1], QUOTE)
+                   == 0)
+            /* Not only is this the end of the options, but it's a
+               `quoted' region, which may have args that *look* like
+               options, so we definitely shouldn't try to use getopt past
+               here, whatever happens.  */
+            parser->state.quoted = parser->state.next;
+        }
+      else if (opt == KEY_ERR && parser->opt_data.optopt != KEY_END)
+        /* KEY_ERR can have the same value as a valid user short
+           option, but in the case of a real error, getopt sets OPTOPT
+           to the offending character, which can never be KEY_END.  */
+        {
+          *arg_ebadkey = 0;
+          return EBADKEY;
+        }
+    }
+  else
+    opt = KEY_END;
+
+  if (opt == KEY_END)
+    {
+      /* We're past what getopt considers the options.  */
+      if (parser->state.next >= parser->state.argc
+          || (parser->state.flags & ARGP_NO_ARGS))
+        /* Indicate that we're done.  */
+        {
+          *arg_ebadkey = 1;
+          return EBADKEY;
+        }
+      else
+        /* A non-option arg; simulate what getopt might have done.  */
+        {
+          opt = KEY_ARG;
+          parser->opt_data.optarg = parser->state.argv[parser->state.next++];
+        }
+    }
+
+  if (opt == KEY_ARG)
+    /* A non-option argument; try each parser in turn.  */
+    err = parser_parse_arg (parser, parser->opt_data.optarg);
+  else
+    err = parser_parse_opt (parser, opt, parser->opt_data.optarg);
+
+  if (err == EBADKEY)
+    *arg_ebadkey = (opt == KEY_END || opt == KEY_ARG);
+
+  return err;
+}
+\f
+/* Parse the options strings in ARGC & ARGV according to the argp in ARGP.
+   FLAGS is one of the ARGP_ flags above.  If END_INDEX is non-NULL, the
+   index in ARGV of the first unparsed option is returned in it.  If an
+   unknown option is present, EINVAL is returned; if some parser routine
+   returned a non-zero value, it is returned; otherwise 0 is returned.  */
+error_t
+__argp_parse (const struct argp *argp, int argc, char **argv, unsigned flags,
+              int *end_index, void *input)
+{
+  error_t err;
+  struct parser parser;
+
+  /* If true, then err == EBADKEY is a result of a non-option argument failing
+     to be parsed (which in some cases isn't actually an error).  */
+  int arg_ebadkey = 0;
+
+#ifndef _LIBC
+  if (!(flags & ARGP_PARSE_ARGV0))
+    {
+#ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME
+      if (!program_invocation_name)
+        program_invocation_name = argv[0];
+#endif
+#ifdef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
+      if (!program_invocation_short_name)
+        program_invocation_short_name = __argp_base_name (argv[0]);
+#endif
+    }
+#endif
+
+  if (! (flags & ARGP_NO_HELP))
+    /* Add our own options.  */
+    {
+      struct argp_child *child = alloca (4 * sizeof (struct argp_child));
+      struct argp *top_argp = alloca (sizeof (struct argp));
+
+      /* TOP_ARGP has no options, it just serves to group the user & default
+         argps.  */
+      memset (top_argp, 0, sizeof (*top_argp));
+      top_argp->children = child;
+
+      memset (child, 0, 4 * sizeof (struct argp_child));
+
+      if (argp)
+        (child++)->argp = argp;
+      (child++)->argp = &argp_default_argp;
+      if (argp_program_version || argp_program_version_hook)
+        (child++)->argp = &argp_version_argp;
+      child->argp = 0;
+
+      argp = top_argp;
+    }
+
+  /* Construct a parser for these arguments.  */
+  err = parser_init (&parser, argp, argc, argv, flags, input);
+
+  if (! err)
+    /* Parse! */
+    {
+      while (! err)
+        err = parser_parse_next (&parser, &arg_ebadkey);
+      err = parser_finalize (&parser, err, arg_ebadkey, end_index);
+    }
+
+  return err;
+}
+#ifdef weak_alias
+weak_alias (__argp_parse, argp_parse)
+#endif
+\f
+/* Return the input field for ARGP in the parser corresponding to STATE; used
+   by the help routines.  */
+void *
+__argp_input (const struct argp *argp, const struct argp_state *state)
+{
+  if (state)
+    {
+      struct group *group;
+      struct parser *parser = state->pstate;
+
+      for (group = parser->groups; group < parser->egroup; group++)
+        if (group->argp == argp)
+          return group->input;
+    }
+
+  return 0;
+}
+#ifdef weak_alias
+weak_alias (__argp_input, _argp_input)
+#endif
diff --git a/gnu/argp-pin.c b/gnu/argp-pin.c
new file mode 100644 (file)
index 0000000..500f920
--- /dev/null
@@ -0,0 +1,29 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Full and short program names for argp module
+   Copyright (C) 2005, 2009, 2010 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/>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifndef HAVE_PROGRAM_INVOCATION_SHORT_NAME
+char *program_invocation_short_name = 0;
+#endif
+#ifndef HAVE_PROGRAM_INVOCATION_NAME
+char *program_invocation_name = 0;
+#endif
+
diff --git a/gnu/argp-pv.c b/gnu/argp-pv.c
new file mode 100644 (file)
index 0000000..5a8d45d
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Default definition for ARGP_PROGRAM_VERSION.
+   Copyright (C) 1996, 1997, 1999, 2006, 2009, 2010 Free Software Foundation,
+   Inc.
+   This file is part of the GNU C Library.
+   Written by Miles Bader <miles@gnu.ai.mit.edu>.
+
+   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 set by the user program to a non-zero value, then a default option
+   --version is added (unless the ARGP_NO_HELP flag is used), which will
+   print this string followed by a newline and exit (unless the
+   ARGP_NO_EXIT flag is used).  Overridden by ARGP_PROGRAM_VERSION_HOOK.  */
+const char *argp_program_version
+/* This variable should be zero-initialized.  On most systems, putting it into
+   BSS is sufficient.  Not so on MacOS X 10.3 and 10.4, see
+   <http://lists.gnu.org/archive/html/bug-gnulib/2009-01/msg00329.html>
+   <http://lists.gnu.org/archive/html/bug-gnulib/2009-08/msg00096.html>.  */
+#if defined __ELF__
+  /* On ELF systems, variables in BSS behave well.  */
+#else
+  = (const char *) 0
+#endif
+  ;
diff --git a/gnu/argp-pvh.c b/gnu/argp-pvh.c
new file mode 100644 (file)
index 0000000..aa7510a
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Default definition for ARGP_PROGRAM_VERSION_HOOK.
+   Copyright (C) 1996, 1997, 1999, 2004, 2009, 2010 Free Software Foundation,
+   Inc.
+   This file is part of the GNU C Library.
+   Written by Miles Bader <miles@gnu.ai.mit.edu>.
+
+   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/>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "argp.h"
+
+/* If set by the user program to a non-zero value, then a default option
+   --version is added (unless the ARGP_NO_HELP flag is used), which calls
+   this function with a stream to print the version to and a pointer to the
+   current parsing state, and then exits (unless the ARGP_NO_EXIT flag is
+   used).  This variable takes precedent over ARGP_PROGRAM_VERSION.  */
+void (*argp_program_version_hook) (FILE *stream, struct argp_state *state) = NULL;
diff --git a/gnu/argp-version-etc.c b/gnu/argp-version-etc.c
new file mode 100644 (file)
index 0000000..4913bf5
--- /dev/null
@@ -0,0 +1,40 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Version hook for Argp.
+   Copyright (C) 2009, 2010 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>
+#include <version-etc.h>
+#include <argp.h>
+#include <argp-version-etc.h>
+
+static const char *program_canonical_name;
+static const char * const *program_authors;
+
+static void
+version_etc_hook (FILE *stream, struct argp_state *state)
+{
+  version_etc_ar (stream, program_canonical_name, PACKAGE_NAME, VERSION,
+                  program_authors);
+}
+
+void
+argp_version_setup (const char *name, const char * const *authors)
+{
+  argp_program_version_hook = version_etc_hook;
+  program_canonical_name = name;
+  program_authors = authors;
+}
diff --git a/gnu/argp-version-etc.h b/gnu/argp-version-etc.h
new file mode 100644 (file)
index 0000000..23b6e7a
--- /dev/null
@@ -0,0 +1,42 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Version hook for Argp.
+   Copyright (C) 2009, 2010 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 _ARGP_VERSION_ETC_H
+#define _ARGP_VERSION_ETC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Setup standard display of the version information for the `--version'
+   option.  NAME is the canonical program name, and AUTHORS is a NULL-
+   terminated array of author names. At least one author name must be
+   given.
+
+   If NAME is NULL, the package name (as given by the PACKAGE macro)
+   is asumed to be the name of the program.
+
+   This function is intended to be called before argp_parse().
+*/
+extern void argp_version_setup (const char *name, const char * const *authors);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ARGP_VERSION_ETC_H */
diff --git a/gnu/argp-xinl.c b/gnu/argp-xinl.c
new file mode 100644 (file)
index 0000000..909e1af
--- /dev/null
@@ -0,0 +1,44 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Real definitions for extern inline functions in argp.h
+   Copyright (C) 1997, 1998, 2004, 2009, 2010 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by Miles Bader <miles@gnu.ai.mit.edu>.
+
+   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/>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if defined _LIBC || defined HAVE_FEATURES_H
+# include <features.h>
+#endif
+
+#ifndef __USE_EXTERN_INLINES
+# define __USE_EXTERN_INLINES   1
+#endif
+#define ARGP_EI
+#undef __OPTIMIZE__
+#define __OPTIMIZE__ 1
+#include "argp.h"
+
+/* Add weak aliases.  */
+#if _LIBC - 0 && defined (weak_alias)
+
+weak_alias (__argp_usage, argp_usage)
+weak_alias (__option_is_short, _option_is_short)
+weak_alias (__option_is_end, _option_is_end)
+
+#endif
diff --git a/gnu/argp.h b/gnu/argp.h
new file mode 100644 (file)
index 0000000..04e2081
--- /dev/null
@@ -0,0 +1,647 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Hierarchial argument parsing, layered over getopt.
+   Copyright (C) 1995-1999, 2003-2010 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by Miles Bader <miles@gnu.ai.mit.edu>.
+
+   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 _ARGP_H
+#define _ARGP_H
+
+#include <stdio.h>
+#include <ctype.h>
+#include <getopt.h>
+#include <limits.h>
+
+#define __need_error_t
+#include <errno.h>
+
+#ifndef __THROW
+# define __THROW
+#endif
+#ifndef __NTH
+# define __NTH(fct) fct __THROW
+#endif
+
+#ifndef __attribute__
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The __-protected variants of the attributes 'format' and 'printf' are
+   accepted by gcc versions 2.6.4 (effectively 2.7) and later.
+   We enable __attribute__ only if these are supported too, because
+   gnulib and libintl do '#define printf __printf__' when they override
+   the 'printf' function.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+#  define __attribute__(Spec)   /* empty */
+# endif
+#endif
+
+/* GCC 2.95 and later have "__restrict"; C99 compilers have
+   "restrict", and "configure" may have defined "restrict".
+   Other compilers use __restrict, __restrict__, and _Restrict, and
+   'configure' might #define 'restrict' to those words.  */
+#ifndef __restrict
+# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
+#  if 199901L <= __STDC_VERSION__
+#   define __restrict restrict
+#  else
+#   define __restrict
+#  endif
+# endif
+#endif
+
+#ifndef __error_t_defined
+typedef int error_t;
+# define __error_t_defined
+#endif
+\f
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+/* A description of a particular option.  A pointer to an array of
+   these is passed in the OPTIONS field of an argp structure.  Each option
+   entry can correspond to one long option and/or one short option; more
+   names for the same option can be added by following an entry in an option
+   array with options having the OPTION_ALIAS flag set.  */
+struct argp_option
+{
+  /* The long option name.  For more than one name for the same option, you
+     can use following options with the OPTION_ALIAS flag set.  */
+  const char *name;
+
+  /* What key is returned for this option.  If > 0 and printable, then it's
+     also accepted as a short option.  */
+  int key;
+
+  /* If non-NULL, this is the name of the argument associated with this
+     option, which is required unless the OPTION_ARG_OPTIONAL flag is set. */
+  const char *arg;
+
+  /* OPTION_ flags.  */
+  int flags;
+
+  /* The doc string for this option.  If both NAME and KEY are 0, This string
+     will be printed outdented from the normal option column, making it
+     useful as a group header (it will be the first thing printed in its
+     group); in this usage, it's conventional to end the string with a `:'.
+
+     Write the initial value as N_("TEXT") if you want xgettext to collect
+     it into a POT file.  */
+  const char *doc;
+
+  /* The group this option is in.  In a long help message, options are sorted
+     alphabetically within each group, and the groups presented in the order
+     0, 1, 2, ..., n, -m, ..., -2, -1.  Every entry in an options array with
+     if this field 0 will inherit the group number of the previous entry, or
+     zero if it's the first one, unless its a group header (NAME and KEY both
+     0), in which case, the previous entry + 1 is the default.  Automagic
+     options such as --help are put into group -1.  */
+  int group;
+};
+
+/* The argument associated with this option is optional.  */
+#define OPTION_ARG_OPTIONAL     0x1
+
+/* This option isn't displayed in any help messages.  */
+#define OPTION_HIDDEN           0x2
+
+/* This option is an alias for the closest previous non-alias option.  This
+   means that it will be displayed in the same help entry, and will inherit
+   fields other than NAME and KEY from the aliased option.  */
+#define OPTION_ALIAS            0x4
+
+/* This option isn't actually an option (and so should be ignored by the
+   actual option parser), but rather an arbitrary piece of documentation that
+   should be displayed in much the same manner as the options.  If this flag
+   is set, then the option NAME field is displayed unmodified (e.g., no `--'
+   prefix is added) at the left-margin (where a *short* option would normally
+   be displayed), and the documentation string in the normal place. The NAME
+   field will be translated using gettext, unless OPTION_NO_TRANS is set (see
+   below). For purposes of sorting, any leading whitespace and punctuation is
+   ignored, except that if the first non-whitespace character is not `-', this
+   entry is displayed after all options (and OPTION_DOC entries with a leading
+   `-') in the same group.  */
+#define OPTION_DOC              0x8
+
+/* This option shouldn't be included in `long' usage messages (but is still
+   included in help messages).  This is mainly intended for options that are
+   completely documented in an argp's ARGS_DOC field, in which case including
+   the option in the generic usage list would be redundant.  For instance,
+   if ARGS_DOC is "FOO BAR\n-x BLAH", and the `-x' option's purpose is to
+   distinguish these two cases, -x should probably be marked
+   OPTION_NO_USAGE.  */
+#define OPTION_NO_USAGE         0x10
+
+/* Valid only in conjunction with OPTION_DOC. This option disables translation
+   of option name. */
+#define OPTION_NO_TRANS         0x20
+
+\f
+struct argp;                    /* fwd declare this type */
+struct argp_state;              /* " */
+struct argp_child;              /* " */
+
+/* The type of a pointer to an argp parsing function.  */
+typedef error_t (*argp_parser_t) (int key, char *arg,
+                                  struct argp_state *state);
+
+/* What to return for unrecognized keys.  For special ARGP_KEY_ keys, such
+   returns will simply be ignored.  For user keys, this error will be turned
+   into EINVAL (if the call to argp_parse is such that errors are propagated
+   back to the user instead of exiting); returning EINVAL itself would result
+   in an immediate stop to parsing in *all* cases.  */
+#define ARGP_ERR_UNKNOWN        E2BIG /* Hurd should never need E2BIG.  XXX */
+
+/* Special values for the KEY argument to an argument parsing function.
+   ARGP_ERR_UNKNOWN should be returned if they aren't understood.
+
+   The sequence of keys to a parsing function is either (where each
+   uppercased word should be prefixed by `ARGP_KEY_' and opt is a user key):
+
+       INIT opt... NO_ARGS END SUCCESS  -- No non-option arguments at all
+   or  INIT (opt | ARG)... END SUCCESS  -- All non-option args parsed
+   or  INIT (opt | ARG)... SUCCESS      -- Some non-option arg unrecognized
+
+   The third case is where every parser returned ARGP_KEY_UNKNOWN for an
+   argument, in which case parsing stops at that argument (returning the
+   unparsed arguments to the caller of argp_parse if requested, or stopping
+   with an error message if not).
+
+   If an error occurs (either detected by argp, or because the parsing
+   function returned an error value), then the parser is called with
+   ARGP_KEY_ERROR, and no further calls are made.  */
+
+/* This is not an option at all, but rather a command line argument.  If a
+   parser receiving this key returns success, the fact is recorded, and the
+   ARGP_KEY_NO_ARGS case won't be used.  HOWEVER, if while processing the
+   argument, a parser function decrements the NEXT field of the state it's
+   passed, the option won't be considered processed; this is to allow you to
+   actually modify the argument (perhaps into an option), and have it
+   processed again.  */
+#define ARGP_KEY_ARG            0
+/* There are remaining arguments not parsed by any parser, which may be found
+   starting at (STATE->argv + STATE->next).  If success is returned, but
+   STATE->next left untouched, it's assumed that all arguments were consume,
+   otherwise, the parser should adjust STATE->next to reflect any arguments
+   consumed.  */
+#define ARGP_KEY_ARGS           0x1000006
+/* There are no more command line arguments at all.  */
+#define ARGP_KEY_END            0x1000001
+/* Because it's common to want to do some special processing if there aren't
+   any non-option args, user parsers are called with this key if they didn't
+   successfully process any non-option arguments.  Called just before
+   ARGP_KEY_END (where more general validity checks on previously parsed
+   arguments can take place).  */
+#define ARGP_KEY_NO_ARGS        0x1000002
+/* Passed in before any parsing is done.  Afterwards, the values of each
+   element of the CHILD_INPUT field, if any, in the state structure is
+   copied to each child's state to be the initial value of the INPUT field.  */
+#define ARGP_KEY_INIT           0x1000003
+/* Use after all other keys, including SUCCESS & END.  */
+#define ARGP_KEY_FINI           0x1000007
+/* Passed in when parsing has successfully been completed (even if there are
+   still arguments remaining).  */
+#define ARGP_KEY_SUCCESS        0x1000004
+/* Passed in if an error occurs.  */
+#define ARGP_KEY_ERROR          0x1000005
+
+/* An argp structure contains a set of options declarations, a function to
+   deal with parsing one, documentation string, a possible vector of child
+   argp's, and perhaps a function to filter help output.  When actually
+   parsing options, getopt is called with the union of all the argp
+   structures chained together through their CHILD pointers, with conflicts
+   being resolved in favor of the first occurrence in the chain.  */
+struct argp
+{
+  /* An array of argp_option structures, terminated by an entry with both
+     NAME and KEY having a value of 0.  */
+  const struct argp_option *options;
+
+  /* What to do with an option from this structure.  KEY is the key
+     associated with the option, and ARG is any associated argument (NULL if
+     none was supplied).  If KEY isn't understood, ARGP_ERR_UNKNOWN should be
+     returned.  If a non-zero, non-ARGP_ERR_UNKNOWN value is returned, then
+     parsing is stopped immediately, and that value is returned from
+     argp_parse().  For special (non-user-supplied) values of KEY, see the
+     ARGP_KEY_ definitions below.  */
+  argp_parser_t parser;
+
+  /* A string describing what other arguments are wanted by this program.  It
+     is only used by argp_usage to print the `Usage:' message.  If it
+     contains newlines, the strings separated by them are considered
+     alternative usage patterns, and printed on separate lines (lines after
+     the first are prefix by `  or: ' instead of `Usage:').  */
+  const char *args_doc;
+
+  /* If non-NULL, a string containing extra text to be printed before and
+     after the options in a long help message (separated by a vertical tab
+     `\v' character).
+     Write the initial value as N_("BEFORE-TEXT") "\v" N_("AFTER-TEXT") if
+     you want xgettext to collect the two pieces of text into a POT file.  */
+  const char *doc;
+
+  /* A vector of argp_children structures, terminated by a member with a 0
+     argp field, pointing to child argps should be parsed with this one.  Any
+     conflicts are resolved in favor of this argp, or early argps in the
+     CHILDREN list.  This field is useful if you use libraries that supply
+     their own argp structure, which you want to use in conjunction with your
+     own.  */
+  const struct argp_child *children;
+
+  /* If non-zero, this should be a function to filter the output of help
+     messages.  KEY is either a key from an option, in which case TEXT is
+     that option's help text, or a special key from the ARGP_KEY_HELP_
+     defines, below, describing which other help text TEXT is.  The function
+     should return either TEXT, if it should be used as-is, a replacement
+     string, which should be malloced, and will be freed by argp, or NULL,
+     meaning `print nothing'.  The value for TEXT is *after* any translation
+     has been done, so if any of the replacement text also needs translation,
+     that should be done by the filter function.  INPUT is either the input
+     supplied to argp_parse, or NULL, if argp_help was called directly.  */
+  char *(*help_filter) (int __key, const char *__text, void *__input);
+
+  /* If non-zero the strings used in the argp library are translated using
+     the domain described by this string.  Otherwise the currently installed
+     default domain is used.  */
+  const char *argp_domain;
+};
+
+/* Possible KEY arguments to a help filter function.  */
+#define ARGP_KEY_HELP_PRE_DOC   0x2000001 /* Help text preceeding options. */
+#define ARGP_KEY_HELP_POST_DOC  0x2000002 /* Help text following options. */
+#define ARGP_KEY_HELP_HEADER    0x2000003 /* Option header string. */
+#define ARGP_KEY_HELP_EXTRA     0x2000004 /* After all other documentation;
+                                             TEXT is NULL for this key.  */
+/* Explanatory note emitted when duplicate option arguments have been
+   suppressed.  */
+#define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005
+#define ARGP_KEY_HELP_ARGS_DOC  0x2000006 /* Argument doc string.  */
+\f
+/* When an argp has a non-zero CHILDREN field, it should point to a vector of
+   argp_child structures, each of which describes a subsidiary argp.  */
+struct argp_child
+{
+  /* The child parser.  */
+  const struct argp *argp;
+
+  /* Flags for this child.  */
+  int flags;
+
+  /* If non-zero, an optional header to be printed in help output before the
+     child options.  As a side-effect, a non-zero value forces the child
+     options to be grouped together; to achieve this effect without actually
+     printing a header string, use a value of "".  */
+  const char *header;
+
+  /* Where to group the child options relative to the other (`consolidated')
+     options in the parent argp; the values are the same as the GROUP field
+     in argp_option structs, but all child-groupings follow parent options at
+     a particular group level.  If both this field and HEADER are zero, then
+     they aren't grouped at all, but rather merged with the parent options
+     (merging the child's grouping levels with the parents).  */
+  int group;
+};
+\f
+/* Parsing state.  This is provided to parsing functions called by argp,
+   which may examine and, as noted, modify fields.  */
+struct argp_state
+{
+  /* The top level ARGP being parsed.  */
+  const struct argp *root_argp;
+
+  /* The argument vector being parsed.  May be modified.  */
+  int argc;
+  char **argv;
+
+  /* The index in ARGV of the next arg that to be parsed.  May be modified. */
+  int next;
+
+  /* The flags supplied to argp_parse.  May be modified.  */
+  unsigned flags;
+
+  /* While calling a parsing function with a key of ARGP_KEY_ARG, this is the
+     number of the current arg, starting at zero, and incremented after each
+     such call returns.  At all other times, this is the number of such
+     arguments that have been processed.  */
+  unsigned arg_num;
+
+  /* If non-zero, the index in ARGV of the first argument following a special
+     `--' argument (which prevents anything following being interpreted as an
+     option).  Only set once argument parsing has proceeded past this point. */
+  int quoted;
+
+  /* An arbitrary pointer passed in from the user.  */
+  void *input;
+  /* Values to pass to child parsers.  This vector will be the same length as
+     the number of children for the current parser.  */
+  void **child_inputs;
+
+  /* For the parser's use.  Initialized to 0.  */
+  void *hook;
+
+  /* The name used when printing messages.  This is initialized to ARGV[0],
+     or PROGRAM_INVOCATION_NAME if that is unavailable.  */
+  char *name;
+
+  /* Streams used when argp prints something.  */
+  FILE *err_stream;             /* For errors; initialized to stderr. */
+  FILE *out_stream;             /* For information; initialized to stdout. */
+
+  void *pstate;                 /* Private, for use by argp.  */
+};
+\f
+/* Flags for argp_parse (note that the defaults are those that are
+   convenient for program command line parsing): */
+
+/* Don't ignore the first element of ARGV.  Normally (and always unless
+   ARGP_NO_ERRS is set) the first element of the argument vector is
+   skipped for option parsing purposes, as it corresponds to the program name
+   in a command line.  */
+#define ARGP_PARSE_ARGV0  0x01
+
+/* Don't print error messages for unknown options to stderr; unless this flag
+   is set, ARGP_PARSE_ARGV0 is ignored, as ARGV[0] is used as the program
+   name in the error messages.  This flag implies ARGP_NO_EXIT (on the
+   assumption that silent exiting upon errors is bad behaviour).  */
+#define ARGP_NO_ERRS    0x02
+
+/* Don't parse any non-option args.  Normally non-option args are parsed by
+   calling the parse functions with a key of ARGP_KEY_ARG, and the actual arg
+   as the value.  Since it's impossible to know which parse function wants to
+   handle it, each one is called in turn, until one returns 0 or an error
+   other than ARGP_ERR_UNKNOWN; if an argument is handled by no one, the
+   argp_parse returns prematurely (but with a return value of 0).  If all
+   args have been parsed without error, all parsing functions are called one
+   last time with a key of ARGP_KEY_END.  This flag needn't normally be set,
+   as the normal behavior is to stop parsing as soon as some argument can't
+   be handled.  */
+#define ARGP_NO_ARGS    0x04
+
+/* Parse options and arguments in the same order they occur on the command
+   line -- normally they're rearranged so that all options come first. */
+#define ARGP_IN_ORDER   0x08
+
+/* Don't provide the standard long option --help, which causes usage and
+      option help information to be output to stdout, and exit (0) called. */
+#define ARGP_NO_HELP    0x10
+
+/* Don't exit on errors (they may still result in error messages).  */
+#define ARGP_NO_EXIT    0x20
+
+/* Use the gnu getopt `long-only' rules for parsing arguments.  */
+#define ARGP_LONG_ONLY  0x40
+
+/* Turns off any message-printing/exiting options.  */
+#define ARGP_SILENT    (ARGP_NO_EXIT | ARGP_NO_ERRS | ARGP_NO_HELP)
+
+/* Parse the options strings in ARGC & ARGV according to the options in ARGP.
+   FLAGS is one of the ARGP_ flags above.  If ARG_INDEX is non-NULL, the
+   index in ARGV of the first unparsed option is returned in it.  If an
+   unknown option is present, ARGP_ERR_UNKNOWN is returned; if some parser
+   routine returned a non-zero value, it is returned; otherwise 0 is
+   returned.  This function may also call exit unless the ARGP_NO_HELP flag
+   is set.  INPUT is a pointer to a value to be passed in to the parser.  */
+extern error_t argp_parse (const struct argp *__restrict __argp,
+                           int /*argc*/, char **__restrict /*argv*/,
+                           unsigned __flags, int *__restrict __arg_index,
+                           void *__restrict __input);
+extern error_t __argp_parse (const struct argp *__restrict __argp,
+                             int /*argc*/, char **__restrict /*argv*/,
+                             unsigned __flags, int *__restrict __arg_index,
+                             void *__restrict __input);
+\f
+/* Global variables.  */
+
+/* GNULIB makes sure both program_invocation_name and
+   program_invocation_short_name are available */
+#ifdef GNULIB_PROGRAM_INVOCATION_NAME
+extern char *program_invocation_name;
+# undef HAVE_DECL_PROGRAM_INVOCATION_NAME
+# define HAVE_DECL_PROGRAM_INVOCATION_NAME 1
+#endif
+
+#ifdef GNULIB_PROGRAM_INVOCATION_SHORT_NAME
+extern char *program_invocation_short_name;
+# undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
+# define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1
+#endif
+
+/* If defined or set by the user program to a non-zero value, then a default
+   option --version is added (unless the ARGP_NO_HELP flag is used), which
+   will print this string followed by a newline and exit (unless the
+   ARGP_NO_EXIT flag is used).  Overridden by ARGP_PROGRAM_VERSION_HOOK.  */
+extern const char *argp_program_version;
+
+/* If defined or set by the user program to a non-zero value, then a default
+   option --version is added (unless the ARGP_NO_HELP flag is used), which
+   calls this function with a stream to print the version to and a pointer to
+   the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is
+   used).  This variable takes precedent over ARGP_PROGRAM_VERSION.  */
+extern void (*argp_program_version_hook) (FILE *__restrict __stream,
+                                          struct argp_state *__restrict
+                                          __state);
+
+/* If defined or set by the user program, it should point to string that is
+   the bug-reporting address for the program.  It will be printed by
+   argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various
+   standard help messages), embedded in a sentence that says something like
+   `Report bugs to ADDR.'.  */
+extern const char *argp_program_bug_address;
+
+/* The exit status that argp will use when exiting due to a parsing error.
+   If not defined or set by the user program, this defaults to EX_USAGE from
+   <sysexits.h>.  */
+extern error_t argp_err_exit_status;
+\f
+/* Flags for argp_help.  */
+#define ARGP_HELP_USAGE         0x01 /* a Usage: message. */
+#define ARGP_HELP_SHORT_USAGE   0x02 /*  " but don't actually print options. */
+#define ARGP_HELP_SEE           0x04 /* a `Try ... for more help' message. */
+#define ARGP_HELP_LONG          0x08 /* a long help message. */
+#define ARGP_HELP_PRE_DOC       0x10 /* doc string preceding long help.  */
+#define ARGP_HELP_POST_DOC      0x20 /* doc string following long help.  */
+#define ARGP_HELP_DOC           (ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC)
+#define ARGP_HELP_BUG_ADDR      0x40 /* bug report address */
+#define ARGP_HELP_LONG_ONLY     0x80 /* modify output appropriately to
+                                        reflect ARGP_LONG_ONLY mode.  */
+
+/* These ARGP_HELP flags are only understood by argp_state_help.  */
+#define ARGP_HELP_EXIT_ERR      0x100 /* Call exit(1) instead of returning.  */
+#define ARGP_HELP_EXIT_OK       0x200 /* Call exit(0) instead of returning.  */
+
+/* The standard thing to do after a program command line parsing error, if an
+   error message has already been printed.  */
+#define ARGP_HELP_STD_ERR \
+  (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
+/* The standard thing to do after a program command line parsing error, if no
+   more specific error message has been printed.  */
+#define ARGP_HELP_STD_USAGE \
+  (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
+/* The standard thing to do in response to a --help option.  */
+#define ARGP_HELP_STD_HELP \
+  (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \
+   | ARGP_HELP_DOC | ARGP_HELP_BUG_ADDR)
+
+/* Output a usage message for ARGP to STREAM.  FLAGS are from the set
+   ARGP_HELP_*.  */
+extern void argp_help (const struct argp *__restrict __argp,
+                       FILE *__restrict __stream,
+                       unsigned __flags, char *__restrict __name);
+extern void __argp_help (const struct argp *__restrict __argp,
+                         FILE *__restrict __stream, unsigned __flags,
+                         char *__name);
+\f
+/* The following routines are intended to be called from within an argp
+   parsing routine (thus taking an argp_state structure as the first
+   argument).  They may or may not print an error message and exit, depending
+   on the flags in STATE -- in any case, the caller should be prepared for
+   them *not* to exit, and should return an appropiate error after calling
+   them.  [argp_usage & argp_error should probably be called argp_state_...,
+   but they're used often enough that they should be short]  */
+
+/* Output, if appropriate, a usage message for STATE to STREAM.  FLAGS are
+   from the set ARGP_HELP_*.  */
+extern void argp_state_help (const struct argp_state *__restrict __state,
+                             FILE *__restrict __stream,
+                             unsigned int __flags);
+extern void __argp_state_help (const struct argp_state *__restrict __state,
+                               FILE *__restrict __stream,
+                               unsigned int __flags);
+
+#if _LIBC || !defined __USE_EXTERN_INLINES
+/* Possibly output the standard usage message for ARGP to stderr and exit.  */
+extern void argp_usage (const struct argp_state *__state);
+extern void __argp_usage (const struct argp_state *__state);
+#endif
+
+/* If appropriate, print the printf string FMT and following args, preceded
+   by the program name and `:', to stderr, and followed by a `Try ... --help'
+   message, then exit (1).  */
+extern void argp_error (const struct argp_state *__restrict __state,
+                        const char *__restrict __fmt, ...)
+     __attribute__ ((__format__ (__printf__, 2, 3)));
+extern void __argp_error (const struct argp_state *__restrict __state,
+                          const char *__restrict __fmt, ...)
+     __attribute__ ((__format__ (__printf__, 2, 3)));
+
+/* Similar to the standard gnu error-reporting function error(), but will
+   respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print
+   to STATE->err_stream.  This is useful for argument parsing code that is
+   shared between program startup (when exiting is desired) and runtime
+   option parsing (when typically an error code is returned instead).  The
+   difference between this function and argp_error is that the latter is for
+   *parsing errors*, and the former is for other problems that occur during
+   parsing but don't reflect a (syntactic) problem with the input.  */
+extern void argp_failure (const struct argp_state *__restrict __state,
+                          int __status, int __errnum,
+                          const char *__restrict __fmt, ...)
+     __attribute__ ((__format__ (__printf__, 4, 5)));
+extern void __argp_failure (const struct argp_state *__restrict __state,
+                            int __status, int __errnum,
+                            const char *__restrict __fmt, ...)
+     __attribute__ ((__format__ (__printf__, 4, 5)));
+
+#if _LIBC || !defined __USE_EXTERN_INLINES
+/* Returns true if the option OPT is a valid short option.  */
+extern int _option_is_short (const struct argp_option *__opt) __THROW;
+extern int __option_is_short (const struct argp_option *__opt) __THROW;
+
+/* Returns true if the option OPT is in fact the last (unused) entry in an
+   options array.  */
+extern int _option_is_end (const struct argp_option *__opt) __THROW;
+extern int __option_is_end (const struct argp_option *__opt) __THROW;
+#endif
+
+/* Return the input field for ARGP in the parser corresponding to STATE; used
+   by the help routines.  */
+extern void *_argp_input (const struct argp *__restrict __argp,
+                          const struct argp_state *__restrict __state)
+     __THROW;
+extern void *__argp_input (const struct argp *__restrict __argp,
+                           const struct argp_state *__restrict __state)
+     __THROW;
+\f
+#ifdef __USE_EXTERN_INLINES
+
+# if !_LIBC
+#  define __argp_usage argp_usage
+#  define __argp_state_help argp_state_help
+#  define __option_is_short _option_is_short
+#  define __option_is_end _option_is_end
+# endif
+
+# ifndef ARGP_EI
+#  ifdef __GNUC__
+    /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
+       inline semantics, unless -fgnu89-inline is used.  It defines a macro
+       __GNUC_STDC_INLINE__ to indicate this situation or a macro
+       __GNUC_GNU_INLINE__ to indicate the opposite situation.
+       GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline
+       semantics but warns, unless -fgnu89-inline is used:
+         warning: C99 inline functions are not supported; using GNU89
+         warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute
+       It defines a macro __GNUC_GNU_INLINE__ to indicate this situation.  */
+#   if defined __GNUC_STDC_INLINE__
+#    define ARGP_EI __inline__
+#   elif defined __GNUC_GNU_INLINE__
+#    define ARGP_EI extern __inline__ __attribute__ ((__gnu_inline__))
+#   else
+#    define ARGP_EI extern __inline__
+#   endif
+#  else
+    /* With other compilers, assume the ISO C99 meaning of 'inline', if
+       the compiler supports 'inline' at all.  */
+#   define ARGP_EI inline
+#  endif
+# endif
+
+ARGP_EI void
+__argp_usage (const struct argp_state *__state)
+{
+  __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE);
+}
+
+ARGP_EI int
+__NTH (__option_is_short (const struct argp_option *__opt))
+{
+  if (__opt->flags & OPTION_DOC)
+    return 0;
+  else
+    {
+      int __key = __opt->key;
+      return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
+    }
+}
+
+ARGP_EI int
+__NTH (__option_is_end (const struct argp_option *__opt))
+{
+  return !__opt->key && !__opt->name && !__opt->doc && !__opt->group;
+}
+
+# if !_LIBC
+#  undef __argp_usage
+#  undef __argp_state_help
+#  undef __option_is_short
+#  undef __option_is_end
+# endif
+#endif /* Use extern inlines.  */
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif /* argp.h */
diff --git a/gnu/asnprintf.c b/gnu/asnprintf.c
new file mode 100644 (file)
index 0000000..dc3dc1d
--- /dev/null
@@ -0,0 +1,37 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Formatted output to strings.
+   Copyright (C) 1999, 2002, 2006, 2009, 2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#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/gnu/asprintf.c b/gnu/asprintf.c
new file mode 100644 (file)
index 0000000..c507a82
--- /dev/null
@@ -0,0 +1,42 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Formatted output to strings.
+   Copyright (C) 1999, 2002, 2006-2007, 2009-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#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;
+}
diff --git a/gnu/at-func.c b/gnu/at-func.c
new file mode 100644 (file)
index 0000000..999c060
--- /dev/null
@@ -0,0 +1,133 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Define an at-style functions like fstatat, unlinkat, fchownat, etc.
+   Copyright (C) 2006, 2009-2010 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 */
+
+#include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */
+#include "openat.h"
+#include "openat-priv.h"
+#include "save-cwd.h"
+
+#ifdef AT_FUNC_USE_F1_COND
+# define CALL_FUNC(F)                           \
+  (flag == AT_FUNC_USE_F1_COND                  \
+    ? AT_FUNC_F1 (F AT_FUNC_POST_FILE_ARGS)     \
+    : AT_FUNC_F2 (F AT_FUNC_POST_FILE_ARGS))
+# define VALIDATE_FLAG(F)                       \
+  if (flag & ~AT_FUNC_USE_F1_COND)              \
+    {                                           \
+      errno = EINVAL;                           \
+      return FUNC_FAIL;                         \
+    }
+#else
+# define CALL_FUNC(F) (AT_FUNC_F1 (F AT_FUNC_POST_FILE_ARGS))
+# define VALIDATE_FLAG(F) /* empty */
+#endif
+
+#ifdef AT_FUNC_RESULT
+# define FUNC_RESULT AT_FUNC_RESULT
+#else
+# define FUNC_RESULT int
+#endif
+
+#ifdef AT_FUNC_FAIL
+# define FUNC_FAIL AT_FUNC_FAIL
+#else
+# define FUNC_FAIL -1
+#endif
+
+/* Call AT_FUNC_F1 to operate on FILE, which is in the directory
+   open on descriptor FD.  If AT_FUNC_USE_F1_COND is defined to a value,
+   AT_FUNC_POST_FILE_PARAM_DECLS must inlude a parameter named flag;
+   call AT_FUNC_F2 if FLAG is 0 or fail if FLAG contains more bits than
+   AT_FUNC_USE_F1_COND.  Return int and fail with -1 unless AT_FUNC_RESULT
+   or AT_FUNC_FAIL are defined.  If possible, do it without changing the
+   working directory.  Otherwise, resort to using save_cwd/fchdir,
+   then AT_FUNC_F?/restore_cwd.  If either the save_cwd or the restore_cwd
+   fails, then give a diagnostic and exit nonzero.  */
+FUNC_RESULT
+AT_FUNC_NAME (int fd, char const *file AT_FUNC_POST_FILE_PARAM_DECLS)
+{
+  /* Be careful to choose names unlikely to conflict with
+     AT_FUNC_POST_FILE_PARAM_DECLS.  */
+  struct saved_cwd saved_cwd;
+  int saved_errno;
+  FUNC_RESULT err;
+
+  VALIDATE_FLAG (flag);
+
+  if (fd == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file))
+    return CALL_FUNC (file);
+
+  {
+    char proc_buf[OPENAT_BUFFER_SIZE];
+    char *proc_file = openat_proc_name (proc_buf, fd, file);
+    if (proc_file)
+      {
+        FUNC_RESULT proc_result = CALL_FUNC (proc_file);
+        int proc_errno = errno;
+        if (proc_file != proc_buf)
+          free (proc_file);
+        /* If the syscall succeeds, or if it fails with an unexpected
+           errno value, then return right away.  Otherwise, fall through
+           and resort to using save_cwd/restore_cwd.  */
+        if (FUNC_FAIL != proc_result)
+          return proc_result;
+        if (! EXPECTED_ERRNO (proc_errno))
+          {
+            errno = proc_errno;
+            return proc_result;
+          }
+      }
+  }
+
+  if (save_cwd (&saved_cwd) != 0)
+    openat_save_fail (errno);
+  if (0 <= fd && fd == saved_cwd.desc)
+    {
+      /* If saving the working directory collides with the user's
+         requested fd, then the user's fd must have been closed to
+         begin with.  */
+      free_cwd (&saved_cwd);
+      errno = EBADF;
+      return FUNC_FAIL;
+    }
+
+  if (fchdir (fd) != 0)
+    {
+      saved_errno = errno;
+      free_cwd (&saved_cwd);
+      errno = saved_errno;
+      return FUNC_FAIL;
+    }
+
+  err = CALL_FUNC (file);
+  saved_errno = (err == FUNC_FAIL ? errno : 0);
+
+  if (restore_cwd (&saved_cwd) != 0)
+    openat_restore_fail (errno);
+
+  free_cwd (&saved_cwd);
+
+  if (saved_errno)
+    errno = saved_errno;
+  return err;
+}
+#undef CALL_FUNC
+#undef FUNC_RESULT
+#undef FUNC_FAIL
diff --git a/gnu/backupfile.c b/gnu/backupfile.c
new file mode 100644 (file)
index 0000000..fc9d74b
--- /dev/null
@@ -0,0 +1,357 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* backupfile.c -- make Emacs style backup file names
+
+   Copyright (C) 1990-2006, 2009-2010 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 and David MacKenzie.
+   Some algorithms adapted from GNU Emacs.  */
+
+#include <config.h>
+
+#include "backupfile.h"
+
+#include "argmatch.h"
+#include "dirname.h"
+#include "xalloc.h"
+
+#include <errno.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <limits.h>
+
+#include <unistd.h>
+
+#include "dirent--.h"
+#ifndef _D_EXACT_NAMLEN
+# define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name)
+#endif
+#if D_INO_IN_DIRENT
+# define REAL_DIR_ENTRY(dp) ((dp)->d_ino != 0)
+#else
+# define REAL_DIR_ENTRY(dp) 1
+#endif
+
+#if ! (HAVE_PATHCONF && defined _PC_NAME_MAX)
+# define pathconf(file, option) (errno = -1)
+#endif
+
+#ifndef _POSIX_NAME_MAX
+# define _POSIX_NAME_MAX 14
+#endif
+#ifndef SIZE_MAX
+# define SIZE_MAX ((size_t) -1)
+#endif
+
+#if defined _XOPEN_NAME_MAX
+# define NAME_MAX_MINIMUM _XOPEN_NAME_MAX
+#else
+# define NAME_MAX_MINIMUM _POSIX_NAME_MAX
+#endif
+
+#ifndef HAVE_DOS_FILE_NAMES
+# define HAVE_DOS_FILE_NAMES 0
+#endif
+#ifndef HAVE_LONG_FILE_NAMES
+# define HAVE_LONG_FILE_NAMES 0
+#endif
+
+/* ISDIGIT differs from isdigit, as follows:
+   - Its arg may be any int or unsigned int; it need not be an unsigned char
+     or EOF.
+   - It's typically faster.
+   POSIX says that only '0' through '9' are digits.  Prefer ISDIGIT to
+   ISDIGIT unless it's important to use the locale's definition
+   of `digit' even when the host does not conform to POSIX.  */
+#define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
+
+/* The extension added to file names to produce a simple (as opposed
+   to numbered) backup file name. */
+char const *simple_backup_suffix = "~";
+
+
+/* If FILE (which was of length FILELEN before an extension was
+   appended to it) is too long, replace the extension with the single
+   char E.  If the result is still too long, remove the char just
+   before E.  */
+
+static void
+check_extension (char *file, size_t filelen, char e)
+{
+  char *base = last_component (file);
+  size_t baselen = base_len (base);
+  size_t baselen_max = HAVE_LONG_FILE_NAMES ? 255 : NAME_MAX_MINIMUM;
+
+  if (HAVE_DOS_FILE_NAMES || NAME_MAX_MINIMUM < baselen)
+    {
+      /* The new base name is long enough to require a pathconf check.  */
+      long name_max;
+
+      /* Temporarily modify the buffer into its parent directory name,
+         invoke pathconf on the directory, and then restore the buffer.  */
+      char tmp[sizeof "."];
+      memcpy (tmp, base, sizeof ".");
+      strcpy (base, ".");
+      errno = 0;
+      name_max = pathconf (file, _PC_NAME_MAX);
+      if (0 <= name_max || errno == 0)
+        {
+          long size = baselen_max = name_max;
+          if (name_max != size)
+            baselen_max = SIZE_MAX;
+        }
+      memcpy (base, tmp, sizeof ".");
+    }
+
+  if (HAVE_DOS_FILE_NAMES && baselen_max <= 12)
+    {
+      /* Live within DOS's 8.3 limit.  */
+      char *dot = strchr (base, '.');
+      if (!dot)
+        baselen_max = 8;
+      else
+        {
+          char const *second_dot = strchr (dot + 1, '.');
+          baselen_max = (second_dot
+                         ? second_dot - base
+                         : dot + 1 - base + 3);
+        }
+    }
+
+  if (baselen_max < baselen)
+    {
+      baselen = file + filelen - base;
+      if (baselen_max <= baselen)
+        baselen = baselen_max - 1;
+      base[baselen] = e;
+      base[baselen + 1] = '\0';
+    }
+}
+
+/* Returned values for NUMBERED_BACKUP.  */
+
+enum numbered_backup_result
+  {
+    /* The new backup name is the same length as an existing backup
+       name, so it's valid for that directory.  */
+    BACKUP_IS_SAME_LENGTH,
+
+    /* Some backup names already exist, but the returned name is longer
+       than any of them, and its length should be checked.  */
+    BACKUP_IS_LONGER,
+
+    /* There are no existing backup names.  The new name's length
+       should be checked.  */
+    BACKUP_IS_NEW
+  };
+
+/* *BUFFER contains a file name.  Store into *BUFFER the next backup
+   name for the named file, with a version number greater than all the
+   existing numbered backups.  Reallocate *BUFFER as necessary; its
+   initial allocated size is BUFFER_SIZE, which must be at least 4
+   bytes longer than the file name to make room for the initially
+   appended ".~1".  FILELEN is the length of the original file name.
+   The returned value indicates what kind of backup was found.  If an
+   I/O or other read error occurs, use the highest backup number that
+   was found.  */
+
+static enum numbered_backup_result
+numbered_backup (char **buffer, size_t buffer_size, size_t filelen)
+{
+  enum numbered_backup_result result = BACKUP_IS_NEW;
+  DIR *dirp;
+  struct dirent *dp;
+  char *buf = *buffer;
+  size_t versionlenmax = 1;
+  char *base = last_component (buf);
+  size_t base_offset = base - buf;
+  size_t baselen = base_len (base);
+
+  /* Temporarily modify the buffer into its parent directory name,
+     open the directory, and then restore the buffer.  */
+  char tmp[sizeof "."];
+  memcpy (tmp, base, sizeof ".");
+  strcpy (base, ".");
+  dirp = opendir (buf);
+  memcpy (base, tmp, sizeof ".");
+  strcpy (base + baselen, ".~1~");
+
+  if (!dirp)
+    return result;
+
+  while ((dp = readdir (dirp)) != NULL)
+    {
+      char const *p;
+      char *q;
+      bool all_9s;
+      size_t versionlen;
+      size_t new_buflen;
+
+      if (! REAL_DIR_ENTRY (dp) || _D_EXACT_NAMLEN (dp) < baselen + 4)
+        continue;
+
+      if (memcmp (buf + base_offset, dp->d_name, baselen + 2) != 0)
+        continue;
+
+      p = dp->d_name + baselen + 2;
+
+      /* Check whether this file has a version number and if so,
+         whether it is larger.  Use string operations rather than
+         integer arithmetic, to avoid problems with integer overflow.  */
+
+      if (! ('1' <= *p && *p <= '9'))
+        continue;
+      all_9s = (*p == '9');
+      for (versionlen = 1; ISDIGIT (p[versionlen]); versionlen++)
+        all_9s &= (p[versionlen] == '9');
+
+      if (! (p[versionlen] == '~' && !p[versionlen + 1]
+             && (versionlenmax < versionlen
+                 || (versionlenmax == versionlen
+                     && memcmp (buf + filelen + 2, p, versionlen) <= 0))))
+        continue;
+
+      /* This directory has the largest version number seen so far.
+         Append this highest numbered extension to the file name,
+         prepending '0' to the number if it is all 9s.  */
+
+      versionlenmax = all_9s + versionlen;
+      result = (all_9s ? BACKUP_IS_LONGER : BACKUP_IS_SAME_LENGTH);
+      new_buflen = filelen + 2 + versionlenmax + 1;
+      if (buffer_size <= new_buflen)
+        {
+          buf = xnrealloc (buf, 2, new_buflen);
+          buffer_size = new_buflen * 2;
+        }
+      q = buf + filelen;
+      *q++ = '.';
+      *q++ = '~';
+      *q = '0';
+      q += all_9s;
+      memcpy (q, p, versionlen + 2);
+
+      /* Add 1 to the version number.  */
+
+      q += versionlen;
+      while (*--q == '9')
+        *q = '0';
+      ++*q;
+    }
+
+  closedir (dirp);
+  *buffer = buf;
+  return result;
+}
+
+/* Return the name of the new backup file for the existing file FILE,
+   allocated with malloc.  Report an error and fail if out of memory.
+   Do not call this function if backup_type == no_backups.  */
+
+char *
+find_backup_file_name (char const *file, enum backup_type backup_type)
+{
+  size_t filelen = strlen (file);
+  char *s;
+  size_t ssize;
+  bool simple = true;
+
+  /* Allow room for simple or ".~N~" backups.  The guess must be at
+     least sizeof ".~1~", but otherwise will be adjusted as needed.  */
+  size_t simple_backup_suffix_size = strlen (simple_backup_suffix) + 1;
+  size_t backup_suffix_size_guess = simple_backup_suffix_size;
+  enum { GUESS = sizeof ".~12345~" };
+  if (backup_suffix_size_guess < GUESS)
+    backup_suffix_size_guess = GUESS;
+
+  ssize = filelen + backup_suffix_size_guess + 1;
+  s = xmalloc (ssize);
+  memcpy (s, file, filelen + 1);
+
+  if (backup_type != simple_backups)
+    switch (numbered_backup (&s, ssize, filelen))
+      {
+      case BACKUP_IS_SAME_LENGTH:
+        return s;
+
+      case BACKUP_IS_LONGER:
+        simple = false;
+        break;
+
+      case BACKUP_IS_NEW:
+        simple = (backup_type == numbered_existing_backups);
+        break;
+      }
+
+  if (simple)
+    memcpy (s + filelen, simple_backup_suffix, simple_backup_suffix_size);
+  check_extension (s, filelen, '~');
+  return s;
+}
+
+static char const * const backup_args[] =
+{
+  /* In a series of synonyms, present the most meaningful first, so
+     that argmatch_valid be more readable. */
+  "none", "off",
+  "simple", "never",
+  "existing", "nil",
+  "numbered", "t",
+  NULL
+};
+
+static const enum backup_type backup_types[] =
+{
+  no_backups, no_backups,
+  simple_backups, simple_backups,
+  numbered_existing_backups, numbered_existing_backups,
+  numbered_backups, numbered_backups
+};
+
+/* Ensure that these two vectors have the same number of elements,
+   not counting the final NULL in the first one.  */
+ARGMATCH_VERIFY (backup_args, backup_types);
+
+/* Return the type of backup specified by VERSION.
+   If VERSION is NULL or the empty string, return numbered_existing_backups.
+   If VERSION is invalid or ambiguous, fail with a diagnostic appropriate
+   for the specified CONTEXT.  Unambiguous abbreviations are accepted.  */
+
+enum backup_type
+get_version (char const *context, char const *version)
+{
+  if (version == 0 || *version == 0)
+    return numbered_existing_backups;
+  else
+    return XARGMATCH (context, version, backup_args, backup_types);
+}
+
+
+/* Return the type of backup specified by VERSION.
+   If VERSION is NULL, use the value of the envvar VERSION_CONTROL.
+   If the specified string is invalid or ambiguous, fail with a diagnostic
+   appropriate for the specified CONTEXT.
+   Unambiguous abbreviations are accepted.  */
+
+enum backup_type
+xget_version (char const *context, char const *version)
+{
+  if (version && *version)
+    return get_version (context, version);
+  else
+    return get_version ("$VERSION_CONTROL", getenv ("VERSION_CONTROL"));
+}
diff --git a/gnu/backupfile.h b/gnu/backupfile.h
new file mode 100644 (file)
index 0000000..999eed2
--- /dev/null
@@ -0,0 +1,61 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* backupfile.h -- declarations for making Emacs style backup file names
+
+   Copyright (C) 1990-1992, 1997-1999, 2003-2004, 2009-2010 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 BACKUPFILE_H_
+# define BACKUPFILE_H_
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+
+/* When to make backup files. */
+enum backup_type
+{
+  /* Never make backups. */
+  no_backups,
+
+  /* Make simple backups of every file. */
+  simple_backups,
+
+  /* Make numbered backups of files that already have numbered backups,
+     and simple backups of the others. */
+  numbered_existing_backups,
+
+  /* Make numbered backups of every file. */
+  numbered_backups
+};
+
+# define VALID_BACKUP_TYPE(Type)        \
+  ((unsigned int) (Type) <= numbered_backups)
+
+extern char const *simple_backup_suffix;
+
+char *find_backup_file_name (char const *, enum backup_type);
+enum backup_type get_version (char const *context, char const *arg);
+enum backup_type xget_version (char const *context, char const *arg);
+void addext (char *, char const *, int);
+
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif /* ! BACKUPFILE_H_ */
diff --git a/gnu/basename-lgpl.c b/gnu/basename-lgpl.c
new file mode 100644 (file)
index 0000000..b2f273f
--- /dev/null
@@ -0,0 +1,77 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* basename.c -- return the last element in a file name
+
+   Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2010 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>
+
+#include "dirname.h"
+
+#include <string.h>
+
+/* Return the address of the last file name component of NAME.  If
+   NAME has no relative file name components because it is a file
+   system root, return the empty string.  */
+
+char *
+last_component (char const *name)
+{
+  char const *base = name + FILE_SYSTEM_PREFIX_LEN (name);
+  char const *p;
+  bool saw_slash = false;
+
+  while (ISSLASH (*base))
+    base++;
+
+  for (p = base; *p; p++)
+    {
+      if (ISSLASH (*p))
+        saw_slash = true;
+      else if (saw_slash)
+        {
+          base = p;
+          saw_slash = false;
+        }
+    }
+
+  return (char *) base;
+}
+
+/* Return the length of the basename NAME.  Typically NAME is the
+   value returned by base_name or last_component.  Act like strlen
+   (NAME), except omit all trailing slashes.  */
+
+size_t
+base_len (char const *name)
+{
+  size_t len;
+  size_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name);
+
+  for (len = strlen (name);  1 < len && ISSLASH (name[len - 1]);  len--)
+    continue;
+
+  if (DOUBLE_SLASH_IS_DISTINCT_ROOT && len == 1
+      && ISSLASH (name[0]) && ISSLASH (name[1]) && ! name[2])
+    return 2;
+
+  if (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && prefix_len
+      && len == prefix_len && ISSLASH (name[prefix_len]))
+    return prefix_len + 1;
+
+  return len;
+}
diff --git a/gnu/basename.c b/gnu/basename.c
new file mode 100644 (file)
index 0000000..a7e8cb4
--- /dev/null
@@ -0,0 +1,60 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* basename.c -- return the last element in a file name
+
+   Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2010 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>
+
+#include "dirname.h"
+
+#include <string.h>
+#include "xalloc.h"
+#include "xstrndup.h"
+
+char *
+base_name (char const *name)
+{
+  char const *base = last_component (name);
+  size_t length;
+
+  /* If there is no last component, then name is a file system root or the
+     empty string.  */
+  if (! *base)
+    return xstrndup (name, base_len (name));
+
+  /* Collapse a sequence of trailing slashes into one.  */
+  length = base_len (base);
+  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
+     with pure POSIX semantics, this is not an issue.  */
+  if (FILE_SYSTEM_PREFIX_LEN (base))
+    {
+      char *p = xmalloc (length + 3);
+      p[0] = '.';
+      p[1] = '/';
+      memcpy (p + 2, base, length);
+      p[length + 2] = '\0';
+      return p;
+    }
+
+  /* Finally, copy the basename.  */
+  return xstrndup (base, length);
+}
diff --git a/gnu/bitrotate.h b/gnu/bitrotate.h
new file mode 100644 (file)
index 0000000..9adefe3
--- /dev/null
@@ -0,0 +1,128 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* bitrotate.h - Rotate bits in integers
+   Copyright (C) 2008, 2009, 2010 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 Simon Josefsson <simon@josefsson.org>, 2008. */
+
+#ifndef _GL_BITROTATE_H
+#define _GL_BITROTATE_H
+
+#include <limits.h>
+#include <stdint.h>
+#include <sys/types.h>
+
+#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
+rotl64 (uint64_t x, int n)
+{
+  return ((x << n) | (x >> (64 - n))) & UINT64_MAX;
+}
+
+/* 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
+rotr64 (uint64_t x, int n)
+{
+  return ((x >> n) | (x << (64 - n))) & UINT64_MAX;
+}
+#endif
+
+/* 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
+rotl32 (uint32_t x, int n)
+{
+  return ((x << n) | (x >> (32 - n))) & UINT32_MAX;
+}
+
+/* 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
+rotr32 (uint32_t x, int n)
+{
+  return ((x >> n) | (x << (32 - n))) & UINT32_MAX;
+}
+
+/* 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
+rotl_sz (size_t x, int n)
+{
+  return ((x << n) | (x >> ((CHAR_BIT * sizeof x) - n))) & SIZE_MAX;
+}
+
+/* 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
+rotr_sz (size_t x, int n)
+{
+  return ((x >> n) | (x << ((CHAR_BIT * sizeof x) - n))) & SIZE_MAX;
+}
+
+/* Given an unsigned 16-bit argument X, return the value corresponding
+   to rotating the bits N steps to the left.  N must be between 1 to
+   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
+rotl16 (uint16_t x, int n)
+{
+  return ((x << n) | (x >> (16 - n))) & UINT16_MAX;
+}
+
+/* Given an unsigned 16-bit argument X, return the value corresponding
+   to rotating the bits N steps to the right.  N must be in 1 to 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
+rotr16 (uint16_t x, int n)
+{
+  return ((x >> n) | (x << (16 - n))) & UINT16_MAX;
+}
+
+/* Given an unsigned 8-bit argument X, return the value corresponding
+   to rotating the bits N steps to the left.  N must be between 1 to 7
+   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
+rotl8 (uint8_t x, int n)
+{
+  return ((x << n) | (x >> (8 - n))) & UINT8_MAX;
+}
+
+/* Given an unsigned 8-bit argument X, return the value corresponding
+   to rotating the bits N steps to the right.  N must be in 1 to 7
+   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
+rotr8 (uint8_t x, int n)
+{
+  return ((x >> n) | (x << (8 - n))) & UINT8_MAX;
+}
+
+#endif /* _GL_BITROTATE_H */
diff --git a/gnu/btowc.c b/gnu/btowc.c
new file mode 100644 (file)
index 0000000..1ff29ee
--- /dev/null
@@ -0,0 +1,40 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Convert unibyte character to wide character.
+   Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+   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 <wchar.h>
+
+#include <stdio.h>
+
+wint_t
+btowc (int c)
+{
+  if (c != EOF)
+    {
+      char buf[1];
+      wchar_t wc;
+
+      buf[0] = c;
+      if (mbtowc (&wc, buf, 1) >= 0)
+        return wc;
+    }
+  return WEOF;
+}
diff --git a/gnu/c-ctype.c b/gnu/c-ctype.c
new file mode 100644 (file)
index 0000000..48baa72
--- /dev/null
@@ -0,0 +1,398 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Character handling in C locale.
+
+   Copyright 2000-2003, 2006, 2009-2010 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, write to the Free Software Foundation,
+Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include <config.h>
+
+/* Specification.  */
+#define NO_C_CTYPE_MACROS
+#include "c-ctype.h"
+
+/* The function isascii is not locale dependent. Its use in EBCDIC is
+   questionable. */
+bool
+c_isascii (int c)
+{
+  return (c >= 0x00 && c <= 0x7f);
+}
+
+bool
+c_isalnum (int c)
+{
+#if C_CTYPE_CONSECUTIVE_DIGITS \
+    && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+#if C_CTYPE_ASCII
+  return ((c >= '0' && c <= '9')
+          || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z'));
+#else
+  return ((c >= '0' && c <= '9')
+          || (c >= 'A' && c <= 'Z')
+          || (c >= 'a' && c <= 'z'));
+#endif
+#else
+  switch (c)
+    {
+    case '0': case '1': case '2': case '3': case '4': case '5':
+    case '6': case '7': case '8': case '9':
+    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+    case 'Y': case 'Z':
+    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
+    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
+    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
+    case 'y': case 'z':
+      return 1;
+    default:
+      return 0;
+    }
+#endif
+}
+
+bool
+c_isalpha (int c)
+{
+#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+#if C_CTYPE_ASCII
+  return ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z');
+#else
+  return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'));
+#endif
+#else
+  switch (c)
+    {
+    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+    case 'Y': case 'Z':
+    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
+    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
+    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
+    case 'y': case 'z':
+      return 1;
+    default:
+      return 0;
+    }
+#endif
+}
+
+bool
+c_isblank (int c)
+{
+  return (c == ' ' || c == '\t');
+}
+
+bool
+c_iscntrl (int c)
+{
+#if C_CTYPE_ASCII
+  return ((c & ~0x1f) == 0 || c == 0x7f);
+#else
+  switch (c)
+    {
+    case ' ': case '!': case '"': case '#': case '$': case '%':
+    case '&': case '\'': case '(': case ')': case '*': case '+':
+    case ',': case '-': case '.': case '/':
+    case '0': case '1': case '2': case '3': case '4': case '5':
+    case '6': case '7': case '8': case '9':
+    case ':': case ';': case '<': case '=': case '>': case '?':
+    case '@':
+    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+    case 'Y': case 'Z':
+    case '[': case '\\': case ']': case '^': case '_': case '`':
+    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
+    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
+    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
+    case 'y': case 'z':
+    case '{': case '|': case '}': case '~':
+      return 0;
+    default:
+      return 1;
+    }
+#endif
+}
+
+bool
+c_isdigit (int c)
+{
+#if C_CTYPE_CONSECUTIVE_DIGITS
+  return (c >= '0' && c <= '9');
+#else
+  switch (c)
+    {
+    case '0': case '1': case '2': case '3': case '4': case '5':
+    case '6': case '7': case '8': case '9':
+      return 1;
+    default:
+      return 0;
+    }
+#endif
+}
+
+bool
+c_islower (int c)
+{
+#if C_CTYPE_CONSECUTIVE_LOWERCASE
+  return (c >= 'a' && c <= 'z');
+#else
+  switch (c)
+    {
+    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
+    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
+    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
+    case 'y': case 'z':
+      return 1;
+    default:
+      return 0;
+    }
+#endif
+}
+
+bool
+c_isgraph (int c)
+{
+#if C_CTYPE_ASCII
+  return (c >= '!' && c <= '~');
+#else
+  switch (c)
+    {
+    case '!': case '"': case '#': case '$': case '%': case '&':
+    case '\'': case '(': case ')': case '*': case '+': case ',':
+    case '-': case '.': case '/':
+    case '0': case '1': case '2': case '3': case '4': case '5':
+    case '6': case '7': case '8': case '9':
+    case ':': case ';': case '<': case '=': case '>': case '?':
+    case '@':
+    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+    case 'Y': case 'Z':
+    case '[': case '\\': case ']': case '^': case '_': case '`':
+    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
+    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
+    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
+    case 'y': case 'z':
+    case '{': case '|': case '}': case '~':
+      return 1;
+    default:
+      return 0;
+    }
+#endif
+}
+
+bool
+c_isprint (int c)
+{
+#if C_CTYPE_ASCII
+  return (c >= ' ' && c <= '~');
+#else
+  switch (c)
+    {
+    case ' ': case '!': case '"': case '#': case '$': case '%':
+    case '&': case '\'': case '(': case ')': case '*': case '+':
+    case ',': case '-': case '.': case '/':
+    case '0': case '1': case '2': case '3': case '4': case '5':
+    case '6': case '7': case '8': case '9':
+    case ':': case ';': case '<': case '=': case '>': case '?':
+    case '@':
+    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+    case 'Y': case 'Z':
+    case '[': case '\\': case ']': case '^': case '_': case '`':
+    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
+    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
+    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
+    case 'y': case 'z':
+    case '{': case '|': case '}': case '~':
+      return 1;
+    default:
+      return 0;
+    }
+#endif
+}
+
+bool
+c_ispunct (int c)
+{
+#if C_CTYPE_ASCII
+  return ((c >= '!' && c <= '~')
+          && !((c >= '0' && c <= '9')
+               || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z')));
+#else
+  switch (c)
+    {
+    case '!': case '"': case '#': case '$': case '%': case '&':
+    case '\'': case '(': case ')': case '*': case '+': case ',':
+    case '-': case '.': case '/':
+    case ':': case ';': case '<': case '=': case '>': case '?':
+    case '@':
+    case '[': case '\\': case ']': case '^': case '_': case '`':
+    case '{': case '|': case '}': case '~':
+      return 1;
+    default:
+      return 0;
+    }
+#endif
+}
+
+bool
+c_isspace (int c)
+{
+  return (c == ' ' || c == '\t'
+          || c == '\n' || c == '\v' || c == '\f' || c == '\r');
+}
+
+bool
+c_isupper (int c)
+{
+#if C_CTYPE_CONSECUTIVE_UPPERCASE
+  return (c >= 'A' && c <= 'Z');
+#else
+  switch (c)
+    {
+    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+    case 'Y': case 'Z':
+      return 1;
+    default:
+      return 0;
+    }
+#endif
+}
+
+bool
+c_isxdigit (int c)
+{
+#if C_CTYPE_CONSECUTIVE_DIGITS \
+    && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+#if C_CTYPE_ASCII
+  return ((c >= '0' && c <= '9')
+          || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'F'));
+#else
+  return ((c >= '0' && c <= '9')
+          || (c >= 'A' && c <= 'F')
+          || (c >= 'a' && c <= 'f'));
+#endif
+#else
+  switch (c)
+    {
+    case '0': case '1': case '2': case '3': case '4': case '5':
+    case '6': case '7': case '8': case '9':
+    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+      return 1;
+    default:
+      return 0;
+    }
+#endif
+}
+
+int
+c_tolower (int c)
+{
+#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+  return (c >= 'A' && c <= 'Z' ? c - 'A' + 'a' : c);
+#else
+  switch (c)
+    {
+    case 'A': return 'a';
+    case 'B': return 'b';
+    case 'C': return 'c';
+    case 'D': return 'd';
+    case 'E': return 'e';
+    case 'F': return 'f';
+    case 'G': return 'g';
+    case 'H': return 'h';
+    case 'I': return 'i';
+    case 'J': return 'j';
+    case 'K': return 'k';
+    case 'L': return 'l';
+    case 'M': return 'm';
+    case 'N': return 'n';
+    case 'O': return 'o';
+    case 'P': return 'p';
+    case 'Q': return 'q';
+    case 'R': return 'r';
+    case 'S': return 's';
+    case 'T': return 't';
+    case 'U': return 'u';
+    case 'V': return 'v';
+    case 'W': return 'w';
+    case 'X': return 'x';
+    case 'Y': return 'y';
+    case 'Z': return 'z';
+    default: return c;
+    }
+#endif
+}
+
+int
+c_toupper (int c)
+{
+#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+  return (c >= 'a' && c <= 'z' ? c - 'a' + 'A' : c);
+#else
+  switch (c)
+    {
+    case 'a': return 'A';
+    case 'b': return 'B';
+    case 'c': return 'C';
+    case 'd': return 'D';
+    case 'e': return 'E';
+    case 'f': return 'F';
+    case 'g': return 'G';
+    case 'h': return 'H';
+    case 'i': return 'I';
+    case 'j': return 'J';
+    case 'k': return 'K';
+    case 'l': return 'L';
+    case 'm': return 'M';
+    case 'n': return 'N';
+    case 'o': return 'O';
+    case 'p': return 'P';
+    case 'q': return 'Q';
+    case 'r': return 'R';
+    case 's': return 'S';
+    case 't': return 'T';
+    case 'u': return 'U';
+    case 'v': return 'V';
+    case 'w': return 'W';
+    case 'x': return 'X';
+    case 'y': return 'Y';
+    case 'z': return 'Z';
+    default: return c;
+    }
+#endif
+}
diff --git a/gnu/c-ctype.h b/gnu/c-ctype.h
new file mode 100644 (file)
index 0000000..26c89b8
--- /dev/null
@@ -0,0 +1,297 @@
+/* -*- 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>,
+   except that they have the C (POSIX) locale hardwired, whereas the
+   <ctype.h> functions' behaviour depends on the current locale set via
+   setlocale.
+
+   Copyright (C) 2000-2003, 2006, 2008-2010 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, write to the Free Software Foundation,
+Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef C_CTYPE_H
+#define C_CTYPE_H
+
+#include <stdbool.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* The functions defined in this file assume the "C" locale and a character
+   set without diacritics (ASCII-US or EBCDIC-US or something like that).
+   Even if the "C" locale on a particular system is an extension of the ASCII
+   character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it
+   is ISO-8859-1), the functions in this file recognize only the ASCII
+   characters.  */
+
+
+/* Check whether the ASCII optimizations apply. */
+
+/* ANSI C89 (and ISO C99 5.2.1.3 too) already guarantees that
+   '0', '1', ..., '9' have consecutive integer values.  */
+#define C_CTYPE_CONSECUTIVE_DIGITS 1
+
+#if ('A' <= 'Z') \
+    && ('A' + 1 == 'B') && ('B' + 1 == 'C') && ('C' + 1 == 'D') \
+    && ('D' + 1 == 'E') && ('E' + 1 == 'F') && ('F' + 1 == 'G') \
+    && ('G' + 1 == 'H') && ('H' + 1 == 'I') && ('I' + 1 == 'J') \
+    && ('J' + 1 == 'K') && ('K' + 1 == 'L') && ('L' + 1 == 'M') \
+    && ('M' + 1 == 'N') && ('N' + 1 == 'O') && ('O' + 1 == 'P') \
+    && ('P' + 1 == 'Q') && ('Q' + 1 == 'R') && ('R' + 1 == 'S') \
+    && ('S' + 1 == 'T') && ('T' + 1 == 'U') && ('U' + 1 == 'V') \
+    && ('V' + 1 == 'W') && ('W' + 1 == 'X') && ('X' + 1 == 'Y') \
+    && ('Y' + 1 == 'Z')
+#define C_CTYPE_CONSECUTIVE_UPPERCASE 1
+#endif
+
+#if ('a' <= 'z') \
+    && ('a' + 1 == 'b') && ('b' + 1 == 'c') && ('c' + 1 == 'd') \
+    && ('d' + 1 == 'e') && ('e' + 1 == 'f') && ('f' + 1 == 'g') \
+    && ('g' + 1 == 'h') && ('h' + 1 == 'i') && ('i' + 1 == 'j') \
+    && ('j' + 1 == 'k') && ('k' + 1 == 'l') && ('l' + 1 == 'm') \
+    && ('m' + 1 == 'n') && ('n' + 1 == 'o') && ('o' + 1 == 'p') \
+    && ('p' + 1 == 'q') && ('q' + 1 == 'r') && ('r' + 1 == 's') \
+    && ('s' + 1 == 't') && ('t' + 1 == 'u') && ('u' + 1 == 'v') \
+    && ('v' + 1 == 'w') && ('w' + 1 == 'x') && ('x' + 1 == 'y') \
+    && ('y' + 1 == 'z')
+#define C_CTYPE_CONSECUTIVE_LOWERCASE 1
+#endif
+
+#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
+    && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
+    && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
+    && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
+    && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
+    && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
+    && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
+    && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
+    && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
+    && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
+    && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
+    && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
+    && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
+    && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
+    && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
+    && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
+    && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
+    && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
+    && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
+    && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
+    && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
+    && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
+    && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)
+/* The character set is ASCII or one of its variants or extensions, not EBCDIC.
+   Testing the value of '\n' and '\r' is not relevant.  */
+#define C_CTYPE_ASCII 1
+#endif
+
+
+/* Function declarations. */
+
+/* Unlike the functions in <ctype.h>, which require an argument in the range
+   of the 'unsigned char' type, the functions here operate on values that are
+   in the 'unsigned char' range or in the 'char' range.  In other words,
+   when you have a 'char' value, you need to cast it before using it as
+   argument to a <ctype.h> function:
+
+         const char *s = ...;
+         if (isalpha ((unsigned char) *s)) ...
+
+   but you don't need to cast it for the functions defined in this file:
+
+         const char *s = ...;
+         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);
+
+
+#if defined __GNUC__ && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ && !defined NO_C_CTYPE_MACROS
+
+/* ASCII optimizations. */
+
+#undef c_isascii
+#define c_isascii(c) \
+  ({ int __c = (c); \
+     (__c >= 0x00 && __c <= 0x7f); \
+   })
+
+#if C_CTYPE_CONSECUTIVE_DIGITS \
+    && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+#if C_CTYPE_ASCII
+#undef c_isalnum
+#define c_isalnum(c) \
+  ({ int __c = (c); \
+     ((__c >= '0' && __c <= '9') \
+      || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z')); \
+   })
+#else
+#undef c_isalnum
+#define c_isalnum(c) \
+  ({ int __c = (c); \
+     ((__c >= '0' && __c <= '9') \
+      || (__c >= 'A' && __c <= 'Z') \
+      || (__c >= 'a' && __c <= 'z')); \
+   })
+#endif
+#endif
+
+#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+#if C_CTYPE_ASCII
+#undef c_isalpha
+#define c_isalpha(c) \
+  ({ int __c = (c); \
+     ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z'); \
+   })
+#else
+#undef c_isalpha
+#define c_isalpha(c) \
+  ({ int __c = (c); \
+     ((__c >= 'A' && __c <= 'Z') || (__c >= 'a' && __c <= 'z')); \
+   })
+#endif
+#endif
+
+#undef c_isblank
+#define c_isblank(c) \
+  ({ int __c = (c); \
+     (__c == ' ' || __c == '\t'); \
+   })
+
+#if C_CTYPE_ASCII
+#undef c_iscntrl
+#define c_iscntrl(c) \
+  ({ int __c = (c); \
+     ((__c & ~0x1f) == 0 || __c == 0x7f); \
+   })
+#endif
+
+#if C_CTYPE_CONSECUTIVE_DIGITS
+#undef c_isdigit
+#define c_isdigit(c) \
+  ({ int __c = (c); \
+     (__c >= '0' && __c <= '9'); \
+   })
+#endif
+
+#if C_CTYPE_CONSECUTIVE_LOWERCASE
+#undef c_islower
+#define c_islower(c) \
+  ({ int __c = (c); \
+     (__c >= 'a' && __c <= 'z'); \
+   })
+#endif
+
+#if C_CTYPE_ASCII
+#undef c_isgraph
+#define c_isgraph(c) \
+  ({ int __c = (c); \
+     (__c >= '!' && __c <= '~'); \
+   })
+#endif
+
+#if C_CTYPE_ASCII
+#undef c_isprint
+#define c_isprint(c) \
+  ({ int __c = (c); \
+     (__c >= ' ' && __c <= '~'); \
+   })
+#endif
+
+#if C_CTYPE_ASCII
+#undef c_ispunct
+#define c_ispunct(c) \
+  ({ int _c = (c); \
+     (c_isgraph (_c) && ! c_isalnum (_c)); \
+   })
+#endif
+
+#undef c_isspace
+#define c_isspace(c) \
+  ({ int __c = (c); \
+     (__c == ' ' || __c == '\t' \
+      || __c == '\n' || __c == '\v' || __c == '\f' || __c == '\r'); \
+   })
+
+#if C_CTYPE_CONSECUTIVE_UPPERCASE
+#undef c_isupper
+#define c_isupper(c) \
+  ({ int __c = (c); \
+     (__c >= 'A' && __c <= 'Z'); \
+   })
+#endif
+
+#if C_CTYPE_CONSECUTIVE_DIGITS \
+    && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+#if C_CTYPE_ASCII
+#undef c_isxdigit
+#define c_isxdigit(c) \
+  ({ int __c = (c); \
+     ((__c >= '0' && __c <= '9') \
+      || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'F')); \
+   })
+#else
+#undef c_isxdigit
+#define c_isxdigit(c) \
+  ({ int __c = (c); \
+     ((__c >= '0' && __c <= '9') \
+      || (__c >= 'A' && __c <= 'F') \
+      || (__c >= 'a' && __c <= 'f')); \
+   })
+#endif
+#endif
+
+#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
+#undef c_tolower
+#define c_tolower(c) \
+  ({ int __c = (c); \
+     (__c >= 'A' && __c <= 'Z' ? __c - 'A' + 'a' : __c); \
+   })
+#undef c_toupper
+#define c_toupper(c) \
+  ({ int __c = (c); \
+     (__c >= 'a' && __c <= 'z' ? __c - 'a' + 'A' : __c); \
+   })
+#endif
+
+#endif /* optimizing for speed */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* C_CTYPE_H */
diff --git a/gnu/canonicalize.c b/gnu/canonicalize.c
new file mode 100644 (file)
index 0000000..82a819e
--- /dev/null
@@ -0,0 +1,292 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Return the canonical absolute name of a given file.
+   Copyright (C) 1996-2010 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>
+
+#include "canonicalize.h"
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "areadlink.h"
+#include "file-set.h"
+#include "hash-triple.h"
+#include "pathmax.h"
+#include "xalloc.h"
+#include "xgetcwd.h"
+
+#ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT
+# define DOUBLE_SLASH_IS_DISTINCT_ROOT 0
+#endif
+
+#if !((HAVE_CANONICALIZE_FILE_NAME && FUNC_REALPATH_WORKS)      \
+      || GNULIB_CANONICALIZE_LGPL)
+/* Return the canonical absolute name of file NAME.  A canonical name
+   does not contain any `.', `..' components nor any repeated file name
+   separators ('/') or symlinks.  All components must exist.
+   The result is malloc'd.  */
+
+char *
+canonicalize_file_name (const char *name)
+{
+  return canonicalize_filename_mode (name, CAN_EXISTING);
+}
+#endif /* !HAVE_CANONICALIZE_FILE_NAME */
+
+/* Return true if we've already seen the triple, <FILENAME, dev, ino>.
+   If *HT is not initialized, initialize it.  */
+static bool
+seen_triple (Hash_table **ht, char const *filename, struct stat const *st)
+{
+  if (*ht == NULL)
+    {
+      size_t initial_capacity = 7;
+      *ht = hash_initialize (initial_capacity,
+                            NULL,
+                            triple_hash,
+                            triple_compare_ino_str,
+                            triple_free);
+      if (*ht == NULL)
+        xalloc_die ();
+    }
+
+  if (seen_file (*ht, filename, st))
+    return true;
+
+  record_file (*ht, filename, st);
+  return false;
+}
+
+/* Return the canonical absolute name of file NAME, while treating
+   missing elements according to CAN_MODE.  A canonical name
+   does not contain any `.', `..' components nor any repeated file name
+   separators ('/') or symlinks.  Whether components must exist
+   or not depends on canonicalize mode.  The result is malloc'd.  */
+
+char *
+canonicalize_filename_mode (const char *name, canonicalize_mode_t can_mode)
+{
+  char *rname, *dest, *extra_buf = NULL;
+  char const *start;
+  char const *end;
+  char const *rname_limit;
+  size_t extra_len = 0;
+  Hash_table *ht = NULL;
+  int saved_errno;
+
+  if (name == NULL)
+    {
+      errno = EINVAL;
+      return NULL;
+    }
+
+  if (name[0] == '\0')
+    {
+      errno = ENOENT;
+      return NULL;
+    }
+
+  if (name[0] != '/')
+    {
+      rname = xgetcwd ();
+      if (!rname)
+        return NULL;
+      dest = strchr (rname, '\0');
+      if (dest - rname < PATH_MAX)
+        {
+          char *p = xrealloc (rname, PATH_MAX);
+          dest = p + (dest - rname);
+          rname = p;
+          rname_limit = rname + PATH_MAX;
+        }
+      else
+        {
+          rname_limit = dest;
+        }
+    }
+  else
+    {
+      rname = xmalloc (PATH_MAX);
+      rname_limit = rname + PATH_MAX;
+      rname[0] = '/';
+      dest = rname + 1;
+      if (DOUBLE_SLASH_IS_DISTINCT_ROOT && name[1] == '/')
+        *dest++ = '/';
+    }
+
+  for (start = name; *start; start = end)
+    {
+      /* Skip sequence of multiple file name separators.  */
+      while (*start == '/')
+        ++start;
+
+      /* Find end of component.  */
+      for (end = start; *end && *end != '/'; ++end)
+        /* Nothing.  */;
+
+      if (end - start == 0)
+        break;
+      else if (end - start == 1 && start[0] == '.')
+        /* nothing */;
+      else if (end - start == 2 && start[0] == '.' && start[1] == '.')
+        {
+          /* Back up to previous component, ignore if at root already.  */
+          if (dest > rname + 1)
+            while ((--dest)[-1] != '/');
+          if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1
+              && *dest == '/')
+            dest++;
+        }
+      else
+        {
+          struct stat st;
+
+          if (dest[-1] != '/')
+            *dest++ = '/';
+
+          if (dest + (end - start) >= rname_limit)
+            {
+              ptrdiff_t dest_offset = dest - rname;
+              size_t new_size = rname_limit - rname;
+
+              if (end - start + 1 > PATH_MAX)
+                new_size += end - start + 1;
+              else
+                new_size += PATH_MAX;
+              rname = xrealloc (rname, new_size);
+              rname_limit = rname + new_size;
+
+              dest = rname + dest_offset;
+            }
+
+          dest = memcpy (dest, start, end - start);
+          dest += end - start;
+          *dest = '\0';
+
+          if (lstat (rname, &st) != 0)
+            {
+              saved_errno = errno;
+              if (can_mode == CAN_EXISTING)
+                goto error;
+              if (can_mode == CAN_ALL_BUT_LAST)
+                {
+                  if (end[strspn (end, "/")] || saved_errno != ENOENT)
+                    goto error;
+                  continue;
+                }
+              st.st_mode = 0;
+            }
+
+          if (S_ISLNK (st.st_mode))
+            {
+              char *buf;
+              size_t n, len;
+
+              /* Detect loops.  We cannot use the cycle-check module here,
+                 since it's actually possible to encounter the same symlink
+                 more than once in a given traversal.  However, encountering
+                 the same symlink,NAME pair twice does indicate a loop.  */
+              if (seen_triple (&ht, name, &st))
+                {
+                  if (can_mode == CAN_MISSING)
+                    continue;
+                  saved_errno = ELOOP;
+                  goto error;
+                }
+
+              buf = areadlink_with_size (rname, st.st_size);
+              if (!buf)
+                {
+                  if (can_mode == CAN_MISSING && errno != ENOMEM)
+                    continue;
+                  saved_errno = errno;
+                  goto error;
+                }
+
+              n = strlen (buf);
+              len = strlen (end);
+
+              if (!extra_len)
+                {
+                  extra_len =
+                    ((n + len + 1) > PATH_MAX) ? (n + len + 1) : PATH_MAX;
+                  extra_buf = xmalloc (extra_len);
+                }
+              else if ((n + len + 1) > extra_len)
+                {
+                  extra_len = n + len + 1;
+                  extra_buf = xrealloc (extra_buf, extra_len);
+                }
+
+              /* Careful here, end may be a pointer into extra_buf... */
+              memmove (&extra_buf[n], end, len + 1);
+              name = end = memcpy (extra_buf, buf, n);
+
+              if (buf[0] == '/')
+                {
+                  dest = rname + 1;     /* It's an absolute symlink */
+                  if (DOUBLE_SLASH_IS_DISTINCT_ROOT && buf[1] == '/')
+                    *dest++ = '/';
+                }
+              else
+                {
+                  /* Back up to previous component, ignore if at root
+                     already: */
+                  if (dest > rname + 1)
+                    while ((--dest)[-1] != '/');
+                  if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1
+                      && *dest == '/')
+                    dest++;
+                }
+
+              free (buf);
+            }
+          else
+            {
+              if (!S_ISDIR (st.st_mode) && *end && (can_mode != CAN_MISSING))
+                {
+                  saved_errno = ENOTDIR;
+                  goto error;
+                }
+            }
+        }
+    }
+  if (dest > rname + 1 && dest[-1] == '/')
+    --dest;
+  if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && *dest == '/')
+    dest++;
+  *dest = '\0';
+  if (rname_limit != dest + 1)
+    rname = xrealloc (rname, dest - rname + 1);
+
+  free (extra_buf);
+  if (ht)
+    hash_free (ht);
+  return rname;
+
+error:
+  free (extra_buf);
+  free (rname);
+  if (ht)
+    hash_free (ht);
+  errno = saved_errno;
+  return NULL;
+}
diff --git a/gnu/canonicalize.h b/gnu/canonicalize.h
new file mode 100644 (file)
index 0000000..06bf3c9
--- /dev/null
@@ -0,0 +1,43 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Return the canonical absolute name of a given file.
+   Copyright (C) 1996-2007, 2009-2010 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 CANONICALIZE_H_
+# define CANONICALIZE_H_
+
+#include <stdlib.h> /* for canonicalize_file_name */
+
+enum canonicalize_mode_t
+  {
+    /* All components must exist.  */
+    CAN_EXISTING = 0,
+
+    /* All components excluding last one must exist.  */
+    CAN_ALL_BUT_LAST = 1,
+
+    /* No requirements on components existence.  */
+    CAN_MISSING = 2
+  };
+typedef enum canonicalize_mode_t canonicalize_mode_t;
+
+/* Return a malloc'd string containing the canonical absolute name of
+   the named file.  This acts like canonicalize_file_name, except that
+   whether components must exist depends on the canonicalize_mode_t
+   argument.  */
+char *canonicalize_filename_mode (const char *, canonicalize_mode_t);
+
+#endif /* !CANONICALIZE_H_ */
diff --git a/gnu/chdir-long.c b/gnu/chdir-long.c
new file mode 100644 (file)
index 0000000..5050b1f
--- /dev/null
@@ -0,0 +1,268 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* provide a chdir function that tries not to fail due to ENAMETOOLONG
+   Copyright (C) 2004-2010 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 */
+
+#include <config.h>
+
+#include "chdir-long.h"
+
+#include <assert.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <string.h>
+#include <stdio.h>
+
+#ifndef PATH_MAX
+# error "compile this file only if your system defines PATH_MAX"
+#endif
+
+/* The results of openat() in this file are not leaked to any
+   single-threaded code that could use stdio.
+   FIXME - if the kernel ever adds support for multi-thread safety for
+   avoiding standard fds, then we should use openat_safer.  */
+
+struct cd_buf
+{
+  int fd;
+};
+
+static inline void
+cdb_init (struct cd_buf *cdb)
+{
+  cdb->fd = AT_FDCWD;
+}
+
+static inline int
+cdb_fchdir (struct cd_buf const *cdb)
+{
+  return fchdir (cdb->fd);
+}
+
+static inline void
+cdb_free (struct cd_buf const *cdb)
+{
+  if (0 <= cdb->fd)
+    {
+      bool close_fail = close (cdb->fd);
+      assert (! close_fail);
+    }
+}
+
+/* Given a file descriptor of an open directory (or AT_FDCWD), CDB->fd,
+   try to open the CDB->fd-relative directory, DIR.  If the open succeeds,
+   update CDB->fd with the resulting descriptor, close the incoming file
+   descriptor, and return zero.  Upon failure, return -1 and set errno.  */
+static int
+cdb_advance_fd (struct cd_buf *cdb, char const *dir)
+{
+  int new_fd = openat (cdb->fd, dir,
+                       O_RDONLY | O_DIRECTORY | O_NOCTTY | O_NONBLOCK);
+  if (new_fd < 0)
+    return -1;
+
+  cdb_free (cdb);
+  cdb->fd = new_fd;
+
+  return 0;
+}
+
+/* Return a pointer to the first non-slash in S.  */
+static inline char *
+find_non_slash (char const *s)
+{
+  size_t n_slash = strspn (s, "/");
+  return (char *) s + n_slash;
+}
+
+/* This is a function much like chdir, but without the PATH_MAX limitation
+   on the length of the directory name.  A significant difference is that
+   it must be able to modify (albeit only temporarily) the directory
+   name.  It handles an arbitrarily long directory name by operating
+   on manageable portions of the name.  On systems without the openat
+   syscall, this means changing the working directory to more and more
+   `distant' points along the long directory name and then restoring
+   the working directory.  If any of those attempts to save or restore
+   the working directory fails, this function exits nonzero.
+
+   Note that this function may still fail with errno == ENAMETOOLONG, but
+   only if the specified directory name contains a component that is long
+   enough to provoke such a failure all by itself (e.g. if the component
+   has length PATH_MAX or greater on systems that define PATH_MAX).  */
+
+int
+chdir_long (char *dir)
+{
+  int e = chdir (dir);
+  if (e == 0 || errno != ENAMETOOLONG)
+    return e;
+
+  {
+    size_t len = strlen (dir);
+    char *dir_end = dir + len;
+    struct cd_buf cdb;
+    size_t n_leading_slash;
+
+    cdb_init (&cdb);
+
+    /* If DIR is the empty string, then the chdir above
+       must have failed and set errno to ENOENT.  */
+    assert (0 < len);
+    assert (PATH_MAX <= len);
+
+    /* Count leading slashes.  */
+    n_leading_slash = strspn (dir, "/");
+
+    /* Handle any leading slashes as well as any name that matches
+       the regular expression, m!^//hostname[/]*! .  Handling this
+       prefix separately usually results in a single additional
+       cdb_advance_fd call, but it's worthwhile, since it makes the
+       code in the following loop cleaner.  */
+    if (n_leading_slash == 2)
+      {
+        int err;
+        /* Find next slash.
+           We already know that dir[2] is neither a slash nor '\0'.  */
+        char *slash = memchr (dir + 3, '/', dir_end - (dir + 3));
+        if (slash == NULL)
+          {
+            errno = ENAMETOOLONG;
+            return -1;
+          }
+        *slash = '\0';
+        err = cdb_advance_fd (&cdb, dir);
+        *slash = '/';
+        if (err != 0)
+          goto Fail;
+        dir = find_non_slash (slash + 1);
+      }
+    else if (n_leading_slash)
+      {
+        if (cdb_advance_fd (&cdb, "/") != 0)
+          goto Fail;
+        dir += n_leading_slash;
+      }
+
+    assert (*dir != '/');
+    assert (dir <= dir_end);
+
+    while (PATH_MAX <= dir_end - dir)
+      {
+        int err;
+        /* Find a slash that is PATH_MAX or fewer bytes away from dir.
+           I.e. see if there is a slash that will give us a name of
+           length PATH_MAX-1 or less.  */
+        char *slash = memrchr (dir, '/', PATH_MAX);
+        if (slash == NULL)
+          {
+            errno = ENAMETOOLONG;
+            return -1;
+          }
+
+        *slash = '\0';
+        assert (slash - dir < PATH_MAX);
+        err = cdb_advance_fd (&cdb, dir);
+        *slash = '/';
+        if (err != 0)
+          goto Fail;
+
+        dir = find_non_slash (slash + 1);
+      }
+
+    if (dir < dir_end)
+      {
+        if (cdb_advance_fd (&cdb, dir) != 0)
+          goto Fail;
+      }
+
+    if (cdb_fchdir (&cdb) != 0)
+      goto Fail;
+
+    cdb_free (&cdb);
+    return 0;
+
+   Fail:
+    {
+      int saved_errno = errno;
+      cdb_free (&cdb);
+      errno = saved_errno;
+      return -1;
+    }
+  }
+}
+
+#if TEST_CHDIR
+
+# include "closeout.h"
+# include "error.h"
+
+char *program_name;
+
+int
+main (int argc, char *argv[])
+{
+  char *line = NULL;
+  size_t n = 0;
+  int len;
+
+  program_name = argv[0];
+  atexit (close_stdout);
+
+  len = getline (&line, &n, stdin);
+  if (len < 0)
+    {
+      int saved_errno = errno;
+      if (feof (stdin))
+        exit (0);
+
+      error (EXIT_FAILURE, saved_errno,
+             "reading standard input");
+    }
+  else if (len == 0)
+    exit (0);
+
+  if (line[len-1] == '\n')
+    line[len-1] = '\0';
+
+  if (chdir_long (line) != 0)
+    error (EXIT_FAILURE, errno,
+           "chdir_long failed: %s", line);
+
+  if (argc <= 1)
+    {
+      /* Using `pwd' here makes sense only if it is a robust implementation,
+         like the one in coreutils after the 2004-04-19 changes.  */
+      char const *cmd = "pwd";
+      execlp (cmd, (char *) NULL);
+      error (EXIT_FAILURE, errno, "%s", cmd);
+    }
+
+  fclose (stdin);
+  fclose (stderr);
+
+  exit (EXIT_SUCCESS);
+}
+#endif
+
+/*
+Local Variables:
+compile-command: "gcc -DTEST_CHDIR=1 -g -O -W -Wall chdir-long.c libcoreutils.a"
+End:
+*/
diff --git a/gnu/chdir-long.h b/gnu/chdir-long.h
new file mode 100644 (file)
index 0000000..286b04c
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* provide a chdir function that tries not to fail due to ENAMETOOLONG
+   Copyright (C) 2004-2005, 2009-2010 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.  */
+
+#include <unistd.h>
+#include <limits.h>
+
+#ifndef PATH_MAX
+# ifdef MAXPATHLEN
+#  define PATH_MAX MAXPATHLEN
+# endif
+#endif
+
+/* On systems without PATH_MAX, presume that chdir accepts
+   arbitrarily long directory names.  */
+#ifndef PATH_MAX
+# define chdir_long(Dir) chdir (Dir)
+#else
+int chdir_long (char *dir);
+#endif
diff --git a/gnu/chown.c b/gnu/chown.c
new file mode 100644 (file)
index 0000000..678e0f7
--- /dev/null
@@ -0,0 +1,158 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* provide consistent interface to chown for systems that don't interpret
+   an ID of -1 as meaning `don't change the corresponding ID'.
+
+   Copyright (C) 1997, 2004-2007, 2009-2010 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 */
+
+#include <config.h>
+
+/* Specification.  */
+#include <unistd.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdbool.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#if !HAVE_CHOWN
+
+/* Simple stub that always fails with ENOSYS, for mingw.  */
+int
+chown (const char *file _GL_UNUSED, uid_t uid _GL_UNUSED,
+       gid_t gid _GL_UNUSED)
+{
+  errno = ENOSYS;
+  return -1;
+}
+
+#else /* HAVE_CHOWN */
+
+/* Below we refer to the system's chown().  */
+# undef chown
+
+/* The results of open() in this file are not used with fchdir,
+   therefore save some unnecessary work in fchdir.c.  */
+# undef open
+# undef close
+
+/* Provide a more-closely POSIX-conforming version of chown on
+   systems with one or both of the following problems:
+   - chown doesn't treat an ID of -1 as meaning
+   `don't change the corresponding ID'.
+   - chown doesn't dereference symlinks.  */
+
+int
+rpl_chown (const char *file, uid_t uid, gid_t gid)
+{
+  struct stat st;
+  bool stat_valid = false;
+  int result;
+
+# if CHOWN_CHANGE_TIME_BUG
+  if (gid != (gid_t) -1 || uid != (uid_t) -1)
+    {
+      if (stat (file, &st))
+        return -1;
+      stat_valid = true;
+    }
+# endif
+
+# if CHOWN_FAILS_TO_HONOR_ID_OF_NEGATIVE_ONE
+  if (gid == (gid_t) -1 || uid == (uid_t) -1)
+    {
+      /* Stat file to get id(s) that should remain unchanged.  */
+      if (!stat_valid && stat (file, &st))
+        return -1;
+      if (gid == (gid_t) -1)
+        gid = st.st_gid;
+      if (uid == (uid_t) -1)
+        uid = st.st_uid;
+    }
+# endif
+
+# if CHOWN_MODIFIES_SYMLINK
+  {
+    /* Handle the case in which the system-supplied chown function
+       does *not* follow symlinks.  Instead, it changes permissions
+       on the symlink itself.  To work around that, we open the
+       file (but this can fail due to lack of read or write permission) and
+       use fchown on the resulting descriptor.  */
+    int open_flags = O_NONBLOCK | O_NOCTTY;
+    int fd = open (file, O_RDONLY | open_flags);
+    if (0 <= fd
+        || (errno == EACCES
+            && 0 <= (fd = open (file, O_WRONLY | open_flags))))
+      {
+        int saved_errno;
+        bool fchown_socket_failure;
+
+        result = fchown (fd, uid, gid);
+        saved_errno = errno;
+
+        /* POSIX says fchown can fail with errno == EINVAL on sockets
+           and pipes, so fall back on chown in that case.  */
+        fchown_socket_failure =
+          (result != 0 && saved_errno == EINVAL
+           && fstat (fd, &st) == 0
+           && (S_ISFIFO (st.st_mode) || S_ISSOCK (st.st_mode)));
+
+        close (fd);
+
+        if (! fchown_socket_failure)
+          {
+            errno = saved_errno;
+            return result;
+          }
+      }
+    else if (errno != EACCES)
+      return -1;
+  }
+# endif
+
+# if CHOWN_TRAILING_SLASH_BUG
+  if (!stat_valid)
+    {
+      size_t len = strlen (file);
+      if (len && file[len - 1] == '/' && stat (file, &st))
+        return -1;
+    }
+# endif
+
+  result = chown (file, uid, gid);
+
+# if CHOWN_CHANGE_TIME_BUG
+  if (result == 0 && stat_valid
+      && (uid == st.st_uid || uid == (uid_t) -1)
+      && (gid == st.st_gid || gid == (gid_t) -1))
+    {
+      /* No change in ownership, but at least one argument was not -1,
+         so we are required to update ctime.  Since chown succeeded,
+         we assume that chmod will do likewise.  Fortunately, on all
+         known systems where a 'no-op' chown skips the ctime update, a
+         'no-op' chmod still does the trick.  */
+      result = chmod (file, st.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO
+                                          | S_ISUID | S_ISGID | S_ISVTX));
+    }
+# endif
+
+  return result;
+}
+
+#endif /* HAVE_CHOWN */
diff --git a/gnu/close-hook.c b/gnu/close-hook.c
new file mode 100644 (file)
index 0000000..1d569c0
--- /dev/null
@@ -0,0 +1,93 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Hook for making the close() function extensible.
+   Copyright (C) 2009, 2010 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
+   Lesser 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 "close-hook.h"
+
+#include <stdlib.h>
+#include <unistd.h>
+
+#undef close
+
+
+/* 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 close_hook anchor = { &anchor, &anchor, NULL };
+
+int
+execute_close_hooks (int fd, const struct close_hook *remaining_list)
+{
+  if (remaining_list == &anchor)
+    /* End of list reached.  */
+    return close (fd);
+  else
+    return remaining_list->private_fn (fd, remaining_list->private_next);
+}
+
+int
+execute_all_close_hooks (int fd)
+{
+  return execute_close_hooks (fd, anchor.private_next);
+}
+
+void
+register_close_hook (close_hook_fn hook, struct close_hook *link)
+{
+  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_fn = hook;
+      anchor.private_next->private_prev = link;
+      anchor.private_next = link;
+    }
+  else
+    {
+      /* The link is already in use.  */
+      if (link->private_fn != hook)
+        abort ();
+    }
+}
+
+void
+unregister_close_hook (struct close_hook *link)
+{
+  struct close_hook *next = link->private_next;
+  struct close_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_fn = NULL;
+    }
+}
+
+#endif
diff --git a/gnu/close-hook.h b/gnu/close-hook.h
new file mode 100644 (file)
index 0000000..acc4c6a
--- /dev/null
@@ -0,0 +1,74 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Hook for making the close() function extensible.
+   Copyright (C) 2009, 2010 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
+   Lesser 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 CLOSE_HOOK_H
+#define CLOSE_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
+
+
+/* An element of the list of close hooks.
+   The fields of this structure are considered private.  */
+struct close_hook
+{
+  /* Doubly linked list.  */
+  struct close_hook *private_next;
+  struct close_hook *private_prev;
+  /* Function that treats the types of FD that it knows about and calls
+     execute_close_hooks (FD, REMAINING_LIST) as a fallback.  */
+  int (*private_fn) (int fd, const struct close_hook *remaining_list);
+};
+
+/* This type of function closes FD, applying special knowledge for the FD
+   types it knows about, and calls execute_close_hooks (FD, REMAINING_LIST)
+   for the other FD types.  */
+typedef int (*close_hook_fn) (int fd, const struct close_hook *remaining_list);
+
+/* Execute the close hooks in REMAINING_LIST.
+   Return 0 or -1, like close() would do.  */
+extern int execute_close_hooks (int fd, const struct close_hook *remaining_list);
+
+/* Execute all close hooks.
+   Return 0 or -1, like close() would do.  */
+extern int execute_all_close_hooks (int fd);
+
+/* Add a function to the list of close hooks.
+   The LINK variable points to a piece of memory which is guaranteed to be
+   accessible until the corresponding call to unregister_close_hook.  */
+extern void register_close_hook (close_hook_fn hook, struct close_hook *link);
+
+/* Removes a function from the list of close hooks.  */
+extern void unregister_close_hook (struct close_hook *link);
+
+
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CLOSE_HOOK_H */
diff --git a/gnu/close-stream.c b/gnu/close-stream.c
new file mode 100644 (file)
index 0000000..306d901
--- /dev/null
@@ -0,0 +1,80 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Close a stream, with nicer error checking than fclose's.
+
+   Copyright (C) 1998-2002, 2004, 2006-2010 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>
+
+#include "close-stream.h"
+
+#include <errno.h>
+#include <stdbool.h>
+
+#include "fpending.h"
+
+#if USE_UNLOCKED_IO
+# include "unlocked-io.h"
+#endif
+
+/* Close STREAM.  Return 0 if successful, EOF (setting errno)
+   otherwise.  A failure might set errno to 0 if the error number
+   cannot be determined.
+
+   A failure with errno set to EPIPE may or may not indicate an error
+   situation worth signaling to the user.  See the documentation of the
+   close_stdout_set_ignore_EPIPE function for details.
+
+   If a program writes *anything* to STREAM, that program should close
+   STREAM and make sure that it succeeds before exiting.  Otherwise,
+   suppose that you go to the extreme of checking the return status
+   of every function that does an explicit write to STREAM.  The last
+   printf can succeed in writing to the internal stream buffer, and yet
+   the fclose(STREAM) could still fail (due e.g., to a disk full error)
+   when it tries to write out that buffered data.  Thus, you would be
+   left with an incomplete output file and the offending program would
+   exit successfully.  Even calling fflush is not always sufficient,
+   since some file systems (NFS and CODA) buffer written/flushed data
+   until an actual close call.
+
+   Besides, it's wasteful to check the return value from every call
+   that writes to STREAM -- just let the internal stream state record
+   the failure.  That's what the ferror test is checking below.  */
+
+int
+close_stream (FILE *stream)
+{
+  bool some_pending = (__fpending (stream) != 0);
+  bool prev_fail = (ferror (stream) != 0);
+  bool fclose_fail = (fclose (stream) != 0);
+
+  /* Return an error indication if there was a previous failure or if
+     fclose failed, with one exception: ignore an fclose failure if
+     there was no previous error, no data remains to be flushed, and
+     fclose failed with EBADF.  That can happen when a program like cp
+     is invoked like this `cp a b >&-' (i.e., with standard output
+     closed) and doesn't generate any output (hence no previous error
+     and nothing to be flushed).  */
+
+  if (prev_fail || (fclose_fail && (some_pending || errno != EBADF)))
+    {
+      if (! fclose_fail)
+        errno = 0;
+      return EOF;
+    }
+
+  return 0;
+}
diff --git a/gnu/close-stream.h b/gnu/close-stream.h
new file mode 100644 (file)
index 0000000..d8cad17
--- /dev/null
@@ -0,0 +1,4 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+#include <stdio.h>
+int close_stream (FILE *stream);
diff --git a/gnu/close.c b/gnu/close.c
new file mode 100644 (file)
index 0000000..be9b965
--- /dev/null
@@ -0,0 +1,44 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* close replacement.
+   Copyright (C) 2008-2010 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 "close-hook.h"
+
+/* Override close() to call into other gnulib modules.  */
+
+int
+rpl_close (int fd)
+#undef close
+{
+#if WINDOWS_SOCKETS
+  int retval = execute_all_close_hooks (fd);
+#else
+  int retval = close (fd);
+#endif
+
+#if REPLACE_FCHDIR
+  if (retval >= 0)
+    _gl_unregister_fd (fd);
+#endif
+
+  return retval;
+}
diff --git a/gnu/closeout.c b/gnu/closeout.c
new file mode 100644 (file)
index 0000000..1915c79
--- /dev/null
@@ -0,0 +1,126 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Close standard output and standard error, exiting with a diagnostic on error.
+
+   Copyright (C) 1998-2002, 2004, 2006, 2008-2010 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>
+
+#include "closeout.h"
+
+#include <errno.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
+#include "close-stream.h"
+#include "error.h"
+#include "exitfail.h"
+#include "quotearg.h"
+
+static const char *file_name;
+
+/* Set the file name to be reported in the event an error is detected
+   by close_stdout.  */
+void
+close_stdout_set_file_name (const char *file)
+{
+  file_name = file;
+}
+
+static bool ignore_EPIPE /* = false */;
+
+/* Specify the reaction to an EPIPE error during the closing of stdout:
+     - If ignore = true, it shall be ignored.
+     - If ignore = false, it shall evoke a diagnostic, along with a nonzero
+       exit status.
+   The default is ignore = false.
+
+   This setting matters only if the SIGPIPE signal is ignored (i.e. its
+   handler set to SIG_IGN) or blocked.  Only particular programs need to
+   temporarily ignore SIGPIPE.  If SIGPIPE is ignored or blocked because
+   it was ignored or blocked in the parent process when it created the
+   child process, it usually is a bug in the parent process: It is bad
+   practice to have SIGPIPE ignored or blocked while creating a child
+   process.
+
+   EPIPE occurs when writing to a pipe or socket that has no readers now,
+   when SIGPIPE is ignored or blocked.
+
+   The ignore = false setting is suitable for a scenario where it is normally
+   guaranteed that the pipe writer terminates before the pipe reader.  In
+   this case, an EPIPE is an indication of a premature termination of the
+   pipe reader and should lead to a diagnostic and a nonzero exit status.
+
+   The ignore = true setting is suitable for a scenario where you don't know
+   ahead of time whether the pipe writer or the pipe reader will terminate
+   first.  In this case, an EPIPE is an indication that the pipe writer can
+   stop doing useless write() calls; this is what close_stdout does anyway.
+   EPIPE is part of the normal pipe/socket shutdown protocol in this case,
+   and should not lead to a diagnostic message.  */
+
+void
+close_stdout_set_ignore_EPIPE (bool ignore)
+{
+  ignore_EPIPE = ignore;
+}
+
+/* Close standard output.  On error, issue a diagnostic and _exit
+   with status 'exit_failure'.
+
+   Also close standard error.  On error, _exit with status 'exit_failure'.
+
+   Since close_stdout is commonly registered via 'atexit', POSIX
+   and the C standard both say that it should not call 'exit',
+   because the behavior is undefined if 'exit' is called more than
+   once.  So it calls '_exit' instead of 'exit'.  If close_stdout
+   is registered via atexit before other functions are registered,
+   the other functions can act before this _exit is invoked.
+
+   Applications that use close_stdout should flush any streams
+   other than stdout and stderr before exiting, since the call to
+   _exit will bypass other buffer flushing.  Applications should
+   be flushing and closing other streams anyway, to check for I/O
+   errors.  Also, applications should not use tmpfile, since _exit
+   can bypass the removal of these files.
+
+   It's important to detect such failures and exit nonzero because many
+   tools (most notably `make' and other build-management systems) depend
+   on being able to detect failure in other tools via their exit status.  */
+
+void
+close_stdout (void)
+{
+  if (close_stream (stdout) != 0
+      && !(ignore_EPIPE && errno == EPIPE))
+    {
+      char const *write_error = _("write error");
+      if (file_name)
+        error (0, errno, "%s: %s", quotearg_colon (file_name),
+               write_error);
+      else
+        error (0, errno, "%s", write_error);
+
+      _exit (exit_failure);
+    }
+
+   if (close_stream (stderr) != 0)
+     _exit (exit_failure);
+}
diff --git a/gnu/closeout.h b/gnu/closeout.h
new file mode 100644 (file)
index 0000000..1216ba4
--- /dev/null
@@ -0,0 +1,38 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Close standard output and standard error.
+
+   Copyright (C) 1998, 2000, 2003-2004, 2006, 2008-2010 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 CLOSEOUT_H
+# define CLOSEOUT_H 1
+
+# include <stdbool.h>
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+void close_stdout_set_file_name (const char *file);
+void close_stdout_set_ignore_EPIPE (bool ignore);
+void close_stdout (void);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
diff --git a/gnu/config.charset b/gnu/config.charset
new file mode 100644 (file)
index 0000000..2959df8
--- /dev/null
@@ -0,0 +1,683 @@
+#! /bin/sh
+# Output a system dependent table of character encoding aliases.
+#
+#   Copyright (C) 2000-2004, 2006-2010 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, write to the Free Software Foundation,
+#   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# The table consists of lines of the form
+#    ALIAS  CANONICAL
+#
+# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
+# ALIAS is compared in a case sensitive way.
+#
+# CANONICAL is the GNU canonical name for this character encoding.
+# It must be an encoding supported by libiconv. Support by GNU libc is
+# also desirable. CANONICAL is case insensitive. Usually an upper case
+# MIME charset name is preferred.
+# The current list of GNU canonical charset names is as follows.
+#
+#       name              MIME?             used by which systems
+#   ASCII, ANSI_X3.4-1968       glibc solaris freebsd netbsd darwin
+#   ISO-8859-1              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin
+#   ISO-8859-2              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin
+#   ISO-8859-3              Y   glibc solaris
+#   ISO-8859-4              Y   osf solaris freebsd netbsd openbsd darwin
+#   ISO-8859-5              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin
+#   ISO-8859-6              Y   glibc aix hpux solaris
+#   ISO-8859-7              Y   glibc aix hpux irix osf solaris netbsd openbsd darwin
+#   ISO-8859-8              Y   glibc aix hpux osf solaris
+#   ISO-8859-9              Y   glibc aix hpux irix osf solaris darwin
+#   ISO-8859-13                 glibc netbsd openbsd darwin
+#   ISO-8859-14                 glibc
+#   ISO-8859-15                 glibc aix osf solaris freebsd netbsd openbsd darwin
+#   KOI8-R                  Y   glibc solaris freebsd netbsd openbsd darwin
+#   KOI8-U                  Y   glibc freebsd netbsd openbsd darwin
+#   KOI8-T                      glibc
+#   CP437                       dos
+#   CP775                       dos
+#   CP850                       aix osf dos
+#   CP852                       dos
+#   CP855                       dos
+#   CP856                       aix
+#   CP857                       dos
+#   CP861                       dos
+#   CP862                       dos
+#   CP864                       dos
+#   CP865                       dos
+#   CP866                       freebsd netbsd openbsd darwin dos
+#   CP869                       dos
+#   CP874                       woe32 dos
+#   CP922                       aix
+#   CP932                       aix woe32 dos
+#   CP943                       aix
+#   CP949                       osf darwin woe32 dos
+#   CP950                       woe32 dos
+#   CP1046                      aix
+#   CP1124                      aix
+#   CP1125                      dos
+#   CP1129                      aix
+#   CP1131                      darwin
+#   CP1250                      woe32
+#   CP1251                      glibc solaris netbsd openbsd darwin woe32
+#   CP1252                      aix woe32
+#   CP1253                      woe32
+#   CP1254                      woe32
+#   CP1255                      glibc woe32
+#   CP1256                      woe32
+#   CP1257                      woe32
+#   GB2312                  Y   glibc aix hpux irix solaris freebsd netbsd darwin
+#   EUC-JP                  Y   glibc aix hpux irix osf solaris freebsd netbsd darwin
+#   EUC-KR                  Y   glibc aix hpux irix osf solaris freebsd netbsd darwin
+#   EUC-TW                      glibc aix hpux irix osf solaris netbsd
+#   BIG5                    Y   glibc aix hpux osf solaris freebsd netbsd darwin
+#   BIG5-HKSCS                  glibc solaris darwin
+#   GBK                         glibc aix osf solaris darwin woe32 dos
+#   GB18030                     glibc solaris netbsd darwin
+#   SHIFT_JIS               Y   hpux osf solaris freebsd netbsd darwin
+#   JOHAB                       glibc solaris woe32
+#   TIS-620                     glibc aix hpux osf solaris
+#   VISCII                  Y   glibc
+#   TCVN5712-1                  glibc
+#   ARMSCII-8                   glibc darwin
+#   GEORGIAN-PS                 glibc
+#   PT154                       glibc
+#   HP-ROMAN8                   hpux
+#   HP-ARABIC8                  hpux
+#   HP-GREEK8                   hpux
+#   HP-HEBREW8                  hpux
+#   HP-TURKISH8                 hpux
+#   HP-KANA8                    hpux
+#   DEC-KANJI                   osf
+#   DEC-HANYU                   osf
+#   UTF-8                   Y   glibc aix hpux osf solaris netbsd darwin
+#
+# Note: Names which are not marked as being a MIME name should not be used in
+# Internet protocols for information interchange (mail, news, etc.).
+#
+# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
+# must understand both names and treat them as equivalent.
+#
+# The first argument passed to this file is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+
+host="$1"
+os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
+echo "# This file contains a table of character encoding aliases,"
+echo "# suitable for operating system '${os}'."
+echo "# It was automatically generated from config.charset."
+# List of references, updated during installation:
+echo "# Packages using this file: "
+case "$os" in
+  linux-gnulibc1*)
+    # Linux libc5 doesn't have nl_langinfo(CODESET); therefore
+    # localcharset.c falls back to using the full locale name
+    # from the environment variables.
+    echo "C ASCII"
+    echo "POSIX ASCII"
+    for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \
+             en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \
+             en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \
+             es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \
+             et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \
+             fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \
+             it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \
+             sv_FI sv_SE; do
+      echo "$l ISO-8859-1"
+      echo "$l.iso-8859-1 ISO-8859-1"
+      echo "$l.iso-8859-15 ISO-8859-15"
+      echo "$l.iso-8859-15@euro ISO-8859-15"
+      echo "$l@euro ISO-8859-15"
+      echo "$l.cp-437 CP437"
+      echo "$l.cp-850 CP850"
+      echo "$l.cp-1252 CP1252"
+      echo "$l.cp-1252@euro CP1252"
+      #echo "$l.atari-st ATARI-ST" # not a commonly used encoding
+      echo "$l.utf-8 UTF-8"
+      echo "$l.utf-8@euro UTF-8"
+    done
+    for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \
+             sl_SI sr sr_CS sr_YU; do
+      echo "$l ISO-8859-2"
+      echo "$l.iso-8859-2 ISO-8859-2"
+      echo "$l.cp-852 CP852"
+      echo "$l.cp-1250 CP1250"
+      echo "$l.utf-8 UTF-8"
+    done
+    for l in mk mk_MK ru ru_RU; do
+      echo "$l ISO-8859-5"
+      echo "$l.iso-8859-5 ISO-8859-5"
+      echo "$l.koi8-r KOI8-R"
+      echo "$l.cp-866 CP866"
+      echo "$l.cp-1251 CP1251"
+      echo "$l.utf-8 UTF-8"
+    done
+    for l in ar ar_SA; do
+      echo "$l ISO-8859-6"
+      echo "$l.iso-8859-6 ISO-8859-6"
+      echo "$l.cp-864 CP864"
+      #echo "$l.cp-868 CP868" # not a commonly used encoding
+      echo "$l.cp-1256 CP1256"
+      echo "$l.utf-8 UTF-8"
+    done
+    for l in el el_GR gr gr_GR; do
+      echo "$l ISO-8859-7"
+      echo "$l.iso-8859-7 ISO-8859-7"
+      echo "$l.cp-869 CP869"
+      echo "$l.cp-1253 CP1253"
+      echo "$l.cp-1253@euro CP1253"
+      echo "$l.utf-8 UTF-8"
+      echo "$l.utf-8@euro UTF-8"
+    done
+    for l in he he_IL iw iw_IL; do
+      echo "$l ISO-8859-8"
+      echo "$l.iso-8859-8 ISO-8859-8"
+      echo "$l.cp-862 CP862"
+      echo "$l.cp-1255 CP1255"
+      echo "$l.utf-8 UTF-8"
+    done
+    for l in tr tr_TR; do
+      echo "$l ISO-8859-9"
+      echo "$l.iso-8859-9 ISO-8859-9"
+      echo "$l.cp-857 CP857"
+      echo "$l.cp-1254 CP1254"
+      echo "$l.utf-8 UTF-8"
+    done
+    for l in lt lt_LT lv lv_LV; do
+      #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name
+      echo "$l ISO-8859-13"
+    done
+    for l in ru_UA uk uk_UA; do
+      echo "$l KOI8-U"
+    done
+    for l in zh zh_CN; do
+      #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name
+      echo "$l GB2312"
+    done
+    for l in ja ja_JP ja_JP.EUC; do
+      echo "$l EUC-JP"
+    done
+    for l in ko ko_KR; do
+      echo "$l EUC-KR"
+    done
+    for l in th th_TH; do
+      echo "$l TIS-620"
+    done
+    for l in fa fa_IR; do
+      #echo "$l ISIRI-3342" # a broken encoding
+      echo "$l.utf-8 UTF-8"
+    done
+    ;;
+  linux* | *-gnu*)
+    # With glibc-2.1 or newer, we don't need any canonicalization,
+    # because glibc has iconv and both glibc and libiconv support all
+    # GNU canonical names directly. Therefore, the Makefile does not
+    # need to install the alias file at all.
+    # The following applies only to glibc-2.0.x and older libcs.
+    echo "ISO_646.IRV:1983 ASCII"
+    ;;
+  aix*)
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-6 ISO-8859-6"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-8 ISO-8859-8"
+    echo "ISO8859-9 ISO-8859-9"
+    echo "ISO8859-15 ISO-8859-15"
+    echo "IBM-850 CP850"
+    echo "IBM-856 CP856"
+    echo "IBM-921 ISO-8859-13"
+    echo "IBM-922 CP922"
+    echo "IBM-932 CP932"
+    echo "IBM-943 CP943"
+    echo "IBM-1046 CP1046"
+    echo "IBM-1124 CP1124"
+    echo "IBM-1129 CP1129"
+    echo "IBM-1252 CP1252"
+    echo "IBM-eucCN GB2312"
+    echo "IBM-eucJP EUC-JP"
+    echo "IBM-eucKR EUC-KR"
+    echo "IBM-eucTW EUC-TW"
+    echo "big5 BIG5"
+    echo "GBK GBK"
+    echo "TIS-620 TIS-620"
+    echo "UTF-8 UTF-8"
+    ;;
+  hpux*)
+    echo "iso88591 ISO-8859-1"
+    echo "iso88592 ISO-8859-2"
+    echo "iso88595 ISO-8859-5"
+    echo "iso88596 ISO-8859-6"
+    echo "iso88597 ISO-8859-7"
+    echo "iso88598 ISO-8859-8"
+    echo "iso88599 ISO-8859-9"
+    echo "iso885915 ISO-8859-15"
+    echo "roman8 HP-ROMAN8"
+    echo "arabic8 HP-ARABIC8"
+    echo "greek8 HP-GREEK8"
+    echo "hebrew8 HP-HEBREW8"
+    echo "turkish8 HP-TURKISH8"
+    echo "kana8 HP-KANA8"
+    echo "tis620 TIS-620"
+    echo "big5 BIG5"
+    echo "eucJP EUC-JP"
+    echo "eucKR EUC-KR"
+    echo "eucTW EUC-TW"
+    echo "hp15CN GB2312"
+    #echo "ccdc ?" # what is this?
+    echo "SJIS SHIFT_JIS"
+    echo "utf8 UTF-8"
+    ;;
+  irix*)
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-9 ISO-8859-9"
+    echo "eucCN GB2312"
+    echo "eucJP EUC-JP"
+    echo "eucKR EUC-KR"
+    echo "eucTW EUC-TW"
+    ;;
+  osf*)
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-4 ISO-8859-4"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-8 ISO-8859-8"
+    echo "ISO8859-9 ISO-8859-9"
+    echo "ISO8859-15 ISO-8859-15"
+    echo "cp850 CP850"
+    echo "big5 BIG5"
+    echo "dechanyu DEC-HANYU"
+    echo "dechanzi GB2312"
+    echo "deckanji DEC-KANJI"
+    echo "deckorean EUC-KR"
+    echo "eucJP EUC-JP"
+    echo "eucKR EUC-KR"
+    echo "eucTW EUC-TW"
+    echo "GBK GBK"
+    echo "KSC5601 CP949"
+    echo "sdeckanji EUC-JP"
+    echo "SJIS SHIFT_JIS"
+    echo "TACTIS TIS-620"
+    echo "UTF-8 UTF-8"
+    ;;
+  solaris*)
+    echo "646 ASCII"
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-3 ISO-8859-3"
+    echo "ISO8859-4 ISO-8859-4"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-6 ISO-8859-6"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-8 ISO-8859-8"
+    echo "ISO8859-9 ISO-8859-9"
+    echo "ISO8859-15 ISO-8859-15"
+    echo "koi8-r KOI8-R"
+    echo "ansi-1251 CP1251"
+    echo "BIG5 BIG5"
+    echo "Big5-HKSCS BIG5-HKSCS"
+    echo "gb2312 GB2312"
+    echo "GBK GBK"
+    echo "GB18030 GB18030"
+    echo "cns11643 EUC-TW"
+    echo "5601 EUC-KR"
+    echo "ko_KR.johap92 JOHAB"
+    echo "eucJP EUC-JP"
+    echo "PCK SHIFT_JIS"
+    echo "TIS620.2533 TIS-620"
+    #echo "sun_eu_greek ?" # what is this?
+    echo "UTF-8 UTF-8"
+    ;;
+  freebsd* | os2*)
+    # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
+    # localcharset.c falls back to using the full locale name
+    # from the environment variables.
+    # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
+    # reuse FreeBSD's locale data for OS/2.
+    echo "C ASCII"
+    echo "US-ASCII ASCII"
+    for l in la_LN lt_LN; do
+      echo "$l.ASCII ASCII"
+    done
+    for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
+             fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
+             lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
+      echo "$l.ISO_8859-1 ISO-8859-1"
+      echo "$l.DIS_8859-15 ISO-8859-15"
+    done
+    for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
+      echo "$l.ISO_8859-2 ISO-8859-2"
+    done
+    for l in la_LN lt_LT; do
+      echo "$l.ISO_8859-4 ISO-8859-4"
+    done
+    for l in ru_RU ru_SU; do
+      echo "$l.KOI8-R KOI8-R"
+      echo "$l.ISO_8859-5 ISO-8859-5"
+      echo "$l.CP866 CP866"
+    done
+    echo "uk_UA.KOI8-U KOI8-U"
+    echo "zh_TW.BIG5 BIG5"
+    echo "zh_TW.Big5 BIG5"
+    echo "zh_CN.EUC GB2312"
+    echo "ja_JP.EUC EUC-JP"
+    echo "ja_JP.SJIS SHIFT_JIS"
+    echo "ja_JP.Shift_JIS SHIFT_JIS"
+    echo "ko_KR.EUC EUC-KR"
+    ;;
+  netbsd*)
+    echo "646 ASCII"
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-4 ISO-8859-4"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-13 ISO-8859-13"
+    echo "ISO8859-15 ISO-8859-15"
+    echo "eucCN GB2312"
+    echo "eucJP EUC-JP"
+    echo "eucKR EUC-KR"
+    echo "eucTW EUC-TW"
+    echo "BIG5 BIG5"
+    echo "SJIS SHIFT_JIS"
+    ;;
+  openbsd*)
+    echo "646 ASCII"
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-4 ISO-8859-4"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-13 ISO-8859-13"
+    echo "ISO8859-15 ISO-8859-15"
+    ;;
+  darwin[56]*)
+    # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore
+    # localcharset.c falls back to using the full locale name
+    # from the environment variables.
+    echo "C ASCII"
+    for l in en_AU en_CA en_GB en_US la_LN; do
+      echo "$l.US-ASCII ASCII"
+    done
+    for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
+             fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \
+             nl_NL no_NO pt_PT sv_SE; do
+      echo "$l ISO-8859-1"
+      echo "$l.ISO8859-1 ISO-8859-1"
+      echo "$l.ISO8859-15 ISO-8859-15"
+    done
+    for l in la_LN; do
+      echo "$l.ISO8859-1 ISO-8859-1"
+      echo "$l.ISO8859-15 ISO-8859-15"
+    done
+    for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do
+      echo "$l.ISO8859-2 ISO-8859-2"
+    done
+    for l in la_LN lt_LT; do
+      echo "$l.ISO8859-4 ISO-8859-4"
+    done
+    for l in ru_RU; do
+      echo "$l.KOI8-R KOI8-R"
+      echo "$l.ISO8859-5 ISO-8859-5"
+      echo "$l.CP866 CP866"
+    done
+    for l in bg_BG; do
+      echo "$l.CP1251 CP1251"
+    done
+    echo "uk_UA.KOI8-U KOI8-U"
+    echo "zh_TW.BIG5 BIG5"
+    echo "zh_TW.Big5 BIG5"
+    echo "zh_CN.EUC GB2312"
+    echo "ja_JP.EUC EUC-JP"
+    echo "ja_JP.SJIS SHIFT_JIS"
+    echo "ko_KR.EUC EUC-KR"
+    ;;
+  darwin*)
+    # Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is
+    # useless:
+    # - It returns the empty string when LANG is set to a locale of the
+    #   form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8
+    #   LC_CTYPE file.
+    # - The environment variables LANG, LC_CTYPE, LC_ALL are not set by
+    #   the system; nl_langinfo(CODESET) returns "US-ASCII" in this case.
+    # - The documentation says:
+    #     "... all code that calls BSD system routines should ensure
+    #      that the const *char parameters of these routines are in UTF-8
+    #      encoding. All BSD system functions expect their string
+    #      parameters to be in UTF-8 encoding and nothing else."
+    #   It also says
+    #     "An additional caveat is that string parameters for files,
+    #      paths, and other file-system entities must be in canonical
+    #      UTF-8. In a canonical UTF-8 Unicode string, all decomposable
+    #      characters are decomposed ..."
+    #   but this is not true: You can pass non-decomposed UTF-8 strings
+    #   to file system functions, and it is the OS which will convert
+    #   them to decomposed UTF-8 before accessing the file system.
+    # - The Apple Terminal application displays UTF-8 by default.
+    # - However, other applications are free to use different encodings:
+    #   - xterm uses ISO-8859-1 by default.
+    #   - TextEdit uses MacRoman by default.
+    # We prefer UTF-8 over decomposed UTF-8-MAC because one should
+    # minimize the use of decomposed Unicode. Unfortunately, through the
+    # Darwin file system, decomposed UTF-8 strings are leaked into user
+    # space nevertheless.
+    # Then there are also the locales with encodings other than US-ASCII
+    # and UTF-8. These locales can be occasionally useful to users (e.g.
+    # when grepping through ISO-8859-1 encoded text files), when all their
+    # file names are in US-ASCII.
+    echo "ISO8859-1 ISO-8859-1"
+    echo "ISO8859-2 ISO-8859-2"
+    echo "ISO8859-4 ISO-8859-4"
+    echo "ISO8859-5 ISO-8859-5"
+    echo "ISO8859-7 ISO-8859-7"
+    echo "ISO8859-9 ISO-8859-9"
+    echo "ISO8859-13 ISO-8859-13"
+    echo "ISO8859-15 ISO-8859-15"
+    echo "KOI8-R KOI8-R"
+    echo "KOI8-U KOI8-U"
+    echo "CP866 CP866"
+    echo "CP949 CP949"
+    echo "CP1131 CP1131"
+    echo "CP1251 CP1251"
+    echo "eucCN GB2312"
+    echo "GB2312 GB2312"
+    echo "eucJP EUC-JP"
+    echo "eucKR EUC-KR"
+    echo "Big5 BIG5"
+    echo "Big5HKSCS BIG5-HKSCS"
+    echo "GBK GBK"
+    echo "GB18030 GB18030"
+    echo "SJIS SHIFT_JIS"
+    echo "ARMSCII-8 ARMSCII-8"
+    echo "PT154 PT154"
+    #echo "ISCII-DEV ?"
+    echo "* UTF-8"
+    ;;
+  beos* | haiku*)
+    # BeOS and Haiku have a single locale, and it has UTF-8 encoding.
+    echo "* UTF-8"
+    ;;
+  msdosdjgpp*)
+    # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
+    # localcharset.c falls back to using the full locale name
+    # from the environment variables.
+    echo "#"
+    echo "# The encodings given here may not all be correct."
+    echo "# If you find that the encoding given for your language and"
+    echo "# country is not the one your DOS machine actually uses, just"
+    echo "# correct it in this file, and send a mail to"
+    echo "# Juan Manuel Guerrero <juan.guerrero@gmx.de>"
+    echo "# and Bruno Haible <bruno@clisp.org>."
+    echo "#"
+    echo "C ASCII"
+    # ISO-8859-1 languages
+    echo "ca CP850"
+    echo "ca_ES CP850"
+    echo "da CP865"    # not CP850 ??
+    echo "da_DK CP865" # not CP850 ??
+    echo "de CP850"
+    echo "de_AT CP850"
+    echo "de_CH CP850"
+    echo "de_DE CP850"
+    echo "en CP850"
+    echo "en_AU CP850" # not CP437 ??
+    echo "en_CA CP850"
+    echo "en_GB CP850"
+    echo "en_NZ CP437"
+    echo "en_US CP437"
+    echo "en_ZA CP850" # not CP437 ??
+    echo "es CP850"
+    echo "es_AR CP850"
+    echo "es_BO CP850"
+    echo "es_CL CP850"
+    echo "es_CO CP850"
+    echo "es_CR CP850"
+    echo "es_CU CP850"
+    echo "es_DO CP850"
+    echo "es_EC CP850"
+    echo "es_ES CP850"
+    echo "es_GT CP850"
+    echo "es_HN CP850"
+    echo "es_MX CP850"
+    echo "es_NI CP850"
+    echo "es_PA CP850"
+    echo "es_PY CP850"
+    echo "es_PE CP850"
+    echo "es_SV CP850"
+    echo "es_UY CP850"
+    echo "es_VE CP850"
+    echo "et CP850"
+    echo "et_EE CP850"
+    echo "eu CP850"
+    echo "eu_ES CP850"
+    echo "fi CP850"
+    echo "fi_FI CP850"
+    echo "fr CP850"
+    echo "fr_BE CP850"
+    echo "fr_CA CP850"
+    echo "fr_CH CP850"
+    echo "fr_FR CP850"
+    echo "ga CP850"
+    echo "ga_IE CP850"
+    echo "gd CP850"
+    echo "gd_GB CP850"
+    echo "gl CP850"
+    echo "gl_ES CP850"
+    echo "id CP850"    # not CP437 ??
+    echo "id_ID CP850" # not CP437 ??
+    echo "is CP861"    # not CP850 ??
+    echo "is_IS CP861" # not CP850 ??
+    echo "it CP850"
+    echo "it_CH CP850"
+    echo "it_IT CP850"
+    echo "lt CP775"
+    echo "lt_LT CP775"
+    echo "lv CP775"
+    echo "lv_LV CP775"
+    echo "nb CP865"    # not CP850 ??
+    echo "nb_NO CP865" # not CP850 ??
+    echo "nl CP850"
+    echo "nl_BE CP850"
+    echo "nl_NL CP850"
+    echo "nn CP865"    # not CP850 ??
+    echo "nn_NO CP865" # not CP850 ??
+    echo "no CP865"    # not CP850 ??
+    echo "no_NO CP865" # not CP850 ??
+    echo "pt CP850"
+    echo "pt_BR CP850"
+    echo "pt_PT CP850"
+    echo "sv CP850"
+    echo "sv_SE CP850"
+    # ISO-8859-2 languages
+    echo "cs CP852"
+    echo "cs_CZ CP852"
+    echo "hr CP852"
+    echo "hr_HR CP852"
+    echo "hu CP852"
+    echo "hu_HU CP852"
+    echo "pl CP852"
+    echo "pl_PL CP852"
+    echo "ro CP852"
+    echo "ro_RO CP852"
+    echo "sk CP852"
+    echo "sk_SK CP852"
+    echo "sl CP852"
+    echo "sl_SI CP852"
+    echo "sq CP852"
+    echo "sq_AL CP852"
+    echo "sr CP852"    # CP852 or CP866 or CP855 ??
+    echo "sr_CS CP852" # CP852 or CP866 or CP855 ??
+    echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
+    # ISO-8859-3 languages
+    echo "mt CP850"
+    echo "mt_MT CP850"
+    # ISO-8859-5 languages
+    echo "be CP866"
+    echo "be_BE CP866"
+    echo "bg CP866"    # not CP855 ??
+    echo "bg_BG CP866" # not CP855 ??
+    echo "mk CP866"    # not CP855 ??
+    echo "mk_MK CP866" # not CP855 ??
+    echo "ru CP866"
+    echo "ru_RU CP866"
+    echo "uk CP1125"
+    echo "uk_UA CP1125"
+    # ISO-8859-6 languages
+    echo "ar CP864"
+    echo "ar_AE CP864"
+    echo "ar_DZ CP864"
+    echo "ar_EG CP864"
+    echo "ar_IQ CP864"
+    echo "ar_IR CP864"
+    echo "ar_JO CP864"
+    echo "ar_KW CP864"
+    echo "ar_MA CP864"
+    echo "ar_OM CP864"
+    echo "ar_QA CP864"
+    echo "ar_SA CP864"
+    echo "ar_SY CP864"
+    # ISO-8859-7 languages
+    echo "el CP869"
+    echo "el_GR CP869"
+    # ISO-8859-8 languages
+    echo "he CP862"
+    echo "he_IL CP862"
+    # ISO-8859-9 languages
+    echo "tr CP857"
+    echo "tr_TR CP857"
+    # Japanese
+    echo "ja CP932"
+    echo "ja_JP CP932"
+    # Chinese
+    echo "zh_CN GBK"
+    echo "zh_TW CP950" # not CP938 ??
+    # Korean
+    echo "kr CP949"    # not CP934 ??
+    echo "kr_KR CP949" # not CP934 ??
+    # Thai
+    echo "th CP874"
+    echo "th_TH CP874"
+    # Other
+    echo "eo CP850"
+    echo "eo_EO CP850"
+    ;;
+esac
diff --git a/gnu/dirent--.h b/gnu/dirent--.h
new file mode 100644 (file)
index 0000000..f537fac
--- /dev/null
@@ -0,0 +1,25 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Like dirent.h, but redefine some names to avoid glitches.
+
+   Copyright (C) 2009, 2010 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 Eric Blake.  */
+
+#include "dirent-safer.h"
+
+#undef opendir
+#define opendir opendir_safer
diff --git a/gnu/dirent-safer.h b/gnu/dirent-safer.h
new file mode 100644 (file)
index 0000000..d442ba0
--- /dev/null
@@ -0,0 +1,24 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Invoke dirent-like functions, but avoid some glitches.
+
+   Copyright (C) 2009, 2010 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 Eric Blake.  */
+
+#include <dirent.h>
+
+DIR *opendir_safer (const char *name);
diff --git a/gnu/dirent.in.h b/gnu/dirent.in.h
new file mode 100644 (file)
index 0000000..ddb78d8
--- /dev/null
@@ -0,0 +1,156 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A GNU-like <dirent.h>.
+   Copyright (C) 2006-2010 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 _GL_DIRENT_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_DIRENT_H@
+
+#ifndef _GL_DIRENT_H
+#define _GL_DIRENT_H
+
+/* Get ino_t.  Needed on some systems, including glibc 2.8.  */
+#include <sys/types.h>
+
+/* 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.  */
+
+
+/* Declare overridden functions.  */
+
+#if @REPLACE_CLOSEDIR@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  define closedir rpl_closedir
+# endif
+_GL_FUNCDECL_RPL (closedir, int, (DIR *) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (closedir, int, (DIR *));
+#else
+_GL_CXXALIAS_SYS (closedir, int, (DIR *));
+#endif
+_GL_CXXALIASWARN (closedir);
+
+#if @GNULIB_DIRFD@
+# if !@HAVE_DECL_DIRFD@ && !defined dirfd
+/* Return the file descriptor associated with the given directory stream,
+   or -1 if none exists.  */
+_GL_EXTERN_C int dirfd (DIR *dir) _GL_ARG_NONNULL ((1));
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef dirfd
+# if HAVE_RAW_DECL_DIRFD
+_GL_WARN_ON_USE (dirfd, "dirfd is unportable - "
+                 "use gnulib module dirfd for portability");
+# endif
+#endif
+
+#if @GNULIB_FDOPENDIR@
+/* Open a directory stream visiting the given directory file
+   descriptor.  Return NULL and set errno if fd is not visiting a
+   directory.  On success, this function consumes fd (it will be
+   implicitly closed either by this function or by a subsequent
+   closedir).  */
+# if @REPLACE_FDOPENDIR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fdopendir
+#   define fdopendir rpl_fdopendir
+#  endif
+_GL_FUNCDECL_RPL (fdopendir, DIR *, (int fd));
+_GL_CXXALIAS_RPL (fdopendir, DIR *, (int fd));
+# else
+#  if !@HAVE_FDOPENDIR@
+_GL_FUNCDECL_SYS (fdopendir, DIR *, (int fd));
+#  endif
+_GL_CXXALIAS_SYS (fdopendir, DIR *, (int fd));
+# endif
+_GL_CXXALIASWARN (fdopendir);
+#elif defined GNULIB_POSIXCHECK
+# undef fdopendir
+# if HAVE_RAW_DECL_FDOPENDIR
+_GL_WARN_ON_USE (fdopendir, "fdopendir is unportable - "
+                 "use gnulib module fdopendir for portability");
+# endif
+#endif
+
+#if @REPLACE_OPENDIR@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  define opendir rpl_opendir
+# endif
+_GL_FUNCDECL_RPL (opendir, DIR *, (const char *) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (opendir, DIR *, (const char *));
+#else
+_GL_CXXALIAS_SYS (opendir, DIR *, (const char *));
+#endif
+_GL_CXXALIASWARN (opendir);
+
+#if @GNULIB_SCANDIR@
+/* Scan the directory DIR, calling FILTER on each directory entry.
+   Entries for which FILTER returns nonzero are individually malloc'd,
+   sorted using qsort with CMP, and collected in a malloc'd array in
+   *NAMELIST.  Returns the number of entries selected, or -1 on error.  */
+# if !@HAVE_SCANDIR@
+_GL_FUNCDECL_SYS (scandir, int,
+                  (const char *dir, struct dirent ***namelist,
+                   int (*filter) (const struct dirent *),
+                   int (*cmp) (const struct dirent **, const struct dirent **))
+                  _GL_ARG_NONNULL ((1, 2, 4)));
+# endif
+/* Need to cast, because on glibc systems, the fourth parameter is
+                        int (*cmp) (const void *, const void *).  */
+_GL_CXXALIAS_SYS_CAST (scandir, int,
+                       (const char *dir, struct dirent ***namelist,
+                        int (*filter) (const struct dirent *),
+                        int (*cmp) (const struct dirent **, const struct dirent **)));
+_GL_CXXALIASWARN (scandir);
+#elif defined GNULIB_POSIXCHECK
+# undef scandir
+# if HAVE_RAW_DECL_SCANDIR
+_GL_WARN_ON_USE (scandir, "scandir is unportable - "
+                 "use gnulib module scandir for portability");
+# endif
+#endif
+
+#if @GNULIB_ALPHASORT@
+/* Compare two 'struct dirent' entries alphabetically.  */
+# if !@HAVE_ALPHASORT@
+_GL_FUNCDECL_SYS (alphasort, int,
+                  (const struct dirent **, const struct dirent **)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+/* Need to cast, because on glibc systems, the parameters are
+                       (const void *, const void *).  */
+_GL_CXXALIAS_SYS_CAST (alphasort, int,
+                       (const struct dirent **, const struct dirent **));
+_GL_CXXALIASWARN (alphasort);
+#elif defined GNULIB_POSIXCHECK
+# undef alphasort
+# if HAVE_RAW_DECL_ALPHASORT
+_GL_WARN_ON_USE (alphasort, "alphasort is unportable - "
+                 "use gnulib module alphasort for portability");
+# endif
+#endif
+
+
+#endif /* _GL_DIRENT_H */
+#endif /* _GL_DIRENT_H */
diff --git a/gnu/dirfd.c b/gnu/dirfd.c
new file mode 100644 (file)
index 0000000..f0afda8
--- /dev/null
@@ -0,0 +1,34 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* dirfd.c -- return the file descriptor associated with an open DIR*
+
+   Copyright (C) 2001, 2006, 2008-2010 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. */
+
+#include <config.h>
+
+#include <dirent.h>
+#include <errno.h>
+
+int
+dirfd (DIR *dir_p)
+{
+  int fd = DIR_TO_FD (dir_p);
+  if (fd == -1)
+    errno = ENOTSUP;
+  return fd;
+}
diff --git a/gnu/dirname-lgpl.c b/gnu/dirname-lgpl.c
new file mode 100644 (file)
index 0000000..969b465
--- /dev/null
@@ -0,0 +1,88 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* dirname.c -- return all but the last element in a file name
+
+   Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2010 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>
+
+#include "dirname.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+/* 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
+   if there are trailing slashes (by effectively ignoring them).  */
+
+size_t
+dir_len (char const *file)
+{
+  size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (file);
+  size_t length;
+
+  /* Advance prefix_length beyond important leading slashes.  */
+  prefix_length += (prefix_length != 0
+                    ? (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
+                       && ISSLASH (file[prefix_length]))
+                    : (ISSLASH (file[0])
+                       ? ((DOUBLE_SLASH_IS_DISTINCT_ROOT
+                           && ISSLASH (file[1]) && ! ISSLASH (file[2])
+                           ? 2 : 1))
+                       : 0));
+
+  /* Strip the basename and any redundant slashes before it.  */
+  for (length = last_component (file) - file;
+       prefix_length < length; length--)
+    if (! ISSLASH (file[length - 1]))
+      break;
+  return length;
+}
+
+
+/* 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.
+
+   Return the leading directories part of FILE, allocated with malloc.
+   Works properly even if there are trailing slashes (by effectively
+   ignoring them).  Return NULL on failure.
+
+   If lstat (FILE) would succeed, then { chdir (dir_name (FILE));
+   lstat (base_name (FILE)); } will access the same file.  Likewise,
+   if the sequence { chdir (dir_name (FILE));
+   rename (base_name (FILE), "foo"); } succeeds, you have renamed FILE
+   to "foo" in the same directory FILE was in.  */
+
+char *
+mdir_name (char const *file)
+{
+  size_t length = dir_len (file);
+  bool append_dot = (length == 0
+                     || (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
+                         && length == FILE_SYSTEM_PREFIX_LEN (file)
+                         && file[2] != '\0' && ! ISSLASH (file[2])));
+  char *dir = malloc (length + append_dot + 1);
+  if (!dir)
+    return NULL;
+  memcpy (dir, file, length);
+  if (append_dot)
+    dir[length++] = '.';
+  dir[length] = '\0';
+  return dir;
+}
diff --git a/gnu/dirname.c b/gnu/dirname.c
new file mode 100644 (file)
index 0000000..8b3d28d
--- /dev/null
@@ -0,0 +1,40 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* dirname.c -- return all but the last element in a file name
+
+   Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2010 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>
+
+#include "dirname.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include "xalloc.h"
+
+/* Just like mdir_name (dirname-lgpl.c), except, rather than
+   returning NULL upon malloc failure, here, we report the
+   "memory exhausted" condition and exit.  */
+
+char *
+dir_name (char const *file)
+{
+  char *result = mdir_name (file);
+  if (!result)
+    xalloc_die ();
+  return result;
+}
diff --git a/gnu/dirname.h b/gnu/dirname.h
new file mode 100644 (file)
index 0000000..ede162d
--- /dev/null
@@ -0,0 +1,76 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/*  Take file names apart into directory and base names.
+
+    Copyright (C) 1998, 2001, 2003-2006, 2009-2010 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 DIRNAME_H_
+# define DIRNAME_H_ 1
+
+# include <stdbool.h>
+# include <stddef.h>
+
+# ifndef DIRECTORY_SEPARATOR
+#  define DIRECTORY_SEPARATOR '/'
+# endif
+
+# ifndef ISSLASH
+#  define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
+# endif
+
+# ifndef FILE_SYSTEM_PREFIX_LEN
+#  if FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX
+    /* This internal macro assumes ASCII, but all hosts that support drive
+       letters use ASCII.  */
+#   define _IS_DRIVE_LETTER(c) (((unsigned int) (c) | ('a' - 'A')) - 'a' \
+                                <= 'z' - 'a')
+#   define FILE_SYSTEM_PREFIX_LEN(Filename) \
+           (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':' ? 2 : 0)
+#  else
+#   define FILE_SYSTEM_PREFIX_LEN(Filename) 0
+#  endif
+# endif
+
+# ifndef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
+#  define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0
+# endif
+
+# ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT
+#  define DOUBLE_SLASH_IS_DISTINCT_ROOT 0
+# endif
+
+# if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
+#  define IS_ABSOLUTE_FILE_NAME(F) ISSLASH ((F)[FILE_SYSTEM_PREFIX_LEN (F)])
+# else
+#  define IS_ABSOLUTE_FILE_NAME(F) \
+          (ISSLASH ((F)[0]) || 0 < FILE_SYSTEM_PREFIX_LEN (F))
+# endif
+# define IS_RELATIVE_FILE_NAME(F) (! IS_ABSOLUTE_FILE_NAME (F))
+
+# if GNULIB_DIRNAME
+char *base_name (char const *file);
+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);
+
+bool strip_trailing_slashes (char *file);
+
+#endif /* not DIRNAME_H_ */
diff --git a/gnu/dup-safer.c b/gnu/dup-safer.c
new file mode 100644 (file)
index 0000000..3b75ab7
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Invoke dup, but avoid some glitches.
+
+   Copyright (C) 2001, 2004-2006, 2009-2010 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.  */
+
+#include <config.h>
+
+#include "unistd-safer.h"
+
+#include <fcntl.h>
+#include <unistd.h>
+
+/* Like dup, but do not return STDIN_FILENO, STDOUT_FILENO, or
+   STDERR_FILENO.  */
+
+int
+dup_safer (int fd)
+{
+  return fcntl (fd, F_DUPFD, STDERR_FILENO + 1);
+}
diff --git a/gnu/dup2.c b/gnu/dup2.c
new file mode 100644 (file)
index 0000000..002aa84
--- /dev/null
@@ -0,0 +1,130 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Duplicate an open file descriptor to a specified file descriptor.
+
+   Copyright (C) 1999, 2004-2007, 2009-2010 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 */
+
+#include <config.h>
+
+/* Specification.  */
+#include <unistd.h>
+
+#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)
+{
+  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.  */
+  if (fd == desired_fd)
+    {
+      if ((HANDLE) _get_osfhandle (fd) == INVALID_HANDLE_VALUE)
+        {
+          errno = EBADF;
+          return -1;
+        }
+      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)
+    {
+      errno = EBADF;
+      return -1;
+    }
+# 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)
+    {
+      errno = EBADF;
+      result = -1;
+    }
+# endif
+  if (result == 0)
+    result = desired_fd;
+  /* Correct a cygwin 1.5.x errno value.  */
+  else if (result == -1 && errno == EMFILE)
+    errno = EBADF;
+# if REPLACE_FCHDIR
+  if (fd != desired_fd && result != -1)
+    result = _gl_register_dup (fd, result);
+# endif
+  return result;
+}
+
+#else /* !HAVE_DUP2 */
+
+/* On older platforms, dup2 did not exist.  */
+
+# ifndef F_DUPFD
+static int
+dupfd (int fd, int desired_fd)
+{
+  int duplicated_fd = dup (fd);
+  if (duplicated_fd < 0 || duplicated_fd == desired_fd)
+    return duplicated_fd;
+  else
+    {
+      int r = dupfd (fd, desired_fd);
+      int e = errno;
+      close (duplicated_fd);
+      errno = e;
+      return r;
+    }
+}
+# endif
+
+int
+dup2 (int fd, int desired_fd)
+{
+  int result = fcntl (fd, F_GETFL) < 0 ? -1 : fd;
+  if (result == -1 || fd == desired_fd)
+    return result;
+  close (desired_fd);
+# ifdef F_DUPFD
+  result = fcntl (fd, F_DUPFD, desired_fd);
+#  if REPLACE_FCHDIR
+  if (0 <= result)
+    result = _gl_register_dup (fd, result);
+#  endif
+# else
+  result = dupfd (fd, desired_fd);
+# endif
+  if (result == -1 && (errno == EMFILE || errno == EINVAL))
+    errno = EBADF;
+  return result;
+}
+#endif /* !HAVE_DUP2 */
diff --git a/gnu/errno.in.h b/gnu/errno.in.h
new file mode 100644 (file)
index 0000000..f613d26
--- /dev/null
@@ -0,0 +1,162 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A POSIX-like <errno.h>.
+
+   Copyright (C) 2008-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _GL_ERRNO_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_ERRNO_H@
+
+#ifndef _GL_ERRNO_H
+#define _GL_ERRNO_H
+
+
+/* On native Windows platforms, many macros are not defined.  */
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+/* POSIX says that EAGAIN and EWOULDBLOCK may have the same value.  */
+#  define EWOULDBLOCK     EAGAIN
+
+/* Values >= 100 seem safe to use.  */
+#  define ETXTBSY   100
+#  define GNULIB_defined_ETXTBSY 1
+
+/* These are intentionally the same values as the WSA* error numbers, defined
+   in <winsock2.h>.  */
+#  define EINPROGRESS     10036
+#  define EALREADY        10037
+#  define ENOTSOCK        10038
+#  define EDESTADDRREQ    10039
+#  define EMSGSIZE        10040
+#  define EPROTOTYPE      10041
+#  define ENOPROTOOPT     10042
+#  define EPROTONOSUPPORT 10043
+#  define ESOCKTNOSUPPORT 10044  /* not required by POSIX */
+#  define EOPNOTSUPP      10045
+#  define EPFNOSUPPORT    10046  /* not required by POSIX */
+#  define EAFNOSUPPORT    10047
+#  define EADDRINUSE      10048
+#  define EADDRNOTAVAIL   10049
+#  define ENETDOWN        10050
+#  define ENETUNREACH     10051
+#  define ENETRESET       10052
+#  define ECONNABORTED    10053
+#  define ECONNRESET      10054
+#  define ENOBUFS         10055
+#  define EISCONN         10056
+#  define ENOTCONN        10057
+#  define ESHUTDOWN       10058  /* not required by POSIX */
+#  define ETOOMANYREFS    10059  /* not required by POSIX */
+#  define ETIMEDOUT       10060
+#  define ECONNREFUSED    10061
+#  define ELOOP           10062
+#  define EHOSTDOWN       10064  /* not required by POSIX */
+#  define EHOSTUNREACH    10065
+#  define EPROCLIM        10067  /* not required by POSIX */
+#  define EUSERS          10068  /* not required by POSIX */
+#  define EDQUOT          10069
+#  define ESTALE          10070
+#  define EREMOTE         10071  /* not required by POSIX */
+#  define GNULIB_defined_ESOCK 1
+
+# endif
+
+
+/* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros
+   EMULTIHOP, ENOLINK, EOVERFLOW are not defined.  */
+# if @EMULTIHOP_HIDDEN@
+#  define EMULTIHOP @EMULTIHOP_VALUE@
+#  define GNULIB_defined_EMULTIHOP 1
+# endif
+# if @ENOLINK_HIDDEN@
+#  define ENOLINK   @ENOLINK_VALUE@
+#  define GNULIB_defined_ENOLINK 1
+# endif
+# if @EOVERFLOW_HIDDEN@
+#  define EOVERFLOW @EOVERFLOW_VALUE@
+#  define GNULIB_defined_EOVERFLOW 1
+# endif
+
+
+/* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK,
+   EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined.
+   Define them here.  Values >= 2000 seem safe to use: Solaris ESTALE = 151,
+   HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133.
+
+   Note: When one of these systems defines some of these macros some day,
+   binaries will have to be recompiled so that they recognizes the new
+   errno values from the system.  */
+
+# ifndef ENOMSG
+#  define ENOMSG    2000
+#  define GNULIB_defined_ENOMSG 1
+# endif
+
+# ifndef EIDRM
+#  define EIDRM     2001
+#  define GNULIB_defined_EIDRM 1
+# endif
+
+# ifndef ENOLINK
+#  define ENOLINK   2002
+#  define GNULIB_defined_ENOLINK 1
+# endif
+
+# ifndef EPROTO
+#  define EPROTO    2003
+#  define GNULIB_defined_EPROTO 1
+# endif
+
+# ifndef EMULTIHOP
+#  define EMULTIHOP 2004
+#  define GNULIB_defined_EMULTIHOP 1
+# endif
+
+# ifndef EBADMSG
+#  define EBADMSG   2005
+#  define GNULIB_defined_EBADMSG 1
+# endif
+
+# ifndef EOVERFLOW
+#  define EOVERFLOW 2006
+#  define GNULIB_defined_EOVERFLOW 1
+# endif
+
+# ifndef ENOTSUP
+#  define ENOTSUP   2007
+#  define GNULIB_defined_ENOTSUP 1
+# endif
+
+# ifndef ESTALE
+#  define ESTALE    2009
+#  define GNULIB_defined_ESTALE 1
+# endif
+
+# ifndef ECANCELED
+#  define ECANCELED 2008
+#  define GNULIB_defined_ECANCELED 1
+# endif
+
+
+#endif /* _GL_ERRNO_H */
+#endif /* _GL_ERRNO_H */
diff --git a/gnu/error.c b/gnu/error.c
new file mode 100644 (file)
index 0000000..b6e9c33
--- /dev/null
@@ -0,0 +1,368 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Error handler for noninteractive utilities
+   Copyright (C) 1990-1998, 2000-2007, 2009-2010 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
+   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 David MacKenzie <djm@gnu.ai.mit.edu>.  */
+
+#if !_LIBC
+# include <config.h>
+#endif
+
+#include "error.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if !_LIBC && ENABLE_NLS
+# include "gettext.h"
+# define _(msgid) gettext (msgid)
+#endif
+
+#ifdef _LIBC
+# include <libintl.h>
+# include <stdbool.h>
+# include <stdint.h>
+# include <wchar.h>
+# define mbsrtowcs __mbsrtowcs
+#endif
+
+#if USE_UNLOCKED_IO
+# include "unlocked-io.h"
+#endif
+
+#ifndef _
+# define _(String) String
+#endif
+
+/* If NULL, error will flush stdout, then print on stderr the program
+   name, a colon and a space.  Otherwise, error will call this
+   function without parameters instead.  */
+void (*error_print_progname) (void);
+
+/* This variable is incremented each time `error' is called.  */
+unsigned int error_message_count;
+
+#ifdef _LIBC
+/* In the GNU C library, there is a predefined variable for this.  */
+
+# define program_name program_invocation_name
+# include <errno.h>
+# include <limits.h>
+# include <libio/libioP.h>
+
+/* 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)));
+extern void __error_at_line (int status, int errnum, const char *file_name,
+                             unsigned int line_number, const char *message,
+                             ...)
+     __attribute__ ((__format__ (__printf__, 5, 6)));;
+# define error __error
+# define error_at_line __error_at_line
+
+# include <libio/iolibio.h>
+# define fflush(s) INTUSE(_IO_fflush) (s)
+# undef putc
+# define putc(c, fp) INTUSE(_IO_putc) (c, fp)
+
+# include <bits/libc-lock.h>
+
+#else /* not _LIBC */
+
+# include <fcntl.h>
+# include <unistd.h>
+
+# if !HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P
+#  ifndef HAVE_DECL_STRERROR_R
+"this configure-time declaration test was not run"
+#  endif
+char *strerror_r ();
+# endif
+
+/* The calling program should define program_name and set it to the
+   name of the executing program.  */
+extern char *program_name;
+
+# if HAVE_STRERROR_R || defined strerror_r
+#  define __strerror_r strerror_r
+# endif /* HAVE_STRERROR_R || defined strerror_r */
+#endif  /* not _LIBC */
+
+static inline void
+flush_stdout (void)
+{
+#if !_LIBC && defined F_GETFL
+  int stdout_fd;
+
+# if GNULIB_FREOPEN_SAFER
+  /* Use of gnulib's freopen-safer module normally ensures that
+       fileno (stdout) == 1
+     whenever stdout is open.  */
+  stdout_fd = STDOUT_FILENO;
+# else
+  /* POSIX states that fileno (stdout) after fclose is unspecified.  But in
+     practice it is not a problem, because stdout is statically allocated and
+     the fd of a FILE stream is stored as a field in its allocated memory.  */
+  stdout_fd = fileno (stdout);
+# endif
+  /* POSIX states that fflush (stdout) after fclose is unspecified; it
+     is safe in glibc, but not on all other platforms.  fflush (NULL)
+     is always defined, but too draconian.  */
+  if (0 <= stdout_fd && 0 <= fcntl (stdout_fd, F_GETFL))
+#endif
+    fflush (stdout);
+}
+
+static void
+print_errno_message (int errnum)
+{
+  char const *s;
+
+#if defined HAVE_STRERROR_R || _LIBC
+  char errbuf[1024];
+# if STRERROR_R_CHAR_P || _LIBC
+  s = __strerror_r (errnum, errbuf, sizeof errbuf);
+# else
+  if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0)
+    s = errbuf;
+  else
+    s = 0;
+# endif
+#else
+  s = strerror (errnum);
+#endif
+
+#if !_LIBC
+  if (! s)
+    s = _("Unknown system error");
+#endif
+
+#if _LIBC
+  __fxprintf (NULL, ": %s", s);
+#else
+  fprintf (stderr, ": %s", s);
+#endif
+}
+
+static void
+error_tail (int status, int errnum, const char *message, va_list args)
+{
+#if _LIBC
+  if (_IO_fwide (stderr, 0) > 0)
+    {
+# define ALLOCA_LIMIT 2000
+      size_t len = strlen (message) + 1;
+      wchar_t *wmessage = NULL;
+      mbstate_t st;
+      size_t res;
+      const char *tmp;
+      bool use_malloc = false;
+
+      while (1)
+        {
+          if (__libc_use_alloca (len * sizeof (wchar_t)))
+            wmessage = (wchar_t *) alloca (len * sizeof (wchar_t));
+          else
+            {
+              if (!use_malloc)
+                wmessage = NULL;
+
+              wchar_t *p = (wchar_t *) realloc (wmessage,
+                                                len * sizeof (wchar_t));
+              if (p == NULL)
+                {
+                  free (wmessage);
+                  fputws_unlocked (L"out of memory\n", stderr);
+                  return;
+                }
+              wmessage = p;
+              use_malloc = true;
+            }
+
+          memset (&st, '\0', sizeof (st));
+          tmp = message;
+
+          res = mbsrtowcs (wmessage, &tmp, len, &st);
+          if (res != len)
+            break;
+
+          if (__builtin_expect (len >= SIZE_MAX / 2, 0))
+            {
+              /* This really should not happen if everything is fine.  */
+              res = (size_t) -1;
+              break;
+            }
+
+          len *= 2;
+        }
+
+      if (res == (size_t) -1)
+        {
+          /* The string cannot be converted.  */
+          if (use_malloc)
+            {
+              free (wmessage);
+              use_malloc = false;
+            }
+          wmessage = (wchar_t *) L"???";
+        }
+
+      __vfwprintf (stderr, wmessage, args);
+
+      if (use_malloc)
+        free (wmessage);
+    }
+  else
+#endif
+    vfprintf (stderr, message, args);
+  va_end (args);
+
+  ++error_message_count;
+  if (errnum)
+    print_errno_message (errnum);
+#if _LIBC
+  __fxprintf (NULL, "\n");
+#else
+  putc ('\n', stderr);
+#endif
+  fflush (stderr);
+  if (status)
+    exit (status);
+}
+
+
+/* Print the program name and error message MESSAGE, which is a printf-style
+   format string with optional args.
+   If ERRNUM is nonzero, print its corresponding system error message.
+   Exit with status STATUS if it is nonzero.  */
+void
+error (int status, int errnum, const char *message, ...)
+{
+  va_list args;
+
+#if defined _LIBC && defined __libc_ptf_call
+  /* We do not want this call to be cut short by a thread
+     cancellation.  Therefore disable cancellation for now.  */
+  int state = PTHREAD_CANCEL_ENABLE;
+  __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state),
+                   0);
+#endif
+
+  flush_stdout ();
+#ifdef _LIBC
+  _IO_flockfile (stderr);
+#endif
+  if (error_print_progname)
+    (*error_print_progname) ();
+  else
+    {
+#if _LIBC
+      __fxprintf (NULL, "%s: ", program_name);
+#else
+      fprintf (stderr, "%s: ", program_name);
+#endif
+    }
+
+  va_start (args, message);
+  error_tail (status, errnum, message, args);
+
+#ifdef _LIBC
+  _IO_funlockfile (stderr);
+# ifdef __libc_ptf_call
+  __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0);
+# endif
+#endif
+}
+\f
+/* Sometimes we want to have at most one error per line.  This
+   variable controls whether this mode is selected or not.  */
+int error_one_per_line;
+
+void
+error_at_line (int status, int errnum, const char *file_name,
+               unsigned int line_number, const char *message, ...)
+{
+  va_list args;
+
+  if (error_one_per_line)
+    {
+      static const char *old_file_name;
+      static unsigned int old_line_number;
+
+      if (old_line_number == line_number
+          && (file_name == old_file_name
+              || strcmp (old_file_name, file_name) == 0))
+        /* Simply return and print nothing.  */
+        return;
+
+      old_file_name = file_name;
+      old_line_number = line_number;
+    }
+
+#if defined _LIBC && defined __libc_ptf_call
+  /* We do not want this call to be cut short by a thread
+     cancellation.  Therefore disable cancellation for now.  */
+  int state = PTHREAD_CANCEL_ENABLE;
+  __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state),
+                   0);
+#endif
+
+  flush_stdout ();
+#ifdef _LIBC
+  _IO_flockfile (stderr);
+#endif
+  if (error_print_progname)
+    (*error_print_progname) ();
+  else
+    {
+#if _LIBC
+      __fxprintf (NULL, "%s:", program_name);
+#else
+      fprintf (stderr, "%s:", program_name);
+#endif
+    }
+
+#if _LIBC
+  __fxprintf (NULL, file_name != NULL ? "%s:%d: " : " ",
+              file_name, line_number);
+#else
+  fprintf (stderr, file_name != NULL ? "%s:%d: " : " ",
+           file_name, line_number);
+#endif
+
+  va_start (args, message);
+  error_tail (status, errnum, message, args);
+
+#ifdef _LIBC
+  _IO_funlockfile (stderr);
+# ifdef __libc_ptf_call
+  __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0);
+# endif
+#endif
+}
+
+#ifdef _LIBC
+/* Make the weak alias.  */
+# undef error
+# undef error_at_line
+weak_alias (__error, error)
+weak_alias (__error_at_line, error_at_line)
+#endif
diff --git a/gnu/error.h b/gnu/error.h
new file mode 100644 (file)
index 0000000..5e5d35a
--- /dev/null
@@ -0,0 +1,67 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Declaration for error-reporting function
+   Copyright (C) 1995, 1996, 1997, 2003, 2006, 2008, 2009, 2010 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
+   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 _ERROR_H
+#define _ERROR_H 1
+
+#ifndef __attribute__
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The __-protected variants of the attributes 'format' and 'printf' are
+   accepted by gcc versions 2.6.4 (effectively 2.7) and later.
+   We enable __attribute__ only if these are supported too, because
+   gnulib and libintl do '#define printf __printf__' when they override
+   the 'printf' function.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+#  define __attribute__(Spec)   /* empty */
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* 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)'.  */
+
+extern void error (int __status, int __errnum, const char *__format, ...)
+     __attribute__ ((__format__ (__printf__, 3, 4)));
+
+extern void error_at_line (int __status, int __errnum, const char *__fname,
+                           unsigned int __lineno, const char *__format, ...)
+     __attribute__ ((__format__ (__printf__, 5, 6)));
+
+/* If NULL, error will flush stdout, then print on stderr the program
+   name, a colon and a space.  Otherwise, error will call this
+   function without parameters instead.  */
+extern void (*error_print_progname) (void);
+
+/* 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
+   variable controls whether this mode is selected or not.  */
+extern int error_one_per_line;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* error.h */
diff --git a/gnu/exclude.c b/gnu/exclude.c
new file mode 100644 (file)
index 0000000..00a053f
--- /dev/null
@@ -0,0 +1,558 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* exclude.c -- exclude file names
+
+   Copyright (C) 1992, 1993, 1994, 1997, 1999, 2000, 2001, 2002, 2003, 2004,
+   2005, 2006, 2007, 2009, 2010 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 <eggert@twinsun.com>
+   and Sergey Poznyakoff <gray@gnu.org>.
+   Thanks to Phil Proudman <phil@proudman51.freeserve.co.uk>
+   for improvement suggestions. */
+
+#include <config.h>
+
+#include <stdbool.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wctype.h>
+
+#include "exclude.h"
+#include "hash.h"
+#include "mbuiter.h"
+#include "fnmatch.h"
+#include "xalloc.h"
+#include "verify.h"
+
+#if USE_UNLOCKED_IO
+# include "unlocked-io.h"
+#endif
+
+/* Non-GNU systems lack these options, so we don't need to check them.  */
+#ifndef FNM_CASEFOLD
+# define FNM_CASEFOLD 0
+#endif
+#ifndef FNM_EXTMATCH
+# define FNM_EXTMATCH 0
+#endif
+#ifndef FNM_LEADING_DIR
+# define FNM_LEADING_DIR 0
+#endif
+
+verify (((EXCLUDE_ANCHORED | EXCLUDE_INCLUDE | EXCLUDE_WILDCARDS)
+         & (FNM_PATHNAME | FNM_NOESCAPE | FNM_PERIOD | FNM_LEADING_DIR
+            | FNM_CASEFOLD | FNM_EXTMATCH))
+        == 0);
+
+
+/* Exclusion patterns are grouped into a singly-linked list of
+   "exclusion segments".  Each segment represents a set of patterns
+   that can be matches using the same algorithm.  Non-wildcard
+   patterns are kept in hash tables, to speed up searches.  Wildcard
+   patterns are stored as arrays of patterns. */
+
+
+/* An exclude pattern-options pair.  The options are fnmatch options
+   ORed with EXCLUDE_* options.  */
+
+struct patopts
+  {
+    char const *pattern;
+    int options;
+  };
+
+/* An array of pattern-options pairs.  */
+
+struct exclude_pattern
+  {
+    struct patopts *exclude;
+    size_t exclude_alloc;
+    size_t exclude_count;
+  };
+
+enum exclude_type
+  {
+    exclude_hash,                    /* a hash table of excluded names */
+    exclude_pattern                  /* an array of exclude patterns */
+  };
+
+struct exclude_segment
+  {
+    struct exclude_segment *next;    /* next segment in list */
+    enum exclude_type type;          /* type of this segment */
+    int options;                     /* common options for this segment */
+    union
+    {
+      Hash_table *table;             /* for type == exclude_hash */
+      struct exclude_pattern pat;    /* for type == exclude_pattern */
+    } v;
+  };
+
+/* The exclude structure keeps a singly-linked list of exclude segments */
+struct exclude
+  {
+    struct exclude_segment *head, *tail;
+  };
+
+/* Return true if str has wildcard characters */
+bool
+fnmatch_pattern_has_wildcards (const char *str, int options)
+{
+  const char *cset = "\\?*[]";
+  if (options & FNM_NOESCAPE)
+    cset++;
+  while (*str)
+    {
+      size_t n = strcspn (str, cset);
+      if (str[n] == 0)
+        break;
+      else if (str[n] == '\\')
+        {
+          str += n + 1;
+          if (*str)
+            str++;
+        }
+      else
+        return true;
+    }
+  return false;
+}
+
+/* Return a newly allocated and empty exclude list.  */
+
+struct exclude *
+new_exclude (void)
+{
+  return xzalloc (sizeof *new_exclude ());
+}
+
+/* Calculate the hash of string.  */
+static size_t
+string_hasher (void const *data, size_t n_buckets)
+{
+  char const *p = data;
+  return hash_string (p, n_buckets);
+}
+
+/* Ditto, for case-insensitive hashes */
+static size_t
+string_hasher_ci (void const *data, size_t n_buckets)
+{
+  char const *p = data;
+  mbui_iterator_t iter;
+  size_t value = 0;
+
+  for (mbui_init (iter, p); mbui_avail (iter); mbui_advance (iter))
+    {
+      mbchar_t m = mbui_cur (iter);
+      wchar_t wc;
+
+      if (m.wc_valid)
+        wc = towlower (m.wc);
+      else
+        wc = *m.ptr;
+
+      value = (value * 31 + wc) % n_buckets;
+    }
+
+  return value;
+}
+
+/* compare two strings for equality */
+static bool
+string_compare (void const *data1, void const *data2)
+{
+  char const *p1 = data1;
+  char const *p2 = data2;
+  return strcmp (p1, p2) == 0;
+}
+
+/* compare two strings for equality, case-insensitive */
+static bool
+string_compare_ci (void const *data1, void const *data2)
+{
+  char const *p1 = data1;
+  char const *p2 = data2;
+  return mbscasecmp (p1, p2) == 0;
+}
+
+static void
+string_free (void *data)
+{
+  free (data);
+}
+
+/* Create new exclude segment of given TYPE and OPTIONS, and attach it
+   to the tail of list in EX */
+static struct exclude_segment *
+new_exclude_segment (struct exclude *ex, enum exclude_type type, int options)
+{
+  struct exclude_segment *sp = xzalloc (sizeof (struct exclude_segment));
+  sp->type = type;
+  sp->options = options;
+  switch (type)
+    {
+    case exclude_pattern:
+      break;
+
+    case exclude_hash:
+      sp->v.table = hash_initialize (0, NULL,
+                                     (options & FNM_CASEFOLD) ?
+                                       string_hasher_ci
+                                       : string_hasher,
+                                     (options & FNM_CASEFOLD) ?
+                                       string_compare_ci
+                                       : string_compare,
+                                     string_free);
+      break;
+    }
+  if (ex->tail)
+    ex->tail->next = sp;
+  else
+    ex->head = sp;
+  ex->tail = sp;
+  return sp;
+}
+
+/* Free a single exclude segment */
+static void
+free_exclude_segment (struct exclude_segment *seg)
+{
+  switch (seg->type)
+    {
+    case exclude_pattern:
+      free (seg->v.pat.exclude);
+      break;
+
+    case exclude_hash:
+      hash_free (seg->v.table);
+      break;
+    }
+  free (seg);
+}
+
+/* Free the storage associated with an exclude list.  */
+void
+free_exclude (struct exclude *ex)
+{
+  struct exclude_segment *seg;
+  for (seg = ex->head; seg; )
+    {
+      struct exclude_segment *next = seg->next;
+      free_exclude_segment (seg);
+      seg = next;
+    }
+  free (ex);
+}
+
+/* Return zero if PATTERN matches F, obeying OPTIONS, except that
+   (unlike fnmatch) wildcards are disabled in PATTERN.  */
+
+static int
+fnmatch_no_wildcards (char const *pattern, char const *f, int options)
+{
+  if (! (options & FNM_LEADING_DIR))
+    return ((options & FNM_CASEFOLD)
+            ? mbscasecmp (pattern, f)
+            : strcmp (pattern, f));
+  else if (! (options & FNM_CASEFOLD))
+    {
+      size_t patlen = strlen (pattern);
+      int r = strncmp (pattern, f, patlen);
+      if (! r)
+        {
+          r = f[patlen];
+          if (r == '/')
+            r = 0;
+        }
+      return r;
+    }
+  else
+    {
+      /* Walk through a copy of F, seeing whether P matches any prefix
+         of F.
+
+         FIXME: This is an O(N**2) algorithm; it should be O(N).
+         Also, the copy should not be necessary.  However, fixing this
+         will probably involve a change to the mbs* API.  */
+
+      char *fcopy = xstrdup (f);
+      char *p;
+      int r;
+      for (p = fcopy; ; *p++ = '/')
+        {
+          p = strchr (p, '/');
+          if (p)
+            *p = '\0';
+          r = mbscasecmp (pattern, fcopy);
+          if (!p || r <= 0)
+            break;
+        }
+      free (fcopy);
+      return r;
+    }
+}
+
+bool
+exclude_fnmatch (char const *pattern, char const *f, int options)
+{
+  int (*matcher) (char const *, char const *, int) =
+    (options & EXCLUDE_WILDCARDS
+     ? fnmatch
+     : fnmatch_no_wildcards);
+  bool matched = ((*matcher) (pattern, f, options) == 0);
+  char const *p;
+
+  if (! (options & EXCLUDE_ANCHORED))
+    for (p = f; *p && ! matched; p++)
+      if (*p == '/' && p[1] != '/')
+        matched = ((*matcher) (pattern, p + 1, options) == 0);
+
+  return matched;
+}
+
+/* Return true if the exclude_pattern segment SEG excludes F.  */
+
+static bool
+excluded_file_pattern_p (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 (excluded != exclude_fnmatch (pattern, f, options))
+        return !excluded;
+    }
+  return excluded;
+}
+
+/* Return true if the exclude_hash segment SEG excludes 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)
+{
+  int options = seg->options;
+  bool excluded = !! (options & EXCLUDE_INCLUDE);
+  Hash_table *table = seg->v.table;
+
+  do
+    {
+      /* initialize the pattern */
+      strcpy (buffer, f);
+
+      while (1)
+        {
+          if (hash_lookup (table, buffer))
+            return !excluded;
+          if (options & FNM_LEADING_DIR)
+            {
+              char *p = strrchr (buffer, '/');
+              if (p)
+                {
+                  *p = 0;
+                  continue;
+                }
+            }
+          break;
+        }
+
+      if (!(options & EXCLUDE_ANCHORED))
+        {
+          f = strchr (f, '/');
+          if (f)
+            f++;
+        }
+      else
+        break;
+    }
+  while (f);
+  return excluded;
+}
+
+/* Return true if EX excludes F.  */
+
+bool
+excluded_file_name (struct exclude const *ex, char const *f)
+{
+  struct exclude_segment *seg;
+  bool excluded;
+  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)
+    {
+      bool rc;
+
+      switch (seg->type)
+        {
+        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 (rc != excluded)
+        {
+          excluded = rc;
+          break;
+        }
+    }
+  free (filename);
+  return excluded;
+}
+
+/* Append to EX the exclusion PATTERN with OPTIONS.  */
+
+void
+add_exclude (struct exclude *ex, char const *pattern, int options)
+{
+  struct exclude_segment *seg;
+
+  if ((options & EXCLUDE_WILDCARDS)
+      && fnmatch_pattern_has_wildcards (pattern, 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);
+
+      pat = &seg->v.pat;
+      if (pat->exclude_count == pat->exclude_alloc)
+        pat->exclude = x2nrealloc (pat->exclude, &pat->exclude_alloc,
+                                   sizeof *pat->exclude);
+      patopts = &pat->exclude[pat->exclude_count++];
+      patopts->pattern = pattern;
+      patopts->options = 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);
+
+      str = xstrdup (pattern);
+      p = hash_insert (seg->v.table, str);
+      if (p != str)
+        free (str);
+    }
+}
+
+/* Use ADD_FUNC to append to EX the patterns in FILE_NAME, each with
+   OPTIONS.  LINE_END terminates each pattern in the file.  If
+   LINE_END is a space character, ignore trailing spaces and empty
+   lines in FILE.  Return -1 on failure, 0 on success.  */
+
+int
+add_exclude_file (void (*add_func) (struct exclude *, char const *, int),
+                  struct exclude *ex, char const *file_name, int options,
+                  char line_end)
+{
+  bool use_stdin = file_name[0] == '-' && !file_name[1];
+  FILE *in;
+  char *buf = NULL;
+  char *p;
+  char const *pattern;
+  char const *lim;
+  size_t buf_alloc = 0;
+  size_t buf_count = 0;
+  int c;
+  int e = 0;
+
+  if (use_stdin)
+    in = stdin;
+  else if (! (in = fopen (file_name, "r")))
+    return -1;
+
+  while ((c = getc (in)) != EOF)
+    {
+      if (buf_count == buf_alloc)
+        buf = x2realloc (buf, &buf_alloc);
+      buf[buf_count++] = c;
+    }
+
+  if (ferror (in))
+    e = errno;
+
+  if (!use_stdin && fclose (in) != 0)
+    e = errno;
+
+  buf = xrealloc (buf, buf_count + 1);
+  buf[buf_count] = line_end;
+  lim = buf + buf_count + ! (buf_count == 0 || buf[buf_count - 1] == line_end);
+  pattern = buf;
+
+  for (p = buf; p < lim; p++)
+    if (*p == line_end)
+      {
+        char *pattern_end = p;
+
+        if (isspace ((unsigned char) line_end))
+          {
+            for (; ; pattern_end--)
+              if (pattern_end == pattern)
+                goto next_pattern;
+              else if (! isspace ((unsigned char) pattern_end[-1]))
+                break;
+          }
+
+        *pattern_end = '\0';
+        (*add_func) (ex, pattern, options);
+
+      next_pattern:
+        pattern = p + 1;
+      }
+
+  errno = e;
+  return e ? -1 : 0;
+}
diff --git a/gnu/exclude.h b/gnu/exclude.h
new file mode 100644 (file)
index 0000000..7b514e4
--- /dev/null
@@ -0,0 +1,54 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* exclude.h -- declarations for excluding file names
+
+   Copyright (C) 1992, 1993, 1994, 1997, 1999, 2001, 2002, 2003, 2005, 2006,
+   2009, 2010 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 _GL_EXCLUDE_H
+#define _GL_EXCLUDE_H 1
+
+#include <stdbool.h>
+
+/* Written by Paul Eggert <eggert@twinsun.com>
+   and Sergey Poznyakoff <gray@gnu.org> */
+
+/* Exclude options, which can be ORed with fnmatch options.  */
+
+/* Patterns must match the start of file names, instead of matching
+   anywhere after a '/'.  */
+#define EXCLUDE_ANCHORED (1 << 30)
+
+/* Include instead of exclude.  */
+#define EXCLUDE_INCLUDE (1 << 29)
+
+/* '?', '*', '[', and '\\' are special in patterns.  Without this
+   option, these characters are ordinary and fnmatch is not used.  */
+#define EXCLUDE_WILDCARDS (1 << 28)
+
+struct exclude;
+
+bool fnmatch_pattern_has_wildcards (const char *, int);
+
+struct exclude *new_exclude (void);
+void free_exclude (struct exclude *);
+void add_exclude (struct exclude *, char const *, int);
+int add_exclude_file (void (*) (struct exclude *, char const *, int),
+                      struct exclude *, char const *, int, char);
+bool excluded_file_name (struct exclude const *, char const *);
+bool exclude_fnmatch (char const *pattern, char const *f, int options);
+
+#endif /* _GL_EXCLUDE_H */
diff --git a/gnu/exitfail.c b/gnu/exitfail.c
new file mode 100644 (file)
index 0000000..459e184
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Failure exit status
+
+   Copyright (C) 2002, 2003, 2005, 2006, 2007, 2009, 2010 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>
+
+#include "exitfail.h"
+
+#include <stdlib.h>
+
+int volatile exit_failure = EXIT_FAILURE;
diff --git a/gnu/exitfail.h b/gnu/exitfail.h
new file mode 100644 (file)
index 0000000..bdbbce0
--- /dev/null
@@ -0,0 +1,20 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Failure exit status
+
+   Copyright (C) 2002, 2009, 2010 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/>.  */
+
+extern int volatile exit_failure;
diff --git a/gnu/fchdir.c b/gnu/fchdir.c
new file mode 100644 (file)
index 0000000..83d3c33
--- /dev/null
@@ -0,0 +1,289 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* fchdir replacement.
+   Copyright (C) 2006-2010 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 <assert.h>
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifndef REPLACE_OPEN_DIRECTORY
+# define REPLACE_OPEN_DIRECTORY 0
+#endif
+
+#ifndef HAVE_CANONICALIZE_FILE_NAME
+# if GNULIB_CANONICALIZE || GNULIB_CANONICALIZE_LGPL
+#  define HAVE_CANONICALIZE_FILE_NAME 1
+# else
+#  define HAVE_CANONICALIZE_FILE_NAME 0
+#  define canonicalize_file_name(name) NULL
+# endif
+#endif
+
+/* This replacement assumes that a directory is not renamed while opened
+   through a file descriptor.
+
+   FIXME: On mingw, this would be possible to enforce if we were to
+   also open a HANDLE to each directory currently visited by a file
+   descriptor, since mingw refuses to rename any in-use file system
+   object.  */
+
+/* Array of file descriptors opened.  If REPLACE_OPEN_DIRECTORY or if it points
+   to a directory, it stores info about this directory.  */
+typedef struct
+{
+  char *name;       /* Absolute name of the directory, or NULL.  */
+  /* FIXME - add a DIR* member to make dirfd possible on mingw?  */
+} dir_info_t;
+static dir_info_t *dirs;
+static size_t dirs_allocated;
+
+/* Try to ensure dirs has enough room for a slot at index fd; free any
+   contents already in that slot.  Return false and set errno to
+   ENOMEM on allocation failure.  */
+static bool
+ensure_dirs_slot (size_t fd)
+{
+  if (fd < dirs_allocated)
+    free (dirs[fd].name);
+  else
+    {
+      size_t new_allocated;
+      dir_info_t *new_dirs;
+
+      new_allocated = 2 * dirs_allocated + 1;
+      if (new_allocated <= fd)
+        new_allocated = fd + 1;
+      new_dirs =
+        (dirs != NULL
+         ? (dir_info_t *) realloc (dirs, new_allocated * sizeof *dirs)
+         : (dir_info_t *) malloc (new_allocated * sizeof *dirs));
+      if (new_dirs == NULL)
+        return false;
+      memset (new_dirs + dirs_allocated, 0,
+              (new_allocated - dirs_allocated) * sizeof *dirs);
+      dirs = new_dirs;
+      dirs_allocated = new_allocated;
+    }
+  return true;
+}
+
+/* Return the canonical name of DIR in malloc'd storage.  */
+static char *
+get_name (char const *dir)
+{
+  char *result;
+  if (REPLACE_OPEN_DIRECTORY || !HAVE_CANONICALIZE_FILE_NAME)
+    {
+      /* The function canonicalize_file_name has not yet been ported
+         to mingw, with all its drive letter and backslash quirks.
+         Fortunately, getcwd is reliable in this case, but we ensure
+         we can get back to where we started before using it.  Treat
+         "." as a special case, as it is frequently encountered.  */
+      char *cwd = getcwd (NULL, 0);
+      int saved_errno;
+      if (dir[0] == '.' && dir[1] == '\0')
+        return cwd;
+      if (chdir (cwd))
+        return NULL;
+      result = chdir (dir) ? NULL : getcwd (NULL, 0);
+      saved_errno = errno;
+      if (chdir (cwd))
+        abort ();
+      free (cwd);
+      errno = saved_errno;
+    }
+  else
+    {
+      /* Avoid changing the directory.  */
+      result = canonicalize_file_name (dir);
+    }
+  return result;
+}
+
+/* Hook into the gnulib replacements for open() and close() to keep track
+   of the open file descriptors.  */
+
+/* Close FD, cleaning up any fd to name mapping if fd was visiting a
+   directory.  */
+void
+_gl_unregister_fd (int fd)
+{
+  if (fd >= 0 && fd < dirs_allocated)
+    {
+      free (dirs[fd].name);
+      dirs[fd].name = NULL;
+    }
+}
+
+/* Mark FD as visiting FILENAME.  FD must be non-negative, and refer
+   to an open file descriptor.  If REPLACE_OPEN_DIRECTORY is non-zero,
+   this should only be called if FD is visiting a directory.  Close FD
+   and return -1 if there is insufficient memory to track the
+   directory name; otherwise return FD.  */
+int
+_gl_register_fd (int fd, const char *filename)
+{
+  struct stat statbuf;
+
+  assert (0 <= fd);
+  if (REPLACE_OPEN_DIRECTORY
+      || (fstat (fd, &statbuf) == 0 && S_ISDIR (statbuf.st_mode)))
+    {
+      if (!ensure_dirs_slot (fd)
+          || (dirs[fd].name = get_name (filename)) == NULL)
+        {
+          int saved_errno = errno;
+          close (fd);
+          errno = saved_errno;
+          return -1;
+        }
+    }
+  return fd;
+}
+
+/* Mark NEWFD as a duplicate of OLDFD; useful from dup, dup2, dup3,
+   and fcntl.  Both arguments must be valid and distinct file
+   descriptors.  Close NEWFD and return -1 if OLDFD is tracking a
+   directory, but there is insufficient memory to track the same
+   directory in NEWFD; otherwise return NEWFD.  */
+int
+_gl_register_dup (int oldfd, int newfd)
+{
+  assert (0 <= oldfd && 0 <= newfd && oldfd != newfd);
+  if (oldfd < dirs_allocated && dirs[oldfd].name)
+    {
+      /* Duplicated a directory; must ensure newfd is allocated.  */
+      if (!ensure_dirs_slot (newfd)
+          || (dirs[newfd].name = strdup (dirs[oldfd].name)) == NULL)
+        {
+          int saved_errno = errno;
+          close (newfd);
+          errno = saved_errno;
+          newfd = -1;
+        }
+    }
+  else if (newfd < dirs_allocated)
+    {
+      /* Duplicated a non-directory; ensure newfd is cleared.  */
+      free (dirs[newfd].name);
+      dirs[newfd].name = NULL;
+    }
+  return newfd;
+}
+
+/* If FD is currently visiting a directory, then return the name of
+   that directory.  Otherwise, return NULL and set errno.  */
+const char *
+_gl_directory_name (int fd)
+{
+  if (0 <= fd && fd < dirs_allocated && dirs[fd].name != NULL)
+    return dirs[fd].name;
+  /* At this point, fd is either invalid, or open but not a directory.
+     If dup2 fails, errno is correctly EBADF.  */
+  if (0 <= fd)
+    {
+      if (dup2 (fd, fd) == fd)
+        errno = ENOTDIR;
+    }
+  else
+    errno = EBADF;
+  return NULL;
+}
+
+#if REPLACE_OPEN_DIRECTORY
+/* Return stat information about FD in STATBUF.  Needed when
+   rpl_open() used a dummy file to work around an open() that can't
+   normally visit directories.  */
+# undef fstat
+int
+rpl_fstat (int fd, struct stat *statbuf)
+{
+  if (0 <= fd && fd < dirs_allocated && dirs[fd].name != NULL)
+    return stat (dirs[fd].name, statbuf);
+  return fstat (fd, statbuf);
+}
+#endif
+
+/* Override opendir() and closedir(), to keep track of the open file
+   descriptors.  Needed because there is a function dirfd().  */
+
+int
+rpl_closedir (DIR *dp)
+#undef closedir
+{
+  int fd = dirfd (dp);
+  int retval = closedir (dp);
+
+  if (retval >= 0)
+    _gl_unregister_fd (fd);
+  return retval;
+}
+
+DIR *
+rpl_opendir (const char *filename)
+#undef opendir
+{
+  DIR *dp;
+
+  dp = opendir (filename);
+  if (dp != NULL)
+    {
+      int fd = dirfd (dp);
+      if (0 <= fd && _gl_register_fd (fd, filename) != fd)
+        {
+          int saved_errno = errno;
+          closedir (dp);
+          errno = saved_errno;
+          return NULL;
+        }
+    }
+  return dp;
+}
+
+/* Override dup(), to keep track of open file descriptors.  */
+
+int
+rpl_dup (int oldfd)
+#undef dup
+{
+  int newfd = dup (oldfd);
+
+  if (0 <= newfd)
+    newfd = _gl_register_dup (oldfd, newfd);
+  return newfd;
+}
+
+
+/* Implement fchdir() in terms of chdir().  */
+
+int
+fchdir (int fd)
+{
+  const char *name = _gl_directory_name (fd);
+  return name ? chdir (name) : -1;
+}
diff --git a/gnu/fchmodat.c b/gnu/fchmodat.c
new file mode 100644 (file)
index 0000000..80dcd9d
--- /dev/null
@@ -0,0 +1,55 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Change the protections of file relative to an open directory.
+   Copyright (C) 2006, 2009-2010 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 */
+
+#include <config.h>
+
+#include <sys/stat.h>
+
+#include <errno.h>
+
+#ifndef HAVE_LCHMOD
+/* Use a different name, to avoid conflicting with any
+   system-supplied declaration.  */
+# undef lchmod
+# define lchmod lchmod_rpl
+static int
+lchmod (char const *f _GL_UNUSED, mode_t m _GL_UNUSED)
+{
+  errno = ENOSYS;
+  return -1;
+}
+#endif
+
+/* Solaris 10 has no function like this.
+   Invoke chmod or lchmod on file, FILE, using mode MODE, in the directory
+   open on descriptor FD.  If possible, do it without changing the
+   working directory.  Otherwise, resort to using save_cwd/fchdir,
+   then (chmod|lchmod)/restore_cwd.  If either the save_cwd or the
+   restore_cwd fails, then give a diagnostic and exit nonzero.
+   Note that an attempt to use a FLAG value of AT_SYMLINK_NOFOLLOW
+   on a system without lchmod support causes this function to fail.  */
+
+#define AT_FUNC_NAME fchmodat
+#define AT_FUNC_F1 lchmod
+#define AT_FUNC_F2 chmod
+#define AT_FUNC_USE_F1_COND AT_SYMLINK_NOFOLLOW
+#define AT_FUNC_POST_FILE_PARAM_DECLS , mode_t mode, int flag
+#define AT_FUNC_POST_FILE_ARGS        , mode
+#include "at-func.c"
diff --git a/gnu/fchown-stub.c b/gnu/fchown-stub.c
new file mode 100644 (file)
index 0000000..1611b1d
--- /dev/null
@@ -0,0 +1,18 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+#include <config.h>
+
+#include <sys/types.h>
+#include <errno.h>
+
+/* A trivial substitute for `fchown'.
+
+   DJGPP 2.03 and earlier (and perhaps later) don't have `fchown',
+   so we pretend no-one has permission for this operation. */
+
+int
+fchown (int fd, uid_t uid, gid_t gid)
+{
+  errno = EPERM;
+  return -1;
+}
diff --git a/gnu/fchownat.c b/gnu/fchownat.c
new file mode 100644 (file)
index 0000000..87c5493
--- /dev/null
@@ -0,0 +1,109 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* This function serves as replacement for a missing fchownat function,
+   as well as a work around for the fchownat bug in glibc-2.4:
+    <http://lists.ubuntu.com/archives/ubuntu-users/2006-September/093218.html>
+   when the buggy fchownat-with-AT_SYMLINK_NOFOLLOW operates on a symlink, it
+   mistakenly affects the symlink referent, rather than the symlink itself.
+
+   Copyright (C) 2006-2007, 2009-2010 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 */
+
+#include <config.h>
+
+#include <unistd.h>
+
+#include <errno.h>
+#include <string.h>
+
+#include "openat.h"
+
+#if !HAVE_FCHOWNAT
+
+/* Replacement for Solaris' function by the same name.
+   Invoke chown or lchown on file, FILE, using OWNER and GROUP, in the
+   directory open on descriptor FD.  If FLAG is AT_SYMLINK_NOFOLLOW, then
+   use lchown, otherwise, use chown.  If possible, do it without changing
+   the working directory.  Otherwise, resort to using save_cwd/fchdir,
+   then (chown|lchown)/restore_cwd.  If either the save_cwd or the
+   restore_cwd fails, then give a diagnostic and exit nonzero.  */
+
+# define AT_FUNC_NAME fchownat
+# define AT_FUNC_F1 lchown
+# define AT_FUNC_F2 chown
+# define AT_FUNC_USE_F1_COND AT_SYMLINK_NOFOLLOW
+# define AT_FUNC_POST_FILE_PARAM_DECLS , uid_t owner, gid_t group, int flag
+# define AT_FUNC_POST_FILE_ARGS        , owner, group
+# include "at-func.c"
+# undef AT_FUNC_NAME
+# undef AT_FUNC_F1
+# undef AT_FUNC_F2
+# undef AT_FUNC_USE_F1_COND
+# undef AT_FUNC_POST_FILE_PARAM_DECLS
+# undef AT_FUNC_POST_FILE_ARGS
+
+#else /* HAVE_FCHOWNAT */
+
+# undef fchownat
+
+# if FCHOWNAT_NOFOLLOW_BUG
+
+/* Failure to handle AT_SYMLINK_NOFOLLOW requires the /proc/self/fd or
+   fchdir workaround to call lchown for lchownat, but there is no need
+   to penalize chownat.  */
+static int
+local_lchownat (int fd, char const *file, uid_t owner, gid_t group);
+
+# define AT_FUNC_NAME local_lchownat
+# define AT_FUNC_F1 lchown
+# define AT_FUNC_POST_FILE_PARAM_DECLS , uid_t owner, gid_t group
+# define AT_FUNC_POST_FILE_ARGS        , owner, group
+# include "at-func.c"
+# undef AT_FUNC_NAME
+# undef AT_FUNC_F1
+# undef AT_FUNC_POST_FILE_PARAM_DECLS
+# undef AT_FUNC_POST_FILE_ARGS
+
+# endif
+
+/* Work around bugs with trailing slash, using the same workarounds as
+   chown and lchown.  */
+
+int
+rpl_fchownat (int fd, char const *file, uid_t owner, gid_t group, int flag)
+{
+# if FCHOWNAT_NOFOLLOW_BUG
+  if (flag == AT_SYMLINK_NOFOLLOW)
+    return local_lchownat (fd, file, owner, group);
+# endif
+# if CHOWN_TRAILING_SLASH_BUG
+  {
+    size_t len = strlen (file);
+    struct stat st;
+    if (len && file[len - 1] == '/')
+      {
+        if (statat (fd, file, &st))
+          return -1;
+        if (flag == AT_SYMLINK_NOFOLLOW)
+          return fchownat (fd, file, owner, group, 0);
+      }
+  }
+# endif
+  return fchownat (fd, file, owner, group, flag);
+}
+
+#endif /* HAVE_FCHOWNAT */
diff --git a/gnu/fclose.c b/gnu/fclose.c
new file mode 100644 (file)
index 0000000..86757fa
--- /dev/null
@@ -0,0 +1,49 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* fclose replacement.
+   Copyright (C) 2008, 2009, 2010 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 <stdio.h>
+
+#include <errno.h>
+#include <unistd.h>
+
+/* Override fclose() to call the overridden close().  */
+
+int
+rpl_fclose (FILE *fp)
+#undef fclose
+{
+  int saved_errno = 0;
+
+  if (fflush (fp))
+    saved_errno = errno;
+
+  if (close (fileno (fp)) < 0 && saved_errno == 0)
+    saved_errno = errno;
+
+  fclose (fp); /* will fail with errno = EBADF */
+
+  if (saved_errno != 0)
+    {
+      errno = saved_errno;
+      return EOF;
+    }
+  return 0;
+}
diff --git a/gnu/fcntl.c b/gnu/fcntl.c
new file mode 100644 (file)
index 0000000..3f4af8a
--- /dev/null
@@ -0,0 +1,296 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Provide file descriptor control.
+
+   Copyright (C) 2009, 2010 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 Eric Blake <ebb9@byu.net>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <fcntl.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <unistd.h>
+
+#if !HAVE_FCNTL
+# define rpl_fcntl fcntl
+#endif
+#undef fcntl
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+/* Get declarations of the Win32 API functions.  */
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+
+/* Upper bound on getdtablesize().  See lib/getdtablesize.c.  */
+# define OPEN_MAX_MAX 0x10000
+
+/* Duplicate OLDFD into the first available slot of at least NEWFD,
+   which must be positive, with FLAGS determining whether the duplicate
+   will be inheritable.  */
+static int
+dupfd (int oldfd, int newfd, int flags)
+{
+  /* Mingw has no way to create an arbitrary fd.  Iterate until all
+     file descriptors less than newfd are filled up.  */
+  HANDLE curr_process = GetCurrentProcess ();
+  HANDLE old_handle = (HANDLE) _get_osfhandle (oldfd);
+  unsigned char fds_to_close[OPEN_MAX_MAX / CHAR_BIT];
+  unsigned int fds_to_close_bound = 0;
+  int result;
+  BOOL inherit = flags & O_CLOEXEC ? FALSE : TRUE;
+  int mode;
+
+  if (newfd < 0 || getdtablesize () <= newfd)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+  if (old_handle == INVALID_HANDLE_VALUE
+      || (mode = setmode (oldfd, O_BINARY)) == -1)
+    {
+      /* oldfd is not open, or is an unassigned standard file
+         descriptor.  */
+      errno = EBADF;
+      return -1;
+    }
+  setmode (oldfd, mode);
+  flags |= mode;
+
+  for (;;)
+    {
+      HANDLE new_handle;
+      int duplicated_fd;
+      unsigned int index;
+
+      if (!DuplicateHandle (curr_process,           /* SourceProcessHandle */
+                            old_handle,             /* SourceHandle */
+                            curr_process,           /* TargetProcessHandle */
+                            (PHANDLE) &new_handle,  /* TargetHandle */
+                            (DWORD) 0,              /* DesiredAccess */
+                            inherit,                /* InheritHandle */
+                            DUPLICATE_SAME_ACCESS)) /* Options */
+        {
+          /* TODO: Translate GetLastError () into errno.  */
+          errno = EMFILE;
+          result = -1;
+          break;
+        }
+      duplicated_fd = _open_osfhandle ((long) new_handle, flags);
+      if (duplicated_fd < 0)
+        {
+          CloseHandle (new_handle);
+          errno = EMFILE;
+          result = -1;
+          break;
+        }
+      if (newfd <= duplicated_fd)
+        {
+          result = duplicated_fd;
+          break;
+        }
+
+      /* Set the bit duplicated_fd in fds_to_close[].  */
+      index = (unsigned int) duplicated_fd / CHAR_BIT;
+      if (fds_to_close_bound <= index)
+        {
+          if (sizeof fds_to_close <= index)
+            /* Need to increase OPEN_MAX_MAX.  */
+            abort ();
+          memset (fds_to_close + fds_to_close_bound, '\0',
+                  index + 1 - fds_to_close_bound);
+          fds_to_close_bound = index + 1;
+        }
+      fds_to_close[index] |= 1 << ((unsigned int) duplicated_fd % CHAR_BIT);
+    }
+
+  /* Close the previous fds that turned out to be too small.  */
+  {
+    int saved_errno = errno;
+    unsigned int duplicated_fd;
+
+    for (duplicated_fd = 0;
+         duplicated_fd < fds_to_close_bound * CHAR_BIT;
+         duplicated_fd++)
+      if ((fds_to_close[duplicated_fd / CHAR_BIT]
+           >> (duplicated_fd % CHAR_BIT))
+          & 1)
+        close (duplicated_fd);
+
+    errno = saved_errno;
+  }
+
+# if REPLACE_FCHDIR
+  if (0 <= result)
+    result = _gl_register_dup (oldfd, result);
+# endif
+  return result;
+}
+#endif /* W32 */
+
+/* Perform the specified ACTION on the file descriptor FD, possibly
+   using the argument ARG further described below.  This replacement
+   handles the following actions, and forwards all others on to the
+   native fcntl.  An unrecognized ACTION returns -1 with errno set to
+   EINVAL.
+
+   F_DUPFD - duplicate FD, with int ARG being the minimum target fd.
+   If successful, return the duplicate, which will be inheritable;
+   otherwise return -1 and set errno.
+
+   F_DUPFD_CLOEXEC - duplicate FD, with int ARG being the minimum
+   target fd.  If successful, return the duplicate, which will not be
+   inheritable; otherwise return -1 and set errno.
+
+   F_GETFD - ARG need not be present.  If successful, return a
+   non-negative value containing the descriptor flags of FD (only
+   FD_CLOEXEC is portable, but other flags may be present); otherwise
+   return -1 and set errno.  */
+
+int
+rpl_fcntl (int fd, int action, /* arg */...)
+{
+  va_list arg;
+  int result = -1;
+  va_start (arg, action);
+  switch (action)
+    {
+
+#if !HAVE_FCNTL
+    case F_DUPFD:
+      {
+        int target = va_arg (arg, int);
+        result = dupfd (fd, target, 0);
+        break;
+      }
+#elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR
+    case F_DUPFD:
+      {
+        int target = va_arg (arg, int);
+        /* Detect invalid target; needed for cygwin 1.5.x.  */
+        if (target < 0 || getdtablesize () <= target)
+          errno = EINVAL;
+        else
+          {
+            result = fcntl (fd, action, target);
+# if REPLACE_FCHDIR
+            if (0 <= result)
+              result = _gl_register_dup (fd, result);
+# endif
+          }
+        break;
+      } /* F_DUPFD */
+#endif /* FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR */
+
+    case F_DUPFD_CLOEXEC:
+      {
+        int target = va_arg (arg, int);
+
+#if !HAVE_FCNTL
+        result = dupfd (fd, target, O_CLOEXEC);
+        break;
+#else /* HAVE_FCNTL */
+        /* Try the system call first, if the headers claim it exists
+           (that is, if GNULIB_defined_F_DUPFD_CLOEXEC is 0), since we
+           may be running with a glibc that has the macro but with an
+           older kernel that does not support it.  Cache the
+           information on whether the system call really works, but
+           avoid caching failure if the corresponding F_DUPFD fails
+           for any reason.  0 = unknown, 1 = yes, -1 = no.  */
+        static int have_dupfd_cloexec = GNULIB_defined_F_DUPFD_CLOEXEC ? -1 : 0;
+        if (0 <= have_dupfd_cloexec)
+          {
+            result = fcntl (fd, action, target);
+            if (0 <= result || errno != EINVAL)
+              {
+                have_dupfd_cloexec = 1;
+# if REPLACE_FCHDIR
+                if (0 <= result)
+                  result = _gl_register_dup (fd, result);
+# endif
+              }
+            else
+              {
+                result = rpl_fcntl (fd, F_DUPFD, target);
+                if (result < 0)
+                  break;
+                have_dupfd_cloexec = -1;
+              }
+          }
+        else
+          result = rpl_fcntl (fd, F_DUPFD, target);
+        if (0 <= result && have_dupfd_cloexec == -1)
+          {
+            int flags = fcntl (result, F_GETFD);
+            if (flags < 0 || fcntl (result, F_SETFD, flags | FD_CLOEXEC) == -1)
+              {
+                int saved_errno = errno;
+                close (result);
+                errno = saved_errno;
+                result = -1;
+              }
+          }
+        break;
+#endif /* HAVE_FCNTL */
+      } /* F_DUPFD_CLOEXEC */
+
+#if !HAVE_FCNTL
+    case F_GETFD:
+      {
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+        HANDLE handle = (HANDLE) _get_osfhandle (fd);
+        DWORD flags;
+        if (handle == INVALID_HANDLE_VALUE
+            || GetHandleInformation (handle, &flags) == 0)
+          errno = EBADF;
+        else
+          result = (flags & HANDLE_FLAG_INHERIT) ? 0 : FD_CLOEXEC;
+# else /* !W32 */
+        /* Use dup2 to reject invalid file descriptors.  No way to
+           access this information, so punt.  */
+        if (0 <= dup2 (fd, fd))
+          result = 0;
+# endif /* !W32 */
+        break;
+      } /* F_GETFD */
+#endif /* !HAVE_FCNTL */
+
+      /* Implementing F_SETFD on mingw is not trivial - there is no
+         API for changing the O_NOINHERIT bit on an fd, and merely
+         changing the HANDLE_FLAG_INHERIT bit on the underlying handle
+         can lead to odd state.  It may be possible by duplicating the
+         handle, using _open_osfhandle with the right flags, then
+         using dup2 to move the duplicate onto the original, but that
+         is not supported for now.  */
+
+    default:
+      {
+#if HAVE_FCNTL
+        void *p = va_arg (arg, void *);
+        result = fcntl (fd, action, p);
+#else
+        errno = EINVAL;
+#endif
+        break;
+      }
+    }
+  va_end (arg);
+  return result;
+}
diff --git a/gnu/fcntl.in.h b/gnu/fcntl.in.h
new file mode 100644 (file)
index 0000000..95298de
--- /dev/null
@@ -0,0 +1,281 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Like <fcntl.h>, but with non-working flags defined to 0.
+
+   Copyright (C) 2006-2010 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 */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+#if defined __need_system_fcntl_h
+/* Special invocation convention.  */
+
+#include <sys/types.h>
+#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems.  */
+# include <sys/stat.h>
+#endif
+#@INCLUDE_NEXT@ @NEXT_FCNTL_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_FCNTL_H
+
+#include <sys/types.h>
+#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems.  */
+# include <sys/stat.h>
+#endif
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_FCNTL_H@
+
+#ifndef _GL_FCNTL_H
+#define _GL_FCNTL_H
+
+#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems.  */
+# include <unistd.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.  */
+
+
+/* Declare overridden functions.  */
+
+#if @GNULIB_FCNTL@
+# if @REPLACE_FCNTL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fcntl
+#   define fcntl rpl_fcntl
+#  endif
+_GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...));
+_GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...));
+# else
+#  if !@HAVE_FCNTL@
+_GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...));
+#  endif
+_GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...));
+# endif
+_GL_CXXALIASWARN (fcntl);
+#elif defined GNULIB_POSIXCHECK
+# undef fcntl
+# if HAVE_RAW_DECL_FCNTL
+_GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - "
+                 "use gnulib module fcntl for portability");
+# endif
+#endif
+
+#if @GNULIB_OPEN@
+# if @REPLACE_OPEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef open
+#   define open rpl_open
+#  endif
+_GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                             _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+# else
+_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+# endif
+_GL_CXXALIASWARN (open);
+#elif defined GNULIB_POSIXCHECK
+# undef open
+/* Assume open is always declared.  */
+_GL_WARN_ON_USE (open, "open is not always POSIX compliant - "
+                 "use gnulib module open for portability");
+#endif
+
+#if @GNULIB_OPENAT@
+# if @REPLACE_OPENAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef openat
+#   define openat rpl_openat
+#  endif
+_GL_FUNCDECL_RPL (openat, int,
+                  (int fd, char const *file, int flags, /* mode_t mode */ ...)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (openat, int,
+                  (int fd, char const *file, int flags, /* mode_t mode */ ...));
+# else
+#  if !@HAVE_OPENAT@
+_GL_FUNCDECL_SYS (openat, int,
+                  (int fd, char const *file, int flags, /* mode_t mode */ ...)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (openat, int,
+                  (int fd, char const *file, int flags, /* mode_t mode */ ...));
+# endif
+_GL_CXXALIASWARN (openat);
+#elif defined GNULIB_POSIXCHECK
+# undef openat
+# if HAVE_RAW_DECL_OPENAT
+_GL_WARN_ON_USE (openat, "openat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+/* Fix up the FD_* macros, only known to be missing on mingw.  */
+
+#ifndef FD_CLOEXEC
+# define FD_CLOEXEC 1
+#endif
+
+/* Fix up the supported F_* macros.  Intentionally leave other F_*
+   macros undefined.  Only known to be missing on mingw.  */
+
+#ifndef F_DUPFD_CLOEXEC
+# define F_DUPFD_CLOEXEC 0x40000000
+/* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise.  */
+# define GNULIB_defined_F_DUPFD_CLOEXEC 1
+#else
+# define GNULIB_defined_F_DUPFD_CLOEXEC 0
+#endif
+
+#ifndef F_DUPFD
+# define F_DUPFD 1
+#endif
+
+#ifndef F_GETFD
+# define F_GETFD 2
+#endif
+
+/* Fix up the O_* macros.  */
+
+#if !defined O_DIRECT && defined O_DIRECTIO
+/* Tru64 spells it `O_DIRECTIO'.  */
+# define O_DIRECT O_DIRECTIO
+#endif
+
+#if !defined O_CLOEXEC && defined O_NOINHERIT
+/* Mingw spells it `O_NOINHERIT'.  Intentionally leave it
+   undefined if not available.  */
+# define O_CLOEXEC O_NOINHERIT
+#endif
+
+#ifndef O_DIRECT
+# define O_DIRECT 0
+#endif
+
+#ifndef O_DIRECTORY
+# define O_DIRECTORY 0
+#endif
+
+#ifndef O_DSYNC
+# define O_DSYNC 0
+#endif
+
+#ifndef O_NDELAY
+# define O_NDELAY 0
+#endif
+
+#ifndef O_NOATIME
+# define O_NOATIME 0
+#endif
+
+#ifndef O_NONBLOCK
+# define O_NONBLOCK O_NDELAY
+#endif
+
+#ifndef O_NOCTTY
+# define O_NOCTTY 0
+#endif
+
+#ifndef O_NOFOLLOW
+# define O_NOFOLLOW 0
+#endif
+
+#ifndef O_NOLINKS
+# define O_NOLINKS 0
+#endif
+
+#ifndef O_RSYNC
+# define O_RSYNC 0
+#endif
+
+#ifndef O_SYNC
+# define O_SYNC 0
+#endif
+
+#ifndef O_TTY_INIT
+# define O_TTY_INIT 0
+#endif
+
+/* For systems that distinguish between text and binary I/O.
+   O_BINARY is usually declared in fcntl.h  */
+#if !defined O_BINARY && defined _O_BINARY
+  /* For MSC-compatible compilers.  */
+# define O_BINARY _O_BINARY
+# define O_TEXT _O_TEXT
+#endif
+
+#if defined __BEOS__ || defined __HAIKU__
+  /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect.  */
+# undef O_BINARY
+# undef O_TEXT
+#endif
+
+#ifndef O_BINARY
+# define O_BINARY 0
+# define O_TEXT 0
+#endif
+
+/* Fix up the AT_* macros.  */
+
+/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive.  Its
+   value exceeds INT_MAX, so its use as an int doesn't conform to the
+   C standard, and GCC and Sun C complain in some cases.  If the bug
+   is present, undef AT_FDCWD here, so it can be redefined below.  */
+#if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553
+# undef AT_FDCWD
+#endif
+
+/* Use the same bit pattern as Solaris 9, but with the proper
+   signedness.  The bit pattern is important, in case this actually is
+   Solaris with the above workaround.  */
+#ifndef AT_FDCWD
+# define AT_FDCWD (-3041965)
+#endif
+
+/* Use the same values as Solaris 9.  This shouldn't matter, but
+   there's no real reason to differ.  */
+#ifndef AT_SYMLINK_NOFOLLOW
+# define AT_SYMLINK_NOFOLLOW 4096
+#endif
+
+#ifndef AT_REMOVEDIR
+# define AT_REMOVEDIR 1
+#endif
+
+/* Solaris 9 lacks these two, so just pick unique values.  */
+#ifndef AT_SYMLINK_FOLLOW
+# define AT_SYMLINK_FOLLOW 2
+#endif
+
+#ifndef AT_EACCESS
+# define AT_EACCESS 4
+#endif
+
+
+#endif /* _GL_FCNTL_H */
+#endif /* _GL_FCNTL_H */
+#endif
diff --git a/gnu/fd-safer.c b/gnu/fd-safer.c
new file mode 100644 (file)
index 0000000..292f7f8
--- /dev/null
@@ -0,0 +1,51 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Return a safer copy of a file descriptor.
+
+   Copyright (C) 2005-2006, 2009-2010 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.  */
+
+#include <config.h>
+
+#include "unistd-safer.h"
+
+#include <errno.h>
+#include <unistd.h>
+
+/* Return FD, unless FD would be a copy of standard input, output, or
+   error; in that case, return a duplicate of FD, closing FD.  On
+   failure to duplicate, close FD, set errno, and return -1.  Preserve
+   errno if FD is negative, so that the caller can always inspect
+   errno when the returned value is negative.
+
+   This function is usefully wrapped around functions that return file
+   descriptors, e.g., fd_safer (open ("file", O_RDONLY)).  */
+
+int
+fd_safer (int fd)
+{
+  if (STDIN_FILENO <= fd && fd <= STDERR_FILENO)
+    {
+      int f = dup_safer (fd);
+      int e = errno;
+      close (fd);
+      errno = e;
+      fd = f;
+    }
+
+  return fd;
+}
diff --git a/gnu/fdopendir.c b/gnu/fdopendir.c
new file mode 100644 (file)
index 0000000..7488fbb
--- /dev/null
@@ -0,0 +1,136 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* provide a replacement fdopendir function
+   Copyright (C) 2004-2010 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 */
+
+#include <config.h>
+
+#include <dirent.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+
+#if !HAVE_FDOPENDIR
+
+# include "openat.h"
+# include "openat-priv.h"
+# include "save-cwd.h"
+
+# if GNULIB_DIRENT_SAFER
+#  include "dirent--.h"
+# endif
+
+/* Replacement for Solaris' function by the same name.
+   <http://www.google.com/search?q=fdopendir+site:docs.sun.com>
+   First, try to simulate it via opendir ("/proc/self/fd/FD").  Failing
+   that, simulate it by using fchdir metadata, or by doing
+   save_cwd/fchdir/opendir(".")/restore_cwd.
+   If either the save_cwd or the restore_cwd fails (relatively unlikely),
+   then give a diagnostic and exit nonzero.
+   Otherwise, this function works just like Solaris' fdopendir.
+
+   W A R N I N G:
+   Unlike other fd-related functions, this one effectively consumes
+   its FD parameter.  The caller should not close or otherwise
+   manipulate FD if this function returns successfully.  Also, this
+   implementation does not guarantee that dirfd(fdopendir(n))==n;
+   the open directory stream may use a clone of FD, or have no
+   associated fd at all.  */
+DIR *
+fdopendir (int fd)
+{
+  int saved_errno;
+  DIR *dir;
+
+  char buf[OPENAT_BUFFER_SIZE];
+  char *proc_file = openat_proc_name (buf, fd, ".");
+  if (proc_file)
+    {
+      dir = opendir (proc_file);
+      saved_errno = errno;
+    }
+  else
+    {
+      dir = NULL;
+      saved_errno = EOPNOTSUPP;
+    }
+
+  /* If the syscall fails with an expected errno value, resort to
+     save_cwd/restore_cwd.  */
+  if (! dir && EXPECTED_ERRNO (saved_errno))
+    {
+# if REPLACE_FCHDIR
+      const char *name = _gl_directory_name (fd);
+      if (name)
+        dir = opendir (name);
+      saved_errno = errno;
+# else /* !REPLACE_FCHDIR */
+      struct saved_cwd saved_cwd;
+      if (save_cwd (&saved_cwd) != 0)
+        openat_save_fail (errno);
+
+      if (fchdir (fd) != 0)
+        {
+          dir = NULL;
+          saved_errno = errno;
+        }
+      else
+        {
+          dir = opendir (".");
+          saved_errno = errno;
+
+          if (restore_cwd (&saved_cwd) != 0)
+            openat_restore_fail (errno);
+        }
+
+      free_cwd (&saved_cwd);
+# endif /* !REPLACE_FCHDIR */
+    }
+
+  if (dir)
+    close (fd);
+  if (proc_file != buf)
+    free (proc_file);
+  errno = saved_errno;
+  return dir;
+}
+
+#else /* HAVE_FDOPENDIR */
+
+# include <errno.h>
+# include <sys/stat.h>
+
+# undef fdopendir
+
+/* Like fdopendir, but work around GNU/Hurd bug by validating FD.  */
+
+DIR *
+rpl_fdopendir (int fd)
+{
+  struct stat st;
+  if (fstat (fd, &st))
+    return NULL;
+  if (!S_ISDIR (st.st_mode))
+    {
+      errno = ENOTDIR;
+      return NULL;
+    }
+  return fdopendir (fd);
+}
+
+#endif /* HAVE_FDOPENDIR */
diff --git a/gnu/file-set.c b/gnu/file-set.c
new file mode 100644 (file)
index 0000000..1bcc05a
--- /dev/null
@@ -0,0 +1,76 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Specialized functions to manipulate a set of files.
+   Copyright (C) 2007, 2009-2010 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 */
+
+#include <config.h>
+#include "file-set.h"
+
+#include "hash-triple.h"
+#include "xalloc.h"
+
+/* Record file, FILE, and dev/ino from *STATS, in the hash table, HT.
+   If HT is NULL, return immediately.
+   If memory allocation fails, exit immediately.  */
+void
+record_file (Hash_table *ht, char const *file, struct stat const *stats)
+{
+  struct F_triple *ent;
+
+  if (ht == NULL)
+    return;
+
+  ent = xmalloc (sizeof *ent);
+  ent->name = xstrdup (file);
+  ent->st_ino = stats->st_ino;
+  ent->st_dev = stats->st_dev;
+
+  {
+    struct F_triple *ent_from_table = hash_insert (ht, ent);
+    if (ent_from_table == NULL)
+      {
+        /* Insertion failed due to lack of memory.  */
+        xalloc_die ();
+      }
+
+    if (ent_from_table != ent)
+      {
+        /* There was alread a matching entry in the table, so ENT was
+           not inserted.  Free it.  */
+        triple_free (ent);
+      }
+  }
+}
+
+/* Return true if there is an entry in hash table, HT,
+   for the file described by FILE and STATS.  */
+bool
+seen_file (Hash_table const *ht, char const *file,
+           struct stat const *stats)
+{
+  struct F_triple new_ent;
+
+  if (ht == NULL)
+    return false;
+
+  new_ent.name = (char *) file;
+  new_ent.st_ino = stats->st_ino;
+  new_ent.st_dev = stats->st_dev;
+
+  return !!hash_lookup (ht, &new_ent);
+}
diff --git a/gnu/file-set.h b/gnu/file-set.h
new file mode 100644 (file)
index 0000000..ef854ee
--- /dev/null
@@ -0,0 +1,14 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdbool.h>
+
+#include "hash.h"
+
+extern void record_file (Hash_table *ht, char const *file,
+                         struct stat const *stats)
+  __attribute__((nonnull(2, 3)));
+
+extern bool seen_file (Hash_table const *ht, char const *file,
+                       struct stat const *stats);
diff --git a/gnu/fileblocks.c b/gnu/fileblocks.c
new file mode 100644 (file)
index 0000000..77717c8
--- /dev/null
@@ -0,0 +1,76 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Convert file size to number of blocks on System V-like machines.
+
+   Copyright (C) 1990, 1997-1999, 2004-2006, 2009-2010 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 Brian L. Matthews, blm@6sceng.UUCP. */
+
+#include <config.h>
+
+#include <sys/types.h>
+
+#if HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif
+
+#if !HAVE_STRUCT_STAT_ST_BLOCKS && !defined _POSIX_SOURCE && defined BSIZE
+
+# include <unistd.h>
+
+# ifndef NINDIR
+
+#  if defined __DJGPP__
+typedef long daddr_t; /* for disk address */
+#  endif
+
+/* Some SysV's, like Irix, seem to lack this.  Hope it's correct. */
+/* Number of inode pointers per indirect block. */
+#  define NINDIR (BSIZE / sizeof (daddr_t))
+# endif /* !NINDIR */
+
+/* Number of direct block addresses in an inode. */
+# define NDIR   10
+
+/* Return the number of 512-byte blocks in a file of SIZE bytes. */
+
+off_t
+st_blocks (off_t size)
+{
+  off_t datablks = size / 512 + (size % 512 != 0);
+  off_t indrblks = 0;
+
+  if (datablks > NDIR)
+    {
+      indrblks = (datablks - NDIR - 1) / NINDIR + 1;
+
+      if (datablks > NDIR + NINDIR)
+        {
+          indrblks += (datablks - NDIR - NINDIR - 1) / (NINDIR * NINDIR) + 1;
+
+          if (datablks > NDIR + NINDIR + NINDIR * NINDIR)
+            indrblks++;
+        }
+    }
+
+  return datablks + indrblks;
+}
+#else
+/* This declaration is solely to ensure that after preprocessing
+   this file is never empty.  */
+typedef int textutils_fileblocks_unused;
+#endif
diff --git a/gnu/float+.h b/gnu/float+.h
new file mode 100644 (file)
index 0000000..4a120b7
--- /dev/null
@@ -0,0 +1,150 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Supplemental information about the floating-point formats.
+   Copyright (C) 2007, 2009, 2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#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[2 * (SIZEOF_FLT <= sizeof (float)) - 1];
+typedef int verify_sizeof_dbl[2 * (SIZEOF_DBL <= sizeof (double)) - 1];
+typedef int verify_sizeof_ldbl[2 * (SIZEOF_LDBL <= sizeof (long double)) - 1];
+
+#endif /* _FLOATPLUS_H */
diff --git a/gnu/float.in.h b/gnu/float.in.h
new file mode 100644 (file)
index 0000000..9ec97ab
--- /dev/null
@@ -0,0 +1,64 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A correct <float.h>.
+
+   Copyright (C) 2007-2010 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 _GL_FLOAT_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_FLOAT_H@
+
+#ifndef _GL_FLOAT_H
+#define _GL_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
+
+#endif /* _GL_FLOAT_H */
+#endif /* _GL_FLOAT_H */
diff --git a/gnu/fnmatch.c b/gnu/fnmatch.c
new file mode 100644 (file)
index 0000000..178fdaf
--- /dev/null
@@ -0,0 +1,356 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copyright (C) 1991, 1992, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+   2003, 2004, 2005, 2006, 2007, 2009, 2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _LIBC
+# include <config.h>
+#endif
+
+/* Enable GNU extensions in fnmatch.h.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE    1
+#endif
+
+#if ! defined __builtin_expect && __GNUC__ < 3
+# define __builtin_expect(expr, expected) (expr)
+#endif
+
+#include <fnmatch.h>
+
+#include <alloca.h>
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+#include <stddef.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define WIDE_CHAR_SUPPORT \
+  (HAVE_WCTYPE_H && HAVE_BTOWC && HAVE_ISWCTYPE \
+   && HAVE_WMEMCHR && (HAVE_WMEMCPY || HAVE_WMEMPCPY))
+
+/* For platform which support the ISO C amendement 1 functionality we
+   support user defined character classes.  */
+#if defined _LIBC || WIDE_CHAR_SUPPORT
+# include <wctype.h>
+# include <wchar.h>
+#endif
+
+/* We need some of the locale data (the collation sequence information)
+   but there is no interface to get this information in general.  Therefore
+   we support a correct implementation only in glibc.  */
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+# include "../locale/elem-hash.h"
+# include "../locale/coll-lookup.h"
+# include <shlib-compat.h>
+
+# define CONCAT(a,b) __CONCAT(a,b)
+# define mbsrtowcs __mbsrtowcs
+# define fnmatch __fnmatch
+extern int fnmatch (const char *pattern, const char *string, int flags);
+#endif
+
+#ifndef SIZE_MAX
+# define SIZE_MAX ((size_t) -1)
+#endif
+
+/* We often have to test for FNM_FILE_NAME and FNM_PERIOD being both set.  */
+#define NO_LEADING_PERIOD(flags) \
+  ((flags & (FNM_FILE_NAME | FNM_PERIOD)) == (FNM_FILE_NAME | FNM_PERIOD))
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+   actually compiling the library itself, and have not detected a bug
+   in the library.  This code is part of the GNU C
+   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,
+   it is simpler to just do this in the source for each such file.  */
+
+#if defined _LIBC || !defined __GNU_LIBRARY__ || !HAVE_FNMATCH_GNU
+
+
+# if ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK))
+#  define isblank(c) ((c) == ' ' || (c) == '\t')
+# endif
+
+# define STREQ(s1, s2) (strcmp (s1, s2) == 0)
+
+# 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.  */
+#  ifdef CHARCLASS_NAME_MAX
+#   define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
+#  else
+/* This shouldn't happen but some implementation might still have this
+   problem.  Use a reasonable default value.  */
+#   define CHAR_CLASS_MAX_LENGTH 256
+#  endif
+
+#  ifdef _LIBC
+#   define IS_CHAR_CLASS(string) __wctype (string)
+#  else
+#   define IS_CHAR_CLASS(string) wctype (string)
+#  endif
+
+#  ifdef _LIBC
+#   define ISWCTYPE(WC, WT)     __iswctype (WC, WT)
+#  else
+#   define ISWCTYPE(WC, WT)     iswctype (WC, WT)
+#  endif
+
+#  if (HAVE_MBSTATE_T && HAVE_MBSRTOWCS) || _LIBC
+/* In this case we are implementing the multibyte character handling.  */
+#   define HANDLE_MULTIBYTE     1
+#  endif
+
+# else
+#  define CHAR_CLASS_MAX_LENGTH  6 /* Namely, `xdigit'.  */
+
+#  define IS_CHAR_CLASS(string)                                               \
+   (STREQ (string, "alpha") || STREQ (string, "upper")                        \
+    || STREQ (string, "lower") || STREQ (string, "digit")                     \
+    || STREQ (string, "alnum") || STREQ (string, "xdigit")                    \
+    || STREQ (string, "space") || STREQ (string, "print")                     \
+    || STREQ (string, "punct") || STREQ (string, "graph")                     \
+    || STREQ (string, "cntrl") || STREQ (string, "blank"))
+# endif
+
+/* Avoid depending on library functions or files
+   whose names are inconsistent.  */
+
+/* Global variable.  */
+static int posixly_correct;
+
+# ifndef internal_function
+/* Inside GNU libc we mark some function in a special way.  In other
+   environments simply ignore the marking.  */
+#  define internal_function
+# endif
+
+/* Note that this evaluates C many times.  */
+# define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c))
+# define CHAR   char
+# define UCHAR  unsigned char
+# define INT    int
+# define FCT    internal_fnmatch
+# define EXT    ext_match
+# define END    end_pattern
+# define L_(CS) CS
+# ifdef _LIBC
+#  define BTOWC(C)      __btowc (C)
+# else
+#  define BTOWC(C)      btowc (C)
+# endif
+# define STRLEN(S) strlen (S)
+# define STRCAT(D, S) strcat (D, S)
+# ifdef _LIBC
+#  define MEMPCPY(D, S, N) __mempcpy (D, S, N)
+# else
+#  if HAVE_MEMPCPY
+#   define MEMPCPY(D, S, N) mempcpy (D, S, N)
+#  else
+#   define MEMPCPY(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N)))
+#  endif
+# endif
+# define MEMCHR(S, C, N) memchr (S, C, N)
+# define STRCOLL(S1, S2) strcoll (S1, S2)
+# include "fnmatch_loop.c"
+
+
+# if HANDLE_MULTIBYTE
+#  define FOLD(c) ((flags & FNM_CASEFOLD) ? towlower (c) : (c))
+#  define CHAR  wchar_t
+#  define UCHAR wint_t
+#  define INT   wint_t
+#  define FCT   internal_fnwmatch
+#  define EXT   ext_wmatch
+#  define END   end_wpattern
+#  define L_(CS)        L##CS
+#  define BTOWC(C)      (C)
+#  ifdef _LIBC
+#   define STRLEN(S) __wcslen (S)
+#   define STRCAT(D, S) __wcscat (D, S)
+#   define MEMPCPY(D, S, N) __wmempcpy (D, S, N)
+#  else
+#   define STRLEN(S) wcslen (S)
+#   define STRCAT(D, S) wcscat (D, S)
+#   if HAVE_WMEMPCPY
+#    define MEMPCPY(D, S, N) wmempcpy (D, S, N)
+#   else
+#    define MEMPCPY(D, S, N) (wmemcpy (D, S, N) + (N))
+#   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
+/* We have to convert the wide character string in a multibyte string.  But
+   we know that the character class names consist of alphanumeric characters
+   from the portable character set, and since the wide character encoding
+   for a member of the portable character set is the same code point as
+   its single-byte encoding, we can use a simplified method to convert the
+   string to a multibyte character string.  */
+static wctype_t
+is_char_class (const wchar_t *wcs)
+{
+  char s[CHAR_CLASS_MAX_LENGTH + 1];
+  char *cp = s;
+
+  do
+    {
+      /* Test for a printable character from the portable character set.  */
+#  ifdef _LIBC
+      if (*wcs < 0x20 || *wcs > 0x7e
+          || *wcs == 0x24 || *wcs == 0x40 || *wcs == 0x60)
+        return (wctype_t) 0;
+#  else
+      switch (*wcs)
+        {
+        case L' ': case L'!': case L'"': case L'#': case L'%':
+        case L'&': case L'\'': case L'(': case L')': case L'*':
+        case L'+': case L',': case L'-': case L'.': case L'/':
+        case L'0': case L'1': case L'2': case L'3': case L'4':
+        case L'5': case L'6': case L'7': case L'8': case L'9':
+        case L':': case L';': case L'<': case L'=': case L'>':
+        case L'?':
+        case L'A': case L'B': case L'C': case L'D': case L'E':
+        case L'F': case L'G': case L'H': case L'I': case L'J':
+        case L'K': case L'L': case L'M': case L'N': case L'O':
+        case L'P': case L'Q': case L'R': case L'S': case L'T':
+        case L'U': case L'V': case L'W': case L'X': case L'Y':
+        case L'Z':
+        case L'[': case L'\\': case L']': case L'^': case L'_':
+        case L'a': case L'b': case L'c': case L'd': case L'e':
+        case L'f': case L'g': case L'h': case L'i': case L'j':
+        case L'k': case L'l': case L'm': case L'n': case L'o':
+        case L'p': case L'q': case L'r': case L's': case L't':
+        case L'u': case L'v': case L'w': case L'x': case L'y':
+        case L'z': case L'{': case L'|': case L'}': case L'~':
+          break;
+        default:
+          return (wctype_t) 0;
+        }
+#  endif
+
+      /* Avoid overrunning the buffer.  */
+      if (cp == s + CHAR_CLASS_MAX_LENGTH)
+        return (wctype_t) 0;
+
+      *cp++ = (char) *wcs++;
+    }
+  while (*wcs != L'\0');
+
+  *cp = '\0';
+
+#  ifdef _LIBC
+  return __wctype (s);
+#  else
+  return wctype (s);
+#  endif
+}
+#  define IS_CHAR_CLASS(string) is_char_class (string)
+
+#  include "fnmatch_loop.c"
+# endif
+
+
+int
+fnmatch (const char *pattern, const char *string, int flags)
+{
+# if HANDLE_MULTIBYTE
+#  define ALLOCA_LIMIT 2000
+  if (__builtin_expect (MB_CUR_MAX, 1) != 1)
+    {
+      mbstate_t ps;
+      size_t patsize;
+      size_t strsize;
+      size_t totsize;
+      wchar_t *wpattern;
+      wchar_t *wstring;
+      int res;
+
+      /* Calculate the size needed to convert the strings to
+         wide characters.  */
+      memset (&ps, '\0', sizeof (ps));
+      patsize = mbsrtowcs (NULL, &pattern, 0, &ps) + 1;
+      if (__builtin_expect (patsize != 0, 1))
+        {
+          assert (mbsinit (&ps));
+          strsize = mbsrtowcs (NULL, &string, 0, &ps) + 1;
+          if (__builtin_expect (strsize != 0, 1))
+            {
+              assert (mbsinit (&ps));
+              totsize = patsize + strsize;
+              if (__builtin_expect (! (patsize <= totsize
+                                       && totsize <= SIZE_MAX / sizeof (wchar_t)),
+                                    0))
+                {
+                  errno = ENOMEM;
+                  return -1;
+                }
+
+              /* Allocate room for the wide characters.  */
+              if (__builtin_expect (totsize < ALLOCA_LIMIT, 1))
+                wpattern = (wchar_t *) alloca (totsize * sizeof (wchar_t));
+              else
+                {
+                  wpattern = malloc (totsize * sizeof (wchar_t));
+                  if (__builtin_expect (! wpattern, 0))
+                    {
+                      errno = ENOMEM;
+                      return -1;
+                    }
+                }
+              wstring = wpattern + patsize;
+
+              /* Convert the strings into wide characters.  */
+              mbsrtowcs (wpattern, &pattern, patsize, &ps);
+              assert (mbsinit (&ps));
+              mbsrtowcs (wstring, &string, strsize, &ps);
+
+              res = internal_fnwmatch (wpattern, wstring, wstring + strsize - 1,
+                                       flags & FNM_PERIOD, flags);
+
+              if (__builtin_expect (! (totsize < ALLOCA_LIMIT), 0))
+                free (wpattern);
+              return res;
+            }
+        }
+    }
+
+# endif /* HANDLE_MULTIBYTE */
+
+  return internal_fnmatch (pattern, string, string + strlen (string),
+                           flags & FNM_PERIOD, flags);
+}
+
+# ifdef _LIBC
+#  undef fnmatch
+versioned_symbol (libc, __fnmatch, fnmatch, GLIBC_2_2_3);
+#  if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_3)
+strong_alias (__fnmatch, __fnmatch_old)
+compat_symbol (libc, __fnmatch_old, fnmatch, GLIBC_2_0);
+#  endif
+libc_hidden_ver (__fnmatch, fnmatch)
+# endif
+
+#endif  /* _LIBC or not __GNU_LIBRARY__.  */
diff --git a/gnu/fnmatch.in.h b/gnu/fnmatch.in.h
new file mode 100644 (file)
index 0000000..54e48bb
--- /dev/null
@@ -0,0 +1,70 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copyright (C) 1991, 1992, 1993, 1996, 1997, 1998, 1999, 2001, 2002, 2003,
+   2005, 2007, 2009, 2010 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
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _FNMATCH_H
+#define _FNMATCH_H      1
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* We #undef these before defining them because some losing systems
+   (HP-UX A.08.07 for example) define these in <unistd.h>.  */
+#undef  FNM_PATHNAME
+#undef  FNM_NOESCAPE
+#undef  FNM_PERIOD
+
+/* Bits set in the FLAGS argument to `fnmatch'.  */
+#define FNM_PATHNAME    (1 << 0) /* No wildcard can ever match `/'.  */
+#define FNM_NOESCAPE    (1 << 1) /* Backslashes don't quote special chars.  */
+#define FNM_PERIOD      (1 << 2) /* Leading `.' is matched only explicitly.  */
+
+#if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _GNU_SOURCE
+# define FNM_FILE_NAME   FNM_PATHNAME   /* Preferred GNU name.  */
+# define FNM_LEADING_DIR (1 << 3)       /* Ignore `/...' after a match.  */
+# define FNM_CASEFOLD    (1 << 4)       /* Compare without regard to case.  */
+# define FNM_EXTMATCH    (1 << 5)       /* Use ksh-like extended matching. */
+#endif
+
+/* Value returned by `fnmatch' if STRING does not match PATTERN.  */
+#define FNM_NOMATCH     1
+
+/* This value is returned if the implementation does not support
+   `fnmatch'.  Since this is not the case here it will never be
+   returned but the conformance test suites still require the symbol
+   to be defined.  */
+#ifdef _XOPEN_SOURCE
+# define FNM_NOSYS      (-1)
+#endif
+
+/* Match NAME against the file name pattern PATTERN,
+   returning zero if it matches, FNM_NOMATCH if not.  */
+extern int fnmatch (const char *__pattern, const char *__name,
+                    int __flags)
+     _GL_ARG_NONNULL ((1, 2));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* fnmatch.h */
diff --git a/gnu/fnmatch_loop.c b/gnu/fnmatch_loop.c
new file mode 100644 (file)
index 0000000..c46099a
--- /dev/null
@@ -0,0 +1,1217 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copyright (C) 1991, 1992, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+   2003, 2004, 2005, 2006, 2009, 2010 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
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* Match STRING against the file name pattern PATTERN, returning zero if
+   it matches, nonzero if not.  */
+static int EXT (INT opt, const CHAR *pattern, const CHAR *string,
+                const CHAR *string_end, bool no_leading_period, int flags)
+     internal_function;
+static const CHAR *END (const CHAR *patternp) internal_function;
+
+static int
+internal_function
+FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end,
+     bool no_leading_period, int flags)
+{
+  register const CHAR *p = pattern, *n = string;
+  register UCHAR c;
+#ifdef _LIBC
+# if WIDE_CHAR_VERSION
+  const char *collseq = (const char *)
+    _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQWC);
+# else
+  const UCHAR *collseq = (const UCHAR *)
+    _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQMB);
+# endif
+#endif
+
+  while ((c = *p++) != L_('\0'))
+    {
+      bool new_no_leading_period = false;
+      c = FOLD (c);
+
+      switch (c)
+        {
+        case L_('?'):
+          if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(')
+            {
+              int res;
+
+              res = EXT (c, p, n, string_end, no_leading_period,
+                         flags);
+              if (res != -1)
+                return res;
+            }
+
+          if (n == string_end)
+            return FNM_NOMATCH;
+          else if (*n == L_('/') && (flags & FNM_FILE_NAME))
+            return FNM_NOMATCH;
+          else if (*n == L_('.') && no_leading_period)
+            return FNM_NOMATCH;
+          break;
+
+        case L_('\\'):
+          if (!(flags & FNM_NOESCAPE))
+            {
+              c = *p++;
+              if (c == L_('\0'))
+                /* Trailing \ loses.  */
+                return FNM_NOMATCH;
+              c = FOLD (c);
+            }
+          if (n == string_end || FOLD ((UCHAR) *n) != c)
+            return FNM_NOMATCH;
+          break;
+
+        case L_('*'):
+          if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(')
+            {
+              int res;
+
+              res = EXT (c, p, n, string_end, no_leading_period,
+                         flags);
+              if (res != -1)
+                return res;
+            }
+
+          if (n != string_end && *n == L_('.') && no_leading_period)
+            return FNM_NOMATCH;
+
+          for (c = *p++; c == L_('?') || c == L_('*'); c = *p++)
+            {
+              if (*p == L_('(') && (flags & FNM_EXTMATCH) != 0)
+                {
+                  const CHAR *endp = END (p);
+                  if (endp != p)
+                    {
+                      /* This is a pattern.  Skip over it.  */
+                      p = endp;
+                      continue;
+                    }
+                }
+
+              if (c == L_('?'))
+                {
+                  /* A ? needs to match one character.  */
+                  if (n == string_end)
+                    /* There isn't another character; no match.  */
+                    return FNM_NOMATCH;
+                  else if (*n == L_('/')
+                           && __builtin_expect (flags & FNM_FILE_NAME, 0))
+                    /* A slash does not match a wildcard under
+                       FNM_FILE_NAME.  */
+                    return FNM_NOMATCH;
+                  else
+                    /* One character of the string is consumed in matching
+                       this ? wildcard, so *??? won't match if there are
+                       less than three characters.  */
+                    ++n;
+                }
+            }
+
+          if (c == L_('\0'))
+            /* The wildcard(s) is/are the last element of the pattern.
+               If the name is a file name and contains another slash
+               this means it cannot match, unless the FNM_LEADING_DIR
+               flag is set.  */
+            {
+              int result = (flags & FNM_FILE_NAME) == 0 ? 0 : FNM_NOMATCH;
+
+              if (flags & FNM_FILE_NAME)
+                {
+                  if (flags & FNM_LEADING_DIR)
+                    result = 0;
+                  else
+                    {
+                      if (MEMCHR (n, L_('/'), string_end - n) == NULL)
+                        result = 0;
+                    }
+                }
+
+              return result;
+            }
+          else
+            {
+              const CHAR *endp;
+
+              endp = MEMCHR (n, (flags & FNM_FILE_NAME) ? L_('/') : L_('\0'),
+                             string_end - n);
+              if (endp == NULL)
+                endp = string_end;
+
+              if (c == L_('[')
+                  || (__builtin_expect (flags & FNM_EXTMATCH, 0) != 0
+                      && (c == L_('@') || c == L_('+') || c == L_('!'))
+                      && *p == L_('(')))
+                {
+                  int flags2 = ((flags & FNM_FILE_NAME)
+                                ? flags : (flags & ~FNM_PERIOD));
+                  bool no_leading_period2 = no_leading_period;
+
+                  for (--p; n < endp; ++n, no_leading_period2 = false)
+                    if (FCT (p, n, string_end, no_leading_period2, flags2)
+                        == 0)
+                      return 0;
+                }
+              else if (c == L_('/') && (flags & FNM_FILE_NAME))
+                {
+                  while (n < string_end && *n != L_('/'))
+                    ++n;
+                  if (n < string_end && *n == L_('/')
+                      && (FCT (p, n + 1, string_end, flags & FNM_PERIOD, flags)
+                          == 0))
+                    return 0;
+                }
+              else
+                {
+                  int flags2 = ((flags & FNM_FILE_NAME)
+                                ? flags : (flags & ~FNM_PERIOD));
+                  int no_leading_period2 = no_leading_period;
+
+                  if (c == L_('\\') && !(flags & FNM_NOESCAPE))
+                    c = *p;
+                  c = FOLD (c);
+                  for (--p; n < endp; ++n, no_leading_period2 = false)
+                    if (FOLD ((UCHAR) *n) == c
+                        && (FCT (p, n, string_end, no_leading_period2, flags2)
+                            == 0))
+                      return 0;
+                }
+            }
+
+          /* If we come here no match is possible with the wildcard.  */
+          return FNM_NOMATCH;
+
+        case L_('['):
+          {
+            /* Nonzero if the sense of the character class is inverted.  */
+            register bool not;
+            CHAR cold;
+            UCHAR fn;
+
+            if (posixly_correct == 0)
+              posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1;
+
+            if (n == string_end)
+              return FNM_NOMATCH;
+
+            if (*n == L_('.') && no_leading_period)
+              return FNM_NOMATCH;
+
+            if (*n == L_('/') && (flags & FNM_FILE_NAME))
+              /* `/' cannot be matched.  */
+              return FNM_NOMATCH;
+
+            not = (*p == L_('!') || (posixly_correct < 0 && *p == L_('^')));
+            if (not)
+              ++p;
+
+            fn = FOLD ((UCHAR) *n);
+
+            c = *p++;
+            for (;;)
+              {
+                if (!(flags & FNM_NOESCAPE) && c == L_('\\'))
+                  {
+                    if (*p == L_('\0'))
+                      return FNM_NOMATCH;
+                    c = FOLD ((UCHAR) *p);
+                    ++p;
+
+                    goto normal_bracket;
+                  }
+                else if (c == L_('[') && *p == L_(':'))
+                  {
+                    /* Leave room for the null.  */
+                    CHAR str[CHAR_CLASS_MAX_LENGTH + 1];
+                    size_t c1 = 0;
+#if defined _LIBC || WIDE_CHAR_SUPPORT
+                    wctype_t wt;
+#endif
+                    const CHAR *startp = p;
+
+                    for (;;)
+                      {
+                        if (c1 == CHAR_CLASS_MAX_LENGTH)
+                          /* The name is too long and therefore the pattern
+                             is ill-formed.  */
+                          return FNM_NOMATCH;
+
+                        c = *++p;
+                        if (c == L_(':') && p[1] == L_(']'))
+                          {
+                            p += 2;
+                            break;
+                          }
+                        if (c < L_('a') || c >= L_('z'))
+                          {
+                            /* This cannot possibly be a character class name.
+                               Match it as a normal range.  */
+                            p = startp;
+                            c = L_('[');
+                            goto normal_bracket;
+                          }
+                        str[c1++] = c;
+                      }
+                    str[c1] = L_('\0');
+
+#if defined _LIBC || WIDE_CHAR_SUPPORT
+                    wt = IS_CHAR_CLASS (str);
+                    if (wt == 0)
+                      /* Invalid character class name.  */
+                      return FNM_NOMATCH;
+
+# if defined _LIBC && ! WIDE_CHAR_VERSION
+                    /* The following code is glibc specific but does
+                       there a good job in speeding up the code since
+                       we can avoid the btowc() call.  */
+                    if (_ISCTYPE ((UCHAR) *n, wt))
+                      goto matched;
+# else
+                    if (ISWCTYPE (BTOWC ((UCHAR) *n), wt))
+                      goto matched;
+# endif
+#else
+                    if ((STREQ (str, L_("alnum")) && isalnum ((UCHAR) *n))
+                        || (STREQ (str, L_("alpha")) && isalpha ((UCHAR) *n))
+                        || (STREQ (str, L_("blank")) && isblank ((UCHAR) *n))
+                        || (STREQ (str, L_("cntrl")) && iscntrl ((UCHAR) *n))
+                        || (STREQ (str, L_("digit")) && isdigit ((UCHAR) *n))
+                        || (STREQ (str, L_("graph")) && isgraph ((UCHAR) *n))
+                        || (STREQ (str, L_("lower")) && islower ((UCHAR) *n))
+                        || (STREQ (str, L_("print")) && isprint ((UCHAR) *n))
+                        || (STREQ (str, L_("punct")) && ispunct ((UCHAR) *n))
+                        || (STREQ (str, L_("space")) && isspace ((UCHAR) *n))
+                        || (STREQ (str, L_("upper")) && isupper ((UCHAR) *n))
+                        || (STREQ (str, L_("xdigit")) && isxdigit ((UCHAR) *n)))
+                      goto matched;
+#endif
+                    c = *p++;
+                  }
+#ifdef _LIBC
+                else if (c == L_('[') && *p == L_('='))
+                  {
+                    UCHAR str[1];
+                    uint32_t nrules =
+                      _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+                    const CHAR *startp = p;
+
+                    c = *++p;
+                    if (c == L_('\0'))
+                      {
+                        p = startp;
+                        c = L_('[');
+                        goto normal_bracket;
+                      }
+                    str[0] = c;
+
+                    c = *++p;
+                    if (c != L_('=') || p[1] != L_(']'))
+                      {
+                        p = startp;
+                        c = L_('[');
+                        goto normal_bracket;
+                      }
+                    p += 2;
+
+                    if (nrules == 0)
+                      {
+                        if ((UCHAR) *n == str[0])
+                          goto matched;
+                      }
+                    else
+                      {
+                        const int32_t *table;
+# if WIDE_CHAR_VERSION
+                        const int32_t *weights;
+                        const int32_t *extra;
+# else
+                        const unsigned char *weights;
+                        const unsigned char *extra;
+# endif
+                        const int32_t *indirect;
+                        int32_t idx;
+                        const UCHAR *cp = (const UCHAR *) str;
+
+                        /* This #include defines a local function!  */
+# if WIDE_CHAR_VERSION
+#  include <locale/weightwc.h>
+# else
+#  include <locale/weight.h>
+# endif
+
+# if WIDE_CHAR_VERSION
+                        table = (const int32_t *)
+                          _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEWC);
+                        weights = (const int32_t *)
+                          _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTWC);
+                        extra = (const int32_t *)
+                          _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAWC);
+                        indirect = (const int32_t *)
+                          _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTWC);
+# else
+                        table = (const int32_t *)
+                          _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
+                        weights = (const unsigned char *)
+                          _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB);
+                        extra = (const unsigned char *)
+                          _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
+                        indirect = (const int32_t *)
+                          _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB);
+# endif
+
+                        idx = findidx (&cp);
+                        if (idx != 0)
+                          {
+                            /* We found a table entry.  Now see whether the
+                               character we are currently at has the same
+                               equivalance class value.  */
+                            int len = weights[idx & 0xffffff];
+                            int32_t idx2;
+                            const UCHAR *np = (const UCHAR *) n;
+
+                            idx2 = findidx (&np);
+                            if (idx2 != 0
+                                && (idx >> 24) == (idx2 >> 24)
+                                && len == weights[idx2 & 0xffffff])
+                              {
+                                int cnt = 0;
+
+                                idx &= 0xffffff;
+                                idx2 &= 0xffffff;
+
+                                while (cnt < len
+                                       && (weights[idx + 1 + cnt]
+                                           == weights[idx2 + 1 + cnt]))
+                                  ++cnt;
+
+                                if (cnt == len)
+                                  goto matched;
+                              }
+                          }
+                      }
+
+                    c = *p++;
+                  }
+#endif
+                else if (c == L_('\0'))
+                  /* [ (unterminated) loses.  */
+                  return FNM_NOMATCH;
+                else
+                  {
+                    bool is_range = false;
+
+#ifdef _LIBC
+                    bool is_seqval = false;
+
+                    if (c == L_('[') && *p == L_('.'))
+                      {
+                        uint32_t nrules =
+                          _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+                        const CHAR *startp = p;
+                        size_t c1 = 0;
+
+                        while (1)
+                          {
+                            c = *++p;
+                            if (c == L_('.') && p[1] == L_(']'))
+                              {
+                                p += 2;
+                                break;
+                              }
+                            if (c == '\0')
+                              return FNM_NOMATCH;
+                            ++c1;
+                          }
+
+                        /* We have to handling the symbols differently in
+                           ranges since then the collation sequence is
+                           important.  */
+                        is_range = *p == L_('-') && p[1] != L_('\0');
+
+                        if (nrules == 0)
+                          {
+                            /* There are no names defined in the collation
+                               data.  Therefore we only accept the trivial
+                               names consisting of the character itself.  */
+                            if (c1 != 1)
+                              return FNM_NOMATCH;
+
+                            if (!is_range && *n == startp[1])
+                              goto matched;
+
+                            cold = startp[1];
+                            c = *p++;
+                          }
+                        else
+                          {
+                            int32_t table_size;
+                            const int32_t *symb_table;
+# ifdef WIDE_CHAR_VERSION
+                            char str[c1];
+                            size_t strcnt;
+# else
+#  define str (startp + 1)
+# endif
+                            const unsigned char *extra;
+                            int32_t idx;
+                            int32_t elem;
+                            int32_t second;
+                            int32_t hash;
+
+# ifdef WIDE_CHAR_VERSION
+                            /* We have to convert the name to a single-byte
+                               string.  This is possible since the names
+                               consist of ASCII characters and the internal
+                               representation is UCS4.  */
+                            for (strcnt = 0; strcnt < c1; ++strcnt)
+                              str[strcnt] = startp[1 + strcnt];
+# endif
+
+                            table_size =
+                              _NL_CURRENT_WORD (LC_COLLATE,
+                                                _NL_COLLATE_SYMB_HASH_SIZEMB);
+                            symb_table = (const int32_t *)
+                              _NL_CURRENT (LC_COLLATE,
+                                           _NL_COLLATE_SYMB_TABLEMB);
+                            extra = (const unsigned char *)
+                              _NL_CURRENT (LC_COLLATE,
+                                           _NL_COLLATE_SYMB_EXTRAMB);
+
+                            /* Locate the character in the hashing table.  */
+                            hash = elem_hash (str, c1);
+
+                            idx = 0;
+                            elem = hash % table_size;
+                            if (symb_table[2 * elem] != 0)
+                              {
+                                second = hash % (table_size - 2) + 1;
+
+                                do
+                                  {
+                                    /* First compare the hashing value.  */
+                                    if (symb_table[2 * elem] == hash
+                                        && (c1
+                                            == extra[symb_table[2 * elem + 1]])
+                                        && memcmp (str,
+                                                   &extra[symb_table[2 * elem
+                                                                     + 1]
+                                                          + 1], c1) == 0)
+                                      {
+                                        /* Yep, this is the entry.  */
+                                        idx = symb_table[2 * elem + 1];
+                                        idx += 1 + extra[idx];
+                                        break;
+                                      }
+
+                                    /* Next entry.  */
+                                    elem += second;
+                                  }
+                                while (symb_table[2 * elem] != 0);
+                              }
+
+                            if (symb_table[2 * elem] != 0)
+                              {
+                                /* Compare the byte sequence but only if
+                                   this is not part of a range.  */
+# ifdef WIDE_CHAR_VERSION
+                                int32_t *wextra;
+
+                                idx += 1 + extra[idx];
+                                /* Adjust for the alignment.  */
+                                idx = (idx + 3) & ~3;
+
+                                wextra = (int32_t *) &extra[idx + 4];
+# endif
+
+                                if (! is_range)
+                                  {
+# ifdef WIDE_CHAR_VERSION
+                                    for (c1 = 0;
+                                         (int32_t) c1 < wextra[idx];
+                                         ++c1)
+                                      if (n[c1] != wextra[1 + c1])
+                                        break;
+
+                                    if ((int32_t) c1 == wextra[idx])
+                                      goto matched;
+# else
+                                    for (c1 = 0; c1 < extra[idx]; ++c1)
+                                      if (n[c1] != extra[1 + c1])
+                                        break;
+
+                                    if (c1 == extra[idx])
+                                      goto matched;
+# endif
+                                  }
+
+                                /* Get the collation sequence value.  */
+                                is_seqval = true;
+# ifdef WIDE_CHAR_VERSION
+                                cold = wextra[1 + wextra[idx]];
+# else
+                                /* Adjust for the alignment.  */
+                                idx += 1 + extra[idx];
+                                idx = (idx + 3) & ~4;
+                                cold = *((int32_t *) &extra[idx]);
+# endif
+
+                                c = *p++;
+                              }
+                            else if (c1 == 1)
+                              {
+                                /* No valid character.  Match it as a
+                                   single byte.  */
+                                if (!is_range && *n == str[0])
+                                  goto matched;
+
+                                cold = str[0];
+                                c = *p++;
+                              }
+                            else
+                              return FNM_NOMATCH;
+                          }
+                      }
+                    else
+# undef str
+#endif
+                      {
+                        c = FOLD (c);
+                      normal_bracket:
+
+                        /* We have to handling the symbols differently in
+                           ranges since then the collation sequence is
+                           important.  */
+                        is_range = (*p == L_('-') && p[1] != L_('\0')
+                                    && p[1] != L_(']'));
+
+                        if (!is_range && c == fn)
+                          goto matched;
+
+#if _LIBC
+                        /* This is needed if we goto normal_bracket; from
+                           outside of is_seqval's scope.  */
+                        is_seqval = false;
+#endif
+
+                        cold = c;
+                        c = *p++;
+                      }
+
+                    if (c == L_('-') && *p != L_(']'))
+                      {
+#if _LIBC
+                        /* We have to find the collation sequence
+                           value for C.  Collation sequence is nothing
+                           we can regularly access.  The sequence
+                           value is defined by the order in which the
+                           definitions of the collation values for the
+                           various characters appear in the source
+                           file.  A strange concept, nowhere
+                           documented.  */
+                        uint32_t fcollseq;
+                        uint32_t lcollseq;
+                        UCHAR cend = *p++;
+
+# ifdef WIDE_CHAR_VERSION
+                        /* 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
+                             we are supposed to match.  This means we are
+                             failing.  */
+                          goto range_not_matched;
+
+                        if (is_seqval)
+                          lcollseq = cold;
+                        else
+                          lcollseq = __collseq_table_lookup (collseq, cold);
+# else
+                        fcollseq = collseq[fn];
+                        lcollseq = is_seqval ? cold : collseq[(UCHAR) cold];
+# endif
+
+                        is_seqval = false;
+                        if (cend == L_('[') && *p == L_('.'))
+                          {
+                            uint32_t nrules =
+                              _NL_CURRENT_WORD (LC_COLLATE,
+                                                _NL_COLLATE_NRULES);
+                            const CHAR *startp = p;
+                            size_t c1 = 0;
+
+                            while (1)
+                              {
+                                c = *++p;
+                                if (c == L_('.') && p[1] == L_(']'))
+                                  {
+                                    p += 2;
+                                    break;
+                                  }
+                                if (c == '\0')
+                                  return FNM_NOMATCH;
+                                ++c1;
+                              }
+
+                            if (nrules == 0)
+                              {
+                                /* There are no names defined in the
+                                   collation data.  Therefore we only
+                                   accept the trivial names consisting
+                                   of the character itself.  */
+                                if (c1 != 1)
+                                  return FNM_NOMATCH;
+
+                                cend = startp[1];
+                              }
+                            else
+                              {
+                                int32_t table_size;
+                                const int32_t *symb_table;
+# ifdef WIDE_CHAR_VERSION
+                                char str[c1];
+                                size_t strcnt;
+# else
+#  define str (startp + 1)
+# endif
+                                const unsigned char *extra;
+                                int32_t idx;
+                                int32_t elem;
+                                int32_t second;
+                                int32_t hash;
+
+# ifdef WIDE_CHAR_VERSION
+                                /* We have to convert the name to a single-byte
+                                   string.  This is possible since the names
+                                   consist of ASCII characters and the internal
+                                   representation is UCS4.  */
+                                for (strcnt = 0; strcnt < c1; ++strcnt)
+                                  str[strcnt] = startp[1 + strcnt];
+# endif
+
+                                table_size =
+                                  _NL_CURRENT_WORD (LC_COLLATE,
+                                                    _NL_COLLATE_SYMB_HASH_SIZEMB);
+                                symb_table = (const int32_t *)
+                                  _NL_CURRENT (LC_COLLATE,
+                                               _NL_COLLATE_SYMB_TABLEMB);
+                                extra = (const unsigned char *)
+                                  _NL_CURRENT (LC_COLLATE,
+                                               _NL_COLLATE_SYMB_EXTRAMB);
+
+                                /* Locate the character in the hashing
+                                   table.  */
+                                hash = elem_hash (str, c1);
+
+                                idx = 0;
+                                elem = hash % table_size;
+                                if (symb_table[2 * elem] != 0)
+                                  {
+                                    second = hash % (table_size - 2) + 1;
+
+                                    do
+                                      {
+                                        /* First compare the hashing value.  */
+                                        if (symb_table[2 * elem] == hash
+                                            && (c1
+                                                == extra[symb_table[2 * elem + 1]])
+                                            && memcmp (str,
+                                                       &extra[symb_table[2 * elem + 1]
+                                                              + 1], c1) == 0)
+                                          {
+                                            /* Yep, this is the entry.  */
+                                            idx = symb_table[2 * elem + 1];
+                                            idx += 1 + extra[idx];
+                                            break;
+                                          }
+
+                                        /* Next entry.  */
+                                        elem += second;
+                                      }
+                                    while (symb_table[2 * elem] != 0);
+                                  }
+
+                                if (symb_table[2 * elem] != 0)
+                                  {
+                                    /* Compare the byte sequence but only if
+                                       this is not part of a range.  */
+# ifdef WIDE_CHAR_VERSION
+                                    int32_t *wextra;
+
+                                    idx += 1 + extra[idx];
+                                    /* Adjust for the alignment.  */
+                                    idx = (idx + 3) & ~4;
+
+                                    wextra = (int32_t *) &extra[idx + 4];
+# endif
+                                    /* Get the collation sequence value.  */
+                                    is_seqval = true;
+# ifdef WIDE_CHAR_VERSION
+                                    cend = wextra[1 + wextra[idx]];
+# else
+                                    /* Adjust for the alignment.  */
+                                    idx += 1 + extra[idx];
+                                    idx = (idx + 3) & ~4;
+                                    cend = *((int32_t *) &extra[idx]);
+# endif
+                                  }
+                                else if (symb_table[2 * elem] != 0 && c1 == 1)
+                                  {
+                                    cend = str[0];
+                                    c = *p++;
+                                  }
+                                else
+                                  return FNM_NOMATCH;
+                              }
+# undef str
+                          }
+                        else
+                          {
+                            if (!(flags & FNM_NOESCAPE) && cend == L_('\\'))
+                              cend = *p++;
+                            if (cend == L_('\0'))
+                              return FNM_NOMATCH;
+                            cend = FOLD (cend);
+                          }
+
+                        /* XXX It is not entirely clear to me how to handle
+                           characters which are not mentioned in the
+                           collation specification.  */
+                        if (
+# ifdef WIDE_CHAR_VERSION
+                            lcollseq == 0xffffffff ||
+# endif
+                            lcollseq <= fcollseq)
+                          {
+                            /* We have to look at the upper bound.  */
+                            uint32_t hcollseq;
+
+                            if (is_seqval)
+                              hcollseq = cend;
+                            else
+                              {
+# ifdef WIDE_CHAR_VERSION
+                                hcollseq =
+                                  __collseq_table_lookup (collseq, cend);
+                                if (hcollseq == ~((uint32_t) 0))
+                                  {
+                                    /* Hum, no information about the upper
+                                       bound.  The matching succeeds if the
+                                       lower bound is matched exactly.  */
+                                    if (lcollseq != fcollseq)
+                                      goto range_not_matched;
+
+                                    goto matched;
+                                  }
+# else
+                                hcollseq = collseq[cend];
+# endif
+                              }
+
+                            if (lcollseq <= hcollseq && fcollseq <= hcollseq)
+                              goto matched;
+                          }
+# ifdef WIDE_CHAR_VERSION
+                      range_not_matched:
+# endif
+#else
+                        /* We use a boring value comparison of the character
+                           values.  This is better than comparing using
+                           `strcoll' since the latter would have surprising
+                           and sometimes fatal consequences.  */
+                        UCHAR cend = *p++;
+
+                        if (!(flags & FNM_NOESCAPE) && cend == L_('\\'))
+                          cend = *p++;
+                        if (cend == L_('\0'))
+                          return FNM_NOMATCH;
+
+                        /* It is a range.  */
+                        if (cold <= fn && fn <= cend)
+                          goto matched;
+#endif
+
+                        c = *p++;
+                      }
+                  }
+
+                if (c == L_(']'))
+                  break;
+              }
+
+            if (!not)
+              return FNM_NOMATCH;
+            break;
+
+          matched:
+            /* Skip the rest of the [...] that already matched.  */
+            do
+              {
+              ignore_next:
+                c = *p++;
+
+                if (c == L_('\0'))
+                  /* [... (unterminated) loses.  */
+                  return FNM_NOMATCH;
+
+                if (!(flags & FNM_NOESCAPE) && c == L_('\\'))
+                  {
+                    if (*p == L_('\0'))
+                      return FNM_NOMATCH;
+                    /* XXX 1003.2d11 is unclear if this is right.  */
+                    ++p;
+                  }
+                else if (c == L_('[') && *p == L_(':'))
+                  {
+                    int c1 = 0;
+                    const CHAR *startp = p;
+
+                    while (1)
+                      {
+                        c = *++p;
+                        if (++c1 == CHAR_CLASS_MAX_LENGTH)
+                          return FNM_NOMATCH;
+
+                        if (*p == L_(':') && p[1] == L_(']'))
+                          break;
+
+                        if (c < L_('a') || c >= L_('z'))
+                          {
+                            p = startp;
+                            goto ignore_next;
+                          }
+                      }
+                    p += 2;
+                    c = *p++;
+                  }
+                else if (c == L_('[') && *p == L_('='))
+                  {
+                    c = *++p;
+                    if (c == L_('\0'))
+                      return FNM_NOMATCH;
+                    c = *++p;
+                    if (c != L_('=') || p[1] != L_(']'))
+                      return FNM_NOMATCH;
+                    p += 2;
+                    c = *p++;
+                  }
+                else if (c == L_('[') && *p == L_('.'))
+                  {
+                    ++p;
+                    while (1)
+                      {
+                        c = *++p;
+                        if (c == '\0')
+                          return FNM_NOMATCH;
+
+                        if (*p == L_('.') && p[1] == L_(']'))
+                          break;
+                      }
+                    p += 2;
+                    c = *p++;
+                  }
+              }
+            while (c != L_(']'));
+            if (not)
+              return FNM_NOMATCH;
+          }
+          break;
+
+        case L_('+'):
+        case L_('@'):
+        case L_('!'):
+          if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(')
+            {
+              int res;
+
+              res = EXT (c, p, n, string_end, no_leading_period, flags);
+              if (res != -1)
+                return res;
+            }
+          goto normal_match;
+
+        case L_('/'):
+          if (NO_LEADING_PERIOD (flags))
+            {
+              if (n == string_end || c != (UCHAR) *n)
+                return FNM_NOMATCH;
+
+              new_no_leading_period = true;
+              break;
+            }
+          /* FALLTHROUGH */
+        default:
+        normal_match:
+          if (n == string_end || c != FOLD ((UCHAR) *n))
+            return FNM_NOMATCH;
+        }
+
+      no_leading_period = new_no_leading_period;
+      ++n;
+    }
+
+  if (n == string_end)
+    return 0;
+
+  if ((flags & FNM_LEADING_DIR) && n != string_end && *n == L_('/'))
+    /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz".  */
+    return 0;
+
+  return FNM_NOMATCH;
+}
+
+
+static const CHAR *
+internal_function
+END (const CHAR *pattern)
+{
+  const CHAR *p = pattern;
+
+  while (1)
+    if (*++p == L_('\0'))
+      /* This is an invalid pattern.  */
+      return pattern;
+    else if (*p == L_('['))
+      {
+        /* Handle brackets special.  */
+        if (posixly_correct == 0)
+          posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1;
+
+        /* Skip the not sign.  We have to recognize it because of a possibly
+           following ']'.  */
+        if (*++p == L_('!') || (posixly_correct < 0 && *p == L_('^')))
+          ++p;
+        /* A leading ']' is recognized as such.  */
+        if (*p == L_(']'))
+          ++p;
+        /* Skip over all characters of the list.  */
+        while (*p != L_(']'))
+          if (*p++ == L_('\0'))
+            /* This is no valid pattern.  */
+            return pattern;
+      }
+    else if ((*p == L_('?') || *p == L_('*') || *p == L_('+') || *p == L_('@')
+              || *p == L_('!')) && p[1] == L_('('))
+      p = END (p + 1);
+    else if (*p == L_(')'))
+      break;
+
+  return p + 1;
+}
+
+
+static int
+internal_function
+EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end,
+     bool no_leading_period, int flags)
+{
+  const CHAR *startp;
+  size_t level;
+  struct patternlist
+  {
+    struct patternlist *next;
+    CHAR str[1];
+  } *list = NULL;
+  struct patternlist **lastp = &list;
+  size_t pattern_len = STRLEN (pattern);
+  const CHAR *p;
+  const CHAR *rs;
+  enum { ALLOCA_LIMIT = 8000 };
+
+  /* Parse the pattern.  Store the individual parts in the list.  */
+  level = 0;
+  for (startp = p = pattern + 1; ; ++p)
+    if (*p == L_('\0'))
+      /* This is an invalid pattern.  */
+      return -1;
+    else if (*p == L_('['))
+      {
+        /* Handle brackets special.  */
+        if (posixly_correct == 0)
+          posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1;
+
+        /* Skip the not sign.  We have to recognize it because of a possibly
+           following ']'.  */
+        if (*++p == L_('!') || (posixly_correct < 0 && *p == L_('^')))
+          ++p;
+        /* A leading ']' is recognized as such.  */
+        if (*p == L_(']'))
+          ++p;
+        /* Skip over all characters of the list.  */
+        while (*p != L_(']'))
+          if (*p++ == L_('\0'))
+            /* This is no valid pattern.  */
+            return -1;
+      }
+    else if ((*p == L_('?') || *p == L_('*') || *p == L_('+') || *p == L_('@')
+              || *p == L_('!')) && p[1] == L_('('))
+      /* Remember the nesting level.  */
+      ++level;
+    else if (*p == L_(')'))
+      {
+        if (level-- == 0)
+          {
+            /* This means we found the end of the pattern.  */
+#define NEW_PATTERN \
+            struct patternlist *newp;                                         \
+            size_t plen;                                                      \
+            size_t plensize;                                                  \
+            size_t newpsize;                                                  \
+                                                                              \
+            plen = (opt == L_('?') || opt == L_('@')                          \
+                    ? pattern_len                                             \
+                    : p - startp + 1UL);                                      \
+            plensize = plen * sizeof (CHAR);                                  \
+            newpsize = offsetof (struct patternlist, str) + plensize;         \
+            if ((size_t) -1 / sizeof (CHAR) < plen                            \
+                || newpsize < offsetof (struct patternlist, str)              \
+                || ALLOCA_LIMIT <= newpsize)                                  \
+              return -1;                                                      \
+            newp = (struct patternlist *) alloca (newpsize);                  \
+            *((CHAR *) MEMPCPY (newp->str, startp, p - startp)) = L_('\0');    \
+            newp->next = NULL;                                                \
+            *lastp = newp;                                                    \
+            lastp = &newp->next
+            NEW_PATTERN;
+            break;
+          }
+      }
+    else if (*p == L_('|'))
+      {
+        if (level == 0)
+          {
+            NEW_PATTERN;
+            startp = p + 1;
+          }
+      }
+  assert (list != NULL);
+  assert (p[-1] == L_(')'));
+#undef NEW_PATTERN
+
+  switch (opt)
+    {
+    case L_('*'):
+      if (FCT (p, string, string_end, no_leading_period, flags) == 0)
+        return 0;
+      /* FALLTHROUGH */
+
+    case L_('+'):
+      do
+        {
+          for (rs = string; rs <= string_end; ++rs)
+            /* First match the prefix with the current pattern with the
+               current pattern.  */
+            if (FCT (list->str, string, rs, no_leading_period,
+                     flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0
+                /* This was successful.  Now match the rest with the rest
+                   of the pattern.  */
+                && (FCT (p, rs, string_end,
+                         rs == string
+                         ? no_leading_period
+                         : rs[-1] == '/' && NO_LEADING_PERIOD (flags),
+                         flags & FNM_FILE_NAME
+                         ? flags : flags & ~FNM_PERIOD) == 0
+                    /* This didn't work.  Try the whole pattern.  */
+                    || (rs != string
+                        && FCT (pattern - 1, rs, string_end,
+                                rs == string
+                                ? no_leading_period
+                                : rs[-1] == '/' && NO_LEADING_PERIOD (flags),
+                                flags & FNM_FILE_NAME
+                                ? flags : flags & ~FNM_PERIOD) == 0)))
+              /* It worked.  Signal success.  */
+              return 0;
+        }
+      while ((list = list->next) != NULL);
+
+      /* None of the patterns lead to a match.  */
+      return FNM_NOMATCH;
+
+    case L_('?'):
+      if (FCT (p, string, string_end, no_leading_period, flags) == 0)
+        return 0;
+      /* FALLTHROUGH */
+
+    case L_('@'):
+      do
+        /* 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.  */
+        if (FCT (STRCAT (list->str, p), string, string_end,
+                 no_leading_period,
+                 flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0)
+          /* It worked.  Signal success.  */
+          return 0;
+      while ((list = list->next) != NULL);
+
+      /* None of the patterns lead to a match.  */
+      return FNM_NOMATCH;
+
+    case L_('!'):
+      for (rs = string; rs <= string_end; ++rs)
+        {
+          struct patternlist *runp;
+
+          for (runp = list; runp != NULL; runp = runp->next)
+            if (FCT (runp->str, string, rs,  no_leading_period,
+                     flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0)
+              break;
+
+          /* If none of the patterns matched see whether the rest does.  */
+          if (runp == NULL
+              && (FCT (p, rs, string_end,
+                       rs == string
+                       ? no_leading_period
+                       : rs[-1] == '/' && NO_LEADING_PERIOD (flags),
+                       flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD)
+                  == 0))
+            /* This is successful.  */
+            return 0;
+        }
+
+      /* None of the patterns together with the rest of the pattern
+         lead to a match.  */
+      return FNM_NOMATCH;
+
+    default:
+      assert (! "Invalid extended matching operator");
+      break;
+    }
+
+  return -1;
+}
+
+
+#undef FOLD
+#undef CHAR
+#undef UCHAR
+#undef INT
+#undef FCT
+#undef EXT
+#undef END
+#undef MEMPCPY
+#undef MEMCHR
+#undef STRCOLL
+#undef STRLEN
+#undef STRCAT
+#undef L_
+#undef BTOWC
diff --git a/gnu/fpending.c b/gnu/fpending.c
new file mode 100644 (file)
index 0000000..f0ca18c
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* fpending.c -- return the number of pending output bytes on a stream
+   Copyright (C) 2000, 2004, 2006-2007, 2009-2010 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. */
+
+#include <config.h>
+
+#include "fpending.h"
+
+/* Return the number of pending (aka buffered, unflushed)
+   bytes on the stream, FP, that is open for writing.  */
+size_t
+__fpending (FILE *fp)
+{
+  return PENDING_OUTPUT_N_BYTES;
+}
diff --git a/gnu/fpending.h b/gnu/fpending.h
new file mode 100644 (file)
index 0000000..5ffebc8
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Declare __fpending.
+
+   Copyright (C) 2000, 2003, 2005-2006, 2009-2010 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.  */
+
+#include <stddef.h>
+#include <stdio.h>
+
+#ifndef HAVE_DECL___FPENDING
+"this configure-time declaration test was not run"
+#endif
+
+#if HAVE_DECL___FPENDING
+# if HAVE_STDIO_EXT_H
+#  include <stdio_ext.h>
+# endif
+#else
+size_t __fpending (FILE *);
+#endif
diff --git a/gnu/fseeko.c b/gnu/fseeko.c
new file mode 100644 (file)
index 0000000..03a4d99
--- /dev/null
@@ -0,0 +1,149 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* An fseeko() function that, together with fflush(), is POSIX compliant.
+   Copyright (C) 2007-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <stdio.h>
+
+/* Get off_t and lseek.  */
+#include <unistd.h>
+
+#include "stdio-impl.h"
+
+#undef fseeko
+#if !HAVE_FSEEKO
+# undef fseek
+# define fseeko fseek
+#endif
+
+int
+rpl_fseeko (FILE *fp, off_t offset, int whence)
+{
+#if LSEEK_PIPE_BROKEN
+  /* mingw gives bogus answers rather than failure on non-seekable files.  */
+  if (lseek (fileno (fp), 0, SEEK_CUR) == -1)
+    return EOF;
+#endif
+
+  /* These tests are based on fpurge.c.  */
+#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+  if (fp->_IO_read_end == fp->_IO_read_ptr
+      && fp->_IO_write_ptr == fp->_IO_write_base
+      && fp->_IO_save_base == NULL)
+#elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */
+# if defined __SL64 && defined __SCLE /* Cygwin */
+  if ((fp->_flags & __SL64) == 0)
+    {
+      /* Cygwin 1.5.0 through 1.5.24 failed to open stdin in 64-bit
+         mode; but has an fseeko that requires 64-bit mode.  */
+      FILE *tmp = fopen ("/dev/null", "r");
+      if (!tmp)
+        return -1;
+      fp->_flags |= __SL64;
+      fp->_seek64 = tmp->_seek64;
+      fclose (tmp);
+    }
+# endif
+  if (fp_->_p == fp_->_bf._base
+      && fp_->_r == 0
+      && fp_->_w == ((fp_->_flags & (__SLBF | __SNBF | __SRD)) == 0 /* fully buffered and not currently reading? */
+                     ? fp_->_bf._size
+                     : 0)
+      && fp_ub._base == NULL)
+#elif defined __EMX__               /* emx+gcc */
+  if (fp->_ptr == fp->_buffer
+      && fp->_rcount == 0
+      && fp->_wcount == 0
+      && fp->_ungetc_count == 0)
+#elif defined _IOERR                /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */
+  if (fp_->_ptr == fp_->_base
+      && (fp_->_ptr == NULL || fp_->_cnt == 0))
+#elif defined __UCLIBC__            /* uClibc */
+  if (((fp->__modeflags & __FLAG_WRITING) == 0
+       || fp->__bufpos == fp->__bufstart)
+      && ((fp->__modeflags & (__FLAG_READONLY | __FLAG_READING)) == 0
+          || fp->__bufpos == fp->__bufread))
+#elif defined __QNX__               /* QNX */
+  if ((fp->_Mode & 0x2000 /* _MWRITE */ ? fp->_Next == fp->_Buf : fp->_Next == fp->_Rend)
+      && fp->_Rback == fp->_Back + sizeof (fp->_Back)
+      && fp->_Rsave == NULL)
+#elif defined __MINT__              /* Atari FreeMiNT */
+  if (fp->__bufp == fp->__buffer
+      && fp->__get_limit == fp->__bufp
+      && fp->__put_limit == fp->__bufp
+      && !fp->__pushed_back)
+#else
+  #error "Please port gnulib fseeko.c to your platform! Look at the code in fpurge.c, then report this to bug-gnulib."
+#endif
+    {
+      /* We get here when an fflush() call immediately preceded this one.  We
+         know there are no buffers.
+         POSIX requires us to modify the file descriptor's position.
+         But we cannot position beyond end of file here.  */
+      off_t pos =
+        lseek (fileno (fp),
+               whence == SEEK_END && offset > 0 ? 0 : offset,
+               whence);
+      if (pos == -1)
+        {
+#if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */
+          fp_->_flags &= ~__SOFF;
+#endif
+          return -1;
+        }
+
+#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+      fp->_flags &= ~_IO_EOF_SEEN;
+#elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */
+# if defined __CYGWIN__
+      /* fp_->_offset is typed as an integer.  */
+      fp_->_offset = pos;
+# else
+      /* fp_->_offset is an fpos_t.  */
+      {
+        /* Use a union, since on NetBSD, the compilation flags
+           determine whether fpos_t is typedef'd to off_t or a struct
+           containing a single off_t member.  */
+        union
+          {
+            fpos_t f;
+            off_t o;
+          } u;
+        u.o = pos;
+        fp_->_offset = u.f;
+      }
+# endif
+      fp_->_flags |= __SOFF;
+      fp_->_flags &= ~__SEOF;
+#elif defined __EMX__               /* emx+gcc */
+      fp->_flags &= ~_IOEOF;
+#elif defined _IOERR                /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */
+      fp->_flag &= ~_IOEOF;
+#elif defined __MINT__              /* Atari FreeMiNT */
+      fp->__offset = pos;
+      fp->__eof = 0;
+#endif
+      /* If we were not requested to position beyond end of file, we're
+         done.  */
+      if (!(whence == SEEK_END && offset > 0))
+        return 0;
+    }
+  return fseeko (fp, offset, whence);
+}
diff --git a/gnu/fstatat.c b/gnu/fstatat.c
new file mode 100644 (file)
index 0000000..cc8a635
--- /dev/null
@@ -0,0 +1,112 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Work around an fstatat bug on Solaris 9.
+
+   Copyright (C) 2006, 2009-2010 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 and Jim Meyering.  */
+
+#include <config.h>
+
+#include <sys/stat.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <string.h>
+
+#if HAVE_FSTATAT
+
+# undef fstatat
+
+/* fstatat should always follow symbolic links that end in /, but on
+   Solaris 9 it doesn't if AT_SYMLINK_NOFOLLOW is specified.
+   Likewise, trailing slash on a non-directory should be an error.
+   These are the same problems that lstat.c and stat.c address, so
+   solve it in a similar way.  */
+
+int
+rpl_fstatat (int fd, char const *file, struct stat *st, int flag)
+{
+  int result = fstatat (fd, file, st, flag);
+  size_t len;
+
+  if (result != 0)
+    return result;
+  len = strlen (file);
+  if (flag & AT_SYMLINK_NOFOLLOW)
+    {
+      /* Fix lstat behavior.  */
+      if (file[len - 1] != '/' || S_ISDIR (st->st_mode))
+        return 0;
+      if (!S_ISLNK (st->st_mode))
+        {
+          errno = ENOTDIR;
+          return -1;
+        }
+      result = fstatat (fd, file, st, flag & ~AT_SYMLINK_NOFOLLOW);
+    }
+  /* Fix stat behavior.  */
+  if (result == 0 && !S_ISDIR (st->st_mode) && file[len - 1] == '/')
+    {
+      errno = ENOTDIR;
+      return -1;
+    }
+  return result;
+}
+
+#else /* !HAVE_FSTATAT */
+
+/* On mingw, the gnulib <sys/stat.h> defines `stat' as a function-like
+   macro; but using it in AT_FUNC_F2 causes compilation failure
+   because the preprocessor sees a use of a macro that requires two
+   arguments but is only given one.  Hence, we need an inline
+   forwarder to get past the preprocessor.  */
+static inline int
+stat_func (char const *name, struct stat *st)
+{
+  return stat (name, st);
+}
+
+/* Likewise, if there is no native `lstat', then the gnulib
+   <sys/stat.h> defined it as stat, which also needs adjustment.  */
+# if !HAVE_LSTAT
+#  undef lstat
+#  define lstat stat_func
+# endif
+
+/* Replacement for Solaris' function by the same name.
+   <http://www.google.com/search?q=fstatat+site:docs.sun.com>
+   First, try to simulate it via l?stat ("/proc/self/fd/FD/FILE").
+   Failing that, simulate it via save_cwd/fchdir/(stat|lstat)/restore_cwd.
+   If either the save_cwd or the restore_cwd fails (relatively unlikely),
+   then give a diagnostic and exit nonzero.
+   Otherwise, this function works just like Solaris' fstatat.  */
+
+# define AT_FUNC_NAME fstatat
+# define AT_FUNC_F1 lstat
+# define AT_FUNC_F2 stat_func
+# define AT_FUNC_USE_F1_COND AT_SYMLINK_NOFOLLOW
+# define AT_FUNC_POST_FILE_PARAM_DECLS , struct stat *st, int flag
+# define AT_FUNC_POST_FILE_ARGS        , st
+# include "at-func.c"
+# undef AT_FUNC_NAME
+# undef AT_FUNC_F1
+# undef AT_FUNC_F2
+# undef AT_FUNC_USE_F1_COND
+# undef AT_FUNC_POST_FILE_PARAM_DECLS
+# undef AT_FUNC_POST_FILE_ARGS
+
+#endif /* !HAVE_FSTATAT */
diff --git a/gnu/ftruncate.c b/gnu/ftruncate.c
new file mode 100644 (file)
index 0000000..39b4bda
--- /dev/null
@@ -0,0 +1,92 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* ftruncate emulations that work on some System V's.
+   This file is in the public domain.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <unistd.h>
+
+#include <sys/types.h>
+#include <fcntl.h>
+
+#ifdef F_CHSIZE
+
+int
+ftruncate (int fd, off_t length)
+{
+  return fcntl (fd, F_CHSIZE, length);
+}
+
+#else /* not F_CHSIZE */
+# ifdef F_FREESP
+
+/* By William Kucharski <kucharsk@netcom.com>.  */
+
+#  include <sys/stat.h>
+#  include <errno.h>
+
+int
+ftruncate (int fd, off_t length)
+{
+  struct flock fl;
+  struct stat filebuf;
+
+  if (fstat (fd, &filebuf) < 0)
+    return -1;
+
+  if (filebuf.st_size < length)
+    {
+      /* Extend file length. */
+      if (lseek (fd, (length - 1), SEEK_SET) < 0)
+        return -1;
+
+      /* Write a "0" byte. */
+      if (write (fd, "", 1) != 1)
+        return -1;
+    }
+  else
+    {
+
+      /* Truncate length. */
+
+      fl.l_whence = 0;
+      fl.l_len = 0;
+      fl.l_start = length;
+      fl.l_type = F_WRLCK;      /* write lock on file space */
+
+      /* This relies on the *undocumented* F_FREESP argument to fcntl,
+         which truncates the file so that it ends at the position
+         indicated by fl.l_start.  Will minor miracles never cease?  */
+
+      if (fcntl (fd, F_FREESP, &fl) < 0)
+        return -1;
+    }
+
+  return 0;
+}
+
+# else /* not F_CHSIZE nor F_FREESP */
+#  if HAVE_CHSIZE                      /* native Windows, e.g. mingw */
+
+int
+ftruncate (int fd, off_t length)
+{
+  return chsize (fd, length);
+}
+
+#  else /* not F_CHSIZE nor F_FREESP nor HAVE_CHSIZE */
+
+#   include <errno.h>
+
+int
+ftruncate (int fd, off_t length)
+{
+  errno = EIO;
+  return -1;
+}
+
+#  endif /* not HAVE_CHSIZE */
+# endif /* not F_FREESP */
+#endif /* not F_CHSIZE */
diff --git a/gnu/full-write.c b/gnu/full-write.c
new file mode 100644 (file)
index 0000000..9b5ad2e
--- /dev/null
@@ -0,0 +1,81 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* An interface to read and write that retries (if necessary) until complete.
+
+   Copyright (C) 1993-1994, 1997-2006, 2009-2010 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.  */
+#ifdef FULL_READ
+# include "full-read.h"
+#else
+# include "full-write.h"
+#endif
+
+#include <errno.h>
+
+#ifdef FULL_READ
+# include "safe-read.h"
+# define safe_rw safe_read
+# define full_rw full_read
+# undef const
+# define const /* empty */
+#else
+# include "safe-write.h"
+# define safe_rw safe_write
+# define full_rw full_write
+#endif
+
+#ifdef FULL_READ
+/* Set errno to zero upon EOF.  */
+# define ZERO_BYTE_TRANSFER_ERRNO 0
+#else
+/* Some buggy drivers return 0 when one tries to write beyond
+   a device's end.  (Example: Linux 1.2.13 on /dev/fd0.)
+   Set errno to ENOSPC so they get a sensible diagnostic.  */
+# define ZERO_BYTE_TRANSFER_ERRNO ENOSPC
+#endif
+
+/* Write(read) COUNT bytes at BUF to(from) descriptor FD, retrying if
+   interrupted or if a partial write(read) occurs.  Return the number
+   of bytes transferred.
+   When writing, set errno if fewer than COUNT bytes are written.
+   When reading, if fewer than COUNT bytes are read, you must examine
+   errno to distinguish failure from EOF (errno == 0).  */
+size_t
+full_rw (int fd, const void *buf, size_t count)
+{
+  size_t total = 0;
+  const char *ptr = (const char *) buf;
+
+  while (count > 0)
+    {
+      size_t n_rw = safe_rw (fd, ptr, count);
+      if (n_rw == (size_t) -1)
+        break;
+      if (n_rw == 0)
+        {
+          errno = ZERO_BYTE_TRANSFER_ERRNO;
+          break;
+        }
+      total += n_rw;
+      ptr += n_rw;
+      count -= n_rw;
+    }
+
+  return total;
+}
diff --git a/gnu/full-write.h b/gnu/full-write.h
new file mode 100644 (file)
index 0000000..1b85815
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* An interface to write() that writes all it is asked to write.
+
+   Copyright (C) 2002-2003, 2009-2010 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 <stddef.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Write COUNT bytes at BUF to descriptor FD, retrying if interrupted
+   or if partial writes occur.  Return the number of bytes successfully
+   written, setting errno if that is less than COUNT.  */
+extern size_t full_write (int fd, const void *buf, size_t count);
+
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/gnu/getcwd.c b/gnu/getcwd.c
new file mode 100644 (file)
index 0000000..504448f
--- /dev/null
@@ -0,0 +1,425 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copyright (C) 1991-1999, 2004-2010 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
+   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 !_LIBC
+# include <config.h>
+# include <unistd.h>
+#endif
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdbool.h>
+#include <stddef.h>
+
+#include <fcntl.h> /* For AT_FDCWD on Solaris 9.  */
+
+/* If this host provides the openat function, then enable
+   code below to make getcwd more efficient and robust.  */
+#ifdef HAVE_OPENAT
+# define HAVE_OPENAT_SUPPORT 1
+#else
+# define HAVE_OPENAT_SUPPORT 0
+#endif
+
+#ifndef __set_errno
+# define __set_errno(val) (errno = (val))
+#endif
+
+#include <dirent.h>
+#ifndef _D_EXACT_NAMLEN
+# define _D_EXACT_NAMLEN(d) strlen ((d)->d_name)
+#endif
+#ifndef _D_ALLOC_NAMLEN
+# define _D_ALLOC_NAMLEN(d) (_D_EXACT_NAMLEN (d) + 1)
+#endif
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if _LIBC
+# ifndef mempcpy
+#  define mempcpy __mempcpy
+# endif
+#endif
+
+#include <limits.h>
+
+#ifndef MAX
+# define MAX(a, b) ((a) < (b) ? (b) : (a))
+#endif
+#ifndef MIN
+# define MIN(a, b) ((a) < (b) ? (a) : (b))
+#endif
+
+#ifndef PATH_MAX
+# ifdef MAXPATHLEN
+#  define PATH_MAX MAXPATHLEN
+# else
+#  define PATH_MAX 1024
+# endif
+#endif
+
+#if D_INO_IN_DIRENT
+# define MATCHING_INO(dp, ino) ((dp)->d_ino == (ino))
+#else
+# define MATCHING_INO(dp, ino) true
+#endif
+
+#if !_LIBC
+# define __getcwd rpl_getcwd
+# define __lstat lstat
+# define __closedir closedir
+# define __opendir opendir
+# define __readdir readdir
+#endif
+
+/* The results of opendir() in this file are not used with dirfd and fchdir,
+   and we do not leak fds to any single-threaded code that could use stdio,
+   therefore save some unnecessary recursion in fchdir.c.
+   FIXME - if the kernel ever adds support for multi-thread safety for
+   avoiding standard fds, then we should use opendir_safer and
+   openat_safer.  */
+#undef opendir
+#undef closedir
+\f
+/* Get the name of the current working directory, and put it in SIZE
+   bytes of BUF.  Returns NULL if the directory couldn't be determined or
+   SIZE was too small.  If successful, returns BUF.  In GNU, if BUF is
+   NULL, an array is allocated with `malloc'; the array is SIZE bytes long,
+   unless SIZE == 0, in which case it is as big as necessary.  */
+
+char *
+__getcwd (char *buf, size_t size)
+{
+  /* Lengths of big file name components and entire file names, and a
+     deep level of file name nesting.  These numbers are not upper
+     bounds; they are merely large values suitable for initial
+     allocations, designed to be large enough for most real-world
+     uses.  */
+  enum
+    {
+      BIG_FILE_NAME_COMPONENT_LENGTH = 255,
+      BIG_FILE_NAME_LENGTH = MIN (4095, PATH_MAX - 1),
+      DEEP_NESTING = 100
+    };
+
+#if HAVE_OPENAT_SUPPORT
+  int fd = AT_FDCWD;
+  bool fd_needs_closing = false;
+#else
+  char dots[DEEP_NESTING * sizeof ".." + BIG_FILE_NAME_COMPONENT_LENGTH + 1];
+  char *dotlist = dots;
+  size_t dotsize = sizeof dots;
+  size_t dotlen = 0;
+#endif
+  DIR *dirstream = NULL;
+  dev_t rootdev, thisdev;
+  ino_t rootino, thisino;
+  char *dir;
+  register char *dirp;
+  struct stat st;
+  size_t allocated = size;
+  size_t used;
+
+#if HAVE_PARTLY_WORKING_GETCWD
+  /* The system getcwd works, except it sometimes fails when it
+     shouldn't, setting errno to ERANGE, ENAMETOOLONG, or ENOENT.  If
+     AT_FDCWD is not defined, the algorithm below is O(N**2) and this
+     is much slower than the system getcwd (at least on GNU/Linux).
+     So trust the system getcwd's results unless they look
+     suspicious.
+
+     Use the system getcwd even if we have openat support, since the
+     system getcwd works even when a parent is unreadable, while the
+     openat-based approach does not.  */
+
+# undef getcwd
+  dir = getcwd (buf, size);
+  if (dir || (errno != ERANGE && errno != ENAMETOOLONG && errno != ENOENT))
+    return dir;
+#endif
+
+  if (size == 0)
+    {
+      if (buf != NULL)
+        {
+          __set_errno (EINVAL);
+          return NULL;
+        }
+
+      allocated = BIG_FILE_NAME_LENGTH + 1;
+    }
+
+  if (buf == NULL)
+    {
+      dir = malloc (allocated);
+      if (dir == NULL)
+        return NULL;
+    }
+  else
+    dir = buf;
+
+  dirp = dir + allocated;
+  *--dirp = '\0';
+
+  if (__lstat (".", &st) < 0)
+    goto lose;
+  thisdev = st.st_dev;
+  thisino = st.st_ino;
+
+  if (__lstat ("/", &st) < 0)
+    goto lose;
+  rootdev = st.st_dev;
+  rootino = st.st_ino;
+
+  while (!(thisdev == rootdev && thisino == rootino))
+    {
+      struct dirent *d;
+      dev_t dotdev;
+      ino_t dotino;
+      bool mount_point;
+      int parent_status;
+      size_t dirroom;
+      size_t namlen;
+      bool use_d_ino = true;
+
+      /* Look at the parent directory.  */
+#if HAVE_OPENAT_SUPPORT
+      fd = openat (fd, "..", O_RDONLY);
+      if (fd < 0)
+        goto lose;
+      fd_needs_closing = true;
+      parent_status = fstat (fd, &st);
+#else
+      dotlist[dotlen++] = '.';
+      dotlist[dotlen++] = '.';
+      dotlist[dotlen] = '\0';
+      parent_status = __lstat (dotlist, &st);
+#endif
+      if (parent_status != 0)
+        goto lose;
+
+      if (dirstream && __closedir (dirstream) != 0)
+        {
+          dirstream = NULL;
+          goto lose;
+        }
+
+      /* Figure out if this directory is a mount point.  */
+      dotdev = st.st_dev;
+      dotino = st.st_ino;
+      mount_point = dotdev != thisdev;
+
+      /* Search for the last directory.  */
+#if HAVE_OPENAT_SUPPORT
+      dirstream = fdopendir (fd);
+      if (dirstream == NULL)
+        goto lose;
+      /* Reset fd.  It may have been closed by fdopendir.  */
+      fd = dirfd (dirstream);
+      fd_needs_closing = false;
+#else
+      dirstream = __opendir (dotlist);
+      if (dirstream == NULL)
+        goto lose;
+      dotlist[dotlen++] = '/';
+#endif
+      for (;;)
+        {
+          /* Clear errno to distinguish EOF from error if readdir returns
+             NULL.  */
+          __set_errno (0);
+          d = __readdir (dirstream);
+
+          /* When we've iterated through all directory entries without finding
+             one with a matching d_ino, rewind the stream and consider each
+             name again, but this time, using lstat.  This is necessary in a
+             chroot on at least one system (glibc-2.3.6 + linux 2.6.12), where
+             .., ../.., ../../.., etc. all had the same device number, yet the
+             d_ino values for entries in / did not match those obtained
+             via lstat.  */
+          if (d == NULL && errno == 0 && use_d_ino)
+            {
+              use_d_ino = false;
+              rewinddir (dirstream);
+              d = __readdir (dirstream);
+            }
+
+          if (d == NULL)
+            {
+              if (errno == 0)
+                /* EOF on dirstream, which can mean e.g., that the current
+                   directory has been removed.  */
+                __set_errno (ENOENT);
+              goto lose;
+            }
+          if (d->d_name[0] == '.' &&
+              (d->d_name[1] == '\0' ||
+               (d->d_name[1] == '.' && d->d_name[2] == '\0')))
+            continue;
+
+          if (use_d_ino)
+            {
+              bool match = (MATCHING_INO (d, thisino) || mount_point);
+              if (! match)
+                continue;
+            }
+
+          {
+            int entry_status;
+#if HAVE_OPENAT_SUPPORT
+            entry_status = fstatat (fd, d->d_name, &st, AT_SYMLINK_NOFOLLOW);
+#else
+            /* Compute size needed for this file name, or for the file
+               name ".." in the same directory, whichever is larger.
+               Room for ".." might be needed the next time through
+               the outer loop.  */
+            size_t name_alloc = _D_ALLOC_NAMLEN (d);
+            size_t filesize = dotlen + MAX (sizeof "..", name_alloc);
+
+            if (filesize < dotlen)
+              goto memory_exhausted;
+
+            if (dotsize < filesize)
+              {
+                /* My, what a deep directory tree you have, Grandma.  */
+                size_t newsize = MAX (filesize, dotsize * 2);
+                size_t i;
+                if (newsize < dotsize)
+                  goto memory_exhausted;
+                if (dotlist != dots)
+                  free (dotlist);
+                dotlist = malloc (newsize);
+                if (dotlist == NULL)
+                  goto lose;
+                dotsize = newsize;
+
+                i = 0;
+                do
+                  {
+                    dotlist[i++] = '.';
+                    dotlist[i++] = '.';
+                    dotlist[i++] = '/';
+                  }
+                while (i < dotlen);
+              }
+
+            memcpy (dotlist + dotlen, d->d_name, _D_ALLOC_NAMLEN (d));
+            entry_status = __lstat (dotlist, &st);
+#endif
+            /* We don't fail here if we cannot stat() a directory entry.
+               This can happen when (network) file systems fail.  If this
+               entry is in fact the one we are looking for we will find
+               out soon as we reach the end of the directory without
+               having found anything.  */
+            if (entry_status == 0 && S_ISDIR (st.st_mode)
+                && st.st_dev == thisdev && st.st_ino == thisino)
+              break;
+          }
+        }
+
+      dirroom = dirp - dir;
+      namlen = _D_EXACT_NAMLEN (d);
+
+      if (dirroom <= namlen)
+        {
+          if (size != 0)
+            {
+              __set_errno (ERANGE);
+              goto lose;
+            }
+          else
+            {
+              char *tmp;
+              size_t oldsize = allocated;
+
+              allocated += MAX (allocated, namlen);
+              if (allocated < oldsize
+                  || ! (tmp = realloc (dir, allocated)))
+                goto memory_exhausted;
+
+              /* Move current contents up to the end of the buffer.
+                 This is guaranteed to be non-overlapping.  */
+              dirp = memcpy (tmp + allocated - (oldsize - dirroom),
+                             tmp + dirroom,
+                             oldsize - dirroom);
+              dir = tmp;
+            }
+        }
+      dirp -= namlen;
+      memcpy (dirp, d->d_name, namlen);
+      *--dirp = '/';
+
+      thisdev = dotdev;
+      thisino = dotino;
+    }
+
+  if (dirstream && __closedir (dirstream) != 0)
+    {
+      dirstream = NULL;
+      goto lose;
+    }
+
+  if (dirp == &dir[allocated - 1])
+    *--dirp = '/';
+
+#if ! HAVE_OPENAT_SUPPORT
+  if (dotlist != dots)
+    free (dotlist);
+#endif
+
+  used = dir + allocated - dirp;
+  memmove (dir, dirp, used);
+
+  if (size == 0)
+    /* Ensure that the buffer is only as large as necessary.  */
+    buf = realloc (dir, used);
+
+  if (buf == NULL)
+    /* Either buf was NULL all along, or `realloc' failed but
+       we still have the original string.  */
+    buf = dir;
+
+  return buf;
+
+ memory_exhausted:
+  __set_errno (ENOMEM);
+ lose:
+  {
+    int save = errno;
+    if (dirstream)
+      __closedir (dirstream);
+#if HAVE_OPENAT_SUPPORT
+    if (fd_needs_closing)
+      close (fd);
+#else
+    if (dotlist != dots)
+      free (dotlist);
+#endif
+    if (buf == NULL)
+      free (dir);
+    __set_errno (save);
+  }
+  return NULL;
+}
+
+#ifdef weak_alias
+weak_alias (__getcwd, getcwd)
+#endif
diff --git a/gnu/getdate.c b/gnu/getdate.c
new file mode 100644 (file)
index 0000000..c45ce3d
--- /dev/null
@@ -0,0 +1,3349 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   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 2, 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, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.3"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 1
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     tAGO = 258,
+     tDST = 259,
+     tYEAR_UNIT = 260,
+     tMONTH_UNIT = 261,
+     tHOUR_UNIT = 262,
+     tMINUTE_UNIT = 263,
+     tSEC_UNIT = 264,
+     tDAY_UNIT = 265,
+     tDAY_SHIFT = 266,
+     tDAY = 267,
+     tDAYZONE = 268,
+     tLOCAL_ZONE = 269,
+     tMERIDIAN = 270,
+     tMONTH = 271,
+     tORDINAL = 272,
+     tZONE = 273,
+     tSNUMBER = 274,
+     tUNUMBER = 275,
+     tSDECIMAL_NUMBER = 276,
+     tUDECIMAL_NUMBER = 277
+   };
+#endif
+/* Tokens.  */
+#define tAGO 258
+#define tDST 259
+#define tYEAR_UNIT 260
+#define tMONTH_UNIT 261
+#define tHOUR_UNIT 262
+#define tMINUTE_UNIT 263
+#define tSEC_UNIT 264
+#define tDAY_UNIT 265
+#define tDAY_SHIFT 266
+#define tDAY 267
+#define tDAYZONE 268
+#define tLOCAL_ZONE 269
+#define tMERIDIAN 270
+#define tMONTH 271
+#define tORDINAL 272
+#define tZONE 273
+#define tSNUMBER 274
+#define tUNUMBER 275
+#define tSDECIMAL_NUMBER 276
+#define tUDECIMAL_NUMBER 277
+
+
+
+
+/* Copy the first part of user declarations.  */
+#line 1 "getdate.y"
+
+/* Parse a string into an internal time stamp.
+
+   Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+   2010 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/>.  */
+
+/* Originally written by Steven M. Bellovin <smb@research.att.com> while
+   at the University of North Carolina at Chapel Hill.  Later tweaked by
+   a couple of people on Usenet.  Completely overhauled by Rich $alz
+   <rsalz@bbn.com> and Jim Berets <jberets@bbn.com> in August, 1990.
+
+   Modified by Paul Eggert <eggert@twinsun.com> in August 1999 to do
+   the right thing about local DST.  Also modified by Paul Eggert
+   <eggert@cs.ucla.edu> in February 2004 to support
+   nanosecond-resolution time stamps, and in October 2004 to support
+   TZ strings in dates.  */
+
+/* FIXME: Check for arithmetic overflow in all cases, not just
+   some of them.  */
+
+#include <config.h>
+
+#include "getdate.h"
+
+#include "intprops.h"
+#include "timespec.h"
+#include "verify.h"
+
+/* There's no need to extend the stack, so there's no need to involve
+   alloca.  */
+#define YYSTACK_USE_ALLOCA 0
+
+/* Tell Bison how much stack space is needed.  20 should be plenty for
+   this grammar, which is not right recursive.  Beware setting it too
+   high, since that might cause problems on machines whose
+   implementations have lame stack-overflow checking.  */
+#define YYMAXDEPTH 20
+#define YYINITDEPTH YYMAXDEPTH
+
+/* Since the code of getdate.y is not included in the Emacs executable
+   itself, there is no need to #define static in this file.  Even if
+   the code were included in the Emacs executable, it probably
+   wouldn't do any harm to #undef it here; this will only cause
+   problems if we try to write to a static variable, which I don't
+   think this code needs to do.  */
+#ifdef emacs
+# undef static
+#endif
+
+#include <c-ctype.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "xalloc.h"
+
+
+/* ISDIGIT differs from isdigit, as follows:
+   - Its arg may be any int or unsigned int; it need not be an unsigned char
+     or EOF.
+   - It's typically faster.
+   POSIX says that only '0' through '9' are digits.  Prefer ISDIGIT to
+   isdigit unless it's important to use the locale's definition
+   of `digit' even when the host does not conform to POSIX.  */
+#define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
+
+/* Shift A right by B bits portably, by dividing A by 2**B and
+   truncating towards minus infinity.  A and B should be free of side
+   effects, and B should be in the range 0 <= B <= INT_BITS - 2, where
+   INT_BITS is the number of useful bits in an int.  GNU code can
+   assume that INT_BITS is at least 32.
+
+   ISO C99 says that A >> B is implementation-defined if A < 0.  Some
+   implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift
+   right in the usual way when A < 0, so SHR falls back on division if
+   ordinary A >> B doesn't seem to be the usual signed shift.  */
+#define SHR(a, b)       \
+  (-1 >> 1 == -1        \
+   ? (a) >> (b)         \
+   : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0))
+
+#define EPOCH_YEAR 1970
+#define TM_YEAR_BASE 1900
+
+#define HOUR(x) ((x) * 60)
+
+/* long_time_t is a signed integer type that contains all time_t values.  */
+verify (TYPE_IS_INTEGER (time_t));
+#if TIME_T_FITS_IN_LONG_INT
+typedef long int long_time_t;
+#else
+typedef time_t long_time_t;
+#endif
+
+/* Lots of this code assumes time_t and time_t-like values fit into
+   long_time_t.  */
+verify (TYPE_MINIMUM (long_time_t) <= TYPE_MINIMUM (time_t)
+        && TYPE_MAXIMUM (time_t) <= TYPE_MAXIMUM (long_time_t));
+
+/* FIXME: It also assumes that signed integer overflow silently wraps around,
+   but this is not true any more with recent versions of GCC 4.  */
+
+/* An integer value, and the number of digits in its textual
+   representation.  */
+typedef struct
+{
+  bool negative;
+  long int value;
+  size_t digits;
+} textint;
+
+/* An entry in the lexical lookup table.  */
+typedef struct
+{
+  char const *name;
+  int type;
+  int value;
+} table;
+
+/* Meridian: am, pm, or 24-hour style.  */
+enum { MERam, MERpm, MER24 };
+
+enum { BILLION = 1000000000, LOG10_BILLION = 9 };
+
+/* Relative times.  */
+typedef struct
+{
+  /* Relative year, month, day, hour, minutes, seconds, and nanoseconds.  */
+  long int year;
+  long int month;
+  long int day;
+  long int hour;
+  long int minutes;
+  long_time_t seconds;
+  long int ns;
+} relative_time;
+
+#if HAVE_COMPOUND_LITERALS
+# define RELATIVE_TIME_0 ((relative_time) { 0, 0, 0, 0, 0, 0, 0 })
+#else
+static relative_time const RELATIVE_TIME_0;
+#endif
+
+/* Information passed to and from the parser.  */
+typedef struct
+{
+  /* The input string remaining to be parsed. */
+  const char *input;
+
+  /* N, if this is the Nth Tuesday.  */
+  long int day_ordinal;
+
+  /* Day of week; Sunday is 0.  */
+  int day_number;
+
+  /* tm_isdst flag for the local zone.  */
+  int local_isdst;
+
+  /* Time zone, in minutes east of UTC.  */
+  long int time_zone;
+
+  /* Style used for time.  */
+  int meridian;
+
+  /* Gregorian year, month, day, hour, minutes, seconds, and nanoseconds.  */
+  textint year;
+  long int month;
+  long int day;
+  long int hour;
+  long int minutes;
+  struct timespec seconds; /* includes nanoseconds */
+
+  /* Relative year, month, day, hour, minutes, seconds, and nanoseconds.  */
+  relative_time rel;
+
+  /* Presence or counts of nonterminals of various flavors parsed so far.  */
+  bool timespec_seen;
+  bool rels_seen;
+  size_t dates_seen;
+  size_t days_seen;
+  size_t local_zones_seen;
+  size_t dsts_seen;
+  size_t times_seen;
+  size_t zones_seen;
+
+  /* Table of local time zone abbrevations, terminated by a null entry.  */
+  table local_time_zone_table[3];
+} parser_control;
+
+union YYSTYPE;
+static int yylex (union YYSTYPE *, parser_control *);
+static int yyerror (parser_control const *, char const *);
+static long int time_zone_hhmm (parser_control *, textint, long int);
+
+/* Extract into *PC any date and time info from a string of digits
+   of the form e.g., YYYYMMDD, YYMMDD, HHMM, HH (and sometimes YYY,
+   YYYY, ...).  */
+static void
+digits_to_date_time (parser_control *pc, textint text_int)
+{
+  if (pc->dates_seen && ! pc->year.digits
+      && ! pc->rels_seen && (pc->times_seen || 2 < text_int.digits))
+    pc->year = text_int;
+  else
+    {
+      if (4 < text_int.digits)
+        {
+          pc->dates_seen++;
+          pc->day = text_int.value % 100;
+          pc->month = (text_int.value / 100) % 100;
+          pc->year.value = text_int.value / 10000;
+          pc->year.digits = text_int.digits - 4;
+        }
+      else
+        {
+          pc->times_seen++;
+          if (text_int.digits <= 2)
+            {
+              pc->hour = text_int.value;
+              pc->minutes = 0;
+            }
+          else
+            {
+              pc->hour = text_int.value / 100;
+              pc->minutes = text_int.value % 100;
+            }
+          pc->seconds.tv_sec = 0;
+          pc->seconds.tv_nsec = 0;
+          pc->meridian = MER24;
+        }
+    }
+}
+
+/* Increment PC->rel by FACTOR * REL (FACTOR is 1 or -1).  */
+static void
+apply_relative_time (parser_control *pc, relative_time rel, int factor)
+{
+  pc->rel.ns += factor * rel.ns;
+  pc->rel.seconds += factor * rel.seconds;
+  pc->rel.minutes += factor * rel.minutes;
+  pc->rel.hour += factor * rel.hour;
+  pc->rel.day += factor * rel.day;
+  pc->rel.month += factor * rel.month;
+  pc->rel.year += factor * rel.year;
+  pc->rels_seen = true;
+}
+
+/* Set PC-> hour, minutes, seconds and nanoseconds members from arguments.  */
+static void
+set_hhmmss (parser_control *pc, long int hour, long int minutes,
+            time_t sec, long int nsec)
+{
+  pc->hour = hour;
+  pc->minutes = minutes;
+  pc->seconds.tv_sec = sec;
+  pc->seconds.tv_nsec = nsec;
+}
+
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 285 "getdate.y"
+{
+  long int intval;
+  textint textintval;
+  struct timespec timespec;
+  relative_time rel;
+}
+/* Line 187 of yacc.c.  */
+#line 421 "getdate.c"
+       YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations.  */
+
+
+/* Line 216 of yacc.c.  */
+#line 434 "getdate.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int i)
+#else
+static int
+YYID (i)
+    int i;
+#endif
+{
+  return i;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+            && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+        || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss;
+  YYSTYPE yyvs;
+  };
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)             \
+      do                                       \
+       {                                       \
+         YYSIZE_T yyi;                         \
+         for (yyi = 0; yyi < (Count); yyi++)   \
+           (To)[yyi] = (From)[yyi];            \
+       }                                       \
+      while (YYID (0))
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack)                                       \
+    do                                                                 \
+      {                                                                        \
+       YYSIZE_T yynewbytes;                                            \
+       YYCOPY (&yyptr->Stack, Stack, yysize);                          \
+       Stack = &yyptr->Stack;                                          \
+       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+       yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                        \
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  12
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   98
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  27
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  21
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  82
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  100
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   277
+
+#define YYTRANSLATE(YYX)                                               \
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,    25,     2,     2,    26,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    24,     2,
+       2,     2,     2,     2,    23,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint8 yyprhs[] =
+{
+       0,     0,     3,     5,     7,    10,    11,    14,    16,    18,
+      20,    22,    24,    26,    28,    30,    33,    38,    44,    51,
+      59,    61,    64,    66,    69,    73,    75,    78,    80,    83,
+      86,    89,    93,    99,   103,   107,   111,   114,   119,   122,
+     126,   129,   131,   133,   136,   139,   141,   144,   147,   149,
+     152,   155,   157,   160,   163,   165,   168,   171,   173,   176,
+     179,   182,   185,   187,   189,   192,   195,   198,   201,   204,
+     207,   209,   211,   213,   215,   217,   219,   221,   223,   226,
+     227,   230,   231
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int8 yyrhs[] =
+{
+      28,     0,    -1,    29,    -1,    30,    -1,    23,    41,    -1,
+      -1,    30,    31,    -1,    32,    -1,    33,    -1,    34,    -1,
+      36,    -1,    35,    -1,    37,    -1,    44,    -1,    45,    -1,
+      20,    15,    -1,    20,    24,    20,    47,    -1,    20,    24,
+      20,    19,    46,    -1,    20,    24,    20,    24,    43,    47,
+      -1,    20,    24,    20,    24,    43,    19,    46,    -1,    14,
+      -1,    14,     4,    -1,    18,    -1,    18,    39,    -1,    18,
+      19,    46,    -1,    13,    -1,    18,     4,    -1,    12,    -1,
+      12,    25,    -1,    17,    12,    -1,    20,    12,    -1,    20,
+      26,    20,    -1,    20,    26,    20,    26,    20,    -1,    20,
+      19,    19,    -1,    20,    16,    19,    -1,    16,    19,    19,
+      -1,    16,    20,    -1,    16,    20,    25,    20,    -1,    20,
+      16,    -1,    20,    16,    20,    -1,    38,     3,    -1,    38,
+      -1,    40,    -1,    17,     5,    -1,    20,     5,    -1,     5,
+      -1,    17,     6,    -1,    20,     6,    -1,     6,    -1,    17,
+      10,    -1,    20,    10,    -1,    10,    -1,    17,     7,    -1,
+      20,     7,    -1,     7,    -1,    17,     8,    -1,    20,     8,
+      -1,     8,    -1,    17,     9,    -1,    20,     9,    -1,    21,
+       9,    -1,    22,     9,    -1,     9,    -1,    39,    -1,    19,
+       5,    -1,    19,     6,    -1,    19,    10,    -1,    19,     7,
+      -1,    19,     8,    -1,    19,     9,    -1,    11,    -1,    42,
+      -1,    43,    -1,    21,    -1,    19,    -1,    22,    -1,    20,
+      -1,    20,    -1,    20,    39,    -1,    -1,    24,    20,    -1,
+      -1,    15,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint16 yyrline[] =
+{
+       0,   311,   311,   312,   316,   323,   325,   329,   331,   333,
+     335,   337,   339,   340,   341,   345,   350,   355,   362,   367,
+     377,   382,   390,   392,   395,   397,   399,   404,   409,   414,
+     419,   427,   432,   452,   459,   467,   475,   480,   486,   491,
+     500,   502,   504,   509,   511,   513,   515,   517,   519,   521,
+     523,   525,   527,   529,   531,   533,   535,   537,   539,   541,
+     543,   545,   547,   549,   553,   555,   557,   559,   561,   563,
+     568,   572,   572,   575,   576,   581,   582,   587,   592,   603,
+     604,   610,   611
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "tAGO", "tDST", "tYEAR_UNIT",
+  "tMONTH_UNIT", "tHOUR_UNIT", "tMINUTE_UNIT", "tSEC_UNIT", "tDAY_UNIT",
+  "tDAY_SHIFT", "tDAY", "tDAYZONE", "tLOCAL_ZONE", "tMERIDIAN", "tMONTH",
+  "tORDINAL", "tZONE", "tSNUMBER", "tUNUMBER", "tSDECIMAL_NUMBER",
+  "tUDECIMAL_NUMBER", "'@'", "':'", "','", "'/'", "$accept", "spec",
+  "timespec", "items", "item", "time", "local_zone", "zone", "day", "date",
+  "rel", "relunit", "relunit_snumber", "dayshift", "seconds",
+  "signed_seconds", "unsigned_seconds", "number", "hybrid",
+  "o_colon_minutes", "o_merid", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,    64,    58,    44,    47
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    27,    28,    28,    29,    30,    30,    31,    31,    31,
+      31,    31,    31,    31,    31,    32,    32,    32,    32,    32,
+      33,    33,    34,    34,    34,    34,    34,    35,    35,    35,
+      35,    36,    36,    36,    36,    36,    36,    36,    36,    36,
+      37,    37,    37,    38,    38,    38,    38,    38,    38,    38,
+      38,    38,    38,    38,    38,    38,    38,    38,    38,    38,
+      38,    38,    38,    38,    39,    39,    39,    39,    39,    39,
+      40,    41,    41,    42,    42,    43,    43,    44,    45,    46,
+      46,    47,    47
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     1,     1,     2,     0,     2,     1,     1,     1,
+       1,     1,     1,     1,     1,     2,     4,     5,     6,     7,
+       1,     2,     1,     2,     3,     1,     2,     1,     2,     2,
+       2,     3,     5,     3,     3,     3,     2,     4,     2,     3,
+       2,     1,     1,     2,     2,     1,     2,     2,     1,     2,
+       2,     1,     2,     2,     1,     2,     2,     1,     2,     2,
+       2,     2,     1,     1,     2,     2,     2,     2,     2,     2,
+       1,     1,     1,     1,     1,     1,     1,     1,     2,     0,
+       2,     0,     1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint8 yydefact[] =
+{
+       5,     0,     0,     2,     3,    74,    76,    73,    75,     4,
+      71,    72,     1,    45,    48,    54,    57,    62,    51,    70,
+      27,    25,    20,     0,     0,    22,     0,    77,     0,     0,
+       6,     7,     8,     9,    11,    10,    12,    41,    63,    42,
+      13,    14,    28,    21,     0,    36,    43,    46,    52,    55,
+      58,    49,    29,    26,    79,    23,    64,    65,    67,    68,
+      69,    66,    44,    47,    53,    56,    59,    50,    30,    15,
+      38,     0,     0,     0,    78,    60,    61,    40,    35,     0,
+       0,    24,    34,    39,    33,    81,    31,    37,    80,    82,
+      79,     0,    16,     0,    17,    81,    32,    79,    18,    19
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int8 yydefgoto[] =
+{
+      -1,     2,     3,     4,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,     9,    10,    11,    40,    41,    81,
+      92
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -82
+static const yytype_int8 yypact[] =
+{
+     -17,    56,    15,   -82,    26,   -82,   -82,   -82,   -82,   -82,
+     -82,   -82,   -82,   -82,   -82,   -82,   -82,   -82,   -82,   -82,
+      36,   -82,    68,    10,    50,     9,    59,    -5,    72,    73,
+     -82,   -82,   -82,   -82,   -82,   -82,   -82,    80,   -82,   -82,
+     -82,   -82,   -82,   -82,    65,    61,   -82,   -82,   -82,   -82,
+     -82,   -82,   -82,   -82,    17,   -82,   -82,   -82,   -82,   -82,
+     -82,   -82,   -82,   -82,   -82,   -82,   -82,   -82,   -82,   -82,
+      60,    44,    67,    69,   -82,   -82,   -82,   -82,   -82,    70,
+      71,   -82,   -82,   -82,   -82,    -7,    62,   -82,   -82,   -82,
+      74,    -2,   -82,    75,   -82,    55,   -82,    74,   -82,   -82
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int8 yypgoto[] =
+{
+     -82,   -82,   -82,   -82,   -82,   -82,   -82,   -82,   -82,   -82,
+     -82,   -82,    46,   -82,   -82,   -82,    -6,   -82,   -82,   -81,
+      -3
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -1
+static const yytype_uint8 yytable[] =
+{
+      62,    63,    64,    65,    66,    67,     1,    68,    89,    94,
+      69,    70,    90,    53,    71,    12,    99,    91,     6,    72,
+       8,    73,    56,    57,    58,    59,    60,    61,    54,    44,
+      45,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    80,    23,    24,    25,    26,    27,    28,    29,    56,
+      57,    58,    59,    60,    61,    46,    47,    48,    49,    50,
+      51,    42,    52,    84,    56,    57,    58,    59,    60,    61,
+      89,    55,    43,    74,    97,     5,     6,     7,     8,    82,
+      83,    75,    76,    77,    78,    95,    79,    85,    93,    86,
+      87,    88,    98,     0,     0,    96,     0,     0,    80
+};
+
+static const yytype_int8 yycheck[] =
+{
+       5,     6,     7,     8,     9,    10,    23,    12,    15,    90,
+      15,    16,    19,     4,    19,     0,    97,    24,    20,    24,
+      22,    26,     5,     6,     7,     8,     9,    10,    19,    19,
+      20,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    24,    16,    17,    18,    19,    20,    21,    22,     5,
+       6,     7,     8,     9,    10,     5,     6,     7,     8,     9,
+      10,    25,    12,    19,     5,     6,     7,     8,     9,    10,
+      15,    25,     4,    27,    19,    19,    20,    21,    22,    19,
+      20,     9,     9,     3,    19,    91,    25,    20,    26,    20,
+      20,    20,    95,    -1,    -1,    20,    -1,    -1,    24
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,    23,    28,    29,    30,    19,    20,    21,    22,    41,
+      42,    43,     0,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    16,    17,    18,    19,    20,    21,    22,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      44,    45,    25,     4,    19,    20,     5,     6,     7,     8,
+       9,    10,    12,     4,    19,    39,     5,     6,     7,     8,
+       9,    10,     5,     6,     7,     8,     9,    10,    12,    15,
+      16,    19,    24,    26,    39,     9,     9,     3,    19,    25,
+      24,    46,    19,    20,    19,    20,    20,    20,    20,    15,
+      19,    24,    47,    26,    46,    43,    20,    19,    47,    46
+};
+
+#define yyerrok                (yyerrstatus = 0)
+#define yyclearin      (yychar = YYEMPTY)
+#define YYEMPTY                (-2)
+#define YYEOF          0
+
+#define YYACCEPT       goto yyacceptlab
+#define YYABORT                goto yyabortlab
+#define YYERROR                goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL         goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)                                 \
+do                                                             \
+  if (yychar == YYEMPTY && yylen == 1)                         \
+    {                                                          \
+      yychar = (Token);                                                \
+      yylval = (Value);                                                \
+      yytoken = YYTRANSLATE (yychar);                          \
+      YYPOPSTACK (1);                                          \
+      goto yybackup;                                           \
+    }                                                          \
+  else                                                         \
+    {                                                          \
+      yyerror (pc, YY_("syntax error: cannot back up")); \
+      YYERROR;                                                 \
+    }                                                          \
+while (YYID (0))
+
+
+#define YYTERROR       1
+#define YYERRCODE      256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
+    do                                                                 \
+      if (YYID (N))                                                    \
+       {                                                               \
+         (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
+         (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
+         (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
+         (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
+       }                                                               \
+      else                                                             \
+       {                                                               \
+         (Current).first_line   = (Current).last_line   =              \
+           YYRHSLOC (Rhs, 0).last_line;                                \
+         (Current).first_column = (Current).last_column =              \
+           YYRHSLOC (Rhs, 0).last_column;                              \
+       }                                                               \
+    while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)                 \
+     fprintf (File, "%d.%d-%d.%d",                     \
+             (Loc).first_line, (Loc).first_column,     \
+             (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, YYLEX_PARAM)
+#else
+# define YYLEX yylex (&yylval, pc)
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)                       \
+do {                                           \
+  if (yydebug)                                 \
+    YYFPRINTF Args;                            \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
+do {                                                                     \
+  if (yydebug)                                                           \
+    {                                                                    \
+      YYFPRINTF (stderr, "%s ", Title);                                          \
+      yy_symbol_print (stderr,                                           \
+                 Type, Value, pc); \
+      YYFPRINTF (stderr, "\n");                                                  \
+    }                                                                    \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, parser_control *pc)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep, pc)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+    parser_control *pc;
+#endif
+{
+  if (!yyvaluep)
+    return;
+  YYUSE (pc);
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+       break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, parser_control *pc)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep, pc)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+    parser_control *pc;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep, pc);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+#else
+static void
+yy_stack_print (bottom, top)
+    yytype_int16 *bottom;
+    yytype_int16 *top;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; bottom <= top; ++bottom)
+    YYFPRINTF (stderr, " %d", *bottom);
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)                           \
+do {                                                           \
+  if (yydebug)                                                 \
+    yy_stack_print ((Bottom), (Top));                          \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule, parser_control *pc)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule, pc)
+    YYSTYPE *yyvsp;
+    int yyrule;
+    parser_control *pc;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+            yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      fprintf (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+                      &(yyvsp[(yyi + 1) - (yynrhs)])
+                                      , pc);
+      fprintf (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)         \
+do {                                   \
+  if (yydebug)                         \
+    yy_reduce_print (yyvsp, Rule, pc); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef        YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+\f
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+       switch (*++yyp)
+         {
+         case '\'':
+         case ',':
+           goto do_not_strip_quotes;
+
+         case '\\':
+           if (*++yyp != '\\')
+             goto do_not_strip_quotes;
+           /* Fall through.  */
+         default:
+           if (yyres)
+             yyres[yyn] = *yyp;
+           yyn++;
+           break;
+
+         case '"':
+           if (yyres)
+             yyres[yyn] = '\0';
+           return yyn;
+         }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+    return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+        constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+                   + sizeof yyexpecting - 1
+                   + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+                      * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+        YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+       if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+         {
+           if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+             {
+               yycount = 1;
+               yysize = yysize0;
+               yyformat[sizeof yyunexpected - 1] = '\0';
+               break;
+             }
+           yyarg[yycount++] = yytname[yyx];
+           yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+           yysize_overflow |= (yysize1 < yysize);
+           yysize = yysize1;
+           yyfmt = yystpcpy (yyfmt, yyprefix);
+           yyprefix = yyor;
+         }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+       return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+       {
+         /* Avoid sprintf, as that infringes on the user's name space.
+            Don't have undefined behavior even if the translation
+            produced a string with the wrong number of "%s"s.  */
+         char *yyp = yyresult;
+         int yyi = 0;
+         while ((*yyp = *yyf) != '\0')
+           {
+             if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+               {
+                 yyp += yytnamerr (yyp, yyarg[yyi++]);
+                 yyf += 2;
+               }
+             else
+               {
+                 yyp++;
+                 yyf++;
+               }
+           }
+       }
+      return yysize;
+    }
+}
+#endif /* YYERROR_VERBOSE */
+\f
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, parser_control *pc)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep, pc)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+    parser_control *pc;
+#endif
+{
+  YYUSE (yyvaluep);
+  YYUSE (pc);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+       break;
+    }
+}
+\f
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (parser_control *pc);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (parser_control *pc)
+#else
+int
+yyparse (pc)
+    parser_control *pc;
+#endif
+#endif
+{
+  /* The look-ahead symbol.  */
+int yychar;
+
+/* The semantic value of the look-ahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+  int yystate;
+  int yyn;
+  int yyresult;
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Look-ahead token as an internal (translated) token number.  */
+  int yytoken = 0;
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack.  */
+  yytype_int16 yyssa[YYINITDEPTH];
+  yytype_int16 *yyss = yyssa;
+  yytype_int16 *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;            /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+       /* Give user a chance to reallocate the stack.  Use copies of
+          these so that the &'s don't force the real ones into
+          memory.  */
+       YYSTYPE *yyvs1 = yyvs;
+       yytype_int16 *yyss1 = yyss;
+
+
+       /* Each stack pointer address is followed by the size of the
+          data in use in that stack, in bytes.  This used to be a
+          conditional around just the two extra args, but that might
+          be undefined if yyoverflow is a macro.  */
+       yyoverflow (YY_("memory exhausted"),
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
+
+                   &yystacksize);
+
+       yyss = yyss1;
+       yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+       goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+       yystacksize = YYMAXDEPTH;
+
+      {
+       yytype_int16 *yyss1 = yyss;
+       union yyalloc *yyptr =
+         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+       if (! yyptr)
+         goto yyexhaustedlab;
+       YYSTACK_RELOCATE (yyss);
+       YYSTACK_RELOCATE (yyvs);
+
+#  undef YYSTACK_RELOCATE
+       if (yyss1 != yyssa)
+         YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                 (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+       YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     look-ahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to look-ahead token.  */
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a look-ahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+       goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the look-ahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 4:
+#line 317 "getdate.y"
+    {
+        pc->seconds = (yyvsp[(2) - (2)].timespec);
+        pc->timespec_seen = true;
+      }
+    break;
+
+  case 7:
+#line 330 "getdate.y"
+    { pc->times_seen++; }
+    break;
+
+  case 8:
+#line 332 "getdate.y"
+    { pc->local_zones_seen++; }
+    break;
+
+  case 9:
+#line 334 "getdate.y"
+    { pc->zones_seen++; }
+    break;
+
+  case 10:
+#line 336 "getdate.y"
+    { pc->dates_seen++; }
+    break;
+
+  case 11:
+#line 338 "getdate.y"
+    { pc->days_seen++; }
+    break;
+
+  case 15:
+#line 346 "getdate.y"
+    {
+        set_hhmmss (pc, (yyvsp[(1) - (2)].textintval).value, 0, 0, 0);
+        pc->meridian = (yyvsp[(2) - (2)].intval);
+      }
+    break;
+
+  case 16:
+#line 351 "getdate.y"
+    {
+        set_hhmmss (pc, (yyvsp[(1) - (4)].textintval).value, (yyvsp[(3) - (4)].textintval).value, 0, 0);
+        pc->meridian = (yyvsp[(4) - (4)].intval);
+      }
+    break;
+
+  case 17:
+#line 356 "getdate.y"
+    {
+        set_hhmmss (pc, (yyvsp[(1) - (5)].textintval).value, (yyvsp[(3) - (5)].textintval).value, 0, 0);
+        pc->meridian = MER24;
+        pc->zones_seen++;
+        pc->time_zone = time_zone_hhmm (pc, (yyvsp[(4) - (5)].textintval), (yyvsp[(5) - (5)].intval));
+      }
+    break;
+
+  case 18:
+#line 363 "getdate.y"
+    {
+        set_hhmmss (pc, (yyvsp[(1) - (6)].textintval).value, (yyvsp[(3) - (6)].textintval).value, (yyvsp[(5) - (6)].timespec).tv_sec, (yyvsp[(5) - (6)].timespec).tv_nsec);
+        pc->meridian = (yyvsp[(6) - (6)].intval);
+      }
+    break;
+
+  case 19:
+#line 368 "getdate.y"
+    {
+        set_hhmmss (pc, (yyvsp[(1) - (7)].textintval).value, (yyvsp[(3) - (7)].textintval).value, (yyvsp[(5) - (7)].timespec).tv_sec, (yyvsp[(5) - (7)].timespec).tv_nsec);
+        pc->meridian = MER24;
+        pc->zones_seen++;
+        pc->time_zone = time_zone_hhmm (pc, (yyvsp[(6) - (7)].textintval), (yyvsp[(7) - (7)].intval));
+      }
+    break;
+
+  case 20:
+#line 378 "getdate.y"
+    {
+        pc->local_isdst = (yyvsp[(1) - (1)].intval);
+        pc->dsts_seen += (0 < (yyvsp[(1) - (1)].intval));
+      }
+    break;
+
+  case 21:
+#line 383 "getdate.y"
+    {
+        pc->local_isdst = 1;
+        pc->dsts_seen += (0 < (yyvsp[(1) - (2)].intval)) + 1;
+      }
+    break;
+
+  case 22:
+#line 391 "getdate.y"
+    { pc->time_zone = (yyvsp[(1) - (1)].intval); }
+    break;
+
+  case 23:
+#line 393 "getdate.y"
+    { pc->time_zone = (yyvsp[(1) - (2)].intval);
+        apply_relative_time (pc, (yyvsp[(2) - (2)].rel), 1); }
+    break;
+
+  case 24:
+#line 396 "getdate.y"
+    { pc->time_zone = (yyvsp[(1) - (3)].intval) + time_zone_hhmm (pc, (yyvsp[(2) - (3)].textintval), (yyvsp[(3) - (3)].intval)); }
+    break;
+
+  case 25:
+#line 398 "getdate.y"
+    { pc->time_zone = (yyvsp[(1) - (1)].intval) + 60; }
+    break;
+
+  case 26:
+#line 400 "getdate.y"
+    { pc->time_zone = (yyvsp[(1) - (2)].intval) + 60; }
+    break;
+
+  case 27:
+#line 405 "getdate.y"
+    {
+        pc->day_ordinal = 0;
+        pc->day_number = (yyvsp[(1) - (1)].intval);
+      }
+    break;
+
+  case 28:
+#line 410 "getdate.y"
+    {
+        pc->day_ordinal = 0;
+        pc->day_number = (yyvsp[(1) - (2)].intval);
+      }
+    break;
+
+  case 29:
+#line 415 "getdate.y"
+    {
+        pc->day_ordinal = (yyvsp[(1) - (2)].intval);
+        pc->day_number = (yyvsp[(2) - (2)].intval);
+      }
+    break;
+
+  case 30:
+#line 420 "getdate.y"
+    {
+        pc->day_ordinal = (yyvsp[(1) - (2)].textintval).value;
+        pc->day_number = (yyvsp[(2) - (2)].intval);
+      }
+    break;
+
+  case 31:
+#line 428 "getdate.y"
+    {
+        pc->month = (yyvsp[(1) - (3)].textintval).value;
+        pc->day = (yyvsp[(3) - (3)].textintval).value;
+      }
+    break;
+
+  case 32:
+#line 433 "getdate.y"
+    {
+        /* Interpret as YYYY/MM/DD if the first value has 4 or more digits,
+           otherwise as MM/DD/YY.
+           The goal in recognizing YYYY/MM/DD is solely to support legacy
+           machine-generated dates like those in an RCS log listing.  If
+           you want portability, use the ISO 8601 format.  */
+        if (4 <= (yyvsp[(1) - (5)].textintval).digits)
+          {
+            pc->year = (yyvsp[(1) - (5)].textintval);
+            pc->month = (yyvsp[(3) - (5)].textintval).value;
+            pc->day = (yyvsp[(5) - (5)].textintval).value;
+          }
+        else
+          {
+            pc->month = (yyvsp[(1) - (5)].textintval).value;
+            pc->day = (yyvsp[(3) - (5)].textintval).value;
+            pc->year = (yyvsp[(5) - (5)].textintval);
+          }
+      }
+    break;
+
+  case 33:
+#line 453 "getdate.y"
+    {
+        /* ISO 8601 format.  YYYY-MM-DD.  */
+        pc->year = (yyvsp[(1) - (3)].textintval);
+        pc->month = -(yyvsp[(2) - (3)].textintval).value;
+        pc->day = -(yyvsp[(3) - (3)].textintval).value;
+      }
+    break;
+
+  case 34:
+#line 460 "getdate.y"
+    {
+        /* e.g. 17-JUN-1992.  */
+        pc->day = (yyvsp[(1) - (3)].textintval).value;
+        pc->month = (yyvsp[(2) - (3)].intval);
+        pc->year.value = -(yyvsp[(3) - (3)].textintval).value;
+        pc->year.digits = (yyvsp[(3) - (3)].textintval).digits;
+      }
+    break;
+
+  case 35:
+#line 468 "getdate.y"
+    {
+        /* e.g. JUN-17-1992.  */
+        pc->month = (yyvsp[(1) - (3)].intval);
+        pc->day = -(yyvsp[(2) - (3)].textintval).value;
+        pc->year.value = -(yyvsp[(3) - (3)].textintval).value;
+        pc->year.digits = (yyvsp[(3) - (3)].textintval).digits;
+      }
+    break;
+
+  case 36:
+#line 476 "getdate.y"
+    {
+        pc->month = (yyvsp[(1) - (2)].intval);
+        pc->day = (yyvsp[(2) - (2)].textintval).value;
+      }
+    break;
+
+  case 37:
+#line 481 "getdate.y"
+    {
+        pc->month = (yyvsp[(1) - (4)].intval);
+        pc->day = (yyvsp[(2) - (4)].textintval).value;
+        pc->year = (yyvsp[(4) - (4)].textintval);
+      }
+    break;
+
+  case 38:
+#line 487 "getdate.y"
+    {
+        pc->day = (yyvsp[(1) - (2)].textintval).value;
+        pc->month = (yyvsp[(2) - (2)].intval);
+      }
+    break;
+
+  case 39:
+#line 492 "getdate.y"
+    {
+        pc->day = (yyvsp[(1) - (3)].textintval).value;
+        pc->month = (yyvsp[(2) - (3)].intval);
+        pc->year = (yyvsp[(3) - (3)].textintval);
+      }
+    break;
+
+  case 40:
+#line 501 "getdate.y"
+    { apply_relative_time (pc, (yyvsp[(1) - (2)].rel), -1); }
+    break;
+
+  case 41:
+#line 503 "getdate.y"
+    { apply_relative_time (pc, (yyvsp[(1) - (1)].rel), 1); }
+    break;
+
+  case 42:
+#line 505 "getdate.y"
+    { apply_relative_time (pc, (yyvsp[(1) - (1)].rel), 1); }
+    break;
+
+  case 43:
+#line 510 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).year = (yyvsp[(1) - (2)].intval); }
+    break;
+
+  case 44:
+#line 512 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).year = (yyvsp[(1) - (2)].textintval).value; }
+    break;
+
+  case 45:
+#line 514 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).year = 1; }
+    break;
+
+  case 46:
+#line 516 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).month = (yyvsp[(1) - (2)].intval); }
+    break;
+
+  case 47:
+#line 518 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).month = (yyvsp[(1) - (2)].textintval).value; }
+    break;
+
+  case 48:
+#line 520 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).month = 1; }
+    break;
+
+  case 49:
+#line 522 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).day = (yyvsp[(1) - (2)].intval) * (yyvsp[(2) - (2)].intval); }
+    break;
+
+  case 50:
+#line 524 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).day = (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); }
+    break;
+
+  case 51:
+#line 526 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).day = (yyvsp[(1) - (1)].intval); }
+    break;
+
+  case 52:
+#line 528 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).hour = (yyvsp[(1) - (2)].intval); }
+    break;
+
+  case 53:
+#line 530 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).hour = (yyvsp[(1) - (2)].textintval).value; }
+    break;
+
+  case 54:
+#line 532 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).hour = 1; }
+    break;
+
+  case 55:
+#line 534 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).minutes = (yyvsp[(1) - (2)].intval); }
+    break;
+
+  case 56:
+#line 536 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).minutes = (yyvsp[(1) - (2)].textintval).value; }
+    break;
+
+  case 57:
+#line 538 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).minutes = 1; }
+    break;
+
+  case 58:
+#line 540 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[(1) - (2)].intval); }
+    break;
+
+  case 59:
+#line 542 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[(1) - (2)].textintval).value; }
+    break;
+
+  case 60:
+#line 544 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[(1) - (2)].timespec).tv_sec; (yyval.rel).ns = (yyvsp[(1) - (2)].timespec).tv_nsec; }
+    break;
+
+  case 61:
+#line 546 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[(1) - (2)].timespec).tv_sec; (yyval.rel).ns = (yyvsp[(1) - (2)].timespec).tv_nsec; }
+    break;
+
+  case 62:
+#line 548 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = 1; }
+    break;
+
+  case 64:
+#line 554 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).year = (yyvsp[(1) - (2)].textintval).value; }
+    break;
+
+  case 65:
+#line 556 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).month = (yyvsp[(1) - (2)].textintval).value; }
+    break;
+
+  case 66:
+#line 558 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).day = (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); }
+    break;
+
+  case 67:
+#line 560 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).hour = (yyvsp[(1) - (2)].textintval).value; }
+    break;
+
+  case 68:
+#line 562 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).minutes = (yyvsp[(1) - (2)].textintval).value; }
+    break;
+
+  case 69:
+#line 564 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[(1) - (2)].textintval).value; }
+    break;
+
+  case 70:
+#line 569 "getdate.y"
+    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).day = (yyvsp[(1) - (1)].intval); }
+    break;
+
+  case 74:
+#line 577 "getdate.y"
+    { (yyval.timespec).tv_sec = (yyvsp[(1) - (1)].textintval).value; (yyval.timespec).tv_nsec = 0; }
+    break;
+
+  case 76:
+#line 583 "getdate.y"
+    { (yyval.timespec).tv_sec = (yyvsp[(1) - (1)].textintval).value; (yyval.timespec).tv_nsec = 0; }
+    break;
+
+  case 77:
+#line 588 "getdate.y"
+    { digits_to_date_time (pc, (yyvsp[(1) - (1)].textintval)); }
+    break;
+
+  case 78:
+#line 593 "getdate.y"
+    {
+        /* Hybrid all-digit and relative offset, so that we accept e.g.,
+           "YYYYMMDD +N days" as well as "YYYYMMDD N days".  */
+        digits_to_date_time (pc, (yyvsp[(1) - (2)].textintval));
+        apply_relative_time (pc, (yyvsp[(2) - (2)].rel), 1);
+      }
+    break;
+
+  case 79:
+#line 603 "getdate.y"
+    { (yyval.intval) = -1; }
+    break;
+
+  case 80:
+#line 605 "getdate.y"
+    { (yyval.intval) = (yyvsp[(2) - (2)].textintval).value; }
+    break;
+
+  case 81:
+#line 610 "getdate.y"
+    { (yyval.intval) = MER24; }
+    break;
+
+  case 82:
+#line 612 "getdate.y"
+    { (yyval.intval) = (yyvsp[(1) - (1)].intval); }
+    break;
+
+
+/* Line 1267 of yacc.c.  */
+#line 2177 "getdate.c"
+      default: break;
+    }
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (pc, YY_("syntax error"));
+#else
+      {
+       YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+       if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+         {
+           YYSIZE_T yyalloc = 2 * yysize;
+           if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+             yyalloc = YYSTACK_ALLOC_MAXIMUM;
+           if (yymsg != yymsgbuf)
+             YYSTACK_FREE (yymsg);
+           yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+           if (yymsg)
+             yymsg_alloc = yyalloc;
+           else
+             {
+               yymsg = yymsgbuf;
+               yymsg_alloc = sizeof yymsgbuf;
+             }
+         }
+
+       if (0 < yysize && yysize <= yymsg_alloc)
+         {
+           (void) yysyntax_error (yymsg, yystate, yychar);
+           yyerror (pc, yymsg);
+         }
+       else
+         {
+           yyerror (pc, YY_("syntax error"));
+           if (yysize != 0)
+             goto yyexhaustedlab;
+         }
+      }
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse look-ahead token after an
+        error, discard it.  */
+
+      if (yychar <= YYEOF)
+       {
+         /* Return failure if at end of input.  */
+         if (yychar == YYEOF)
+           YYABORT;
+       }
+      else
+       {
+         yydestruct ("Error: discarding",
+                     yytoken, &yylval, pc);
+         yychar = YYEMPTY;
+       }
+    }
+
+  /* Else will try to reuse look-ahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+       {
+         yyn += YYTERROR;
+         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+           {
+             yyn = yytable[yyn];
+             if (0 < yyn)
+               break;
+           }
+       }
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+       YYABORT;
+
+
+      yydestruct ("Error: popping",
+                 yystos[yystate], yyvsp, pc);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (pc, YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEOF && yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+                yytoken, &yylval, pc);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+                 yystos[*yyssp], yyvsp, pc);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+#line 615 "getdate.y"
+
+
+static table const meridian_table[] =
+{
+  { "AM",   tMERIDIAN, MERam },
+  { "A.M.", tMERIDIAN, MERam },
+  { "PM",   tMERIDIAN, MERpm },
+  { "P.M.", tMERIDIAN, MERpm },
+  { NULL, 0, 0 }
+};
+
+static table const dst_table[] =
+{
+  { "DST", tDST, 0 }
+};
+
+static table const month_and_day_table[] =
+{
+  { "JANUARY",  tMONTH,  1 },
+  { "FEBRUARY", tMONTH,  2 },
+  { "MARCH",    tMONTH,  3 },
+  { "APRIL",    tMONTH,  4 },
+  { "MAY",      tMONTH,  5 },
+  { "JUNE",     tMONTH,  6 },
+  { "JULY",     tMONTH,  7 },
+  { "AUGUST",   tMONTH,  8 },
+  { "SEPTEMBER",tMONTH,  9 },
+  { "SEPT",     tMONTH,  9 },
+  { "OCTOBER",  tMONTH, 10 },
+  { "NOVEMBER", tMONTH, 11 },
+  { "DECEMBER", tMONTH, 12 },
+  { "SUNDAY",   tDAY,    0 },
+  { "MONDAY",   tDAY,    1 },
+  { "TUESDAY",  tDAY,    2 },
+  { "TUES",     tDAY,    2 },
+  { "WEDNESDAY",tDAY,    3 },
+  { "WEDNES",   tDAY,    3 },
+  { "THURSDAY", tDAY,    4 },
+  { "THUR",     tDAY,    4 },
+  { "THURS",    tDAY,    4 },
+  { "FRIDAY",   tDAY,    5 },
+  { "SATURDAY", tDAY,    6 },
+  { NULL, 0, 0 }
+};
+
+static table const time_units_table[] =
+{
+  { "YEAR",     tYEAR_UNIT,      1 },
+  { "MONTH",    tMONTH_UNIT,     1 },
+  { "FORTNIGHT",tDAY_UNIT,      14 },
+  { "WEEK",     tDAY_UNIT,       7 },
+  { "DAY",      tDAY_UNIT,       1 },
+  { "HOUR",     tHOUR_UNIT,      1 },
+  { "MINUTE",   tMINUTE_UNIT,    1 },
+  { "MIN",      tMINUTE_UNIT,    1 },
+  { "SECOND",   tSEC_UNIT,       1 },
+  { "SEC",      tSEC_UNIT,       1 },
+  { NULL, 0, 0 }
+};
+
+/* Assorted relative-time words. */
+static table const relative_time_table[] =
+{
+  { "TOMORROW", tDAY_SHIFT,      1 },
+  { "YESTERDAY",tDAY_SHIFT,     -1 },
+  { "TODAY",    tDAY_SHIFT,      0 },
+  { "NOW",      tDAY_SHIFT,      0 },
+  { "LAST",     tORDINAL,       -1 },
+  { "THIS",     tORDINAL,        0 },
+  { "NEXT",     tORDINAL,        1 },
+  { "FIRST",    tORDINAL,        1 },
+/*{ "SECOND",   tORDINAL,        2 }, */
+  { "THIRD",    tORDINAL,        3 },
+  { "FOURTH",   tORDINAL,        4 },
+  { "FIFTH",    tORDINAL,        5 },
+  { "SIXTH",    tORDINAL,        6 },
+  { "SEVENTH",  tORDINAL,        7 },
+  { "EIGHTH",   tORDINAL,        8 },
+  { "NINTH",    tORDINAL,        9 },
+  { "TENTH",    tORDINAL,       10 },
+  { "ELEVENTH", tORDINAL,       11 },
+  { "TWELFTH",  tORDINAL,       12 },
+  { "AGO",      tAGO,            1 },
+  { NULL, 0, 0 }
+};
+
+/* The universal time zone table.  These labels can be used even for
+   time stamps that would not otherwise be valid, e.g., GMT time
+   stamps in London during summer.  */
+static table const universal_time_zone_table[] =
+{
+  { "GMT",      tZONE,     HOUR ( 0) }, /* Greenwich Mean */
+  { "UT",       tZONE,     HOUR ( 0) }, /* Universal (Coordinated) */
+  { "UTC",      tZONE,     HOUR ( 0) },
+  { NULL, 0, 0 }
+};
+
+/* The time zone table.  This table is necessarily incomplete, as time
+   zone abbreviations are ambiguous; e.g. Australians interpret "EST"
+   as Eastern time in Australia, not as US Eastern Standard Time.
+   You cannot rely on getdate to handle arbitrary time zone
+   abbreviations; use numeric abbreviations like `-0500' instead.  */
+static table const time_zone_table[] =
+{
+  { "WET",      tZONE,     HOUR ( 0) }, /* Western European */
+  { "WEST",     tDAYZONE,  HOUR ( 0) }, /* Western European Summer */
+  { "BST",      tDAYZONE,  HOUR ( 0) }, /* British Summer */
+  { "ART",      tZONE,    -HOUR ( 3) }, /* Argentina */
+  { "BRT",      tZONE,    -HOUR ( 3) }, /* Brazil */
+  { "BRST",     tDAYZONE, -HOUR ( 3) }, /* Brazil Summer */
+  { "NST",      tZONE,   -(HOUR ( 3) + 30) },   /* Newfoundland Standard */
+  { "NDT",      tDAYZONE,-(HOUR ( 3) + 30) },   /* Newfoundland Daylight */
+  { "AST",      tZONE,    -HOUR ( 4) }, /* Atlantic Standard */
+  { "ADT",      tDAYZONE, -HOUR ( 4) }, /* Atlantic Daylight */
+  { "CLT",      tZONE,    -HOUR ( 4) }, /* Chile */
+  { "CLST",     tDAYZONE, -HOUR ( 4) }, /* Chile Summer */
+  { "EST",      tZONE,    -HOUR ( 5) }, /* Eastern Standard */
+  { "EDT",      tDAYZONE, -HOUR ( 5) }, /* Eastern Daylight */
+  { "CST",      tZONE,    -HOUR ( 6) }, /* Central Standard */
+  { "CDT",      tDAYZONE, -HOUR ( 6) }, /* Central Daylight */
+  { "MST",      tZONE,    -HOUR ( 7) }, /* Mountain Standard */
+  { "MDT",      tDAYZONE, -HOUR ( 7) }, /* Mountain Daylight */
+  { "PST",      tZONE,    -HOUR ( 8) }, /* Pacific Standard */
+  { "PDT",      tDAYZONE, -HOUR ( 8) }, /* Pacific Daylight */
+  { "AKST",     tZONE,    -HOUR ( 9) }, /* Alaska Standard */
+  { "AKDT",     tDAYZONE, -HOUR ( 9) }, /* Alaska Daylight */
+  { "HST",      tZONE,    -HOUR (10) }, /* Hawaii Standard */
+  { "HAST",     tZONE,    -HOUR (10) }, /* Hawaii-Aleutian Standard */
+  { "HADT",     tDAYZONE, -HOUR (10) }, /* Hawaii-Aleutian Daylight */
+  { "SST",      tZONE,    -HOUR (12) }, /* Samoa Standard */
+  { "WAT",      tZONE,     HOUR ( 1) }, /* West Africa */
+  { "CET",      tZONE,     HOUR ( 1) }, /* Central European */
+  { "CEST",     tDAYZONE,  HOUR ( 1) }, /* Central European Summer */
+  { "MET",      tZONE,     HOUR ( 1) }, /* Middle European */
+  { "MEZ",      tZONE,     HOUR ( 1) }, /* Middle European */
+  { "MEST",     tDAYZONE,  HOUR ( 1) }, /* Middle European Summer */
+  { "MESZ",     tDAYZONE,  HOUR ( 1) }, /* Middle European Summer */
+  { "EET",      tZONE,     HOUR ( 2) }, /* Eastern European */
+  { "EEST",     tDAYZONE,  HOUR ( 2) }, /* Eastern European Summer */
+  { "CAT",      tZONE,     HOUR ( 2) }, /* Central Africa */
+  { "SAST",     tZONE,     HOUR ( 2) }, /* South Africa Standard */
+  { "EAT",      tZONE,     HOUR ( 3) }, /* East Africa */
+  { "MSK",      tZONE,     HOUR ( 3) }, /* Moscow */
+  { "MSD",      tDAYZONE,  HOUR ( 3) }, /* Moscow Daylight */
+  { "IST",      tZONE,    (HOUR ( 5) + 30) },   /* India Standard */
+  { "SGT",      tZONE,     HOUR ( 8) }, /* Singapore */
+  { "KST",      tZONE,     HOUR ( 9) }, /* Korea Standard */
+  { "JST",      tZONE,     HOUR ( 9) }, /* Japan Standard */
+  { "GST",      tZONE,     HOUR (10) }, /* Guam Standard */
+  { "NZST",     tZONE,     HOUR (12) }, /* New Zealand Standard */
+  { "NZDT",     tDAYZONE,  HOUR (12) }, /* New Zealand Daylight */
+  { NULL, 0, 0 }
+};
+
+/* Military time zone table. */
+static table const military_table[] =
+{
+  { "A", tZONE, -HOUR ( 1) },
+  { "B", tZONE, -HOUR ( 2) },
+  { "C", tZONE, -HOUR ( 3) },
+  { "D", tZONE, -HOUR ( 4) },
+  { "E", tZONE, -HOUR ( 5) },
+  { "F", tZONE, -HOUR ( 6) },
+  { "G", tZONE, -HOUR ( 7) },
+  { "H", tZONE, -HOUR ( 8) },
+  { "I", tZONE, -HOUR ( 9) },
+  { "K", tZONE, -HOUR (10) },
+  { "L", tZONE, -HOUR (11) },
+  { "M", tZONE, -HOUR (12) },
+  { "N", tZONE,  HOUR ( 1) },
+  { "O", tZONE,  HOUR ( 2) },
+  { "P", tZONE,  HOUR ( 3) },
+  { "Q", tZONE,  HOUR ( 4) },
+  { "R", tZONE,  HOUR ( 5) },
+  { "S", tZONE,  HOUR ( 6) },
+  { "T", tZONE,  HOUR ( 7) },
+  { "U", tZONE,  HOUR ( 8) },
+  { "V", tZONE,  HOUR ( 9) },
+  { "W", tZONE,  HOUR (10) },
+  { "X", tZONE,  HOUR (11) },
+  { "Y", tZONE,  HOUR (12) },
+  { "Z", tZONE,  HOUR ( 0) },
+  { NULL, 0, 0 }
+};
+
+\f
+
+/* Convert a time zone expressed as HH:MM into an integer count of
+   minutes.  If MM is negative, then S is of the form HHMM and needs
+   to be picked apart; otherwise, S is of the form HH.  As specified in
+   http://www.opengroup.org/susv3xbd/xbd_chap08.html#tag_08_03, allow
+   only valid TZ range, and consider first two digits as hours, if no
+   minutes specified.  */
+
+static long int
+time_zone_hhmm (parser_control *pc, textint s, long int mm)
+{
+  long int n_minutes;
+
+  /* If the length of S is 1 or 2 and no minutes are specified,
+     interpret it as a number of hours.  */
+  if (s.digits <= 2 && mm < 0)
+    s.value *= 100;
+
+  if (mm < 0)
+    n_minutes = (s.value / 100) * 60 + s.value % 100;
+  else
+    n_minutes = s.value * 60 + (s.negative ? -mm : mm);
+
+  /* If the absolute number of minutes is larger than 24 hours,
+     arrange to reject it by incrementing pc->zones_seen.  Thus,
+     we allow only values in the range UTC-24:00 to UTC+24:00.  */
+  if (24 * 60 < abs (n_minutes))
+    pc->zones_seen++;
+
+  return n_minutes;
+}
+
+static int
+to_hour (long int hours, int meridian)
+{
+  switch (meridian)
+    {
+    default: /* Pacify GCC.  */
+    case MER24:
+      return 0 <= hours && hours < 24 ? hours : -1;
+    case MERam:
+      return 0 < hours && hours < 12 ? hours : hours == 12 ? 0 : -1;
+    case MERpm:
+      return 0 < hours && hours < 12 ? hours + 12 : hours == 12 ? 12 : -1;
+    }
+}
+
+static long int
+to_year (textint textyear)
+{
+  long int year = textyear.value;
+
+  if (year < 0)
+    year = -year;
+
+  /* XPG4 suggests that years 00-68 map to 2000-2068, and
+     years 69-99 map to 1969-1999.  */
+  else if (textyear.digits == 2)
+    year += year < 69 ? 2000 : 1900;
+
+  return year;
+}
+
+static table const *
+lookup_zone (parser_control const *pc, char const *name)
+{
+  table const *tp;
+
+  for (tp = universal_time_zone_table; tp->name; tp++)
+    if (strcmp (name, tp->name) == 0)
+      return tp;
+
+  /* Try local zone abbreviations before those in time_zone_table, as
+     the local ones are more likely to be right.  */
+  for (tp = pc->local_time_zone_table; tp->name; tp++)
+    if (strcmp (name, tp->name) == 0)
+      return tp;
+
+  for (tp = time_zone_table; tp->name; tp++)
+    if (strcmp (name, tp->name) == 0)
+      return tp;
+
+  return NULL;
+}
+
+#if ! HAVE_TM_GMTOFF
+/* Yield the difference between *A and *B,
+   measured in seconds, ignoring leap seconds.
+   The body of this function is taken directly from the GNU C Library;
+   see src/strftime.c.  */
+static long int
+tm_diff (struct tm const *a, struct tm const *b)
+{
+  /* Compute intervening leap days correctly even if year is negative.
+     Take care to avoid int overflow in leap day calculations.  */
+  int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3);
+  int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3);
+  int a100 = a4 / 25 - (a4 % 25 < 0);
+  int b100 = b4 / 25 - (b4 % 25 < 0);
+  int a400 = SHR (a100, 2);
+  int b400 = SHR (b100, 2);
+  int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400);
+  long int ayear = a->tm_year;
+  long int years = ayear - b->tm_year;
+  long int days = (365 * years + intervening_leap_days
+                   + (a->tm_yday - b->tm_yday));
+  return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour))
+                + (a->tm_min - b->tm_min))
+          + (a->tm_sec - b->tm_sec));
+}
+#endif /* ! HAVE_TM_GMTOFF */
+
+static table const *
+lookup_word (parser_control const *pc, char *word)
+{
+  char *p;
+  char *q;
+  size_t wordlen;
+  table const *tp;
+  bool period_found;
+  bool abbrev;
+
+  /* Make it uppercase.  */
+  for (p = word; *p; p++)
+    {
+      unsigned char ch = *p;
+      *p = c_toupper (ch);
+    }
+
+  for (tp = meridian_table; tp->name; tp++)
+    if (strcmp (word, tp->name) == 0)
+      return tp;
+
+  /* See if we have an abbreviation for a month. */
+  wordlen = strlen (word);
+  abbrev = wordlen == 3 || (wordlen == 4 && word[3] == '.');
+
+  for (tp = month_and_day_table; tp->name; tp++)
+    if ((abbrev ? strncmp (word, tp->name, 3) : strcmp (word, tp->name)) == 0)
+      return tp;
+
+  if ((tp = lookup_zone (pc, word)))
+    return tp;
+
+  if (strcmp (word, dst_table[0].name) == 0)
+    return dst_table;
+
+  for (tp = time_units_table; tp->name; tp++)
+    if (strcmp (word, tp->name) == 0)
+      return tp;
+
+  /* Strip off any plural and try the units table again. */
+  if (word[wordlen - 1] == 'S')
+    {
+      word[wordlen - 1] = '\0';
+      for (tp = time_units_table; tp->name; tp++)
+        if (strcmp (word, tp->name) == 0)
+          return tp;
+      word[wordlen - 1] = 'S';  /* For "this" in relative_time_table.  */
+    }
+
+  for (tp = relative_time_table; tp->name; tp++)
+    if (strcmp (word, tp->name) == 0)
+      return tp;
+
+  /* Military time zones. */
+  if (wordlen == 1)
+    for (tp = military_table; tp->name; tp++)
+      if (word[0] == tp->name[0])
+        return tp;
+
+  /* Drop out any periods and try the time zone table again. */
+  for (period_found = false, p = q = word; (*p = *q); q++)
+    if (*q == '.')
+      period_found = true;
+    else
+      p++;
+  if (period_found && (tp = lookup_zone (pc, word)))
+    return tp;
+
+  return NULL;
+}
+
+static int
+yylex (YYSTYPE *lvalp, parser_control *pc)
+{
+  unsigned char c;
+  size_t count;
+
+  for (;;)
+    {
+      while (c = *pc->input, c_isspace (c))
+        pc->input++;
+
+      if (ISDIGIT (c) || c == '-' || c == '+')
+        {
+          char const *p;
+          int sign;
+          unsigned long int value;
+          if (c == '-' || c == '+')
+            {
+              sign = c == '-' ? -1 : 1;
+              while (c = *++pc->input, c_isspace (c))
+                continue;
+              if (! ISDIGIT (c))
+                /* skip the '-' sign */
+                continue;
+            }
+          else
+            sign = 0;
+          p = pc->input;
+          for (value = 0; ; value *= 10)
+            {
+              unsigned long int value1 = value + (c - '0');
+              if (value1 < value)
+                return '?';
+              value = value1;
+              c = *++p;
+              if (! ISDIGIT (c))
+                break;
+              if (ULONG_MAX / 10 < value)
+                return '?';
+            }
+          if ((c == '.' || c == ',') && ISDIGIT (p[1]))
+            {
+              time_t s;
+              int ns;
+              int digits;
+              unsigned long int value1;
+
+              /* Check for overflow when converting value to time_t.  */
+              if (sign < 0)
+                {
+                  s = - value;
+                  if (0 < s)
+                    return '?';
+                  value1 = -s;
+                }
+              else
+                {
+                  s = value;
+                  if (s < 0)
+                    return '?';
+                  value1 = s;
+                }
+              if (value != value1)
+                return '?';
+
+              /* Accumulate fraction, to ns precision.  */
+              p++;
+              ns = *p++ - '0';
+              for (digits = 2; digits <= LOG10_BILLION; digits++)
+                {
+                  ns *= 10;
+                  if (ISDIGIT (*p))
+                    ns += *p++ - '0';
+                }
+
+              /* Skip excess digits, truncating toward -Infinity.  */
+              if (sign < 0)
+                for (; ISDIGIT (*p); p++)
+                  if (*p != '0')
+                    {
+                      ns++;
+                      break;
+                    }
+              while (ISDIGIT (*p))
+                p++;
+
+              /* Adjust to the timespec convention, which is that
+                 tv_nsec is always a positive offset even if tv_sec is
+                 negative.  */
+              if (sign < 0 && ns)
+                {
+                  s--;
+                  if (! (s < 0))
+                    return '?';
+                  ns = BILLION - ns;
+                }
+
+              lvalp->timespec.tv_sec = s;
+              lvalp->timespec.tv_nsec = ns;
+              pc->input = p;
+              return sign ? tSDECIMAL_NUMBER : tUDECIMAL_NUMBER;
+            }
+          else
+            {
+              lvalp->textintval.negative = sign < 0;
+              if (sign < 0)
+                {
+                  lvalp->textintval.value = - value;
+                  if (0 < lvalp->textintval.value)
+                    return '?';
+                }
+              else
+                {
+                  lvalp->textintval.value = value;
+                  if (lvalp->textintval.value < 0)
+                    return '?';
+                }
+              lvalp->textintval.digits = p - pc->input;
+              pc->input = p;
+              return sign ? tSNUMBER : tUNUMBER;
+            }
+        }
+
+      if (c_isalpha (c))
+        {
+          char buff[20];
+          char *p = buff;
+          table const *tp;
+
+          do
+            {
+              if (p < buff + sizeof buff - 1)
+                *p++ = c;
+              c = *++pc->input;
+            }
+          while (c_isalpha (c) || c == '.');
+
+          *p = '\0';
+          tp = lookup_word (pc, buff);
+          if (! tp)
+            return '?';
+          lvalp->intval = tp->value;
+          return tp->type;
+        }
+
+      if (c != '(')
+        return *pc->input++;
+      count = 0;
+      do
+        {
+          c = *pc->input++;
+          if (c == '\0')
+            return c;
+          if (c == '(')
+            count++;
+          else if (c == ')')
+            count--;
+        }
+      while (count != 0);
+    }
+}
+
+/* Do nothing if the parser reports an error.  */
+static int
+yyerror (parser_control const *pc _GL_UNUSED,
+         char const *s _GL_UNUSED)
+{
+  return 0;
+}
+
+/* If *TM0 is the old and *TM1 is the new value of a struct tm after
+   passing it to mktime, return true if it's OK that mktime returned T.
+   It's not OK if *TM0 has out-of-range members.  */
+
+static bool
+mktime_ok (struct tm const *tm0, struct tm const *tm1, time_t t)
+{
+  if (t == (time_t) -1)
+    {
+      /* Guard against falsely reporting an error when parsing a time
+         stamp that happens to equal (time_t) -1, on a host that
+         supports such a time stamp.  */
+      tm1 = localtime (&t);
+      if (!tm1)
+        return false;
+    }
+
+  return ! ((tm0->tm_sec ^ tm1->tm_sec)
+            | (tm0->tm_min ^ tm1->tm_min)
+            | (tm0->tm_hour ^ tm1->tm_hour)
+            | (tm0->tm_mday ^ tm1->tm_mday)
+            | (tm0->tm_mon ^ tm1->tm_mon)
+            | (tm0->tm_year ^ tm1->tm_year));
+}
+
+/* A reasonable upper bound for the size of ordinary TZ strings.
+   Use heap allocation if TZ's length exceeds this.  */
+enum { TZBUFSIZE = 100 };
+
+/* Return a copy of TZ, stored in TZBUF if it fits, and heap-allocated
+   otherwise.  */
+static char *
+get_tz (char tzbuf[TZBUFSIZE])
+{
+  char *tz = getenv ("TZ");
+  if (tz)
+    {
+      size_t tzsize = strlen (tz) + 1;
+      tz = (tzsize <= TZBUFSIZE
+            ? memcpy (tzbuf, tz, tzsize)
+            : xmemdup (tz, tzsize));
+    }
+  return tz;
+}
+
+/* Parse a date/time string, storing the resulting time value into *RESULT.
+   The string itself is pointed to by P.  Return true if successful.
+   P can be an incomplete or relative time specification; if so, use
+   *NOW as the basis for the returned time.  */
+bool
+get_date (struct timespec *result, char const *p, struct timespec const *now)
+{
+  time_t Start;
+  long int Start_ns;
+  struct tm const *tmp;
+  struct tm tm;
+  struct tm tm0;
+  parser_control pc;
+  struct timespec gettime_buffer;
+  unsigned char c;
+  bool tz_was_altered = false;
+  char *tz0 = NULL;
+  char tz0buf[TZBUFSIZE];
+  bool ok = true;
+
+  if (! now)
+    {
+      gettime (&gettime_buffer);
+      now = &gettime_buffer;
+    }
+
+  Start = now->tv_sec;
+  Start_ns = now->tv_nsec;
+
+  tmp = localtime (&now->tv_sec);
+  if (! tmp)
+    return false;
+
+  while (c = *p, c_isspace (c))
+    p++;
+
+  if (strncmp (p, "TZ=\"", 4) == 0)
+    {
+      char const *tzbase = p + 4;
+      size_t tzsize = 1;
+      char const *s;
+
+      for (s = tzbase; *s; s++, tzsize++)
+        if (*s == '\\')
+          {
+            s++;
+            if (! (*s == '\\' || *s == '"'))
+              break;
+          }
+        else if (*s == '"')
+          {
+            char *z;
+            char *tz1;
+            char tz1buf[TZBUFSIZE];
+            bool large_tz = TZBUFSIZE < tzsize;
+            bool setenv_ok;
+            /* Free tz0, in case this is the 2nd or subsequent time through. */
+            free (tz0);
+            tz0 = get_tz (tz0buf);
+            z = tz1 = large_tz ? xmalloc (tzsize) : tz1buf;
+            for (s = tzbase; *s != '"'; s++)
+              *z++ = *(s += *s == '\\');
+            *z = '\0';
+            setenv_ok = setenv ("TZ", tz1, 1) == 0;
+            if (large_tz)
+              free (tz1);
+            if (!setenv_ok)
+              goto fail;
+            tz_was_altered = true;
+            p = s + 1;
+          }
+    }
+
+  /* As documented, be careful to treat the empty string just like
+     a date string of "0".  Without this, an empty string would be
+     declared invalid when parsed during a DST transition.  */
+  if (*p == '\0')
+    p = "0";
+
+  pc.input = p;
+  pc.year.value = tmp->tm_year;
+  pc.year.value += TM_YEAR_BASE;
+  pc.year.digits = 0;
+  pc.month = tmp->tm_mon + 1;
+  pc.day = tmp->tm_mday;
+  pc.hour = tmp->tm_hour;
+  pc.minutes = tmp->tm_min;
+  pc.seconds.tv_sec = tmp->tm_sec;
+  pc.seconds.tv_nsec = Start_ns;
+  tm.tm_isdst = tmp->tm_isdst;
+
+  pc.meridian = MER24;
+  pc.rel = RELATIVE_TIME_0;
+  pc.timespec_seen = false;
+  pc.rels_seen = false;
+  pc.dates_seen = 0;
+  pc.days_seen = 0;
+  pc.times_seen = 0;
+  pc.local_zones_seen = 0;
+  pc.dsts_seen = 0;
+  pc.zones_seen = 0;
+
+#if HAVE_STRUCT_TM_TM_ZONE
+  pc.local_time_zone_table[0].name = tmp->tm_zone;
+  pc.local_time_zone_table[0].type = tLOCAL_ZONE;
+  pc.local_time_zone_table[0].value = tmp->tm_isdst;
+  pc.local_time_zone_table[1].name = NULL;
+
+  /* Probe the names used in the next three calendar quarters, looking
+     for a tm_isdst different from the one we already have.  */
+  {
+    int quarter;
+    for (quarter = 1; quarter <= 3; quarter++)
+      {
+        time_t probe = Start + quarter * (90 * 24 * 60 * 60);
+        struct tm const *probe_tm = localtime (&probe);
+        if (probe_tm && probe_tm->tm_zone
+            && probe_tm->tm_isdst != pc.local_time_zone_table[0].value)
+          {
+              {
+                pc.local_time_zone_table[1].name = probe_tm->tm_zone;
+                pc.local_time_zone_table[1].type = tLOCAL_ZONE;
+                pc.local_time_zone_table[1].value = probe_tm->tm_isdst;
+                pc.local_time_zone_table[2].name = NULL;
+              }
+            break;
+          }
+      }
+  }
+#else
+#if HAVE_TZNAME
+  {
+# if !HAVE_DECL_TZNAME
+    extern char *tzname[];
+# endif
+    int i;
+    for (i = 0; i < 2; i++)
+      {
+        pc.local_time_zone_table[i].name = tzname[i];
+        pc.local_time_zone_table[i].type = tLOCAL_ZONE;
+        pc.local_time_zone_table[i].value = i;
+      }
+    pc.local_time_zone_table[i].name = NULL;
+  }
+#else
+  pc.local_time_zone_table[0].name = NULL;
+#endif
+#endif
+
+  if (pc.local_time_zone_table[0].name && pc.local_time_zone_table[1].name
+      && ! strcmp (pc.local_time_zone_table[0].name,
+                   pc.local_time_zone_table[1].name))
+    {
+      /* This locale uses the same abbrevation for standard and
+         daylight times.  So if we see that abbreviation, we don't
+         know whether it's daylight time.  */
+      pc.local_time_zone_table[0].value = -1;
+      pc.local_time_zone_table[1].name = NULL;
+    }
+
+  if (yyparse (&pc) != 0)
+    goto fail;
+
+  if (pc.timespec_seen)
+    *result = pc.seconds;
+  else
+    {
+      if (1 < (pc.times_seen | pc.dates_seen | pc.days_seen | pc.dsts_seen
+               | (pc.local_zones_seen + pc.zones_seen)))
+        goto fail;
+
+      tm.tm_year = to_year (pc.year) - TM_YEAR_BASE;
+      tm.tm_mon = pc.month - 1;
+      tm.tm_mday = pc.day;
+      if (pc.times_seen || (pc.rels_seen && ! pc.dates_seen && ! pc.days_seen))
+        {
+          tm.tm_hour = to_hour (pc.hour, pc.meridian);
+          if (tm.tm_hour < 0)
+            goto fail;
+          tm.tm_min = pc.minutes;
+          tm.tm_sec = pc.seconds.tv_sec;
+        }
+      else
+        {
+          tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
+          pc.seconds.tv_nsec = 0;
+        }
+
+      /* Let mktime deduce tm_isdst if we have an absolute time stamp.  */
+      if (pc.dates_seen | pc.days_seen | pc.times_seen)
+        tm.tm_isdst = -1;
+
+      /* But if the input explicitly specifies local time with or without
+         DST, give mktime that information.  */
+      if (pc.local_zones_seen)
+        tm.tm_isdst = pc.local_isdst;
+
+      tm0 = tm;
+
+      Start = mktime (&tm);
+
+      if (! mktime_ok (&tm0, &tm, Start))
+        {
+          if (! pc.zones_seen)
+            goto fail;
+          else
+            {
+              /* Guard against falsely reporting errors near the time_t
+                 boundaries when parsing times in other time zones.  For
+                 example, suppose the input string "1969-12-31 23:00:00 -0100",
+                 the current time zone is 8 hours ahead of UTC, and the min
+                 time_t value is 1970-01-01 00:00:00 UTC.  Then the min
+                 localtime value is 1970-01-01 08:00:00, and mktime will
+                 therefore fail on 1969-12-31 23:00:00.  To work around the
+                 problem, set the time zone to 1 hour behind UTC temporarily
+                 by setting TZ="XXX1:00" and try mktime again.  */
+
+              long int time_zone = pc.time_zone;
+              long int abs_time_zone = time_zone < 0 ? - time_zone : time_zone;
+              long int abs_time_zone_hour = abs_time_zone / 60;
+              int abs_time_zone_min = abs_time_zone % 60;
+              char tz1buf[sizeof "XXX+0:00"
+                          + sizeof pc.time_zone * CHAR_BIT / 3];
+              if (!tz_was_altered)
+                tz0 = get_tz (tz0buf);
+              sprintf (tz1buf, "XXX%s%ld:%02d", "-" + (time_zone < 0),
+                       abs_time_zone_hour, abs_time_zone_min);
+              if (setenv ("TZ", tz1buf, 1) != 0)
+                goto fail;
+              tz_was_altered = true;
+              tm = tm0;
+              Start = mktime (&tm);
+              if (! mktime_ok (&tm0, &tm, Start))
+                goto fail;
+            }
+        }
+
+      if (pc.days_seen && ! pc.dates_seen)
+        {
+          tm.tm_mday += ((pc.day_number - tm.tm_wday + 7) % 7
+                         + 7 * (pc.day_ordinal
+                                - (0 < pc.day_ordinal
+                                   && tm.tm_wday != pc.day_number)));
+          tm.tm_isdst = -1;
+          Start = mktime (&tm);
+          if (Start == (time_t) -1)
+            goto fail;
+        }
+
+      /* Add relative date.  */
+      if (pc.rel.year | pc.rel.month | pc.rel.day)
+        {
+          int year = tm.tm_year + pc.rel.year;
+          int month = tm.tm_mon + pc.rel.month;
+          int day = tm.tm_mday + pc.rel.day;
+          if (((year < tm.tm_year) ^ (pc.rel.year < 0))
+              | ((month < tm.tm_mon) ^ (pc.rel.month < 0))
+              | ((day < tm.tm_mday) ^ (pc.rel.day < 0)))
+            goto fail;
+          tm.tm_year = year;
+          tm.tm_mon = month;
+          tm.tm_mday = day;
+          tm.tm_hour = tm0.tm_hour;
+          tm.tm_min = tm0.tm_min;
+          tm.tm_sec = tm0.tm_sec;
+          tm.tm_isdst = tm0.tm_isdst;
+          Start = mktime (&tm);
+          if (Start == (time_t) -1)
+            goto fail;
+        }
+
+      /* The only "output" of this if-block is an updated Start value,
+         so this block must follow others that clobber Start.  */
+      if (pc.zones_seen)
+        {
+          long int delta = pc.time_zone * 60;
+          time_t t1;
+#ifdef HAVE_TM_GMTOFF
+          delta -= tm.tm_gmtoff;
+#else
+          time_t t = Start;
+          struct tm const *gmt = gmtime (&t);
+          if (! gmt)
+            goto fail;
+          delta -= tm_diff (&tm, gmt);
+#endif
+          t1 = Start - delta;
+          if ((Start < t1) != (delta < 0))
+            goto fail;  /* time_t overflow */
+          Start = t1;
+        }
+
+      /* Add relative hours, minutes, and seconds.  On hosts that support
+         leap seconds, ignore the possibility of leap seconds; e.g.,
+         "+ 10 minutes" adds 600 seconds, even if one of them is a
+         leap second.  Typically this is not what the user wants, but it's
+         too hard to do it the other way, because the time zone indicator
+         must be applied before relative times, and if mktime is applied
+         again the time zone will be lost.  */
+      {
+        long int sum_ns = pc.seconds.tv_nsec + pc.rel.ns;
+        long int normalized_ns = (sum_ns % BILLION + BILLION) % BILLION;
+        time_t t0 = Start;
+        long int d1 = 60 * 60 * pc.rel.hour;
+        time_t t1 = t0 + d1;
+        long int d2 = 60 * pc.rel.minutes;
+        time_t t2 = t1 + d2;
+        long_time_t d3 = pc.rel.seconds;
+        long_time_t t3 = t2 + d3;
+        long int d4 = (sum_ns - normalized_ns) / BILLION;
+        long_time_t t4 = t3 + d4;
+        time_t t5 = t4;
+
+        if ((d1 / (60 * 60) ^ pc.rel.hour)
+            | (d2 / 60 ^ pc.rel.minutes)
+            | ((t1 < t0) ^ (d1 < 0))
+            | ((t2 < t1) ^ (d2 < 0))
+            | ((t3 < t2) ^ (d3 < 0))
+            | ((t4 < t3) ^ (d4 < 0))
+            | (t5 != t4))
+          goto fail;
+
+        result->tv_sec = t5;
+        result->tv_nsec = normalized_ns;
+      }
+    }
+
+  goto done;
+
+ fail:
+  ok = false;
+ done:
+  if (tz_was_altered)
+    ok &= (tz0 ? setenv ("TZ", tz0, 1) : unsetenv ("TZ")) == 0;
+  if (tz0 != tz0buf)
+    free (tz0);
+  return ok;
+}
+
+#if TEST
+
+int
+main (int ac, char **av)
+{
+  char buff[BUFSIZ];
+
+  printf ("Enter date, or blank line to exit.\n\t> ");
+  fflush (stdout);
+
+  buff[BUFSIZ - 1] = '\0';
+  while (fgets (buff, BUFSIZ - 1, stdin) && buff[0])
+    {
+      struct timespec d;
+      struct tm const *tm;
+      if (! get_date (&d, buff, NULL))
+        printf ("Bad format - couldn't convert.\n");
+      else if (! (tm = localtime (&d.tv_sec)))
+        {
+          long int sec = d.tv_sec;
+          printf ("localtime (%ld) failed\n", sec);
+        }
+      else
+        {
+          int ns = d.tv_nsec;
+          printf ("%04ld-%02d-%02d %02d:%02d:%02d.%09d\n",
+                  tm->tm_year + 1900L, tm->tm_mon + 1, tm->tm_mday,
+                  tm->tm_hour, tm->tm_min, tm->tm_sec, ns);
+        }
+      printf ("\t> ");
+      fflush (stdout);
+    }
+  return 0;
+}
+#endif /* TEST */
+
diff --git a/gnu/getdate.h b/gnu/getdate.h
new file mode 100644 (file)
index 0000000..380b8ee
--- /dev/null
@@ -0,0 +1,24 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Parse a string into an internal time stamp.
+
+   Copyright (C) 1995, 1997, 1998, 2003, 2004, 2007, 2009, 2010 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 <stdbool.h>
+#include <time.h>
+
+bool get_date (struct timespec *, char const *, struct timespec const *);
diff --git a/gnu/getdate.y b/gnu/getdate.y
new file mode 100644 (file)
index 0000000..445865b
--- /dev/null
@@ -0,0 +1,1572 @@
+%{
+/* Parse a string into an internal time stamp.
+
+   Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+   2010 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/>.  */
+
+/* Originally written by Steven M. Bellovin <smb@research.att.com> while
+   at the University of North Carolina at Chapel Hill.  Later tweaked by
+   a couple of people on Usenet.  Completely overhauled by Rich $alz
+   <rsalz@bbn.com> and Jim Berets <jberets@bbn.com> in August, 1990.
+
+   Modified by Paul Eggert <eggert@twinsun.com> in August 1999 to do
+   the right thing about local DST.  Also modified by Paul Eggert
+   <eggert@cs.ucla.edu> in February 2004 to support
+   nanosecond-resolution time stamps, and in October 2004 to support
+   TZ strings in dates.  */
+
+/* FIXME: Check for arithmetic overflow in all cases, not just
+   some of them.  */
+
+#include <config.h>
+
+#include "getdate.h"
+
+#include "intprops.h"
+#include "timespec.h"
+#include "verify.h"
+
+/* There's no need to extend the stack, so there's no need to involve
+   alloca.  */
+#define YYSTACK_USE_ALLOCA 0
+
+/* Tell Bison how much stack space is needed.  20 should be plenty for
+   this grammar, which is not right recursive.  Beware setting it too
+   high, since that might cause problems on machines whose
+   implementations have lame stack-overflow checking.  */
+#define YYMAXDEPTH 20
+#define YYINITDEPTH YYMAXDEPTH
+
+/* Since the code of getdate.y is not included in the Emacs executable
+   itself, there is no need to #define static in this file.  Even if
+   the code were included in the Emacs executable, it probably
+   wouldn't do any harm to #undef it here; this will only cause
+   problems if we try to write to a static variable, which I don't
+   think this code needs to do.  */
+#ifdef emacs
+# undef static
+#endif
+
+#include <c-ctype.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "xalloc.h"
+
+
+/* ISDIGIT differs from isdigit, as follows:
+   - Its arg may be any int or unsigned int; it need not be an unsigned char
+     or EOF.
+   - It's typically faster.
+   POSIX says that only '0' through '9' are digits.  Prefer ISDIGIT to
+   isdigit unless it's important to use the locale's definition
+   of `digit' even when the host does not conform to POSIX.  */
+#define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
+
+/* Shift A right by B bits portably, by dividing A by 2**B and
+   truncating towards minus infinity.  A and B should be free of side
+   effects, and B should be in the range 0 <= B <= INT_BITS - 2, where
+   INT_BITS is the number of useful bits in an int.  GNU code can
+   assume that INT_BITS is at least 32.
+
+   ISO C99 says that A >> B is implementation-defined if A < 0.  Some
+   implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift
+   right in the usual way when A < 0, so SHR falls back on division if
+   ordinary A >> B doesn't seem to be the usual signed shift.  */
+#define SHR(a, b)       \
+  (-1 >> 1 == -1        \
+   ? (a) >> (b)         \
+   : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0))
+
+#define EPOCH_YEAR 1970
+#define TM_YEAR_BASE 1900
+
+#define HOUR(x) ((x) * 60)
+
+/* long_time_t is a signed integer type that contains all time_t values.  */
+verify (TYPE_IS_INTEGER (time_t));
+#if TIME_T_FITS_IN_LONG_INT
+typedef long int long_time_t;
+#else
+typedef time_t long_time_t;
+#endif
+
+/* Lots of this code assumes time_t and time_t-like values fit into
+   long_time_t.  */
+verify (TYPE_MINIMUM (long_time_t) <= TYPE_MINIMUM (time_t)
+        && TYPE_MAXIMUM (time_t) <= TYPE_MAXIMUM (long_time_t));
+
+/* FIXME: It also assumes that signed integer overflow silently wraps around,
+   but this is not true any more with recent versions of GCC 4.  */
+
+/* An integer value, and the number of digits in its textual
+   representation.  */
+typedef struct
+{
+  bool negative;
+  long int value;
+  size_t digits;
+} textint;
+
+/* An entry in the lexical lookup table.  */
+typedef struct
+{
+  char const *name;
+  int type;
+  int value;
+} table;
+
+/* Meridian: am, pm, or 24-hour style.  */
+enum { MERam, MERpm, MER24 };
+
+enum { BILLION = 1000000000, LOG10_BILLION = 9 };
+
+/* Relative times.  */
+typedef struct
+{
+  /* Relative year, month, day, hour, minutes, seconds, and nanoseconds.  */
+  long int year;
+  long int month;
+  long int day;
+  long int hour;
+  long int minutes;
+  long_time_t seconds;
+  long int ns;
+} relative_time;
+
+#if HAVE_COMPOUND_LITERALS
+# define RELATIVE_TIME_0 ((relative_time) { 0, 0, 0, 0, 0, 0, 0 })
+#else
+static relative_time const RELATIVE_TIME_0;
+#endif
+
+/* Information passed to and from the parser.  */
+typedef struct
+{
+  /* The input string remaining to be parsed. */
+  const char *input;
+
+  /* N, if this is the Nth Tuesday.  */
+  long int day_ordinal;
+
+  /* Day of week; Sunday is 0.  */
+  int day_number;
+
+  /* tm_isdst flag for the local zone.  */
+  int local_isdst;
+
+  /* Time zone, in minutes east of UTC.  */
+  long int time_zone;
+
+  /* Style used for time.  */
+  int meridian;
+
+  /* Gregorian year, month, day, hour, minutes, seconds, and nanoseconds.  */
+  textint year;
+  long int month;
+  long int day;
+  long int hour;
+  long int minutes;
+  struct timespec seconds; /* includes nanoseconds */
+
+  /* Relative year, month, day, hour, minutes, seconds, and nanoseconds.  */
+  relative_time rel;
+
+  /* Presence or counts of nonterminals of various flavors parsed so far.  */
+  bool timespec_seen;
+  bool rels_seen;
+  size_t dates_seen;
+  size_t days_seen;
+  size_t local_zones_seen;
+  size_t dsts_seen;
+  size_t times_seen;
+  size_t zones_seen;
+
+  /* Table of local time zone abbrevations, terminated by a null entry.  */
+  table local_time_zone_table[3];
+} parser_control;
+
+union YYSTYPE;
+static int yylex (union YYSTYPE *, parser_control *);
+static int yyerror (parser_control const *, char const *);
+static long int time_zone_hhmm (parser_control *, textint, long int);
+
+/* Extract into *PC any date and time info from a string of digits
+   of the form e.g., YYYYMMDD, YYMMDD, HHMM, HH (and sometimes YYY,
+   YYYY, ...).  */
+static void
+digits_to_date_time (parser_control *pc, textint text_int)
+{
+  if (pc->dates_seen && ! pc->year.digits
+      && ! pc->rels_seen && (pc->times_seen || 2 < text_int.digits))
+    pc->year = text_int;
+  else
+    {
+      if (4 < text_int.digits)
+        {
+          pc->dates_seen++;
+          pc->day = text_int.value % 100;
+          pc->month = (text_int.value / 100) % 100;
+          pc->year.value = text_int.value / 10000;
+          pc->year.digits = text_int.digits - 4;
+        }
+      else
+        {
+          pc->times_seen++;
+          if (text_int.digits <= 2)
+            {
+              pc->hour = text_int.value;
+              pc->minutes = 0;
+            }
+          else
+            {
+              pc->hour = text_int.value / 100;
+              pc->minutes = text_int.value % 100;
+            }
+          pc->seconds.tv_sec = 0;
+          pc->seconds.tv_nsec = 0;
+          pc->meridian = MER24;
+        }
+    }
+}
+
+/* Increment PC->rel by FACTOR * REL (FACTOR is 1 or -1).  */
+static void
+apply_relative_time (parser_control *pc, relative_time rel, int factor)
+{
+  pc->rel.ns += factor * rel.ns;
+  pc->rel.seconds += factor * rel.seconds;
+  pc->rel.minutes += factor * rel.minutes;
+  pc->rel.hour += factor * rel.hour;
+  pc->rel.day += factor * rel.day;
+  pc->rel.month += factor * rel.month;
+  pc->rel.year += factor * rel.year;
+  pc->rels_seen = true;
+}
+
+/* Set PC-> hour, minutes, seconds and nanoseconds members from arguments.  */
+static void
+set_hhmmss (parser_control *pc, long int hour, long int minutes,
+            time_t sec, long int nsec)
+{
+  pc->hour = hour;
+  pc->minutes = minutes;
+  pc->seconds.tv_sec = sec;
+  pc->seconds.tv_nsec = nsec;
+}
+
+%}
+
+/* We want a reentrant parser, even if the TZ manipulation and the calls to
+   localtime and gmtime are not reentrant.  */
+%pure-parser
+%parse-param { parser_control *pc }
+%lex-param { parser_control *pc }
+
+/* This grammar has 20 shift/reduce conflicts. */
+%expect 20
+
+%union
+{
+  long int intval;
+  textint textintval;
+  struct timespec timespec;
+  relative_time rel;
+}
+
+%token tAGO tDST
+
+%token tYEAR_UNIT tMONTH_UNIT tHOUR_UNIT tMINUTE_UNIT tSEC_UNIT
+%token <intval> tDAY_UNIT tDAY_SHIFT
+
+%token <intval> tDAY tDAYZONE tLOCAL_ZONE tMERIDIAN
+%token <intval> tMONTH tORDINAL tZONE
+
+%token <textintval> tSNUMBER tUNUMBER
+%token <timespec> tSDECIMAL_NUMBER tUDECIMAL_NUMBER
+
+%type <intval> o_colon_minutes o_merid
+%type <timespec> seconds signed_seconds unsigned_seconds
+
+%type <rel> relunit relunit_snumber dayshift
+
+%%
+
+spec:
+    timespec
+  | items
+  ;
+
+timespec:
+    '@' seconds
+      {
+        pc->seconds = $2;
+        pc->timespec_seen = true;
+      }
+  ;
+
+items:
+    /* empty */
+  | items item
+  ;
+
+item:
+    time
+      { pc->times_seen++; }
+  | local_zone
+      { pc->local_zones_seen++; }
+  | zone
+      { pc->zones_seen++; }
+  | date
+      { pc->dates_seen++; }
+  | day
+      { pc->days_seen++; }
+  | rel
+  | number
+  | hybrid
+  ;
+
+time:
+    tUNUMBER tMERIDIAN
+      {
+        set_hhmmss (pc, $1.value, 0, 0, 0);
+        pc->meridian = $2;
+      }
+  | tUNUMBER ':' tUNUMBER o_merid
+      {
+        set_hhmmss (pc, $1.value, $3.value, 0, 0);
+        pc->meridian = $4;
+      }
+  | tUNUMBER ':' tUNUMBER tSNUMBER o_colon_minutes
+      {
+        set_hhmmss (pc, $1.value, $3.value, 0, 0);
+        pc->meridian = MER24;
+        pc->zones_seen++;
+        pc->time_zone = time_zone_hhmm (pc, $4, $5);
+      }
+  | tUNUMBER ':' tUNUMBER ':' unsigned_seconds o_merid
+      {
+        set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec);
+        pc->meridian = $6;
+      }
+  | tUNUMBER ':' tUNUMBER ':' unsigned_seconds tSNUMBER o_colon_minutes
+      {
+        set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec);
+        pc->meridian = MER24;
+        pc->zones_seen++;
+        pc->time_zone = time_zone_hhmm (pc, $6, $7);
+      }
+  ;
+
+local_zone:
+    tLOCAL_ZONE
+      {
+        pc->local_isdst = $1;
+        pc->dsts_seen += (0 < $1);
+      }
+  | tLOCAL_ZONE tDST
+      {
+        pc->local_isdst = 1;
+        pc->dsts_seen += (0 < $1) + 1;
+      }
+  ;
+
+zone:
+    tZONE
+      { pc->time_zone = $1; }
+  | tZONE relunit_snumber
+      { pc->time_zone = $1;
+        apply_relative_time (pc, $2, 1); }
+  | tZONE tSNUMBER o_colon_minutes
+      { pc->time_zone = $1 + time_zone_hhmm (pc, $2, $3); }
+  | tDAYZONE
+      { pc->time_zone = $1 + 60; }
+  | tZONE tDST
+      { pc->time_zone = $1 + 60; }
+  ;
+
+day:
+    tDAY
+      {
+        pc->day_ordinal = 0;
+        pc->day_number = $1;
+      }
+  | tDAY ','
+      {
+        pc->day_ordinal = 0;
+        pc->day_number = $1;
+      }
+  | tORDINAL tDAY
+      {
+        pc->day_ordinal = $1;
+        pc->day_number = $2;
+      }
+  | tUNUMBER tDAY
+      {
+        pc->day_ordinal = $1.value;
+        pc->day_number = $2;
+      }
+  ;
+
+date:
+    tUNUMBER '/' tUNUMBER
+      {
+        pc->month = $1.value;
+        pc->day = $3.value;
+      }
+  | tUNUMBER '/' tUNUMBER '/' tUNUMBER
+      {
+        /* Interpret as YYYY/MM/DD if the first value has 4 or more digits,
+           otherwise as MM/DD/YY.
+           The goal in recognizing YYYY/MM/DD is solely to support legacy
+           machine-generated dates like those in an RCS log listing.  If
+           you want portability, use the ISO 8601 format.  */
+        if (4 <= $1.digits)
+          {
+            pc->year = $1;
+            pc->month = $3.value;
+            pc->day = $5.value;
+          }
+        else
+          {
+            pc->month = $1.value;
+            pc->day = $3.value;
+            pc->year = $5;
+          }
+      }
+  | tUNUMBER tSNUMBER tSNUMBER
+      {
+        /* ISO 8601 format.  YYYY-MM-DD.  */
+        pc->year = $1;
+        pc->month = -$2.value;
+        pc->day = -$3.value;
+      }
+  | tUNUMBER tMONTH tSNUMBER
+      {
+        /* e.g. 17-JUN-1992.  */
+        pc->day = $1.value;
+        pc->month = $2;
+        pc->year.value = -$3.value;
+        pc->year.digits = $3.digits;
+      }
+  | tMONTH tSNUMBER tSNUMBER
+      {
+        /* e.g. JUN-17-1992.  */
+        pc->month = $1;
+        pc->day = -$2.value;
+        pc->year.value = -$3.value;
+        pc->year.digits = $3.digits;
+      }
+  | tMONTH tUNUMBER
+      {
+        pc->month = $1;
+        pc->day = $2.value;
+      }
+  | tMONTH tUNUMBER ',' tUNUMBER
+      {
+        pc->month = $1;
+        pc->day = $2.value;
+        pc->year = $4;
+      }
+  | tUNUMBER tMONTH
+      {
+        pc->day = $1.value;
+        pc->month = $2;
+      }
+  | tUNUMBER tMONTH tUNUMBER
+      {
+        pc->day = $1.value;
+        pc->month = $2;
+        pc->year = $3;
+      }
+  ;
+
+rel:
+    relunit tAGO
+      { apply_relative_time (pc, $1, -1); }
+  | relunit
+      { apply_relative_time (pc, $1, 1); }
+  | dayshift
+      { apply_relative_time (pc, $1, 1); }
+  ;
+
+relunit:
+    tORDINAL tYEAR_UNIT
+      { $$ = RELATIVE_TIME_0; $$.year = $1; }
+  | tUNUMBER tYEAR_UNIT
+      { $$ = RELATIVE_TIME_0; $$.year = $1.value; }
+  | tYEAR_UNIT
+      { $$ = RELATIVE_TIME_0; $$.year = 1; }
+  | tORDINAL tMONTH_UNIT
+      { $$ = RELATIVE_TIME_0; $$.month = $1; }
+  | tUNUMBER tMONTH_UNIT
+      { $$ = RELATIVE_TIME_0; $$.month = $1.value; }
+  | tMONTH_UNIT
+      { $$ = RELATIVE_TIME_0; $$.month = 1; }
+  | tORDINAL tDAY_UNIT
+      { $$ = RELATIVE_TIME_0; $$.day = $1 * $2; }
+  | tUNUMBER tDAY_UNIT
+      { $$ = RELATIVE_TIME_0; $$.day = $1.value * $2; }
+  | tDAY_UNIT
+      { $$ = RELATIVE_TIME_0; $$.day = $1; }
+  | tORDINAL tHOUR_UNIT
+      { $$ = RELATIVE_TIME_0; $$.hour = $1; }
+  | tUNUMBER tHOUR_UNIT
+      { $$ = RELATIVE_TIME_0; $$.hour = $1.value; }
+  | tHOUR_UNIT
+      { $$ = RELATIVE_TIME_0; $$.hour = 1; }
+  | tORDINAL tMINUTE_UNIT
+      { $$ = RELATIVE_TIME_0; $$.minutes = $1; }
+  | tUNUMBER tMINUTE_UNIT
+      { $$ = RELATIVE_TIME_0; $$.minutes = $1.value; }
+  | tMINUTE_UNIT
+      { $$ = RELATIVE_TIME_0; $$.minutes = 1; }
+  | tORDINAL tSEC_UNIT
+      { $$ = RELATIVE_TIME_0; $$.seconds = $1; }
+  | tUNUMBER tSEC_UNIT
+      { $$ = RELATIVE_TIME_0; $$.seconds = $1.value; }
+  | tSDECIMAL_NUMBER tSEC_UNIT
+      { $$ = RELATIVE_TIME_0; $$.seconds = $1.tv_sec; $$.ns = $1.tv_nsec; }
+  | tUDECIMAL_NUMBER tSEC_UNIT
+      { $$ = RELATIVE_TIME_0; $$.seconds = $1.tv_sec; $$.ns = $1.tv_nsec; }
+  | tSEC_UNIT
+      { $$ = RELATIVE_TIME_0; $$.seconds = 1; }
+  | relunit_snumber
+  ;
+
+relunit_snumber:
+    tSNUMBER tYEAR_UNIT
+      { $$ = RELATIVE_TIME_0; $$.year = $1.value; }
+  | tSNUMBER tMONTH_UNIT
+      { $$ = RELATIVE_TIME_0; $$.month = $1.value; }
+  | tSNUMBER tDAY_UNIT
+      { $$ = RELATIVE_TIME_0; $$.day = $1.value * $2; }
+  | tSNUMBER tHOUR_UNIT
+      { $$ = RELATIVE_TIME_0; $$.hour = $1.value; }
+  | tSNUMBER tMINUTE_UNIT
+      { $$ = RELATIVE_TIME_0; $$.minutes = $1.value; }
+  | tSNUMBER tSEC_UNIT
+      { $$ = RELATIVE_TIME_0; $$.seconds = $1.value; }
+  ;
+
+dayshift:
+    tDAY_SHIFT
+      { $$ = RELATIVE_TIME_0; $$.day = $1; }
+  ;
+
+seconds: signed_seconds | unsigned_seconds;
+
+signed_seconds:
+    tSDECIMAL_NUMBER
+  | tSNUMBER
+      { $$.tv_sec = $1.value; $$.tv_nsec = 0; }
+  ;
+
+unsigned_seconds:
+    tUDECIMAL_NUMBER
+  | tUNUMBER
+      { $$.tv_sec = $1.value; $$.tv_nsec = 0; }
+  ;
+
+number:
+    tUNUMBER
+      { digits_to_date_time (pc, $1); }
+  ;
+
+hybrid:
+    tUNUMBER relunit_snumber
+      {
+        /* Hybrid all-digit and relative offset, so that we accept e.g.,
+           "YYYYMMDD +N days" as well as "YYYYMMDD N days".  */
+        digits_to_date_time (pc, $1);
+        apply_relative_time (pc, $2, 1);
+      }
+  ;
+
+o_colon_minutes:
+    /* empty */
+      { $$ = -1; }
+  | ':' tUNUMBER
+      { $$ = $2.value; }
+  ;
+
+o_merid:
+    /* empty */
+      { $$ = MER24; }
+  | tMERIDIAN
+      { $$ = $1; }
+  ;
+
+%%
+
+static table const meridian_table[] =
+{
+  { "AM",   tMERIDIAN, MERam },
+  { "A.M.", tMERIDIAN, MERam },
+  { "PM",   tMERIDIAN, MERpm },
+  { "P.M.", tMERIDIAN, MERpm },
+  { NULL, 0, 0 }
+};
+
+static table const dst_table[] =
+{
+  { "DST", tDST, 0 }
+};
+
+static table const month_and_day_table[] =
+{
+  { "JANUARY",  tMONTH,  1 },
+  { "FEBRUARY", tMONTH,  2 },
+  { "MARCH",    tMONTH,  3 },
+  { "APRIL",    tMONTH,  4 },
+  { "MAY",      tMONTH,  5 },
+  { "JUNE",     tMONTH,  6 },
+  { "JULY",     tMONTH,  7 },
+  { "AUGUST",   tMONTH,  8 },
+  { "SEPTEMBER",tMONTH,  9 },
+  { "SEPT",     tMONTH,  9 },
+  { "OCTOBER",  tMONTH, 10 },
+  { "NOVEMBER", tMONTH, 11 },
+  { "DECEMBER", tMONTH, 12 },
+  { "SUNDAY",   tDAY,    0 },
+  { "MONDAY",   tDAY,    1 },
+  { "TUESDAY",  tDAY,    2 },
+  { "TUES",     tDAY,    2 },
+  { "WEDNESDAY",tDAY,    3 },
+  { "WEDNES",   tDAY,    3 },
+  { "THURSDAY", tDAY,    4 },
+  { "THUR",     tDAY,    4 },
+  { "THURS",    tDAY,    4 },
+  { "FRIDAY",   tDAY,    5 },
+  { "SATURDAY", tDAY,    6 },
+  { NULL, 0, 0 }
+};
+
+static table const time_units_table[] =
+{
+  { "YEAR",     tYEAR_UNIT,      1 },
+  { "MONTH",    tMONTH_UNIT,     1 },
+  { "FORTNIGHT",tDAY_UNIT,      14 },
+  { "WEEK",     tDAY_UNIT,       7 },
+  { "DAY",      tDAY_UNIT,       1 },
+  { "HOUR",     tHOUR_UNIT,      1 },
+  { "MINUTE",   tMINUTE_UNIT,    1 },
+  { "MIN",      tMINUTE_UNIT,    1 },
+  { "SECOND",   tSEC_UNIT,       1 },
+  { "SEC",      tSEC_UNIT,       1 },
+  { NULL, 0, 0 }
+};
+
+/* Assorted relative-time words. */
+static table const relative_time_table[] =
+{
+  { "TOMORROW", tDAY_SHIFT,      1 },
+  { "YESTERDAY",tDAY_SHIFT,     -1 },
+  { "TODAY",    tDAY_SHIFT,      0 },
+  { "NOW",      tDAY_SHIFT,      0 },
+  { "LAST",     tORDINAL,       -1 },
+  { "THIS",     tORDINAL,        0 },
+  { "NEXT",     tORDINAL,        1 },
+  { "FIRST",    tORDINAL,        1 },
+/*{ "SECOND",   tORDINAL,        2 }, */
+  { "THIRD",    tORDINAL,        3 },
+  { "FOURTH",   tORDINAL,        4 },
+  { "FIFTH",    tORDINAL,        5 },
+  { "SIXTH",    tORDINAL,        6 },
+  { "SEVENTH",  tORDINAL,        7 },
+  { "EIGHTH",   tORDINAL,        8 },
+  { "NINTH",    tORDINAL,        9 },
+  { "TENTH",    tORDINAL,       10 },
+  { "ELEVENTH", tORDINAL,       11 },
+  { "TWELFTH",  tORDINAL,       12 },
+  { "AGO",      tAGO,            1 },
+  { NULL, 0, 0 }
+};
+
+/* The universal time zone table.  These labels can be used even for
+   time stamps that would not otherwise be valid, e.g., GMT time
+   stamps in London during summer.  */
+static table const universal_time_zone_table[] =
+{
+  { "GMT",      tZONE,     HOUR ( 0) }, /* Greenwich Mean */
+  { "UT",       tZONE,     HOUR ( 0) }, /* Universal (Coordinated) */
+  { "UTC",      tZONE,     HOUR ( 0) },
+  { NULL, 0, 0 }
+};
+
+/* The time zone table.  This table is necessarily incomplete, as time
+   zone abbreviations are ambiguous; e.g. Australians interpret "EST"
+   as Eastern time in Australia, not as US Eastern Standard Time.
+   You cannot rely on getdate to handle arbitrary time zone
+   abbreviations; use numeric abbreviations like `-0500' instead.  */
+static table const time_zone_table[] =
+{
+  { "WET",      tZONE,     HOUR ( 0) }, /* Western European */
+  { "WEST",     tDAYZONE,  HOUR ( 0) }, /* Western European Summer */
+  { "BST",      tDAYZONE,  HOUR ( 0) }, /* British Summer */
+  { "ART",      tZONE,    -HOUR ( 3) }, /* Argentina */
+  { "BRT",      tZONE,    -HOUR ( 3) }, /* Brazil */
+  { "BRST",     tDAYZONE, -HOUR ( 3) }, /* Brazil Summer */
+  { "NST",      tZONE,   -(HOUR ( 3) + 30) },   /* Newfoundland Standard */
+  { "NDT",      tDAYZONE,-(HOUR ( 3) + 30) },   /* Newfoundland Daylight */
+  { "AST",      tZONE,    -HOUR ( 4) }, /* Atlantic Standard */
+  { "ADT",      tDAYZONE, -HOUR ( 4) }, /* Atlantic Daylight */
+  { "CLT",      tZONE,    -HOUR ( 4) }, /* Chile */
+  { "CLST",     tDAYZONE, -HOUR ( 4) }, /* Chile Summer */
+  { "EST",      tZONE,    -HOUR ( 5) }, /* Eastern Standard */
+  { "EDT",      tDAYZONE, -HOUR ( 5) }, /* Eastern Daylight */
+  { "CST",      tZONE,    -HOUR ( 6) }, /* Central Standard */
+  { "CDT",      tDAYZONE, -HOUR ( 6) }, /* Central Daylight */
+  { "MST",      tZONE,    -HOUR ( 7) }, /* Mountain Standard */
+  { "MDT",      tDAYZONE, -HOUR ( 7) }, /* Mountain Daylight */
+  { "PST",      tZONE,    -HOUR ( 8) }, /* Pacific Standard */
+  { "PDT",      tDAYZONE, -HOUR ( 8) }, /* Pacific Daylight */
+  { "AKST",     tZONE,    -HOUR ( 9) }, /* Alaska Standard */
+  { "AKDT",     tDAYZONE, -HOUR ( 9) }, /* Alaska Daylight */
+  { "HST",      tZONE,    -HOUR (10) }, /* Hawaii Standard */
+  { "HAST",     tZONE,    -HOUR (10) }, /* Hawaii-Aleutian Standard */
+  { "HADT",     tDAYZONE, -HOUR (10) }, /* Hawaii-Aleutian Daylight */
+  { "SST",      tZONE,    -HOUR (12) }, /* Samoa Standard */
+  { "WAT",      tZONE,     HOUR ( 1) }, /* West Africa */
+  { "CET",      tZONE,     HOUR ( 1) }, /* Central European */
+  { "CEST",     tDAYZONE,  HOUR ( 1) }, /* Central European Summer */
+  { "MET",      tZONE,     HOUR ( 1) }, /* Middle European */
+  { "MEZ",      tZONE,     HOUR ( 1) }, /* Middle European */
+  { "MEST",     tDAYZONE,  HOUR ( 1) }, /* Middle European Summer */
+  { "MESZ",     tDAYZONE,  HOUR ( 1) }, /* Middle European Summer */
+  { "EET",      tZONE,     HOUR ( 2) }, /* Eastern European */
+  { "EEST",     tDAYZONE,  HOUR ( 2) }, /* Eastern European Summer */
+  { "CAT",      tZONE,     HOUR ( 2) }, /* Central Africa */
+  { "SAST",     tZONE,     HOUR ( 2) }, /* South Africa Standard */
+  { "EAT",      tZONE,     HOUR ( 3) }, /* East Africa */
+  { "MSK",      tZONE,     HOUR ( 3) }, /* Moscow */
+  { "MSD",      tDAYZONE,  HOUR ( 3) }, /* Moscow Daylight */
+  { "IST",      tZONE,    (HOUR ( 5) + 30) },   /* India Standard */
+  { "SGT",      tZONE,     HOUR ( 8) }, /* Singapore */
+  { "KST",      tZONE,     HOUR ( 9) }, /* Korea Standard */
+  { "JST",      tZONE,     HOUR ( 9) }, /* Japan Standard */
+  { "GST",      tZONE,     HOUR (10) }, /* Guam Standard */
+  { "NZST",     tZONE,     HOUR (12) }, /* New Zealand Standard */
+  { "NZDT",     tDAYZONE,  HOUR (12) }, /* New Zealand Daylight */
+  { NULL, 0, 0 }
+};
+
+/* Military time zone table. */
+static table const military_table[] =
+{
+  { "A", tZONE, -HOUR ( 1) },
+  { "B", tZONE, -HOUR ( 2) },
+  { "C", tZONE, -HOUR ( 3) },
+  { "D", tZONE, -HOUR ( 4) },
+  { "E", tZONE, -HOUR ( 5) },
+  { "F", tZONE, -HOUR ( 6) },
+  { "G", tZONE, -HOUR ( 7) },
+  { "H", tZONE, -HOUR ( 8) },
+  { "I", tZONE, -HOUR ( 9) },
+  { "K", tZONE, -HOUR (10) },
+  { "L", tZONE, -HOUR (11) },
+  { "M", tZONE, -HOUR (12) },
+  { "N", tZONE,  HOUR ( 1) },
+  { "O", tZONE,  HOUR ( 2) },
+  { "P", tZONE,  HOUR ( 3) },
+  { "Q", tZONE,  HOUR ( 4) },
+  { "R", tZONE,  HOUR ( 5) },
+  { "S", tZONE,  HOUR ( 6) },
+  { "T", tZONE,  HOUR ( 7) },
+  { "U", tZONE,  HOUR ( 8) },
+  { "V", tZONE,  HOUR ( 9) },
+  { "W", tZONE,  HOUR (10) },
+  { "X", tZONE,  HOUR (11) },
+  { "Y", tZONE,  HOUR (12) },
+  { "Z", tZONE,  HOUR ( 0) },
+  { NULL, 0, 0 }
+};
+
+\f
+
+/* Convert a time zone expressed as HH:MM into an integer count of
+   minutes.  If MM is negative, then S is of the form HHMM and needs
+   to be picked apart; otherwise, S is of the form HH.  As specified in
+   http://www.opengroup.org/susv3xbd/xbd_chap08.html#tag_08_03, allow
+   only valid TZ range, and consider first two digits as hours, if no
+   minutes specified.  */
+
+static long int
+time_zone_hhmm (parser_control *pc, textint s, long int mm)
+{
+  long int n_minutes;
+
+  /* If the length of S is 1 or 2 and no minutes are specified,
+     interpret it as a number of hours.  */
+  if (s.digits <= 2 && mm < 0)
+    s.value *= 100;
+
+  if (mm < 0)
+    n_minutes = (s.value / 100) * 60 + s.value % 100;
+  else
+    n_minutes = s.value * 60 + (s.negative ? -mm : mm);
+
+  /* If the absolute number of minutes is larger than 24 hours,
+     arrange to reject it by incrementing pc->zones_seen.  Thus,
+     we allow only values in the range UTC-24:00 to UTC+24:00.  */
+  if (24 * 60 < abs (n_minutes))
+    pc->zones_seen++;
+
+  return n_minutes;
+}
+
+static int
+to_hour (long int hours, int meridian)
+{
+  switch (meridian)
+    {
+    default: /* Pacify GCC.  */
+    case MER24:
+      return 0 <= hours && hours < 24 ? hours : -1;
+    case MERam:
+      return 0 < hours && hours < 12 ? hours : hours == 12 ? 0 : -1;
+    case MERpm:
+      return 0 < hours && hours < 12 ? hours + 12 : hours == 12 ? 12 : -1;
+    }
+}
+
+static long int
+to_year (textint textyear)
+{
+  long int year = textyear.value;
+
+  if (year < 0)
+    year = -year;
+
+  /* XPG4 suggests that years 00-68 map to 2000-2068, and
+     years 69-99 map to 1969-1999.  */
+  else if (textyear.digits == 2)
+    year += year < 69 ? 2000 : 1900;
+
+  return year;
+}
+
+static table const *
+lookup_zone (parser_control const *pc, char const *name)
+{
+  table const *tp;
+
+  for (tp = universal_time_zone_table; tp->name; tp++)
+    if (strcmp (name, tp->name) == 0)
+      return tp;
+
+  /* Try local zone abbreviations before those in time_zone_table, as
+     the local ones are more likely to be right.  */
+  for (tp = pc->local_time_zone_table; tp->name; tp++)
+    if (strcmp (name, tp->name) == 0)
+      return tp;
+
+  for (tp = time_zone_table; tp->name; tp++)
+    if (strcmp (name, tp->name) == 0)
+      return tp;
+
+  return NULL;
+}
+
+#if ! HAVE_TM_GMTOFF
+/* Yield the difference between *A and *B,
+   measured in seconds, ignoring leap seconds.
+   The body of this function is taken directly from the GNU C Library;
+   see src/strftime.c.  */
+static long int
+tm_diff (struct tm const *a, struct tm const *b)
+{
+  /* Compute intervening leap days correctly even if year is negative.
+     Take care to avoid int overflow in leap day calculations.  */
+  int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3);
+  int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3);
+  int a100 = a4 / 25 - (a4 % 25 < 0);
+  int b100 = b4 / 25 - (b4 % 25 < 0);
+  int a400 = SHR (a100, 2);
+  int b400 = SHR (b100, 2);
+  int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400);
+  long int ayear = a->tm_year;
+  long int years = ayear - b->tm_year;
+  long int days = (365 * years + intervening_leap_days
+                   + (a->tm_yday - b->tm_yday));
+  return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour))
+                + (a->tm_min - b->tm_min))
+          + (a->tm_sec - b->tm_sec));
+}
+#endif /* ! HAVE_TM_GMTOFF */
+
+static table const *
+lookup_word (parser_control const *pc, char *word)
+{
+  char *p;
+  char *q;
+  size_t wordlen;
+  table const *tp;
+  bool period_found;
+  bool abbrev;
+
+  /* Make it uppercase.  */
+  for (p = word; *p; p++)
+    {
+      unsigned char ch = *p;
+      *p = c_toupper (ch);
+    }
+
+  for (tp = meridian_table; tp->name; tp++)
+    if (strcmp (word, tp->name) == 0)
+      return tp;
+
+  /* See if we have an abbreviation for a month. */
+  wordlen = strlen (word);
+  abbrev = wordlen == 3 || (wordlen == 4 && word[3] == '.');
+
+  for (tp = month_and_day_table; tp->name; tp++)
+    if ((abbrev ? strncmp (word, tp->name, 3) : strcmp (word, tp->name)) == 0)
+      return tp;
+
+  if ((tp = lookup_zone (pc, word)))
+    return tp;
+
+  if (strcmp (word, dst_table[0].name) == 0)
+    return dst_table;
+
+  for (tp = time_units_table; tp->name; tp++)
+    if (strcmp (word, tp->name) == 0)
+      return tp;
+
+  /* Strip off any plural and try the units table again. */
+  if (word[wordlen - 1] == 'S')
+    {
+      word[wordlen - 1] = '\0';
+      for (tp = time_units_table; tp->name; tp++)
+        if (strcmp (word, tp->name) == 0)
+          return tp;
+      word[wordlen - 1] = 'S';  /* For "this" in relative_time_table.  */
+    }
+
+  for (tp = relative_time_table; tp->name; tp++)
+    if (strcmp (word, tp->name) == 0)
+      return tp;
+
+  /* Military time zones. */
+  if (wordlen == 1)
+    for (tp = military_table; tp->name; tp++)
+      if (word[0] == tp->name[0])
+        return tp;
+
+  /* Drop out any periods and try the time zone table again. */
+  for (period_found = false, p = q = word; (*p = *q); q++)
+    if (*q == '.')
+      period_found = true;
+    else
+      p++;
+  if (period_found && (tp = lookup_zone (pc, word)))
+    return tp;
+
+  return NULL;
+}
+
+static int
+yylex (YYSTYPE *lvalp, parser_control *pc)
+{
+  unsigned char c;
+  size_t count;
+
+  for (;;)
+    {
+      while (c = *pc->input, c_isspace (c))
+        pc->input++;
+
+      if (ISDIGIT (c) || c == '-' || c == '+')
+        {
+          char const *p;
+          int sign;
+          unsigned long int value;
+          if (c == '-' || c == '+')
+            {
+              sign = c == '-' ? -1 : 1;
+              while (c = *++pc->input, c_isspace (c))
+                continue;
+              if (! ISDIGIT (c))
+                /* skip the '-' sign */
+                continue;
+            }
+          else
+            sign = 0;
+          p = pc->input;
+          for (value = 0; ; value *= 10)
+            {
+              unsigned long int value1 = value + (c - '0');
+              if (value1 < value)
+                return '?';
+              value = value1;
+              c = *++p;
+              if (! ISDIGIT (c))
+                break;
+              if (ULONG_MAX / 10 < value)
+                return '?';
+            }
+          if ((c == '.' || c == ',') && ISDIGIT (p[1]))
+            {
+              time_t s;
+              int ns;
+              int digits;
+              unsigned long int value1;
+
+              /* Check for overflow when converting value to time_t.  */
+              if (sign < 0)
+                {
+                  s = - value;
+                  if (0 < s)
+                    return '?';
+                  value1 = -s;
+                }
+              else
+                {
+                  s = value;
+                  if (s < 0)
+                    return '?';
+                  value1 = s;
+                }
+              if (value != value1)
+                return '?';
+
+              /* Accumulate fraction, to ns precision.  */
+              p++;
+              ns = *p++ - '0';
+              for (digits = 2; digits <= LOG10_BILLION; digits++)
+                {
+                  ns *= 10;
+                  if (ISDIGIT (*p))
+                    ns += *p++ - '0';
+                }
+
+              /* Skip excess digits, truncating toward -Infinity.  */
+              if (sign < 0)
+                for (; ISDIGIT (*p); p++)
+                  if (*p != '0')
+                    {
+                      ns++;
+                      break;
+                    }
+              while (ISDIGIT (*p))
+                p++;
+
+              /* Adjust to the timespec convention, which is that
+                 tv_nsec is always a positive offset even if tv_sec is
+                 negative.  */
+              if (sign < 0 && ns)
+                {
+                  s--;
+                  if (! (s < 0))
+                    return '?';
+                  ns = BILLION - ns;
+                }
+
+              lvalp->timespec.tv_sec = s;
+              lvalp->timespec.tv_nsec = ns;
+              pc->input = p;
+              return sign ? tSDECIMAL_NUMBER : tUDECIMAL_NUMBER;
+            }
+          else
+            {
+              lvalp->textintval.negative = sign < 0;
+              if (sign < 0)
+                {
+                  lvalp->textintval.value = - value;
+                  if (0 < lvalp->textintval.value)
+                    return '?';
+                }
+              else
+                {
+                  lvalp->textintval.value = value;
+                  if (lvalp->textintval.value < 0)
+                    return '?';
+                }
+              lvalp->textintval.digits = p - pc->input;
+              pc->input = p;
+              return sign ? tSNUMBER : tUNUMBER;
+            }
+        }
+
+      if (c_isalpha (c))
+        {
+          char buff[20];
+          char *p = buff;
+          table const *tp;
+
+          do
+            {
+              if (p < buff + sizeof buff - 1)
+                *p++ = c;
+              c = *++pc->input;
+            }
+          while (c_isalpha (c) || c == '.');
+
+          *p = '\0';
+          tp = lookup_word (pc, buff);
+          if (! tp)
+            return '?';
+          lvalp->intval = tp->value;
+          return tp->type;
+        }
+
+      if (c != '(')
+        return *pc->input++;
+      count = 0;
+      do
+        {
+          c = *pc->input++;
+          if (c == '\0')
+            return c;
+          if (c == '(')
+            count++;
+          else if (c == ')')
+            count--;
+        }
+      while (count != 0);
+    }
+}
+
+/* Do nothing if the parser reports an error.  */
+static int
+yyerror (parser_control const *pc _GL_UNUSED,
+         char const *s _GL_UNUSED)
+{
+  return 0;
+}
+
+/* If *TM0 is the old and *TM1 is the new value of a struct tm after
+   passing it to mktime, return true if it's OK that mktime returned T.
+   It's not OK if *TM0 has out-of-range members.  */
+
+static bool
+mktime_ok (struct tm const *tm0, struct tm const *tm1, time_t t)
+{
+  if (t == (time_t) -1)
+    {
+      /* Guard against falsely reporting an error when parsing a time
+         stamp that happens to equal (time_t) -1, on a host that
+         supports such a time stamp.  */
+      tm1 = localtime (&t);
+      if (!tm1)
+        return false;
+    }
+
+  return ! ((tm0->tm_sec ^ tm1->tm_sec)
+            | (tm0->tm_min ^ tm1->tm_min)
+            | (tm0->tm_hour ^ tm1->tm_hour)
+            | (tm0->tm_mday ^ tm1->tm_mday)
+            | (tm0->tm_mon ^ tm1->tm_mon)
+            | (tm0->tm_year ^ tm1->tm_year));
+}
+
+/* A reasonable upper bound for the size of ordinary TZ strings.
+   Use heap allocation if TZ's length exceeds this.  */
+enum { TZBUFSIZE = 100 };
+
+/* Return a copy of TZ, stored in TZBUF if it fits, and heap-allocated
+   otherwise.  */
+static char *
+get_tz (char tzbuf[TZBUFSIZE])
+{
+  char *tz = getenv ("TZ");
+  if (tz)
+    {
+      size_t tzsize = strlen (tz) + 1;
+      tz = (tzsize <= TZBUFSIZE
+            ? memcpy (tzbuf, tz, tzsize)
+            : xmemdup (tz, tzsize));
+    }
+  return tz;
+}
+
+/* Parse a date/time string, storing the resulting time value into *RESULT.
+   The string itself is pointed to by P.  Return true if successful.
+   P can be an incomplete or relative time specification; if so, use
+   *NOW as the basis for the returned time.  */
+bool
+get_date (struct timespec *result, char const *p, struct timespec const *now)
+{
+  time_t Start;
+  long int Start_ns;
+  struct tm const *tmp;
+  struct tm tm;
+  struct tm tm0;
+  parser_control pc;
+  struct timespec gettime_buffer;
+  unsigned char c;
+  bool tz_was_altered = false;
+  char *tz0 = NULL;
+  char tz0buf[TZBUFSIZE];
+  bool ok = true;
+
+  if (! now)
+    {
+      gettime (&gettime_buffer);
+      now = &gettime_buffer;
+    }
+
+  Start = now->tv_sec;
+  Start_ns = now->tv_nsec;
+
+  tmp = localtime (&now->tv_sec);
+  if (! tmp)
+    return false;
+
+  while (c = *p, c_isspace (c))
+    p++;
+
+  if (strncmp (p, "TZ=\"", 4) == 0)
+    {
+      char const *tzbase = p + 4;
+      size_t tzsize = 1;
+      char const *s;
+
+      for (s = tzbase; *s; s++, tzsize++)
+        if (*s == '\\')
+          {
+            s++;
+            if (! (*s == '\\' || *s == '"'))
+              break;
+          }
+        else if (*s == '"')
+          {
+            char *z;
+            char *tz1;
+            char tz1buf[TZBUFSIZE];
+            bool large_tz = TZBUFSIZE < tzsize;
+            bool setenv_ok;
+            /* Free tz0, in case this is the 2nd or subsequent time through. */
+            free (tz0);
+            tz0 = get_tz (tz0buf);
+            z = tz1 = large_tz ? xmalloc (tzsize) : tz1buf;
+            for (s = tzbase; *s != '"'; s++)
+              *z++ = *(s += *s == '\\');
+            *z = '\0';
+            setenv_ok = setenv ("TZ", tz1, 1) == 0;
+            if (large_tz)
+              free (tz1);
+            if (!setenv_ok)
+              goto fail;
+            tz_was_altered = true;
+            p = s + 1;
+          }
+    }
+
+  /* As documented, be careful to treat the empty string just like
+     a date string of "0".  Without this, an empty string would be
+     declared invalid when parsed during a DST transition.  */
+  if (*p == '\0')
+    p = "0";
+
+  pc.input = p;
+  pc.year.value = tmp->tm_year;
+  pc.year.value += TM_YEAR_BASE;
+  pc.year.digits = 0;
+  pc.month = tmp->tm_mon + 1;
+  pc.day = tmp->tm_mday;
+  pc.hour = tmp->tm_hour;
+  pc.minutes = tmp->tm_min;
+  pc.seconds.tv_sec = tmp->tm_sec;
+  pc.seconds.tv_nsec = Start_ns;
+  tm.tm_isdst = tmp->tm_isdst;
+
+  pc.meridian = MER24;
+  pc.rel = RELATIVE_TIME_0;
+  pc.timespec_seen = false;
+  pc.rels_seen = false;
+  pc.dates_seen = 0;
+  pc.days_seen = 0;
+  pc.times_seen = 0;
+  pc.local_zones_seen = 0;
+  pc.dsts_seen = 0;
+  pc.zones_seen = 0;
+
+#if HAVE_STRUCT_TM_TM_ZONE
+  pc.local_time_zone_table[0].name = tmp->tm_zone;
+  pc.local_time_zone_table[0].type = tLOCAL_ZONE;
+  pc.local_time_zone_table[0].value = tmp->tm_isdst;
+  pc.local_time_zone_table[1].name = NULL;
+
+  /* Probe the names used in the next three calendar quarters, looking
+     for a tm_isdst different from the one we already have.  */
+  {
+    int quarter;
+    for (quarter = 1; quarter <= 3; quarter++)
+      {
+        time_t probe = Start + quarter * (90 * 24 * 60 * 60);
+        struct tm const *probe_tm = localtime (&probe);
+        if (probe_tm && probe_tm->tm_zone
+            && probe_tm->tm_isdst != pc.local_time_zone_table[0].value)
+          {
+              {
+                pc.local_time_zone_table[1].name = probe_tm->tm_zone;
+                pc.local_time_zone_table[1].type = tLOCAL_ZONE;
+                pc.local_time_zone_table[1].value = probe_tm->tm_isdst;
+                pc.local_time_zone_table[2].name = NULL;
+              }
+            break;
+          }
+      }
+  }
+#else
+#if HAVE_TZNAME
+  {
+# if !HAVE_DECL_TZNAME
+    extern char *tzname[];
+# endif
+    int i;
+    for (i = 0; i < 2; i++)
+      {
+        pc.local_time_zone_table[i].name = tzname[i];
+        pc.local_time_zone_table[i].type = tLOCAL_ZONE;
+        pc.local_time_zone_table[i].value = i;
+      }
+    pc.local_time_zone_table[i].name = NULL;
+  }
+#else
+  pc.local_time_zone_table[0].name = NULL;
+#endif
+#endif
+
+  if (pc.local_time_zone_table[0].name && pc.local_time_zone_table[1].name
+      && ! strcmp (pc.local_time_zone_table[0].name,
+                   pc.local_time_zone_table[1].name))
+    {
+      /* This locale uses the same abbrevation for standard and
+         daylight times.  So if we see that abbreviation, we don't
+         know whether it's daylight time.  */
+      pc.local_time_zone_table[0].value = -1;
+      pc.local_time_zone_table[1].name = NULL;
+    }
+
+  if (yyparse (&pc) != 0)
+    goto fail;
+
+  if (pc.timespec_seen)
+    *result = pc.seconds;
+  else
+    {
+      if (1 < (pc.times_seen | pc.dates_seen | pc.days_seen | pc.dsts_seen
+               | (pc.local_zones_seen + pc.zones_seen)))
+        goto fail;
+
+      tm.tm_year = to_year (pc.year) - TM_YEAR_BASE;
+      tm.tm_mon = pc.month - 1;
+      tm.tm_mday = pc.day;
+      if (pc.times_seen || (pc.rels_seen && ! pc.dates_seen && ! pc.days_seen))
+        {
+          tm.tm_hour = to_hour (pc.hour, pc.meridian);
+          if (tm.tm_hour < 0)
+            goto fail;
+          tm.tm_min = pc.minutes;
+          tm.tm_sec = pc.seconds.tv_sec;
+        }
+      else
+        {
+          tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
+          pc.seconds.tv_nsec = 0;
+        }
+
+      /* Let mktime deduce tm_isdst if we have an absolute time stamp.  */
+      if (pc.dates_seen | pc.days_seen | pc.times_seen)
+        tm.tm_isdst = -1;
+
+      /* But if the input explicitly specifies local time with or without
+         DST, give mktime that information.  */
+      if (pc.local_zones_seen)
+        tm.tm_isdst = pc.local_isdst;
+
+      tm0 = tm;
+
+      Start = mktime (&tm);
+
+      if (! mktime_ok (&tm0, &tm, Start))
+        {
+          if (! pc.zones_seen)
+            goto fail;
+          else
+            {
+              /* Guard against falsely reporting errors near the time_t
+                 boundaries when parsing times in other time zones.  For
+                 example, suppose the input string "1969-12-31 23:00:00 -0100",
+                 the current time zone is 8 hours ahead of UTC, and the min
+                 time_t value is 1970-01-01 00:00:00 UTC.  Then the min
+                 localtime value is 1970-01-01 08:00:00, and mktime will
+                 therefore fail on 1969-12-31 23:00:00.  To work around the
+                 problem, set the time zone to 1 hour behind UTC temporarily
+                 by setting TZ="XXX1:00" and try mktime again.  */
+
+              long int time_zone = pc.time_zone;
+              long int abs_time_zone = time_zone < 0 ? - time_zone : time_zone;
+              long int abs_time_zone_hour = abs_time_zone / 60;
+              int abs_time_zone_min = abs_time_zone % 60;
+              char tz1buf[sizeof "XXX+0:00"
+                          + sizeof pc.time_zone * CHAR_BIT / 3];
+              if (!tz_was_altered)
+                tz0 = get_tz (tz0buf);
+              sprintf (tz1buf, "XXX%s%ld:%02d", "-" + (time_zone < 0),
+                       abs_time_zone_hour, abs_time_zone_min);
+              if (setenv ("TZ", tz1buf, 1) != 0)
+                goto fail;
+              tz_was_altered = true;
+              tm = tm0;
+              Start = mktime (&tm);
+              if (! mktime_ok (&tm0, &tm, Start))
+                goto fail;
+            }
+        }
+
+      if (pc.days_seen && ! pc.dates_seen)
+        {
+          tm.tm_mday += ((pc.day_number - tm.tm_wday + 7) % 7
+                         + 7 * (pc.day_ordinal
+                                - (0 < pc.day_ordinal
+                                   && tm.tm_wday != pc.day_number)));
+          tm.tm_isdst = -1;
+          Start = mktime (&tm);
+          if (Start == (time_t) -1)
+            goto fail;
+        }
+
+      /* Add relative date.  */
+      if (pc.rel.year | pc.rel.month | pc.rel.day)
+        {
+          int year = tm.tm_year + pc.rel.year;
+          int month = tm.tm_mon + pc.rel.month;
+          int day = tm.tm_mday + pc.rel.day;
+          if (((year < tm.tm_year) ^ (pc.rel.year < 0))
+              | ((month < tm.tm_mon) ^ (pc.rel.month < 0))
+              | ((day < tm.tm_mday) ^ (pc.rel.day < 0)))
+            goto fail;
+          tm.tm_year = year;
+          tm.tm_mon = month;
+          tm.tm_mday = day;
+          tm.tm_hour = tm0.tm_hour;
+          tm.tm_min = tm0.tm_min;
+          tm.tm_sec = tm0.tm_sec;
+          tm.tm_isdst = tm0.tm_isdst;
+          Start = mktime (&tm);
+          if (Start == (time_t) -1)
+            goto fail;
+        }
+
+      /* The only "output" of this if-block is an updated Start value,
+         so this block must follow others that clobber Start.  */
+      if (pc.zones_seen)
+        {
+          long int delta = pc.time_zone * 60;
+          time_t t1;
+#ifdef HAVE_TM_GMTOFF
+          delta -= tm.tm_gmtoff;
+#else
+          time_t t = Start;
+          struct tm const *gmt = gmtime (&t);
+          if (! gmt)
+            goto fail;
+          delta -= tm_diff (&tm, gmt);
+#endif
+          t1 = Start - delta;
+          if ((Start < t1) != (delta < 0))
+            goto fail;  /* time_t overflow */
+          Start = t1;
+        }
+
+      /* Add relative hours, minutes, and seconds.  On hosts that support
+         leap seconds, ignore the possibility of leap seconds; e.g.,
+         "+ 10 minutes" adds 600 seconds, even if one of them is a
+         leap second.  Typically this is not what the user wants, but it's
+         too hard to do it the other way, because the time zone indicator
+         must be applied before relative times, and if mktime is applied
+         again the time zone will be lost.  */
+      {
+        long int sum_ns = pc.seconds.tv_nsec + pc.rel.ns;
+        long int normalized_ns = (sum_ns % BILLION + BILLION) % BILLION;
+        time_t t0 = Start;
+        long int d1 = 60 * 60 * pc.rel.hour;
+        time_t t1 = t0 + d1;
+        long int d2 = 60 * pc.rel.minutes;
+        time_t t2 = t1 + d2;
+        long_time_t d3 = pc.rel.seconds;
+        long_time_t t3 = t2 + d3;
+        long int d4 = (sum_ns - normalized_ns) / BILLION;
+        long_time_t t4 = t3 + d4;
+        time_t t5 = t4;
+
+        if ((d1 / (60 * 60) ^ pc.rel.hour)
+            | (d2 / 60 ^ pc.rel.minutes)
+            | ((t1 < t0) ^ (d1 < 0))
+            | ((t2 < t1) ^ (d2 < 0))
+            | ((t3 < t2) ^ (d3 < 0))
+            | ((t4 < t3) ^ (d4 < 0))
+            | (t5 != t4))
+          goto fail;
+
+        result->tv_sec = t5;
+        result->tv_nsec = normalized_ns;
+      }
+    }
+
+  goto done;
+
+ fail:
+  ok = false;
+ done:
+  if (tz_was_altered)
+    ok &= (tz0 ? setenv ("TZ", tz0, 1) : unsetenv ("TZ")) == 0;
+  if (tz0 != tz0buf)
+    free (tz0);
+  return ok;
+}
+
+#if TEST
+
+int
+main (int ac, char **av)
+{
+  char buff[BUFSIZ];
+
+  printf ("Enter date, or blank line to exit.\n\t> ");
+  fflush (stdout);
+
+  buff[BUFSIZ - 1] = '\0';
+  while (fgets (buff, BUFSIZ - 1, stdin) && buff[0])
+    {
+      struct timespec d;
+      struct tm const *tm;
+      if (! get_date (&d, buff, NULL))
+        printf ("Bad format - couldn't convert.\n");
+      else if (! (tm = localtime (&d.tv_sec)))
+        {
+          long int sec = d.tv_sec;
+          printf ("localtime (%ld) failed\n", sec);
+        }
+      else
+        {
+          int ns = d.tv_nsec;
+          printf ("%04ld-%02d-%02d %02d:%02d:%02d.%09d\n",
+                  tm->tm_year + 1900L, tm->tm_mon + 1, tm->tm_mday,
+                  tm->tm_hour, tm->tm_min, tm->tm_sec, ns);
+        }
+      printf ("\t> ");
+      fflush (stdout);
+    }
+  return 0;
+}
+#endif /* TEST */
diff --git a/gnu/getdelim.c b/gnu/getdelim.c
new file mode 100644 (file)
index 0000000..f9b0cee
--- /dev/null
@@ -0,0 +1,139 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* getdelim.c --- Implementation of replacement getdelim function.
+   Copyright (C) 1994, 1996, 1997, 1998, 2001, 2003, 2005, 2006, 2007, 2008,
+   2009, 2010 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, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA.  */
+
+/* Ported from glibc by Simon Josefsson. */
+
+#include <config.h>
+
+/* Don't use __attribute__ __nonnull__ in this compilation unit.  Otherwise gcc
+   optimizes away the lineptr == NULL || n == NULL || fp == NULL tests below.  */
+#define _GL_ARG_NONNULL(params)
+
+#include <stdio.h>
+
+#include <limits.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#ifndef SSIZE_MAX
+# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2))
+#endif
+
+#if USE_UNLOCKED_IO
+# include "unlocked-io.h"
+# define getc_maybe_unlocked(fp)        getc(fp)
+#elif !HAVE_FLOCKFILE || !HAVE_FUNLOCKFILE || !HAVE_DECL_GETC_UNLOCKED
+# undef flockfile
+# undef funlockfile
+# define flockfile(x) ((void) 0)
+# define funlockfile(x) ((void) 0)
+# define getc_maybe_unlocked(fp)        getc(fp)
+#else
+# define getc_maybe_unlocked(fp)        getc_unlocked(fp)
+#endif
+
+/* Read up to (and including) a DELIMITER from FP into *LINEPTR (and
+   NUL-terminate it).  *LINEPTR is a pointer returned from malloc (or
+   NULL), pointing to *N characters of space.  It is realloc'ed as
+   necessary.  Returns the number of characters read (not including
+   the null terminator), or -1 on error or EOF.  */
+
+ssize_t
+getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp)
+{
+  ssize_t result;
+  size_t cur_len = 0;
+
+  if (lineptr == NULL || n == NULL || fp == NULL)
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  flockfile (fp);
+
+  if (*lineptr == NULL || *n == 0)
+    {
+      char *new_lineptr;
+      *n = 120;
+      new_lineptr = (char *) realloc (*lineptr, *n);
+      if (new_lineptr == NULL)
+        {
+          result = -1;
+          goto unlock_return;
+        }
+      *lineptr = new_lineptr;
+    }
+
+  for (;;)
+    {
+      int i;
+
+      i = getc_maybe_unlocked (fp);
+      if (i == EOF)
+        {
+          result = -1;
+          break;
+        }
+
+      /* Make enough space for len+1 (for final NUL) bytes.  */
+      if (cur_len + 1 >= *n)
+        {
+          size_t needed_max =
+            SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX;
+          size_t needed = 2 * *n + 1;   /* Be generous. */
+          char *new_lineptr;
+
+          if (needed_max < needed)
+            needed = needed_max;
+          if (cur_len + 1 >= needed)
+            {
+              result = -1;
+              errno = EOVERFLOW;
+              goto unlock_return;
+            }
+
+          new_lineptr = (char *) realloc (*lineptr, needed);
+          if (new_lineptr == NULL)
+            {
+              result = -1;
+              goto unlock_return;
+            }
+
+          *lineptr = new_lineptr;
+          *n = needed;
+        }
+
+      (*lineptr)[cur_len] = i;
+      cur_len++;
+
+      if (i == delimiter)
+        break;
+    }
+  (*lineptr)[cur_len] = '\0';
+  result = cur_len ? cur_len : result;
+
+ unlock_return:
+  funlockfile (fp); /* doesn't set errno */
+
+  return result;
+}
diff --git a/gnu/getdtablesize.c b/gnu/getdtablesize.c
new file mode 100644 (file)
index 0000000..b0af77b
--- /dev/null
@@ -0,0 +1,65 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* getdtablesize() function for platforms that don't have it.
+   Copyright (C) 2008-2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+   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>
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+#include <stdio.h>
+
+/* Cache for the previous getdtablesize () result.  */
+static int dtablesize;
+
+int
+getdtablesize (void)
+{
+  if (dtablesize == 0)
+    {
+      /* We are looking for the number N such that the valid file descriptors
+         are 0..N-1.  It can be obtained through a loop as follows:
+           {
+             int fd;
+             for (fd = 3; fd < 65536; fd++)
+               if (dup2 (0, fd) == -1)
+                 break;
+             return fd;
+           }
+         On Windows XP, the result is 2048.
+         The drawback of this loop is that it allocates memory for a libc
+         internal array that is never freed.
+
+         The number N can also be obtained as the upper bound for
+         _getmaxstdio ().  _getmaxstdio () returns the maximum number of open
+         FILE objects.  The sanity check in _setmaxstdio reveals the maximum
+         number of file descriptors.  This too allocates memory, but it is
+         freed when we call _setmaxstdio with the original value.  */
+      int orig_max_stdio = _getmaxstdio ();
+      unsigned int bound;
+      for (bound = 0x10000; _setmaxstdio (bound) < 0; bound = bound / 2)
+        ;
+      _setmaxstdio (orig_max_stdio);
+      dtablesize = bound;
+    }
+  return dtablesize;
+}
+
+#endif
diff --git a/gnu/getline.c b/gnu/getline.c
new file mode 100644 (file)
index 0000000..3e5653e
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* getline.c --- Implementation of replacement getline function.
+   Copyright (C) 2005, 2006, 2007, 2009, 2010 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, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA.  */
+
+/* Written by Simon Josefsson. */
+
+#include <config.h>
+
+#include <stdio.h>
+
+ssize_t
+getline (char **lineptr, size_t *n, FILE *stream)
+{
+  return getdelim (lineptr, n, '\n', stream);
+}
diff --git a/gnu/getopt.c b/gnu/getopt.c
new file mode 100644 (file)
index 0000000..0c13f23
--- /dev/null
@@ -0,0 +1,1191 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Getopt for GNU.
+   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-2010 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
+   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/>.  */
+\f
+#ifndef _LIBC
+# include <config.h>
+#endif
+
+#include "getopt.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "gettext.h"
+# define _(msgid) gettext (msgid)
+#endif
+
+#if defined _LIBC && defined USE_IN_LIBIO
+# include <wchar.h>
+#endif
+
+#ifndef attribute_hidden
+# define attribute_hidden
+#endif
+
+/* 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,
+   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
+   disables permutation.
+   Then the behavior is completely standard.
+
+   GNU application programs can use a third alternative mode in which
+   they can distinguish the relative order of options and other arguments.  */
+
+#include "getopt_int.h"
+
+/* 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,
+   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'.
+
+   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
+   non-option elements that the caller should itself scan.
+
+   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.  */
+int optind = 1;
+
+/* Callers store zero here to inhibit the error message
+   for unrecognized options.  */
+
+int opterr = 1;
+
+/* Set to an option character which was unrecognized.
+   This must be initialized on some systems to avoid linking in the
+   system's own getopt implementation.  */
+
+int optopt = '?';
+
+/* Keep a global copy of all internal members of getopt_data.  */
+
+static struct _getopt_data getopt_data;
+
+\f
+#if defined HAVE_DECL_GETENV && !HAVE_DECL_GETENV
+extern char *getenv ();
+#endif
+\f
+#ifdef _LIBC
+/* Stored original parameters.
+   XXX This is no good solution.  We should rather copy the args so
+   that we can compare them later.  But we must not use malloc(3).  */
+extern int __libc_argc;
+extern char **__libc_argv;
+
+/* Bash 2.0 gives us an environment variable containing flags
+   indicating ARGV elements that should not be considered arguments.  */
+
+# ifdef USE_NONOPTION_FLAGS
+/* Defined in getopt_init.c  */
+extern char *__getopt_nonoption_flags;
+# endif
+
+# ifdef USE_NONOPTION_FLAGS
+#  define SWAP_FLAGS(ch1, ch2) \
+  if (d->__nonoption_flags_len > 0)                                           \
+    {                                                                         \
+      char __tmp = __getopt_nonoption_flags[ch1];                             \
+      __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2];          \
+      __getopt_nonoption_flags[ch2] = __tmp;                                  \
+    }
+# else
+#  define SWAP_FLAGS(ch1, ch2)
+# endif
+#else   /* !_LIBC */
+# define SWAP_FLAGS(ch1, ch2)
+#endif  /* _LIBC */
+
+/* Exchange two adjacent subsequences of ARGV.
+   One subsequence is elements [first_nonopt,last_nonopt)
+   which contains all the non-options that have been skipped so far.
+   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
+   the new indices of the non-options in ARGV after they are moved.  */
+
+static void
+exchange (char **argv, struct _getopt_data *d)
+{
+  int bottom = d->__first_nonopt;
+  int middle = d->__last_nonopt;
+  int top = d->optind;
+  char *tem;
+
+  /* Exchange the shorter segment with the far end of the longer segment.
+     That puts the shorter segment into the right place.
+     It leaves the longer segment in the right place overall,
+     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'
+     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)
+    {
+      /* We must extend the array.  The user plays games with us and
+         presents new arguments.  */
+      char *new_str = malloc (top + 1);
+      if (new_str == NULL)
+        d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0;
+      else
+        {
+          memset (__mempcpy (new_str, __getopt_nonoption_flags,
+                             d->__nonoption_flags_max_len),
+                  '\0', top + 1 - d->__nonoption_flags_max_len);
+          d->__nonoption_flags_max_len = top + 1;
+          __getopt_nonoption_flags = new_str;
+        }
+    }
+#endif
+
+  while (top > middle && middle > bottom)
+    {
+      if (top - middle > middle - bottom)
+        {
+          /* Bottom segment is the short one.  */
+          int len = middle - bottom;
+          register int i;
+
+          /* Swap it with the top part of the top segment.  */
+          for (i = 0; i < len; i++)
+            {
+              tem = argv[bottom + i];
+              argv[bottom + i] = argv[top - (middle - bottom) + i];
+              argv[top - (middle - bottom) + i] = tem;
+              SWAP_FLAGS (bottom + i, top - (middle - bottom) + i);
+            }
+          /* Exclude the moved bottom segment from further swapping.  */
+          top -= len;
+        }
+      else
+        {
+          /* Top segment is the short one.  */
+          int len = top - middle;
+          register int i;
+
+          /* Swap it with the bottom part of the bottom segment.  */
+          for (i = 0; i < len; i++)
+            {
+              tem = argv[bottom + i];
+              argv[bottom + i] = argv[middle + i];
+              argv[middle + i] = tem;
+              SWAP_FLAGS (bottom + i, middle + i);
+            }
+          /* Exclude the moved top segment from further swapping.  */
+          bottom += len;
+        }
+    }
+
+  /* Update records for the slots the non-options now occupy.  */
+
+  d->__first_nonopt += (d->optind - d->__last_nonopt);
+  d->__last_nonopt = d->optind;
+}
+
+/* Initialize the internal data when the first call is made.  */
+
+static const char *
+_getopt_initialize (int argc _GL_UNUSED,
+                    char **argv _GL_UNUSED, const char *optstring,
+                    struct _getopt_data *d, int posixly_correct)
+{
+  /* Start processing options with ARGV-element 1 (since ARGV-element 0
+     is the program name); the sequence of previously skipped
+     non-option ARGV-elements is empty.  */
+
+  d->__first_nonopt = d->__last_nonopt = d->optind;
+
+  d->__nextchar = NULL;
+
+  d->__posixly_correct = posixly_correct || !!getenv ("POSIXLY_CORRECT");
+
+  /* Determine how to handle the ordering of options and nonoptions.  */
+
+  if (optstring[0] == '-')
+    {
+      d->__ordering = RETURN_IN_ORDER;
+      ++optstring;
+    }
+  else if (optstring[0] == '+')
+    {
+      d->__ordering = REQUIRE_ORDER;
+      ++optstring;
+    }
+  else if (d->__posixly_correct)
+    d->__ordering = REQUIRE_ORDER;
+  else
+    d->__ordering = PERMUTE;
+
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
+  if (!d->__posixly_correct
+      && argc == __libc_argc && argv == __libc_argv)
+    {
+      if (d->__nonoption_flags_max_len == 0)
+        {
+          if (__getopt_nonoption_flags == NULL
+              || __getopt_nonoption_flags[0] == '\0')
+            d->__nonoption_flags_max_len = -1;
+          else
+            {
+              const char *orig_str = __getopt_nonoption_flags;
+              int len = d->__nonoption_flags_max_len = strlen (orig_str);
+              if (d->__nonoption_flags_max_len < argc)
+                d->__nonoption_flags_max_len = argc;
+              __getopt_nonoption_flags =
+                (char *) malloc (d->__nonoption_flags_max_len);
+              if (__getopt_nonoption_flags == NULL)
+                d->__nonoption_flags_max_len = -1;
+              else
+                memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
+                        '\0', d->__nonoption_flags_max_len - len);
+            }
+        }
+      d->__nonoption_flags_len = d->__nonoption_flags_max_len;
+    }
+  else
+    d->__nonoption_flags_len = 0;
+#endif
+
+  return optstring;
+}
+\f
+/* Scan elements of ARGV (whose length is ARGC) for option characters
+   given in OPTSTRING.
+
+   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'
+   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
+   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
+   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
+   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
+   wants an optional arg; if there is text in the current ARGV-element,
+   it is returned in `optarg', otherwise `optarg' is set to zero.
+
+   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 `-'.
+   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.
+
+   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
+   element containing a name which is zero.
+
+   LONGIND returns the index in LONGOPT of the long-named option found.
+   It is only valid when a long-named option has been found by the most
+   recent call.
+
+   If LONG_ONLY is nonzero, '-' as well as '--' can introduce
+   long-named options.  */
+
+int
+_getopt_internal_r (int argc, char **argv, const char *optstring,
+                    const struct option *longopts, int *longind,
+                    int long_only, struct _getopt_data *d, int posixly_correct)
+{
+  int print_errors = d->opterr;
+  if (optstring[0] == ':')
+    print_errors = 0;
+
+  if (argc < 1)
+    return -1;
+
+  d->optarg = NULL;
+
+  if (d->optind == 0 || !d->__initialized)
+    {
+      if (d->optind == 0)
+        d->optind = 1;  /* Don't scan ARGV[0], the program name.  */
+      optstring = _getopt_initialize (argc, argv, optstring, d,
+                                      posixly_correct);
+      d->__initialized = 1;
+    }
+
+  /* Test whether ARGV[optind] points to a non-option argument.
+     Either it does not have option syntax, or there is an environment flag
+     from the shell indicating it is not an option.  The later information
+     is only used when the used in the GNU libc.  */
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
+# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0' \
+                      || (d->optind < d->__nonoption_flags_len                \
+                          && __getopt_nonoption_flags[d->optind] == '1'))
+#else
+# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0')
+#endif
+
+  if (d->__nextchar == NULL || *d->__nextchar == '\0')
+    {
+      /* Advance to the next ARGV-element.  */
+
+      /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
+         moved back by the user (who may also have changed the arguments).  */
+      if (d->__last_nonopt > d->optind)
+        d->__last_nonopt = d->optind;
+      if (d->__first_nonopt > d->optind)
+        d->__first_nonopt = d->optind;
+
+      if (d->__ordering == PERMUTE)
+        {
+          /* If we have just processed some options following some non-options,
+             exchange them so that the options come first.  */
+
+          if (d->__first_nonopt != d->__last_nonopt
+              && d->__last_nonopt != d->optind)
+            exchange ((char **) argv, d);
+          else if (d->__last_nonopt != d->optind)
+            d->__first_nonopt = d->optind;
+
+          /* Skip any additional non-options
+             and extend the range of non-options previously skipped.  */
+
+          while (d->optind < argc && NONOPTION_P)
+            d->optind++;
+          d->__last_nonopt = d->optind;
+        }
+
+      /* 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.  */
+
+      if (d->optind != argc && !strcmp (argv[d->optind], "--"))
+        {
+          d->optind++;
+
+          if (d->__first_nonopt != d->__last_nonopt
+              && d->__last_nonopt != d->optind)
+            exchange ((char **) argv, d);
+          else if (d->__first_nonopt == d->__last_nonopt)
+            d->__first_nonopt = d->optind;
+          d->__last_nonopt = argc;
+
+          d->optind = argc;
+        }
+
+      /* If we have done all the ARGV-elements, stop the scan
+         and back over any non-options that we skipped and permuted.  */
+
+      if (d->optind == argc)
+        {
+          /* Set the next-arg-index to point at the non-options
+             that we previously skipped, so the caller will digest them.  */
+          if (d->__first_nonopt != d->__last_nonopt)
+            d->optind = d->__first_nonopt;
+          return -1;
+        }
+
+      /* If we have come to a non-option and did not permute it,
+         either stop the scan or describe it to the caller and pass it by.  */
+
+      if (NONOPTION_P)
+        {
+          if (d->__ordering == REQUIRE_ORDER)
+            return -1;
+          d->optarg = argv[d->optind++];
+          return 1;
+        }
+
+      /* We have found another option-ARGV-element.
+         Skip the initial punctuation.  */
+
+      d->__nextchar = (argv[d->optind] + 1
+                  + (longopts != NULL && argv[d->optind][1] == '-'));
+    }
+
+  /* Decode the current option-ARGV-element.  */
+
+  /* Check whether the ARGV-element is a long option.
+
+     If long_only and the ARGV-element has the form "-f", where f is
+     a valid short option, don't consider it an abbreviated form of
+     a long option that starts with f.  Otherwise there would be no
+     way to give the -f short option.
+
+     On the other hand, if there's a long option "fubar" and
+     the ARGV-element is "-fu", do consider that an abbreviation of
+     the long option, just like "--fu", and not "-f" with arg "u".
+
+     This distinction seems to be the most useful approach.  */
+
+  if (longopts != NULL
+      && (argv[d->optind][1] == '-'
+          || (long_only && (argv[d->optind][2]
+                            || !strchr (optstring, argv[d->optind][1])))))
+    {
+      char *nameend;
+      const struct option *p;
+      const struct option *pfound = NULL;
+      int exact = 0;
+      int ambig = 0;
+      int indfound = -1;
+      int option_index;
+
+      for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++)
+        /* Do nothing.  */ ;
+
+      /* Test all long options for either exact match
+         or abbreviated matches.  */
+      for (p = longopts, option_index = 0; p->name; p++, option_index++)
+        if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar))
+          {
+            if ((unsigned int) (nameend - d->__nextchar)
+                == (unsigned int) strlen (p->name))
+              {
+                /* Exact match found.  */
+                pfound = p;
+                indfound = option_index;
+                exact = 1;
+                break;
+              }
+            else if (pfound == NULL)
+              {
+                /* First nonexact match found.  */
+                pfound = p;
+                indfound = option_index;
+              }
+            else if (long_only
+                     || pfound->has_arg != p->has_arg
+                     || pfound->flag != p->flag
+                     || pfound->val != p->val)
+              /* Second or later nonexact match found.  */
+              ambig = 1;
+          }
+
+      if (ambig && !exact)
+        {
+          if (print_errors)
+            {
+#if defined _LIBC && defined USE_IN_LIBIO
+              char *buf;
+
+              if (__asprintf (&buf, _("%s: option '%s' is ambiguous\n"),
+                              argv[0], argv[d->optind]) >= 0)
+                {
+                  _IO_flockfile (stderr);
+
+                  int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                  ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+                  __fxprintf (NULL, "%s", buf);
+
+                  ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                  _IO_funlockfile (stderr);
+
+                  free (buf);
+                }
+#else
+              fprintf (stderr, _("%s: option '%s' is ambiguous\n"),
+                       argv[0], argv[d->optind]);
+#endif
+            }
+          d->__nextchar += strlen (d->__nextchar);
+          d->optind++;
+          d->optopt = 0;
+          return '?';
+        }
+
+      if (pfound != NULL)
+        {
+          option_index = indfound;
+          d->optind++;
+          if (*nameend)
+            {
+              /* Don't test has_arg with >, because some C compilers don't
+                 allow it to be used on enums.  */
+              if (pfound->has_arg)
+                d->optarg = nameend + 1;
+              else
+                {
+                  if (print_errors)
+                    {
+#if defined _LIBC && defined USE_IN_LIBIO
+                      char *buf;
+                      int n;
+#endif
+
+                      if (argv[d->optind - 1][1] == '-')
+                        {
+                          /* --option */
+#if defined _LIBC && defined USE_IN_LIBIO
+                          n = __asprintf (&buf, _("\
+%s: option '--%s' doesn't allow an argument\n"),
+                                          argv[0], pfound->name);
+#else
+                          fprintf (stderr, _("\
+%s: option '--%s' doesn't allow an argument\n"),
+                                   argv[0], pfound->name);
+#endif
+                        }
+                      else
+                        {
+                          /* +option or -option */
+#if defined _LIBC && defined USE_IN_LIBIO
+                          n = __asprintf (&buf, _("\
+%s: option '%c%s' doesn't allow an argument\n"),
+                                          argv[0], argv[d->optind - 1][0],
+                                          pfound->name);
+#else
+                          fprintf (stderr, _("\
+%s: option '%c%s' doesn't allow an argument\n"),
+                                   argv[0], argv[d->optind - 1][0],
+                                   pfound->name);
+#endif
+                        }
+
+#if defined _LIBC && defined USE_IN_LIBIO
+                      if (n >= 0)
+                        {
+                          _IO_flockfile (stderr);
+
+                          int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                          ((_IO_FILE *) stderr)->_flags2
+                            |= _IO_FLAGS2_NOTCANCEL;
+
+                          __fxprintf (NULL, "%s", buf);
+
+                          ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                          _IO_funlockfile (stderr);
+
+                          free (buf);
+                        }
+#endif
+                    }
+
+                  d->__nextchar += strlen (d->__nextchar);
+
+                  d->optopt = pfound->val;
+                  return '?';
+                }
+            }
+          else if (pfound->has_arg == 1)
+            {
+              if (d->optind < argc)
+                d->optarg = argv[d->optind++];
+              else
+                {
+                  if (print_errors)
+                    {
+#if defined _LIBC && defined USE_IN_LIBIO
+                      char *buf;
+
+                      if (__asprintf (&buf, _("\
+%s: option '%s' requires an argument\n"),
+                                      argv[0], argv[d->optind - 1]) >= 0)
+                        {
+                          _IO_flockfile (stderr);
+
+                          int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                          ((_IO_FILE *) stderr)->_flags2
+                            |= _IO_FLAGS2_NOTCANCEL;
+
+                          __fxprintf (NULL, "%s", buf);
+
+                          ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                          _IO_funlockfile (stderr);
+
+                          free (buf);
+                        }
+#else
+                      fprintf (stderr,
+                               _("%s: option '%s' requires an argument\n"),
+                               argv[0], argv[d->optind - 1]);
+#endif
+                    }
+                  d->__nextchar += strlen (d->__nextchar);
+                  d->optopt = pfound->val;
+                  return optstring[0] == ':' ? ':' : '?';
+                }
+            }
+          d->__nextchar += strlen (d->__nextchar);
+          if (longind != NULL)
+            *longind = option_index;
+          if (pfound->flag)
+            {
+              *(pfound->flag) = pfound->val;
+              return 0;
+            }
+          return pfound->val;
+        }
+
+      /* Can't find it as a long option.  If this is not getopt_long_only,
+         or the option starts with '--' or is not a valid short
+         option, then it's an error.
+         Otherwise interpret it as a short option.  */
+      if (!long_only || argv[d->optind][1] == '-'
+          || strchr (optstring, *d->__nextchar) == NULL)
+        {
+          if (print_errors)
+            {
+#if defined _LIBC && defined USE_IN_LIBIO
+              char *buf;
+              int n;
+#endif
+
+              if (argv[d->optind][1] == '-')
+                {
+                  /* --option */
+#if defined _LIBC && defined USE_IN_LIBIO
+                  n = __asprintf (&buf, _("%s: unrecognized option '--%s'\n"),
+                                  argv[0], d->__nextchar);
+#else
+                  fprintf (stderr, _("%s: unrecognized option '--%s'\n"),
+                           argv[0], d->__nextchar);
+#endif
+                }
+              else
+                {
+                  /* +option or -option */
+#if defined _LIBC && defined USE_IN_LIBIO
+                  n = __asprintf (&buf, _("%s: unrecognized option '%c%s'\n"),
+                                  argv[0], argv[d->optind][0], d->__nextchar);
+#else
+                  fprintf (stderr, _("%s: unrecognized option '%c%s'\n"),
+                           argv[0], argv[d->optind][0], d->__nextchar);
+#endif
+                }
+
+#if defined _LIBC && defined USE_IN_LIBIO
+              if (n >= 0)
+                {
+                  _IO_flockfile (stderr);
+
+                  int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                  ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+                  __fxprintf (NULL, "%s", buf);
+
+                  ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                  _IO_funlockfile (stderr);
+
+                  free (buf);
+                }
+#endif
+            }
+          d->__nextchar = (char *) "";
+          d->optind++;
+          d->optopt = 0;
+          return '?';
+        }
+    }
+
+  /* Look at and handle the next short option-character.  */
+
+  {
+    char c = *d->__nextchar++;
+    char *temp = strchr (optstring, c);
+
+    /* Increment `optind' when we start to process its last character.  */
+    if (*d->__nextchar == '\0')
+      ++d->optind;
+
+    if (temp == NULL || c == ':')
+      {
+        if (print_errors)
+          {
+#if defined _LIBC && defined USE_IN_LIBIO
+              char *buf;
+              int n;
+#endif
+
+#if defined _LIBC && defined USE_IN_LIBIO
+              n = __asprintf (&buf, _("%s: invalid option -- '%c'\n"),
+                              argv[0], c);
+#else
+              fprintf (stderr, _("%s: invalid option -- '%c'\n"), argv[0], c);
+#endif
+
+#if defined _LIBC && defined USE_IN_LIBIO
+            if (n >= 0)
+              {
+                _IO_flockfile (stderr);
+
+                int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+                __fxprintf (NULL, "%s", buf);
+
+                ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                _IO_funlockfile (stderr);
+
+                free (buf);
+              }
+#endif
+          }
+        d->optopt = c;
+        return '?';
+      }
+    /* Convenience. Treat POSIX -W foo same as long option --foo */
+    if (temp[0] == 'W' && temp[1] == ';')
+      {
+        char *nameend;
+        const struct option *p;
+        const struct option *pfound = NULL;
+        int exact = 0;
+        int ambig = 0;
+        int indfound = 0;
+        int option_index;
+
+        /* This is an option that requires an argument.  */
+        if (*d->__nextchar != '\0')
+          {
+            d->optarg = d->__nextchar;
+            /* If we end this ARGV-element by taking the rest as an arg,
+               we must advance to the next element now.  */
+            d->optind++;
+          }
+        else if (d->optind == argc)
+          {
+            if (print_errors)
+              {
+#if defined _LIBC && defined USE_IN_LIBIO
+                char *buf;
+
+                if (__asprintf (&buf,
+                                _("%s: option requires an argument -- '%c'\n"),
+                                argv[0], c) >= 0)
+                  {
+                    _IO_flockfile (stderr);
+
+                    int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                    ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+                    __fxprintf (NULL, "%s", buf);
+
+                    ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                    _IO_funlockfile (stderr);
+
+                    free (buf);
+                  }
+#else
+                fprintf (stderr,
+                         _("%s: option requires an argument -- '%c'\n"),
+                         argv[0], c);
+#endif
+              }
+            d->optopt = c;
+            if (optstring[0] == ':')
+              c = ':';
+            else
+              c = '?';
+            return c;
+          }
+        else
+          /* We already incremented `d->optind' once;
+             increment it again when taking next ARGV-elt as argument.  */
+          d->optarg = argv[d->optind++];
+
+        /* optarg is now the argument, see if it's in the
+           table of longopts.  */
+
+        for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '=';
+             nameend++)
+          /* Do nothing.  */ ;
+
+        /* Test all long options for either exact match
+           or abbreviated matches.  */
+        for (p = longopts, option_index = 0; p->name; p++, option_index++)
+          if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar))
+            {
+              if ((unsigned int) (nameend - d->__nextchar) == strlen (p->name))
+                {
+                  /* Exact match found.  */
+                  pfound = p;
+                  indfound = option_index;
+                  exact = 1;
+                  break;
+                }
+              else if (pfound == NULL)
+                {
+                  /* First nonexact match found.  */
+                  pfound = p;
+                  indfound = option_index;
+                }
+              else
+                /* Second or later nonexact match found.  */
+                ambig = 1;
+            }
+        if (ambig && !exact)
+          {
+            if (print_errors)
+              {
+#if defined _LIBC && defined USE_IN_LIBIO
+                char *buf;
+
+                if (__asprintf (&buf, _("%s: option '-W %s' is ambiguous\n"),
+                                argv[0], argv[d->optind]) >= 0)
+                  {
+                    _IO_flockfile (stderr);
+
+                    int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                    ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+                    __fxprintf (NULL, "%s", buf);
+
+                    ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                    _IO_funlockfile (stderr);
+
+                    free (buf);
+                  }
+#else
+                fprintf (stderr, _("%s: option '-W %s' is ambiguous\n"),
+                         argv[0], argv[d->optind]);
+#endif
+              }
+            d->__nextchar += strlen (d->__nextchar);
+            d->optind++;
+            return '?';
+          }
+        if (pfound != NULL)
+          {
+            option_index = indfound;
+            if (*nameend)
+              {
+                /* Don't test has_arg with >, because some C compilers don't
+                   allow it to be used on enums.  */
+                if (pfound->has_arg)
+                  d->optarg = nameend + 1;
+                else
+                  {
+                    if (print_errors)
+                      {
+#if defined _LIBC && defined USE_IN_LIBIO
+                        char *buf;
+
+                        if (__asprintf (&buf, _("\
+%s: option '-W %s' doesn't allow an argument\n"),
+                                        argv[0], pfound->name) >= 0)
+                          {
+                            _IO_flockfile (stderr);
+
+                            int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                            ((_IO_FILE *) stderr)->_flags2
+                              |= _IO_FLAGS2_NOTCANCEL;
+
+                            __fxprintf (NULL, "%s", buf);
+
+                            ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                            _IO_funlockfile (stderr);
+
+                            free (buf);
+                          }
+#else
+                        fprintf (stderr, _("\
+%s: option '-W %s' doesn't allow an argument\n"),
+                                 argv[0], pfound->name);
+#endif
+                      }
+
+                    d->__nextchar += strlen (d->__nextchar);
+                    return '?';
+                  }
+              }
+            else if (pfound->has_arg == 1)
+              {
+                if (d->optind < argc)
+                  d->optarg = argv[d->optind++];
+                else
+                  {
+                    if (print_errors)
+                      {
+#if defined _LIBC && defined USE_IN_LIBIO
+                        char *buf;
+
+                        if (__asprintf (&buf, _("\
+%s: option '%s' requires an argument\n"),
+                                        argv[0], argv[d->optind - 1]) >= 0)
+                          {
+                            _IO_flockfile (stderr);
+
+                            int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                            ((_IO_FILE *) stderr)->_flags2
+                              |= _IO_FLAGS2_NOTCANCEL;
+
+                            __fxprintf (NULL, "%s", buf);
+
+                            ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                            _IO_funlockfile (stderr);
+
+                            free (buf);
+                          }
+#else
+                        fprintf (stderr,
+                                 _("%s: option '%s' requires an argument\n"),
+                                 argv[0], argv[d->optind - 1]);
+#endif
+                      }
+                    d->__nextchar += strlen (d->__nextchar);
+                    return optstring[0] == ':' ? ':' : '?';
+                  }
+              }
+            d->__nextchar += strlen (d->__nextchar);
+            if (longind != NULL)
+              *longind = option_index;
+            if (pfound->flag)
+              {
+                *(pfound->flag) = pfound->val;
+                return 0;
+              }
+            return pfound->val;
+          }
+          d->__nextchar = NULL;
+          return 'W';   /* Let the application handle it.   */
+      }
+    if (temp[1] == ':')
+      {
+        if (temp[2] == ':')
+          {
+            /* This is an option that accepts an argument optionally.  */
+            if (*d->__nextchar != '\0')
+              {
+                d->optarg = d->__nextchar;
+                d->optind++;
+              }
+            else
+              d->optarg = NULL;
+            d->__nextchar = NULL;
+          }
+        else
+          {
+            /* This is an option that requires an argument.  */
+            if (*d->__nextchar != '\0')
+              {
+                d->optarg = d->__nextchar;
+                /* If we end this ARGV-element by taking the rest as an arg,
+                   we must advance to the next element now.  */
+                d->optind++;
+              }
+            else if (d->optind == argc)
+              {
+                if (print_errors)
+                  {
+#if defined _LIBC && defined USE_IN_LIBIO
+                    char *buf;
+
+                    if (__asprintf (&buf, _("\
+%s: option requires an argument -- '%c'\n"),
+                                    argv[0], c) >= 0)
+                      {
+                        _IO_flockfile (stderr);
+
+                        int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                        ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+                        __fxprintf (NULL, "%s", buf);
+
+                        ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                        _IO_funlockfile (stderr);
+
+                        free (buf);
+                      }
+#else
+                    fprintf (stderr,
+                             _("%s: option requires an argument -- '%c'\n"),
+                             argv[0], c);
+#endif
+                  }
+                d->optopt = c;
+                if (optstring[0] == ':')
+                  c = ':';
+                else
+                  c = '?';
+              }
+            else
+              /* We already incremented `optind' once;
+                 increment it again when taking next ARGV-elt as argument.  */
+              d->optarg = argv[d->optind++];
+            d->__nextchar = NULL;
+          }
+      }
+    return c;
+  }
+}
+
+int
+_getopt_internal (int argc, char **argv, const char *optstring,
+                  const struct option *longopts, int *longind, int long_only,
+                  int posixly_correct)
+{
+  int result;
+
+  getopt_data.optind = optind;
+  getopt_data.opterr = opterr;
+
+  result = _getopt_internal_r (argc, argv, optstring, longopts,
+                               longind, long_only, &getopt_data,
+                               posixly_correct);
+
+  optind = getopt_data.optind;
+  optarg = getopt_data.optarg;
+  optopt = getopt_data.optopt;
+
+  return result;
+}
+
+/* glibc gets a LSB-compliant getopt.
+   Standalone applications get a POSIX-compliant getopt.  */
+#if _LIBC
+enum { POSIXLY_CORRECT = 0 };
+#else
+enum { POSIXLY_CORRECT = 1 };
+#endif
+
+int
+getopt (int argc, char *const *argv, const char *optstring)
+{
+  return _getopt_internal (argc, (char **) argv, optstring,
+                           (const struct option *) 0,
+                           (int *) 0,
+                           0, POSIXLY_CORRECT);
+}
+
+#ifdef _LIBC
+int
+__posix_getopt (int argc, char *const *argv, const char *optstring)
+{
+  return _getopt_internal (argc, argv, optstring,
+                           (const struct option *) 0,
+                           (int *) 0,
+                           0, 1);
+}
+#endif
+
+\f
+#ifdef TEST
+
+/* Compile with -DTEST to make an executable for use in testing
+   the above definition of `getopt'.  */
+
+int
+main (int argc, char **argv)
+{
+  int c;
+  int digit_optind = 0;
+
+  while (1)
+    {
+      int this_option_optind = optind ? optind : 1;
+
+      c = getopt (argc, argv, "abc:d:0123456789");
+      if (c == -1)
+        break;
+
+      switch (c)
+        {
+        case '0':
+        case '1':
+        case '2':
+        case '3':
+        case '4':
+        case '5':
+        case '6':
+        case '7':
+        case '8':
+        case '9':
+          if (digit_optind != 0 && digit_optind != this_option_optind)
+            printf ("digits occur in two different argv-elements.\n");
+          digit_optind = this_option_optind;
+          printf ("option %c\n", c);
+          break;
+
+        case 'a':
+          printf ("option a\n");
+          break;
+
+        case 'b':
+          printf ("option b\n");
+          break;
+
+        case 'c':
+          printf ("option c with value '%s'\n", optarg);
+          break;
+
+        case '?':
+          break;
+
+        default:
+          printf ("?? getopt returned character code 0%o ??\n", c);
+        }
+    }
+
+  if (optind < argc)
+    {
+      printf ("non-option ARGV-elements: ");
+      while (optind < argc)
+        printf ("%s ", argv[optind++]);
+      printf ("\n");
+    }
+
+  exit (0);
+}
+
+#endif /* TEST */
diff --git a/gnu/getopt.in.h b/gnu/getopt.in.h
new file mode 100644 (file)
index 0000000..3478945
--- /dev/null
@@ -0,0 +1,251 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Declarations for getopt.
+   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2010 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
+   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 _GL_GETOPT_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+/* The include_next requires a split double-inclusion guard.  We must
+   also inform the replacement unistd.h to not recursively use
+   <getopt.h>; our definitions will be present soon enough.  */
+#if @HAVE_GETOPT_H@
+# define _GL_SYSTEM_GETOPT
+# @INCLUDE_NEXT@ @NEXT_GETOPT_H@
+# undef _GL_SYSTEM_GETOPT
+#endif
+
+#ifndef _GL_GETOPT_H
+
+#ifndef __need_getopt
+# define _GL_GETOPT_H 1
+#endif
+
+/* Standalone applications should #define __GETOPT_PREFIX to an
+   identifier that prefixes the external functions and variables
+   defined in this header.  When this happens, include the
+   headers that might declare getopt so that they will not cause
+   confusion if included after this file (if the system had <getopt.h>,
+   we have already included it).  Then systematically rename
+   identifiers so that they do not collide with the system functions
+   and variables.  Renaming avoids problems with some compilers and
+   linkers.  */
+#if defined __GETOPT_PREFIX && !defined __need_getopt
+# if !@HAVE_GETOPT_H@
+#  include <stdlib.h>
+#  include <stdio.h>
+#  include <unistd.h>
+# endif
+# undef __need_getopt
+# undef getopt
+# undef getopt_long
+# undef getopt_long_only
+# undef optarg
+# undef opterr
+# undef optind
+# undef optopt
+# undef option
+# define __GETOPT_CONCAT(x, y) x ## y
+# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
+# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
+# define getopt __GETOPT_ID (getopt)
+# define getopt_long __GETOPT_ID (getopt_long)
+# define getopt_long_only __GETOPT_ID (getopt_long_only)
+# define optarg __GETOPT_ID (optarg)
+# define opterr __GETOPT_ID (opterr)
+# define optind __GETOPT_ID (optind)
+# define optopt __GETOPT_ID (optopt)
+# define option __GETOPT_ID (option)
+# define _getopt_internal __GETOPT_ID (getopt_internal)
+#endif
+
+/* Standalone applications get correct prototypes for getopt_long and
+   getopt_long_only; they declare "char **argv".  libc uses prototypes
+   with "char *const *argv" that are incorrect because getopt_long and
+   getopt_long_only can permute argv; this is required for backward
+   compatibility (e.g., for LSB 2.0.1).
+
+   This used to be `#if defined __GETOPT_PREFIX && !defined __need_getopt',
+   but it caused redefinition warnings if both unistd.h and getopt.h were
+   included, since unistd.h includes getopt.h having previously defined
+   __need_getopt.
+
+   The only place where __getopt_argv_const is used is in definitions
+   of getopt_long and getopt_long_only below, but these are visible
+   only if __need_getopt is not defined, so it is quite safe to rewrite
+   the conditional as follows:
+*/
+#if !defined __need_getopt
+# if defined __GETOPT_PREFIX
+#  define __getopt_argv_const /* empty */
+# else
+#  define __getopt_argv_const const
+# endif
+#endif
+
+/* If __GNU_LIBRARY__ is not already defined, either we are being used
+   standalone, or this is the first header included in the source file.
+   If we are being used with glibc, we need to include <features.h>, but
+   that does not exist if we are standalone.  So: if __GNU_LIBRARY__ is
+   not defined, include <ctype.h>, which will pull in <features.h> for us
+   if it's from glibc.  (Why ctype.h?  It's guaranteed to exist and it
+   doesn't flood the namespace with stuff the way some other headers do.)  */
+#if !defined __GNU_LIBRARY__
+# include <ctype.h>
+#endif
+
+#ifndef __THROW
+# ifndef __GNUC_PREREQ
+#  define __GNUC_PREREQ(maj, min) (0)
+# endif
+# if defined __cplusplus && __GNUC_PREREQ (2,8)
+#  define __THROW       throw ()
+# else
+#  define __THROW
+# endif
+#endif
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* 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,
+   each non-option ARGV-element is returned here.  */
+
+extern 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'.
+
+   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
+   non-option elements that the caller should itself scan.
+
+   Otherwise, `optind' communicates from one call to the next
+   how much of ARGV has been scanned so far.  */
+
+extern int optind;
+
+/* Callers store zero here to inhibit the error message `getopt' prints
+   for unrecognized options.  */
+
+extern int opterr;
+
+/* Set to an option character which was unrecognized.  */
+
+extern int optopt;
+
+#ifndef __need_getopt
+/* Describe the long-named options requested by the application.
+   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
+   of `struct option' terminated by an element containing a name which is
+   zero.
+
+   The field `has_arg' is:
+   no_argument          (or 0) if the option does not take an argument,
+   required_argument    (or 1) if the option requires an argument,
+   optional_argument    (or 2) if the option takes an optional argument.
+
+   If the field `flag' is not NULL, it points to a variable that is set
+   to the value given in the field `val' when the option is found, but
+   left unchanged if the option is not found.
+
+   To have a long-named option do something other than set an `int' to
+   a compiled-in constant, such as set a value from `optarg', set the
+   option's `flag' field to zero and its `val' field to a nonzero
+   value (the equivalent single-letter option character, if there is
+   one).  For long options that have a zero `flag' field, `getopt'
+   returns the contents of the `val' field.  */
+
+struct option
+{
+  const char *name;
+  /* has_arg can't be an enum because some compilers complain about
+     type mismatches in all the code that assumes it is an int.  */
+  int has_arg;
+  int *flag;
+  int val;
+};
+
+/* Names for the values of the `has_arg' field of `struct option'.  */
+
+# define no_argument            0
+# define required_argument      1
+# define optional_argument      2
+#endif  /* need getopt */
+
+
+/* Get definitions and prototypes for functions to process the
+   arguments in ARGV (ARGC of them, minus the program name) for
+   options given in OPTS.
+
+   Return the option character from OPTS just read.  Return -1 when
+   there are no more options.  For unrecognized options, or options
+   missing arguments, `optopt' is set to the option letter, and '?' is
+   returned.
+
+   The OPTS string is a list of characters which are recognized option
+   letters, optionally followed by colons, specifying that that letter
+   takes an argument, to be placed in `optarg'.
+
+   If a letter in OPTS is followed by two colons, its argument is
+   optional.  This behavior is specific to the GNU `getopt'.
+
+   The argument `--' causes premature termination of argument
+   scanning, explicitly telling `getopt' that there are no more
+   options.
+
+   If OPTS begins with `-', then non-option arguments are treated as
+   arguments to the option '\1'.  This behavior is specific to the GNU
+   `getopt'.  If OPTS begins with `+', or POSIXLY_CORRECT is set in
+   the environment, then do not permute arguments.  */
+
+extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
+       __THROW _GL_ARG_NONNULL ((2, 3));
+
+#ifndef __need_getopt
+extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
+                        const char *__shortopts,
+                        const struct option *__longopts, int *__longind)
+       __THROW _GL_ARG_NONNULL ((2, 3));
+extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
+                             const char *__shortopts,
+                             const struct option *__longopts, int *__longind)
+       __THROW _GL_ARG_NONNULL ((2, 3));
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Make sure we later can get all the definitions and declarations.  */
+#undef __need_getopt
+
+#endif /* getopt.h */
+#endif /* getopt.h */
diff --git a/gnu/getopt1.c b/gnu/getopt1.c
new file mode 100644 (file)
index 0000000..fbef775
--- /dev/null
@@ -0,0 +1,172 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* getopt_long and getopt_long_only entry points for GNU getopt.
+   Copyright (C) 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997,
+   1998, 2004, 2006, 2009, 2010 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
+   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/>.  */
+\f
+#ifdef _LIBC
+# include <getopt.h>
+#else
+# include <config.h>
+# include "getopt.h"
+#endif
+#include "getopt_int.h"
+
+#include <stdio.h>
+
+/* This needs to come after some library #include
+   to get __GNU_LIBRARY__ defined.  */
+#ifdef __GNU_LIBRARY__
+#include <stdlib.h>
+#endif
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+int
+getopt_long (int argc, char *__getopt_argv_const *argv, const char *options,
+             const struct option *long_options, int *opt_index)
+{
+  return _getopt_internal (argc, (char **) argv, options, long_options,
+                           opt_index, 0, 0);
+}
+
+int
+_getopt_long_r (int argc, char **argv, const char *options,
+                const struct option *long_options, int *opt_index,
+                struct _getopt_data *d)
+{
+  return _getopt_internal_r (argc, argv, options, long_options, opt_index,
+                             0, d, 0);
+}
+
+/* Like getopt_long, but '-' as well as '--' can indicate a long option.
+   If an option that starts with '-' (not '--') doesn't match a long option,
+   but does match a short option, it is parsed as a short option
+   instead.  */
+
+int
+getopt_long_only (int argc, char *__getopt_argv_const *argv,
+                  const char *options,
+                  const struct option *long_options, int *opt_index)
+{
+  return _getopt_internal (argc, (char **) argv, options, long_options,
+                           opt_index, 1, 0);
+}
+
+int
+_getopt_long_only_r (int argc, char **argv, const char *options,
+                     const struct option *long_options, int *opt_index,
+                     struct _getopt_data *d)
+{
+  return _getopt_internal_r (argc, argv, options, long_options, opt_index,
+                             1, d, 0);
+}
+
+\f
+#ifdef TEST
+
+#include <stdio.h>
+
+int
+main (int argc, char **argv)
+{
+  int c;
+  int digit_optind = 0;
+
+  while (1)
+    {
+      int this_option_optind = optind ? optind : 1;
+      int option_index = 0;
+      static const struct option long_options[] =
+      {
+        {"add", 1, 0, 0},
+        {"append", 0, 0, 0},
+        {"delete", 1, 0, 0},
+        {"verbose", 0, 0, 0},
+        {"create", 0, 0, 0},
+        {"file", 1, 0, 0},
+        {0, 0, 0, 0}
+      };
+
+      c = getopt_long (argc, argv, "abc:d:0123456789",
+                       long_options, &option_index);
+      if (c == -1)
+        break;
+
+      switch (c)
+        {
+        case 0:
+          printf ("option %s", long_options[option_index].name);
+          if (optarg)
+            printf (" with arg %s", optarg);
+          printf ("\n");
+          break;
+
+        case '0':
+        case '1':
+        case '2':
+        case '3':
+        case '4':
+        case '5':
+        case '6':
+        case '7':
+        case '8':
+        case '9':
+          if (digit_optind != 0 && digit_optind != this_option_optind)
+            printf ("digits occur in two different argv-elements.\n");
+          digit_optind = this_option_optind;
+          printf ("option %c\n", c);
+          break;
+
+        case 'a':
+          printf ("option a\n");
+          break;
+
+        case 'b':
+          printf ("option b\n");
+          break;
+
+        case 'c':
+          printf ("option c with value `%s'\n", optarg);
+          break;
+
+        case 'd':
+          printf ("option d with value `%s'\n", optarg);
+          break;
+
+        case '?':
+          break;
+
+        default:
+          printf ("?? getopt returned character code 0%o ??\n", c);
+        }
+    }
+
+  if (optind < argc)
+    {
+      printf ("non-option ARGV-elements: ");
+      while (optind < argc)
+        printf ("%s ", argv[optind++]);
+      printf ("\n");
+    }
+
+  exit (0);
+}
+
+#endif /* TEST */
diff --git a/gnu/getopt_int.h b/gnu/getopt_int.h
new file mode 100644 (file)
index 0000000..0095d44
--- /dev/null
@@ -0,0 +1,134 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Internal declarations for getopt.
+   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2010 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
+   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 _GETOPT_INT_H
+#define _GETOPT_INT_H   1
+
+#include <getopt.h>
+
+extern int _getopt_internal (int ___argc, char **___argv,
+                             const char *__shortopts,
+                             const struct option *__longopts, int *__longind,
+                             int __long_only, int __posixly_correct);
+
+\f
+/* Reentrant versions which can handle parsing multiple argument
+   vectors at the same time.  */
+
+/* Data type for reentrant functions.  */
+struct _getopt_data
+{
+  /* These have exactly the same meaning as the corresponding global
+     variables, except that they are used for the reentrant
+     versions of getopt.  */
+  int optind;
+  int opterr;
+  int optopt;
+  char *optarg;
+
+  /* Internal members.  */
+
+  /* True if the internal members have been initialized.  */
+  int __initialized;
+
+  /* The next char to be scanned in the option-element
+     in which the last option character we returned was found.
+     This allows us to pick up the scan where we left off.
+
+     If this is zero, or a null string, it means resume the scan
+     by advancing to the next ARGV-element.  */
+  char *__nextchar;
+
+  /* Describe how to deal with options that follow non-option ARGV-elements.
+
+     If the caller did not specify anything,
+     the default is REQUIRE_ORDER if the environment variable
+     POSIXLY_CORRECT is defined, PERMUTE otherwise.
+
+     REQUIRE_ORDER means don't recognize them as options;
+     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
+     of the list of option characters, or by calling getopt.
+
+     PERMUTE is the default.  We permute the contents of ARGV as we
+     scan, so that eventually all the non-options are at the end.
+     This allows options to be given in any order, even with programs
+     that were not written to expect this.
+
+     RETURN_IN_ORDER is an option available to programs that were
+     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
+     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.  */
+
+  enum
+    {
+      REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
+    } __ordering;
+
+  /* If the POSIXLY_CORRECT environment variable is set
+     or getopt was called.  */
+  int __posixly_correct;
+
+
+  /* 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.  */
+
+  int __first_nonopt;
+  int __last_nonopt;
+
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
+  int __nonoption_flags_max_len;
+  int __nonoption_flags_len;
+# endif
+};
+
+/* The initializer is necessary to set OPTIND and OPTERR to their
+   default values and to clear the initialization flag.  */
+#define _GETOPT_DATA_INITIALIZER        { 1, 1 }
+
+extern int _getopt_internal_r (int ___argc, char **___argv,
+                               const char *__shortopts,
+                               const struct option *__longopts, int *__longind,
+                               int __long_only, struct _getopt_data *__data,
+                               int __posixly_correct);
+
+extern int _getopt_long_r (int ___argc, char **___argv,
+                           const char *__shortopts,
+                           const struct option *__longopts, int *__longind,
+                           struct _getopt_data *__data);
+
+extern int _getopt_long_only_r (int ___argc, char **___argv,
+                                const char *__shortopts,
+                                const struct option *__longopts,
+                                int *__longind,
+                                struct _getopt_data *__data);
+
+#endif /* getopt_int.h */
diff --git a/gnu/getpagesize.c b/gnu/getpagesize.c
new file mode 100644 (file)
index 0000000..41f0cfb
--- /dev/null
@@ -0,0 +1,41 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* getpagesize emulation for systems where it cannot be done in a C macro.
+
+   Copyright (C) 2007, 2009-2010 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 and Martin Lambers.  */
+
+#include <config.h>
+
+/* Specification. */
+#include <unistd.h>
+
+/* This implementation is only for native Win32 systems.  */
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+
+int
+getpagesize (void)
+{
+  SYSTEM_INFO system_info;
+  GetSystemInfo (&system_info);
+  return system_info.dwPageSize;
+}
+
+#endif
diff --git a/gnu/gettext.h b/gnu/gettext.h
new file mode 100644 (file)
index 0000000..360d176
--- /dev/null
@@ -0,0 +1,282 @@
+/* -*- 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-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
+
+/* NLS can be disabled through the configure --disable-nls option.  */
+#if ENABLE_NLS
+
+/* Get declarations of GNU message catalog functions.  */
+# include <libintl.h>
+
+/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by
+   the gettext() and ngettext() macros.  This is an alternative to calling
+   textdomain(), and is useful for libraries.  */
+# ifdef DEFAULT_TEXT_DOMAIN
+#  undef gettext
+#  define gettext(Msgid) \
+     dgettext (DEFAULT_TEXT_DOMAIN, Msgid)
+#  undef ngettext
+#  define ngettext(Msgid1, Msgid2, N) \
+     dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N)
+# endif
+
+#else
+
+/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
+   chokes if dcgettext is defined as a macro.  So include it now, to make
+   later inclusions of <locale.h> a NOP.  We don't include <libintl.h>
+   as well because people using "gettext.h" will not include <libintl.h>,
+   and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
+   is OK.  */
+#if defined(__sun)
+# include <locale.h>
+#endif
+
+/* Many header files from the libstdc++ coming with g++ 3.3 or newer include
+   <libintl.h>, which chokes if dcgettext is defined as a macro.  So include
+   it now, to make later inclusions of <libintl.h> a NOP.  */
+#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3)
+# include <cstdlib>
+# if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H
+#  include <libintl.h>
+# endif
+#endif
+
+/* Disabled NLS.
+   The casts to 'const char *' serve the purpose of producing warnings
+   for invalid uses of the value returned from these functions.
+   On pre-ANSI systems without 'const', the config.h file is supposed to
+   contain "#define const".  */
+# undef gettext
+# define gettext(Msgid) ((const char *) (Msgid))
+# undef dgettext
+# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid))
+# undef dcgettext
+# define dcgettext(Domainname, Msgid, Category) \
+    ((void) (Category), dgettext (Domainname, Msgid))
+# undef ngettext
+# define ngettext(Msgid1, Msgid2, N) \
+    ((N) == 1 \
+     ? ((void) (Msgid2), (const char *) (Msgid1)) \
+     : ((void) (Msgid1), (const char *) (Msgid2)))
+# undef dngettext
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+    ((void) (Domainname), ngettext (Msgid1, Msgid2, N))
+# undef dcngettext
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+    ((void) (Category), dngettext(Domainname, Msgid1, Msgid2, N))
+# undef textdomain
+# define textdomain(Domainname) ((const char *) (Domainname))
+# undef bindtextdomain
+# define bindtextdomain(Domainname, Dirname) \
+    ((void) (Domainname), (const char *) (Dirname))
+# undef bind_textdomain_codeset
+# define bind_textdomain_codeset(Domainname, Codeset) \
+    ((void) (Domainname), (const char *) (Codeset))
+
+#endif
+
+/* A pseudo function call that serves as a marker for the automated
+   extraction of messages, but does not call gettext().  The run-time
+   translation is done at a different place in the code.
+   The argument, String, should be a literal string.  Concatenated strings
+   and other string expressions won't work.
+   The macro's expansion is not parenthesized, so that it is suitable as
+   initializer for static 'char[]' or 'const char[]' variables.  */
+#define gettext_noop(String) String
+
+/* The separator between msgctxt and msgid in a .mo file.  */
+#define GETTEXT_CONTEXT_GLUE "\004"
+
+/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a
+   MSGID.  MSGCTXT and MSGID must be string literals.  MSGCTXT should be
+   short and rarely need to change.
+   The letter 'p' stands for 'particular' or 'special'.  */
+#ifdef DEFAULT_TEXT_DOMAIN
+# define pgettext(Msgctxt, Msgid) \
+   pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#else
+# define pgettext(Msgctxt, Msgid) \
+   pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#endif
+#define dpgettext(Domainname, Msgctxt, Msgid) \
+  pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \
+  pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category)
+#ifdef DEFAULT_TEXT_DOMAIN
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
+   npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#else
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
+   npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#endif
+#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
+  npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \
+  npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+pgettext_aux (const char *domain,
+              const char *msg_ctxt_id, const char *msgid,
+              int category)
+{
+  const char *translation = dcgettext (domain, msg_ctxt_id, category);
+  if (translation == msg_ctxt_id)
+    return msgid;
+  else
+    return translation;
+}
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+npgettext_aux (const char *domain,
+               const char *msg_ctxt_id, const char *msgid,
+               const char *msgid_plural, unsigned long int n,
+               int category)
+{
+  const char *translation =
+    dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
+  if (translation == msg_ctxt_id || translation == msgid_plural)
+    return (n == 1 ? msgid : msgid_plural);
+  else
+    return translation;
+}
+
+/* The same thing extended for non-constant arguments.  Here MSGCTXT and MSGID
+   can be arbitrary expressions.  But for string literals these macros are
+   less efficient than those above.  */
+
+#include <string.h>
+
+#define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \
+  (((__GNUC__ >= 3 || __GNUG__ >= 2) && !__STRICT_ANSI__) \
+   /* || __STDC_VERSION__ >= 199901L */ )
+
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+#include <stdlib.h>
+#endif
+
+#define pgettext_expr(Msgctxt, Msgid) \
+  dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES)
+#define dpgettext_expr(Domainname, Msgctxt, Msgid) \
+  dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+dcpgettext_expr (const char *domain,
+                 const char *msgctxt, const char *msgid,
+                 int category)
+{
+  size_t msgctxt_len = strlen (msgctxt) + 1;
+  size_t msgid_len = strlen (msgid) + 1;
+  const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+  char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+  char buf[1024];
+  char *msg_ctxt_id =
+    (msgctxt_len + msgid_len <= sizeof (buf)
+     ? buf
+     : (char *) malloc (msgctxt_len + msgid_len));
+  if (msg_ctxt_id != NULL)
+#endif
+    {
+      memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+      msg_ctxt_id[msgctxt_len - 1] = '\004';
+      memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+      translation = dcgettext (domain, msg_ctxt_id, category);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+      if (msg_ctxt_id != buf)
+        free (msg_ctxt_id);
+#endif
+      if (translation != msg_ctxt_id)
+        return translation;
+    }
+  return msgid;
+}
+
+#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \
+  dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
+#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
+  dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+dcnpgettext_expr (const char *domain,
+                  const char *msgctxt, const char *msgid,
+                  const char *msgid_plural, unsigned long int n,
+                  int category)
+{
+  size_t msgctxt_len = strlen (msgctxt) + 1;
+  size_t msgid_len = strlen (msgid) + 1;
+  const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+  char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+  char buf[1024];
+  char *msg_ctxt_id =
+    (msgctxt_len + msgid_len <= sizeof (buf)
+     ? buf
+     : (char *) malloc (msgctxt_len + msgid_len));
+  if (msg_ctxt_id != NULL)
+#endif
+    {
+      memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+      msg_ctxt_id[msgctxt_len - 1] = '\004';
+      memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+      translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+      if (msg_ctxt_id != buf)
+        free (msg_ctxt_id);
+#endif
+      if (!(translation == msg_ctxt_id || translation == msgid_plural))
+        return translation;
+    }
+  return (n == 1 ? msgid : msgid_plural);
+}
+
+#endif /* _LIBGETTEXT_H */
diff --git a/gnu/gettime.c b/gnu/gettime.c
new file mode 100644 (file)
index 0000000..542d79e
--- /dev/null
@@ -0,0 +1,50 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* gettime -- get the system clock
+
+   Copyright (C) 2002, 2004-2007, 2009-2010 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.  */
+
+#include <config.h>
+
+#include "timespec.h"
+
+#include <sys/time.h>
+
+/* Get the system time into *TS.  */
+
+void
+gettime (struct timespec *ts)
+{
+#if HAVE_NANOTIME
+  nanotime (ts);
+#else
+
+# if defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME
+  if (clock_gettime (CLOCK_REALTIME, ts) == 0)
+    return;
+# endif
+
+  {
+    struct timeval tv;
+    gettimeofday (&tv, NULL);
+    ts->tv_sec = tv.tv_sec;
+    ts->tv_nsec = tv.tv_usec * 1000;
+  }
+
+#endif
+}
diff --git a/gnu/gettimeofday.c b/gnu/gettimeofday.c
new file mode 100644 (file)
index 0000000..cdd8466
--- /dev/null
@@ -0,0 +1,146 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Provide gettimeofday for systems that don't have it or for which it's broken.
+
+   Copyright (C) 2001-2003, 2005-2007, 2009-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* written by Jim Meyering */
+
+#include <config.h>
+
+/* Specification.  */
+#include <sys/time.h>
+
+#include <time.h>
+
+#if HAVE_SYS_TIMEB_H
+# include <sys/timeb.h>
+#endif
+
+#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME
+
+/* Work around the bug in some systems whereby gettimeofday clobbers
+   the static buffer that localtime uses for its return value.  The
+   gettimeofday function from Mac OS X 10.0.4 (i.e., Darwin 1.3.7) has
+   this problem.  The tzset replacement is necessary for at least
+   Solaris 2.5, 2.5.1, and 2.6.  */
+
+static struct tm tm_zero_buffer;
+static struct tm *localtime_buffer_addr = &tm_zero_buffer;
+
+#undef localtime
+extern struct tm *localtime (time_t const *);
+
+#undef gmtime
+extern struct tm *gmtime (time_t const *);
+
+/* This is a wrapper for localtime.  It is used only on systems for which
+   gettimeofday clobbers the static buffer used for localtime's result.
+
+   On the first call, record the address of the static buffer that
+   localtime uses for its result.  */
+
+struct tm *
+rpl_localtime (time_t const *timep)
+{
+  struct tm *tm = localtime (timep);
+
+  if (localtime_buffer_addr == &tm_zero_buffer)
+    localtime_buffer_addr = tm;
+
+  return tm;
+}
+
+/* Same as above, since gmtime and localtime use the same buffer.  */
+struct tm *
+rpl_gmtime (time_t const *timep)
+{
+  struct tm *tm = gmtime (timep);
+
+  if (localtime_buffer_addr == &tm_zero_buffer)
+    localtime_buffer_addr = tm;
+
+  return tm;
+}
+
+#endif /* GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME */
+
+#if TZSET_CLOBBERS_LOCALTIME
+
+#undef tzset
+extern void tzset (void);
+
+/* This is a wrapper for tzset, for systems on which tzset may clobber
+   the static buffer used for localtime's result.  */
+void
+rpl_tzset (void)
+{
+  /* Save and restore the contents of the buffer used for localtime's
+     result around the call to tzset.  */
+  struct tm save = *localtime_buffer_addr;
+  tzset ();
+  *localtime_buffer_addr = save;
+}
+#endif
+
+/* This is a wrapper for gettimeofday.  It is used only on systems
+   that lack this function, or whose implementation of this function
+   causes problems.  */
+
+int
+gettimeofday (struct timeval *restrict tv, void *restrict tz)
+{
+#undef gettimeofday
+#if HAVE_GETTIMEOFDAY
+# if GETTIMEOFDAY_CLOBBERS_LOCALTIME
+  /* Save and restore the contents of the buffer used for localtime's
+     result around the call to gettimeofday.  */
+  struct tm save = *localtime_buffer_addr;
+# endif
+
+  int result = gettimeofday (tv, (struct timezone *) tz);
+
+# if GETTIMEOFDAY_CLOBBERS_LOCALTIME
+  *localtime_buffer_addr = save;
+# endif
+
+  return result;
+
+#else
+
+# if HAVE__FTIME
+
+  struct _timeb timebuf;
+  _ftime (&timebuf);
+  tv->tv_sec = timebuf.time;
+  tv->tv_usec = timebuf.millitm * 1000;
+
+# else
+
+#  if !defined OK_TO_USE_1S_CLOCK
+#   error "Only 1-second nominal clock resolution found.  Is that intended?" \
+          "If so, compile with the -DOK_TO_USE_1S_CLOCK option."
+#  endif
+  tv->tv_sec = time (NULL);
+  tv->tv_usec = 0;
+
+# endif
+
+  return 0;
+
+#endif
+}
diff --git a/gnu/hash-pjw.c b/gnu/hash-pjw.c
new file mode 100644 (file)
index 0000000..eac00c6
--- /dev/null
@@ -0,0 +1,42 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* hash-pjw.c -- compute a hash value from a NUL-terminated string.
+
+   Copyright (C) 2001, 2003, 2006, 2009-2010 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>
+
+#include "hash-pjw.h"
+
+#include <limits.h>
+
+#define SIZE_BITS (sizeof (size_t) * CHAR_BIT)
+
+/* A hash function for NUL-terminated char* strings using
+   the method described by Bruno Haible.
+   See http://www.haible.de/bruno/hashfunc.html.  */
+
+size_t
+hash_pjw (const void *x, size_t tablesize)
+{
+  const char *s;
+  size_t h = 0;
+
+  for (s = x; *s; s++)
+    h = *s + ((h << 9) | (h >> (SIZE_BITS - 9)));
+
+  return h % tablesize;
+}
diff --git a/gnu/hash-pjw.h b/gnu/hash-pjw.h
new file mode 100644 (file)
index 0000000..5f674d5
--- /dev/null
@@ -0,0 +1,25 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* hash-pjw.h -- declaration for a simple hash function
+   Copyright (C) 2001, 2003, 2009-2010 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 <stddef.h>
+
+/* Compute a hash code for a NUL-terminated string starting at X,
+   and return the hash code modulo TABLESIZE.
+   The result is platform dependent: it depends on the size of the 'size_t'
+   type and on the signedness of the 'char' type.  */
+extern size_t hash_pjw (void const *x, size_t tablesize);
diff --git a/gnu/hash-triple.c b/gnu/hash-triple.c
new file mode 100644 (file)
index 0000000..6a44520
--- /dev/null
@@ -0,0 +1,79 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Hash functions for file-related triples: name, device, inode.
+   Copyright (C) 2007, 2009-2010 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 */
+
+#include <config.h>
+
+#include "hash-triple.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "hash-pjw.h"
+#include "same.h"
+#include "same-inode.h"
+
+#define STREQ(a, b) (strcmp (a, b) == 0)
+
+/* Hash an F_triple, and *do* consider the file name.  */
+size_t
+triple_hash (void const *x, size_t table_size)
+{
+  struct F_triple const *p = x;
+  size_t tmp = hash_pjw (p->name, table_size);
+
+  /* Ignoring the device number here should be fine.  */
+  return (tmp ^ p->st_ino) % table_size;
+}
+
+/* Hash an F_triple, without considering the file name.  */
+size_t
+triple_hash_no_name (void const *x, size_t table_size)
+{
+  struct F_triple const *p = x;
+
+  /* Ignoring the device number here should be fine.  */
+  return p->st_ino % table_size;
+}
+
+/* Compare two F_triple structs.  */
+bool
+triple_compare (void const *x, void const *y)
+{
+  struct F_triple const *a = x;
+  struct F_triple const *b = y;
+  return (SAME_INODE (*a, *b) && same_name (a->name, b->name)) ? true : false;
+}
+
+bool
+triple_compare_ino_str (void const *x, void const *y)
+{
+  struct F_triple const *a = x;
+  struct F_triple const *b = y;
+  return (SAME_INODE (*a, *b) && STREQ (a->name, b->name)) ? true : false;
+}
+
+/* Free an F_triple.  */
+void
+triple_free (void *x)
+{
+  struct F_triple *a = x;
+  free (a->name);
+  free (a);
+}
diff --git a/gnu/hash-triple.h b/gnu/hash-triple.h
new file mode 100644 (file)
index 0000000..39bb335
--- /dev/null
@@ -0,0 +1,24 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+#ifndef HASH_TRIPLE_H
+#define HASH_TRIPLE_H
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdbool.h>
+
+/* Describe a just-created or just-renamed destination file.  */
+struct F_triple
+{
+  char *name;
+  ino_t st_ino;
+  dev_t st_dev;
+};
+
+extern size_t triple_hash (void const *x, size_t table_size);
+extern size_t triple_hash_no_name (void const *x, size_t table_size);
+extern bool triple_compare (void const *x, void const *y);
+extern bool triple_compare_ino_str (void const *x, void const *y);
+extern void triple_free (void *x);
+
+#endif
diff --git a/gnu/hash.c b/gnu/hash.c
new file mode 100644 (file)
index 0000000..2278c30
--- /dev/null
@@ -0,0 +1,1196 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* hash - hashing table processing.
+
+   Copyright (C) 1998-2004, 2006-2007, 2009-2010 Free Software Foundation, Inc.
+
+   Written by Jim Meyering, 1992.
+
+   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/>.  */
+
+/* A generic hash table package.  */
+
+/* Define USE_OBSTACK to 1 if you want the allocator to use obstacks instead
+   of malloc.  If you change USE_OBSTACK, you have to recompile!  */
+
+#include <config.h>
+
+#include "hash.h"
+
+#include "bitrotate.h"
+#include "xalloc.h"
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#if USE_OBSTACK
+# include "obstack.h"
+# ifndef obstack_chunk_alloc
+#  define obstack_chunk_alloc malloc
+# endif
+# ifndef obstack_chunk_free
+#  define obstack_chunk_free free
+# endif
+#endif
+
+struct hash_entry
+  {
+    void *data;
+    struct hash_entry *next;
+  };
+
+struct hash_table
+  {
+    /* The array of buckets starts at BUCKET and extends to BUCKET_LIMIT-1,
+       for a possibility of N_BUCKETS.  Among those, N_BUCKETS_USED buckets
+       are not empty, there are N_ENTRIES active entries in the table.  */
+    struct hash_entry *bucket;
+    struct hash_entry const *bucket_limit;
+    size_t n_buckets;
+    size_t n_buckets_used;
+    size_t n_entries;
+
+    /* Tuning arguments, kept in a physically separate structure.  */
+    const Hash_tuning *tuning;
+
+    /* 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
+       function for a user entry.  */
+    Hash_hasher hasher;
+    Hash_comparator comparator;
+    Hash_data_freer data_freer;
+
+    /* A linked list of freed struct hash_entry structs.  */
+    struct hash_entry *free_entry_list;
+
+#if USE_OBSTACK
+    /* Whenever obstacks are used, it is possible to allocate all overflowed
+       entries into a single stack, so they all can be freed in a single
+       operation.  It is not clear if the speedup is worth the trouble.  */
+    struct obstack entry_stack;
+#endif
+  };
+
+/* A hash table contains many internal entries, each holding a pointer to
+   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
+   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.
+   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
+   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.
+
+   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
+   that those are not that easy to write! :-), and to use a table size
+   larger than the actual number of entries.  */
+
+/* If an insertion makes the ratio of nonempty buckets to table size larger
+   than the growth threshold (a number between 0.0 and 1.0), then increase
+   the table size by multiplying by the growth factor (a number greater than
+   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
+
+/* 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
+   0.0 and 1.0), then shrink the table by multiplying by the shrink factor (a
+   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
+
+/* Use this to initialize or reset a TUNING structure to
+   some sensible values. */
+static const Hash_tuning default_tuning =
+  {
+    DEFAULT_SHRINK_THRESHOLD,
+    DEFAULT_SHRINK_FACTOR,
+    DEFAULT_GROWTH_THRESHOLD,
+    DEFAULT_GROWTH_FACTOR,
+    false
+  };
+
+/* Information and lookup.  */
+
+/* The following few functions provide information about the overall hash
+   table organization: the number of entries, number of buckets and maximum
+   length of buckets.  */
+
+/* Return the number of buckets in the hash table.  The table size, the total
+   number of buckets (used plus unused), or the maximum number of slots, are
+   the same quantity.  */
+
+size_t
+hash_get_n_buckets (const Hash_table *table)
+{
+  return table->n_buckets;
+}
+
+/* Return the number of slots in use (non-empty buckets).  */
+
+size_t
+hash_get_n_buckets_used (const Hash_table *table)
+{
+  return table->n_buckets_used;
+}
+
+/* Return the number of active entries.  */
+
+size_t
+hash_get_n_entries (const Hash_table *table)
+{
+  return table->n_entries;
+}
+
+/* Return the length of the longest chain (bucket).  */
+
+size_t
+hash_get_max_bucket_length (const Hash_table *table)
+{
+  struct hash_entry const *bucket;
+  size_t max_bucket_length = 0;
+
+  for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
+    {
+      if (bucket->data)
+        {
+          struct hash_entry const *cursor = bucket;
+          size_t bucket_length = 1;
+
+          while (cursor = cursor->next, cursor)
+            bucket_length++;
+
+          if (bucket_length > max_bucket_length)
+            max_bucket_length = bucket_length;
+        }
+    }
+
+  return max_bucket_length;
+}
+
+/* Do a mild validation of a hash table, by traversing it and checking two
+   statistics.  */
+
+bool
+hash_table_ok (const Hash_table *table)
+{
+  struct hash_entry const *bucket;
+  size_t n_buckets_used = 0;
+  size_t n_entries = 0;
+
+  for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
+    {
+      if (bucket->data)
+        {
+          struct hash_entry const *cursor = bucket;
+
+          /* Count bucket head.  */
+          n_buckets_used++;
+          n_entries++;
+
+          /* Count bucket overflow.  */
+          while (cursor = cursor->next, cursor)
+            n_entries++;
+        }
+    }
+
+  if (n_buckets_used == table->n_buckets_used && n_entries == table->n_entries)
+    return true;
+
+  return false;
+}
+
+void
+hash_print_statistics (const Hash_table *table, FILE *stream)
+{
+  size_t n_entries = hash_get_n_entries (table);
+  size_t n_buckets = hash_get_n_buckets (table);
+  size_t n_buckets_used = hash_get_n_buckets_used (table);
+  size_t max_bucket_length = hash_get_max_bucket_length (table);
+
+  fprintf (stream, "# entries:         %lu\n", (unsigned long int) n_entries);
+  fprintf (stream, "# buckets:         %lu\n", (unsigned long int) n_buckets);
+  fprintf (stream, "# buckets used:    %lu (%.2f%%)\n",
+           (unsigned long int) n_buckets_used,
+           (100.0 * n_buckets_used) / n_buckets);
+  fprintf (stream, "max bucket length: %lu\n",
+           (unsigned long int) max_bucket_length);
+}
+
+/* If ENTRY matches an entry already in the hash table, return the
+   entry from the table.  Otherwise, return NULL.  */
+
+void *
+hash_lookup (const Hash_table *table, const void *entry)
+{
+  struct hash_entry const *bucket
+    = table->bucket + table->hasher (entry, table->n_buckets);
+  struct hash_entry const *cursor;
+
+  if (! (bucket < table->bucket_limit))
+    abort ();
+
+  if (bucket->data == NULL)
+    return NULL;
+
+  for (cursor = bucket; cursor; cursor = cursor->next)
+    if (entry == cursor->data || table->comparator (entry, cursor->data))
+      return cursor->data;
+
+  return NULL;
+}
+
+/* Walking.  */
+
+/* The functions in this page traverse the hash table and process the
+   contained entries.  For the traversal to work properly, the hash table
+   should not be resized nor modified while any particular entry is being
+   processed.  In particular, entries should not be added, and an entry
+   may be removed only if there is no shrink threshold and the entry being
+   removed has already been passed to hash_get_next.  */
+
+/* Return the first data in the table, or NULL if the table is empty.  */
+
+void *
+hash_get_first (const Hash_table *table)
+{
+  struct hash_entry const *bucket;
+
+  if (table->n_entries == 0)
+    return NULL;
+
+  for (bucket = table->bucket; ; bucket++)
+    if (! (bucket < table->bucket_limit))
+      abort ();
+    else if (bucket->data)
+      return bucket->data;
+}
+
+/* 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'.
+   Return NULL if there are no more entries.  */
+
+void *
+hash_get_next (const Hash_table *table, const void *entry)
+{
+  struct hash_entry const *bucket
+    = table->bucket + table->hasher (entry, table->n_buckets);
+  struct hash_entry const *cursor;
+
+  if (! (bucket < table->bucket_limit))
+    abort ();
+
+  /* Find next entry in the same bucket.  */
+  for (cursor = bucket; cursor; cursor = cursor->next)
+    if (cursor->data == entry && cursor->next)
+      return cursor->next->data;
+
+  /* Find first entry in any subsequent bucket.  */
+  while (++bucket < table->bucket_limit)
+    if (bucket->data)
+      return bucket->data;
+
+  /* None found.  */
+  return NULL;
+}
+
+/* Fill BUFFER with pointers to active user entries in the hash table, then
+   return the number of pointers copied.  Do not copy more than BUFFER_SIZE
+   pointers.  */
+
+size_t
+hash_get_entries (const Hash_table *table, void **buffer,
+                  size_t buffer_size)
+{
+  size_t counter = 0;
+  struct hash_entry const *bucket;
+  struct hash_entry const *cursor;
+
+  for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
+    {
+      if (bucket->data)
+        {
+          for (cursor = bucket; cursor; cursor = cursor->next)
+            {
+              if (counter >= buffer_size)
+                return counter;
+              buffer[counter++] = cursor->data;
+            }
+        }
+    }
+
+  return counter;
+}
+
+/* Call a PROCESSOR function for each entry of a hash table, and return the
+   number of entries for which the processor function returned success.  A
+   pointer to some PROCESSOR_DATA which will be made available to each call to
+   the processor function.  The PROCESSOR accepts two arguments: the first is
+   the user entry being walked into, the second is the value of PROCESSOR_DATA
+   as received.  The walking continue for as long as the PROCESSOR function
+   returns nonzero.  When it returns zero, the walking is interrupted.  */
+
+size_t
+hash_do_for_each (const Hash_table *table, Hash_processor processor,
+                  void *processor_data)
+{
+  size_t counter = 0;
+  struct hash_entry const *bucket;
+  struct hash_entry const *cursor;
+
+  for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
+    {
+      if (bucket->data)
+        {
+          for (cursor = bucket; cursor; cursor = cursor->next)
+            {
+              if (! processor (cursor->data, processor_data))
+                return counter;
+              counter++;
+            }
+        }
+    }
+
+  return counter;
+}
+
+/* Allocation and clean-up.  */
+
+/* Return a hash index for a NUL-terminated STRING between 0 and N_BUCKETS-1.
+   This is a convenience routine for constructing other hashing functions.  */
+
+#if USE_DIFF_HASH
+
+/* About hashings, Paul Eggert writes to me (FP), on 1994-01-01: "Please see
+   B. J. McKenzie, R. Harries & T. Bell, Selecting a hashing algorithm,
+   Software--practice & experience 20, 2 (Feb 1990), 209-224.  Good hash
+   algorithms tend to be domain-specific, so what's good for [diffutils'] io.c
+   may not be good for your application."  */
+
+size_t
+hash_string (const char *string, size_t n_buckets)
+{
+# define HASH_ONE_CHAR(Value, Byte) \
+  ((Byte) + rotl_sz (Value, 7))
+
+  size_t value = 0;
+  unsigned char ch;
+
+  for (; (ch = *string); string++)
+    value = HASH_ONE_CHAR (value, ch);
+  return value % n_buckets;
+
+# undef HASH_ONE_CHAR
+}
+
+#else /* not USE_DIFF_HASH */
+
+/* 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.
+   (By the way, what happened to this excellent man?  Is he still alive?)  */
+
+size_t
+hash_string (const char *string, size_t n_buckets)
+{
+  size_t value = 0;
+  unsigned char ch;
+
+  for (; (ch = *string); string++)
+    value = (value * 31 + ch) % n_buckets;
+  return value;
+}
+
+#endif /* not USE_DIFF_HASH */
+
+/* Return true if CANDIDATE is a prime number.  CANDIDATE should be an odd
+   number at least equal to 11.  */
+
+static bool
+is_prime (size_t candidate)
+{
+  size_t divisor = 3;
+  size_t square = divisor * divisor;
+
+  while (square < candidate && (candidate % divisor))
+    {
+      divisor++;
+      square += 4 * divisor;
+      divisor++;
+    }
+
+  return (candidate % divisor ? true : false);
+}
+
+/* Round a given CANDIDATE number up to the nearest prime, and return that
+   prime.  Primes lower than 10 are merely skipped.  */
+
+static size_t
+next_prime (size_t candidate)
+{
+  /* Skip small primes.  */
+  if (candidate < 10)
+    candidate = 10;
+
+  /* Make it definitely odd.  */
+  candidate |= 1;
+
+  while (SIZE_MAX != candidate && !is_prime (candidate))
+    candidate += 2;
+
+  return candidate;
+}
+
+void
+hash_reset_tuning (Hash_tuning *tuning)
+{
+  *tuning = default_tuning;
+}
+
+/* If the user passes a NULL hasher, we hash the raw pointer.  */
+static size_t
+raw_hasher (const void *data, size_t n)
+{
+  /* When hashing unique pointers, it is often the case that they were
+     generated by malloc and thus have the property that the low-order
+     bits are 0.  As this tends to give poorer performance with small
+     tables, we rotate the pointer value before performing division,
+     in an attempt to improve hash quality.  */
+  size_t val = rotr_sz ((size_t) data, 3);
+  return val % n;
+}
+
+/* If the user passes a NULL comparator, we use pointer comparison.  */
+static bool
+raw_comparator (const void *a, const void *b)
+{
+  return a == b;
+}
+
+
+/* For the given hash TABLE, check the user supplied tuning structure for
+   reasonable values, and return true if there is no gross error with it.
+   Otherwise, definitively reset the TUNING field to some acceptable default
+   in the hash table (that is, the user loses the right of further modifying
+   tuning arguments), and return false.  */
+
+static bool
+check_tuning (Hash_table *table)
+{
+  const Hash_tuning *tuning = table->tuning;
+  float epsilon;
+  if (tuning == &default_tuning)
+    return true;
+
+  /* Be a bit stricter than mathematics would require, so that
+     rounding errors in size calculations do not cause allocations to
+     fail to grow or shrink as they should.  The smallest allocation
+     is 11 (due to next_prime's algorithm), so an epsilon of 0.1
+     should be good enough.  */
+  epsilon = 0.1f;
+
+  if (epsilon < tuning->growth_threshold
+      && tuning->growth_threshold < 1 - epsilon
+      && 1 + epsilon < tuning->growth_factor
+      && 0 <= tuning->shrink_threshold
+      && tuning->shrink_threshold + epsilon < tuning->shrink_factor
+      && tuning->shrink_factor <= 1
+      && tuning->shrink_threshold + epsilon < tuning->growth_threshold)
+    return true;
+
+  table->tuning = &default_tuning;
+  return false;
+}
+
+/* Compute the size of the bucket array for the given CANDIDATE and
+   TUNING, or return 0 if there is no possible way to allocate that
+   many entries.  */
+
+static size_t
+compute_bucket_size (size_t candidate, const Hash_tuning *tuning)
+{
+  if (!tuning->is_n_buckets)
+    {
+      float new_candidate = candidate / tuning->growth_threshold;
+      if (SIZE_MAX <= new_candidate)
+        return 0;
+      candidate = new_candidate;
+    }
+  candidate = next_prime (candidate);
+  if (xalloc_oversized (candidate, sizeof (struct hash_entry *)))
+    return 0;
+  return candidate;
+}
+
+/* Allocate and return a new hash table, or NULL upon failure.  The initial
+   number of buckets is automatically selected so as to _guarantee_ that you
+   may insert at least CANDIDATE different user entries before any growth of
+   the hash table size occurs.  So, if have a reasonably tight a-priori upper
+   bound on the number of entries you intend to insert in the hash table, you
+   may save some table memory and insertion time, by specifying it here.  If
+   the IS_N_BUCKETS field of the TUNING structure is true, the CANDIDATE
+   argument has its meaning changed to the wanted number of buckets.
+
+   TUNING points to a structure of user-supplied values, in case some fine
+   tuning is wanted over the default behavior of the hasher.  If TUNING is
+   NULL, the default tuning parameters are used instead.  If TUNING is
+   provided but the values requested are out of bounds or might cause
+   rounding errors, return NULL.
+
+   The user-supplied HASHER function, when not NULL, accepts two
+   arguments ENTRY and TABLE_SIZE.  It computes, by hashing ENTRY contents, a
+   slot number for that entry which should be in the range 0..TABLE_SIZE-1.
+   This slot number is then returned.
+
+   The user-supplied COMPARATOR function, when not NULL, accepts two
+   arguments pointing to user data, it then returns true for a pair of entries
+   that compare equal, or false otherwise.  This function is internally called
+   on entries which are already known to hash to the same bucket index,
+   but which are distinct pointers.
+
+   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'.
+   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
+   simply an auxiliary struct that you have malloc'd to aggregate several
+   values.  */
+
+Hash_table *
+hash_initialize (size_t candidate, const Hash_tuning *tuning,
+                 Hash_hasher hasher, Hash_comparator comparator,
+                 Hash_data_freer data_freer)
+{
+  Hash_table *table;
+
+  if (hasher == NULL)
+    hasher = raw_hasher;
+  if (comparator == NULL)
+    comparator = raw_comparator;
+
+  table = malloc (sizeof *table);
+  if (table == NULL)
+    return NULL;
+
+  if (!tuning)
+    tuning = &default_tuning;
+  table->tuning = tuning;
+  if (!check_tuning (table))
+    {
+      /* Fail if the tuning options are invalid.  This is the only occasion
+         when the user gets some feedback about it.  Once the table is created,
+         if the user provides invalid tuning options, we silently revert to
+         using the defaults, and ignore further request to change the tuning
+         options.  */
+      goto fail;
+    }
+
+  table->n_buckets = compute_bucket_size (candidate, tuning);
+  if (!table->n_buckets)
+    goto fail;
+
+  table->bucket = calloc (table->n_buckets, sizeof *table->bucket);
+  if (table->bucket == NULL)
+    goto fail;
+  table->bucket_limit = table->bucket + table->n_buckets;
+  table->n_buckets_used = 0;
+  table->n_entries = 0;
+
+  table->hasher = hasher;
+  table->comparator = comparator;
+  table->data_freer = data_freer;
+
+  table->free_entry_list = NULL;
+#if USE_OBSTACK
+  obstack_init (&table->entry_stack);
+#endif
+  return table;
+
+ fail:
+  free (table);
+  return NULL;
+}
+
+/* Make all buckets empty, placing any chained entries on the free list.
+   Apply the user-specified function data_freer (if any) to the datas of any
+   affected entries.  */
+
+void
+hash_clear (Hash_table *table)
+{
+  struct hash_entry *bucket;
+
+  for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
+    {
+      if (bucket->data)
+        {
+          struct hash_entry *cursor;
+          struct hash_entry *next;
+
+          /* Free the bucket overflow.  */
+          for (cursor = bucket->next; cursor; cursor = next)
+            {
+              if (table->data_freer)
+                table->data_freer (cursor->data);
+              cursor->data = NULL;
+
+              next = cursor->next;
+              /* Relinking is done one entry at a time, as it is to be expected
+                 that overflows are either rare or short.  */
+              cursor->next = table->free_entry_list;
+              table->free_entry_list = cursor;
+            }
+
+          /* Free the bucket head.  */
+          if (table->data_freer)
+            table->data_freer (bucket->data);
+          bucket->data = NULL;
+          bucket->next = NULL;
+        }
+    }
+
+  table->n_buckets_used = 0;
+  table->n_entries = 0;
+}
+
+/* Reclaim all storage associated with a hash table.  If a data_freer
+   function has been supplied by the user when the hash table was created,
+   this function applies it to the data of each entry before freeing that
+   entry.  */
+
+void
+hash_free (Hash_table *table)
+{
+  struct hash_entry *bucket;
+  struct hash_entry *cursor;
+  struct hash_entry *next;
+
+  /* Call the user data_freer function.  */
+  if (table->data_freer && table->n_entries)
+    {
+      for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
+        {
+          if (bucket->data)
+            {
+              for (cursor = bucket; cursor; cursor = cursor->next)
+                table->data_freer (cursor->data);
+            }
+        }
+    }
+
+#if USE_OBSTACK
+
+  obstack_free (&table->entry_stack, NULL);
+
+#else
+
+  /* Free all bucket overflowed entries.  */
+  for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
+    {
+      for (cursor = bucket->next; cursor; cursor = next)
+        {
+          next = cursor->next;
+          free (cursor);
+        }
+    }
+
+  /* Also reclaim the internal list of previously freed entries.  */
+  for (cursor = table->free_entry_list; cursor; cursor = next)
+    {
+      next = cursor->next;
+      free (cursor);
+    }
+
+#endif
+
+  /* Free the remainder of the hash table structure.  */
+  free (table->bucket);
+  free (table);
+}
+
+/* Insertion and deletion.  */
+
+/* Get a new hash entry for a bucket overflow, possibly by recycling a
+   previously freed one.  If this is not possible, allocate a new one.  */
+
+static struct hash_entry *
+allocate_entry (Hash_table *table)
+{
+  struct hash_entry *new;
+
+  if (table->free_entry_list)
+    {
+      new = table->free_entry_list;
+      table->free_entry_list = new->next;
+    }
+  else
+    {
+#if USE_OBSTACK
+      new = obstack_alloc (&table->entry_stack, sizeof *new);
+#else
+      new = malloc (sizeof *new);
+#endif
+    }
+
+  return new;
+}
+
+/* Free a hash entry which was part of some bucket overflow,
+   saving it for later recycling.  */
+
+static void
+free_entry (Hash_table *table, struct hash_entry *entry)
+{
+  entry->data = NULL;
+  entry->next = table->free_entry_list;
+  table->free_entry_list = entry;
+}
+
+/* This private function is used to help with insertion and deletion.  When
+   ENTRY matches an entry in the table, return a pointer to the corresponding
+   user data and set *BUCKET_HEAD to the head of the selected bucket.
+   Otherwise, return NULL.  When DELETE is true and ENTRY matches an entry in
+   the table, unlink the matching entry.  */
+
+static void *
+hash_find_entry (Hash_table *table, const void *entry,
+                 struct hash_entry **bucket_head, bool delete)
+{
+  struct hash_entry *bucket
+    = table->bucket + table->hasher (entry, table->n_buckets);
+  struct hash_entry *cursor;
+
+  if (! (bucket < table->bucket_limit))
+    abort ();
+
+  *bucket_head = bucket;
+
+  /* Test for empty bucket.  */
+  if (bucket->data == NULL)
+    return NULL;
+
+  /* See if the entry is the first in the bucket.  */
+  if (entry == bucket->data || table->comparator (entry, bucket->data))
+    {
+      void *data = bucket->data;
+
+      if (delete)
+        {
+          if (bucket->next)
+            {
+              struct hash_entry *next = bucket->next;
+
+              /* Bump the first overflow entry into the bucket head, then save
+                 the previous first overflow entry for later recycling.  */
+              *bucket = *next;
+              free_entry (table, next);
+            }
+          else
+            {
+              bucket->data = NULL;
+            }
+        }
+
+      return data;
+    }
+
+  /* Scan the bucket overflow.  */
+  for (cursor = bucket; cursor->next; cursor = cursor->next)
+    {
+      if (entry == cursor->next->data
+          || table->comparator (entry, cursor->next->data))
+        {
+          void *data = cursor->next->data;
+
+          if (delete)
+            {
+              struct hash_entry *next = cursor->next;
+
+              /* Unlink the entry to delete, then save the freed entry for later
+                 recycling.  */
+              cursor->next = next->next;
+              free_entry (table, next);
+            }
+
+          return data;
+        }
+    }
+
+  /* No entry found.  */
+  return NULL;
+}
+
+/* Internal helper, to move entries from SRC to DST.  Both tables must
+   share the same free entry list.  If SAFE, only move overflow
+   entries, saving bucket heads for later, so that no allocations will
+   occur.  Return false if the free entry list is exhausted and an
+   allocation fails.  */
+
+static bool
+transfer_entries (Hash_table *dst, Hash_table *src, bool safe)
+{
+  struct hash_entry *bucket;
+  struct hash_entry *cursor;
+  struct hash_entry *next;
+  for (bucket = src->bucket; bucket < src->bucket_limit; bucket++)
+    if (bucket->data)
+      {
+        void *data;
+        struct hash_entry *new_bucket;
+
+        /* Within each bucket, transfer overflow entries first and
+           then the bucket head, to minimize memory pressure.  After
+           all, the only time we might allocate is when moving the
+           bucket head, but moving overflow entries first may create
+           free entries that can be recycled by the time we finally
+           get to the bucket head.  */
+        for (cursor = bucket->next; cursor; cursor = next)
+          {
+            data = cursor->data;
+            new_bucket = (dst->bucket + dst->hasher (data, dst->n_buckets));
+
+            if (! (new_bucket < dst->bucket_limit))
+              abort ();
+
+            next = cursor->next;
+
+            if (new_bucket->data)
+              {
+                /* Merely relink an existing entry, when moving from a
+                   bucket overflow into a bucket overflow.  */
+                cursor->next = new_bucket->next;
+                new_bucket->next = cursor;
+              }
+            else
+              {
+                /* Free an existing entry, when moving from a bucket
+                   overflow into a bucket header.  */
+                new_bucket->data = data;
+                dst->n_buckets_used++;
+                free_entry (dst, cursor);
+              }
+          }
+        /* Now move the bucket head.  Be sure that if we fail due to
+           allocation failure that the src table is in a consistent
+           state.  */
+        data = bucket->data;
+        bucket->next = NULL;
+        if (safe)
+          continue;
+        new_bucket = (dst->bucket + dst->hasher (data, dst->n_buckets));
+
+        if (! (new_bucket < dst->bucket_limit))
+          abort ();
+
+        if (new_bucket->data)
+          {
+            /* Allocate or recycle an entry, when moving from a bucket
+               header into a bucket overflow.  */
+            struct hash_entry *new_entry = allocate_entry (dst);
+
+            if (new_entry == NULL)
+              return false;
+
+            new_entry->data = data;
+            new_entry->next = new_bucket->next;
+            new_bucket->next = new_entry;
+          }
+        else
+          {
+            /* Move from one bucket header to another.  */
+            new_bucket->data = data;
+            dst->n_buckets_used++;
+          }
+        bucket->data = NULL;
+        src->n_buckets_used--;
+      }
+  return true;
+}
+
+/* For an already existing hash table, change the number of buckets through
+   specifying CANDIDATE.  The contents of the hash table are preserved.  The
+   new number of buckets is automatically selected so as to _guarantee_ that
+   the table may receive at least CANDIDATE different user entries, including
+   those already in the table, before any other growth of the hash table size
+   occurs.  If TUNING->IS_N_BUCKETS is true, then CANDIDATE specifies the
+   exact number of buckets desired.  Return true iff the rehash succeeded.  */
+
+bool
+hash_rehash (Hash_table *table, size_t candidate)
+{
+  Hash_table storage;
+  Hash_table *new_table;
+  size_t new_size = compute_bucket_size (candidate, table->tuning);
+
+  if (!new_size)
+    return false;
+  if (new_size == table->n_buckets)
+    return true;
+  new_table = &storage;
+  new_table->bucket = calloc (new_size, sizeof *new_table->bucket);
+  if (new_table->bucket == NULL)
+    return false;
+  new_table->n_buckets = new_size;
+  new_table->bucket_limit = new_table->bucket + new_size;
+  new_table->n_buckets_used = 0;
+  new_table->n_entries = 0;
+  new_table->tuning = table->tuning;
+  new_table->hasher = table->hasher;
+  new_table->comparator = table->comparator;
+  new_table->data_freer = table->data_freer;
+
+  /* In order for the transfer to successfully complete, we need
+     additional overflow entries when distinct buckets in the old
+     table collide into a common bucket in the new table.  The worst
+     case possible is a hasher that gives a good spread with the old
+     size, but returns a constant with the new size; if we were to
+     guarantee table->n_buckets_used-1 free entries in advance, then
+     the transfer would be guaranteed to not allocate memory.
+     However, for large tables, a guarantee of no further allocation
+     introduces a lot of extra memory pressure, all for an unlikely
+     corner case (most rehashes reduce, rather than increase, the
+     number of overflow entries needed).  So, we instead ensure that
+     the transfer process can be reversed if we hit a memory
+     allocation failure mid-transfer.  */
+
+  /* Merely reuse the extra old space into the new table.  */
+#if USE_OBSTACK
+  new_table->entry_stack = table->entry_stack;
+#endif
+  new_table->free_entry_list = table->free_entry_list;
+
+  if (transfer_entries (new_table, table, false))
+    {
+      /* Entries transferred successfully; tie up the loose ends.  */
+      free (table->bucket);
+      table->bucket = new_table->bucket;
+      table->bucket_limit = new_table->bucket_limit;
+      table->n_buckets = new_table->n_buckets;
+      table->n_buckets_used = new_table->n_buckets_used;
+      table->free_entry_list = new_table->free_entry_list;
+      /* table->n_entries and table->entry_stack already hold their value.  */
+      return true;
+    }
+
+  /* We've allocated new_table->bucket (and possibly some entries),
+     exhausted the free list, and moved some but not all entries into
+     new_table.  We must undo the partial move before returning
+     failure.  The only way to get into this situation is if new_table
+     uses fewer buckets than the old table, so we will reclaim some
+     free entries as overflows in the new table are put back into
+     distinct buckets in the old table.
+
+     There are some pathological cases where a single pass through the
+     table requires more intermediate overflow entries than using two
+     passes.  Two passes give worse cache performance and takes
+     longer, but at this point, we're already out of memory, so slow
+     and safe is better than failure.  */
+  table->free_entry_list = new_table->free_entry_list;
+  if (! (transfer_entries (table, new_table, true)
+         && transfer_entries (table, new_table, false)))
+    abort ();
+  /* table->n_entries already holds its value.  */
+  free (new_table->bucket);
+  return false;
+}
+
+/* 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.
+   This implementation does not support duplicate entries or insertion of
+   NULL.  */
+
+void *
+hash_insert (Hash_table *table, const void *entry)
+{
+  void *data;
+  struct hash_entry *bucket;
+
+  /* The caller cannot insert a NULL entry.  */
+  if (! entry)
+    abort ();
+
+  /* If there's a matching entry already in the table, return that.  */
+  if ((data = hash_find_entry (table, entry, &bucket, false)) != NULL)
+    return data;
+
+  /* If the growth threshold of the buckets in use has been reached, increase
+     the table size and rehash.  There's no point in checking the number of
+     entries:  if the hashing function is ill-conditioned, rehashing is not
+     likely to improve it.  */
+
+  if (table->n_buckets_used
+      > table->tuning->growth_threshold * table->n_buckets)
+    {
+      /* Check more fully, before starting real work.  If tuning arguments
+         became invalid, the second check will rely on proper defaults.  */
+      check_tuning (table);
+      if (table->n_buckets_used
+          > table->tuning->growth_threshold * table->n_buckets)
+        {
+          const Hash_tuning *tuning = table->tuning;
+          float candidate =
+            (tuning->is_n_buckets
+             ? (table->n_buckets * tuning->growth_factor)
+             : (table->n_buckets * tuning->growth_factor
+                * tuning->growth_threshold));
+
+          if (SIZE_MAX <= candidate)
+            return NULL;
+
+          /* If the rehash fails, arrange to return NULL.  */
+          if (!hash_rehash (table, candidate))
+            return NULL;
+
+          /* Update the bucket we are interested in.  */
+          if (hash_find_entry (table, entry, &bucket, false) != NULL)
+            abort ();
+        }
+    }
+
+  /* ENTRY is not matched, it should be inserted.  */
+
+  if (bucket->data)
+    {
+      struct hash_entry *new_entry = allocate_entry (table);
+
+      if (new_entry == NULL)
+        return NULL;
+
+      /* Add ENTRY in the overflow of the bucket.  */
+
+      new_entry->data = (void *) entry;
+      new_entry->next = bucket->next;
+      bucket->next = new_entry;
+      table->n_entries++;
+      return (void *) entry;
+    }
+
+  /* Add ENTRY right in the bucket head.  */
+
+  bucket->data = (void *) entry;
+  table->n_entries++;
+  table->n_buckets_used++;
+
+  return (void *) entry;
+}
+
+/* If ENTRY is already in the table, remove it and return the just-deleted
+   data (the user may want to deallocate its storage).  If ENTRY is not in the
+   table, don't modify the table and return NULL.  */
+
+void *
+hash_delete (Hash_table *table, const void *entry)
+{
+  void *data;
+  struct hash_entry *bucket;
+
+  data = hash_find_entry (table, entry, &bucket, true);
+  if (!data)
+    return NULL;
+
+  table->n_entries--;
+  if (!bucket->data)
+    {
+      table->n_buckets_used--;
+
+      /* If the shrink threshold of the buckets in use has been reached,
+         rehash into a smaller table.  */
+
+      if (table->n_buckets_used
+          < table->tuning->shrink_threshold * table->n_buckets)
+        {
+          /* Check more fully, before starting real work.  If tuning arguments
+             became invalid, the second check will rely on proper defaults.  */
+          check_tuning (table);
+          if (table->n_buckets_used
+              < table->tuning->shrink_threshold * table->n_buckets)
+            {
+              const Hash_tuning *tuning = table->tuning;
+              size_t candidate =
+                (tuning->is_n_buckets
+                 ? table->n_buckets * tuning->shrink_factor
+                 : (table->n_buckets * tuning->shrink_factor
+                    * tuning->growth_threshold));
+
+              if (!hash_rehash (table, candidate))
+                {
+                  /* Failure to allocate memory in an attempt to
+                     shrink the table is not fatal.  But since memory
+                     is low, we can at least be kind and free any
+                     spare entries, rather than keeping them tied up
+                     in the free entry list.  */
+#if ! USE_OBSTACK
+                  struct hash_entry *cursor = table->free_entry_list;
+                  struct hash_entry *next;
+                  while (cursor)
+                    {
+                      next = cursor->next;
+                      free (cursor);
+                      cursor = next;
+                    }
+                  table->free_entry_list = NULL;
+#endif
+                }
+            }
+        }
+    }
+
+  return data;
+}
+
+/* Testing.  */
+
+#if TESTING
+
+void
+hash_print (const Hash_table *table)
+{
+  struct hash_entry *bucket = (struct hash_entry *) table->bucket;
+
+  for ( ; bucket < table->bucket_limit; bucket++)
+    {
+      struct hash_entry *cursor;
+
+      if (bucket)
+        printf ("%lu:\n", (unsigned long int) (bucket - table->bucket));
+
+      for (cursor = bucket; cursor; cursor = cursor->next)
+        {
+          char const *s = cursor->data;
+          /* FIXME */
+          if (s)
+            printf ("  %s\n", s);
+        }
+    }
+}
+
+#endif /* TESTING */
diff --git a/gnu/hash.h b/gnu/hash.h
new file mode 100644 (file)
index 0000000..9db3374
--- /dev/null
@@ -0,0 +1,95 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* hash - hashing table processing.
+   Copyright (C) 1998-1999, 2001, 2003, 2009-2010 Free Software Foundation,
+   Inc.
+   Written by Jim Meyering <meyering@ascend.com>, 1998.
+
+   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/>.  */
+
+/* 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.  */
+
+#ifndef HASH_H_
+# define HASH_H_
+
+# include <stdio.h>
+# include <stdbool.h>
+
+/* The warn_unused_result attribute appeared first in gcc-3.4.0 */
+# ifndef __attribute__
+#  if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 4)
+#   define __attribute__(x)
+#  endif
+# endif
+
+# ifndef ATTRIBUTE_WUR
+#  define ATTRIBUTE_WUR __attribute__ ((__warn_unused_result__))
+# endif
+
+typedef size_t (*Hash_hasher) (const void *, size_t);
+typedef bool (*Hash_comparator) (const void *, const void *);
+typedef void (*Hash_data_freer) (void *);
+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.  */
+
+    float shrink_threshold;     /* ratio of used buckets to trigger a shrink */
+    float shrink_factor;        /* ratio of new smaller size to original size */
+    float growth_threshold;     /* ratio of used buckets to trigger a growth */
+    float growth_factor;        /* ratio of new bigger size to original size */
+    bool is_n_buckets;          /* if CANDIDATE really means table size */
+  };
+
+typedef struct hash_tuning Hash_tuning;
+
+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 *);
+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_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);
+void hash_reset_tuning (Hash_tuning *);
+Hash_table *hash_initialize (size_t, const Hash_tuning *,
+                             Hash_hasher, Hash_comparator,
+                             Hash_data_freer) ATTRIBUTE_WUR;
+void hash_clear (Hash_table *);
+void hash_free (Hash_table *);
+
+/* Insertion and deletion.  */
+bool hash_rehash (Hash_table *, size_t) ATTRIBUTE_WUR;
+void *hash_insert (Hash_table *, const void *) ATTRIBUTE_WUR;
+void *hash_delete (Hash_table *, const void *);
+
+#endif
diff --git a/gnu/human.c b/gnu/human.c
new file mode 100644 (file)
index 0000000..04c8f9c
--- /dev/null
@@ -0,0 +1,473 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* human.c -- print human readable file size
+
+   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+   2006, 2007, 2009, 2010 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 and Larry McVoy.  */
+
+#include <config.h>
+
+#include "human.h"
+
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <argmatch.h>
+#include <error.h>
+#include <intprops.h>
+
+/* The maximum length of a suffix like "KiB".  */
+#define HUMAN_READABLE_SUFFIX_LENGTH_MAX 3
+
+static const char power_letter[] =
+{
+  0,    /* not used */
+  'K',  /* kibi ('k' for kilo is a special case) */
+  'M',  /* mega or mebi */
+  'G',  /* giga or gibi */
+  'T',  /* tera or tebi */
+  'P',  /* peta or pebi */
+  'E',  /* exa or exbi */
+  'Z',  /* zetta or 2**70 */
+  'Y'   /* yotta or 2**80 */
+};
+
+
+/* If INEXACT_STYLE is not human_round_to_nearest, and if easily
+   possible, adjust VALUE according to the style.  */
+
+static long double
+adjust_value (int inexact_style, long double value)
+{
+  /* Do not use the floorl or ceill functions, as that would mean
+     checking for their presence and possibly linking with the
+     standard math library, which is a porting pain.  So leave the
+     value alone if it is too large to easily round.  */
+  if (inexact_style != human_round_to_nearest && value < UINTMAX_MAX)
+    {
+      uintmax_t u = value;
+      value = u + (inexact_style == human_ceiling && u != value);
+    }
+
+  return value;
+}
+
+/* Group the digits of NUMBER according to the grouping rules of the
+   current locale.  NUMBER contains NUMBERLEN digits.  Modify the
+   bytes pointed to by NUMBER in place, subtracting 1 from NUMBER for
+   each byte inserted.  Return the starting address of the modified
+   number.
+
+   To group the digits, use GROUPING and THOUSANDS_SEP as in `struct
+   lconv' from <locale.h>.  */
+
+static char *
+group_number (char *number, size_t numberlen,
+              char const *grouping, char const *thousands_sep)
+{
+  register char *d;
+  size_t grouplen = SIZE_MAX;
+  size_t thousands_seplen = strlen (thousands_sep);
+  size_t i = numberlen;
+
+  /* The maximum possible value for NUMBERLEN is the number of digits
+     in the square of the largest uintmax_t, so double the size needed.  */
+  char buf[2 * INT_STRLEN_BOUND (uintmax_t) + 1];
+
+  memcpy (buf, number, numberlen);
+  d = number + numberlen;
+
+  for (;;)
+    {
+      unsigned char g = *grouping;
+
+      if (g)
+        {
+          grouplen = g < CHAR_MAX ? g : i;
+          grouping++;
+        }
+
+      if (i < grouplen)
+        grouplen = i;
+
+      d -= grouplen;
+      i -= grouplen;
+      memcpy (d, buf + i, grouplen);
+      if (i == 0)
+        return d;
+
+      d -= thousands_seplen;
+      memcpy (d, thousands_sep, thousands_seplen);
+    }
+}
+
+/* Convert N to a human readable format in BUF, using the options OPTS.
+
+   N is expressed in units of FROM_BLOCK_SIZE.  FROM_BLOCK_SIZE must
+   be nonnegative.
+
+   Use units of TO_BLOCK_SIZE in the output number.  TO_BLOCK_SIZE
+   must be positive.
+
+   Use (OPTS & (human_round_to_nearest | human_floor | human_ceiling))
+   to determine whether to take the ceiling or floor of any result
+   that cannot be expressed exactly.
+
+   If (OPTS & human_group_digits), group the thousands digits
+   according to the locale, e.g., `1,000,000' in an American English
+   locale.
+
+   If (OPTS & human_autoscale), deduce the output block size
+   automatically; TO_BLOCK_SIZE must be 1 but it has no effect on the
+   output.  Use powers of 1024 if (OPTS & human_base_1024), and powers
+   of 1000 otherwise.  For example, assuming powers of 1024, 8500
+   would be converted to 8.3, 133456345 to 127, 56990456345 to 53, and
+   so on.  Numbers smaller than the power aren't modified.
+   human_autoscale is normally used together with human_SI.
+
+   If (OPTS & human_space_before_unit), use a space to separate the
+   number from any suffix that is appended as described below.
+
+   If (OPTS & human_SI), append an SI prefix indicating which power is
+   being used.  If in addition (OPTS & human_B), append "B" (if base
+   1000) or "iB" (if base 1024) to the SI prefix.  When ((OPTS &
+   human_SI) && ! (OPTS & human_autoscale)), TO_BLOCK_SIZE must be a
+   power of 1024 or of 1000, depending on (OPTS &
+   human_base_1024).  */
+
+char *
+human_readable (uintmax_t n, char *buf, int opts,
+                uintmax_t from_block_size, uintmax_t to_block_size)
+{
+  int inexact_style =
+    opts & (human_round_to_nearest | human_floor | human_ceiling);
+  unsigned int base = opts & human_base_1024 ? 1024 : 1000;
+  uintmax_t amt;
+  int tenths;
+  int exponent = -1;
+  int exponent_max = sizeof power_letter - 1;
+  char *p;
+  char *psuffix;
+  char const *integerlim;
+
+  /* 0 means adjusted N == AMT.TENTHS;
+     1 means AMT.TENTHS < adjusted N < AMT.TENTHS + 0.05;
+     2 means adjusted N == AMT.TENTHS + 0.05;
+     3 means AMT.TENTHS + 0.05 < adjusted N < AMT.TENTHS + 0.1.  */
+  int rounding;
+
+  char const *decimal_point = ".";
+  size_t decimal_pointlen = 1;
+  char const *grouping = "";
+  char const *thousands_sep = "";
+  struct lconv const *l = localeconv ();
+  size_t pointlen = strlen (l->decimal_point);
+  if (0 < pointlen && pointlen <= MB_LEN_MAX)
+    {
+      decimal_point = l->decimal_point;
+      decimal_pointlen = pointlen;
+    }
+  grouping = l->grouping;
+  if (strlen (l->thousands_sep) <= MB_LEN_MAX)
+    thousands_sep = l->thousands_sep;
+
+  psuffix = buf + LONGEST_HUMAN_READABLE - HUMAN_READABLE_SUFFIX_LENGTH_MAX;
+  p = psuffix;
+
+  /* Adjust AMT out of FROM_BLOCK_SIZE units and into TO_BLOCK_SIZE
+     units.  If this can be done exactly with integer arithmetic, do
+     not use floating point operations.  */
+  if (to_block_size <= from_block_size)
+    {
+      if (from_block_size % to_block_size == 0)
+        {
+          uintmax_t multiplier = from_block_size / to_block_size;
+          amt = n * multiplier;
+          if (amt / multiplier == n)
+            {
+              tenths = 0;
+              rounding = 0;
+              goto use_integer_arithmetic;
+            }
+        }
+    }
+  else if (from_block_size != 0 && to_block_size % from_block_size == 0)
+    {
+      uintmax_t divisor = to_block_size / from_block_size;
+      uintmax_t r10 = (n % divisor) * 10;
+      uintmax_t r2 = (r10 % divisor) * 2;
+      amt = n / divisor;
+      tenths = r10 / divisor;
+      rounding = r2 < divisor ? 0 < r2 : 2 + (divisor < r2);
+      goto use_integer_arithmetic;
+    }
+
+  {
+    /* Either the result cannot be computed easily using uintmax_t,
+       or from_block_size is zero.  Fall back on floating point.
+       FIXME: This can yield answers that are slightly off.  */
+
+    long double dto_block_size = to_block_size;
+    long double damt = n * (from_block_size / dto_block_size);
+    size_t buflen;
+    size_t nonintegerlen;
+
+    if (! (opts & human_autoscale))
+      {
+        sprintf (buf, "%.0Lf", adjust_value (inexact_style, damt));
+        buflen = strlen (buf);
+        nonintegerlen = 0;
+      }
+    else
+      {
+        long double e = 1;
+        exponent = 0;
+
+        do
+          {
+            e *= base;
+            exponent++;
+          }
+        while (e * base <= damt && exponent < exponent_max);
+
+        damt /= e;
+
+        sprintf (buf, "%.1Lf", adjust_value (inexact_style, damt));
+        buflen = strlen (buf);
+        nonintegerlen = decimal_pointlen + 1;
+
+        if (1 + nonintegerlen + ! (opts & human_base_1024) < buflen
+            || ((opts & human_suppress_point_zero)
+                && buf[buflen - 1] == '0'))
+          {
+            sprintf (buf, "%.0Lf",
+                     adjust_value (inexact_style, damt * 10) / 10);
+            buflen = strlen (buf);
+            nonintegerlen = 0;
+          }
+      }
+
+    p = psuffix - buflen;
+    memmove (p, buf, buflen);
+    integerlim = p + buflen - nonintegerlen;
+  }
+  goto do_grouping;
+
+ use_integer_arithmetic:
+  {
+    /* The computation can be done exactly, with integer arithmetic.
+
+       Use power of BASE notation if requested and if adjusted AMT is
+       large enough.  */
+
+    if (opts & human_autoscale)
+      {
+        exponent = 0;
+
+        if (base <= amt)
+          {
+            do
+              {
+                unsigned int r10 = (amt % base) * 10 + tenths;
+                unsigned int r2 = (r10 % base) * 2 + (rounding >> 1);
+                amt /= base;
+                tenths = r10 / base;
+                rounding = (r2 < base
+                            ? (r2 + rounding) != 0
+                            : 2 + (base < r2 + rounding));
+                exponent++;
+              }
+            while (base <= amt && exponent < exponent_max);
+
+            if (amt < 10)
+              {
+                if (inexact_style == human_round_to_nearest
+                    ? 2 < rounding + (tenths & 1)
+                    : inexact_style == human_ceiling && 0 < rounding)
+                  {
+                    tenths++;
+                    rounding = 0;
+
+                    if (tenths == 10)
+                      {
+                        amt++;
+                        tenths = 0;
+                      }
+                  }
+
+                if (amt < 10
+                    && (tenths || ! (opts & human_suppress_point_zero)))
+                  {
+                    *--p = '0' + tenths;
+                    p -= decimal_pointlen;
+                    memcpy (p, decimal_point, decimal_pointlen);
+                    tenths = rounding = 0;
+                  }
+              }
+          }
+      }
+
+    if (inexact_style == human_round_to_nearest
+        ? 5 < tenths + (0 < rounding + (amt & 1))
+        : inexact_style == human_ceiling && 0 < tenths + rounding)
+      {
+        amt++;
+
+        if ((opts & human_autoscale)
+            && amt == base && exponent < exponent_max)
+          {
+            exponent++;
+            if (! (opts & human_suppress_point_zero))
+              {
+                *--p = '0';
+                p -= decimal_pointlen;
+                memcpy (p, decimal_point, decimal_pointlen);
+              }
+            amt = 1;
+          }
+      }
+
+    integerlim = p;
+
+    do
+      {
+        int digit = amt % 10;
+        *--p = digit + '0';
+      }
+    while ((amt /= 10) != 0);
+  }
+
+ do_grouping:
+  if (opts & human_group_digits)
+    p = group_number (p, integerlim - p, grouping, thousands_sep);
+
+  if (opts & human_SI)
+    {
+      if (exponent < 0)
+        {
+          uintmax_t power;
+          exponent = 0;
+          for (power = 1; power < to_block_size; power *= base)
+            if (++exponent == exponent_max)
+              break;
+        }
+
+      if ((exponent | (opts & human_B)) && (opts & human_space_before_unit))
+        *psuffix++ = ' ';
+
+      if (exponent)
+        *psuffix++ = (! (opts & human_base_1024) && exponent == 1
+                      ? 'k'
+                      : power_letter[exponent]);
+
+      if (opts & human_B)
+        {
+          if ((opts & human_base_1024) && exponent)
+            *psuffix++ = 'i';
+          *psuffix++ = 'B';
+        }
+    }
+
+  *psuffix = '\0';
+
+  return p;
+}
+
+
+/* The default block size used for output.  This number may change in
+   the future as disks get larger.  */
+#ifndef DEFAULT_BLOCK_SIZE
+# define DEFAULT_BLOCK_SIZE 1024
+#endif
+
+static char const *const block_size_args[] = { "human-readable", "si", 0 };
+static int const block_size_opts[] =
+  {
+    human_autoscale + human_SI + human_base_1024,
+    human_autoscale + human_SI
+  };
+
+static uintmax_t
+default_block_size (void)
+{
+  return getenv ("POSIXLY_CORRECT") ? 512 : DEFAULT_BLOCK_SIZE;
+}
+
+static strtol_error
+humblock (char const *spec, uintmax_t *block_size, int *options)
+{
+  int i;
+  int opts = 0;
+
+  if (! spec
+      && ! (spec = getenv ("BLOCK_SIZE"))
+      && ! (spec = getenv ("BLOCKSIZE")))
+    *block_size = default_block_size ();
+  else
+    {
+      if (*spec == '\'')
+        {
+          opts |= human_group_digits;
+          spec++;
+        }
+
+      if (0 <= (i = ARGMATCH (spec, block_size_args, block_size_opts)))
+        {
+          opts |= block_size_opts[i];
+          *block_size = 1;
+        }
+      else
+        {
+          char *ptr;
+          strtol_error e = xstrtoumax (spec, &ptr, 0, block_size,
+                                       "eEgGkKmMpPtTyYzZ0");
+          if (e != LONGINT_OK)
+            {
+              *options = 0;
+              return e;
+            }
+          for (; ! ('0' <= *spec && *spec <= '9'); spec++)
+            if (spec == ptr)
+              {
+                opts |= human_SI;
+                if (ptr[-1] == 'B')
+                  opts |= human_B;
+                if (ptr[-1] != 'B' || ptr[-2] == 'i')
+                  opts |= human_base_1024;
+                break;
+              }
+        }
+    }
+
+  *options = opts;
+  return LONGINT_OK;
+}
+
+enum strtol_error
+human_options (char const *spec, int *opts, uintmax_t *block_size)
+{
+  strtol_error e = humblock (spec, block_size, opts);
+  if (*block_size == 0)
+    {
+      *block_size = default_block_size ();
+      e = LONGINT_INVALID;
+    }
+  return e;
+}
diff --git a/gnu/human.h b/gnu/human.h
new file mode 100644 (file)
index 0000000..5d3f0c6
--- /dev/null
@@ -0,0 +1,86 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* human.h -- print human readable file size
+
+   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+   2006, 2007, 2009, 2010 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 and Larry McVoy.  */
+
+#ifndef HUMAN_H_
+# define HUMAN_H_ 1
+
+# include <limits.h>
+# include <stdbool.h>
+# include <stdint.h>
+# include <unistd.h>
+
+# include <xstrtol.h>
+
+/* A conservative bound on the maximum length of a human-readable string.
+   The output can be the square of the largest uintmax_t, so double
+   its size before converting to a bound.
+   log10 (2.0) < 146/485.  Add 1 for integer division truncation.
+   Also, the output can have a thousands separator between every digit,
+   so multiply by MB_LEN_MAX + 1 and then subtract MB_LEN_MAX.
+   Append 1 for a space before the suffix.
+   Finally, append 3, the maximum length of a suffix.  */
+# define LONGEST_HUMAN_READABLE \
+  ((2 * sizeof (uintmax_t) * CHAR_BIT * 146 / 485 + 1) * (MB_LEN_MAX + 1) \
+   - MB_LEN_MAX + 1 + 3)
+
+/* Options for human_readable.  */
+enum
+{
+  /* Unless otherwise specified these options may be ORed together.  */
+
+  /* The following three options are mutually exclusive.  */
+  /* Round to plus infinity (default).  */
+  human_ceiling = 0,
+  /* Round to nearest, ties to even.  */
+  human_round_to_nearest = 1,
+  /* Round to minus infinity.  */
+  human_floor = 2,
+
+  /* Group digits together, e.g. `1,000,000'.  This uses the
+     locale-defined grouping; the traditional C locale does not group,
+     so this has effect only if some other locale is in use.  */
+  human_group_digits = 4,
+
+  /* When autoscaling, suppress ".0" at end.  */
+  human_suppress_point_zero = 8,
+
+  /* Scale output and use SI-style units, ignoring the output block size.  */
+  human_autoscale = 16,
+
+  /* Prefer base 1024 to base 1000.  */
+  human_base_1024 = 32,
+
+  /* Prepend " " before unit symbol.  */
+  human_space_before_unit = 64,
+
+  /* Append SI prefix, e.g. "k" or "M".  */
+  human_SI = 128,
+
+  /* Append "B" (if base 1000) or "iB" (if base 1024) to SI prefix.  */
+  human_B = 256
+};
+
+char *human_readable (uintmax_t, char *, int, uintmax_t, uintmax_t);
+
+enum strtol_error human_options (char const *, int *, uintmax_t *);
+
+#endif /* HUMAN_H_ */
diff --git a/gnu/imaxtostr.c b/gnu/imaxtostr.c
new file mode 100644 (file)
index 0000000..af7316d
--- /dev/null
@@ -0,0 +1,6 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+#define inttostr imaxtostr
+#define inttype intmax_t
+#define inttype_is_signed 1
+#include "inttostr.c"
diff --git a/gnu/intprops.h b/gnu/intprops.h
new file mode 100644 (file)
index 0000000..6f3e575
--- /dev/null
@@ -0,0 +1,85 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* intprops.h -- properties of integer types
+
+   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2009, 2010 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_INTPROPS_H
+# define GL_INTPROPS_H
+
+# include <limits.h>
+
+/* The extra casts in the following macros work around compiler bugs,
+   e.g., in Cray C 5.0.3.0.  */
+
+/* True if the arithmetic type T is an integer type.  bool counts as
+   an integer.  */
+# define TYPE_IS_INTEGER(t) ((t) 1.5 == 1)
+
+/* True if negative values of the signed integer type T use two's
+   complement, ones' complement, or signed magnitude representation,
+   respectively.  Much GNU code assumes two's complement, but some
+   people like to be portable to all possible C hosts.  */
+# define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
+# define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
+# define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
+
+/* True if the arithmetic type T is signed.  */
+# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+
+/* The maximum and minimum values for the integer type T.  These
+   macros have undefined behavior if T is signed and has padding bits.
+   If this is a problem for you, please let us know how to fix it for
+   your host.  */
+# define TYPE_MINIMUM(t) \
+  ((t) (! TYPE_SIGNED (t) \
+        ? (t) 0 \
+        : TYPE_SIGNED_MAGNITUDE (t) \
+        ? ~ (t) 0 \
+        : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
+# define TYPE_MAXIMUM(t) \
+  ((t) (! TYPE_SIGNED (t) \
+        ? (t) -1 \
+        : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
+
+/* Return zero if T can be determined to be an unsigned type.
+   Otherwise, return 1.
+   When compiling with GCC, INT_STRLEN_BOUND uses this macro to obtain a
+   tighter bound.  Otherwise, it overestimates the true bound by one byte
+   when applied to unsigned types of size 2, 4, 16, ... bytes.
+   The symbol signed_type_or_expr__ is private to this header file.  */
+# if __GNUC__ >= 2
+#  define signed_type_or_expr__(t) TYPE_SIGNED (__typeof__ (t))
+# else
+#  define signed_type_or_expr__(t) 1
+# endif
+
+/* Bound on length of the string representing an integer type or expression T.
+   Subtract 1 for the sign bit if T is signed; log10 (2.0) < 146/485;
+   add 1 for integer division truncation; add 1 more for a minus sign
+   if needed.  */
+# define INT_STRLEN_BOUND(t) \
+  ((sizeof (t) * CHAR_BIT - signed_type_or_expr__ (t)) * 146 / 485 \
+   + signed_type_or_expr__ (t) + 1)
+
+/* Bound on buffer size needed to represent an integer type or expression T,
+   including the terminating null.  */
+# define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1)
+
+#endif /* GL_INTPROPS_H */
diff --git a/gnu/inttostr.c b/gnu/inttostr.c
new file mode 100644 (file)
index 0000000..d4f99cc
--- /dev/null
@@ -0,0 +1,56 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* inttostr.c -- convert integers to printable strings
+
+   Copyright (C) 2001, 2006, 2008, 2009, 2010 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 */
+
+#include <config.h>
+
+#include "inttostr.h"
+#include "verify.h"
+
+/* Convert I to a printable string in BUF, which must be at least
+   INT_BUFSIZE_BOUND (INTTYPE) bytes long.  Return the address of the
+   printable string, which need not start at BUF.  */
+
+char *
+inttostr (inttype i, char *buf)
+{
+  char *p = buf + INT_STRLEN_BOUND (inttype);
+  *p = 0;
+
+  verify (TYPE_SIGNED (inttype) == inttype_is_signed);
+#if inttype_is_signed
+  if (i < 0)
+    {
+      do
+        *--p = '0' - i % 10;
+      while ((i /= 10) != 0);
+
+      *--p = '-';
+    }
+  else
+#endif
+    {
+      do
+        *--p = '0' + i % 10;
+      while ((i /= 10) != 0);
+    }
+
+  return p;
+}
diff --git a/gnu/inttostr.h b/gnu/inttostr.h
new file mode 100644 (file)
index 0000000..8b6dbce
--- /dev/null
@@ -0,0 +1,47 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* inttostr.h -- convert integers to printable strings
+
+   Copyright (C) 2001-2006, 2009-2010 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 */
+
+#include <stdint.h>
+#include <sys/types.h>
+
+#include "intprops.h"
+
+#ifndef __GNUC_PREREQ
+# if defined __GNUC__ && defined __GNUC_MINOR__
+#  define __GNUC_PREREQ(maj, min) \
+         ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+# else
+#  define __GNUC_PREREQ(maj, min) 0
+# endif
+#endif
+
+#if __GNUC_PREREQ (3,4)
+# undef __attribute_warn_unused_result__
+# define __attribute_warn_unused_result__ \
+   __attribute__ ((__warn_unused_result__))
+#else
+# define __attribute_warn_unused_result__ /* empty */
+#endif
+
+char *offtostr (off_t, char *) __attribute_warn_unused_result__;
+char *imaxtostr (intmax_t, char *) __attribute_warn_unused_result__;
+char *umaxtostr (uintmax_t, char *) __attribute_warn_unused_result__;
+char *uinttostr (unsigned int, char *) __attribute_warn_unused_result__;
diff --git a/gnu/inttypes.in.h b/gnu/inttypes.in.h
new file mode 100644 (file)
index 0000000..27deaa7
--- /dev/null
@@ -0,0 +1,1105 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copyright (C) 2006-2010 Free Software Foundation, Inc.
+   Written by Paul Eggert, Bruno Haible, Derek Price.
+   This file is part of gnulib.
+
+   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/>.  */
+
+/*
+ * ISO C 99 <inttypes.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/inttypes.h.html>
+ */
+
+/* Include the original <inttypes.h> if it exists, and if this file
+   has not been included yet or if this file includes gnulib stdint.h
+   which in turn includes this file.
+   The include_next requires a split double-inclusion guard.  */
+#if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+# if @HAVE_INTTYPES_H@
+#  if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#  endif
+#  @INCLUDE_NEXT@ @NEXT_INTTYPES_H@
+# endif
+#endif
+
+#if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+#define INTTYPES_H
+
+/* Include <stdint.h> or the gnulib replacement.
+   But avoid namespace pollution on glibc systems.  */
+#ifndef __GLIBC__
+# include <stdint.h>
+#endif
+/* Get CHAR_BIT.  */
+#include <limits.h>
+
+#if !(INT_MIN == INT32_MIN && INT_MAX == INT32_MAX)
+# error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>."
+#endif
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+/* 7.8.1 Macros for format specifiers */
+
+#if ! defined __cplusplus || defined __STDC_FORMAT_MACROS
+
+# if defined _TNS_R_TARGET
+   /* Tandem NonStop R series and compatible platforms released before
+      July 2005 support %Ld but not %lld.  */
+#  define _LONG_LONG_FORMAT_PREFIX "L"
+# else
+#  define _LONG_LONG_FORMAT_PREFIX "ll"
+# endif
+
+# if !defined PRId8 || @PRI_MACROS_BROKEN@
+#  undef PRId8
+#  ifdef INT8_MAX
+#   define PRId8 "d"
+#  endif
+# endif
+# if !defined PRIi8 || @PRI_MACROS_BROKEN@
+#  undef PRIi8
+#  ifdef INT8_MAX
+#   define PRIi8 "i"
+#  endif
+# endif
+# if !defined PRIo8 || @PRI_MACROS_BROKEN@
+#  undef PRIo8
+#  ifdef UINT8_MAX
+#   define PRIo8 "o"
+#  endif
+# endif
+# if !defined PRIu8 || @PRI_MACROS_BROKEN@
+#  undef PRIu8
+#  ifdef UINT8_MAX
+#   define PRIu8 "u"
+#  endif
+# endif
+# if !defined PRIx8 || @PRI_MACROS_BROKEN@
+#  undef PRIx8
+#  ifdef UINT8_MAX
+#   define PRIx8 "x"
+#  endif
+# endif
+# if !defined PRIX8 || @PRI_MACROS_BROKEN@
+#  undef PRIX8
+#  ifdef UINT8_MAX
+#   define PRIX8 "X"
+#  endif
+# endif
+# if !defined PRId16 || @PRI_MACROS_BROKEN@
+#  undef PRId16
+#  ifdef INT16_MAX
+#   define PRId16 "d"
+#  endif
+# endif
+# if !defined PRIi16 || @PRI_MACROS_BROKEN@
+#  undef PRIi16
+#  ifdef INT16_MAX
+#   define PRIi16 "i"
+#  endif
+# endif
+# if !defined PRIo16 || @PRI_MACROS_BROKEN@
+#  undef PRIo16
+#  ifdef UINT16_MAX
+#   define PRIo16 "o"
+#  endif
+# endif
+# if !defined PRIu16 || @PRI_MACROS_BROKEN@
+#  undef PRIu16
+#  ifdef UINT16_MAX
+#   define PRIu16 "u"
+#  endif
+# endif
+# if !defined PRIx16 || @PRI_MACROS_BROKEN@
+#  undef PRIx16
+#  ifdef UINT16_MAX
+#   define PRIx16 "x"
+#  endif
+# endif
+# if !defined PRIX16 || @PRI_MACROS_BROKEN@
+#  undef PRIX16
+#  ifdef UINT16_MAX
+#   define PRIX16 "X"
+#  endif
+# endif
+# if !defined PRId32 || @PRI_MACROS_BROKEN@
+#  undef PRId32
+#  ifdef INT32_MAX
+#   define PRId32 "d"
+#  endif
+# endif
+# if !defined PRIi32 || @PRI_MACROS_BROKEN@
+#  undef PRIi32
+#  ifdef INT32_MAX
+#   define PRIi32 "i"
+#  endif
+# endif
+# if !defined PRIo32 || @PRI_MACROS_BROKEN@
+#  undef PRIo32
+#  ifdef UINT32_MAX
+#   define PRIo32 "o"
+#  endif
+# endif
+# if !defined PRIu32 || @PRI_MACROS_BROKEN@
+#  undef PRIu32
+#  ifdef UINT32_MAX
+#   define PRIu32 "u"
+#  endif
+# endif
+# if !defined PRIx32 || @PRI_MACROS_BROKEN@
+#  undef PRIx32
+#  ifdef UINT32_MAX
+#   define PRIx32 "x"
+#  endif
+# endif
+# if !defined PRIX32 || @PRI_MACROS_BROKEN@
+#  undef PRIX32
+#  ifdef UINT32_MAX
+#   define PRIX32 "X"
+#  endif
+# endif
+# ifdef INT64_MAX
+#  if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@)
+#   define _PRI64_PREFIX "l"
+#  elif defined _MSC_VER || defined __MINGW32__
+#   define _PRI64_PREFIX "I64"
+#  elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+#   define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX
+#  endif
+#  if !defined PRId64 || @PRI_MACROS_BROKEN@
+#   undef PRId64
+#   define PRId64 _PRI64_PREFIX "d"
+#  endif
+#  if !defined PRIi64 || @PRI_MACROS_BROKEN@
+#   undef PRIi64
+#   define PRIi64 _PRI64_PREFIX "i"
+#  endif
+# endif
+# ifdef UINT64_MAX
+#  if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@)
+#   define _PRIu64_PREFIX "l"
+#  elif defined _MSC_VER || defined __MINGW32__
+#   define _PRIu64_PREFIX "I64"
+#  elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+#   define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX
+#  endif
+#  if !defined PRIo64 || @PRI_MACROS_BROKEN@
+#   undef PRIo64
+#   define PRIo64 _PRIu64_PREFIX "o"
+#  endif
+#  if !defined PRIu64 || @PRI_MACROS_BROKEN@
+#   undef PRIu64
+#   define PRIu64 _PRIu64_PREFIX "u"
+#  endif
+#  if !defined PRIx64 || @PRI_MACROS_BROKEN@
+#   undef PRIx64
+#   define PRIx64 _PRIu64_PREFIX "x"
+#  endif
+#  if !defined PRIX64 || @PRI_MACROS_BROKEN@
+#   undef PRIX64
+#   define PRIX64 _PRIu64_PREFIX "X"
+#  endif
+# endif
+
+# if !defined PRIdLEAST8 || @PRI_MACROS_BROKEN@
+#  undef PRIdLEAST8
+#  define PRIdLEAST8 "d"
+# endif
+# if !defined PRIiLEAST8 || @PRI_MACROS_BROKEN@
+#  undef PRIiLEAST8
+#  define PRIiLEAST8 "i"
+# endif
+# if !defined PRIoLEAST8 || @PRI_MACROS_BROKEN@
+#  undef PRIoLEAST8
+#  define PRIoLEAST8 "o"
+# endif
+# if !defined PRIuLEAST8 || @PRI_MACROS_BROKEN@
+#  undef PRIuLEAST8
+#  define PRIuLEAST8 "u"
+# endif
+# if !defined PRIxLEAST8 || @PRI_MACROS_BROKEN@
+#  undef PRIxLEAST8
+#  define PRIxLEAST8 "x"
+# endif
+# if !defined PRIXLEAST8 || @PRI_MACROS_BROKEN@
+#  undef PRIXLEAST8
+#  define PRIXLEAST8 "X"
+# endif
+# if !defined PRIdLEAST16 || @PRI_MACROS_BROKEN@
+#  undef PRIdLEAST16
+#  define PRIdLEAST16 "d"
+# endif
+# if !defined PRIiLEAST16 || @PRI_MACROS_BROKEN@
+#  undef PRIiLEAST16
+#  define PRIiLEAST16 "i"
+# endif
+# if !defined PRIoLEAST16 || @PRI_MACROS_BROKEN@
+#  undef PRIoLEAST16
+#  define PRIoLEAST16 "o"
+# endif
+# if !defined PRIuLEAST16 || @PRI_MACROS_BROKEN@
+#  undef PRIuLEAST16
+#  define PRIuLEAST16 "u"
+# endif
+# if !defined PRIxLEAST16 || @PRI_MACROS_BROKEN@
+#  undef PRIxLEAST16
+#  define PRIxLEAST16 "x"
+# endif
+# if !defined PRIXLEAST16 || @PRI_MACROS_BROKEN@
+#  undef PRIXLEAST16
+#  define PRIXLEAST16 "X"
+# endif
+# if !defined PRIdLEAST32 || @PRI_MACROS_BROKEN@
+#  undef PRIdLEAST32
+#  define PRIdLEAST32 "d"
+# endif
+# if !defined PRIiLEAST32 || @PRI_MACROS_BROKEN@
+#  undef PRIiLEAST32
+#  define PRIiLEAST32 "i"
+# endif
+# if !defined PRIoLEAST32 || @PRI_MACROS_BROKEN@
+#  undef PRIoLEAST32
+#  define PRIoLEAST32 "o"
+# endif
+# if !defined PRIuLEAST32 || @PRI_MACROS_BROKEN@
+#  undef PRIuLEAST32
+#  define PRIuLEAST32 "u"
+# endif
+# if !defined PRIxLEAST32 || @PRI_MACROS_BROKEN@
+#  undef PRIxLEAST32
+#  define PRIxLEAST32 "x"
+# endif
+# if !defined PRIXLEAST32 || @PRI_MACROS_BROKEN@
+#  undef PRIXLEAST32
+#  define PRIXLEAST32 "X"
+# endif
+# ifdef INT64_MAX
+#  if !defined PRIdLEAST64 || @PRI_MACROS_BROKEN@
+#   undef PRIdLEAST64
+#   define PRIdLEAST64 PRId64
+#  endif
+#  if !defined PRIiLEAST64 || @PRI_MACROS_BROKEN@
+#   undef PRIiLEAST64
+#   define PRIiLEAST64 PRIi64
+#  endif
+# endif
+# ifdef UINT64_MAX
+#  if !defined PRIoLEAST64 || @PRI_MACROS_BROKEN@
+#   undef PRIoLEAST64
+#   define PRIoLEAST64 PRIo64
+#  endif
+#  if !defined PRIuLEAST64 || @PRI_MACROS_BROKEN@
+#   undef PRIuLEAST64
+#   define PRIuLEAST64 PRIu64
+#  endif
+#  if !defined PRIxLEAST64 || @PRI_MACROS_BROKEN@
+#   undef PRIxLEAST64
+#   define PRIxLEAST64 PRIx64
+#  endif
+#  if !defined PRIXLEAST64 || @PRI_MACROS_BROKEN@
+#   undef PRIXLEAST64
+#   define PRIXLEAST64 PRIX64
+#  endif
+# endif
+
+# if !defined PRIdFAST8 || @PRI_MACROS_BROKEN@
+#  undef PRIdFAST8
+#  if INT_FAST8_MAX > INT32_MAX
+#   define PRIdFAST8 PRId64
+#  else
+#   define PRIdFAST8 "d"
+#  endif
+# endif
+# if !defined PRIiFAST8 || @PRI_MACROS_BROKEN@
+#  undef PRIiFAST8
+#  if INT_FAST8_MAX > INT32_MAX
+#   define PRIiFAST8 PRIi64
+#  else
+#   define PRIiFAST8 "i"
+#  endif
+# endif
+# if !defined PRIoFAST8 || @PRI_MACROS_BROKEN@
+#  undef PRIoFAST8
+#  if UINT_FAST8_MAX > UINT32_MAX
+#   define PRIoFAST8 PRIo64
+#  else
+#   define PRIoFAST8 "o"
+#  endif
+# endif
+# if !defined PRIuFAST8 || @PRI_MACROS_BROKEN@
+#  undef PRIuFAST8
+#  if UINT_FAST8_MAX > UINT32_MAX
+#   define PRIuFAST8 PRIu64
+#  else
+#   define PRIuFAST8 "u"
+#  endif
+# endif
+# if !defined PRIxFAST8 || @PRI_MACROS_BROKEN@
+#  undef PRIxFAST8
+#  if UINT_FAST8_MAX > UINT32_MAX
+#   define PRIxFAST8 PRIx64
+#  else
+#   define PRIxFAST8 "x"
+#  endif
+# endif
+# if !defined PRIXFAST8 || @PRI_MACROS_BROKEN@
+#  undef PRIXFAST8
+#  if UINT_FAST8_MAX > UINT32_MAX
+#   define PRIXFAST8 PRIX64
+#  else
+#   define PRIXFAST8 "X"
+#  endif
+# endif
+# if !defined PRIdFAST16 || @PRI_MACROS_BROKEN@
+#  undef PRIdFAST16
+#  if INT_FAST16_MAX > INT32_MAX
+#   define PRIdFAST16 PRId64
+#  else
+#   define PRIdFAST16 "d"
+#  endif
+# endif
+# if !defined PRIiFAST16 || @PRI_MACROS_BROKEN@
+#  undef PRIiFAST16
+#  if INT_FAST16_MAX > INT32_MAX
+#   define PRIiFAST16 PRIi64
+#  else
+#   define PRIiFAST16 "i"
+#  endif
+# endif
+# if !defined PRIoFAST16 || @PRI_MACROS_BROKEN@
+#  undef PRIoFAST16
+#  if UINT_FAST16_MAX > UINT32_MAX
+#   define PRIoFAST16 PRIo64
+#  else
+#   define PRIoFAST16 "o"
+#  endif
+# endif
+# if !defined PRIuFAST16 || @PRI_MACROS_BROKEN@
+#  undef PRIuFAST16
+#  if UINT_FAST16_MAX > UINT32_MAX
+#   define PRIuFAST16 PRIu64
+#  else
+#   define PRIuFAST16 "u"
+#  endif
+# endif
+# if !defined PRIxFAST16 || @PRI_MACROS_BROKEN@
+#  undef PRIxFAST16
+#  if UINT_FAST16_MAX > UINT32_MAX
+#   define PRIxFAST16 PRIx64
+#  else
+#   define PRIxFAST16 "x"
+#  endif
+# endif
+# if !defined PRIXFAST16 || @PRI_MACROS_BROKEN@
+#  undef PRIXFAST16
+#  if UINT_FAST16_MAX > UINT32_MAX
+#   define PRIXFAST16 PRIX64
+#  else
+#   define PRIXFAST16 "X"
+#  endif
+# endif
+# if !defined PRIdFAST32 || @PRI_MACROS_BROKEN@
+#  undef PRIdFAST32
+#  if INT_FAST32_MAX > INT32_MAX
+#   define PRIdFAST32 PRId64
+#  else
+#   define PRIdFAST32 "d"
+#  endif
+# endif
+# if !defined PRIiFAST32 || @PRI_MACROS_BROKEN@
+#  undef PRIiFAST32
+#  if INT_FAST32_MAX > INT32_MAX
+#   define PRIiFAST32 PRIi64
+#  else
+#   define PRIiFAST32 "i"
+#  endif
+# endif
+# if !defined PRIoFAST32 || @PRI_MACROS_BROKEN@
+#  undef PRIoFAST32
+#  if UINT_FAST32_MAX > UINT32_MAX
+#   define PRIoFAST32 PRIo64
+#  else
+#   define PRIoFAST32 "o"
+#  endif
+# endif
+# if !defined PRIuFAST32 || @PRI_MACROS_BROKEN@
+#  undef PRIuFAST32
+#  if UINT_FAST32_MAX > UINT32_MAX
+#   define PRIuFAST32 PRIu64
+#  else
+#   define PRIuFAST32 "u"
+#  endif
+# endif
+# if !defined PRIxFAST32 || @PRI_MACROS_BROKEN@
+#  undef PRIxFAST32
+#  if UINT_FAST32_MAX > UINT32_MAX
+#   define PRIxFAST32 PRIx64
+#  else
+#   define PRIxFAST32 "x"
+#  endif
+# endif
+# if !defined PRIXFAST32 || @PRI_MACROS_BROKEN@
+#  undef PRIXFAST32
+#  if UINT_FAST32_MAX > UINT32_MAX
+#   define PRIXFAST32 PRIX64
+#  else
+#   define PRIXFAST32 "X"
+#  endif
+# endif
+# ifdef INT64_MAX
+#  if !defined PRIdFAST64 || @PRI_MACROS_BROKEN@
+#   undef PRIdFAST64
+#   define PRIdFAST64 PRId64
+#  endif
+#  if !defined PRIiFAST64 || @PRI_MACROS_BROKEN@
+#   undef PRIiFAST64
+#   define PRIiFAST64 PRIi64
+#  endif
+# endif
+# ifdef UINT64_MAX
+#  if !defined PRIoFAST64 || @PRI_MACROS_BROKEN@
+#   undef PRIoFAST64
+#   define PRIoFAST64 PRIo64
+#  endif
+#  if !defined PRIuFAST64 || @PRI_MACROS_BROKEN@
+#   undef PRIuFAST64
+#   define PRIuFAST64 PRIu64
+#  endif
+#  if !defined PRIxFAST64 || @PRI_MACROS_BROKEN@
+#   undef PRIxFAST64
+#   define PRIxFAST64 PRIx64
+#  endif
+#  if !defined PRIXFAST64 || @PRI_MACROS_BROKEN@
+#   undef PRIXFAST64
+#   define PRIXFAST64 PRIX64
+#  endif
+# endif
+
+# if !defined PRIdMAX || @PRI_MACROS_BROKEN@
+#  undef PRIdMAX
+#  if @INT32_MAX_LT_INTMAX_MAX@
+#   define PRIdMAX PRId64
+#  else
+#   define PRIdMAX "ld"
+#  endif
+# endif
+# if !defined PRIiMAX || @PRI_MACROS_BROKEN@
+#  undef PRIiMAX
+#  if @INT32_MAX_LT_INTMAX_MAX@
+#   define PRIiMAX PRIi64
+#  else
+#   define PRIiMAX "li"
+#  endif
+# endif
+# if !defined PRIoMAX || @PRI_MACROS_BROKEN@
+#  undef PRIoMAX
+#  if @UINT32_MAX_LT_UINTMAX_MAX@
+#   define PRIoMAX PRIo64
+#  else
+#   define PRIoMAX "lo"
+#  endif
+# endif
+# if !defined PRIuMAX || @PRI_MACROS_BROKEN@
+#  undef PRIuMAX
+#  if @UINT32_MAX_LT_UINTMAX_MAX@
+#   define PRIuMAX PRIu64
+#  else
+#   define PRIuMAX "lu"
+#  endif
+# endif
+# if !defined PRIxMAX || @PRI_MACROS_BROKEN@
+#  undef PRIxMAX
+#  if @UINT32_MAX_LT_UINTMAX_MAX@
+#   define PRIxMAX PRIx64
+#  else
+#   define PRIxMAX "lx"
+#  endif
+# endif
+# if !defined PRIXMAX || @PRI_MACROS_BROKEN@
+#  undef PRIXMAX
+#  if @UINT32_MAX_LT_UINTMAX_MAX@
+#   define PRIXMAX PRIX64
+#  else
+#   define PRIXMAX "lX"
+#  endif
+# endif
+
+# if !defined PRIdPTR || @PRI_MACROS_BROKEN@
+#  undef PRIdPTR
+#  ifdef INTPTR_MAX
+#   define PRIdPTR @PRIPTR_PREFIX@ "d"
+#  endif
+# endif
+# if !defined PRIiPTR || @PRI_MACROS_BROKEN@
+#  undef PRIiPTR
+#  ifdef INTPTR_MAX
+#   define PRIiPTR @PRIPTR_PREFIX@ "i"
+#  endif
+# endif
+# if !defined PRIoPTR || @PRI_MACROS_BROKEN@
+#  undef PRIoPTR
+#  ifdef UINTPTR_MAX
+#   define PRIoPTR @PRIPTR_PREFIX@ "o"
+#  endif
+# endif
+# if !defined PRIuPTR || @PRI_MACROS_BROKEN@
+#  undef PRIuPTR
+#  ifdef UINTPTR_MAX
+#   define PRIuPTR @PRIPTR_PREFIX@ "u"
+#  endif
+# endif
+# if !defined PRIxPTR || @PRI_MACROS_BROKEN@
+#  undef PRIxPTR
+#  ifdef UINTPTR_MAX
+#   define PRIxPTR @PRIPTR_PREFIX@ "x"
+#  endif
+# endif
+# if !defined PRIXPTR || @PRI_MACROS_BROKEN@
+#  undef PRIXPTR
+#  ifdef UINTPTR_MAX
+#   define PRIXPTR @PRIPTR_PREFIX@ "X"
+#  endif
+# endif
+
+# if !defined SCNd8 || @PRI_MACROS_BROKEN@
+#  undef SCNd8
+#  ifdef INT8_MAX
+#   define SCNd8 "hhd"
+#  endif
+# endif
+# if !defined SCNi8 || @PRI_MACROS_BROKEN@
+#  undef SCNi8
+#  ifdef INT8_MAX
+#   define SCNi8 "hhi"
+#  endif
+# endif
+# if !defined SCNo8 || @PRI_MACROS_BROKEN@
+#  undef SCNo8
+#  ifdef UINT8_MAX
+#   define SCNo8 "hho"
+#  endif
+# endif
+# if !defined SCNu8 || @PRI_MACROS_BROKEN@
+#  undef SCNu8
+#  ifdef UINT8_MAX
+#   define SCNu8 "hhu"
+#  endif
+# endif
+# if !defined SCNx8 || @PRI_MACROS_BROKEN@
+#  undef SCNx8
+#  ifdef UINT8_MAX
+#   define SCNx8 "hhx"
+#  endif
+# endif
+# if !defined SCNd16 || @PRI_MACROS_BROKEN@
+#  undef SCNd16
+#  ifdef INT16_MAX
+#   define SCNd16 "hd"
+#  endif
+# endif
+# if !defined SCNi16 || @PRI_MACROS_BROKEN@
+#  undef SCNi16
+#  ifdef INT16_MAX
+#   define SCNi16 "hi"
+#  endif
+# endif
+# if !defined SCNo16 || @PRI_MACROS_BROKEN@
+#  undef SCNo16
+#  ifdef UINT16_MAX
+#   define SCNo16 "ho"
+#  endif
+# endif
+# if !defined SCNu16 || @PRI_MACROS_BROKEN@
+#  undef SCNu16
+#  ifdef UINT16_MAX
+#   define SCNu16 "hu"
+#  endif
+# endif
+# if !defined SCNx16 || @PRI_MACROS_BROKEN@
+#  undef SCNx16
+#  ifdef UINT16_MAX
+#   define SCNx16 "hx"
+#  endif
+# endif
+# if !defined SCNd32 || @PRI_MACROS_BROKEN@
+#  undef SCNd32
+#  ifdef INT32_MAX
+#   define SCNd32 "d"
+#  endif
+# endif
+# if !defined SCNi32 || @PRI_MACROS_BROKEN@
+#  undef SCNi32
+#  ifdef INT32_MAX
+#   define SCNi32 "i"
+#  endif
+# endif
+# if !defined SCNo32 || @PRI_MACROS_BROKEN@
+#  undef SCNo32
+#  ifdef UINT32_MAX
+#   define SCNo32 "o"
+#  endif
+# endif
+# if !defined SCNu32 || @PRI_MACROS_BROKEN@
+#  undef SCNu32
+#  ifdef UINT32_MAX
+#   define SCNu32 "u"
+#  endif
+# endif
+# if !defined SCNx32 || @PRI_MACROS_BROKEN@
+#  undef SCNx32
+#  ifdef UINT32_MAX
+#   define SCNx32 "x"
+#  endif
+# endif
+# ifdef INT64_MAX
+#  if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@)
+#   define _SCN64_PREFIX "l"
+#  elif defined _MSC_VER || defined __MINGW32__
+#   define _SCN64_PREFIX "I64"
+#  elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+#   define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX
+#  endif
+#  if !defined SCNd64 || @PRI_MACROS_BROKEN@
+#   undef SCNd64
+#   define SCNd64 _SCN64_PREFIX "d"
+#  endif
+#  if !defined SCNi64 || @PRI_MACROS_BROKEN@
+#   undef SCNi64
+#   define SCNi64 _SCN64_PREFIX "i"
+#  endif
+# endif
+# ifdef UINT64_MAX
+#  if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@)
+#   define _SCNu64_PREFIX "l"
+#  elif defined _MSC_VER || defined __MINGW32__
+#   define _SCNu64_PREFIX "I64"
+#  elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+#   define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX
+#  endif
+#  if !defined SCNo64 || @PRI_MACROS_BROKEN@
+#   undef SCNo64
+#   define SCNo64 _SCNu64_PREFIX "o"
+#  endif
+#  if !defined SCNu64 || @PRI_MACROS_BROKEN@
+#   undef SCNu64
+#   define SCNu64 _SCNu64_PREFIX "u"
+#  endif
+#  if !defined SCNx64 || @PRI_MACROS_BROKEN@
+#   undef SCNx64
+#   define SCNx64 _SCNu64_PREFIX "x"
+#  endif
+# endif
+
+# if !defined SCNdLEAST8 || @PRI_MACROS_BROKEN@
+#  undef SCNdLEAST8
+#  define SCNdLEAST8 "hhd"
+# endif
+# if !defined SCNiLEAST8 || @PRI_MACROS_BROKEN@
+#  undef SCNiLEAST8
+#  define SCNiLEAST8 "hhi"
+# endif
+# if !defined SCNoLEAST8 || @PRI_MACROS_BROKEN@
+#  undef SCNoLEAST8
+#  define SCNoLEAST8 "hho"
+# endif
+# if !defined SCNuLEAST8 || @PRI_MACROS_BROKEN@
+#  undef SCNuLEAST8
+#  define SCNuLEAST8 "hhu"
+# endif
+# if !defined SCNxLEAST8 || @PRI_MACROS_BROKEN@
+#  undef SCNxLEAST8
+#  define SCNxLEAST8 "hhx"
+# endif
+# if !defined SCNdLEAST16 || @PRI_MACROS_BROKEN@
+#  undef SCNdLEAST16
+#  define SCNdLEAST16 "hd"
+# endif
+# if !defined SCNiLEAST16 || @PRI_MACROS_BROKEN@
+#  undef SCNiLEAST16
+#  define SCNiLEAST16 "hi"
+# endif
+# if !defined SCNoLEAST16 || @PRI_MACROS_BROKEN@
+#  undef SCNoLEAST16
+#  define SCNoLEAST16 "ho"
+# endif
+# if !defined SCNuLEAST16 || @PRI_MACROS_BROKEN@
+#  undef SCNuLEAST16
+#  define SCNuLEAST16 "hu"
+# endif
+# if !defined SCNxLEAST16 || @PRI_MACROS_BROKEN@
+#  undef SCNxLEAST16
+#  define SCNxLEAST16 "hx"
+# endif
+# if !defined SCNdLEAST32 || @PRI_MACROS_BROKEN@
+#  undef SCNdLEAST32
+#  define SCNdLEAST32 "d"
+# endif
+# if !defined SCNiLEAST32 || @PRI_MACROS_BROKEN@
+#  undef SCNiLEAST32
+#  define SCNiLEAST32 "i"
+# endif
+# if !defined SCNoLEAST32 || @PRI_MACROS_BROKEN@
+#  undef SCNoLEAST32
+#  define SCNoLEAST32 "o"
+# endif
+# if !defined SCNuLEAST32 || @PRI_MACROS_BROKEN@
+#  undef SCNuLEAST32
+#  define SCNuLEAST32 "u"
+# endif
+# if !defined SCNxLEAST32 || @PRI_MACROS_BROKEN@
+#  undef SCNxLEAST32
+#  define SCNxLEAST32 "x"
+# endif
+# ifdef INT64_MAX
+#  if !defined SCNdLEAST64 || @PRI_MACROS_BROKEN@
+#   undef SCNdLEAST64
+#   define SCNdLEAST64 SCNd64
+#  endif
+#  if !defined SCNiLEAST64 || @PRI_MACROS_BROKEN@
+#   undef SCNiLEAST64
+#   define SCNiLEAST64 SCNi64
+#  endif
+# endif
+# ifdef UINT64_MAX
+#  if !defined SCNoLEAST64 || @PRI_MACROS_BROKEN@
+#   undef SCNoLEAST64
+#   define SCNoLEAST64 SCNo64
+#  endif
+#  if !defined SCNuLEAST64 || @PRI_MACROS_BROKEN@
+#   undef SCNuLEAST64
+#   define SCNuLEAST64 SCNu64
+#  endif
+#  if !defined SCNxLEAST64 || @PRI_MACROS_BROKEN@
+#   undef SCNxLEAST64
+#   define SCNxLEAST64 SCNx64
+#  endif
+# endif
+
+# if !defined SCNdFAST8 || @PRI_MACROS_BROKEN@
+#  undef SCNdFAST8
+#  if INT_FAST8_MAX > INT32_MAX
+#   define SCNdFAST8 SCNd64
+#  elif INT_FAST8_MAX == 0x7fff
+#   define SCNdFAST8 "hd"
+#  elif INT_FAST8_MAX == 0x7f
+#   define SCNdFAST8 "hhd"
+#  else
+#   define SCNdFAST8 "d"
+#  endif
+# endif
+# if !defined SCNiFAST8 || @PRI_MACROS_BROKEN@
+#  undef SCNiFAST8
+#  if INT_FAST8_MAX > INT32_MAX
+#   define SCNiFAST8 SCNi64
+#  elif INT_FAST8_MAX == 0x7fff
+#   define SCNiFAST8 "hi"
+#  elif INT_FAST8_MAX == 0x7f
+#   define SCNiFAST8 "hhi"
+#  else
+#   define SCNiFAST8 "i"
+#  endif
+# endif
+# if !defined SCNoFAST8 || @PRI_MACROS_BROKEN@
+#  undef SCNoFAST8
+#  if UINT_FAST8_MAX > UINT32_MAX
+#   define SCNoFAST8 SCNo64
+#  elif UINT_FAST8_MAX == 0xffff
+#   define SCNoFAST8 "ho"
+#  elif UINT_FAST8_MAX == 0xff
+#   define SCNoFAST8 "hho"
+#  else
+#   define SCNoFAST8 "o"
+#  endif
+# endif
+# if !defined SCNuFAST8 || @PRI_MACROS_BROKEN@
+#  undef SCNuFAST8
+#  if UINT_FAST8_MAX > UINT32_MAX
+#   define SCNuFAST8 SCNu64
+#  elif UINT_FAST8_MAX == 0xffff
+#   define SCNuFAST8 "hu"
+#  elif UINT_FAST8_MAX == 0xff
+#   define SCNuFAST8 "hhu"
+#  else
+#   define SCNuFAST8 "u"
+#  endif
+# endif
+# if !defined SCNxFAST8 || @PRI_MACROS_BROKEN@
+#  undef SCNxFAST8
+#  if UINT_FAST8_MAX > UINT32_MAX
+#   define SCNxFAST8 SCNx64
+#  elif UINT_FAST8_MAX == 0xffff
+#   define SCNxFAST8 "hx"
+#  elif UINT_FAST8_MAX == 0xff
+#   define SCNxFAST8 "hhx"
+#  else
+#   define SCNxFAST8 "x"
+#  endif
+# endif
+# if !defined SCNdFAST16 || @PRI_MACROS_BROKEN@
+#  undef SCNdFAST16
+#  if INT_FAST16_MAX > INT32_MAX
+#   define SCNdFAST16 SCNd64
+#  elif INT_FAST16_MAX == 0x7fff
+#   define SCNdFAST16 "hd"
+#  else
+#   define SCNdFAST16 "d"
+#  endif
+# endif
+# if !defined SCNiFAST16 || @PRI_MACROS_BROKEN@
+#  undef SCNiFAST16
+#  if INT_FAST16_MAX > INT32_MAX
+#   define SCNiFAST16 SCNi64
+#  elif INT_FAST16_MAX == 0x7fff
+#   define SCNiFAST16 "hi"
+#  else
+#   define SCNiFAST16 "i"
+#  endif
+# endif
+# if !defined SCNoFAST16 || @PRI_MACROS_BROKEN@
+#  undef SCNoFAST16
+#  if UINT_FAST16_MAX > UINT32_MAX
+#   define SCNoFAST16 SCNo64
+#  elif UINT_FAST16_MAX == 0xffff
+#   define SCNoFAST16 "ho"
+#  else
+#   define SCNoFAST16 "o"
+#  endif
+# endif
+# if !defined SCNuFAST16 || @PRI_MACROS_BROKEN@
+#  undef SCNuFAST16
+#  if UINT_FAST16_MAX > UINT32_MAX
+#   define SCNuFAST16 SCNu64
+#  elif UINT_FAST16_MAX == 0xffff
+#   define SCNuFAST16 "hu"
+#  else
+#   define SCNuFAST16 "u"
+#  endif
+# endif
+# if !defined SCNxFAST16 || @PRI_MACROS_BROKEN@
+#  undef SCNxFAST16
+#  if UINT_FAST16_MAX > UINT32_MAX
+#   define SCNxFAST16 SCNx64
+#  elif UINT_FAST16_MAX == 0xffff
+#   define SCNxFAST16 "hx"
+#  else
+#   define SCNxFAST16 "x"
+#  endif
+# endif
+# if !defined SCNdFAST32 || @PRI_MACROS_BROKEN@
+#  undef SCNdFAST32
+#  if INT_FAST32_MAX > INT32_MAX
+#   define SCNdFAST32 SCNd64
+#  else
+#   define SCNdFAST32 "d"
+#  endif
+# endif
+# if !defined SCNiFAST32 || @PRI_MACROS_BROKEN@
+#  undef SCNiFAST32
+#  if INT_FAST32_MAX > INT32_MAX
+#   define SCNiFAST32 SCNi64
+#  else
+#   define SCNiFAST32 "i"
+#  endif
+# endif
+# if !defined SCNoFAST32 || @PRI_MACROS_BROKEN@
+#  undef SCNoFAST32
+#  if UINT_FAST32_MAX > UINT32_MAX
+#   define SCNoFAST32 SCNo64
+#  else
+#   define SCNoFAST32 "o"
+#  endif
+# endif
+# if !defined SCNuFAST32 || @PRI_MACROS_BROKEN@
+#  undef SCNuFAST32
+#  if UINT_FAST32_MAX > UINT32_MAX
+#   define SCNuFAST32 SCNu64
+#  else
+#   define SCNuFAST32 "u"
+#  endif
+# endif
+# if !defined SCNxFAST32 || @PRI_MACROS_BROKEN@
+#  undef SCNxFAST32
+#  if UINT_FAST32_MAX > UINT32_MAX
+#   define SCNxFAST32 SCNx64
+#  else
+#   define SCNxFAST32 "x"
+#  endif
+# endif
+# ifdef INT64_MAX
+#  if !defined SCNdFAST64 || @PRI_MACROS_BROKEN@
+#   undef SCNdFAST64
+#   define SCNdFAST64 SCNd64
+#  endif
+#  if !defined SCNiFAST64 || @PRI_MACROS_BROKEN@
+#   undef SCNiFAST64
+#   define SCNiFAST64 SCNi64
+#  endif
+# endif
+# ifdef UINT64_MAX
+#  if !defined SCNoFAST64 || @PRI_MACROS_BROKEN@
+#   undef SCNoFAST64
+#   define SCNoFAST64 SCNo64
+#  endif
+#  if !defined SCNuFAST64 || @PRI_MACROS_BROKEN@
+#   undef SCNuFAST64
+#   define SCNuFAST64 SCNu64
+#  endif
+#  if !defined SCNxFAST64 || @PRI_MACROS_BROKEN@
+#   undef SCNxFAST64
+#   define SCNxFAST64 SCNx64
+#  endif
+# endif
+
+# if !defined SCNdMAX || @PRI_MACROS_BROKEN@
+#  undef SCNdMAX
+#  if @INT32_MAX_LT_INTMAX_MAX@
+#   define SCNdMAX SCNd64
+#  else
+#   define SCNdMAX "ld"
+#  endif
+# endif
+# if !defined SCNiMAX || @PRI_MACROS_BROKEN@
+#  undef SCNiMAX
+#  if @INT32_MAX_LT_INTMAX_MAX@
+#   define SCNiMAX SCNi64
+#  else
+#   define SCNiMAX "li"
+#  endif
+# endif
+# if !defined SCNoMAX || @PRI_MACROS_BROKEN@
+#  undef SCNoMAX
+#  if @UINT32_MAX_LT_UINTMAX_MAX@
+#   define SCNoMAX SCNo64
+#  else
+#   define SCNoMAX "lo"
+#  endif
+# endif
+# if !defined SCNuMAX || @PRI_MACROS_BROKEN@
+#  undef SCNuMAX
+#  if @UINT32_MAX_LT_UINTMAX_MAX@
+#   define SCNuMAX SCNu64
+#  else
+#   define SCNuMAX "lu"
+#  endif
+# endif
+# if !defined SCNxMAX || @PRI_MACROS_BROKEN@
+#  undef SCNxMAX
+#  if @UINT32_MAX_LT_UINTMAX_MAX@
+#   define SCNxMAX SCNx64
+#  else
+#   define SCNxMAX "lx"
+#  endif
+# endif
+
+# if !defined SCNdPTR || @PRI_MACROS_BROKEN@
+#  undef SCNdPTR
+#  ifdef INTPTR_MAX
+#   define SCNdPTR @PRIPTR_PREFIX@ "d"
+#  endif
+# endif
+# if !defined SCNiPTR || @PRI_MACROS_BROKEN@
+#  undef SCNiPTR
+#  ifdef INTPTR_MAX
+#   define SCNiPTR @PRIPTR_PREFIX@ "i"
+#  endif
+# endif
+# if !defined SCNoPTR || @PRI_MACROS_BROKEN@
+#  undef SCNoPTR
+#  ifdef UINTPTR_MAX
+#   define SCNoPTR @PRIPTR_PREFIX@ "o"
+#  endif
+# endif
+# if !defined SCNuPTR || @PRI_MACROS_BROKEN@
+#  undef SCNuPTR
+#  ifdef UINTPTR_MAX
+#   define SCNuPTR @PRIPTR_PREFIX@ "u"
+#  endif
+# endif
+# if !defined SCNxPTR || @PRI_MACROS_BROKEN@
+#  undef SCNxPTR
+#  ifdef UINTPTR_MAX
+#   define SCNxPTR @PRIPTR_PREFIX@ "x"
+#  endif
+# endif
+
+#endif
+
+/* 7.8.2 Functions for greatest-width integer types */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if @GNULIB_IMAXABS@
+# if !@HAVE_DECL_IMAXABS@
+extern intmax_t imaxabs (intmax_t);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef imaxabs
+# if HAVE_RAW_DECL_IMAXABS
+_GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - "
+                 "use gnulib module imaxabs for portability");
+# endif
+#endif
+
+#if @GNULIB_IMAXDIV@
+# if !@HAVE_DECL_IMAXDIV@
+typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t;
+extern imaxdiv_t imaxdiv (intmax_t, intmax_t);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef imaxdiv
+# if HAVE_RAW_DECL_IMAXDIV
+_GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - "
+                 "use gnulib module imaxdiv for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOIMAX@
+# if !@HAVE_DECL_STRTOIMAX@
+extern intmax_t strtoimax (const char *, char **, int) _GL_ARG_NONNULL ((1));
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strtoimax
+# if HAVE_RAW_DECL_STRTOIMAX
+_GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - "
+                 "use gnulib module strtoimax for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOUMAX@
+# if !@HAVE_DECL_STRTOUMAX@
+extern uintmax_t strtoumax (const char *, char **, int) _GL_ARG_NONNULL ((1));
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strtoumax
+# if HAVE_RAW_DECL_STRTOUMAX
+_GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - "
+                 "use gnulib module strtoumax for portability");
+# endif
+#endif
+
+/* Don't bother defining or declaring wcstoimax and wcstoumax, since
+   wide-character functions like this are hardly ever useful.  */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */
diff --git a/gnu/langinfo.in.h b/gnu/langinfo.in.h
new file mode 100644 (file)
index 0000000..5a41111
--- /dev/null
@@ -0,0 +1,164 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Substitute for and wrapper around <langinfo.h>.
+   Copyright (C) 2009, 2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/*
+ * POSIX <langinfo.h> for platforms that lack it or have an incomplete one.
+ * <http://www.opengroup.org/onlinepubs/9699919799/basedefs/langinfo.h.html>
+ */
+
+#ifndef _GL_LANGINFO_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+/* The include_next requires a split double-inclusion guard.  */
+#if @HAVE_LANGINFO_H@
+# @INCLUDE_NEXT@ @NEXT_LANGINFO_H@
+#endif
+
+#ifndef _GL_LANGINFO_H
+#define _GL_LANGINFO_H
+
+
+#if !@HAVE_LANGINFO_H@
+
+/* A platform that lacks <langinfo.h>.  */
+
+/* Assume that it also lacks <nl_types.h> and the nl_item type.  */
+typedef int nl_item;
+
+/* nl_langinfo items of the LC_CTYPE category */
+# define CODESET     10000
+/* nl_langinfo items of the LC_NUMERIC category */
+# define RADIXCHAR   10001
+# define THOUSEP     10002
+/* nl_langinfo items of the LC_TIME category */
+# define D_T_FMT     10003
+# define D_FMT       10004
+# define T_FMT       10005
+# define T_FMT_AMPM  10006
+# define AM_STR      10007
+# define PM_STR      10008
+# define DAY_1       10009
+# define DAY_2       (DAY_1 + 1)
+# define DAY_3       (DAY_1 + 2)
+# define DAY_4       (DAY_1 + 3)
+# define DAY_5       (DAY_1 + 4)
+# define DAY_6       (DAY_1 + 5)
+# define DAY_7       (DAY_1 + 6)
+# define ABDAY_1     10016
+# define ABDAY_2     (ABDAY_1 + 1)
+# define ABDAY_3     (ABDAY_1 + 2)
+# define ABDAY_4     (ABDAY_1 + 3)
+# define ABDAY_5     (ABDAY_1 + 4)
+# define ABDAY_6     (ABDAY_1 + 5)
+# define ABDAY_7     (ABDAY_1 + 6)
+# define MON_1       10023
+# define MON_2       (MON_1 + 1)
+# define MON_3       (MON_1 + 2)
+# define MON_4       (MON_1 + 3)
+# define MON_5       (MON_1 + 4)
+# define MON_6       (MON_1 + 5)
+# define MON_7       (MON_1 + 6)
+# define MON_8       (MON_1 + 7)
+# define MON_9       (MON_1 + 8)
+# define MON_10      (MON_1 + 9)
+# define MON_11      (MON_1 + 10)
+# define MON_12      (MON_1 + 11)
+# define ABMON_1     10035
+# define ABMON_2     (ABMON_1 + 1)
+# define ABMON_3     (ABMON_1 + 2)
+# define ABMON_4     (ABMON_1 + 3)
+# define ABMON_5     (ABMON_1 + 4)
+# define ABMON_6     (ABMON_1 + 5)
+# define ABMON_7     (ABMON_1 + 6)
+# define ABMON_8     (ABMON_1 + 7)
+# define ABMON_9     (ABMON_1 + 8)
+# define ABMON_10    (ABMON_1 + 9)
+# define ABMON_11    (ABMON_1 + 10)
+# define ABMON_12    (ABMON_1 + 11)
+# define ERA         10047
+# define ERA_D_FMT   10048
+# define ERA_D_T_FMT 10049
+# define ERA_T_FMT   10050
+# define ALT_DIGITS  10051
+/* nl_langinfo items of the LC_MONETARY category */
+# define CRNCYSTR    10052
+/* nl_langinfo items of the LC_MESSAGES category */
+# define YESEXPR     10053
+# define NOEXPR      10054
+
+#else
+
+/* A platform that has <langinfo.h>.  */
+
+# if !@HAVE_LANGINFO_CODESET@
+#  define CODESET     10000
+#  define GNULIB_defined_CODESET 1
+# endif
+
+# if !@HAVE_LANGINFO_ERA@
+#  define ERA         10047
+#  define ERA_D_FMT   10048
+#  define ERA_D_T_FMT 10049
+#  define ERA_T_FMT   10050
+#  define ALT_DIGITS  10051
+#  define GNULIB_defined_ERA 1
+# endif
+
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+/* Declare overridden functions.  */
+
+
+/* Return a piece of locale dependent information.
+   Note: The difference between nl_langinfo (CODESET) and locale_charset ()
+   is that the latter normalizes the encoding names to GNU conventions.  */
+
+#if @GNULIB_NL_LANGINFO@
+# if @REPLACE_NL_LANGINFO@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef nl_langinfo
+#   define nl_langinfo rpl_nl_langinfo
+#  endif
+_GL_FUNCDECL_RPL (nl_langinfo, char *, (nl_item item));
+_GL_CXXALIAS_RPL (nl_langinfo, char *, (nl_item item));
+# else
+#  if !@HAVE_NL_LANGINFO@
+_GL_FUNCDECL_SYS (nl_langinfo, char *, (nl_item item));
+#  endif
+_GL_CXXALIAS_SYS (nl_langinfo, char *, (nl_item item));
+# endif
+_GL_CXXALIASWARN (nl_langinfo);
+#elif defined GNULIB_POSIXCHECK
+# undef nl_langinfo
+# if HAVE_RAW_DECL_NL_LANGINFO
+_GL_WARN_ON_USE (nl_langinfo, "nl_langinfo is not portable - "
+                 "use gnulib module nl_langinfo for portability");
+# endif
+#endif
+
+
+#endif /* _GL_LANGINFO_H */
+#endif /* _GL_LANGINFO_H */
diff --git a/gnu/lchown.c b/gnu/lchown.c
new file mode 100644 (file)
index 0000000..0753010
--- /dev/null
@@ -0,0 +1,118 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Provide a stub lchown function for systems that lack it.
+
+   Copyright (C) 1998-1999, 2002, 2004, 2006-2007, 2009-2010 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 */
+
+#include <config.h>
+
+#include <unistd.h>
+
+#include <errno.h>
+#include <stdbool.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#if !HAVE_LCHOWN
+
+/* If the system chown does not follow symlinks, we don't want it
+   replaced by gnulib's chown, which does follow symlinks.  */
+# if CHOWN_MODIFIES_SYMLINK
+#  undef chown
+# endif
+
+/* Work just like chown, except when FILE is a symbolic link.
+   In that case, set errno to EOPNOTSUPP and return -1.
+   But if autoconf tests determined that chown modifies
+   symlinks, then just call chown.  */
+
+int
+lchown (const char *file, uid_t uid, gid_t gid)
+{
+# if HAVE_CHOWN
+#  if ! CHOWN_MODIFIES_SYMLINK
+  struct stat stats;
+
+  if (lstat (file, &stats) == 0 && S_ISLNK (stats.st_mode))
+    {
+      errno = EOPNOTSUPP;
+      return -1;
+    }
+#  endif
+
+  return chown (file, uid, gid);
+
+# else /* !HAVE_CHOWN */
+  errno = ENOSYS;
+  return -1;
+# endif
+}
+
+#else /* HAVE_LCHOWN */
+
+# undef lchown
+
+/* Work around trailing slash bugs in lchown.  */
+int
+rpl_lchown (const char *file, uid_t uid, gid_t gid)
+{
+  struct stat st;
+  bool stat_valid = false;
+  int result;
+
+# if CHOWN_CHANGE_TIME_BUG
+  if (gid != (gid_t) -1 || uid != (uid_t) -1)
+    {
+      if (lstat (file, &st))
+        return -1;
+      stat_valid = true;
+      if (!S_ISLNK (st.st_mode))
+        return chown (file, uid, gid);
+    }
+# endif
+
+# if CHOWN_TRAILING_SLASH_BUG
+  if (!stat_valid)
+    {
+      size_t len = strlen (file);
+      if (len && file[len - 1] == '/')
+        return chown (file, uid, gid);
+    }
+# endif
+
+  result = lchown (file, uid, gid);
+
+# if CHOWN_CHANGE_TIME_BUG && HAVE_LCHMOD
+  if (result == 0 && stat_valid
+      && (uid == st.st_uid || uid == (uid_t) -1)
+      && (gid == st.st_gid || gid == (gid_t) -1))
+    {
+      /* No change in ownership, but at least one argument was not -1,
+         so we are required to update ctime.  Since lchown succeeded,
+         we assume that lchmod will do likewise.  But if the system
+         lacks lchmod and lutimes, we are out of luck.  Oh well.  */
+      result = lchmod (file, st.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO
+                                           | S_ISUID | S_ISGID | S_ISVTX));
+    }
+# endif
+
+  return result;
+}
+
+#endif /* HAVE_LCHOWN */
diff --git a/gnu/localcharset.c b/gnu/localcharset.c
new file mode 100644 (file)
index 0000000..4255174
--- /dev/null
@@ -0,0 +1,551 @@
+/* -*- 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-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "localcharset.h"
+
+#include <fcntl.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#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 */
+#endif
+
+#if defined _WIN32 || defined __WIN32__
+# define WIN32_NATIVE
+#endif
+
+#if defined __EMX__
+/* Assume EMX program runs on OS/2, even if compiled under DOS.  */
+# ifndef OS2
+#  define OS2
+# endif
+#endif
+
+#if !defined WIN32_NATIVE
+# include <unistd.h>
+# if HAVE_LANGINFO_CODESET
+#  include <langinfo.h>
+# else
+#  if 0 /* see comment below */
+#   include <locale.h>
+#  endif
+# endif
+# ifdef __CYGWIN__
+#  define WIN32_LEAN_AND_MEAN
+#  include <windows.h>
+# endif
+#elif defined WIN32_NATIVE
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+#if defined OS2
+# define INCL_DOS
+# include <os2.h>
+#endif
+
+#if ENABLE_RELOCATABLE
+# include "relocatable.h"
+#else
+# define relocate(pathname) (pathname)
+#endif
+
+/* Get LIBDIR.  */
+#ifndef LIBDIR
+# include "configmake.h"
+#endif
+
+/* Define O_NOFOLLOW to 0 on platforms where it does not exist.  */
+#ifndef O_NOFOLLOW
+# define O_NOFOLLOW 0
+#endif
+
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+  /* Win32, Cygwin, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+#endif
+
+#ifndef DIRECTORY_SEPARATOR
+# define DIRECTORY_SEPARATOR '/'
+#endif
+
+#ifndef ISSLASH
+# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
+#endif
+
+#if HAVE_DECL_GETC_UNLOCKED
+# undef getc
+# define getc getc_unlocked
+#endif
+
+/* The following static variable is declared 'volatile' to avoid a
+   possible multithread problem in the function get_charset_aliases. If we
+   are running in a threaded environment, and if two threads initialize
+   'charset_aliases' simultaneously, both will produce the same value,
+   and everything will be ok if the two assignments to 'charset_aliases'
+   are atomic. But I don't know what will happen if the two assignments mix.  */
+#if __STDC__ != 1
+# define volatile /* empty */
+#endif
+/* Pointer to the contents of the charset.alias file, if it has already been
+   read, else NULL.  Its format is:
+   ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0'  */
+static const char * volatile charset_aliases;
+
+/* Return a pointer to the contents of the charset.alias file.  */
+static const char *
+get_charset_aliases (void)
+{
+  const char *cp;
+
+  cp = charset_aliases;
+  if (cp == NULL)
+    {
+#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__)
+      const char *dir;
+      const char *base = "charset.alias";
+      char *file_name;
+
+      /* Make it possible to override the charset.alias location.  This is
+         necessary for running the testsuite before "make install".  */
+      dir = getenv ("CHARSETALIASDIR");
+      if (dir == NULL || dir[0] == '\0')
+        dir = relocate (LIBDIR);
+
+      /* Concatenate dir and base into freshly allocated file_name.  */
+      {
+        size_t dir_len = strlen (dir);
+        size_t base_len = strlen (base);
+        int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
+        file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
+        if (file_name != NULL)
+          {
+            memcpy (file_name, dir, dir_len);
+            if (add_slash)
+              file_name[dir_len] = DIRECTORY_SEPARATOR;
+            memcpy (file_name + dir_len + add_slash, base, base_len + 1);
+          }
+      }
+
+      if (file_name == NULL)
+        /* Out of memory.  Treat the file as empty.  */
+        cp = "";
+      else
+        {
+          int fd;
+
+          /* Open the file.  Reject symbolic links on platforms that support
+             O_NOFOLLOW.  This is a security feature.  Without it, an attacker
+             could retrieve parts of the contents (namely, the tail of the
+             first line that starts with "* ") of an arbitrary file by placing
+             a symbolic link to that file under the name "charset.alias" in
+             some writable directory and defining the environment variable
+             CHARSETALIASDIR to point to that directory.  */
+          fd = open (file_name,
+                     O_RDONLY | (HAVE_WORKING_O_NOFOLLOW ? O_NOFOLLOW : 0));
+          if (fd < 0)
+            /* File not found.  Treat it as empty.  */
+            cp = "";
+          else
+            {
+              FILE *fp;
+
+              fp = fdopen (fd, "r");
+              if (fp == NULL)
+                {
+                  /* Out of memory.  Treat the file as empty.  */
+                  close (fd);
+                  cp = "";
+                }
+              else
+                {
+                  /* Parse the file's contents.  */
+                  char *res_ptr = NULL;
+                  size_t res_size = 0;
+
+                  for (;;)
+                    {
+                      int c;
+                      char buf1[50+1];
+                      char buf2[50+1];
+                      size_t l1, l2;
+                      char *old_res_ptr;
+
+                      c = getc (fp);
+                      if (c == EOF)
+                        break;
+                      if (c == '\n' || c == ' ' || c == '\t')
+                        continue;
+                      if (c == '#')
+                        {
+                          /* Skip comment, to end of line.  */
+                          do
+                            c = getc (fp);
+                          while (!(c == EOF || c == '\n'));
+                          if (c == EOF)
+                            break;
+                          continue;
+                        }
+                      ungetc (c, fp);
+                      if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
+                        break;
+                      l1 = strlen (buf1);
+                      l2 = strlen (buf2);
+                      old_res_ptr = res_ptr;
+                      if (res_size == 0)
+                        {
+                          res_size = l1 + 1 + l2 + 1;
+                          res_ptr = (char *) malloc (res_size + 1);
+                        }
+                      else
+                        {
+                          res_size += l1 + 1 + l2 + 1;
+                          res_ptr = (char *) realloc (res_ptr, res_size + 1);
+                        }
+                      if (res_ptr == NULL)
+                        {
+                          /* Out of memory. */
+                          res_size = 0;
+                          if (old_res_ptr != NULL)
+                            free (old_res_ptr);
+                          break;
+                        }
+                      strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
+                      strcpy (res_ptr + res_size - (l2 + 1), buf2);
+                    }
+                  fclose (fp);
+                  if (res_size == 0)
+                    cp = "";
+                  else
+                    {
+                      *(res_ptr + res_size) = '\0';
+                      cp = res_ptr;
+                    }
+                }
+            }
+
+          free (file_name);
+        }
+
+#else
+
+# if defined DARWIN7
+      /* To avoid the trouble of installing a file that is shared by many
+         GNU packages -- many packaging systems have problems with this --,
+         simply inline the aliases here.  */
+      cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
+           "ISO8859-2" "\0" "ISO-8859-2" "\0"
+           "ISO8859-4" "\0" "ISO-8859-4" "\0"
+           "ISO8859-5" "\0" "ISO-8859-5" "\0"
+           "ISO8859-7" "\0" "ISO-8859-7" "\0"
+           "ISO8859-9" "\0" "ISO-8859-9" "\0"
+           "ISO8859-13" "\0" "ISO-8859-13" "\0"
+           "ISO8859-15" "\0" "ISO-8859-15" "\0"
+           "KOI8-R" "\0" "KOI8-R" "\0"
+           "KOI8-U" "\0" "KOI8-U" "\0"
+           "CP866" "\0" "CP866" "\0"
+           "CP949" "\0" "CP949" "\0"
+           "CP1131" "\0" "CP1131" "\0"
+           "CP1251" "\0" "CP1251" "\0"
+           "eucCN" "\0" "GB2312" "\0"
+           "GB2312" "\0" "GB2312" "\0"
+           "eucJP" "\0" "EUC-JP" "\0"
+           "eucKR" "\0" "EUC-KR" "\0"
+           "Big5" "\0" "BIG5" "\0"
+           "Big5HKSCS" "\0" "BIG5-HKSCS" "\0"
+           "GBK" "\0" "GBK" "\0"
+           "GB18030" "\0" "GB18030" "\0"
+           "SJIS" "\0" "SHIFT_JIS" "\0"
+           "ARMSCII-8" "\0" "ARMSCII-8" "\0"
+           "PT154" "\0" "PT154" "\0"
+         /*"ISCII-DEV" "\0" "?" "\0"*/
+           "*" "\0" "UTF-8" "\0";
+# endif
+
+# if defined VMS
+      /* To avoid the troubles of an extra file charset.alias_vms in the
+         sources of many GNU packages, simply inline the aliases here.  */
+      /* The list of encodings is taken from the OpenVMS 7.3-1 documentation
+         "Compaq C Run-Time Library Reference Manual for OpenVMS systems"
+         section 10.7 "Handling Different Character Sets".  */
+      cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
+           "ISO8859-2" "\0" "ISO-8859-2" "\0"
+           "ISO8859-5" "\0" "ISO-8859-5" "\0"
+           "ISO8859-7" "\0" "ISO-8859-7" "\0"
+           "ISO8859-8" "\0" "ISO-8859-8" "\0"
+           "ISO8859-9" "\0" "ISO-8859-9" "\0"
+           /* Japanese */
+           "eucJP" "\0" "EUC-JP" "\0"
+           "SJIS" "\0" "SHIFT_JIS" "\0"
+           "DECKANJI" "\0" "DEC-KANJI" "\0"
+           "SDECKANJI" "\0" "EUC-JP" "\0"
+           /* Chinese */
+           "eucTW" "\0" "EUC-TW" "\0"
+           "DECHANYU" "\0" "DEC-HANYU" "\0"
+           "DECHANZI" "\0" "GB2312" "\0"
+           /* Korean */
+           "DECKOREAN" "\0" "EUC-KR" "\0";
+# endif
+
+# if defined WIN32_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.  */
+
+      cp = "CP936" "\0" "GBK" "\0"
+           "CP1361" "\0" "JOHAB" "\0"
+           "CP20127" "\0" "ASCII" "\0"
+           "CP20866" "\0" "KOI8-R" "\0"
+           "CP20936" "\0" "GB2312" "\0"
+           "CP21866" "\0" "KOI8-RU" "\0"
+           "CP28591" "\0" "ISO-8859-1" "\0"
+           "CP28592" "\0" "ISO-8859-2" "\0"
+           "CP28593" "\0" "ISO-8859-3" "\0"
+           "CP28594" "\0" "ISO-8859-4" "\0"
+           "CP28595" "\0" "ISO-8859-5" "\0"
+           "CP28596" "\0" "ISO-8859-6" "\0"
+           "CP28597" "\0" "ISO-8859-7" "\0"
+           "CP28598" "\0" "ISO-8859-8" "\0"
+           "CP28599" "\0" "ISO-8859-9" "\0"
+           "CP28605" "\0" "ISO-8859-15" "\0"
+           "CP38598" "\0" "ISO-8859-8" "\0"
+           "CP51932" "\0" "EUC-JP" "\0"
+           "CP51936" "\0" "GB2312" "\0"
+           "CP51949" "\0" "EUC-KR" "\0"
+           "CP51950" "\0" "EUC-TW" "\0"
+           "CP54936" "\0" "GB18030" "\0"
+           "CP65001" "\0" "UTF-8" "\0";
+# endif
+#endif
+
+      charset_aliases = cp;
+    }
+
+  return cp;
+}
+
+/* Determine the current locale's character encoding, and canonicalize it
+   into one of the canonical names listed in config.charset.
+   The result must not be freed; it is statically allocated.
+   If the canonical name cannot be determined, the result is a non-canonical
+   name.  */
+
+#ifdef STATIC
+STATIC
+#endif
+const char *
+locale_charset (void)
+{
+  const char *codeset;
+  const char *aliases;
+
+#if !(defined WIN32_NATIVE || defined OS2)
+
+# if HAVE_LANGINFO_CODESET
+
+  /* Most systems support nl_langinfo (CODESET) nowadays.  */
+  codeset = nl_langinfo (CODESET);
+
+#  ifdef __CYGWIN__
+  /* Cygwin 1.5.x does not have locales.  nl_langinfo (CODESET) always
+     returns "US-ASCII".  As long as this is not fixed, return the suffix
+     of the locale name from the environment variables (if present) or
+     the codepage as a number.  */
+  if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0)
+    {
+      const char *locale;
+      static char buf[2 + 10 + 1];
+
+      locale = getenv ("LC_ALL");
+      if (locale == NULL || locale[0] == '\0')
+        {
+          locale = getenv ("LC_CTYPE");
+          if (locale == NULL || locale[0] == '\0')
+            locale = getenv ("LANG");
+        }
+      if (locale != NULL && locale[0] != '\0')
+        {
+          /* If the locale name contains an encoding after the dot, return
+             it.  */
+          const char *dot = strchr (locale, '.');
+
+          if (dot != NULL)
+            {
+              const char *modifier;
+
+              dot++;
+              /* Look for the possible @... trailer and remove it, if any.  */
+              modifier = strchr (dot, '@');
+              if (modifier == NULL)
+                return dot;
+              if (modifier - dot < sizeof (buf))
+                {
+                  memcpy (buf, dot, modifier - dot);
+                  buf [modifier - dot] = '\0';
+                  return buf;
+                }
+            }
+        }
+
+      /* 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).
+         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
+         this conversion transparently (see winsup/cygwin/fhandler_console.cc),
+         converting to GetConsoleOutputCP().  This leads to correct results,
+         except when SetConsoleOutputCP has been called and a raster font is
+         in use.  */
+      sprintf (buf, "CP%u", GetACP ());
+      codeset = buf;
+    }
+#  endif
+
+# else
+
+  /* On old systems which lack it, use setlocale or getenv.  */
+  const char *locale = NULL;
+
+  /* But most old systems don't have a complete set of locales.  Some
+     (like SunOS 4 or DJGPP) have only the C locale.  Therefore we don't
+     use setlocale here; it would return "C" when it doesn't support the
+     locale name the user has set.  */
+#  if 0
+  locale = setlocale (LC_CTYPE, NULL);
+#  endif
+  if (locale == NULL || locale[0] == '\0')
+    {
+      locale = getenv ("LC_ALL");
+      if (locale == NULL || locale[0] == '\0')
+        {
+          locale = getenv ("LC_CTYPE");
+          if (locale == NULL || locale[0] == '\0')
+            locale = getenv ("LANG");
+        }
+    }
+
+  /* On some old systems, one used to set locale = "iso8859_1". On others,
+     you set it to "language_COUNTRY.charset". In any case, we resolve it
+     through the charset.alias file.  */
+  codeset = locale;
+
+# endif
+
+#elif defined WIN32_NATIVE
+
+  static char buf[2 + 10 + 1];
+
+  /* Woe32 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.
+     But in GUI programs and for output sent to files and pipes, GetACP()
+     encoding is the best bet.  */
+  sprintf (buf, "CP%u", GetACP ());
+  codeset = buf;
+
+#elif defined OS2
+
+  const char *locale;
+  static char buf[2 + 10 + 1];
+  ULONG cp[3];
+  ULONG cplen;
+
+  /* Allow user to override the codeset, as set in the operating system,
+     with standard language environment variables.  */
+  locale = getenv ("LC_ALL");
+  if (locale == NULL || locale[0] == '\0')
+    {
+      locale = getenv ("LC_CTYPE");
+      if (locale == NULL || locale[0] == '\0')
+        locale = getenv ("LANG");
+    }
+  if (locale != NULL && locale[0] != '\0')
+    {
+      /* If the locale name contains an encoding after the dot, return it.  */
+      const char *dot = strchr (locale, '.');
+
+      if (dot != NULL)
+        {
+          const char *modifier;
+
+          dot++;
+          /* Look for the possible @... trailer and remove it, if any.  */
+          modifier = strchr (dot, '@');
+          if (modifier == NULL)
+            return dot;
+          if (modifier - dot < sizeof (buf))
+            {
+              memcpy (buf, dot, modifier - dot);
+              buf [modifier - dot] = '\0';
+              return buf;
+            }
+        }
+
+      /* Resolve through the charset.alias file.  */
+      codeset = locale;
+    }
+  else
+    {
+      /* OS/2 has a function returning the locale's codepage as a number.  */
+      if (DosQueryCp (sizeof (cp), cp, &cplen))
+        codeset = "";
+      else
+        {
+          sprintf (buf, "CP%u", cp[0]);
+          codeset = buf;
+        }
+    }
+
+#endif
+
+  if (codeset == NULL)
+    /* The canonical name cannot be determined.  */
+    codeset = "";
+
+  /* Resolve alias. */
+  for (aliases = get_charset_aliases ();
+       *aliases != '\0';
+       aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
+    if (strcmp (codeset, aliases) == 0
+        || (aliases[0] == '*' && aliases[1] == '\0'))
+      {
+        codeset = aliases + strlen (aliases) + 1;
+        break;
+      }
+
+  /* Don't return an empty string.  GNU libc and GNU libiconv interpret
+     the empty string as denoting "the locale's character encoding",
+     thus GNU libiconv would call this function a second time.  */
+  if (codeset[0] == '\0')
+    codeset = "ASCII";
+
+  return codeset;
+}
diff --git a/gnu/localcharset.h b/gnu/localcharset.h
new file mode 100644 (file)
index 0000000..9a67c0d
--- /dev/null
@@ -0,0 +1,43 @@
+/* -*- 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-2010 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
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _LOCALCHARSET_H
+#define _LOCALCHARSET_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Determine the current locale's character encoding, and canonicalize it
+   into one of the canonical names listed in config.charset.
+   The result must not be freed; it is statically allocated.
+   If the canonical name cannot be determined, the result is a non-canonical
+   name.  */
+extern const char * locale_charset (void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _LOCALCHARSET_H */
diff --git a/gnu/lseek.c b/gnu/lseek.c
new file mode 100644 (file)
index 0000000..831e538
--- /dev/null
@@ -0,0 +1,64 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* An lseek() function that detects pipes.
+   Copyright (C) 2007, 2009, 2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <unistd.h>
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+/* Windows platforms.  */
+/* Get GetFileType.  */
+# include <windows.h>
+#else
+# include <sys/stat.h>
+#endif
+#include <errno.h>
+
+#undef lseek
+
+off_t
+rpl_lseek (int fd, off_t offset, int whence)
+{
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+  /* mingw lseek mistakenly succeeds on pipes, sockets, and terminals.  */
+  HANDLE h = (HANDLE) _get_osfhandle (fd);
+  if (h == INVALID_HANDLE_VALUE)
+    {
+      errno = EBADF;
+      return -1;
+    }
+  if (GetFileType (h) != FILE_TYPE_DISK)
+    {
+      errno = ESPIPE;
+      return -1;
+    }
+#else
+  /* BeOS lseek mistakenly succeeds on pipes...  */
+  struct stat statbuf;
+  if (fstat (fd, &statbuf) < 0)
+    return -1;
+  if (!S_ISREG (statbuf.st_mode))
+    {
+      errno = ESPIPE;
+      return -1;
+    }
+#endif
+  return lseek (fd, offset, whence);
+}
diff --git a/gnu/lstat.c b/gnu/lstat.c
new file mode 100644 (file)
index 0000000..4d9e28a
--- /dev/null
@@ -0,0 +1,93 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Work around a bug of lstat on some systems
+
+   Copyright (C) 1997-2006, 2008-2010 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 */
+
+#include <config.h>
+
+#if !HAVE_LSTAT
+/* On systems that lack symlinks, our replacement <sys/stat.h> already
+   defined lstat as stat, so there is nothing further to do other than
+   avoid an empty file.  */
+typedef int dummy;
+#else /* HAVE_LSTAT */
+
+/* Get the original definition of lstat.  It might be defined as a macro.  */
+# define __need_system_sys_stat_h
+# include <sys/types.h>
+# include <sys/stat.h>
+# undef __need_system_sys_stat_h
+
+static inline int
+orig_lstat (const char *filename, struct stat *buf)
+{
+  return lstat (filename, buf);
+}
+
+/* Specification.  */
+# 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
+   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)',
+   but on Solaris 9 and earlier it does not.
+
+   If FILE has a trailing slash and specifies a symbolic link,
+   then use stat() to get more info on the referent of FILE.
+   If the referent is a non-directory, then set errno to ENOTDIR
+   and return -1.  Otherwise, return stat's result.  */
+
+int
+rpl_lstat (const char *file, struct stat *sbuf)
+{
+  size_t len;
+  int lstat_result = orig_lstat (file, sbuf);
+
+  if (lstat_result != 0)
+    return lstat_result;
+
+  /* This replacement file can blindly check against '/' rather than
+     using the ISSLASH macro, because all platforms with '\\' either
+     lack symlinks (mingw) or have working lstat (cygwin) and thus do
+     not compile this file.  0 len should have already been filtered
+     out above, with a failure return of ENOENT.  */
+  len = strlen (file);
+  if (file[len - 1] != '/' || S_ISDIR (sbuf->st_mode))
+    return 0;
+
+  /* At this point, a trailing slash is only permitted on
+     symlink-to-dir; but it should have found information on the
+     directory, not the symlink.  Call stat() to get info about the
+     link's referent.  Our replacement stat guarantees valid results,
+     even if the symlink is not pointing to a directory.  */
+  if (!S_ISLNK (sbuf->st_mode))
+    {
+      errno = ENOTDIR;
+      return -1;
+    }
+  return stat (file, sbuf);
+}
+
+#endif /* HAVE_LSTAT */
diff --git a/gnu/malloc.c b/gnu/malloc.c
new file mode 100644 (file)
index 0000000..d9eec75
--- /dev/null
@@ -0,0 +1,59 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* malloc() function that is glibc compatible.
+
+   Copyright (C) 1997-1998, 2006-2007, 2009-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* written by Jim Meyering and Bruno Haible */
+
+#include <config.h>
+/* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h.  */
+#ifdef malloc
+# define NEED_MALLOC_GNU
+# undef malloc
+#endif
+
+/* Specification.  */
+#include <stdlib.h>
+
+#include <errno.h>
+
+/* Call the system's malloc below.  */
+#undef malloc
+
+/* Allocate an N-byte block of memory from the heap.
+   If N is zero, allocate a 1-byte block.  */
+
+void *
+rpl_malloc (size_t n)
+{
+  void *result;
+
+#ifdef NEED_MALLOC_GNU
+  if (n == 0)
+    n = 1;
+#endif
+
+  result = malloc (n);
+
+#if !HAVE_MALLOC_POSIX
+  if (result == NULL)
+    errno = ENOMEM;
+#endif
+
+  return result;
+}
diff --git a/gnu/malloca.c b/gnu/malloca.c
new file mode 100644 (file)
index 0000000..6b59638
--- /dev/null
@@ -0,0 +1,139 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Safe automatic memory allocation.
+   Copyright (C) 2003, 2006-2007, 2009-2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2003.
+
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "malloca.h"
+
+/* The speed critical point in this file is freea() applied to an alloca()
+   result: it must be fast, to match the speed of alloca().  The speed of
+   mmalloca() and freea() in the other case are not critical, because they
+   are only invoked for big memory sizes.  */
+
+#if HAVE_ALLOCA
+
+/* Store the mmalloca() results in a hash table.  This is needed to reliably
+   distinguish a mmalloca() result and an alloca() result.
+
+   Although it is possible that the same pointer is returned by alloca() and
+   by mmalloca() at different times in the same application, it does not lead
+   to a bug in freea(), because:
+     - Before a pointer returned by alloca() can point into malloc()ed memory,
+       the function must return, and once this has happened the programmer must
+       not call freea() on it anyway.
+     - Before a pointer returned by mmalloca() can point into the stack, it
+       must be freed.  The only function that can free it is freea(), and
+       when freea() frees it, it also removes it from the hash table.  */
+
+#define MAGIC_NUMBER 0x1415fb4a
+#define MAGIC_SIZE sizeof (int)
+/* This is how the header info would look like without any alignment
+   considerations.  */
+struct preliminary_header { void *next; char room[MAGIC_SIZE]; };
+/* But the header's size must be a multiple of sa_alignment_max.  */
+#define HEADER_SIZE \
+  (((sizeof (struct preliminary_header) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max)
+struct header { void *next; char room[HEADER_SIZE - sizeof (struct preliminary_header) + MAGIC_SIZE]; };
+/* Verify that HEADER_SIZE == sizeof (struct header).  */
+typedef int verify1[2 * (HEADER_SIZE == sizeof (struct header)) - 1];
+/* We make the hash table quite big, so that during lookups the probability
+   of empty hash buckets is quite high.  There is no need to make the hash
+   table resizable, because when the hash table gets filled so much that the
+   lookup becomes slow, it means that the application has memory leaks.  */
+#define HASH_TABLE_SIZE 257
+static void * mmalloca_results[HASH_TABLE_SIZE];
+
+#endif
+
+void *
+mmalloca (size_t n)
+{
+#if HAVE_ALLOCA
+  /* Allocate one more word, that serves as an indicator for malloc()ed
+     memory, so that freea() of an alloca() result is fast.  */
+  size_t nplus = n + HEADER_SIZE;
+
+  if (nplus >= n)
+    {
+      char *p = (char *) malloc (nplus);
+
+      if (p != NULL)
+        {
+          size_t slot;
+
+          p += HEADER_SIZE;
+
+          /* Put a magic number into the indicator word.  */
+          ((int *) p)[-1] = MAGIC_NUMBER;
+
+          /* Enter p into the hash table.  */
+          slot = (unsigned long) p % HASH_TABLE_SIZE;
+          ((struct header *) (p - HEADER_SIZE))->next = mmalloca_results[slot];
+          mmalloca_results[slot] = p;
+
+          return p;
+        }
+    }
+  /* Out of memory.  */
+  return NULL;
+#else
+# if !MALLOC_0_IS_NONNULL
+  if (n == 0)
+    n = 1;
+# endif
+  return malloc (n);
+#endif
+}
+
+#if HAVE_ALLOCA
+void
+freea (void *p)
+{
+  /* mmalloca() may have returned NULL.  */
+  if (p != NULL)
+    {
+      /* Attempt to quickly distinguish the mmalloca() result - which has
+         a magic indicator word - and the alloca() result - which has an
+         uninitialized indicator word.  It is for this test that sa_increment
+         additional bytes are allocated in the alloca() case.  */
+      if (((int *) p)[-1] == MAGIC_NUMBER)
+        {
+          /* 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;
+          void **chain = &mmalloca_results[slot];
+          for (; *chain != NULL;)
+            {
+              if (*chain == p)
+                {
+                  /* Found it.  Remove it from the hash table and free it.  */
+                  char *p_begin = (char *) p - HEADER_SIZE;
+                  *chain = ((struct header *) p_begin)->next;
+                  free (p_begin);
+                  return;
+                }
+              chain = &((struct header *) ((char *) *chain - HEADER_SIZE))->next;
+            }
+        }
+      /* At this point, we know it was not a mmalloca() result.  */
+    }
+}
+#endif
diff --git a/gnu/malloca.h b/gnu/malloca.h
new file mode 100644 (file)
index 0000000..b0c78a3
--- /dev/null
@@ -0,0 +1,136 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Safe automatic memory allocation.
+   Copyright (C) 2003-2007, 2009-2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2003.
+
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _MALLOCA_H
+#define _MALLOCA_H
+
+#include <alloca.h>
+#include <stddef.h>
+#include <stdlib.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* safe_alloca(N) is equivalent to alloca(N) when it is safe to call
+   alloca(N); otherwise it returns NULL.  It either returns N bytes of
+   memory allocated on the stack, that lasts until the function returns,
+   or NULL.
+   Use of safe_alloca should be avoided:
+     - inside arguments of function calls - undefined behaviour,
+     - in inline functions - the allocation may actually last until the
+       calling function returns.
+*/
+#if HAVE_ALLOCA
+/* The OS usually guarantees only one guard page at the bottom of the stack,
+   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.  */
+# define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL)
+#else
+# define safe_alloca(N) ((void) (N), NULL)
+#endif
+
+/* malloca(N) is a safe variant of alloca(N).  It allocates N bytes of
+   memory allocated on the stack, that must be freed using freea() before
+   the function returns.  Upon failure, it returns NULL.  */
+#if HAVE_ALLOCA
+# define malloca(N) \
+  ((N) < 4032 - sa_increment                                        \
+   ? (void *) ((char *) alloca ((N) + sa_increment) + sa_increment) \
+   : mmalloca (N))
+#else
+# define malloca(N) \
+  mmalloca (N)
+#endif
+extern void * mmalloca (size_t n);
+
+/* Free a block of memory allocated through malloca().  */
+#if HAVE_ALLOCA
+extern void freea (void *p);
+#else
+# define freea free
+#endif
+
+/* nmalloca(N,S) is an overflow-safe variant of malloca (N * S).
+   It allocates an array of N objects, each with S bytes of memory,
+   on the stack.  S must be positive and N must be nonnegative.
+   The array must be freed using freea() before the function returns.  */
+#if 1
+/* Cf. the definition of xalloc_oversized.  */
+# define nmalloca(n, s) \
+    ((n) > (size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) \
+     ? NULL \
+     : malloca ((n) * (s)))
+#else
+extern void * nmalloca (size_t n, size_t s);
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+/* ------------------- Auxiliary, non-public definitions ------------------- */
+
+/* Determine the alignment of a type at compile time.  */
+#if defined __GNUC__
+# define sa_alignof __alignof__
+#elif defined __cplusplus
+  template <class type> struct sa_alignof_helper { char __slot1; type __slot2; };
+# define sa_alignof(type) offsetof (sa_alignof_helper<type>, __slot2)
+#elif defined __hpux
+  /* Work around a HP-UX 10.20 cc bug with enums constants defined as offsetof
+     values.  */
+# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8)
+#elif defined _AIX
+  /* Work around an AIX 3.2.5 xlc bug with enums constants defined as offsetof
+     values.  */
+# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8)
+#else
+# define sa_alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2)
+#endif
+
+enum
+{
+/* The desired alignment of memory allocations is the maximum alignment
+   among all elementary types.  */
+  sa_alignment_long = sa_alignof (long),
+  sa_alignment_double = sa_alignof (double),
+#if HAVE_LONG_LONG_INT
+  sa_alignment_longlong = sa_alignof (long long),
+#endif
+  sa_alignment_longdouble = sa_alignof (long double),
+  sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1)
+#if HAVE_LONG_LONG_INT
+                      | (sa_alignment_longlong - 1)
+#endif
+                      | (sa_alignment_longdouble - 1)
+                     ) + 1,
+/* The increment that guarantees room for a magic word must be >= sizeof (int)
+   and a multiple of sa_alignment_max.  */
+  sa_increment = ((sizeof (int) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max
+};
+
+#endif /* _MALLOCA_H */
diff --git a/gnu/malloca.valgrind b/gnu/malloca.valgrind
new file mode 100644 (file)
index 0000000..52f0a50
--- /dev/null
@@ -0,0 +1,7 @@
+# Suppress a valgrind message about use of uninitialized memory in freea().
+# This use is OK because it provides only a speedup.
+{
+    freea
+    Memcheck:Cond
+    fun:freea
+}
diff --git a/gnu/mbchar.c b/gnu/mbchar.c
new file mode 100644 (file)
index 0000000..b140b34
--- /dev/null
@@ -0,0 +1,37 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copyright (C) 2001, 2006, 2009, 2010 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>
+
+#include <limits.h>
+
+#include "mbchar.h"
+
+#if IS_BASIC_ASCII
+
+/* Bit table of characters in the ISO C "basic character set".  */
+const unsigned int is_basic_table [UCHAR_MAX / 32 + 1] =
+{
+  0x00001a00,           /* '\t' '\v' '\f' */
+  0xffffffef,           /* ' '...'#' '%'...'?' */
+  0xfffffffe,           /* 'A'...'Z' '[' '\\' ']' '^' '_' */
+  0x7ffffffe            /* 'a'...'z' '{' '|' '}' '~' */
+  /* The remaining bits are 0.  */
+};
+
+#endif /* IS_BASIC_ASCII */
diff --git a/gnu/mbchar.h b/gnu/mbchar.h
new file mode 100644 (file)
index 0000000..bbefddb
--- /dev/null
@@ -0,0 +1,352 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Multibyte character data type.
+   Copyright (C) 2001, 2005-2007, 2009-2010 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>.  */
+
+/* A multibyte character is a short subsequence of a char* string,
+   representing a single wide character.
+
+   We use multibyte characters instead of wide characters because of
+   the following goals:
+   1) correct multibyte handling, i.e. operate according to the LC_CTYPE
+      locale,
+   2) ease of maintenance, i.e. the maintainer needs not know all details
+      of the ISO C 99 standard,
+   3) don't fail grossly if the input is not in the encoding set by the
+      locale, because often different encodings are in use in the same
+      countries (ISO-8859-1/UTF-8, EUC-JP/Shift_JIS, ...),
+   4) fast in the case of ASCII characters,
+   5) portability, i.e. don't make unportable assumptions about wchar_t.
+
+   Multibyte characters are only accessed through the mb* macros.
+
+   mb_ptr (mbc)
+     return a pointer to the beginning of the multibyte sequence.
+
+   mb_len (mbc)
+     returns the number of bytes occupied by the multibyte sequence.
+     Always > 0.
+
+   mb_iseq (mbc, sc)
+     returns true if mbc is the standard ASCII character sc.
+
+   mb_isnul (mbc)
+     returns true if mbc is the nul character.
+
+   mb_cmp (mbc1, mbc2)
+     returns a positive, zero, or negative value depending on whether mbc1
+     sorts after, same or before mbc2.
+
+   mb_casecmp (mbc1, mbc2)
+     returns a positive, zero, or negative value depending on whether mbc1
+     sorts after, same or before mbc2, modulo upper/lowercase conversion.
+
+   mb_equal (mbc1, mbc2)
+     returns true if mbc1 and mbc2 are equal.
+
+   mb_caseequal (mbc1, mbc2)
+     returns true if mbc1 and mbc2 are equal modulo upper/lowercase conversion.
+
+   mb_isalnum (mbc)
+     returns true if mbc is alphanumeric.
+
+   mb_isalpha (mbc)
+     returns true if mbc is alphabetic.
+
+   mb_isascii(mbc)
+     returns true if mbc is plain ASCII.
+
+   mb_isblank (mbc)
+     returns true if mbc is a blank.
+
+   mb_iscntrl (mbc)
+     returns true if mbc is a control character.
+
+   mb_isdigit (mbc)
+     returns true if mbc is a decimal digit.
+
+   mb_isgraph (mbc)
+     returns true if mbc is a graphic character.
+
+   mb_islower (mbc)
+     returns true if mbc is lowercase.
+
+   mb_isprint (mbc)
+     returns true if mbc is a printable character.
+
+   mb_ispunct (mbc)
+     returns true if mbc is a punctuation character.
+
+   mb_isspace (mbc)
+     returns true if mbc is a space character.
+
+   mb_isupper (mbc)
+     returns true if mbc is uppercase.
+
+   mb_isxdigit (mbc)
+     returns true if mbc is a hexadecimal digit.
+
+   mb_width (mbc)
+     returns the number of columns on the output device occupied by mbc.
+     Always >= 0.
+
+   mb_putc (mbc, stream)
+     outputs mbc on stream, a byte oriented FILE stream opened for output.
+
+   mb_setascii (&mbc, sc)
+     assigns the standard ASCII character sc to mbc.
+
+   mb_copy (&destmbc, &srcmbc)
+     copies srcmbc to destmbc.
+
+   Here are the function prototypes of the macros.
+
+   extern const char *  mb_ptr (const mbchar_t mbc);
+   extern size_t        mb_len (const mbchar_t mbc);
+   extern bool          mb_iseq (const mbchar_t mbc, char sc);
+   extern bool          mb_isnul (const mbchar_t mbc);
+   extern int           mb_cmp (const mbchar_t mbc1, const mbchar_t mbc2);
+   extern int           mb_casecmp (const mbchar_t mbc1, const mbchar_t mbc2);
+   extern bool          mb_equal (const mbchar_t mbc1, const mbchar_t mbc2);
+   extern bool          mb_caseequal (const mbchar_t mbc1, const mbchar_t mbc2);
+   extern bool          mb_isalnum (const mbchar_t mbc);
+   extern bool          mb_isalpha (const mbchar_t mbc);
+   extern bool          mb_isascii (const mbchar_t mbc);
+   extern bool          mb_isblank (const mbchar_t mbc);
+   extern bool          mb_iscntrl (const mbchar_t mbc);
+   extern bool          mb_isdigit (const mbchar_t mbc);
+   extern bool          mb_isgraph (const mbchar_t mbc);
+   extern bool          mb_islower (const mbchar_t mbc);
+   extern bool          mb_isprint (const mbchar_t mbc);
+   extern bool          mb_ispunct (const mbchar_t mbc);
+   extern bool          mb_isspace (const mbchar_t mbc);
+   extern bool          mb_isupper (const mbchar_t mbc);
+   extern bool          mb_isxdigit (const mbchar_t mbc);
+   extern int           mb_width (const mbchar_t mbc);
+   extern void          mb_putc (const mbchar_t mbc, FILE *stream);
+   extern void          mb_setascii (mbchar_t *new, char sc);
+   extern void          mb_copy (mbchar_t *new, const mbchar_t *old);
+ */
+
+#ifndef _MBCHAR_H
+#define _MBCHAR_H 1
+
+#include <stdbool.h>
+#include <string.h>
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before
+   <wchar.h>.  */
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+#include <wctype.h>
+
+#define MBCHAR_BUF_SIZE 24
+
+struct mbchar
+{
+  const char *ptr;      /* pointer to current character */
+  size_t bytes;         /* number of bytes of current character, > 0 */
+  bool wc_valid;        /* true if wc is a valid wide character */
+  wchar_t wc;           /* if wc_valid: the current character */
+  char buf[MBCHAR_BUF_SIZE]; /* room for the bytes, used for file input only */
+};
+
+/* EOF (not a real character) is represented with bytes = 0 and
+   wc_valid = false.  */
+
+typedef struct mbchar mbchar_t;
+
+/* Access the current character.  */
+#define mb_ptr(mbc) ((mbc).ptr)
+#define mb_len(mbc) ((mbc).bytes)
+
+/* Comparison of characters.  */
+#define mb_iseq(mbc, sc) ((mbc).wc_valid && (mbc).wc == (sc))
+#define mb_isnul(mbc) ((mbc).wc_valid && (mbc).wc == 0)
+#define mb_cmp(mbc1, mbc2) \
+  ((mbc1).wc_valid                                                      \
+   ? ((mbc2).wc_valid                                                   \
+      ? (int) (mbc1).wc - (int) (mbc2).wc                               \
+      : -1)                                                             \
+   : ((mbc2).wc_valid                                                   \
+      ? 1                                                               \
+      : (mbc1).bytes == (mbc2).bytes                                    \
+        ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes)                 \
+        : (mbc1).bytes < (mbc2).bytes                                   \
+          ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \
+          : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1)))
+#define mb_casecmp(mbc1, mbc2) \
+  ((mbc1).wc_valid                                                      \
+   ? ((mbc2).wc_valid                                                   \
+      ? (int) towlower ((mbc1).wc) - (int) towlower ((mbc2).wc)         \
+      : -1)                                                             \
+   : ((mbc2).wc_valid                                                   \
+      ? 1                                                               \
+      : (mbc1).bytes == (mbc2).bytes                                    \
+        ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes)                 \
+        : (mbc1).bytes < (mbc2).bytes                                   \
+          ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \
+          : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1)))
+#define mb_equal(mbc1, mbc2) \
+  ((mbc1).wc_valid && (mbc2).wc_valid                                   \
+   ? (mbc1).wc == (mbc2).wc                                             \
+   : (mbc1).bytes == (mbc2).bytes                                       \
+     && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0)
+#define mb_caseequal(mbc1, mbc2) \
+  ((mbc1).wc_valid && (mbc2).wc_valid                                   \
+   ? towlower ((mbc1).wc) == towlower ((mbc2).wc)                       \
+   : (mbc1).bytes == (mbc2).bytes                                       \
+     && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0)
+
+/* <ctype.h>, <wctype.h> classification.  */
+#define mb_isascii(mbc) \
+  ((mbc).wc_valid && (mbc).wc >= 0 && (mbc).wc <= 127)
+#define mb_isalnum(mbc) ((mbc).wc_valid && iswalnum ((mbc).wc))
+#define mb_isalpha(mbc) ((mbc).wc_valid && iswalpha ((mbc).wc))
+#define mb_isblank(mbc) ((mbc).wc_valid && iswblank ((mbc).wc))
+#define mb_iscntrl(mbc) ((mbc).wc_valid && iswcntrl ((mbc).wc))
+#define mb_isdigit(mbc) ((mbc).wc_valid && iswdigit ((mbc).wc))
+#define mb_isgraph(mbc) ((mbc).wc_valid && iswgraph ((mbc).wc))
+#define mb_islower(mbc) ((mbc).wc_valid && iswlower ((mbc).wc))
+#define mb_isprint(mbc) ((mbc).wc_valid && iswprint ((mbc).wc))
+#define mb_ispunct(mbc) ((mbc).wc_valid && iswpunct ((mbc).wc))
+#define mb_isspace(mbc) ((mbc).wc_valid && iswspace ((mbc).wc))
+#define mb_isupper(mbc) ((mbc).wc_valid && iswupper ((mbc).wc))
+#define mb_isxdigit(mbc) ((mbc).wc_valid && iswxdigit ((mbc).wc))
+
+/* Extra <wchar.h> function.  */
+
+/* Unprintable characters appear as a small box of width 1.  */
+#define MB_UNPRINTABLE_WIDTH 1
+
+static inline int
+mb_width_aux (wint_t wc)
+{
+  int w = wcwidth (wc);
+  /* For unprintable characters, arbitrarily return 0 for control characters
+     and MB_UNPRINTABLE_WIDTH otherwise.  */
+  return (w >= 0 ? w : iswcntrl (wc) ? 0 : MB_UNPRINTABLE_WIDTH);
+}
+
+#define mb_width(mbc) \
+  ((mbc).wc_valid ? mb_width_aux ((mbc).wc) : MB_UNPRINTABLE_WIDTH)
+
+/* Output.  */
+#define mb_putc(mbc, stream)  fwrite ((mbc).ptr, 1, (mbc).bytes, (stream))
+
+/* Assignment.  */
+#define mb_setascii(mbc, sc) \
+  ((mbc)->ptr = (mbc)->buf, (mbc)->bytes = 1, (mbc)->wc_valid = 1, \
+   (mbc)->wc = (mbc)->buf[0] = (sc))
+
+/* Copying a character.  */
+static inline void
+mb_copy (mbchar_t *new_mbc, const mbchar_t *old_mbc)
+{
+  if (old_mbc->ptr == &old_mbc->buf[0])
+    {
+      memcpy (&new_mbc->buf[0], &old_mbc->buf[0], old_mbc->bytes);
+      new_mbc->ptr = &new_mbc->buf[0];
+    }
+  else
+    new_mbc->ptr = old_mbc->ptr;
+  new_mbc->bytes = old_mbc->bytes;
+  if ((new_mbc->wc_valid = old_mbc->wc_valid))
+    new_mbc->wc = old_mbc->wc;
+}
+
+
+/* is_basic(c) tests whether the single-byte character c is in the
+   ISO C "basic character set".
+   This is a convenience function, and is in this file only to share code
+   between mbiter_multi.h and mbfile_multi.h.  */
+#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
+    && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
+    && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
+    && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
+    && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
+    && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
+    && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
+    && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
+    && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
+    && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
+    && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
+    && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
+    && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
+    && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
+    && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
+    && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
+    && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
+    && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
+    && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
+    && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
+    && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
+    && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
+    && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)
+/* The character set is ISO-646, not EBCDIC. */
+# define IS_BASIC_ASCII 1
+
+extern const unsigned int is_basic_table[];
+
+static inline bool
+is_basic (char c)
+{
+  return (is_basic_table [(unsigned char) c >> 5] >> ((unsigned char) c & 31))
+         & 1;
+}
+
+#else
+
+static inline bool
+is_basic (char c)
+{
+  switch (c)
+    {
+    case '\t': case '\v': case '\f':
+    case ' ': case '!': case '"': case '#': case '%':
+    case '&': case '\'': case '(': case ')': case '*':
+    case '+': case ',': case '-': case '.': case '/':
+    case '0': case '1': case '2': case '3': case '4':
+    case '5': case '6': case '7': case '8': case '9':
+    case ':': case ';': case '<': case '=': case '>':
+    case '?':
+    case 'A': case 'B': case 'C': case 'D': case 'E':
+    case 'F': case 'G': case 'H': case 'I': case 'J':
+    case 'K': case 'L': case 'M': case 'N': case 'O':
+    case 'P': case 'Q': case 'R': case 'S': case 'T':
+    case 'U': case 'V': case 'W': case 'X': case 'Y':
+    case 'Z':
+    case '[': case '\\': case ']': case '^': case '_':
+    case 'a': case 'b': case 'c': case 'd': case 'e':
+    case 'f': case 'g': case 'h': case 'i': case 'j':
+    case 'k': case 'l': case 'm': case 'n': case 'o':
+    case 'p': case 'q': case 'r': case 's': case 't':
+    case 'u': case 'v': case 'w': case 'x': case 'y':
+    case 'z': case '{': case '|': case '}': case '~':
+      return 1;
+    default:
+      return 0;
+    }
+}
+
+#endif
+
+#endif /* _MBCHAR_H */
diff --git a/gnu/mbrtowc.c b/gnu/mbrtowc.c
new file mode 100644 (file)
index 0000000..7768ce9
--- /dev/null
@@ -0,0 +1,388 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Convert multibyte character to wide character.
+   Copyright (C) 1999-2002, 2005-2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+   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 <wchar.h>
+
+#if GNULIB_defined_mbstate_t
+/* Implement mbrtowc() on top of mbtowc().  */
+
+# include <errno.h>
+# include <stdlib.h>
+
+# include "localcharset.h"
+# include "streq.h"
+# include "verify.h"
+
+
+verify (sizeof (mbstate_t) >= 4);
+
+static char internal_state[4];
+
+size_t
+mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
+{
+  char *pstate = (char *)ps;
+
+  if (pstate == NULL)
+    pstate = internal_state;
+
+  if (s == NULL)
+    {
+      pwc = NULL;
+      s = "";
+      n = 1;
+    }
+
+  if (n == 0)
+    return (size_t)(-2);
+
+  /* Here n > 0.  */
+  {
+    size_t nstate = pstate[0];
+    char buf[4];
+    const char *p;
+    size_t m;
+
+    switch (nstate)
+      {
+      case 0:
+        p = s;
+        m = n;
+        break;
+      case 3:
+        buf[2] = pstate[3];
+        /*FALLTHROUGH*/
+      case 2:
+        buf[1] = pstate[2];
+        /*FALLTHROUGH*/
+      case 1:
+        buf[0] = pstate[1];
+        p = buf;
+        m = nstate;
+        buf[m++] = s[0];
+        if (n >= 2 && m < 4)
+          {
+            buf[m++] = s[1];
+            if (n >= 3 && m < 4)
+              buf[m++] = s[2];
+          }
+        break;
+      default:
+        errno = EINVAL;
+        return (size_t)(-1);
+      }
+
+    /* Here m > 0.  */
+
+# if __GLIBC__
+    /* Work around bug <http://sourceware.org/bugzilla/show_bug.cgi?id=9674> */
+    mbtowc (NULL, NULL, 0);
+# endif
+    {
+      int res = mbtowc (pwc, p, m);
+
+      if (res >= 0)
+        {
+          if (pwc != NULL && ((*pwc == 0) != (res == 0)))
+            abort ();
+          if (nstate >= (res > 0 ? res : 1))
+            abort ();
+          res -= nstate;
+          pstate[0] = 0;
+          return res;
+        }
+
+      /* mbtowc does not distinguish between invalid and incomplete multibyte
+         sequences.  But mbrtowc needs to make this distinction.
+         There are two possible approaches:
+           - Use iconv() and its return value.
+           - Use built-in knowledge about the possible encodings.
+         Given the low quality of implementation of iconv() on the systems that
+         lack mbrtowc(), we use the second approach.
+         The possible encodings are:
+           - 8-bit encodings,
+           - EUC-JP, EUC-KR, GB2312, EUC-TW, BIG5, GB18030, SJIS,
+           - UTF-8.
+         Use specialized code for each.  */
+      if (m >= 4 || m >= MB_CUR_MAX)
+        goto invalid;
+      /* Here MB_CUR_MAX > 1 and 0 < m < 4.  */
+      {
+        const char *encoding = locale_charset ();
+
+        if (STREQ (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0))
+          {
+            /* Cf. unistr/u8-mblen.c.  */
+            unsigned char c = (unsigned char) p[0];
+
+            if (c >= 0xc2)
+              {
+                if (c < 0xe0)
+                  {
+                    if (m == 1)
+                      goto incomplete;
+                  }
+                else if (c < 0xf0)
+                  {
+                    if (m == 1)
+                      goto incomplete;
+                    if (m == 2)
+                      {
+                        unsigned char c2 = (unsigned char) p[1];
+
+                        if ((c2 ^ 0x80) < 0x40
+                            && (c >= 0xe1 || c2 >= 0xa0)
+                            && (c != 0xed || c2 < 0xa0))
+                          goto incomplete;
+                      }
+                  }
+                else if (c <= 0xf4)
+                  {
+                    if (m == 1)
+                      goto incomplete;
+                    else /* m == 2 || m == 3 */
+                      {
+                        unsigned char c2 = (unsigned char) p[1];
+
+                        if ((c2 ^ 0x80) < 0x40
+                            && (c >= 0xf1 || c2 >= 0x90)
+                            && (c < 0xf4 || (c == 0xf4 && c2 < 0x90)))
+                          {
+                            if (m == 2)
+                              goto incomplete;
+                            else /* m == 3 */
+                              {
+                                unsigned char c3 = (unsigned char) p[2];
+
+                                if ((c3 ^ 0x80) < 0x40)
+                                  goto incomplete;
+                              }
+                          }
+                      }
+                  }
+              }
+            goto invalid;
+          }
+
+        /* As a reference for this code, you can use the GNU libiconv
+           implementation.  Look for uses of the RET_TOOFEW macro.  */
+
+        if (STREQ (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0))
+          {
+            if (m == 1)
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if ((c >= 0xa1 && c < 0xff) || c == 0x8e || c == 0x8f)
+                  goto incomplete;
+              }
+            if (m == 2)
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if (c == 0x8f)
+                  {
+                    unsigned char c2 = (unsigned char) p[1];
+
+                    if (c2 >= 0xa1 && c2 < 0xff)
+                      goto incomplete;
+                  }
+              }
+            goto invalid;
+          }
+        if (STREQ (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
+            || STREQ (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0)
+            || STREQ (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0))
+          {
+            if (m == 1)
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if (c >= 0xa1 && c < 0xff)
+                  goto incomplete;
+              }
+            goto invalid;
+          }
+        if (STREQ (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0))
+          {
+            if (m == 1)
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if ((c >= 0xa1 && c < 0xff) || c == 0x8e)
+                  goto incomplete;
+              }
+            else /* m == 2 || m == 3 */
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if (c == 0x8e)
+                  goto incomplete;
+              }
+            goto invalid;
+          }
+        if (STREQ (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0))
+          {
+            if (m == 1)
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if ((c >= 0x90 && c <= 0xe3) || (c >= 0xf8 && c <= 0xfe))
+                  goto incomplete;
+              }
+            else /* m == 2 || m == 3 */
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if (c >= 0x90 && c <= 0xe3)
+                  {
+                    unsigned char c2 = (unsigned char) p[1];
+
+                    if (c2 >= 0x30 && c2 <= 0x39)
+                      {
+                        if (m == 2)
+                          goto incomplete;
+                        else /* m == 3 */
+                          {
+                            unsigned char c3 = (unsigned char) p[2];
+
+                            if (c3 >= 0x81 && c3 <= 0xfe)
+                              goto incomplete;
+                          }
+                      }
+                  }
+              }
+            goto invalid;
+          }
+        if (STREQ (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0))
+          {
+            if (m == 1)
+              {
+                unsigned char c = (unsigned char) p[0];
+
+                if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea)
+                    || (c >= 0xf0 && c <= 0xf9))
+                  goto incomplete;
+              }
+            goto invalid;
+          }
+
+        /* An unknown multibyte encoding.  */
+        goto incomplete;
+      }
+
+     incomplete:
+      {
+        size_t k = nstate;
+        /* Here 0 <= k < m < 4.  */
+        pstate[++k] = s[0];
+        if (k < m)
+          {
+            pstate[++k] = s[1];
+            if (k < m)
+              pstate[++k] = s[2];
+          }
+        if (k != m)
+          abort ();
+      }
+      pstate[0] = m;
+      return (size_t)(-2);
+
+     invalid:
+      errno = EILSEQ;
+      /* The conversion state is undefined, says POSIX.  */
+      return (size_t)(-1);
+    }
+  }
+}
+
+#else
+/* Override the system's mbrtowc() function.  */
+
+# undef mbrtowc
+
+size_t
+rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
+{
+# if MBRTOWC_NULL_ARG_BUG || MBRTOWC_RETVAL_BUG
+  if (s == NULL)
+    {
+      pwc = NULL;
+      s = "";
+      n = 1;
+    }
+# endif
+
+# if MBRTOWC_RETVAL_BUG
+  {
+    static mbstate_t internal_state;
+
+    /* Override mbrtowc's internal state.  We can not call mbsinit() on the
+       hidden internal state, but we can call it on our variable.  */
+    if (ps == NULL)
+      ps = &internal_state;
+
+    if (!mbsinit (ps))
+      {
+        /* Parse the rest of the multibyte character byte for byte.  */
+        size_t count = 0;
+        for (; n > 0; s++, n--)
+          {
+            wchar_t wc;
+            size_t ret = mbrtowc (&wc, s, 1, ps);
+
+            if (ret == (size_t)(-1))
+              return (size_t)(-1);
+            count++;
+            if (ret != (size_t)(-2))
+              {
+                /* The multibyte character has been completed.  */
+                if (pwc != NULL)
+                  *pwc = wc;
+                return (wc == 0 ? 0 : count);
+              }
+          }
+        return (size_t)(-2);
+      }
+  }
+# endif
+
+# if MBRTOWC_NUL_RETVAL_BUG
+  {
+    wchar_t wc;
+    size_t ret = mbrtowc (&wc, s, n, ps);
+
+    if (ret != (size_t)(-1) && ret != (size_t)(-2))
+      {
+        if (pwc != NULL)
+          *pwc = wc;
+        if (wc == 0)
+          ret = 0;
+      }
+    return ret;
+  }
+# else
+  return mbrtowc (pwc, s, n, ps);
+# endif
+}
+
+#endif
diff --git a/gnu/mbscasecmp.c b/gnu/mbscasecmp.c
new file mode 100644 (file)
index 0000000..285554b
--- /dev/null
@@ -0,0 +1,100 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Case-insensitive string comparison function.
+   Copyright (C) 1998-1999, 2005-2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2005,
+   based on earlier glibc code.
+
+   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 <string.h>
+
+#include <ctype.h>
+#include <limits.h>
+
+#include "mbuiter.h"
+
+#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
+
+/* Compare the character 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.
+   Note: This function may, in multibyte locales, return 0 for strings of
+   different lengths!  */
+int
+mbscasecmp (const char *s1, const char *s2)
+{
+  if (s1 == s2)
+    return 0;
+
+  /* Be careful not to look at the entire extent of s1 or s2 until needed.
+     This is useful because when two strings differ, the difference is
+     most often already in the very few first characters.  */
+  if (MB_CUR_MAX > 1)
+    {
+      mbui_iterator_t iter1;
+      mbui_iterator_t iter2;
+
+      mbui_init (iter1, s1);
+      mbui_init (iter2, s2);
+
+      while (mbui_avail (iter1) && mbui_avail (iter2))
+        {
+          int cmp = mb_casecmp (mbui_cur (iter1), mbui_cur (iter2));
+
+          if (cmp != 0)
+            return cmp;
+
+          mbui_advance (iter1);
+          mbui_advance (iter2);
+        }
+      if (mbui_avail (iter1))
+        /* s2 terminated before s1.  */
+        return 1;
+      if (mbui_avail (iter2))
+        /* s1 terminated before s2.  */
+        return -1;
+      return 0;
+    }
+  else
+    {
+      const unsigned char *p1 = (const unsigned char *) s1;
+      const unsigned char *p2 = (const unsigned char *) s2;
+      unsigned char c1, c2;
+
+      do
+        {
+          c1 = TOLOWER (*p1);
+          c2 = TOLOWER (*p2);
+
+          if (c1 == '\0')
+            break;
+
+          ++p1;
+          ++p2;
+        }
+      while (c1 == c2);
+
+      if (UCHAR_MAX <= INT_MAX)
+        return c1 - c2;
+      else
+        /* On machines where 'char' and 'int' are types of the same size, the
+           difference of two 'unsigned char' values - including the sign bit -
+           doesn't fit in an 'int'.  */
+        return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
+    }
+}
diff --git a/gnu/mbsinit.c b/gnu/mbsinit.c
new file mode 100644 (file)
index 0000000..78f113b
--- /dev/null
@@ -0,0 +1,49 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Test for initial conversion state.
+   Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+   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 <wchar.h>
+
+#include "verify.h"
+
+/* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs()
+   and wcrtomb(), wcsrtombs().
+   We assume that
+     - sizeof (mbstate_t) >= 4,
+     - only stateless encodings are supported (such as UTF-8 and EUC-JP, but
+       not ISO-2022 variants),
+     - for each encoding, the number of bytes for a wide character is <= 4.
+       (This maximum is attained for UTF-8, GB18030, EUC-TW.)
+   We define the meaning of mbstate_t as follows:
+     - In mb -> wc direction, mbstate_t's first byte contains the number of
+       buffered bytes (in the range 0..3), followed by up to 3 buffered bytes.
+     - In wc -> mb direction, mbstate_t contains no information. In other
+       words, it is always in the initial state.  */
+
+verify (sizeof (mbstate_t) >= 4);
+
+int
+mbsinit (const mbstate_t *ps)
+{
+  const char *pstate = (const char *)ps;
+
+  return pstate[0] == 0;
+}
diff --git a/gnu/mbsrtowcs-state.c b/gnu/mbsrtowcs-state.c
new file mode 100644 (file)
index 0000000..e84dcbe
--- /dev/null
@@ -0,0 +1,39 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Convert string to wide string.
+   Copyright (C) 2008-2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+   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>
+
+#include <wchar.h>
+
+/* Internal state used by the functions mbsrtowcs() and mbsnrtowcs().  */
+mbstate_t _gl_mbsrtowcs_state
+/* The state must initially be in the "initial state"; so, zero-initialize it.
+   On most systems, putting it into BSS is sufficient.  Not so on MacOS X 10.3,
+   see <http://lists.gnu.org/archive/html/bug-gnulib/2009-01/msg00329.html>.
+   When it needs an initializer, use 0 or {0} as initializer? 0 only works
+   when mbstate_t is a scalar type (such as when gnulib defines it, or on
+   AIX, IRIX, mingw). {0} works as an initializer in all cases: for a struct
+   or union type, but also for a scalar type (ISO C 99, 6.7.8.(11)).  */
+#if defined __ELF__
+  /* On ELF systems, variables in BSS behave well.  */
+#else
+  /* Use braces, to be on the safe side.  */
+  = { 0 }
+#endif
+  ;
diff --git a/gnu/mbsrtowcs.c b/gnu/mbsrtowcs.c
new file mode 100644 (file)
index 0000000..ced2942
--- /dev/null
@@ -0,0 +1,138 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Convert string to wide string.
+   Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+   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 <wchar.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <stdlib.h>
+
+#include "strnlen1.h"
+
+
+extern mbstate_t _gl_mbsrtowcs_state;
+
+size_t
+mbsrtowcs (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+{
+  if (ps == NULL)
+    ps = &_gl_mbsrtowcs_state;
+  {
+    const char *src = *srcp;
+
+    if (dest != NULL)
+      {
+        wchar_t *destptr = dest;
+
+        for (; len > 0; destptr++, len--)
+          {
+            size_t src_avail;
+            size_t ret;
+
+            /* An optimized variant of
+               src_avail = strnlen1 (src, MB_LEN_MAX);  */
+            if (src[0] == '\0')
+              src_avail = 1;
+            else if (src[1] == '\0')
+              src_avail = 2;
+            else if (src[2] == '\0')
+              src_avail = 3;
+            else if (MB_LEN_MAX <= 4 || src[3] == '\0')
+              src_avail = 4;
+            else
+              src_avail = 4 + strnlen1 (src + 4, MB_LEN_MAX - 4);
+
+            /* Parse the next multibyte character.  */
+            ret = mbrtowc (destptr, src, src_avail, ps);
+
+            if (ret == (size_t)(-2))
+              /* Encountered a multibyte character that extends past a '\0' byte
+                 or that is longer than MB_LEN_MAX bytes.  Cannot happen.  */
+              abort ();
+
+            if (ret == (size_t)(-1))
+              goto bad_input;
+            if (ret == 0)
+              {
+                src = NULL;
+                /* Here mbsinit (ps).  */
+                break;
+              }
+            src += ret;
+          }
+
+        *srcp = src;
+        return destptr - dest;
+      }
+    else
+      {
+        /* Ignore dest and len, don't store *srcp at the end, and
+           don't clobber *ps.  */
+        mbstate_t state = *ps;
+        size_t totalcount = 0;
+
+        for (;; totalcount++)
+          {
+            size_t src_avail;
+            size_t ret;
+
+            /* An optimized variant of
+               src_avail = strnlen1 (src, MB_LEN_MAX);  */
+            if (src[0] == '\0')
+              src_avail = 1;
+            else if (src[1] == '\0')
+              src_avail = 2;
+            else if (src[2] == '\0')
+              src_avail = 3;
+            else if (MB_LEN_MAX <= 4 || src[3] == '\0')
+              src_avail = 4;
+            else
+              src_avail = 4 + strnlen1 (src + 4, MB_LEN_MAX - 4);
+
+            /* Parse the next multibyte character.  */
+            ret = mbrtowc (NULL, src, src_avail, &state);
+
+            if (ret == (size_t)(-2))
+              /* Encountered a multibyte character that extends past a '\0' byte
+                 or that is longer than MB_LEN_MAX bytes.  Cannot happen.  */
+              abort ();
+
+            if (ret == (size_t)(-1))
+              goto bad_input2;
+            if (ret == 0)
+              {
+                /* Here mbsinit (&state).  */
+                break;
+              }
+            src += ret;
+          }
+
+        return totalcount;
+      }
+
+   bad_input:
+    *srcp = src;
+   bad_input2:
+    errno = EILSEQ;
+    return (size_t)(-1);
+  }
+}
diff --git a/gnu/mbuiter.h b/gnu/mbuiter.h
new file mode 100644 (file)
index 0000000..a81e6ad
--- /dev/null
@@ -0,0 +1,224 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Iterating through multibyte strings: macros for multi-byte encodings.
+   Copyright (C) 2001, 2005, 2007, 2009, 2010 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>.  */
+
+/* The macros in this file implement forward iteration through a
+   multi-byte string, without knowing its length a-priori.
+
+   With these macros, an iteration loop that looks like
+
+      char *iter;
+      for (iter = buf; *iter != '\0'; iter++)
+        {
+          do_something (*iter);
+        }
+
+   becomes
+
+      mbui_iterator_t iter;
+      for (mbui_init (iter, buf); mbui_avail (iter); mbui_advance (iter))
+        {
+          do_something (mbui_cur_ptr (iter), mb_len (mbui_cur (iter)));
+        }
+
+   The benefit of these macros over plain use of mbrtowc is:
+   - Handling of invalid multibyte sequences is possible without
+     making the code more complicated, while still preserving the
+     invalid multibyte sequences.
+
+   Compared to mbiter.h, the macros here don't need to know the string's
+   length a-priori.  The downside is that at each step, the look-ahead
+   that guards against overrunning the terminating '\0' is more expensive.
+   The mbui_* macros are therefore suitable when there is a high probability
+   that only the first few multibyte characters need to be inspected.
+   Whereas the mbi_* macros are better if usually the iteration runs
+   through the entire string.
+
+   mbui_iterator_t
+     is a type usable for variable declarations.
+
+   mbui_init (iter, startptr)
+     initializes the iterator, starting at startptr.
+
+   mbui_avail (iter)
+     returns true if there are more multibyte chracters available before
+     the end of string is reached. In this case, mbui_cur (iter) is
+     initialized to the next multibyte chracter.
+
+   mbui_advance (iter)
+     advances the iterator by one multibyte character.
+
+   mbui_cur (iter)
+     returns the current multibyte character, of type mbchar_t.  All the
+     macros defined in mbchar.h can be used on it.
+
+   mbui_cur_ptr (iter)
+     return a pointer to the beginning of the current multibyte character.
+
+   mbui_reloc (iter, ptrdiff)
+     relocates iterator when the string is moved by ptrdiff bytes.
+
+   mbui_copy (&destiter, &srciter)
+     copies srciter to destiter.
+
+   Here are the function prototypes of the macros.
+
+   extern void          mbui_init (mbui_iterator_t iter, const char *startptr);
+   extern bool          mbui_avail (mbui_iterator_t iter);
+   extern void          mbui_advance (mbui_iterator_t iter);
+   extern mbchar_t      mbui_cur (mbui_iterator_t iter);
+   extern const char *  mbui_cur_ptr (mbui_iterator_t iter);
+   extern void          mbui_reloc (mbui_iterator_t iter, ptrdiff_t ptrdiff);
+   extern void          mbui_copy (mbui_iterator_t *new, const mbui_iterator_t *old);
+ */
+
+#ifndef _MBUITER_H
+#define _MBUITER_H 1
+
+#include <assert.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before
+   <wchar.h>.  */
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+
+#include "mbchar.h"
+#include "strnlen1.h"
+
+struct mbuiter_multi
+{
+  bool in_shift;        /* true if next byte may not be interpreted as ASCII */
+  mbstate_t state;      /* if in_shift: current shift state */
+  bool next_done;       /* true if mbui_avail has already filled the following */
+  struct mbchar cur;    /* the current character:
+        const char *cur.ptr             pointer to current character
+        The following are only valid after mbui_avail.
+        size_t cur.bytes                number of bytes of current character
+        bool cur.wc_valid               true if wc is a valid wide character
+        wchar_t cur.wc                  if wc_valid: the current character
+        */
+};
+
+static inline void
+mbuiter_multi_next (struct mbuiter_multi *iter)
+{
+  if (iter->next_done)
+    return;
+  if (iter->in_shift)
+    goto with_shift;
+  /* Handle most ASCII characters quickly, without calling mbrtowc().  */
+  if (is_basic (*iter->cur.ptr))
+    {
+      /* These characters are part of the basic character set.  ISO C 99
+         guarantees that their wide character code is identical to their
+         char code.  */
+      iter->cur.bytes = 1;
+      iter->cur.wc = *iter->cur.ptr;
+      iter->cur.wc_valid = true;
+    }
+  else
+    {
+      assert (mbsinit (&iter->state));
+      iter->in_shift = true;
+    with_shift:
+      iter->cur.bytes = mbrtowc (&iter->cur.wc, iter->cur.ptr,
+                                 strnlen1 (iter->cur.ptr, MB_CUR_MAX),
+                                 &iter->state);
+      if (iter->cur.bytes == (size_t) -1)
+        {
+          /* An invalid multibyte sequence was encountered.  */
+          iter->cur.bytes = 1;
+          iter->cur.wc_valid = false;
+          /* Whether to set iter->in_shift = false and reset iter->state
+             or not is not very important; the string is bogus anyway.  */
+        }
+      else if (iter->cur.bytes == (size_t) -2)
+        {
+          /* An incomplete multibyte character at the end.  */
+          iter->cur.bytes = strlen (iter->cur.ptr);
+          iter->cur.wc_valid = false;
+          /* Whether to set iter->in_shift = false and reset iter->state
+             or not is not important; the string end is reached anyway.  */
+        }
+      else
+        {
+          if (iter->cur.bytes == 0)
+            {
+              /* A null wide character was encountered.  */
+              iter->cur.bytes = 1;
+              assert (*iter->cur.ptr == '\0');
+              assert (iter->cur.wc == 0);
+            }
+          iter->cur.wc_valid = true;
+
+          /* When in the initial state, we can go back treating ASCII
+             characters more quickly.  */
+          if (mbsinit (&iter->state))
+            iter->in_shift = false;
+        }
+    }
+  iter->next_done = true;
+}
+
+static inline void
+mbuiter_multi_reloc (struct mbuiter_multi *iter, ptrdiff_t ptrdiff)
+{
+  iter->cur.ptr += ptrdiff;
+}
+
+static 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))
+    memcpy (&new_iter->state, &old_iter->state, sizeof (mbstate_t));
+  else
+    memset (&new_iter->state, 0, sizeof (mbstate_t));
+  new_iter->next_done = old_iter->next_done;
+  mb_copy (&new_iter->cur, &old_iter->cur);
+}
+
+/* Iteration macros.  */
+typedef struct mbuiter_multi mbui_iterator_t;
+#define mbui_init(iter, startptr) \
+  ((iter).cur.ptr = (startptr), \
+   (iter).in_shift = false, memset (&(iter).state, '\0', sizeof (mbstate_t)), \
+   (iter).next_done = false)
+#define mbui_avail(iter) \
+  (mbuiter_multi_next (&(iter)), !mb_isnul ((iter).cur))
+#define mbui_advance(iter) \
+  ((iter).cur.ptr += (iter).cur.bytes, (iter).next_done = false)
+
+/* Access to the current character.  */
+#define mbui_cur(iter) (iter).cur
+#define mbui_cur_ptr(iter) (iter).cur.ptr
+
+/* Relocation.  */
+#define mbui_reloc(iter, ptrdiff) mbuiter_multi_reloc (&iter, ptrdiff)
+
+/* Copying an iterator.  */
+#define mbui_copy mbuiter_multi_copy
+
+#endif /* _MBUITER_H */
diff --git a/gnu/memchr.c b/gnu/memchr.c
new file mode 100644 (file)
index 0000000..91178cf
--- /dev/null
@@ -0,0 +1,174 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2010
+   Free Software Foundation, Inc.
+
+   Based on strlen implementation by Torbjorn Granlund (tege@sics.se),
+   with help from Dan Sahlin (dan@sics.se) and
+   commentary by Jim Blandy (jimb@ai.mit.edu);
+   adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu),
+   and implemented by Roland McGrath (roland@ai.mit.edu).
+
+NOTE: The canonical source of this file is maintained with the GNU C Library.
+Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+
+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 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 _LIBC
+# include <config.h>
+#endif
+
+#include <string.h>
+
+#include <stddef.h>
+
+#if defined _LIBC
+# include <memcopy.h>
+#else
+# define reg_char char
+#endif
+
+#include <limits.h>
+
+#if HAVE_BP_SYM_H || defined _LIBC
+# include <bp-sym.h>
+#else
+# define BP_SYM(sym) sym
+#endif
+
+#undef __memchr
+#ifdef _LIBC
+# undef memchr
+#endif
+
+#ifndef weak_alias
+# define __memchr memchr
+#endif
+
+/* Search no more than N bytes of S for C.  */
+void *
+__memchr (void const *s, int c_in, size_t n)
+{
+  /* On 32-bit hardware, choosing longword to be a 32-bit unsigned
+     long instead of a 64-bit uintmax_t tends to give better
+     performance.  On 64-bit hardware, unsigned long is generally 64
+     bits already.  Change this typedef to experiment with
+     performance.  */
+  typedef unsigned long int longword;
+
+  const unsigned char *char_ptr;
+  const longword *longword_ptr;
+  longword repeated_one;
+  longword repeated_c;
+  unsigned reg_char c;
+
+  c = (unsigned char) c_in;
+
+  /* Handle the first few bytes by reading one byte at a time.
+     Do this until CHAR_PTR is aligned on a longword boundary.  */
+  for (char_ptr = (const unsigned char *) s;
+       n > 0 && (size_t) char_ptr % sizeof (longword) != 0;
+       --n, ++char_ptr)
+    if (*char_ptr == c)
+      return (void *) char_ptr;
+
+  longword_ptr = (const longword *) char_ptr;
+
+  /* All these elucidatory comments refer to 4-byte longwords,
+     but the theory applies equally well to any size longwords.  */
+
+  /* Compute auxiliary longword values:
+     repeated_one is a value which has a 1 in every byte.
+     repeated_c has c in every byte.  */
+  repeated_one = 0x01010101;
+  repeated_c = c | (c << 8);
+  repeated_c |= repeated_c << 16;
+  if (0xffffffffU < (longword) -1)
+    {
+      repeated_one |= repeated_one << 31 << 1;
+      repeated_c |= repeated_c << 31 << 1;
+      if (8 < sizeof (longword))
+        {
+          size_t i;
+
+          for (i = 64; i < sizeof (longword) * 8; i *= 2)
+            {
+              repeated_one |= repeated_one << i;
+              repeated_c |= repeated_c << i;
+            }
+        }
+    }
+
+  /* Instead of the traditional loop which tests each byte, we will test a
+     longword at a time.  The tricky part is testing if *any of the four*
+     bytes in the longword in question are equal to c.  We first use an xor
+     with repeated_c.  This reduces the task to testing whether *any of the
+     four* bytes in longword1 is zero.
+
+     We compute tmp =
+       ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7).
+     That is, we perform the following operations:
+       1. Subtract repeated_one.
+       2. & ~longword1.
+       3. & a mask consisting of 0x80 in every byte.
+     Consider what happens in each byte:
+       - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff,
+         and step 3 transforms it into 0x80.  A carry can also be propagated
+         to more significant bytes.
+       - If a byte of longword1 is nonzero, let its lowest 1 bit be at
+         position k (0 <= k <= 7); so the lowest k bits are 0.  After step 1,
+         the byte ends in a single bit of value 0 and k bits of value 1.
+         After step 2, the result is just k bits of value 1: 2^k - 1.  After
+         step 3, the result is 0.  And no carry is produced.
+     So, if longword1 has only non-zero bytes, tmp is zero.
+     Whereas if longword1 has a zero byte, call j the position of the least
+     significant zero byte.  Then the result has a zero at positions 0, ...,
+     j-1 and a 0x80 at position j.  We cannot predict the result at the more
+     significant bytes (positions j+1..3), but it does not matter since we
+     already have a non-zero bit at position 8*j+7.
+
+     So, the test whether any byte in longword1 is zero is equivalent to
+     testing whether tmp is nonzero.  */
+
+  while (n >= sizeof (longword))
+    {
+      longword longword1 = *longword_ptr ^ repeated_c;
+
+      if ((((longword1 - repeated_one) & ~longword1)
+           & (repeated_one << 7)) != 0)
+        break;
+      longword_ptr++;
+      n -= sizeof (longword);
+    }
+
+  char_ptr = (const unsigned char *) longword_ptr;
+
+  /* At this point, we know that either n < sizeof (longword), or one of the
+     sizeof (longword) bytes starting at char_ptr is == c.  On little-endian
+     machines, we could determine the first such byte without any further
+     memory accesses, just by looking at the tmp result from the last loop
+     iteration.  But this does not work on big-endian machines.  Choose code
+     that works in both cases.  */
+
+  for (; n > 0; --n, ++char_ptr)
+    {
+      if (*char_ptr == c)
+        return (void *) char_ptr;
+    }
+
+  return NULL;
+}
+#ifdef weak_alias
+weak_alias (__memchr, BP_SYM (memchr))
+#endif
diff --git a/gnu/memchr.valgrind b/gnu/memchr.valgrind
new file mode 100644 (file)
index 0000000..60f247e
--- /dev/null
@@ -0,0 +1,14 @@
+# Suppress a valgrind message about use of uninitialized memory in memchr().
+# POSIX states that when the character is found, memchr must not read extra
+# bytes in an overestimated length (for example, where memchr is used to
+# implement strnlen).  However, we use a safe word read to provide a speedup.
+{
+    memchr-value4
+    Memcheck:Value4
+    fun:rpl_memchr
+}
+{
+    memchr-value8
+    Memcheck:Value8
+    fun:rpl_memchr
+}
diff --git a/gnu/mempcpy.c b/gnu/mempcpy.c
new file mode 100644 (file)
index 0000000..c603140
--- /dev/null
@@ -0,0 +1,31 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copy memory area and return pointer after last written byte.
+   Copyright (C) 2003, 2007, 2009, 2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <string.h>
+
+/* Copy N bytes of SRC to DEST, return pointer to bytes after the
+   last written byte.  */
+void *
+mempcpy (void *dest, const void *src, size_t n)
+{
+  return (char *) memcpy (dest, src, n) + n;
+}
diff --git a/gnu/memrchr.c b/gnu/memrchr.c
new file mode 100644 (file)
index 0000000..a42f2a1
--- /dev/null
@@ -0,0 +1,163 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* memrchr -- find the last occurrence of a byte in a memory block
+
+   Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2010 Free Software
+   Foundation, Inc.
+
+   Based on strlen implementation by Torbjorn Granlund (tege@sics.se),
+   with help from Dan Sahlin (dan@sics.se) and
+   commentary by Jim Blandy (jimb@ai.mit.edu);
+   adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu),
+   and implemented by Roland McGrath (roland@ai.mit.edu).
+
+   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 defined _LIBC
+# include <memcopy.h>
+#else
+# include <config.h>
+# define reg_char char
+#endif
+
+#include <string.h>
+#include <limits.h>
+
+#undef __memrchr
+#ifdef _LIBC
+# undef memrchr
+#endif
+
+#ifndef weak_alias
+# define __memrchr memrchr
+#endif
+
+/* Search no more than N bytes of S for C.  */
+void *
+__memrchr (void const *s, int c_in, size_t n)
+{
+  /* On 32-bit hardware, choosing longword to be a 32-bit unsigned
+     long instead of a 64-bit uintmax_t tends to give better
+     performance.  On 64-bit hardware, unsigned long is generally 64
+     bits already.  Change this typedef to experiment with
+     performance.  */
+  typedef unsigned long int longword;
+
+  const unsigned char *char_ptr;
+  const longword *longword_ptr;
+  longword repeated_one;
+  longword repeated_c;
+  unsigned reg_char c;
+
+  c = (unsigned char) c_in;
+
+  /* Handle the last few bytes by reading one byte at a time.
+     Do this until CHAR_PTR is aligned on a longword boundary.  */
+  for (char_ptr = (const unsigned char *) s + n;
+       n > 0 && (size_t) char_ptr % sizeof (longword) != 0;
+       --n)
+    if (*--char_ptr == c)
+      return (void *) char_ptr;
+
+  longword_ptr = (const longword *) char_ptr;
+
+  /* All these elucidatory comments refer to 4-byte longwords,
+     but the theory applies equally well to any size longwords.  */
+
+  /* Compute auxiliary longword values:
+     repeated_one is a value which has a 1 in every byte.
+     repeated_c has c in every byte.  */
+  repeated_one = 0x01010101;
+  repeated_c = c | (c << 8);
+  repeated_c |= repeated_c << 16;
+  if (0xffffffffU < (longword) -1)
+    {
+      repeated_one |= repeated_one << 31 << 1;
+      repeated_c |= repeated_c << 31 << 1;
+      if (8 < sizeof (longword))
+        {
+          size_t i;
+
+          for (i = 64; i < sizeof (longword) * 8; i *= 2)
+            {
+              repeated_one |= repeated_one << i;
+              repeated_c |= repeated_c << i;
+            }
+        }
+    }
+
+  /* Instead of the traditional loop which tests each byte, we will test a
+     longword at a time.  The tricky part is testing if *any of the four*
+     bytes in the longword in question are equal to c.  We first use an xor
+     with repeated_c.  This reduces the task to testing whether *any of the
+     four* bytes in longword1 is zero.
+
+     We compute tmp =
+       ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7).
+     That is, we perform the following operations:
+       1. Subtract repeated_one.
+       2. & ~longword1.
+       3. & a mask consisting of 0x80 in every byte.
+     Consider what happens in each byte:
+       - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff,
+         and step 3 transforms it into 0x80.  A carry can also be propagated
+         to more significant bytes.
+       - If a byte of longword1 is nonzero, let its lowest 1 bit be at
+         position k (0 <= k <= 7); so the lowest k bits are 0.  After step 1,
+         the byte ends in a single bit of value 0 and k bits of value 1.
+         After step 2, the result is just k bits of value 1: 2^k - 1.  After
+         step 3, the result is 0.  And no carry is produced.
+     So, if longword1 has only non-zero bytes, tmp is zero.
+     Whereas if longword1 has a zero byte, call j the position of the least
+     significant zero byte.  Then the result has a zero at positions 0, ...,
+     j-1 and a 0x80 at position j.  We cannot predict the result at the more
+     significant bytes (positions j+1..3), but it does not matter since we
+     already have a non-zero bit at position 8*j+7.
+
+     So, the test whether any byte in longword1 is zero is equivalent to
+     testing whether tmp is nonzero.  */
+
+  while (n >= sizeof (longword))
+    {
+      longword longword1 = *--longword_ptr ^ repeated_c;
+
+      if ((((longword1 - repeated_one) & ~longword1)
+           & (repeated_one << 7)) != 0)
+        {
+          longword_ptr++;
+          break;
+        }
+      n -= sizeof (longword);
+    }
+
+  char_ptr = (const unsigned char *) longword_ptr;
+
+  /* At this point, we know that either n < sizeof (longword), or one of the
+     sizeof (longword) bytes starting at char_ptr is == c.  On little-endian
+     machines, we could determine the first such byte without any further
+     memory accesses, just by looking at the tmp result from the last loop
+     iteration.  But this does not work on big-endian machines.  Choose code
+     that works in both cases.  */
+
+  while (n-- > 0)
+    {
+      if (*--char_ptr == c)
+        return (void *) char_ptr;
+    }
+
+  return NULL;
+}
+#ifdef weak_alias
+weak_alias (__memrchr, memrchr)
+#endif
diff --git a/gnu/mkdir.c b/gnu/mkdir.c
new file mode 100644 (file)
index 0000000..c782a73
--- /dev/null
@@ -0,0 +1,94 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* On some systems, mkdir ("foo/", 0700) fails because of the trailing
+   slash.  On those systems, this wrapper removes the trailing slash.
+
+   Copyright (C) 2001, 2003, 2006, 2008-2010 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 */
+
+#include <config.h>
+
+/* Specification.  */
+#include <sys/stat.h>
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "dirname.h"
+
+/* Disable the definition of mkdir to rpl_mkdir (from the <sys/stat.h>
+   substitute) in this file.  Otherwise, we'd get an endless recursion.  */
+#undef mkdir
+
+/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
+   Additionally, it declares _mkdir (and depending on compile flags, an
+   alias mkdir), only in the nonstandard io.h.  */
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# define mkdir(name,mode) _mkdir (name)
+# define maybe_unused _GL_UNUSED
+#else
+# define maybe_unused /* empty */
+#endif
+
+/* This function is required at least for NetBSD 1.5.2.  */
+
+int
+rpl_mkdir (char const *dir, mode_t mode maybe_unused)
+{
+  int ret_val;
+  char *tmp_dir;
+  size_t len = strlen (dir);
+
+  if (len && dir[len - 1] == '/')
+    {
+      tmp_dir = strdup (dir);
+      if (!tmp_dir)
+        {
+          /* Rather than rely on strdup-posix, we set errno ourselves.  */
+          errno = ENOMEM;
+          return -1;
+        }
+      strip_trailing_slashes (tmp_dir);
+    }
+  else
+    {
+      tmp_dir = (char *) dir;
+    }
+#if FUNC_MKDIR_DOT_BUG
+  /* Additionally, cygwin 1.5 mistakenly creates a directory "d/./".  */
+  {
+    char *last = last_component (tmp_dir);
+    if (*last == '.' && (last[1] == '\0'
+                         || (last[1] == '.' && last[2] == '\0')))
+      {
+        struct stat st;
+        if (stat (tmp_dir, &st) == 0)
+          errno = EEXIST;
+        return -1;
+      }
+  }
+#endif /* FUNC_MKDIR_DOT_BUG */
+
+  ret_val = mkdir (tmp_dir, mode);
+
+  if (tmp_dir != dir)
+    free (tmp_dir);
+
+  return ret_val;
+}
diff --git a/gnu/mkdirat.c b/gnu/mkdirat.c
new file mode 100644 (file)
index 0000000..3e05db8
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* fd-relative mkdir
+   Copyright (C) 2005-2006, 2009-2010 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 */
+
+#include <config.h>
+
+#include <unistd.h>
+
+/* Solaris 10 has no function like this.
+   Create a subdirectory, FILE, with mode MODE, in the directory
+   open on descriptor FD.  If possible, do it without changing the
+   working directory.  Otherwise, resort to using save_cwd/fchdir,
+   then mkdir/restore_cwd.  If either the save_cwd or the restore_cwd
+   fails, then give a diagnostic and exit nonzero.  */
+
+#define AT_FUNC_NAME mkdirat
+#define AT_FUNC_F1 mkdir
+#define AT_FUNC_POST_FILE_PARAM_DECLS , mode_t mode
+#define AT_FUNC_POST_FILE_ARGS        , mode
+#include "at-func.c"
diff --git a/gnu/mkdtemp.c b/gnu/mkdtemp.c
new file mode 100644 (file)
index 0000000..27fdd07
--- /dev/null
@@ -0,0 +1,41 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copyright (C) 1999, 2001-2003, 2006-2007, 2009-2010 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
+   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/>.  */
+
+/* Extracted from misc/mkdtemp.c.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <stdlib.h>
+
+#include "tempname.h"
+
+/* Generate a unique temporary directory from XTEMPLATE.
+   The last six characters of XTEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the filename unique.
+   The directory is created, mode 700, and its name is returned.
+   (This function comes from OpenBSD.) */
+char *
+mkdtemp (char *xtemplate)
+{
+  if (gen_tempname (xtemplate, 0, 0, GT_DIR))
+    return NULL;
+  else
+    return xtemplate;
+}
diff --git a/gnu/mktime-internal.h b/gnu/mktime-internal.h
new file mode 100644 (file)
index 0000000..8a1259e
--- /dev/null
@@ -0,0 +1,6 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+#include <time.h>
+time_t mktime_internal (struct tm *,
+                        struct tm * (*) (time_t const *, struct tm *),
+                        time_t *);
diff --git a/gnu/mktime.c b/gnu/mktime.c
new file mode 100644 (file)
index 0000000..6adf3ab
--- /dev/null
@@ -0,0 +1,671 @@
+/* -*- 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-2010 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.
+
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+/* Define this to have a standalone program to test this implementation of
+   mktime.  */
+/* #define DEBUG 1 */
+
+#ifndef _LIBC
+# include <config.h>
+#endif
+
+/* Assume that leap seconds are possible, unless told otherwise.
+   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
+#endif
+
+#include <time.h>
+
+#include <limits.h>
+
+#include <string.h>             /* For the real memcpy prototype.  */
+
+#if DEBUG
+# include <stdio.h>
+# include <stdlib.h>
+/* Make it work even if the system's libc has its own mktime routine.  */
+# define mktime my_mktime
+#endif /* DEBUG */
+
+/* Shift A right by B bits portably, by dividing A by 2**B and
+   truncating towards minus infinity.  A and B should be free of side
+   effects, and B should be in the range 0 <= B <= INT_BITS - 2, where
+   INT_BITS is the number of useful bits in an int.  GNU code can
+   assume that INT_BITS is at least 32.
+
+   ISO C99 says that A >> B is implementation-defined if A < 0.  Some
+   implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift
+   right in the usual way when A < 0, so SHR falls back on division if
+   ordinary A >> B doesn't seem to be the usual signed shift.  */
+#define SHR(a, b)       \
+  (-1 >> 1 == -1        \
+   ? (a) >> (b)         \
+   : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0))
+
+/* The extra casts in the following macros work around compiler bugs,
+   e.g., in Cray C 5.0.3.0.  */
+
+/* True if the arithmetic type T is an integer type.  bool counts as
+   an integer.  */
+#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1)
+
+/* True if negative values of the signed integer type T use two's
+   complement, ones' complement, or signed magnitude representation,
+   respectively.  Much GNU code assumes two's complement, but some
+   people like to be portable to all possible C hosts.  */
+#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
+#define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
+#define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
+
+/* True if the arithmetic type T is signed.  */
+#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+
+/* The maximum and minimum values for the integer type T.  These
+   macros have undefined behavior if T is signed and has padding bits.
+   If this is a problem for you, please let us know how to fix it for
+   your host.  */
+#define TYPE_MINIMUM(t) \
+  ((t) (! TYPE_SIGNED (t) \
+        ? (t) 0 \
+        : TYPE_SIGNED_MAGNITUDE (t) \
+        ? ~ (t) 0 \
+        : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
+#define TYPE_MAXIMUM(t) \
+  ((t) (! TYPE_SIGNED (t) \
+        ? (t) -1 \
+        : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
+
+#ifndef TIME_T_MIN
+# define TIME_T_MIN TYPE_MINIMUM (time_t)
+#endif
+#ifndef TIME_T_MAX
+# define TIME_T_MAX TYPE_MAXIMUM (time_t)
+#endif
+#define TIME_T_MIDPOINT (SHR (TIME_T_MIN + TIME_T_MAX, 1) + 1)
+
+/* Verify a requirement at compile-time (unlike assert, which is runtime).  */
+#define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; }
+
+verify (time_t_is_integer, TYPE_IS_INTEGER (time_t));
+verify (twos_complement_arithmetic, TYPE_TWOS_COMPLEMENT (int));
+/* The code also assumes that signed integer overflow silently wraps
+   around, but this assumption can't be stated without causing a
+   diagnostic on some hosts.  */
+
+#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
+leapyear (long int year)
+{
+  /* Don't add YEAR to TM_YEAR_BASE, as that might overflow.
+     Also, work even if YEAR is negative.  */
+  return
+    ((year & 3) == 0
+     && (year % 100 != 0
+         || ((year / 100) & 3) == (- (TM_YEAR_BASE / 100) & 3)));
+}
+
+/* How many days come before each month (0-12).  */
+#ifndef _LIBC
+static
+#endif
+const unsigned short int __mon_yday[2][13] =
+  {
+    /* Normal years.  */
+    { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
+    /* Leap years.  */
+    { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }
+  };
+
+
+#ifndef _LIBC
+/* Portable standalone applications should supply a <time.h> that
+   declares a POSIX-compliant localtime_r, for the benefit of older
+   implementations that lack localtime_r or have a nonstandard one.
+   See the gnulib time_r module for one way to implement this.  */
+# undef __localtime_r
+# define __localtime_r localtime_r
+# define __mktime_internal mktime_internal
+# include "mktime-internal.h"
+#endif
+
+/* Return an integer value measuring (YEAR1-YDAY1 HOUR1:MIN1:SEC1) -
+   (YEAR0-YDAY0 HOUR0:MIN0:SEC0) in seconds, assuming that the clocks
+   were not adjusted between the time stamps.
+
+   The YEAR values uses the same numbering as TP->tm_year.  Values
+   need not be in the usual range.  However, YEAR1 must not be less
+   than 2 * INT_MIN or greater than 2 * INT_MAX.
+
+   The result may overflow.  It is the caller's responsibility to
+   detect overflow.  */
+
+static inline 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)
+{
+  verify (C99_integer_division, -1 / 2 == 0);
+#if 0 /* This assertion fails on 32-bit systems with 64-bit time_t, such as
+         NetBSD 5 on i386.  */
+  verify (long_int_year_and_yday_are_wide_enough,
+          INT_MAX <= LONG_MAX / 2 || TIME_T_MAX <= UINT_MAX);
+#endif
+
+  /* Compute intervening leap days correctly even if year is negative.
+     Take care to avoid integer overflow here.  */
+  int a4 = SHR (year1, 2) + SHR (TM_YEAR_BASE, 2) - ! (year1 & 3);
+  int b4 = SHR (year0, 2) + SHR (TM_YEAR_BASE, 2) - ! (year0 & 3);
+  int a100 = a4 / 25 - (a4 % 25 < 0);
+  int b100 = b4 / 25 - (b4 % 25 < 0);
+  int a400 = SHR (a100, 2);
+  int b400 = SHR (b100, 2);
+  int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400);
+
+  /* Compute the desired time in time_t precision.  Overflow might
+     occur here.  */
+  time_t tyear1 = year1;
+  time_t years = tyear1 - year0;
+  time_t days = 365 * years + yday1 - yday0 + intervening_leap_days;
+  time_t hours = 24 * days + hour1 - hour0;
+  time_t minutes = 60 * hours + min1 - min0;
+  time_t seconds = 60 * minutes + sec1 - sec0;
+  return seconds;
+}
+
+
+/* Return a time_t value corresponding to (YEAR-YDAY HOUR:MIN:SEC),
+   assuming that *T corresponds to *TP and that no clock adjustments
+   occurred between *TP and the desired time.
+   If TP is null, return a value not equal to *T; this avoids false matches.
+   If overflow occurs, yield the minimal or maximal value, except do not
+   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)
+{
+  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);
+      time_t t1 = *t + d;
+      if ((t1 < *t) == (TYPE_SIGNED (time_t) ? d < 0 : TIME_T_MAX / 2 < d))
+        return t1;
+    }
+
+  /* Overflow occurred one way or another.  Return the nearest result
+     that is actually in range, except don't report a zero difference
+     if the actual difference is nonzero, as that would cause a false
+     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));
+}
+
+/* Use CONVERT to convert *T to a broken down time in *TP.
+   If *T is out of range for conversion, adjust it so that
+   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)
+{
+  struct tm *r = convert (t, tp);
+
+  if (!r && *t)
+    {
+      time_t bad = *t;
+      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.  */
+      while (bad != ok + (bad < 0 ? -1 : 1))
+        {
+          time_t mid = *t = (bad < 0
+                             ? bad + ((ok - bad) >> 1)
+                             : ok + ((bad - ok) >> 1));
+          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);
+        }
+    }
+
+  return r;
+}
+
+
+/* Convert *TP to a time_t value, inverting
+   the monotonic and mostly-unit-linear conversion function CONVERT.
+   Use *OFFSET to keep track of a guess at the offset of the result,
+   compared to what the result would be for UTC without leap seconds.
+   If *OFFSET's guess is correct, only one CONVERT call is needed.
+   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)
+{
+  time_t t, gt, t0, t1, t2;
+  struct tm tm;
+
+  /* The maximum number of probes (calls to CONVERT) should be enough
+     to handle any combinations of time zone rule changes, solar time,
+     leap seconds, and oscillations around a spring-forward gap.
+     POSIX.1 prohibits leap seconds, but some hosts have them anyway.  */
+  int remaining_probes = 6;
+
+  /* Time requested.  Copy it in case CONVERT modifies *TP; this can
+     occur if TP is localtime's returned value and CONVERT is localtime.  */
+  int sec = tp->tm_sec;
+  int min = tp->tm_min;
+  int hour = tp->tm_hour;
+  int mday = tp->tm_mday;
+  int mon = tp->tm_mon;
+  int year_requested = tp->tm_year;
+  /* Normalize the value.  */
+  int isdst = ((tp->tm_isdst >> (8 * sizeof (tp->tm_isdst) - 1))
+               | (tp->tm_isdst != 0));
+
+  /* 1 if the previous probe was DST.  */
+  int dst2;
+
+  /* Ensure that mon is in range, and set year accordingly.  */
+  int mon_remainder = mon % 12;
+  int negative_mon_remainder = mon_remainder < 0;
+  int mon_years = mon / 12 - negative_mon_remainder;
+  long int lyear_requested = year_requested;
+  long int year = lyear_requested + mon_years;
+
+  /* The other values need not be in range:
+     the remaining code handles minor overflows correctly,
+     assuming int and time_t arithmetic wraps around.
+     Major overflows are caught at the end.  */
+
+  /* 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);
+  long int lmday = mday;
+  long int yday = mon_yday + lmday;
+
+  time_t guessed_offset = *offset;
+
+  int sec_requested = sec;
+
+  if (LEAP_SECONDS_POSSIBLE)
+    {
+      /* Handle out-of-range seconds specially,
+         since ydhms_tm_diff assumes every minute has 60 seconds.  */
+      if (sec < 0)
+        sec = 0;
+      if (59 < sec)
+        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);
+
+  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.  */
+
+      /* 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.  */
+      int ALOG2_SECONDS_PER_BIENNIUM = 26;
+      int ALOG2_MINUTES_PER_BIENNIUM = 20;
+      int ALOG2_HOURS_PER_BIENNIUM = 14;
+      int ALOG2_DAYS_PER_BIENNIUM = 10;
+      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)));
+
+      int approx_biennia = SHR (t0, ALOG2_SECONDS_PER_BIENNIUM);
+      int diff = approx_biennia - approx_requested_biennia;
+      int abs_diff = diff < 0 ? - diff : diff;
+
+      /* IRIX 4.0.5 cc miscaculates 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) */
+      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 ? - diff : diff;
+          if (overflow_threshold < 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);
+       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))))
+      /* 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.  */
+      goto offset_found;
+    else if (--remaining_probes == 0)
+      return -1;
+
+  /* We have a match.  Check whether tm.tm_isdst has the requested
+     value, if any.  */
+  if (isdst != tm.tm_isdst && 0 <= isdst && 0 <= tm.tm_isdst)
+    {
+      /* tm.tm_isdst has the wrong value.  Look for a neighboring
+         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.  */
+
+      /* 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.  */
+      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.  */
+      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.  */
+      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)
+          {
+            time_t ot = t + delta * direction;
+            if ((ot < t) == (direction < 0))
+              {
+                struct tm otm;
+                ranged_convert (convert, &ot, &otm);
+                if (otm.tm_isdst == 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:
+  *offset = guessed_offset + t - t0;
+
+  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.  */
+      int sec_adjustment = (sec == 0 && tm.tm_sec == 60) - sec;
+      t1 = t + sec_requested;
+      t2 = t1 + sec_adjustment;
+      if (((t1 < t) != (sec_requested < 0))
+          | ((t2 < t1) != (sec_adjustment < 0))
+          | ! convert (&t2, &tm))
+        return -1;
+      t = t2;
+    }
+
+  *tp = tm;
+  return t;
+}
+
+
+/* FIXME: This should use a signed type wide enough to hold any UTC
+   offset in seconds.  'int' should be good enough for GNU code.  We
+   can't fix this unilaterally though, as other modules invoke
+   __mktime_internal.  */
+static time_t localtime_offset;
+
+/* Convert *TP to a time_t value.  */
+time_t
+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
+     be set as if the tzset() function had been called.  */
+  __tzset ();
+#endif
+
+  return __mktime_internal (tp, __localtime_r, &localtime_offset);
+}
+
+#ifdef weak_alias
+weak_alias (mktime, timelocal)
+#endif
+
+#ifdef _LIBC
+libc_hidden_def (mktime)
+libc_hidden_weak (timelocal)
+#endif
+\f
+#if DEBUG
+
+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)
+          | (a->tm_isdst ^ b->tm_isdst));
+}
+
+static void
+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);
+  else
+    printf ("0");
+}
+
+static int
+check_result (time_t tk, struct tm tmk, time_t tl, const struct tm *lt)
+{
+  if (tk != tl || !lt || not_equal_tm (&tmk, lt))
+    {
+      printf ("mktime (");
+      print_tm (lt);
+      printf (")\nyields (");
+      print_tm (&tmk);
+      printf (") == %ld, should be %ld\n", (long int) tk, (long int) tl);
+      return 1;
+    }
+
+  return 0;
+}
+
+int
+main (int argc, char **argv)
+{
+  int status = 0;
+  struct tm tm, tmk, tml;
+  struct tm *lt;
+  time_t tk, tl, tl1;
+  char trailer;
+
+  if ((argc == 3 || argc == 4)
+      && (sscanf (argv[1], "%d-%d-%d%c",
+                  &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_year -= TM_YEAR_BASE;
+      tm.tm_mon--;
+      tm.tm_isdst = argc == 3 ? -1 : atoi (argv[3]);
+      tmk = tm;
+      tl = mktime (&tmk);
+      lt = localtime (&tl);
+      if (lt)
+        {
+          tml = *lt;
+          lt = &tml;
+        }
+      printf ("mktime returns %ld == ", (long int) tl);
+      print_tm (&tmk);
+      printf ("\n");
+      status = check_result (tl, tmk, tl, lt);
+    }
+  else if (argc == 4 || (argc == 5 && strcmp (argv[4], "-") == 0))
+    {
+      time_t from = atol (argv[1]);
+      time_t by = atol (argv[2]);
+      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;
+          }
+      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;
+          }
+    }
+  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]);
+
+  return status;
+}
+
+#endif /* DEBUG */
+\f
+/*
+Local Variables:
+compile-command: "gcc -DDEBUG -Wall -W -O -g mktime.c -o mktime"
+End:
+*/
diff --git a/gnu/modechange.c b/gnu/modechange.c
new file mode 100644 (file)
index 0000000..b70c30a
--- /dev/null
@@ -0,0 +1,387 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* modechange.c -- file mode manipulation
+
+   Copyright (C) 1989-1990, 1997-1999, 2001, 2003-2006, 2009-2010 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 David MacKenzie <djm@ai.mit.edu> */
+
+/* The ASCII mode string is compiled into an array of `struct
+   modechange', which can then be applied to each file to be changed.
+   We do this instead of re-parsing the ASCII string for each file
+   because the compiled form requires less computation to use; when
+   changing the mode of many files, this probably results in a
+   performance gain.  */
+
+#include <config.h>
+
+#include "modechange.h"
+#include <sys/stat.h>
+#include "stat-macros.h"
+#include "xalloc.h"
+#include <stdlib.h>
+
+/* The traditional octal values corresponding to each mode bit.  */
+#define SUID 04000
+#define SGID 02000
+#define SVTX 01000
+#define RUSR 00400
+#define WUSR 00200
+#define XUSR 00100
+#define RGRP 00040
+#define WGRP 00020
+#define XGRP 00010
+#define ROTH 00004
+#define WOTH 00002
+#define XOTH 00001
+#define ALLM 07777 /* all octal mode bits */
+
+/* Convert OCTAL, which uses one of the traditional octal values, to
+   an internal mode_t value.  */
+static mode_t
+octal_to_mode (unsigned int octal)
+{
+  /* Help the compiler optimize the usual case where mode_t uses
+     the traditional octal representation.  */
+  return ((S_ISUID == SUID && S_ISGID == SGID && S_ISVTX == SVTX
+           && S_IRUSR == RUSR && S_IWUSR == WUSR && S_IXUSR == XUSR
+           && S_IRGRP == RGRP && S_IWGRP == WGRP && S_IXGRP == XGRP
+           && S_IROTH == ROTH && S_IWOTH == WOTH && S_IXOTH == XOTH)
+          ? octal
+          : (mode_t) ((octal & SUID ? S_ISUID : 0)
+                      | (octal & SGID ? S_ISGID : 0)
+                      | (octal & SVTX ? S_ISVTX : 0)
+                      | (octal & RUSR ? S_IRUSR : 0)
+                      | (octal & WUSR ? S_IWUSR : 0)
+                      | (octal & XUSR ? S_IXUSR : 0)
+                      | (octal & RGRP ? S_IRGRP : 0)
+                      | (octal & WGRP ? S_IWGRP : 0)
+                      | (octal & XGRP ? S_IXGRP : 0)
+                      | (octal & ROTH ? S_IROTH : 0)
+                      | (octal & WOTH ? S_IWOTH : 0)
+                      | (octal & XOTH ? S_IXOTH : 0)));
+}
+
+/* Special operations flags.  */
+enum
+  {
+    /* For the sentinel at the end of the mode changes array.  */
+    MODE_DONE,
+
+    /* The typical case.  */
+    MODE_ORDINARY_CHANGE,
+
+    /* In addition to the typical case, affect the execute bits if at
+       least one execute bit is set already, or if the file is a
+       directory.  */
+    MODE_X_IF_ANY_X,
+
+    /* Instead of the typical case, copy some existing permissions for
+       u, g, or o onto the other two.  Which of u, g, or o is copied
+       is determined by which bits are set in the `value' field.  */
+    MODE_COPY_EXISTING
+  };
+
+/* Description of a mode change.  */
+struct mode_change
+{
+  char op;                      /* One of "=+-".  */
+  char flag;                    /* Special operations flag.  */
+  mode_t affected;              /* Set for u, g, o, or a.  */
+  mode_t value;                 /* Bits to add/remove.  */
+  mode_t mentioned;             /* Bits explicitly mentioned.  */
+};
+
+/* Return a mode_change array with the specified `=ddd'-style
+   mode change operation, where NEW_MODE is `ddd' and MENTIONED
+   contains the bits explicitly mentioned in the mode are MENTIONED.  */
+
+static struct mode_change *
+make_node_op_equals (mode_t new_mode, mode_t mentioned)
+{
+  struct mode_change *p = xmalloc (2 * sizeof *p);
+  p->op = '=';
+  p->flag = MODE_ORDINARY_CHANGE;
+  p->affected = CHMOD_MODE_BITS;
+  p->value = new_mode;
+  p->mentioned = mentioned;
+  p[1].flag = MODE_DONE;
+  return p;
+}
+
+/* Return a pointer to an array of file mode change operations created from
+   MODE_STRING, an ASCII string that contains either an octal number
+   specifying an absolute mode, or symbolic mode change operations with
+   the form:
+   [ugoa...][[+-=][rwxXstugo...]...][,...]
+
+   Return NULL if `mode_string' does not contain a valid
+   representation of file mode change operations.  */
+
+struct mode_change *
+mode_compile (char const *mode_string)
+{
+  /* The array of mode-change directives to be returned.  */
+  struct mode_change *mc;
+  size_t used = 0;
+
+  if ('0' <= *mode_string && *mode_string < '8')
+    {
+      unsigned int octal_mode = 0;
+      mode_t mode;
+      mode_t mentioned;
+
+      do
+        {
+          octal_mode = 8 * octal_mode + *mode_string++ - '0';
+          if (ALLM < octal_mode)
+            return NULL;
+        }
+      while ('0' <= *mode_string && *mode_string < '8');
+
+      if (*mode_string)
+        return NULL;
+
+      mode = octal_to_mode (octal_mode);
+      mentioned = (mode & (S_ISUID | S_ISGID)) | S_ISVTX | S_IRWXUGO;
+      return make_node_op_equals (mode, mentioned);
+    }
+
+  /* Allocate enough space to hold the result.  */
+  {
+    size_t needed = 1;
+    char const *p;
+    for (p = mode_string; *p; p++)
+      needed += (*p == '=' || *p == '+' || *p == '-');
+    mc = xnmalloc (needed, sizeof *mc);
+  }
+
+  /* One loop iteration for each `[ugoa]*([-+=]([rwxXst]*|[ugo]))+'.  */
+  for (;; mode_string++)
+    {
+      /* Which bits in the mode are operated on.  */
+      mode_t affected = 0;
+
+      /* Turn on all the bits in `affected' for each group given.  */
+      for (;; mode_string++)
+        switch (*mode_string)
+          {
+          default:
+            goto invalid;
+          case 'u':
+            affected |= S_ISUID | S_IRWXU;
+            break;
+          case 'g':
+            affected |= S_ISGID | S_IRWXG;
+            break;
+          case 'o':
+            affected |= S_ISVTX | S_IRWXO;
+            break;
+          case 'a':
+            affected |= CHMOD_MODE_BITS;
+            break;
+          case '=': case '+': case '-':
+            goto no_more_affected;
+          }
+    no_more_affected:;
+
+      do
+        {
+          char op = *mode_string++;
+          mode_t value;
+          char flag = MODE_COPY_EXISTING;
+          struct mode_change *change;
+
+          switch (*mode_string++)
+            {
+            case 'u':
+              /* Set the affected bits to the value of the `u' bits
+                 on the same file.  */
+              value = S_IRWXU;
+              break;
+            case 'g':
+              /* Set the affected bits to the value of the `g' bits
+                 on the same file.  */
+              value = S_IRWXG;
+              break;
+            case 'o':
+              /* Set the affected bits to the value of the `o' bits
+                 on the same file.  */
+              value = S_IRWXO;
+              break;
+
+            default:
+              value = 0;
+              flag = MODE_ORDINARY_CHANGE;
+
+              for (mode_string--;; mode_string++)
+                switch (*mode_string)
+                  {
+                  case 'r':
+                    value |= S_IRUSR | S_IRGRP | S_IROTH;
+                    break;
+                  case 'w':
+                    value |= S_IWUSR | S_IWGRP | S_IWOTH;
+                    break;
+                  case 'x':
+                    value |= S_IXUSR | S_IXGRP | S_IXOTH;
+                    break;
+                  case 'X':
+                    flag = MODE_X_IF_ANY_X;
+                    break;
+                  case 's':
+                    /* Set the setuid/gid bits if `u' or `g' is selected.  */
+                    value |= S_ISUID | S_ISGID;
+                    break;
+                  case 't':
+                    /* Set the "save text image" bit if `o' is selected.  */
+                    value |= S_ISVTX;
+                    break;
+                  default:
+                    goto no_more_values;
+                  }
+            no_more_values:;
+            }
+
+          change = &mc[used++];
+          change->op = op;
+          change->flag = flag;
+          change->affected = affected;
+          change->value = value;
+          change->mentioned = (affected ? affected & value : value);
+        }
+      while (*mode_string == '=' || *mode_string == '+'
+             || *mode_string == '-');
+
+      if (*mode_string != ',')
+        break;
+    }
+
+  if (*mode_string == 0)
+    {
+      mc[used].flag = MODE_DONE;
+      return mc;
+    }
+
+invalid:
+  free (mc);
+  return NULL;
+}
+
+/* Return a file mode change operation that sets permissions to match those
+   of REF_FILE.  Return NULL (setting errno) if REF_FILE can't be accessed.  */
+
+struct mode_change *
+mode_create_from_ref (const char *ref_file)
+{
+  struct stat ref_stats;
+
+  if (stat (ref_file, &ref_stats) != 0)
+    return NULL;
+  return make_node_op_equals (ref_stats.st_mode, CHMOD_MODE_BITS);
+}
+
+/* Return the file mode bits of OLDMODE (which is the mode of a
+   directory if DIR), assuming the umask is UMASK_VALUE, adjusted as
+   indicated by the list of change operations CHANGES.  If DIR, the
+   type 'X' change affects the returned value even if no execute bits
+   were set in OLDMODE, and set user and group ID bits are preserved
+   unless CHANGES mentioned them.  If PMODE_BITS is not null, store into
+   *PMODE_BITS a mask denoting file mode bits that are affected by
+   CHANGES.
+
+   The returned value and *PMODE_BITS contain only file mode bits.
+   For example, they have the S_IFMT bits cleared on a standard
+   Unix-like host.  */
+
+mode_t
+mode_adjust (mode_t oldmode, bool dir, mode_t umask_value,
+             struct mode_change const *changes, mode_t *pmode_bits)
+{
+  /* The adjusted mode.  */
+  mode_t newmode = oldmode & CHMOD_MODE_BITS;
+
+  /* File mode bits that CHANGES cares about.  */
+  mode_t mode_bits = 0;
+
+  for (; changes->flag != MODE_DONE; changes++)
+    {
+      mode_t affected = changes->affected;
+      mode_t omit_change =
+        (dir ? S_ISUID | S_ISGID : 0) & ~ changes->mentioned;
+      mode_t value = changes->value;
+
+      switch (changes->flag)
+        {
+        case MODE_ORDINARY_CHANGE:
+          break;
+
+        case MODE_COPY_EXISTING:
+          /* Isolate in `value' the bits in `newmode' to copy.  */
+          value &= newmode;
+
+          /* Copy the isolated bits to the other two parts.  */
+          value |= ((value & (S_IRUSR | S_IRGRP | S_IROTH)
+                     ? S_IRUSR | S_IRGRP | S_IROTH : 0)
+                    | (value & (S_IWUSR | S_IWGRP | S_IWOTH)
+                       ? S_IWUSR | S_IWGRP | S_IWOTH : 0)
+                    | (value & (S_IXUSR | S_IXGRP | S_IXOTH)
+                       ? S_IXUSR | S_IXGRP | S_IXOTH : 0));
+          break;
+
+        case MODE_X_IF_ANY_X:
+          /* Affect the execute bits if execute bits are already set
+             or if the file is a directory.  */
+          if ((newmode & (S_IXUSR | S_IXGRP | S_IXOTH)) | dir)
+            value |= S_IXUSR | S_IXGRP | S_IXOTH;
+          break;
+        }
+
+      /* If WHO was specified, limit the change to the affected bits.
+         Otherwise, apply the umask.  Either way, omit changes as
+         requested.  */
+      value &= (affected ? affected : ~umask_value) & ~ omit_change;
+
+      switch (changes->op)
+        {
+        case '=':
+          /* If WHO was specified, preserve the previous values of
+             bits that are not affected by this change operation.
+             Otherwise, clear all the bits.  */
+          {
+            mode_t preserved = (affected ? ~affected : 0) | omit_change;
+            mode_bits |= CHMOD_MODE_BITS & ~preserved;
+            newmode = (newmode & preserved) | value;
+            break;
+          }
+
+        case '+':
+          mode_bits |= value;
+          newmode |= value;
+          break;
+
+        case '-':
+          mode_bits |= value;
+          newmode &= ~value;
+          break;
+        }
+    }
+
+  if (pmode_bits)
+    *pmode_bits = mode_bits;
+  return newmode;
+}
diff --git a/gnu/modechange.h b/gnu/modechange.h
new file mode 100644 (file)
index 0000000..58500cd
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* modechange.h -- definitions for file mode manipulation
+
+   Copyright (C) 1989-1990, 1997, 2003-2006, 2009-2010 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 ! defined MODECHANGE_H_
+# define MODECHANGE_H_
+
+# include <stdbool.h>
+# include <sys/types.h>
+
+struct mode_change *mode_compile (const char *);
+struct mode_change *mode_create_from_ref (const char *);
+mode_t mode_adjust (mode_t, bool, mode_t, struct mode_change const *,
+                    mode_t *);
+
+#endif
diff --git a/gnu/nl_langinfo.c b/gnu/nl_langinfo.c
new file mode 100644 (file)
index 0000000..a709942
--- /dev/null
@@ -0,0 +1,262 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* nl_langinfo() replacement: query locale dependent information.
+
+   Copyright (C) 2007-2010 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 <langinfo.h>
+
+#if REPLACE_NL_LANGINFO
+
+/* Override nl_langinfo with support for added nl_item values.  */
+
+# include <locale.h>
+# include <string.h>
+
+# undef nl_langinfo
+
+char *
+rpl_nl_langinfo (nl_item item)
+{
+  switch (item)
+    {
+# if GNULIB_defined_CODESET
+    case CODESET:
+      {
+        const char *locale;
+        static char buf[2 + 10 + 1];
+
+        locale = setlocale (LC_CTYPE, NULL);
+        if (locale != NULL && locale[0] != '\0')
+          {
+            /* If the locale name contains an encoding after the dot, return
+               it.  */
+            const char *dot = strchr (locale, '.');
+
+            if (dot != NULL)
+              {
+                const char *modifier;
+
+                dot++;
+                /* Look for the possible @... trailer and remove it, if any.  */
+                modifier = strchr (dot, '@');
+                if (modifier == NULL)
+                  return dot;
+                if (modifier - dot < sizeof (buf))
+                  {
+                    memcpy (buf, dot, modifier - dot);
+                    buf [modifier - dot] = '\0';
+                    return buf;
+                  }
+              }
+          }
+        return "";
+      }
+# endif
+# if GNULIB_defined_ERA
+    case ERA:
+      /* The format is not standardized.  In glibc it is a sequence of strings
+         of the form "direction:offset:start_date:end_date:era_name:era_format"
+         with an empty string at the end.  */
+      return "";
+    case ERA_D_FMT:
+      /* The %Ex conversion in strftime behaves like %x if the locale does not
+         have an alternative time format.  */
+      item = D_FMT;
+      break;
+    case ERA_D_T_FMT:
+      /* The %Ec conversion in strftime behaves like %c if the locale does not
+         have an alternative time format.  */
+      item = D_T_FMT;
+      break;
+    case ERA_T_FMT:
+      /* The %EX conversion in strftime behaves like %X if the locale does not
+         have an alternative time format.  */
+      item = T_FMT;
+      break;
+    case ALT_DIGITS:
+      /* The format is not standardized.  In glibc it is a sequence of 10
+         strings, appended in memory.  */
+      return "\0\0\0\0\0\0\0\0\0\0";
+# endif
+    default:
+      break;
+    }
+  return nl_langinfo (item);
+}
+
+#else
+
+/* Provide nl_langinfo from scratch.  */
+
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+/* Native Windows platforms.  */
+
+#  define WIN32_LEAN_AND_MEAN  /* avoid including junk */
+#  include <windows.h>
+
+#  include <stdio.h>
+
+# else
+
+/* An old Unix platform without locales, such as Linux libc5 or BeOS.  */
+
+# endif
+
+# include <locale.h>
+
+char *
+nl_langinfo (nl_item item)
+{
+  switch (item)
+    {
+    /* nl_langinfo items of the LC_CTYPE category */
+    case CODESET:
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+      {
+        static char buf[2 + 10 + 1];
+
+        /* Woe32 has a function returning the locale's codepage as a number.  */
+        sprintf (buf, "CP%u", GetACP ());
+        return buf;
+      }
+# elif defined __BEOS__
+      return "UTF-8";
+# else
+      return "ISO-8859-1";
+# endif
+    /* nl_langinfo items of the LC_NUMERIC category */
+    case RADIXCHAR:
+      return localeconv () ->decimal_point;
+    case THOUSEP:
+      return localeconv () ->thousands_sep;
+    /* nl_langinfo items of the LC_TIME category.
+       TODO: Really use the locale.  */
+    case D_T_FMT:
+    case ERA_D_T_FMT:
+      return "%a %b %e %H:%M:%S %Y";
+    case D_FMT:
+    case ERA_D_FMT:
+      return "%m/%d/%y";
+    case T_FMT:
+    case ERA_T_FMT:
+      return "%H:%M:%S";
+    case T_FMT_AMPM:
+      return "%I:%M:%S %p";
+    case AM_STR:
+      return "AM";
+    case PM_STR:
+      return "PM";
+    case DAY_1:
+      return "Sunday";
+    case DAY_2:
+      return "Monday";
+    case DAY_3:
+      return "Tuesday";
+    case DAY_4:
+      return "Wednesday";
+    case DAY_5:
+      return "Thursday";
+    case DAY_6:
+      return "Friday";
+    case DAY_7:
+      return "Saturday";
+    case ABDAY_1:
+      return "Sun";
+    case ABDAY_2:
+      return "Mon";
+    case ABDAY_3:
+      return "Tue";
+    case ABDAY_4:
+      return "Wed";
+    case ABDAY_5:
+      return "Thu";
+    case ABDAY_6:
+      return "Fri";
+    case ABDAY_7:
+      return "Sat";
+    case MON_1:
+      return "January";
+    case MON_2:
+      return "February";
+    case MON_3:
+      return "March";
+    case MON_4:
+      return "April";
+    case MON_5:
+      return "May";
+    case MON_6:
+      return "June";
+    case MON_7:
+      return "July";
+    case MON_8:
+      return "August";
+    case MON_9:
+      return "September";
+    case MON_10:
+      return "October";
+    case MON_11:
+      return "November";
+    case MON_12:
+      return "December";
+    case ABMON_1:
+      return "Jan";
+    case ABMON_2:
+      return "Feb";
+    case ABMON_3:
+      return "Mar";
+    case ABMON_4:
+      return "Apr";
+    case ABMON_5:
+      return "May";
+    case ABMON_6:
+      return "Jun";
+    case ABMON_7:
+      return "Jul";
+    case ABMON_8:
+      return "Aug";
+    case ABMON_9:
+      return "Sep";
+    case ABMON_10:
+      return "Oct";
+    case ABMON_11:
+      return "Nov";
+    case ABMON_12:
+      return "Dec";
+    case ERA:
+      return "";
+    case ALT_DIGITS:
+      return "\0\0\0\0\0\0\0\0\0\0";
+    /* nl_langinfo items of the LC_MONETARY category
+       TODO: Really use the locale. */
+    case CRNCYSTR:
+      return "-";
+    /* nl_langinfo items of the LC_MESSAGES category
+       TODO: Really use the locale. */
+    case YESEXPR:
+      return "^[yY]";
+    case NOEXPR:
+      return "^[nN]";
+    default:
+      return "";
+    }
+}
+
+#endif
diff --git a/gnu/obstack.c b/gnu/obstack.c
new file mode 100644 (file)
index 0000000..7f1aa6b
--- /dev/null
@@ -0,0 +1,432 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* obstack.c - subroutines used implicitly by object stack macros
+
+   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998,
+   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, 2010 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/>.  */
+
+#ifdef _LIBC
+# include <obstack.h>
+# include <shlib-compat.h>
+#else
+# include <config.h>
+# include "obstack.h"
+#endif
+
+/* NOTE BEFORE MODIFYING THIS FILE: This version number must be
+   incremented whenever callers compiled using an old obstack.h can no
+   longer properly call the functions in this obstack.c.  */
+#define OBSTACK_INTERFACE_VERSION 1
+
+/* Comment out all this code if we are using the GNU C Library, and are not
+   actually compiling the library itself, and the installed library
+   supports the same library interface we do.  This code is part of the GNU
+   C 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, it is simpler to just do this in the source for each such file.  */
+
+#include <stdio.h>              /* Random thing to get __GNU_LIBRARY__.  */
+#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1
+# include <gnu-versions.h>
+# if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
+#  define ELIDE_CODE
+# endif
+#endif
+
+#include <stddef.h>
+
+#ifndef ELIDE_CODE
+
+# include <stdint.h>
+
+/* Determine default alignment.  */
+union fooround
+{
+  uintmax_t i;
+  long double d;
+  void *p;
+};
+struct fooalign
+{
+  char c;
+  union fooround u;
+};
+/* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT.
+   But in fact it might be less smart and round addresses to as much as
+   DEFAULT_ROUNDING.  So we prepare for it to do that.  */
+enum
+  {
+    DEFAULT_ALIGNMENT = offsetof (struct fooalign, u),
+    DEFAULT_ROUNDING = sizeof (union fooround)
+  };
+
+/* When we copy a long block of data, this is the unit to do it with.
+   On some machines, copying successive ints does not work;
+   in such a case, redefine COPYING_UNIT to `long' (if that works)
+   or `char' as a last resort.  */
+# ifndef COPYING_UNIT
+#  define COPYING_UNIT int
+# endif
+
+
+/* The functions allocating more room by calling `obstack_chunk_alloc'
+   jump to the handler pointed to by `obstack_alloc_failed_handler'.
+   This can be set to a user defined function which should either
+   abort gracefully or use longjump - but shouldn't return.  This
+   variable by default points to the internal function
+   `print_and_abort'.  */
+static void print_and_abort (void);
+void (*obstack_alloc_failed_handler) (void) = print_and_abort;
+
+/* Exit value used when `print_and_abort' is used.  */
+# include <stdlib.h>
+# ifdef _LIBC
+int obstack_exit_failure = EXIT_FAILURE;
+# else
+#  include "exitfail.h"
+#  define obstack_exit_failure exit_failure
+# endif
+
+# ifdef _LIBC
+#  if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)
+/* A looong time ago (before 1994, anyway; we're not sure) this global variable
+   was used by non-GNU-C macros to avoid multiple evaluation.  The GNU C
+   library still exports it because somebody might use it.  */
+struct obstack *_obstack_compat;
+compat_symbol (libc, _obstack_compat, _obstack, GLIBC_2_0);
+#  endif
+# endif
+
+/* Define a macro that either calls functions with the traditional malloc/free
+   calling interface, or calls functions with the mmalloc/mfree interface
+   (that adds an extra first argument), based on the state of use_extra_arg.
+   For free, do not use ?:, since some compilers, like the MIPS compilers,
+   do not allow (expr) ? void : void.  */
+
+# define CALL_CHUNKFUN(h, size) \
+  (((h) -> use_extra_arg) \
+   ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
+   : (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size)))
+
+# define CALL_FREEFUN(h, old_chunk) \
+  do { \
+    if ((h) -> use_extra_arg) \
+      (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
+    else \
+      (*(void (*) (void *)) (h)->freefun) ((old_chunk)); \
+  } while (0)
+
+\f
+/* Initialize an obstack H for use.  Specify chunk size SIZE (0 means default).
+   Objects start on multiples of ALIGNMENT (0 means use default).
+   CHUNKFUN is the function to use to allocate chunks,
+   and FREEFUN the function to free them.
+
+   Return nonzero if successful, calls obstack_alloc_failed_handler if
+   allocation fails.  */
+
+int
+_obstack_begin (struct obstack *h,
+                int size, int alignment,
+                void *(*chunkfun) (long),
+                void (*freefun) (void *))
+{
+  register struct _obstack_chunk *chunk; /* points to new chunk */
+
+  if (alignment == 0)
+    alignment = DEFAULT_ALIGNMENT;
+  if (size == 0)
+    /* Default size is what GNU malloc can fit in a 4096-byte block.  */
+    {
+      /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc.
+         Use the values for range checking, because if range checking is off,
+         the extra bytes won't be missed terribly, but if range checking is on
+         and we used a larger request, a whole extra 4096 bytes would be
+         allocated.
+
+         These number are irrelevant to the new GNU malloc.  I suspect it is
+         less sensitive to the size of the request.  */
+      int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1))
+                    + 4 + DEFAULT_ROUNDING - 1)
+                   & ~(DEFAULT_ROUNDING - 1));
+      size = 4096 - extra;
+    }
+
+  h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun;
+  h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
+  h->chunk_size = size;
+  h->alignment_mask = alignment - 1;
+  h->use_extra_arg = 0;
+
+  chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size);
+  if (!chunk)
+    (*obstack_alloc_failed_handler) ();
+  h->next_free = h->object_base = __PTR_ALIGN ((char *) chunk, chunk->contents,
+                                               alignment - 1);
+  h->chunk_limit = chunk->limit
+    = (char *) chunk + h->chunk_size;
+  chunk->prev = 0;
+  /* The initial chunk now contains no empty object.  */
+  h->maybe_empty_object = 0;
+  h->alloc_failed = 0;
+  return 1;
+}
+
+int
+_obstack_begin_1 (struct obstack *h, int size, int alignment,
+                  void *(*chunkfun) (void *, long),
+                  void (*freefun) (void *, void *),
+                  void *arg)
+{
+  register struct _obstack_chunk *chunk; /* points to new chunk */
+
+  if (alignment == 0)
+    alignment = DEFAULT_ALIGNMENT;
+  if (size == 0)
+    /* Default size is what GNU malloc can fit in a 4096-byte block.  */
+    {
+      /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc.
+         Use the values for range checking, because if range checking is off,
+         the extra bytes won't be missed terribly, but if range checking is on
+         and we used a larger request, a whole extra 4096 bytes would be
+         allocated.
+
+         These number are irrelevant to the new GNU malloc.  I suspect it is
+         less sensitive to the size of the request.  */
+      int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1))
+                    + 4 + DEFAULT_ROUNDING - 1)
+                   & ~(DEFAULT_ROUNDING - 1));
+      size = 4096 - extra;
+    }
+
+  h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun;
+  h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
+  h->chunk_size = size;
+  h->alignment_mask = alignment - 1;
+  h->extra_arg = arg;
+  h->use_extra_arg = 1;
+
+  chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size);
+  if (!chunk)
+    (*obstack_alloc_failed_handler) ();
+  h->next_free = h->object_base = __PTR_ALIGN ((char *) chunk, chunk->contents,
+                                               alignment - 1);
+  h->chunk_limit = chunk->limit
+    = (char *) chunk + h->chunk_size;
+  chunk->prev = 0;
+  /* The initial chunk now contains no empty object.  */
+  h->maybe_empty_object = 0;
+  h->alloc_failed = 0;
+  return 1;
+}
+
+/* Allocate a new current chunk for the obstack *H
+   on the assumption that LENGTH bytes need to be added
+   to the current object, or a new object of length LENGTH allocated.
+   Copies any partial object from the end of the old chunk
+   to the beginning of the new one.  */
+
+void
+_obstack_newchunk (struct obstack *h, int length)
+{
+  register struct _obstack_chunk *old_chunk = h->chunk;
+  register struct _obstack_chunk *new_chunk;
+  register long new_size;
+  register long obj_size = h->next_free - h->object_base;
+  register long i;
+  long already;
+  char *object_base;
+
+  /* Compute size for new chunk.  */
+  new_size = (obj_size + length) + (obj_size >> 3) + h->alignment_mask + 100;
+  if (new_size < h->chunk_size)
+    new_size = h->chunk_size;
+
+  /* Allocate and initialize the new chunk.  */
+  new_chunk = CALL_CHUNKFUN (h, new_size);
+  if (!new_chunk)
+    (*obstack_alloc_failed_handler) ();
+  h->chunk = new_chunk;
+  new_chunk->prev = old_chunk;
+  new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size;
+
+  /* Compute an aligned object_base in the new chunk */
+  object_base =
+    __PTR_ALIGN ((char *) new_chunk, new_chunk->contents, h->alignment_mask);
+
+  /* Move the existing object to the new chunk.
+     Word at a time is fast and is safe if the object
+     is sufficiently aligned.  */
+  if (h->alignment_mask + 1 >= DEFAULT_ALIGNMENT)
+    {
+      for (i = obj_size / sizeof (COPYING_UNIT) - 1;
+           i >= 0; i--)
+        ((COPYING_UNIT *)object_base)[i]
+          = ((COPYING_UNIT *)h->object_base)[i];
+      /* We used to copy the odd few remaining bytes as one extra COPYING_UNIT,
+         but that can cross a page boundary on a machine
+         which does not do strict alignment for COPYING_UNITS.  */
+      already = obj_size / sizeof (COPYING_UNIT) * sizeof (COPYING_UNIT);
+    }
+  else
+    already = 0;
+  /* Copy remaining bytes one by one.  */
+  for (i = already; i < obj_size; i++)
+    object_base[i] = h->object_base[i];
+
+  /* If the object just copied was the only data in OLD_CHUNK,
+     free that chunk and remove it from the chain.
+     But not if that chunk might contain an empty object.  */
+  if (! h->maybe_empty_object
+      && (h->object_base
+          == __PTR_ALIGN ((char *) old_chunk, old_chunk->contents,
+                          h->alignment_mask)))
+    {
+      new_chunk->prev = old_chunk->prev;
+      CALL_FREEFUN (h, old_chunk);
+    }
+
+  h->object_base = object_base;
+  h->next_free = h->object_base + obj_size;
+  /* The new chunk certainly contains no empty object yet.  */
+  h->maybe_empty_object = 0;
+}
+# ifdef _LIBC
+libc_hidden_def (_obstack_newchunk)
+# endif
+
+/* Return nonzero if object OBJ has been allocated from obstack H.
+   This is here for debugging.
+   If you use it in a program, you are probably losing.  */
+
+/* Suppress -Wmissing-prototypes warning.  We don't want to declare this in
+   obstack.h because it is just for debugging.  */
+int _obstack_allocated_p (struct obstack *h, void *obj);
+
+int
+_obstack_allocated_p (struct obstack *h, void *obj)
+{
+  register struct _obstack_chunk *lp;   /* below addr of any objects in this chunk */
+  register struct _obstack_chunk *plp;  /* point to previous chunk if any */
+
+  lp = (h)->chunk;
+  /* We use >= rather than > since the object cannot be exactly at
+     the beginning of the chunk but might be an empty object exactly
+     at the end of an adjacent chunk.  */
+  while (lp != 0 && ((void *) lp >= obj || (void *) (lp)->limit < obj))
+    {
+      plp = lp->prev;
+      lp = plp;
+    }
+  return lp != 0;
+}
+\f
+/* Free objects in obstack H, including OBJ and everything allocate
+   more recently than OBJ.  If OBJ is zero, free everything in H.  */
+
+# undef obstack_free
+
+void
+__obstack_free (struct obstack *h, void *obj)
+{
+  register struct _obstack_chunk *lp;   /* below addr of any objects in this chunk */
+  register struct _obstack_chunk *plp;  /* point to previous chunk if any */
+
+  lp = h->chunk;
+  /* We use >= because there cannot be an object at the beginning of a chunk.
+     But there can be an empty object at that address
+     at the end of another chunk.  */
+  while (lp != 0 && ((void *) lp >= obj || (void *) (lp)->limit < obj))
+    {
+      plp = lp->prev;
+      CALL_FREEFUN (h, lp);
+      lp = plp;
+      /* If we switch chunks, we can't tell whether the new current
+         chunk contains an empty object, so assume that it may.  */
+      h->maybe_empty_object = 1;
+    }
+  if (lp)
+    {
+      h->object_base = h->next_free = (char *) (obj);
+      h->chunk_limit = lp->limit;
+      h->chunk = lp;
+    }
+  else if (obj != 0)
+    /* obj is not in any of the chunks! */
+    abort ();
+}
+
+# ifdef _LIBC
+/* Older versions of libc used a function _obstack_free intended to be
+   called by non-GCC compilers.  */
+strong_alias (obstack_free, _obstack_free)
+# endif
+\f
+int
+_obstack_memory_used (struct obstack *h)
+{
+  register struct _obstack_chunk* lp;
+  register int nbytes = 0;
+
+  for (lp = h->chunk; lp != 0; lp = lp->prev)
+    {
+      nbytes += lp->limit - (char *) lp;
+    }
+  return nbytes;
+}
+\f
+/* Define the error handler.  */
+# ifdef _LIBC
+#  include <libintl.h>
+# else
+#  include "gettext.h"
+# endif
+# ifndef _
+#  define _(msgid) gettext (msgid)
+# endif
+
+# ifdef _LIBC
+#  include <libio/iolibio.h>
+# endif
+
+# ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later.  */
+#  if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
+#   define __attribute__(Spec) /* empty */
+#  endif
+# endif
+
+static void
+__attribute__ ((noreturn))
+print_and_abort (void)
+{
+  /* Don't change any of these strings.  Yes, it would be possible to add
+     the newline to the string and use fputs or so.  But this must not
+     happen because the "memory exhausted" message appears in other places
+     like this and the translation should be reused instead of creating
+     a very similar string which requires a separate translation.  */
+# ifdef _LIBC
+  (void) __fxprintf (NULL, "%s\n", _("memory exhausted"));
+# else
+  fprintf (stderr, "%s\n", _("memory exhausted"));
+# endif
+  exit (obstack_exit_failure);
+}
+
+#endif  /* !ELIDE_CODE */
diff --git a/gnu/obstack.h b/gnu/obstack.h
new file mode 100644 (file)
index 0000000..113aad8
--- /dev/null
@@ -0,0 +1,514 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* obstack.h - object stack macros
+   Copyright (C) 1988-1994, 1996-1999, 2003-2006, 2009-2010 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
+   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/>.  */
+
+/* Summary:
+
+All the apparent functions defined here are macros. The idea
+is that you would use these pre-tested macros to solve a
+very specific set of problems, and they would run fast.
+Caution: no side-effects in arguments please!! They may be
+evaluated MANY times!!
+
+These macros operate a stack of objects.  Each object starts life
+small, and may grow to maturity.  (Consider building a word syllable
+by syllable.)  An object can move while it is growing.  Once it has
+been "finished" it never changes address again.  So the "top of the
+stack" is typically an immature growing object, while the rest of the
+stack is of mature, fixed size and fixed address objects.
+
+These routines grab large chunks of memory, using a function you
+supply, called `obstack_chunk_alloc'.  On occasion, they free chunks,
+by calling `obstack_chunk_free'.  You must define them and declare
+them before using any obstack macros.
+
+Each independent stack is represented by a `struct obstack'.
+Each of the obstack macros expects a pointer to such a structure
+as the first argument.
+
+One motivation for this package is the problem of growing char strings
+in symbol tables.  Unless you are "fascist pig with a read-only mind"
+--Gosper's immortal quote from HAKMEM item 154, out of context--you
+would not like to put any arbitrary upper limit on the length of your
+symbols.
+
+In practice this often means you will build many short symbols and a
+few long symbols.  At the time you are reading a symbol you don't know
+how long it is.  One traditional method is to read a symbol into a
+buffer, realloc()ating the buffer every time you try to read a symbol
+that is longer than the buffer.  This is beaut, but you still will
+want to copy the symbol from the buffer to a more permanent
+symbol-table entry say about half the time.
+
+With obstacks, you can work differently.  Use one obstack for all symbol
+names.  As you read a symbol, grow the name in the obstack gradually.
+When the name is complete, finalize it.  Then, if the symbol exists already,
+free the newly read name.
+
+The way we do this is to take a large chunk, allocating memory from
+low addresses.  When you want to build a symbol in the chunk you just
+add chars above the current "high water mark" in the chunk.  When you
+have finished adding chars, because you got to the end of the symbol,
+you know how long the chars are, and you can create a new object.
+Mostly the chars will not burst over the highest address of the chunk,
+because you would typically expect a chunk to be (say) 100 times as
+long as an average object.
+
+In case that isn't clear, when we have enough chars to make up
+the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed)
+so we just point to it where it lies.  No moving of chars is
+needed and this is the second win: potentially long strings need
+never be explicitly shuffled. Once an object is formed, it does not
+change its address during its lifetime.
+
+When the chars burst over a chunk boundary, we allocate a larger
+chunk, and then copy the partly formed object from the end of the old
+chunk to the beginning of the new larger chunk.  We then carry on
+accreting characters to the end of the object as we normally would.
+
+A special macro is provided to add a single char at a time to a
+growing object.  This allows the use of register variables, which
+break the ordinary 'growth' macro.
+
+Summary:
+        We allocate large chunks.
+        We carve out one object at a time from the current chunk.
+        Once carved, an object never moves.
+        We are free to append data of any size to the currently
+          growing object.
+        Exactly one object is growing in an obstack at any one time.
+        You can run one obstack per control block.
+        You may have as many control blocks as you dare.
+        Because of the way we do it, you can `unwind' an obstack
+          back to a previous state. (You may remove objects much
+          as you would with a stack.)
+*/
+
+
+/* Don't do the contents of this file more than once.  */
+
+#ifndef _OBSTACK_H
+#define _OBSTACK_H 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+\f
+/* We need the type of a pointer subtraction.  If __PTRDIFF_TYPE__ is
+   defined, as with GNU C, use that; that way we don't pollute the
+   namespace with <stddef.h>'s symbols.  Otherwise, include <stddef.h>
+   and use ptrdiff_t.  */
+
+#ifdef __PTRDIFF_TYPE__
+# define PTR_INT_TYPE __PTRDIFF_TYPE__
+#else
+# include <stddef.h>
+# define PTR_INT_TYPE ptrdiff_t
+#endif
+
+/* If B is the base of an object addressed by P, return the result of
+   aligning P to the next multiple of A + 1.  B and P must be of type
+   char *.  A + 1 must be a power of 2.  */
+
+#define __BPTR_ALIGN(B, P, A) ((B) + (((P) - (B) + (A)) & ~(A)))
+
+/* Similiar to _BPTR_ALIGN (B, P, A), except optimize the common case
+   where pointers can be converted to integers, aligned as integers,
+   and converted back again.  If PTR_INT_TYPE is narrower than a
+   pointer (e.g., the AS/400), play it safe and compute the alignment
+   relative to B.  Otherwise, use the faster strategy of computing the
+   alignment relative to 0.  */
+
+#define __PTR_ALIGN(B, P, A)                                                \
+  __BPTR_ALIGN (sizeof (PTR_INT_TYPE) < sizeof (void *) ? (B) : (char *) 0, \
+                P, A)
+
+#include <string.h>
+
+struct _obstack_chunk           /* Lives at front of each chunk. */
+{
+  char  *limit;                 /* 1 past end of this chunk */
+  struct _obstack_chunk *prev;  /* address of prior chunk or NULL */
+  char  contents[4];            /* objects begin here */
+};
+
+struct obstack          /* control current object in current chunk */
+{
+  long  chunk_size;             /* preferred size to allocate chunks in */
+  struct _obstack_chunk *chunk; /* address of current struct obstack_chunk */
+  char  *object_base;           /* address of object we are building */
+  char  *next_free;             /* where to add next char to current object */
+  char  *chunk_limit;           /* address of char after current chunk */
+  union
+  {
+    PTR_INT_TYPE tempint;
+    void *tempptr;
+  } temp;                       /* Temporary for some macros.  */
+  int   alignment_mask;         /* Mask of alignment for each object. */
+  /* These prototypes vary based on `use_extra_arg', and we use
+     casts to the prototypeless function type in all assignments,
+     but having prototypes here quiets -Wstrict-prototypes.  */
+  struct _obstack_chunk *(*chunkfun) (void *, long);
+  void (*freefun) (void *, struct _obstack_chunk *);
+  void *extra_arg;              /* first arg for chunk alloc/dealloc funcs */
+  unsigned use_extra_arg:1;     /* chunk alloc/dealloc funcs take extra arg */
+  unsigned maybe_empty_object:1;/* There is a possibility that the current
+                                   chunk contains a zero-length object.  This
+                                   prevents freeing the chunk if we allocate
+                                   a bigger chunk to replace it. */
+  unsigned alloc_failed:1;      /* No longer used, as we now call the failed
+                                   handler on error, but retained for binary
+                                   compatibility.  */
+};
+
+/* Declare the external functions we use; they are in obstack.c.  */
+
+extern void _obstack_newchunk (struct obstack *, int);
+extern int _obstack_begin (struct obstack *, int, int,
+                            void *(*) (long), void (*) (void *));
+extern int _obstack_begin_1 (struct obstack *, int, int,
+                             void *(*) (void *, long),
+                             void (*) (void *, void *), void *);
+extern int _obstack_memory_used (struct obstack *);
+
+/* The default name of the function for freeing a chunk is 'obstack_free',
+   but gnulib users can override this by defining '__obstack_free'.  */
+#ifndef __obstack_free
+# define __obstack_free obstack_free
+#endif
+extern void __obstack_free (struct obstack *obstack, void *block);
+
+\f
+/* Error handler called when `obstack_chunk_alloc' failed to allocate
+   more memory.  This can be set to a user defined function which
+   should either abort gracefully or use longjump - but shouldn't
+   return.  The default action is to print a message and abort.  */
+extern void (*obstack_alloc_failed_handler) (void);
+
+/* Exit value used when `print_and_abort' is used.  */
+extern int obstack_exit_failure;
+\f
+/* Pointer to beginning of object being allocated or to be allocated next.
+   Note that this might not be the final address of the object
+   because a new chunk might be needed to hold the final size.  */
+
+#define obstack_base(h) ((void *) (h)->object_base)
+
+/* Size for allocating ordinary chunks.  */
+
+#define obstack_chunk_size(h) ((h)->chunk_size)
+
+/* Pointer to next byte not yet allocated in current chunk.  */
+
+#define obstack_next_free(h)    ((h)->next_free)
+
+/* Mask specifying low bits that should be clear in address of an object.  */
+
+#define obstack_alignment_mask(h) ((h)->alignment_mask)
+
+/* To prevent prototype warnings provide complete argument list.  */
+#define obstack_init(h)                                         \
+  _obstack_begin ((h), 0, 0,                                    \
+                  (void *(*) (long)) obstack_chunk_alloc,       \
+                  (void (*) (void *)) obstack_chunk_free)
+
+#define obstack_begin(h, size)                                  \
+  _obstack_begin ((h), (size), 0,                               \
+                  (void *(*) (long)) obstack_chunk_alloc,       \
+                  (void (*) (void *)) obstack_chunk_free)
+
+#define obstack_specify_allocation(h, size, alignment, chunkfun, freefun)  \
+  _obstack_begin ((h), (size), (alignment),                                \
+                  (void *(*) (long)) (chunkfun),                           \
+                  (void (*) (void *)) (freefun))
+
+#define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
+  _obstack_begin_1 ((h), (size), (alignment),                           \
+                    (void *(*) (void *, long)) (chunkfun),              \
+                    (void (*) (void *, void *)) (freefun), (arg))
+
+#define obstack_chunkfun(h, newchunkfun) \
+  ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun))
+
+#define obstack_freefun(h, newfreefun) \
+  ((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun))
+
+#define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = (achar))
+
+#define obstack_blank_fast(h,n) ((h)->next_free += (n))
+
+#define obstack_memory_used(h) _obstack_memory_used (h)
+\f
+#if defined __GNUC__ && defined __STDC__ && __STDC__
+/* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and
+   does not implement __extension__.  But that compiler doesn't define
+   __GNUC_MINOR__.  */
+# if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__)
+#  define __extension__
+# endif
+
+/* For GNU C, if not -traditional,
+   we can define these macros to compute all args only once
+   without using a global variable.
+   Also, we can avoid using the `temp' slot, to make faster code.  */
+
+# define obstack_object_size(OBSTACK)                                   \
+  __extension__                                                         \
+  ({ struct obstack const *__o = (OBSTACK);                             \
+     (unsigned) (__o->next_free - __o->object_base); })
+
+# define obstack_room(OBSTACK)                                          \
+  __extension__                                                         \
+  ({ struct obstack const *__o = (OBSTACK);                             \
+     (unsigned) (__o->chunk_limit - __o->next_free); })
+
+# define obstack_make_room(OBSTACK,length)                              \
+__extension__                                                           \
+({ struct obstack *__o = (OBSTACK);                                     \
+   int __len = (length);                                                \
+   if (__o->chunk_limit - __o->next_free < __len)                       \
+     _obstack_newchunk (__o, __len);                                    \
+   (void) 0; })
+
+# define obstack_empty_p(OBSTACK)                                       \
+  __extension__                                                         \
+  ({ struct obstack const *__o = (OBSTACK);                             \
+     (__o->chunk->prev == 0                                             \
+      && __o->next_free == __PTR_ALIGN ((char *) __o->chunk,            \
+                                        __o->chunk->contents,           \
+                                        __o->alignment_mask)); })
+
+# define obstack_grow(OBSTACK,where,length)                             \
+__extension__                                                           \
+({ struct obstack *__o = (OBSTACK);                                     \
+   int __len = (length);                                                \
+   if (__o->next_free + __len > __o->chunk_limit)                       \
+     _obstack_newchunk (__o, __len);                                    \
+   memcpy (__o->next_free, where, __len);                               \
+   __o->next_free += __len;                                             \
+   (void) 0; })
+
+# define obstack_grow0(OBSTACK,where,length)                            \
+__extension__                                                           \
+({ struct obstack *__o = (OBSTACK);                                     \
+   int __len = (length);                                                \
+   if (__o->next_free + __len + 1 > __o->chunk_limit)                   \
+     _obstack_newchunk (__o, __len + 1);                                \
+   memcpy (__o->next_free, where, __len);                               \
+   __o->next_free += __len;                                             \
+   *(__o->next_free)++ = 0;                                             \
+   (void) 0; })
+
+# define obstack_1grow(OBSTACK,datum)                                   \
+__extension__                                                           \
+({ struct obstack *__o = (OBSTACK);                                     \
+   if (__o->next_free + 1 > __o->chunk_limit)                           \
+     _obstack_newchunk (__o, 1);                                        \
+   obstack_1grow_fast (__o, datum);                                     \
+   (void) 0; })
+
+/* These assume that the obstack alignment is good enough for pointers
+   or ints, and that the data added so far to the current object
+   shares that much alignment.  */
+
+# define obstack_ptr_grow(OBSTACK,datum)                                \
+__extension__                                                           \
+({ struct obstack *__o = (OBSTACK);                                     \
+   if (__o->next_free + sizeof (void *) > __o->chunk_limit)             \
+     _obstack_newchunk (__o, sizeof (void *));                          \
+   obstack_ptr_grow_fast (__o, datum); })                               \
+
+# define obstack_int_grow(OBSTACK,datum)                                \
+__extension__                                                           \
+({ struct obstack *__o = (OBSTACK);                                     \
+   if (__o->next_free + sizeof (int) > __o->chunk_limit)                \
+     _obstack_newchunk (__o, sizeof (int));                             \
+   obstack_int_grow_fast (__o, datum); })
+
+# define obstack_ptr_grow_fast(OBSTACK,aptr)                            \
+__extension__                                                           \
+({ struct obstack *__o1 = (OBSTACK);                                    \
+   *(const void **) __o1->next_free = (aptr);                           \
+   __o1->next_free += sizeof (const void *);                            \
+   (void) 0; })
+
+# define obstack_int_grow_fast(OBSTACK,aint)                            \
+__extension__                                                           \
+({ struct obstack *__o1 = (OBSTACK);                                    \
+   *(int *) __o1->next_free = (aint);                                   \
+   __o1->next_free += sizeof (int);                                     \
+   (void) 0; })
+
+# define obstack_blank(OBSTACK,length)                                  \
+__extension__                                                           \
+({ struct obstack *__o = (OBSTACK);                                     \
+   int __len = (length);                                                \
+   if (__o->chunk_limit - __o->next_free < __len)                       \
+     _obstack_newchunk (__o, __len);                                    \
+   obstack_blank_fast (__o, __len);                                     \
+   (void) 0; })
+
+# define obstack_alloc(OBSTACK,length)                                  \
+__extension__                                                           \
+({ struct obstack *__h = (OBSTACK);                                     \
+   obstack_blank (__h, (length));                                       \
+   obstack_finish (__h); })
+
+# define obstack_copy(OBSTACK,where,length)                             \
+__extension__                                                           \
+({ struct obstack *__h = (OBSTACK);                                     \
+   obstack_grow (__h, (where), (length));                               \
+   obstack_finish (__h); })
+
+# define obstack_copy0(OBSTACK,where,length)                            \
+__extension__                                                           \
+({ struct obstack *__h = (OBSTACK);                                     \
+   obstack_grow0 (__h, (where), (length));                              \
+   obstack_finish (__h); })
+
+/* The local variable is named __o1 to avoid a name conflict
+   when obstack_blank is called.  */
+# define obstack_finish(OBSTACK)                                        \
+__extension__                                                           \
+({ struct obstack *__o1 = (OBSTACK);                                    \
+   void *__value = (void *) __o1->object_base;                          \
+   if (__o1->next_free == __value)                                      \
+     __o1->maybe_empty_object = 1;                                      \
+   __o1->next_free                                                      \
+     = __PTR_ALIGN (__o1->object_base, __o1->next_free,                 \
+                    __o1->alignment_mask);                              \
+   if (__o1->next_free - (char *)__o1->chunk                            \
+       > __o1->chunk_limit - (char *)__o1->chunk)                       \
+     __o1->next_free = __o1->chunk_limit;                               \
+   __o1->object_base = __o1->next_free;                                 \
+   __value; })
+
+# define obstack_free(OBSTACK, OBJ)                                     \
+__extension__                                                           \
+({ struct obstack *__o = (OBSTACK);                                     \
+   void *__obj = (OBJ);                                                 \
+   if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit)  \
+     __o->next_free = __o->object_base = (char *)__obj;                 \
+   else (__obstack_free) (__o, __obj); })
+\f
+#else /* not __GNUC__ or not __STDC__ */
+
+# define obstack_object_size(h) \
+ (unsigned) ((h)->next_free - (h)->object_base)
+
+# define obstack_room(h)                \
+ (unsigned) ((h)->chunk_limit - (h)->next_free)
+
+# define obstack_empty_p(h) \
+ ((h)->chunk->prev == 0                                                 \
+  && (h)->next_free == __PTR_ALIGN ((char *) (h)->chunk,                \
+                                    (h)->chunk->contents,               \
+                                    (h)->alignment_mask))
+
+/* Note that the call to _obstack_newchunk is enclosed in (..., 0)
+   so that we can avoid having void expressions
+   in the arms of the conditional expression.
+   Casting the third operand to void was tried before,
+   but some compilers won't accept it.  */
+
+# define obstack_make_room(h,length)                                    \
+( (h)->temp.tempint = (length),                                         \
+  (((h)->next_free + (h)->temp.tempint > (h)->chunk_limit)              \
+   ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0))
+
+# define obstack_grow(h,where,length)                                   \
+( (h)->temp.tempint = (length),                                         \
+  (((h)->next_free + (h)->temp.tempint > (h)->chunk_limit)              \
+   ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0),              \
+  memcpy ((h)->next_free, where, (h)->temp.tempint),                    \
+  (h)->next_free += (h)->temp.tempint)
+
+# define obstack_grow0(h,where,length)                                  \
+( (h)->temp.tempint = (length),                                         \
+  (((h)->next_free + (h)->temp.tempint + 1 > (h)->chunk_limit)          \
+   ? (_obstack_newchunk ((h), (h)->temp.tempint + 1), 0) : 0),          \
+  memcpy ((h)->next_free, where, (h)->temp.tempint),                    \
+  (h)->next_free += (h)->temp.tempint,                                  \
+  *((h)->next_free)++ = 0)
+
+# define obstack_1grow(h,datum)                                         \
+( (((h)->next_free + 1 > (h)->chunk_limit)                              \
+   ? (_obstack_newchunk ((h), 1), 0) : 0),                              \
+  obstack_1grow_fast (h, datum))
+
+# define obstack_ptr_grow(h,datum)                                      \
+( (((h)->next_free + sizeof (char *) > (h)->chunk_limit)                \
+   ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0),                \
+  obstack_ptr_grow_fast (h, datum))
+
+# define obstack_int_grow(h,datum)                                      \
+( (((h)->next_free + sizeof (int) > (h)->chunk_limit)                   \
+   ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0),                   \
+  obstack_int_grow_fast (h, datum))
+
+# define obstack_ptr_grow_fast(h,aptr)                                  \
+  (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr))
+
+# define obstack_int_grow_fast(h,aint)                                  \
+  (((int *) ((h)->next_free += sizeof (int)))[-1] = (aint))
+
+# define obstack_blank(h,length)                                        \
+( (h)->temp.tempint = (length),                                         \
+  (((h)->chunk_limit - (h)->next_free < (h)->temp.tempint)              \
+   ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0),              \
+  obstack_blank_fast (h, (h)->temp.tempint))
+
+# define obstack_alloc(h,length)                                        \
+ (obstack_blank ((h), (length)), obstack_finish ((h)))
+
+# define obstack_copy(h,where,length)                                   \
+ (obstack_grow ((h), (where), (length)), obstack_finish ((h)))
+
+# define obstack_copy0(h,where,length)                                  \
+ (obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))
+
+# define obstack_finish(h)                                              \
+( ((h)->next_free == (h)->object_base                                   \
+   ? (((h)->maybe_empty_object = 1), 0)                                 \
+   : 0),                                                                \
+  (h)->temp.tempptr = (h)->object_base,                                 \
+  (h)->next_free                                                        \
+    = __PTR_ALIGN ((h)->object_base, (h)->next_free,                    \
+                   (h)->alignment_mask),                                \
+  (((h)->next_free - (char *) (h)->chunk                                \
+    > (h)->chunk_limit - (char *) (h)->chunk)                           \
+   ? ((h)->next_free = (h)->chunk_limit) : 0),                          \
+  (h)->object_base = (h)->next_free,                                    \
+  (h)->temp.tempptr)
+
+# define obstack_free(h,obj)                                            \
+( (h)->temp.tempint = (char *) (obj) - (char *) (h)->chunk,             \
+  ((((h)->temp.tempint > 0                                              \
+    && (h)->temp.tempint < (h)->chunk_limit - (char *) (h)->chunk))     \
+   ? (int) ((h)->next_free = (h)->object_base                           \
+            = (h)->temp.tempint + (char *) (h)->chunk)                  \
+   : (((__obstack_free) ((h), (h)->temp.tempint + (char *) (h)->chunk), 0), 0)))
+
+#endif /* not __GNUC__ or not __STDC__ */
+
+#ifdef __cplusplus
+}       /* C++ */
+#endif
+
+#endif /* obstack.h */
diff --git a/gnu/offtostr.c b/gnu/offtostr.c
new file mode 100644 (file)
index 0000000..98b0c05
--- /dev/null
@@ -0,0 +1,6 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+#define inttostr offtostr
+#define inttype off_t
+#define inttype_is_signed 1
+#include "inttostr.c"
diff --git a/gnu/open.c b/gnu/open.c
new file mode 100644 (file)
index 0000000..7c2bbb8
--- /dev/null
@@ -0,0 +1,168 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Open a descriptor to a file.
+   Copyright (C) 2007-2010 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>, 2007.  */
+
+#include <config.h>
+
+/* Get the original definition of open.  It might be defined as a macro.  */
+#define __need_system_fcntl_h
+#include <fcntl.h>
+#undef __need_system_fcntl_h
+#include <sys/types.h>
+
+static inline int
+orig_open (const char *filename, int flags, mode_t mode)
+{
+  return open (filename, flags, mode);
+}
+
+/* Specification.  */
+#include <fcntl.h>
+
+#include <errno.h>
+#include <stdarg.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#ifndef REPLACE_OPEN_DIRECTORY
+# define REPLACE_OPEN_DIRECTORY 0
+#endif
+
+int
+open (const char *filename, int flags, ...)
+{
+  mode_t mode;
+  int fd;
+
+  mode = 0;
+  if (flags & O_CREAT)
+    {
+      va_list arg;
+      va_start (arg, flags);
+
+      /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4
+         creates crashing code when 'mode_t' is smaller than 'int'.  */
+      mode = va_arg (arg, PROMOTED_MODE_T);
+
+      va_end (arg);
+    }
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+  if (strcmp (filename, "/dev/null") == 0)
+    filename = "NUL";
+#endif
+
+#if OPEN_TRAILING_SLASH_BUG
+  /* If the filename ends in a slash and one of O_CREAT, O_WRONLY, O_RDWR
+     is specified, then fail.
+     Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html>
+     says that
+       "A pathname that contains at least one non-slash character and that
+        ends with one or more trailing slashes shall be resolved as if a
+        single dot character ( '.' ) were appended to the pathname."
+     and
+       "The special filename dot shall refer to the directory specified by
+        its predecessor."
+     If the named file already exists as a directory, then
+       - if O_CREAT is specified, open() must fail because of the semantics
+         of O_CREAT,
+       - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX
+         <http://www.opengroup.org/susv3/functions/open.html> says that it
+         fails with errno = EISDIR in this case.
+     If the named file does not exist or does not name a directory, then
+       - if O_CREAT is specified, open() must fail since open() cannot create
+         directories,
+       - if O_WRONLY or O_RDWR is specified, open() must fail because the
+         file does not contain a '.' directory.  */
+  if (flags & (O_CREAT | O_WRONLY | O_RDWR))
+    {
+      size_t len = strlen (filename);
+      if (len > 0 && filename[len - 1] == '/')
+        {
+          errno = EISDIR;
+          return -1;
+        }
+    }
+#endif
+
+  fd = orig_open (filename, flags, mode);
+
+#if REPLACE_FCHDIR
+  /* Implementing fchdir and fdopendir requires the ability to open a
+     directory file descriptor.  If open doesn't support that (as on
+     mingw), we use a dummy file that behaves the same as directories
+     on Linux (ie. always reports EOF on attempts to read()), and
+     override fstat() in fchdir.c to hide the fact that we have a
+     dummy.  */
+  if (REPLACE_OPEN_DIRECTORY && fd < 0 && errno == EACCES
+      && (flags & O_ACCMODE) == O_RDONLY)
+    {
+      struct stat statbuf;
+      if (stat (filename, &statbuf) == 0 && S_ISDIR (statbuf.st_mode))
+        {
+          /* Maximum recursion depth of 1.  */
+          fd = open ("/dev/null", flags, mode);
+          if (0 <= fd)
+            fd = _gl_register_fd (fd, filename);
+        }
+      else
+        errno = EACCES;
+    }
+#endif
+
+#if OPEN_TRAILING_SLASH_BUG
+  /* If the filename ends in a slash and fd does not refer to a directory,
+     then fail.
+     Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html>
+     says that
+       "A pathname that contains at least one non-slash character and that
+        ends with one or more trailing slashes shall be resolved as if a
+        single dot character ( '.' ) were appended to the pathname."
+     and
+       "The special filename dot shall refer to the directory specified by
+        its predecessor."
+     If the named file without the slash is not a directory, open() must fail
+     with ENOTDIR.  */
+  if (fd >= 0)
+    {
+      /* We know len is positive, since open did not fail with ENOENT.  */
+      size_t len = strlen (filename);
+      if (filename[len - 1] == '/')
+        {
+          struct stat statbuf;
+
+          if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode))
+            {
+              close (fd);
+              errno = ENOTDIR;
+              return -1;
+            }
+        }
+    }
+#endif
+
+#if REPLACE_FCHDIR
+  if (!REPLACE_OPEN_DIRECTORY && 0 <= fd)
+    fd = _gl_register_fd (fd, filename);
+#endif
+
+  return fd;
+}
diff --git a/gnu/openat-die.c b/gnu/openat-die.c
new file mode 100644 (file)
index 0000000..022dbd4
--- /dev/null
@@ -0,0 +1,58 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Report a save- or restore-cwd failure in our openat replacement and then exit.
+
+   Copyright (C) 2005-2006, 2008-2010 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>
+
+#include "openat.h"
+
+#include <stdlib.h>
+
+#include "error.h"
+#include "exitfail.h"
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
+void
+openat_save_fail (int errnum)
+{
+  error (exit_failure, errnum,
+         _("unable to record current working directory"));
+
+  /* The `noreturn' attribute cannot be applied to error, since it returns
+     when its first argument is 0.  To help compilers understand that this
+     function does not return, call abort.  Also, the abort is a
+     safety feature if exit_failure is 0 (which shouldn't happen).  */
+  abort ();
+}
+
+
+/* Exit with an error about failure to restore the working directory
+   during an openat emulation.  The caller must ensure that fd 2 is
+   not a just-opened fd, even when openat_safer is not in use.  */
+
+void
+openat_restore_fail (int errnum)
+{
+  error (exit_failure, errnum,
+         _("failed to return to initial working directory"));
+
+  /* As above.  */
+  abort ();
+}
diff --git a/gnu/openat-priv.h b/gnu/openat-priv.h
new file mode 100644 (file)
index 0000000..ca4fa50
--- /dev/null
@@ -0,0 +1,46 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Internals for openat-like functions.
+
+   Copyright (C) 2005-2006, 2009-2010 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 */
+
+#ifndef _GL_HEADER_OPENAT_PRIV
+#define _GL_HEADER_OPENAT_PRIV
+
+#include <errno.h>
+#include <stdlib.h>
+
+#define OPENAT_BUFFER_SIZE 512
+char *openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file);
+
+/* Trying to access a BUILD_PROC_NAME file will fail on systems without
+   /proc support, and even on systems *with* ProcFS support.  Return
+   nonzero if the failure may be legitimate, e.g., because /proc is not
+   readable, or the particular .../fd/N directory is not present.  */
+#define EXPECTED_ERRNO(Errno)                   \
+  ((Errno) == ENOTDIR || (Errno) == ENOENT      \
+   || (Errno) == EPERM || (Errno) == EACCES     \
+   || (Errno) == ENOSYS /* Solaris 8 */         \
+   || (Errno) == EOPNOTSUPP /* FreeBSD */)
+
+/* Wrapper function shared among linkat and renameat.  */
+int at_func2 (int fd1, char const *file1,
+              int fd2, char const *file2,
+              int (*func) (char const *file1, char const *file2));
+
+#endif /* _GL_HEADER_OPENAT_PRIV */
diff --git a/gnu/openat-proc.c b/gnu/openat-proc.c
new file mode 100644 (file)
index 0000000..e0693be
--- /dev/null
@@ -0,0 +1,107 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Create /proc/self/fd-related names for subfiles of open directories.
+
+   Copyright (C) 2006, 2009-2010 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.  */
+
+#include <config.h>
+
+#include "openat-priv.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "dirname.h"
+#include "intprops.h"
+#include "same-inode.h"
+#include "xalloc.h"
+
+/* The results of open() in this file are not used with fchdir,
+   and we do not leak fds to any single-threaded code that could use stdio,
+   therefore save some unnecessary work in fchdir.c.
+   FIXME - if the kernel ever adds support for multi-thread safety for
+   avoiding standard fds, then we should use open_safer.  */
+#undef open
+#undef close
+
+#define PROC_SELF_FD_FORMAT "/proc/self/fd/%d/%s"
+
+#define PROC_SELF_FD_NAME_SIZE_BOUND(len) \
+  (sizeof PROC_SELF_FD_FORMAT - sizeof "%d%s" \
+   + INT_STRLEN_BOUND (int) + (len) + 1)
+
+
+/* Set BUF to the expansion of PROC_SELF_FD_FORMAT, using FD and FILE
+   respectively for %d and %s.  If successful, return BUF if the
+   result fits in BUF, dynamically allocated memory otherwise.  But
+   return NULL if /proc is not reliable.  */
+char *
+openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file)
+{
+  static int proc_status = 0;
+
+  /* Make sure the caller gets ENOENT when appropriate.  */
+  if (!*file)
+    {
+      buf[0] = '\0';
+      return buf;
+    }
+
+  if (! proc_status)
+    {
+      /* Set PROC_STATUS to a positive value if /proc/self/fd is
+         reliable, and a negative value otherwise.  Solaris 10
+         /proc/self/fd mishandles "..", and any file name might expand
+         to ".." after symbolic link expansion, so avoid /proc/self/fd
+         if it mishandles "..".  Solaris 10 has openat, but this
+         problem is exhibited on code that built on Solaris 8 and
+         running on Solaris 10.  */
+
+      int proc_self_fd = open ("/proc/self/fd", O_RDONLY);
+      if (proc_self_fd < 0)
+        proc_status = -1;
+      else
+        {
+          struct stat proc_self_fd_dotdot_st;
+          struct stat proc_self_st;
+          char dotdot_buf[PROC_SELF_FD_NAME_SIZE_BOUND (sizeof ".." - 1)];
+          sprintf (dotdot_buf, PROC_SELF_FD_FORMAT, proc_self_fd, "..");
+          proc_status =
+            ((stat (dotdot_buf, &proc_self_fd_dotdot_st) == 0
+              && stat ("/proc/self", &proc_self_st) == 0
+              && SAME_INODE (proc_self_fd_dotdot_st, proc_self_st))
+             ? 1 : -1);
+          close (proc_self_fd);
+        }
+    }
+
+  if (proc_status < 0)
+    return NULL;
+  else
+    {
+      size_t bufsize = PROC_SELF_FD_NAME_SIZE_BOUND (strlen (file));
+      char *result = (bufsize < OPENAT_BUFFER_SIZE ? buf : xmalloc (bufsize));
+      sprintf (result, PROC_SELF_FD_FORMAT, fd, file);
+      return result;
+    }
+}
diff --git a/gnu/openat.c b/gnu/openat.c
new file mode 100644 (file)
index 0000000..f5e8a49
--- /dev/null
@@ -0,0 +1,267 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* provide a replacement openat function
+   Copyright (C) 2004-2010 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 */
+
+#include <config.h>
+
+#include "openat.h"
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */
+#include "openat-priv.h"
+#include "save-cwd.h"
+
+#if HAVE_OPENAT
+
+# undef openat
+
+/* Like openat, but work around Solaris 9 bugs with trailing slash.  */
+int
+rpl_openat (int dfd, char const *filename, int flags, ...)
+{
+  mode_t mode;
+  int fd;
+
+  mode = 0;
+  if (flags & O_CREAT)
+    {
+      va_list arg;
+      va_start (arg, flags);
+
+      /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4
+         creates crashing code when 'mode_t' is smaller than 'int'.  */
+      mode = va_arg (arg, PROMOTED_MODE_T);
+
+      va_end (arg);
+    }
+
+#if OPEN_TRAILING_SLASH_BUG
+  /* If the filename ends in a slash and one of O_CREAT, O_WRONLY, O_RDWR
+     is specified, then fail.
+     Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html>
+     says that
+       "A pathname that contains at least one non-slash character and that
+        ends with one or more trailing slashes shall be resolved as if a
+        single dot character ( '.' ) were appended to the pathname."
+     and
+       "The special filename dot shall refer to the directory specified by
+        its predecessor."
+     If the named file already exists as a directory, then
+       - if O_CREAT is specified, open() must fail because of the semantics
+         of O_CREAT,
+       - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX
+         <http://www.opengroup.org/susv3/functions/open.html> says that it
+         fails with errno = EISDIR in this case.
+     If the named file does not exist or does not name a directory, then
+       - if O_CREAT is specified, open() must fail since open() cannot create
+         directories,
+       - if O_WRONLY or O_RDWR is specified, open() must fail because the
+         file does not contain a '.' directory.  */
+  if (flags & (O_CREAT | O_WRONLY | O_RDWR))
+    {
+      size_t len = strlen (filename);
+      if (len > 0 && filename[len - 1] == '/')
+        {
+          errno = EISDIR;
+          return -1;
+        }
+    }
+#endif
+
+  fd = openat (dfd, filename, flags, mode);
+
+#if OPEN_TRAILING_SLASH_BUG
+  /* If the filename ends in a slash and fd does not refer to a directory,
+     then fail.
+     Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html>
+     says that
+       "A pathname that contains at least one non-slash character and that
+        ends with one or more trailing slashes shall be resolved as if a
+        single dot character ( '.' ) were appended to the pathname."
+     and
+       "The special filename dot shall refer to the directory specified by
+        its predecessor."
+     If the named file without the slash is not a directory, open() must fail
+     with ENOTDIR.  */
+  if (fd >= 0)
+    {
+      /* We know len is positive, since open did not fail with ENOENT.  */
+      size_t len = strlen (filename);
+      if (filename[len - 1] == '/')
+        {
+          struct stat statbuf;
+
+          if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode))
+            {
+              close (fd);
+              errno = ENOTDIR;
+              return -1;
+            }
+        }
+    }
+#endif
+
+  return fd;
+}
+
+#else /* !HAVE_OPENAT */
+
+/* Replacement for Solaris' openat function.
+   <http://www.google.com/search?q=openat+site:docs.sun.com>
+   First, try to simulate it via open ("/proc/self/fd/FD/FILE").
+   Failing that, simulate it by doing save_cwd/fchdir/open/restore_cwd.
+   If either the save_cwd or the restore_cwd fails (relatively unlikely),
+   then give a diagnostic and exit nonzero.
+   Otherwise, upon failure, set errno and return -1, as openat does.
+   Upon successful completion, return a file descriptor.  */
+int
+openat (int fd, char const *file, int flags, ...)
+{
+  mode_t mode = 0;
+
+  if (flags & O_CREAT)
+    {
+      va_list arg;
+      va_start (arg, flags);
+
+      /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4
+         creates crashing code when 'mode_t' is smaller than 'int'.  */
+      mode = va_arg (arg, PROMOTED_MODE_T);
+
+      va_end (arg);
+    }
+
+  return openat_permissive (fd, file, flags, mode, NULL);
+}
+
+/* Like openat (FD, FILE, FLAGS, MODE), but if CWD_ERRNO is
+   nonnull, set *CWD_ERRNO to an errno value if unable to save
+   or restore the initial working directory.  This is needed only
+   the first time remove.c's remove_dir opens a command-line
+   directory argument.
+
+   If a previous attempt to restore the current working directory
+   failed, then we must not even try to access a `.'-relative name.
+   It is the caller's responsibility not to call this function
+   in that case.  */
+
+int
+openat_permissive (int fd, char const *file, int flags, mode_t mode,
+                   int *cwd_errno)
+{
+  struct saved_cwd saved_cwd;
+  int saved_errno;
+  int err;
+  bool save_ok;
+
+  if (fd == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file))
+    return open (file, flags, mode);
+
+  {
+    char buf[OPENAT_BUFFER_SIZE];
+    char *proc_file = openat_proc_name (buf, fd, file);
+    if (proc_file)
+      {
+        int open_result = open (proc_file, flags, mode);
+        int open_errno = errno;
+        if (proc_file != buf)
+          free (proc_file);
+        /* If the syscall succeeds, or if it fails with an unexpected
+           errno value, then return right away.  Otherwise, fall through
+           and resort to using save_cwd/restore_cwd.  */
+        if (0 <= open_result || ! EXPECTED_ERRNO (open_errno))
+          {
+            errno = open_errno;
+            return open_result;
+          }
+      }
+  }
+
+  save_ok = (save_cwd (&saved_cwd) == 0);
+  if (! save_ok)
+    {
+      if (! cwd_errno)
+        openat_save_fail (errno);
+      *cwd_errno = errno;
+    }
+  if (0 <= fd && fd == saved_cwd.desc)
+    {
+      /* If saving the working directory collides with the user's
+         requested fd, then the user's fd must have been closed to
+         begin with.  */
+      free_cwd (&saved_cwd);
+      errno = EBADF;
+      return -1;
+    }
+
+  err = fchdir (fd);
+  saved_errno = errno;
+
+  if (! err)
+    {
+      err = open (file, flags, mode);
+      saved_errno = errno;
+      if (save_ok && restore_cwd (&saved_cwd) != 0)
+        {
+          if (! cwd_errno)
+            {
+              /* Don't write a message to just-created fd 2.  */
+              saved_errno = errno;
+              if (err == STDERR_FILENO)
+                close (err);
+              openat_restore_fail (saved_errno);
+            }
+          *cwd_errno = errno;
+        }
+    }
+
+  free_cwd (&saved_cwd);
+  errno = saved_errno;
+  return err;
+}
+
+/* Return true if our openat implementation must resort to
+   using save_cwd and restore_cwd.  */
+bool
+openat_needs_fchdir (void)
+{
+  bool needs_fchdir = true;
+  int fd = open ("/", O_RDONLY);
+
+  if (0 <= fd)
+    {
+      char buf[OPENAT_BUFFER_SIZE];
+      char *proc_file = openat_proc_name (buf, fd, ".");
+      if (proc_file)
+        {
+          needs_fchdir = false;
+          if (proc_file != buf)
+            free (proc_file);
+        }
+      close (fd);
+    }
+
+  return needs_fchdir;
+}
+
+#endif /* !HAVE_OPENAT */
diff --git a/gnu/openat.h b/gnu/openat.h
new file mode 100644 (file)
index 0000000..7cc7ad9
--- /dev/null
@@ -0,0 +1,116 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* provide a replacement openat function
+   Copyright (C) 2004-2006, 2008-2010 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 */
+
+#ifndef _GL_HEADER_OPENAT
+#define _GL_HEADER_OPENAT
+
+#include <fcntl.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <stdbool.h>
+
+#ifndef __attribute__
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
+#  define __attribute__(x) /* empty */
+# endif
+#endif
+
+#ifndef ATTRIBUTE_NORETURN
+# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+#endif
+
+#if !HAVE_OPENAT
+
+int openat_permissive (int fd, char const *file, int flags, mode_t mode,
+                       int *cwd_errno);
+bool openat_needs_fchdir (void);
+
+#else
+
+# define openat_permissive(Fd, File, Flags, Mode, Cwd_errno) \
+    openat (Fd, File, Flags, Mode)
+# define openat_needs_fchdir() false
+
+#endif
+
+void openat_restore_fail (int) ATTRIBUTE_NORETURN;
+void openat_save_fail (int) ATTRIBUTE_NORETURN;
+
+/* Using these function names makes application code
+   slightly more readable than it would be with
+   fchownat (..., 0) or fchownat (..., AT_SYMLINK_NOFOLLOW).  */
+static inline int
+chownat (int fd, char const *file, uid_t owner, gid_t group)
+{
+  return fchownat (fd, file, owner, group, 0);
+}
+
+static inline int
+lchownat (int fd, char const *file, uid_t owner, gid_t group)
+{
+  return fchownat (fd, file, owner, group, AT_SYMLINK_NOFOLLOW);
+}
+
+static inline int
+chmodat (int fd, char const *file, mode_t mode)
+{
+  return fchmodat (fd, file, mode, 0);
+}
+
+static inline int
+lchmodat (int fd, char const *file, mode_t mode)
+{
+  return fchmodat (fd, file, mode, AT_SYMLINK_NOFOLLOW);
+}
+
+static inline int
+statat (int fd, char const *name, struct stat *st)
+{
+  return fstatat (fd, name, st, 0);
+}
+
+static inline int
+lstatat (int fd, char const *name, struct stat *st)
+{
+  return fstatat (fd, name, st, AT_SYMLINK_NOFOLLOW);
+}
+
+#if GNULIB_FACCESSAT
+/* For now, there are no wrappers named laccessat or leuidaccessat,
+   since gnulib doesn't support faccessat(,AT_SYMLINK_NOFOLLOW) and
+   since access rights on symlinks are of limited utility.  */
+
+static inline int
+accessat (int fd, char const *file, int mode)
+{
+  return faccessat (fd, file, mode, 0);
+}
+
+static inline int
+euidaccessat (int fd, char const *file, int mode)
+{
+  return faccessat (fd, file, mode, AT_EACCESS);
+}
+#endif
+
+#endif /* _GL_HEADER_OPENAT */
diff --git a/gnu/opendir-safer.c b/gnu/opendir-safer.c
new file mode 100644 (file)
index 0000000..f0a1b4c
--- /dev/null
@@ -0,0 +1,70 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Invoke opendir, but avoid some glitches.
+
+   Copyright (C) 2009, 2010 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 Eric Blake.  */
+
+#include <config.h>
+
+#include "dirent-safer.h"
+
+#include <errno.h>
+#include <unistd.h>
+#include "unistd-safer.h"
+
+/* Like opendir, but do not clobber stdin, stdout, or stderr.  */
+
+DIR *
+opendir_safer (char const *name)
+{
+  DIR *dp = opendir (name);
+
+  if (dp)
+    {
+      int fd = dirfd (dp);
+
+      if (0 <= fd && fd <= STDERR_FILENO)
+        {
+          /* If fdopendir is native (as on Linux), then it is safe to
+             assume dirfd(fdopendir(n))==n.  If we are using the
+             gnulib module fdopendir, then this guarantee is not met,
+             but fdopendir recursively calls opendir_safer up to 3
+             times to at least get a safe fd.  If fdopendir is not
+             present but dirfd is accurate (as on cygwin 1.5.x), then
+             we recurse up to 3 times ourselves.  Finally, if dirfd
+             always fails (as on mingw), then we are already safe.  */
+          DIR *newdp;
+          int e;
+#if HAVE_FDOPENDIR || GNULIB_FDOPENDIR
+          int f = dup_safer (fd);
+          newdp = fdopendir (f);
+          e = errno;
+          if (! newdp)
+            close (f);
+#else /* !FDOPENDIR */
+          newdp = opendir_safer (name);
+          e = errno;
+#endif
+          closedir (dp);
+          errno = e;
+          dp = newdp;
+        }
+    }
+
+  return dp;
+}
diff --git a/gnu/pathmax.h b/gnu/pathmax.h
new file mode 100644 (file)
index 0000000..5c00060
--- /dev/null
@@ -0,0 +1,50 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Define PATH_MAX somehow.  Requires sys/types.h.
+   Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _PATHMAX_H
+# define _PATHMAX_H
+
+# include <unistd.h>
+
+# include <limits.h>
+
+# ifndef _POSIX_PATH_MAX
+#  define _POSIX_PATH_MAX 256
+# endif
+
+# if !defined PATH_MAX && defined _PC_PATH_MAX && defined HAVE_PATHCONF
+#  define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 \
+                    : pathconf ("/", _PC_PATH_MAX))
+# endif
+
+/* Don't include sys/param.h if it already has been.  */
+# if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
+#  include <sys/param.h>
+# endif
+
+# if !defined PATH_MAX && defined MAXPATHLEN
+#  define PATH_MAX MAXPATHLEN
+# endif
+
+# ifndef PATH_MAX
+#  define PATH_MAX _POSIX_PATH_MAX
+# endif
+
+#endif /* _PATHMAX_H */
diff --git a/gnu/pipe-safer.c b/gnu/pipe-safer.c
new file mode 100644 (file)
index 0000000..f8c3bdb
--- /dev/null
@@ -0,0 +1,58 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Invoke pipe, but avoid some glitches.
+   Copyright (C) 2005-2006, 2009-2010 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.  */
+
+#include <config.h>
+
+#include "unistd-safer.h"
+
+#include <unistd.h>
+#include <errno.h>
+
+/* Like pipe, but ensure that neither of the file descriptors is
+   STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO.  Fail with ENOSYS on
+   platforms that lack pipe.  */
+
+int
+pipe_safer (int fd[2])
+{
+#if HAVE_PIPE
+  if (pipe (fd) == 0)
+    {
+      int i;
+      for (i = 0; i < 2; i++)
+        {
+          fd[i] = fd_safer (fd[i]);
+          if (fd[i] < 0)
+            {
+              int e = errno;
+              close (fd[1 - i]);
+              errno = e;
+              return -1;
+            }
+        }
+
+      return 0;
+    }
+#else
+  errno = ENOSYS;
+#endif
+
+  return -1;
+}
diff --git a/gnu/printf-args.c b/gnu/printf-args.c
new file mode 100644 (file)
index 0000000..452ce40
--- /dev/null
@@ -0,0 +1,190 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Decomposed printf argument list.
+   Copyright (C) 1999, 2002-2003, 2005-2007, 2009-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* This file can be parametrized with the following macros:
+     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.
+     PRINTF_FETCHARGS   Name of the function to be defined.
+     STATIC             Set to 'static' to declare the function static.  */
+
+#ifndef PRINTF_FETCHARGS
+# include <config.h>
+#endif
+
+/* Specification.  */
+#ifndef PRINTF_FETCHARGS
+# include "printf-args.h"
+#endif
+
+#ifdef STATIC
+STATIC
+#endif
+int
+PRINTF_FETCHARGS (va_list args, arguments *a)
+{
+  size_t i;
+  argument *ap;
+
+  for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++)
+    switch (ap->type)
+      {
+      case TYPE_SCHAR:
+        ap->a.a_schar = va_arg (args, /*signed char*/ int);
+        break;
+      case TYPE_UCHAR:
+        ap->a.a_uchar = va_arg (args, /*unsigned char*/ int);
+        break;
+      case TYPE_SHORT:
+        ap->a.a_short = va_arg (args, /*short*/ int);
+        break;
+      case TYPE_USHORT:
+        ap->a.a_ushort = va_arg (args, /*unsigned short*/ int);
+        break;
+      case TYPE_INT:
+        ap->a.a_int = va_arg (args, int);
+        break;
+      case TYPE_UINT:
+        ap->a.a_uint = va_arg (args, unsigned int);
+        break;
+      case TYPE_LONGINT:
+        ap->a.a_longint = va_arg (args, long int);
+        break;
+      case TYPE_ULONGINT:
+        ap->a.a_ulongint = va_arg (args, unsigned long int);
+        break;
+#if HAVE_LONG_LONG_INT
+      case TYPE_LONGLONGINT:
+        ap->a.a_longlongint = va_arg (args, long long int);
+        break;
+      case TYPE_ULONGLONGINT:
+        ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
+        break;
+#endif
+      case TYPE_DOUBLE:
+        ap->a.a_double = va_arg (args, double);
+        break;
+      case TYPE_LONGDOUBLE:
+        ap->a.a_longdouble = va_arg (args, long double);
+        break;
+      case TYPE_CHAR:
+        ap->a.a_char = va_arg (args, int);
+        break;
+#if HAVE_WINT_T
+      case TYPE_WIDE_CHAR:
+        /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by
+           default argument promotions", this is not the case in mingw32,
+           where wint_t is 'unsigned short'.  */
+        ap->a.a_wide_char =
+          (sizeof (wint_t) < sizeof (int)
+           ? (wint_t) va_arg (args, int)
+           : va_arg (args, wint_t));
+        break;
+#endif
+      case TYPE_STRING:
+        ap->a.a_string = va_arg (args, const char *);
+        /* A null pointer is an invalid argument for "%s", but in practice
+           it occurs quite frequently in printf statements that produce
+           debug output.  Use a fallback in this case.  */
+        if (ap->a.a_string == NULL)
+          ap->a.a_string = "(NULL)";
+        break;
+#if HAVE_WCHAR_T
+      case TYPE_WIDE_STRING:
+        ap->a.a_wide_string = va_arg (args, const wchar_t *);
+        /* A null pointer is an invalid argument for "%ls", but in practice
+           it occurs quite frequently in printf statements that produce
+           debug output.  Use a fallback in this case.  */
+        if (ap->a.a_wide_string == NULL)
+          {
+            static const wchar_t wide_null_string[] =
+              {
+                (wchar_t)'(',
+                (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L',
+                (wchar_t)')',
+                (wchar_t)0
+              };
+            ap->a.a_wide_string = wide_null_string;
+          }
+        break;
+#endif
+      case TYPE_POINTER:
+        ap->a.a_pointer = va_arg (args, void *);
+        break;
+      case TYPE_COUNT_SCHAR_POINTER:
+        ap->a.a_count_schar_pointer = va_arg (args, signed char *);
+        break;
+      case TYPE_COUNT_SHORT_POINTER:
+        ap->a.a_count_short_pointer = va_arg (args, short *);
+        break;
+      case TYPE_COUNT_INT_POINTER:
+        ap->a.a_count_int_pointer = va_arg (args, int *);
+        break;
+      case TYPE_COUNT_LONGINT_POINTER:
+        ap->a.a_count_longint_pointer = va_arg (args, long int *);
+        break;
+#if HAVE_LONG_LONG_INT
+      case TYPE_COUNT_LONGLONGINT_POINTER:
+        ap->a.a_count_longlongint_pointer = va_arg (args, long long int *);
+        break;
+#endif
+#if ENABLE_UNISTDIO
+      /* The unistdio extensions.  */
+      case TYPE_U8_STRING:
+        ap->a.a_u8_string = va_arg (args, const uint8_t *);
+        /* A null pointer is an invalid argument for "%U", but in practice
+           it occurs quite frequently in printf statements that produce
+           debug output.  Use a fallback in this case.  */
+        if (ap->a.a_u8_string == NULL)
+          {
+            static const uint8_t u8_null_string[] =
+              { '(', 'N', 'U', 'L', 'L', ')', 0 };
+            ap->a.a_u8_string = u8_null_string;
+          }
+        break;
+      case TYPE_U16_STRING:
+        ap->a.a_u16_string = va_arg (args, const uint16_t *);
+        /* A null pointer is an invalid argument for "%lU", but in practice
+           it occurs quite frequently in printf statements that produce
+           debug output.  Use a fallback in this case.  */
+        if (ap->a.a_u16_string == NULL)
+          {
+            static const uint16_t u16_null_string[] =
+              { '(', 'N', 'U', 'L', 'L', ')', 0 };
+            ap->a.a_u16_string = u16_null_string;
+          }
+        break;
+      case TYPE_U32_STRING:
+        ap->a.a_u32_string = va_arg (args, const uint32_t *);
+        /* A null pointer is an invalid argument for "%llU", but in practice
+           it occurs quite frequently in printf statements that produce
+           debug output.  Use a fallback in this case.  */
+        if (ap->a.a_u32_string == NULL)
+          {
+            static const uint32_t u32_null_string[] =
+              { '(', 'N', 'U', 'L', 'L', ')', 0 };
+            ap->a.a_u32_string = u32_null_string;
+          }
+        break;
+#endif
+      default:
+        /* Unknown type.  */
+        return -1;
+      }
+  return 0;
+}
diff --git a/gnu/printf-args.h b/gnu/printf-args.h
new file mode 100644 (file)
index 0000000..100cbbd
--- /dev/null
@@ -0,0 +1,157 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Decomposed printf argument list.
+   Copyright (C) 1999, 2002-2003, 2006-2007, 2009-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _PRINTF_ARGS_H
+#define _PRINTF_ARGS_H
+
+/* This file can be parametrized with the following macros:
+     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.
+     PRINTF_FETCHARGS   Name of the function to be declared.
+     STATIC             Set to 'static' to declare the function static.  */
+
+/* Default parameters.  */
+#ifndef PRINTF_FETCHARGS
+# define PRINTF_FETCHARGS printf_fetchargs
+#endif
+
+/* Get size_t.  */
+#include <stddef.h>
+
+/* Get wchar_t.  */
+#if HAVE_WCHAR_T
+# include <stddef.h>
+#endif
+
+/* Get wint_t.  */
+#if HAVE_WINT_T
+# include <wchar.h>
+#endif
+
+/* Get va_list.  */
+#include <stdarg.h>
+
+
+/* Argument types */
+typedef enum
+{
+  TYPE_NONE,
+  TYPE_SCHAR,
+  TYPE_UCHAR,
+  TYPE_SHORT,
+  TYPE_USHORT,
+  TYPE_INT,
+  TYPE_UINT,
+  TYPE_LONGINT,
+  TYPE_ULONGINT,
+#if HAVE_LONG_LONG_INT
+  TYPE_LONGLONGINT,
+  TYPE_ULONGLONGINT,
+#endif
+  TYPE_DOUBLE,
+  TYPE_LONGDOUBLE,
+  TYPE_CHAR,
+#if HAVE_WINT_T
+  TYPE_WIDE_CHAR,
+#endif
+  TYPE_STRING,
+#if HAVE_WCHAR_T
+  TYPE_WIDE_STRING,
+#endif
+  TYPE_POINTER,
+  TYPE_COUNT_SCHAR_POINTER,
+  TYPE_COUNT_SHORT_POINTER,
+  TYPE_COUNT_INT_POINTER,
+  TYPE_COUNT_LONGINT_POINTER
+#if HAVE_LONG_LONG_INT
+, TYPE_COUNT_LONGLONGINT_POINTER
+#endif
+#if ENABLE_UNISTDIO
+  /* The unistdio extensions.  */
+, TYPE_U8_STRING
+, TYPE_U16_STRING
+, TYPE_U32_STRING
+#endif
+} arg_type;
+
+/* Polymorphic argument */
+typedef struct
+{
+  arg_type type;
+  union
+  {
+    signed char                 a_schar;
+    unsigned char               a_uchar;
+    short                       a_short;
+    unsigned short              a_ushort;
+    int                         a_int;
+    unsigned int                a_uint;
+    long int                    a_longint;
+    unsigned long int           a_ulongint;
+#if HAVE_LONG_LONG_INT
+    long long int               a_longlongint;
+    unsigned long long int      a_ulonglongint;
+#endif
+    float                       a_float;
+    double                      a_double;
+    long double                 a_longdouble;
+    int                         a_char;
+#if HAVE_WINT_T
+    wint_t                      a_wide_char;
+#endif
+    const char*                 a_string;
+#if HAVE_WCHAR_T
+    const wchar_t*              a_wide_string;
+#endif
+    void*                       a_pointer;
+    signed char *               a_count_schar_pointer;
+    short *                     a_count_short_pointer;
+    int *                       a_count_int_pointer;
+    long int *                  a_count_longint_pointer;
+#if HAVE_LONG_LONG_INT
+    long long int *             a_count_longlongint_pointer;
+#endif
+#if ENABLE_UNISTDIO
+    /* The unistdio extensions.  */
+    const uint8_t *             a_u8_string;
+    const uint16_t *            a_u16_string;
+    const uint32_t *            a_u32_string;
+#endif
+  }
+  a;
+}
+argument;
+
+typedef struct
+{
+  size_t count;
+  argument *arg;
+}
+arguments;
+
+
+/* Fetch the arguments, putting them into a. */
+#ifdef STATIC
+STATIC
+#else
+extern
+#endif
+int PRINTF_FETCHARGS (va_list args, arguments *a);
+
+#endif /* _PRINTF_ARGS_H */
diff --git a/gnu/printf-parse.c b/gnu/printf-parse.c
new file mode 100644 (file)
index 0000000..206a62b
--- /dev/null
@@ -0,0 +1,629 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Formatted output to strings.
+   Copyright (C) 1999-2000, 2002-2003, 2006-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* This file can be parametrized with the following macros:
+     CHAR_T             The element type of the format string.
+     CHAR_T_ONLY_ASCII  Set to 1 to enable verification that all characters
+                        in the format string are ASCII.
+     DIRECTIVE          Structure denoting a format directive.
+                        Depends on CHAR_T.
+     DIRECTIVES         Structure denoting the set of format directives of a
+                        format string.  Depends on CHAR_T.
+     PRINTF_PARSE       Function that parses a format string.
+                        Depends on CHAR_T.
+     STATIC             Set to 'static' to declare the function static.
+     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.  */
+
+#ifndef PRINTF_PARSE
+# include <config.h>
+#endif
+
+/* Specification.  */
+#ifndef PRINTF_PARSE
+# include "printf-parse.h"
+#endif
+
+/* Default parameters.  */
+#ifndef PRINTF_PARSE
+# define PRINTF_PARSE printf_parse
+# define CHAR_T char
+# define DIRECTIVE char_directive
+# define DIRECTIVES char_directives
+#endif
+
+/* Get size_t, NULL.  */
+#include <stddef.h>
+
+/* Get intmax_t.  */
+#if defined IN_LIBINTL || defined IN_LIBASPRINTF
+# if HAVE_STDINT_H_WITH_UINTMAX
+#  include <stdint.h>
+# endif
+# if HAVE_INTTYPES_H_WITH_UINTMAX
+#  include <inttypes.h>
+# endif
+#else
+# include <stdint.h>
+#endif
+
+/* malloc(), realloc(), free().  */
+#include <stdlib.h>
+
+/* errno.  */
+#include <errno.h>
+
+/* Checked size_t computations.  */
+#include "xsize.h"
+
+#if CHAR_T_ONLY_ASCII
+/* c_isascii().  */
+# include "c-ctype.h"
+#endif
+
+#ifdef STATIC
+STATIC
+#endif
+int
+PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a)
+{
+  const CHAR_T *cp = format;            /* pointer into format */
+  size_t arg_posn = 0;          /* number of regular arguments consumed */
+  size_t d_allocated;                   /* allocated elements of d->dir */
+  size_t a_allocated;                   /* allocated elements of a->arg */
+  size_t max_width_length = 0;
+  size_t max_precision_length = 0;
+
+  d->count = 0;
+  d_allocated = 1;
+  d->dir = (DIRECTIVE *) malloc (d_allocated * sizeof (DIRECTIVE));
+  if (d->dir == NULL)
+    /* Out of memory.  */
+    goto out_of_memory_1;
+
+  a->count = 0;
+  a_allocated = 0;
+  a->arg = NULL;
+
+#define REGISTER_ARG(_index_,_type_) \
+  {                                                                     \
+    size_t n = (_index_);                                               \
+    if (n >= a_allocated)                                               \
+      {                                                                 \
+        size_t memory_size;                                             \
+        argument *memory;                                               \
+                                                                        \
+        a_allocated = xtimes (a_allocated, 2);                          \
+        if (a_allocated <= n)                                           \
+          a_allocated = xsum (n, 1);                                    \
+        memory_size = xtimes (a_allocated, sizeof (argument));          \
+        if (size_overflow_p (memory_size))                              \
+          /* Overflow, would lead to out of memory.  */                 \
+          goto out_of_memory;                                           \
+        memory = (argument *) (a->arg                                   \
+                               ? realloc (a->arg, memory_size)          \
+                               : malloc (memory_size));                 \
+        if (memory == NULL)                                             \
+          /* Out of memory.  */                                         \
+          goto out_of_memory;                                           \
+        a->arg = memory;                                                \
+      }                                                                 \
+    while (a->count <= n)                                               \
+      a->arg[a->count++].type = TYPE_NONE;                              \
+    if (a->arg[n].type == TYPE_NONE)                                    \
+      a->arg[n].type = (_type_);                                        \
+    else if (a->arg[n].type != (_type_))                                \
+      /* Ambiguous type for positional argument.  */                    \
+      goto error;                                                       \
+  }
+
+  while (*cp != '\0')
+    {
+      CHAR_T c = *cp++;
+      if (c == '%')
+        {
+          size_t arg_index = ARG_NONE;
+          DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */
+
+          /* Initialize the next directive.  */
+          dp->dir_start = cp - 1;
+          dp->flags = 0;
+          dp->width_start = NULL;
+          dp->width_end = NULL;
+          dp->width_arg_index = ARG_NONE;
+          dp->precision_start = NULL;
+          dp->precision_end = NULL;
+          dp->precision_arg_index = ARG_NONE;
+          dp->arg_index = ARG_NONE;
+
+          /* Test for positional argument.  */
+          if (*cp >= '0' && *cp <= '9')
+            {
+              const CHAR_T *np;
+
+              for (np = cp; *np >= '0' && *np <= '9'; np++)
+                ;
+              if (*np == '$')
+                {
+                  size_t n = 0;
+
+                  for (np = cp; *np >= '0' && *np <= '9'; np++)
+                    n = xsum (xtimes (n, 10), *np - '0');
+                  if (n == 0)
+                    /* Positional argument 0.  */
+                    goto error;
+                  if (size_overflow_p (n))
+                    /* n too large, would lead to out of memory later.  */
+                    goto error;
+                  arg_index = n - 1;
+                  cp = np + 1;
+                }
+            }
+
+          /* Read the flags.  */
+          for (;;)
+            {
+              if (*cp == '\'')
+                {
+                  dp->flags |= FLAG_GROUP;
+                  cp++;
+                }
+              else if (*cp == '-')
+                {
+                  dp->flags |= FLAG_LEFT;
+                  cp++;
+                }
+              else if (*cp == '+')
+                {
+                  dp->flags |= FLAG_SHOWSIGN;
+                  cp++;
+                }
+              else if (*cp == ' ')
+                {
+                  dp->flags |= FLAG_SPACE;
+                  cp++;
+                }
+              else if (*cp == '#')
+                {
+                  dp->flags |= FLAG_ALT;
+                  cp++;
+                }
+              else if (*cp == '0')
+                {
+                  dp->flags |= FLAG_ZERO;
+                  cp++;
+                }
+              else
+                break;
+            }
+
+          /* Parse the field width.  */
+          if (*cp == '*')
+            {
+              dp->width_start = cp;
+              cp++;
+              dp->width_end = cp;
+              if (max_width_length < 1)
+                max_width_length = 1;
+
+              /* Test for positional argument.  */
+              if (*cp >= '0' && *cp <= '9')
+                {
+                  const CHAR_T *np;
+
+                  for (np = cp; *np >= '0' && *np <= '9'; np++)
+                    ;
+                  if (*np == '$')
+                    {
+                      size_t n = 0;
+
+                      for (np = cp; *np >= '0' && *np <= '9'; np++)
+                        n = xsum (xtimes (n, 10), *np - '0');
+                      if (n == 0)
+                        /* Positional argument 0.  */
+                        goto error;
+                      if (size_overflow_p (n))
+                        /* n too large, would lead to out of memory later.  */
+                        goto error;
+                      dp->width_arg_index = n - 1;
+                      cp = np + 1;
+                    }
+                }
+              if (dp->width_arg_index == ARG_NONE)
+                {
+                  dp->width_arg_index = arg_posn++;
+                  if (dp->width_arg_index == ARG_NONE)
+                    /* arg_posn wrapped around.  */
+                    goto error;
+                }
+              REGISTER_ARG (dp->width_arg_index, TYPE_INT);
+            }
+          else if (*cp >= '0' && *cp <= '9')
+            {
+              size_t width_length;
+
+              dp->width_start = cp;
+              for (; *cp >= '0' && *cp <= '9'; cp++)
+                ;
+              dp->width_end = cp;
+              width_length = dp->width_end - dp->width_start;
+              if (max_width_length < width_length)
+                max_width_length = width_length;
+            }
+
+          /* Parse the precision.  */
+          if (*cp == '.')
+            {
+              cp++;
+              if (*cp == '*')
+                {
+                  dp->precision_start = cp - 1;
+                  cp++;
+                  dp->precision_end = cp;
+                  if (max_precision_length < 2)
+                    max_precision_length = 2;
+
+                  /* Test for positional argument.  */
+                  if (*cp >= '0' && *cp <= '9')
+                    {
+                      const CHAR_T *np;
+
+                      for (np = cp; *np >= '0' && *np <= '9'; np++)
+                        ;
+                      if (*np == '$')
+                        {
+                          size_t n = 0;
+
+                          for (np = cp; *np >= '0' && *np <= '9'; np++)
+                            n = xsum (xtimes (n, 10), *np - '0');
+                          if (n == 0)
+                            /* Positional argument 0.  */
+                            goto error;
+                          if (size_overflow_p (n))
+                            /* n too large, would lead to out of memory
+                               later.  */
+                            goto error;
+                          dp->precision_arg_index = n - 1;
+                          cp = np + 1;
+                        }
+                    }
+                  if (dp->precision_arg_index == ARG_NONE)
+                    {
+                      dp->precision_arg_index = arg_posn++;
+                      if (dp->precision_arg_index == ARG_NONE)
+                        /* arg_posn wrapped around.  */
+                        goto error;
+                    }
+                  REGISTER_ARG (dp->precision_arg_index, TYPE_INT);
+                }
+              else
+                {
+                  size_t precision_length;
+
+                  dp->precision_start = cp - 1;
+                  for (; *cp >= '0' && *cp <= '9'; cp++)
+                    ;
+                  dp->precision_end = cp;
+                  precision_length = dp->precision_end - dp->precision_start;
+                  if (max_precision_length < precision_length)
+                    max_precision_length = precision_length;
+                }
+            }
+
+          {
+            arg_type type;
+
+            /* Parse argument type/size specifiers.  */
+            {
+              int flags = 0;
+
+              for (;;)
+                {
+                  if (*cp == 'h')
+                    {
+                      flags |= (1 << (flags & 1));
+                      cp++;
+                    }
+                  else if (*cp == 'L')
+                    {
+                      flags |= 4;
+                      cp++;
+                    }
+                  else if (*cp == 'l')
+                    {
+                      flags += 8;
+                      cp++;
+                    }
+                  else if (*cp == 'j')
+                    {
+                      if (sizeof (intmax_t) > sizeof (long))
+                        {
+                          /* intmax_t = long long */
+                          flags += 16;
+                        }
+                      else if (sizeof (intmax_t) > sizeof (int))
+                        {
+                          /* intmax_t = long */
+                          flags += 8;
+                        }
+                      cp++;
+                    }
+                  else if (*cp == 'z' || *cp == 'Z')
+                    {
+                      /* 'z' is standardized in ISO C 99, but glibc uses 'Z'
+                         because the warning facility in gcc-2.95.2 understands
+                         only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784).  */
+                      if (sizeof (size_t) > sizeof (long))
+                        {
+                          /* size_t = long long */
+                          flags += 16;
+                        }
+                      else if (sizeof (size_t) > sizeof (int))
+                        {
+                          /* size_t = long */
+                          flags += 8;
+                        }
+                      cp++;
+                    }
+                  else if (*cp == 't')
+                    {
+                      if (sizeof (ptrdiff_t) > sizeof (long))
+                        {
+                          /* ptrdiff_t = long long */
+                          flags += 16;
+                        }
+                      else if (sizeof (ptrdiff_t) > sizeof (int))
+                        {
+                          /* ptrdiff_t = long */
+                          flags += 8;
+                        }
+                      cp++;
+                    }
+#if defined __APPLE__ && defined __MACH__
+                  /* On MacOS X 10.3, PRIdMAX is defined as "qd".
+                     We cannot change it to "lld" because PRIdMAX must also
+                     be understood by the system's printf routines.  */
+                  else if (*cp == 'q')
+                    {
+                      if (64 / 8 > sizeof (long))
+                        {
+                          /* int64_t = long long */
+                          flags += 16;
+                        }
+                      else
+                        {
+                          /* int64_t = long */
+                          flags += 8;
+                        }
+                      cp++;
+                    }
+#endif
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+                  /* On native Win32, PRIdMAX is defined as "I64d".
+                     We cannot change it to "lld" because PRIdMAX must also
+                     be understood by the system's printf routines.  */
+                  else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4')
+                    {
+                      if (64 / 8 > sizeof (long))
+                        {
+                          /* __int64 = long long */
+                          flags += 16;
+                        }
+                      else
+                        {
+                          /* __int64 = long */
+                          flags += 8;
+                        }
+                      cp += 3;
+                    }
+#endif
+                  else
+                    break;
+                }
+
+              /* Read the conversion character.  */
+              c = *cp++;
+              switch (c)
+                {
+                case 'd': case 'i':
+#if HAVE_LONG_LONG_INT
+                  /* If 'long long' exists and is larger than 'long':  */
+                  if (flags >= 16 || (flags & 4))
+                    type = TYPE_LONGLONGINT;
+                  else
+#endif
+                  /* If 'long long' exists and is the same as 'long', we parse
+                     "lld" into TYPE_LONGINT.  */
+                  if (flags >= 8)
+                    type = TYPE_LONGINT;
+                  else if (flags & 2)
+                    type = TYPE_SCHAR;
+                  else if (flags & 1)
+                    type = TYPE_SHORT;
+                  else
+                    type = TYPE_INT;
+                  break;
+                case 'o': case 'u': case 'x': case 'X':
+#if HAVE_LONG_LONG_INT
+                  /* If 'long long' exists and is larger than 'long':  */
+                  if (flags >= 16 || (flags & 4))
+                    type = TYPE_ULONGLONGINT;
+                  else
+#endif
+                  /* If 'unsigned long long' exists and is the same as
+                     'unsigned long', we parse "llu" into TYPE_ULONGINT.  */
+                  if (flags >= 8)
+                    type = TYPE_ULONGINT;
+                  else if (flags & 2)
+                    type = TYPE_UCHAR;
+                  else if (flags & 1)
+                    type = TYPE_USHORT;
+                  else
+                    type = TYPE_UINT;
+                  break;
+                case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
+                case 'a': case 'A':
+                  if (flags >= 16 || (flags & 4))
+                    type = TYPE_LONGDOUBLE;
+                  else
+                    type = TYPE_DOUBLE;
+                  break;
+                case 'c':
+                  if (flags >= 8)
+#if HAVE_WINT_T
+                    type = TYPE_WIDE_CHAR;
+#else
+                    goto error;
+#endif
+                  else
+                    type = TYPE_CHAR;
+                  break;
+#if HAVE_WINT_T
+                case 'C':
+                  type = TYPE_WIDE_CHAR;
+                  c = 'c';
+                  break;
+#endif
+                case 's':
+                  if (flags >= 8)
+#if HAVE_WCHAR_T
+                    type = TYPE_WIDE_STRING;
+#else
+                    goto error;
+#endif
+                  else
+                    type = TYPE_STRING;
+                  break;
+#if HAVE_WCHAR_T
+                case 'S':
+                  type = TYPE_WIDE_STRING;
+                  c = 's';
+                  break;
+#endif
+                case 'p':
+                  type = TYPE_POINTER;
+                  break;
+                case 'n':
+#if HAVE_LONG_LONG_INT
+                  /* If 'long long' exists and is larger than 'long':  */
+                  if (flags >= 16 || (flags & 4))
+                    type = TYPE_COUNT_LONGLONGINT_POINTER;
+                  else
+#endif
+                  /* If 'long long' exists and is the same as 'long', we parse
+                     "lln" into TYPE_COUNT_LONGINT_POINTER.  */
+                  if (flags >= 8)
+                    type = TYPE_COUNT_LONGINT_POINTER;
+                  else if (flags & 2)
+                    type = TYPE_COUNT_SCHAR_POINTER;
+                  else if (flags & 1)
+                    type = TYPE_COUNT_SHORT_POINTER;
+                  else
+                    type = TYPE_COUNT_INT_POINTER;
+                  break;
+#if ENABLE_UNISTDIO
+                /* The unistdio extensions.  */
+                case 'U':
+                  if (flags >= 16)
+                    type = TYPE_U32_STRING;
+                  else if (flags >= 8)
+                    type = TYPE_U16_STRING;
+                  else
+                    type = TYPE_U8_STRING;
+                  break;
+#endif
+                case '%':
+                  type = TYPE_NONE;
+                  break;
+                default:
+                  /* Unknown conversion character.  */
+                  goto error;
+                }
+            }
+
+            if (type != TYPE_NONE)
+              {
+                dp->arg_index = arg_index;
+                if (dp->arg_index == ARG_NONE)
+                  {
+                    dp->arg_index = arg_posn++;
+                    if (dp->arg_index == ARG_NONE)
+                      /* arg_posn wrapped around.  */
+                      goto error;
+                  }
+                REGISTER_ARG (dp->arg_index, type);
+              }
+            dp->conversion = c;
+            dp->dir_end = cp;
+          }
+
+          d->count++;
+          if (d->count >= d_allocated)
+            {
+              size_t memory_size;
+              DIRECTIVE *memory;
+
+              d_allocated = xtimes (d_allocated, 2);
+              memory_size = xtimes (d_allocated, sizeof (DIRECTIVE));
+              if (size_overflow_p (memory_size))
+                /* Overflow, would lead to out of memory.  */
+                goto out_of_memory;
+              memory = (DIRECTIVE *) realloc (d->dir, memory_size);
+              if (memory == NULL)
+                /* Out of memory.  */
+                goto out_of_memory;
+              d->dir = memory;
+            }
+        }
+#if CHAR_T_ONLY_ASCII
+      else if (!c_isascii (c))
+        {
+          /* Non-ASCII character.  Not supported.  */
+          goto error;
+        }
+#endif
+    }
+  d->dir[d->count].dir_start = cp;
+
+  d->max_width_length = max_width_length;
+  d->max_precision_length = max_precision_length;
+  return 0;
+
+error:
+  if (a->arg)
+    free (a->arg);
+  if (d->dir)
+    free (d->dir);
+  errno = EINVAL;
+  return -1;
+
+out_of_memory:
+  if (a->arg)
+    free (a->arg);
+  if (d->dir)
+    free (d->dir);
+out_of_memory_1:
+  errno = ENOMEM;
+  return -1;
+}
+
+#undef PRINTF_PARSE
+#undef DIRECTIVES
+#undef DIRECTIVE
+#undef CHAR_T_ONLY_ASCII
+#undef CHAR_T
diff --git a/gnu/printf-parse.h b/gnu/printf-parse.h
new file mode 100644 (file)
index 0000000..67b7984
--- /dev/null
@@ -0,0 +1,182 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Parse printf format string.
+   Copyright (C) 1999, 2002-2003, 2005, 2007, 2009-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _PRINTF_PARSE_H
+#define _PRINTF_PARSE_H
+
+/* This file can be parametrized with the following macros:
+     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.
+     STATIC             Set to 'static' to declare the function static.  */
+
+#include "printf-args.h"
+
+
+/* Flags */
+#define FLAG_GROUP       1      /* ' flag */
+#define FLAG_LEFT        2      /* - flag */
+#define FLAG_SHOWSIGN    4      /* + flag */
+#define FLAG_SPACE       8      /* space flag */
+#define FLAG_ALT        16      /* # flag */
+#define FLAG_ZERO       32
+
+/* arg_index value indicating that no argument is consumed.  */
+#define ARG_NONE        (~(size_t)0)
+
+/* xxx_directive: A parsed directive.
+   xxx_directives: A parsed format string.  */
+
+/* A parsed directive.  */
+typedef struct
+{
+  const char* dir_start;
+  const char* dir_end;
+  int flags;
+  const char* width_start;
+  const char* width_end;
+  size_t width_arg_index;
+  const char* precision_start;
+  const char* precision_end;
+  size_t precision_arg_index;
+  char conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
+  size_t arg_index;
+}
+char_directive;
+
+/* A parsed format string.  */
+typedef struct
+{
+  size_t count;
+  char_directive *dir;
+  size_t max_width_length;
+  size_t max_precision_length;
+}
+char_directives;
+
+#if ENABLE_UNISTDIO
+
+/* A parsed directive.  */
+typedef struct
+{
+  const uint8_t* dir_start;
+  const uint8_t* dir_end;
+  int flags;
+  const uint8_t* width_start;
+  const uint8_t* width_end;
+  size_t width_arg_index;
+  const uint8_t* precision_start;
+  const uint8_t* precision_end;
+  size_t precision_arg_index;
+  uint8_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
+  size_t arg_index;
+}
+u8_directive;
+
+/* A parsed format string.  */
+typedef struct
+{
+  size_t count;
+  u8_directive *dir;
+  size_t max_width_length;
+  size_t max_precision_length;
+}
+u8_directives;
+
+/* A parsed directive.  */
+typedef struct
+{
+  const uint16_t* dir_start;
+  const uint16_t* dir_end;
+  int flags;
+  const uint16_t* width_start;
+  const uint16_t* width_end;
+  size_t width_arg_index;
+  const uint16_t* precision_start;
+  const uint16_t* precision_end;
+  size_t precision_arg_index;
+  uint16_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
+  size_t arg_index;
+}
+u16_directive;
+
+/* A parsed format string.  */
+typedef struct
+{
+  size_t count;
+  u16_directive *dir;
+  size_t max_width_length;
+  size_t max_precision_length;
+}
+u16_directives;
+
+/* A parsed directive.  */
+typedef struct
+{
+  const uint32_t* dir_start;
+  const uint32_t* dir_end;
+  int flags;
+  const uint32_t* width_start;
+  const uint32_t* width_end;
+  size_t width_arg_index;
+  const uint32_t* precision_start;
+  const uint32_t* precision_end;
+  size_t precision_arg_index;
+  uint32_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
+  size_t arg_index;
+}
+u32_directive;
+
+/* A parsed format string.  */
+typedef struct
+{
+  size_t count;
+  u32_directive *dir;
+  size_t max_width_length;
+  size_t max_precision_length;
+}
+u32_directives;
+
+#endif
+
+
+/* Parses the format string.  Fills in the number N of directives, and fills
+   in directives[0], ..., directives[N-1], and sets directives[N].dir_start
+   to the end of the format string.  Also fills in the arg_type fields of the
+   arguments and the needed count of arguments.  */
+#if ENABLE_UNISTDIO
+extern int
+       ulc_printf_parse (const char *format, char_directives *d, arguments *a);
+extern int
+       u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a);
+extern int
+       u16_printf_parse (const uint16_t *format, u16_directives *d,
+                         arguments *a);
+extern int
+       u32_printf_parse (const uint32_t *format, u32_directives *d,
+                         arguments *a);
+#else
+# ifdef STATIC
+STATIC
+# else
+extern
+# endif
+int printf_parse (const char *format, char_directives *d, arguments *a);
+#endif
+
+#endif /* _PRINTF_PARSE_H */
diff --git a/gnu/priv-set.c b/gnu/priv-set.c
new file mode 100644 (file)
index 0000000..e9f8fb2
--- /dev/null
@@ -0,0 +1,145 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Query, remove, or restore a Solaris privilege.
+
+   Copyright (C) 2009, 2010 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 David Bartley.  */
+
+#include <config.h>
+#include "priv-set.h"
+
+#if HAVE_GETPPRIV
+
+# include <errno.h>
+# include <stdbool.h>
+# include <priv.h>
+
+/* Holds a (cached) copy of the effective set.  */
+static priv_set_t *eff_set;
+
+/* Holds a set of privileges that we have removed.  */
+static priv_set_t *rem_set;
+
+static bool initialized;
+
+static int
+priv_set_initialize (void)
+{
+  if (! initialized)
+    {
+      eff_set = priv_allocset ();
+      if (!eff_set)
+        {
+          return -1;
+        }
+      rem_set = priv_allocset ();
+      if (!rem_set)
+        {
+          priv_freeset (eff_set);
+          return -1;
+        }
+      if (getppriv (PRIV_EFFECTIVE, eff_set) != 0)
+        {
+          priv_freeset (eff_set);
+          priv_freeset (rem_set);
+          return -1;
+        }
+      priv_emptyset (rem_set);
+      initialized = true;
+    }
+
+  return 0;
+}
+
+
+/* Check if priv is in the effective set.
+   Returns 1 if priv is a member and 0 if not.
+   Returns -1 on error with errno set appropriately.  */
+int
+priv_set_ismember (const char *priv)
+{
+  if (! initialized && priv_set_initialize () != 0)
+    return -1;
+
+  return priv_ismember (eff_set, priv);
+}
+
+
+/* Try to remove priv from the effective set.
+   Returns 0 if priv was removed from or was not present in the effective set.
+   Returns -1 on error with errno set appropriately.  */
+int
+priv_set_remove (const char *priv)
+{
+  if (! initialized && priv_set_initialize () != 0)
+    return -1;
+
+  if (priv_ismember (eff_set, priv))
+    {
+      /* priv_addset/priv_delset can only fail if priv is invalid, which is
+         checked above by the priv_ismember call.  */
+      priv_delset (eff_set, priv);
+      if (setppriv (PRIV_SET, PRIV_EFFECTIVE, eff_set) != 0)
+        {
+          priv_addset (eff_set, priv);
+          return -1;
+        }
+      priv_addset (rem_set, priv);
+    }
+  else
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  return 0;
+}
+
+
+/* Try to restore priv to the effective set.
+   Returns 0 if priv was re-added to the effective set (after being prviously
+   removed by a call to priv_set_remove) or if priv was already in the
+   effective set.
+   Returns -1 on error with errno set appropriately.  */
+int
+priv_set_restore (const char *priv)
+{
+  if (! initialized && priv_set_initialize () != 0)
+    return -1;
+
+  if (priv_ismember (rem_set, priv))
+    {
+      /* priv_addset/priv_delset can only fail if priv is invalid, which is
+         checked above by the priv_ismember call.  */
+      priv_addset (eff_set, priv);
+      if (setppriv (PRIV_SET, PRIV_EFFECTIVE, eff_set) != 0)
+        {
+          priv_delset (eff_set, priv);
+          return -1;
+        }
+      priv_delset (rem_set, priv);
+    }
+  else
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  return 0;
+}
+
+#endif
diff --git a/gnu/priv-set.h b/gnu/priv-set.h
new file mode 100644 (file)
index 0000000..588f579
--- /dev/null
@@ -0,0 +1,52 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Query, remove, or restore a Solaris privilege.
+
+   Copyright (C) 2009, 2010 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 David Bartley.  */
+
+#if HAVE_GETPPRIV
+
+# include <priv.h>
+
+int priv_set_ismember (const char *priv);
+int priv_set_remove (const char *priv);
+int priv_set_restore (const char *priv);
+
+static inline int priv_set_remove_linkdir (void)
+{
+  return priv_set_remove (PRIV_SYS_LINKDIR);
+}
+
+static inline int priv_set_restore_linkdir (void)
+{
+  return priv_set_restore (PRIV_SYS_LINKDIR);
+}
+
+#else
+
+static inline int priv_set_remove_linkdir (void)
+{
+  return -1;
+}
+
+static inline int priv_set_restore_linkdir (void)
+{
+  return -1;
+}
+
+#endif
diff --git a/gnu/progname.c b/gnu/progname.c
new file mode 100644 (file)
index 0000000..0bd63fa
--- /dev/null
@@ -0,0 +1,94 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Program name management.
+   Copyright (C) 2001-2003, 2005-2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2001.
+
+   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.  */
+#undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */
+#include "progname.h"
+
+#include <errno.h> /* get program_invocation_name declaration */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+/* String containing name the program is called with.
+   To be initialized by main().  */
+const char *program_name = NULL;
+
+/* Set program_name, based on argv[0].
+   argv0 must be a string allocated with indefinite extent, and must not be
+   modified after this call.  */
+void
+set_program_name (const char *argv0)
+{
+  /* libtool creates a temporary executable whose name is sometimes prefixed
+     with "lt-" (depends on the platform).  It also makes argv[0] absolute.
+     But the name of the temporary executable is a detail that should not be
+     visible to the end user and to the test suite.
+     Remove this "<dirname>/.libs/" or "<dirname>/.libs/lt-" prefix here.  */
+  const char *slash;
+  const char *base;
+
+  /* Sanity check.  POSIX requires the invoking process to pass a non-NULL
+     argv[0].  */
+  if (argv0 == NULL)
+    {
+      /* It's a bug in the invoking program.  Help diagnosing it.  */
+      fputs ("A NULL argv[0] was passed through an exec system call.\n",
+             stderr);
+      abort ();
+    }
+
+  slash = strrchr (argv0, '/');
+  base = (slash != NULL ? slash + 1 : argv0);
+  if (base - argv0 >= 7 && strncmp (base - 7, "/.libs/", 7) == 0)
+    {
+      argv0 = base;
+      if (strncmp (base, "lt-", 3) == 0)
+        {
+          argv0 = base + 3;
+          /* On glibc systems, remove the "lt-" prefix from the variable
+             program_invocation_short_name.  */
+#if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
+          program_invocation_short_name = (char *) argv0;
+#endif
+        }
+    }
+
+  /* But don't strip off a leading <dirname>/ in general, because when the user
+     runs
+         /some/hidden/place/bin/cp foo foo
+     he should get the error message
+         /some/hidden/place/bin/cp: `foo' and `foo' are the same file
+     not
+         cp: `foo' and `foo' are the same file
+   */
+
+  program_name = argv0;
+
+  /* On glibc systems, the error() function comes from libc and uses the
+     variable program_invocation_name, not program_name.  So set this variable
+     as well.  */
+#if HAVE_DECL_PROGRAM_INVOCATION_NAME
+  program_invocation_name = (char *) argv0;
+#endif
+}
diff --git a/gnu/progname.h b/gnu/progname.h
new file mode 100644 (file)
index 0000000..77e782a
--- /dev/null
@@ -0,0 +1,64 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Program name management.
+   Copyright (C) 2001-2004, 2006, 2009-2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2001.
+
+   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 _PROGNAME_H
+#define _PROGNAME_H
+
+/* Programs using this file should do the following in main():
+     set_program_name (argv[0]);
+ */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* String containing name the program is called with.  */
+extern const char *program_name;
+
+/* Set program_name, based on argv[0].
+   argv0 must be a string allocated with indefinite extent, and must not be
+   modified after this call.  */
+extern void set_program_name (const char *argv0);
+
+#if ENABLE_RELOCATABLE
+
+/* Set program_name, based on argv[0], and original installation prefix and
+   directory, for relocatability.  */
+extern void set_program_name_and_installdir (const char *argv0,
+                                             const char *orig_installprefix,
+                                             const char *orig_installdir);
+#undef set_program_name
+#define set_program_name(ARG0) \
+  set_program_name_and_installdir (ARG0, INSTALLPREFIX, INSTALLDIR)
+
+/* Return the full pathname of the current executable, based on the earlier
+   call to set_program_name_and_installdir.  Return NULL if unknown.  */
+extern char *get_full_program_name (void);
+
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _PROGNAME_H */
diff --git a/gnu/quote.c b/gnu/quote.c
new file mode 100644 (file)
index 0000000..ae62f3e
--- /dev/null
@@ -0,0 +1,42 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* quote.c - quote arguments for output
+
+   Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005, 2006, 2009, 2010 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 <eggert@twinsun.com> */
+
+#include <config.h>
+
+#include "quotearg.h"
+#include "quote.h"
+
+/* Return an unambiguous printable representation of NAME,
+   allocated in slot N, suitable for diagnostics.  */
+char const *
+quote_n (int n, char const *name)
+{
+  return quotearg_n_style (n, locale_quoting_style, name);
+}
+
+/* Return an unambiguous printable representation of NAME,
+   suitable for diagnostics.  */
+char const *
+quote (char const *name)
+{
+  return quote_n (0, name);
+}
diff --git a/gnu/quote.h b/gnu/quote.h
new file mode 100644 (file)
index 0000000..bdf5b27
--- /dev/null
@@ -0,0 +1,23 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* quote.h - prototypes for quote.c
+
+   Copyright (C) 1998, 1999, 2000, 2001, 2003, 2009, 2010 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/>.  */
+
+
+char const *quote_n (int n, char const *name);
+char const *quote (char const *name);
diff --git a/gnu/quotearg.c b/gnu/quotearg.c
new file mode 100644 (file)
index 0000000..724c056
--- /dev/null
@@ -0,0 +1,891 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* quotearg.c - quote arguments for output
+
+   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008,
+   2009, 2010 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 <eggert@twinsun.com> */
+
+#include <config.h>
+
+#include "quotearg.h"
+
+#include "xalloc.h"
+
+#include <ctype.h>
+#include <errno.h>
+#include <limits.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+#include <wctype.h>
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+#define N_(msgid) msgid
+
+#ifndef SIZE_MAX
+# define SIZE_MAX ((size_t) -1)
+#endif
+
+#define INT_BITS (sizeof (int) * CHAR_BIT)
+
+struct quoting_options
+{
+  /* Basic quoting style.  */
+  enum quoting_style style;
+
+  /* Additional flags.  Bitwise combination of enum quoting_flags.  */
+  int flags;
+
+  /* Quote the characters indicated by this bit vector even if the
+     quoting style would not normally require them to be quoted.  */
+  unsigned int quote_these_too[(UCHAR_MAX / INT_BITS) + 1];
+
+  /* The left quote for custom_quoting_style.  */
+  char const *left_quote;
+
+  /* The right quote for custom_quoting_style.  */
+  char const *right_quote;
+};
+
+/* Names of quoting styles.  */
+char const *const quoting_style_args[] =
+{
+  "literal",
+  "shell",
+  "shell-always",
+  "c",
+  "c-maybe",
+  "escape",
+  "locale",
+  "clocale",
+  0
+};
+
+/* Correspondences to quoting style names.  */
+enum quoting_style const quoting_style_vals[] =
+{
+  literal_quoting_style,
+  shell_quoting_style,
+  shell_always_quoting_style,
+  c_quoting_style,
+  c_maybe_quoting_style,
+  escape_quoting_style,
+  locale_quoting_style,
+  clocale_quoting_style
+};
+
+/* The default quoting options.  */
+static struct quoting_options default_quoting_options;
+
+/* Allocate a new set of quoting options, with contents initially identical
+   to O if O is not null, or to the default if O is null.
+   It is the caller's responsibility to free the result.  */
+struct quoting_options *
+clone_quoting_options (struct quoting_options *o)
+{
+  int e = errno;
+  struct quoting_options *p = xmemdup (o ? o : &default_quoting_options,
+                                       sizeof *o);
+  errno = e;
+  return p;
+}
+
+/* Get the value of O's quoting style.  If O is null, use the default.  */
+enum quoting_style
+get_quoting_style (struct quoting_options *o)
+{
+  return (o ? o : &default_quoting_options)->style;
+}
+
+/* In O (or in the default if O is null),
+   set the value of the quoting style to S.  */
+void
+set_quoting_style (struct quoting_options *o, enum quoting_style s)
+{
+  (o ? o : &default_quoting_options)->style = s;
+}
+
+/* In O (or in the default if O is null),
+   set the value of the quoting options for character C to I.
+   Return the old value.  Currently, the only values defined for I are
+   0 (the default) and 1 (which means to quote the character even if
+   it would not otherwise be quoted).  */
+int
+set_char_quoting (struct quoting_options *o, char c, int i)
+{
+  unsigned char uc = c;
+  unsigned int *p =
+    (o ? o : &default_quoting_options)->quote_these_too + uc / INT_BITS;
+  int shift = uc % INT_BITS;
+  int r = (*p >> shift) & 1;
+  *p ^= ((i & 1) ^ r) << shift;
+  return r;
+}
+
+/* In O (or in the default if O is null),
+   set the value of the quoting options flag to I, which can be a
+   bitwise combination of enum quoting_flags, or 0 for default
+   behavior.  Return the old value.  */
+int
+set_quoting_flags (struct quoting_options *o, int i)
+{
+  int r;
+  if (!o)
+    o = &default_quoting_options;
+  r = o->flags;
+  o->flags = i;
+  return r;
+}
+
+void
+set_custom_quoting (struct quoting_options *o,
+                    char const *left_quote, char const *right_quote)
+{
+  if (!o)
+    o = &default_quoting_options;
+  o->style = custom_quoting_style;
+  if (!left_quote || !right_quote)
+    abort ();
+  o->left_quote = left_quote;
+  o->right_quote = right_quote;
+}
+
+/* Return quoting options for STYLE, with no extra quoting.  */
+static struct quoting_options
+quoting_options_from_style (enum quoting_style style)
+{
+  struct quoting_options o;
+  o.style = style;
+  o.flags = 0;
+  memset (o.quote_these_too, 0, sizeof o.quote_these_too);
+  return o;
+}
+
+/* MSGID approximates a quotation mark.  Return its translation if it
+   has one; otherwise, return either it or "\"", depending on S.  */
+static char const *
+gettext_quote (char const *msgid, enum quoting_style s)
+{
+  char const *translation = _(msgid);
+  if (translation == msgid && s == clocale_quoting_style)
+    translation = "\"";
+  return translation;
+}
+
+/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
+   argument ARG (of size ARGSIZE), using QUOTING_STYLE, FLAGS, and
+   QUOTE_THESE_TOO to control quoting.
+   Terminate the output with a null character, and return the written
+   size of the output, not counting the terminating null.
+   If BUFFERSIZE is too small to store the output string, return the
+   value that would have been returned had BUFFERSIZE been large enough.
+   If ARGSIZE is SIZE_MAX, use the string length of the argument for ARGSIZE.
+
+   This function acts like quotearg_buffer (BUFFER, BUFFERSIZE, ARG,
+   ARGSIZE, O), except it breaks O into its component pieces and is
+   not careful about errno.  */
+
+static size_t
+quotearg_buffer_restyled (char *buffer, size_t buffersize,
+                          char const *arg, size_t argsize,
+                          enum quoting_style quoting_style, int flags,
+                          unsigned int const *quote_these_too,
+                          char const *left_quote,
+                          char const *right_quote)
+{
+  size_t i;
+  size_t len = 0;
+  char const *quote_string = 0;
+  size_t quote_string_len = 0;
+  bool backslash_escapes = false;
+  bool unibyte_locale = MB_CUR_MAX == 1;
+  bool elide_outer_quotes = (flags & QA_ELIDE_OUTER_QUOTES) != 0;
+
+#define STORE(c) \
+    do \
+      { \
+        if (len < buffersize) \
+          buffer[len] = (c); \
+        len++; \
+      } \
+    while (0)
+
+  switch (quoting_style)
+    {
+    case c_maybe_quoting_style:
+      quoting_style = c_quoting_style;
+      elide_outer_quotes = true;
+      /* Fall through.  */
+    case c_quoting_style:
+      if (!elide_outer_quotes)
+        STORE ('"');
+      backslash_escapes = true;
+      quote_string = "\"";
+      quote_string_len = 1;
+      break;
+
+    case escape_quoting_style:
+      backslash_escapes = true;
+      elide_outer_quotes = false;
+      break;
+
+    case locale_quoting_style:
+    case clocale_quoting_style:
+    case custom_quoting_style:
+      {
+        if (quoting_style != custom_quoting_style)
+          {
+            /* TRANSLATORS:
+               Get translations for open and closing quotation marks.
+
+               The message catalog should translate "`" to a left
+               quotation mark suitable for the locale, and similarly for
+               "'".  If the catalog has no translation,
+               locale_quoting_style quotes `like this', and
+               clocale_quoting_style quotes "like this".
+
+               For example, an American English Unicode locale should
+               translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
+               should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
+               MARK).  A British English Unicode locale should instead
+               translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+               and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+
+               If you don't know what to put here, please see
+               <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
+               and use glyphs suitable for your language.  */
+            left_quote = gettext_quote (N_("`"), quoting_style);
+            right_quote = gettext_quote (N_("'"), quoting_style);
+          }
+        if (!elide_outer_quotes)
+          for (quote_string = left_quote; *quote_string; quote_string++)
+            STORE (*quote_string);
+        backslash_escapes = true;
+        quote_string = right_quote;
+        quote_string_len = strlen (quote_string);
+      }
+      break;
+
+    case shell_quoting_style:
+      quoting_style = shell_always_quoting_style;
+      elide_outer_quotes = true;
+      /* Fall through.  */
+    case shell_always_quoting_style:
+      if (!elide_outer_quotes)
+        STORE ('\'');
+      quote_string = "'";
+      quote_string_len = 1;
+      break;
+
+    case literal_quoting_style:
+      elide_outer_quotes = false;
+      break;
+
+    default:
+      abort ();
+    }
+
+  for (i = 0;  ! (argsize == SIZE_MAX ? arg[i] == '\0' : i == argsize);  i++)
+    {
+      unsigned char c;
+      unsigned char esc;
+      bool is_right_quote = false;
+
+      if (backslash_escapes
+          && quote_string_len
+          && i + quote_string_len <= argsize
+          && memcmp (arg + i, quote_string, quote_string_len) == 0)
+        {
+          if (elide_outer_quotes)
+            goto force_outer_quoting_style;
+          is_right_quote = true;
+        }
+
+      c = arg[i];
+      switch (c)
+        {
+        case '\0':
+          if (backslash_escapes)
+            {
+              if (elide_outer_quotes)
+                goto force_outer_quoting_style;
+              STORE ('\\');
+              /* If quote_string were to begin with digits, we'd need to
+                 test for the end of the arg as well.  However, it's
+                 hard to imagine any locale that would use digits in
+                 quotes, and set_custom_quoting is documented not to
+                 accept them.  */
+              if (i + 1 < argsize && '0' <= arg[i + 1] && arg[i + 1] <= '9')
+                {
+                  STORE ('0');
+                  STORE ('0');
+                }
+              c = '0';
+              /* We don't have to worry that this last '0' will be
+                 backslash-escaped because, again, quote_string should
+                 not start with it and because quote_these_too is
+                 documented as not accepting it.  */
+            }
+          else if (flags & QA_ELIDE_NULL_BYTES)
+            continue;
+          break;
+
+        case '?':
+          switch (quoting_style)
+            {
+            case shell_always_quoting_style:
+              if (elide_outer_quotes)
+                goto force_outer_quoting_style;
+              break;
+
+            case c_quoting_style:
+              if ((flags & QA_SPLIT_TRIGRAPHS)
+                  && i + 2 < argsize && arg[i + 1] == '?')
+                switch (arg[i + 2])
+                  {
+                  case '!': case '\'':
+                  case '(': case ')': case '-': case '/':
+                  case '<': case '=': case '>':
+                    /* Escape the second '?' in what would otherwise be
+                       a trigraph.  */
+                    if (elide_outer_quotes)
+                      goto force_outer_quoting_style;
+                    c = arg[i + 2];
+                    i += 2;
+                    STORE ('?');
+                    STORE ('"');
+                    STORE ('"');
+                    STORE ('?');
+                    break;
+
+                  default:
+                    break;
+                  }
+              break;
+
+            default:
+              break;
+            }
+          break;
+
+        case '\a': esc = 'a'; goto c_escape;
+        case '\b': esc = 'b'; goto c_escape;
+        case '\f': esc = 'f'; goto c_escape;
+        case '\n': esc = 'n'; goto c_and_shell_escape;
+        case '\r': esc = 'r'; goto c_and_shell_escape;
+        case '\t': esc = 't'; goto c_and_shell_escape;
+        case '\v': esc = 'v'; goto c_escape;
+        case '\\': esc = c;
+          /* No need to escape the escape if we are trying to elide
+             outer quotes and nothing else is problematic.  */
+          if (backslash_escapes && elide_outer_quotes && quote_string_len)
+            goto store_c;
+
+        c_and_shell_escape:
+          if (quoting_style == shell_always_quoting_style
+              && elide_outer_quotes)
+            goto force_outer_quoting_style;
+          /* Fall through.  */
+        c_escape:
+          if (backslash_escapes)
+            {
+              c = esc;
+              goto store_escape;
+            }
+          break;
+
+        case '{': case '}': /* sometimes special if isolated */
+          if (! (argsize == SIZE_MAX ? arg[1] == '\0' : argsize == 1))
+            break;
+          /* Fall through.  */
+        case '#': case '~':
+          if (i != 0)
+            break;
+          /* Fall through.  */
+        case ' ':
+        case '!': /* special in bash */
+        case '"': case '$': case '&':
+        case '(': case ')': case '*': case ';':
+        case '<':
+        case '=': /* sometimes special in 0th or (with "set -k") later args */
+        case '>': case '[':
+        case '^': /* special in old /bin/sh, e.g. SunOS 4.1.4 */
+        case '`': case '|':
+          /* A shell special character.  In theory, '$' and '`' could
+             be the first bytes of multibyte characters, which means
+             we should check them with mbrtowc, but in practice this
+             doesn't happen so it's not worth worrying about.  */
+          if (quoting_style == shell_always_quoting_style
+              && elide_outer_quotes)
+            goto force_outer_quoting_style;
+          break;
+
+        case '\'':
+          if (quoting_style == shell_always_quoting_style)
+            {
+              if (elide_outer_quotes)
+                goto force_outer_quoting_style;
+              STORE ('\'');
+              STORE ('\\');
+              STORE ('\'');
+            }
+          break;
+
+        case '%': case '+': case ',': case '-': case '.': case '/':
+        case '0': case '1': case '2': case '3': case '4': case '5':
+        case '6': case '7': case '8': case '9': case ':':
+        case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+        case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+        case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+        case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+        case 'Y': case 'Z': case ']': case '_': case 'a': case 'b':
+        case 'c': case 'd': case 'e': case 'f': case 'g': case 'h':
+        case 'i': case 'j': case 'k': case 'l': case 'm': case 'n':
+        case 'o': case 'p': case 'q': case 'r': case 's': case 't':
+        case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
+          /* These characters don't cause problems, no matter what the
+             quoting style is.  They cannot start multibyte sequences.
+             A digit or a special letter would cause trouble if it
+             appeared at the beginning of quote_string because we'd then
+             escape by prepending a backslash.  However, it's hard to
+             imagine any locale that would use digits or letters as
+             quotes, and set_custom_quoting is documented not to accept
+             them.  Also, a digit or a special letter would cause
+             trouble if it appeared in quote_these_too, but that's also
+             documented as not accepting them.  */
+          break;
+
+        default:
+          /* If we have a multibyte sequence, copy it until we reach
+             its end, find an error, or come back to the initial shift
+             state.  For C-like styles, if the sequence has
+             unprintable characters, escape the whole sequence, since
+             we can't easily escape single characters within it.  */
+          {
+            /* Length of multibyte sequence found so far.  */
+            size_t m;
+
+            bool printable;
+
+            if (unibyte_locale)
+              {
+                m = 1;
+                printable = isprint (c) != 0;
+              }
+            else
+              {
+                mbstate_t mbstate;
+                memset (&mbstate, 0, sizeof mbstate);
+
+                m = 0;
+                printable = true;
+                if (argsize == SIZE_MAX)
+                  argsize = strlen (arg);
+
+                do
+                  {
+                    wchar_t w;
+                    size_t bytes = mbrtowc (&w, &arg[i + m],
+                                            argsize - (i + m), &mbstate);
+                    if (bytes == 0)
+                      break;
+                    else if (bytes == (size_t) -1)
+                      {
+                        printable = false;
+                        break;
+                      }
+                    else if (bytes == (size_t) -2)
+                      {
+                        printable = false;
+                        while (i + m < argsize && arg[i + m])
+                          m++;
+                        break;
+                      }
+                    else
+                      {
+                        /* Work around a bug with older shells that "see" a '\'
+                           that is really the 2nd byte of a multibyte character.
+                           In practice the problem is limited to ASCII
+                           chars >= '@' that are shell special chars.  */
+                        if ('[' == 0x5b && elide_outer_quotes
+                            && quoting_style == shell_always_quoting_style)
+                          {
+                            size_t j;
+                            for (j = 1; j < bytes; j++)
+                              switch (arg[i + m + j])
+                                {
+                                case '[': case '\\': case '^':
+                                case '`': case '|':
+                                  goto force_outer_quoting_style;
+
+                                default:
+                                  break;
+                                }
+                          }
+
+                        if (! iswprint (w))
+                          printable = false;
+                        m += bytes;
+                      }
+                  }
+                while (! mbsinit (&mbstate));
+              }
+
+            if (1 < m || (backslash_escapes && ! printable))
+              {
+                /* Output a multibyte sequence, or an escaped
+                   unprintable unibyte character.  */
+                size_t ilim = i + m;
+
+                for (;;)
+                  {
+                    if (backslash_escapes && ! printable)
+                      {
+                        if (elide_outer_quotes)
+                          goto force_outer_quoting_style;
+                        STORE ('\\');
+                        STORE ('0' + (c >> 6));
+                        STORE ('0' + ((c >> 3) & 7));
+                        c = '0' + (c & 7);
+                      }
+                    else if (is_right_quote)
+                      {
+                        STORE ('\\');
+                        is_right_quote = false;
+                      }
+                    if (ilim <= i + 1)
+                      break;
+                    STORE (c);
+                    c = arg[++i];
+                  }
+
+                goto store_c;
+              }
+          }
+        }
+
+      if (! ((backslash_escapes || elide_outer_quotes)
+             && quote_these_too
+             && quote_these_too[c / INT_BITS] & (1 << (c % INT_BITS)))
+          && !is_right_quote)
+        goto store_c;
+
+    store_escape:
+      if (elide_outer_quotes)
+        goto force_outer_quoting_style;
+      STORE ('\\');
+
+    store_c:
+      STORE (c);
+    }
+
+  if (len == 0 && quoting_style == shell_always_quoting_style
+      && elide_outer_quotes)
+    goto force_outer_quoting_style;
+
+  if (quote_string && !elide_outer_quotes)
+    for (; *quote_string; quote_string++)
+      STORE (*quote_string);
+
+  if (len < buffersize)
+    buffer[len] = '\0';
+  return len;
+
+ force_outer_quoting_style:
+  /* Don't reuse quote_these_too, since the addition of outer quotes
+     sufficiently quotes the specified characters.  */
+  return quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
+                                   quoting_style,
+                                   flags & ~QA_ELIDE_OUTER_QUOTES, NULL,
+                                   left_quote, right_quote);
+}
+
+/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
+   argument ARG (of size ARGSIZE), using O to control quoting.
+   If O is null, use the default.
+   Terminate the output with a null character, and return the written
+   size of the output, not counting the terminating null.
+   If BUFFERSIZE is too small to store the output string, return the
+   value that would have been returned had BUFFERSIZE been large enough.
+   If ARGSIZE is SIZE_MAX, use the string length of the argument for
+   ARGSIZE.  */
+size_t
+quotearg_buffer (char *buffer, size_t buffersize,
+                 char const *arg, size_t argsize,
+                 struct quoting_options const *o)
+{
+  struct quoting_options const *p = o ? o : &default_quoting_options;
+  int e = errno;
+  size_t r = quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
+                                       p->style, p->flags, p->quote_these_too,
+                                       p->left_quote, p->right_quote);
+  errno = e;
+  return r;
+}
+
+/* Equivalent to quotearg_alloc (ARG, ARGSIZE, NULL, O).  */
+char *
+quotearg_alloc (char const *arg, size_t argsize,
+                struct quoting_options const *o)
+{
+  return quotearg_alloc_mem (arg, argsize, NULL, o);
+}
+
+/* Like quotearg_buffer (..., ARG, ARGSIZE, O), except return newly
+   allocated storage containing the quoted string, and store the
+   resulting size into *SIZE, if non-NULL.  The result can contain
+   embedded null bytes only if ARGSIZE is not SIZE_MAX, SIZE is not
+   NULL, and set_quoting_flags has not set the null byte elision
+   flag.  */
+char *
+quotearg_alloc_mem (char const *arg, size_t argsize, size_t *size,
+                    struct quoting_options const *o)
+{
+  struct quoting_options const *p = o ? o : &default_quoting_options;
+  int e = errno;
+  /* Elide embedded null bytes if we can't return a size.  */
+  int flags = p->flags | (size ? 0 : QA_ELIDE_NULL_BYTES);
+  size_t bufsize = quotearg_buffer_restyled (0, 0, arg, argsize, p->style,
+                                             flags, p->quote_these_too,
+                                             p->left_quote,
+                                             p->right_quote) + 1;
+  char *buf = xcharalloc (bufsize);
+  quotearg_buffer_restyled (buf, bufsize, arg, argsize, p->style, flags,
+                            p->quote_these_too,
+                            p->left_quote, p->right_quote);
+  errno = e;
+  if (size)
+    *size = bufsize - 1;
+  return buf;
+}
+
+/* A storage slot with size and pointer to a value.  */
+struct slotvec
+{
+  size_t size;
+  char *val;
+};
+
+/* Preallocate a slot 0 buffer, so that the caller can always quote
+   one small component of a "memory exhausted" message in slot 0.  */
+static char slot0[256];
+static unsigned int nslots = 1;
+static struct slotvec slotvec0 = {sizeof slot0, slot0};
+static struct slotvec *slotvec = &slotvec0;
+
+void
+quotearg_free (void)
+{
+  struct slotvec *sv = slotvec;
+  unsigned int i;
+  for (i = 1; i < nslots; i++)
+    free (sv[i].val);
+  if (sv[0].val != slot0)
+    {
+      free (sv[0].val);
+      slotvec0.size = sizeof slot0;
+      slotvec0.val = slot0;
+    }
+  if (sv != &slotvec0)
+    {
+      free (sv);
+      slotvec = &slotvec0;
+    }
+  nslots = 1;
+}
+
+/* Use storage slot N to return a quoted version of argument ARG.
+   ARG is of size ARGSIZE, but if that is SIZE_MAX, ARG is a
+   null-terminated string.
+   OPTIONS specifies the quoting options.
+   The returned value points to static storage that can be
+   reused by the next call to this function with the same value of N.
+   N must be nonnegative.  N is deliberately declared with type "int"
+   to allow for future extensions (using negative values).  */
+static char *
+quotearg_n_options (int n, char const *arg, size_t argsize,
+                    struct quoting_options const *options)
+{
+  int e = errno;
+
+  unsigned int n0 = n;
+  struct slotvec *sv = slotvec;
+
+  if (n < 0)
+    abort ();
+
+  if (nslots <= n0)
+    {
+      /* FIXME: technically, the type of n1 should be `unsigned int',
+         but that evokes an unsuppressible warning from gcc-4.0.1 and
+         older.  If gcc ever provides an option to suppress that warning,
+         revert to the original type, so that the test in xalloc_oversized
+         is once again performed only at compile time.  */
+      size_t n1 = n0 + 1;
+      bool preallocated = (sv == &slotvec0);
+
+      if (xalloc_oversized (n1, sizeof *sv))
+        xalloc_die ();
+
+      slotvec = sv = xrealloc (preallocated ? NULL : sv, n1 * sizeof *sv);
+      if (preallocated)
+        *sv = slotvec0;
+      memset (sv + nslots, 0, (n1 - nslots) * sizeof *sv);
+      nslots = n1;
+    }
+
+  {
+    size_t size = sv[n].size;
+    char *val = sv[n].val;
+    /* Elide embedded null bytes since we don't return a size.  */
+    int flags = options->flags | QA_ELIDE_NULL_BYTES;
+    size_t qsize = quotearg_buffer_restyled (val, size, arg, argsize,
+                                             options->style, flags,
+                                             options->quote_these_too,
+                                             options->left_quote,
+                                             options->right_quote);
+
+    if (size <= qsize)
+      {
+        sv[n].size = size = qsize + 1;
+        if (val != slot0)
+          free (val);
+        sv[n].val = val = xcharalloc (size);
+        quotearg_buffer_restyled (val, size, arg, argsize, options->style,
+                                  flags, options->quote_these_too,
+                                  options->left_quote,
+                                  options->right_quote);
+      }
+
+    errno = e;
+    return val;
+  }
+}
+
+char *
+quotearg_n (int n, char const *arg)
+{
+  return quotearg_n_options (n, arg, SIZE_MAX, &default_quoting_options);
+}
+
+char *
+quotearg_n_mem (int n, char const *arg, size_t argsize)
+{
+  return quotearg_n_options (n, arg, argsize, &default_quoting_options);
+}
+
+char *
+quotearg (char const *arg)
+{
+  return quotearg_n (0, arg);
+}
+
+char *
+quotearg_mem (char const *arg, size_t argsize)
+{
+  return quotearg_n_mem (0, arg, argsize);
+}
+
+char *
+quotearg_n_style (int n, enum quoting_style s, char const *arg)
+{
+  struct quoting_options const o = quoting_options_from_style (s);
+  return quotearg_n_options (n, arg, SIZE_MAX, &o);
+}
+
+char *
+quotearg_n_style_mem (int n, enum quoting_style s,
+                      char const *arg, size_t argsize)
+{
+  struct quoting_options const o = quoting_options_from_style (s);
+  return quotearg_n_options (n, arg, argsize, &o);
+}
+
+char *
+quotearg_style (enum quoting_style s, char const *arg)
+{
+  return quotearg_n_style (0, s, arg);
+}
+
+char *
+quotearg_style_mem (enum quoting_style s, char const *arg, size_t argsize)
+{
+  return quotearg_n_style_mem (0, s, arg, argsize);
+}
+
+char *
+quotearg_char_mem (char const *arg, size_t argsize, char ch)
+{
+  struct quoting_options options;
+  options = default_quoting_options;
+  set_char_quoting (&options, ch, 1);
+  return quotearg_n_options (0, arg, argsize, &options);
+}
+
+char *
+quotearg_char (char const *arg, char ch)
+{
+  return quotearg_char_mem (arg, SIZE_MAX, ch);
+}
+
+char *
+quotearg_colon (char const *arg)
+{
+  return quotearg_char (arg, ':');
+}
+
+char *
+quotearg_colon_mem (char const *arg, size_t argsize)
+{
+  return quotearg_char_mem (arg, argsize, ':');
+}
+
+char *
+quotearg_n_custom (int n, char const *left_quote,
+                   char const *right_quote, char const *arg)
+{
+  return quotearg_n_custom_mem (n, left_quote, right_quote, arg,
+                                SIZE_MAX);
+}
+
+char *
+quotearg_n_custom_mem (int n, char const *left_quote,
+                       char const *right_quote,
+                       char const *arg, size_t argsize)
+{
+  struct quoting_options o = default_quoting_options;
+  set_custom_quoting (&o, left_quote, right_quote);
+  return quotearg_n_options (n, arg, argsize, &o);
+}
+
+char *
+quotearg_custom (char const *left_quote, char const *right_quote,
+                 char const *arg)
+{
+  return quotearg_n_custom (0, left_quote, right_quote, arg);
+}
+
+char *
+quotearg_custom_mem (char const *left_quote, char const *right_quote,
+                     char const *arg, size_t argsize)
+{
+  return quotearg_n_custom_mem (0, left_quote, right_quote, arg,
+                                argsize);
+}
diff --git a/gnu/quotearg.h b/gnu/quotearg.h
new file mode 100644 (file)
index 0000000..ff8154c
--- /dev/null
@@ -0,0 +1,391 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* quotearg.h - quote arguments for output
+
+   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2006, 2008, 2009, 2010
+   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 <eggert@twinsun.com> */
+
+#ifndef QUOTEARG_H_
+# define QUOTEARG_H_ 1
+
+# include <stddef.h>
+
+/* Basic quoting styles.  For each style, an example is given on the
+   input strings "simple", "\0 \t\n'\"\033?""?/\\", and "a:b", using
+   quotearg_buffer, quotearg_mem, and quotearg_colon_mem with that
+   style and the default flags and quoted characters.  Note that the
+   examples are shown here as valid C strings rather than what
+   displays on a terminal (with "??/" as a trigraph for "\\").  */
+enum quoting_style
+  {
+    /* Output names as-is (ls --quoting-style=literal).  Can result in
+       embedded null bytes if QA_ELIDE_NULL_BYTES is not in
+       effect.
+
+       quotearg_buffer:
+       "simple", "\0 \t\n'\"\033??/\\", "a:b"
+       quotearg:
+       "simple", " \t\n'\"\033??/\\", "a:b"
+       quotearg_colon:
+       "simple", " \t\n'\"\033??/\\", "a:b"
+    */
+    literal_quoting_style,
+
+    /* Quote names for the shell if they contain shell metacharacters
+       or would cause ambiguous output (ls --quoting-style=shell).
+       Can result in embedded null bytes if QA_ELIDE_NULL_BYTES is not
+       in effect.
+
+       quotearg_buffer:
+       "simple", "'\0 \t\n'\\''\"\033??/\\'", "a:b"
+       quotearg:
+       "simple", "' \t\n'\\''\"\033??/\\'", "a:b"
+       quotearg_colon:
+       "simple", "' \t\n'\\''\"\033??/\\'", "'a:b'"
+    */
+    shell_quoting_style,
+
+    /* Quote names for the shell, even if they would normally not
+       require quoting (ls --quoting-style=shell-always).  Can result
+       in embedded null bytes if QA_ELIDE_NULL_BYTES is not in effect.
+       Behaves like shell_quoting_style if QA_ELIDE_OUTER_QUOTES is in
+       effect.
+
+       quotearg_buffer:
+       "'simple'", "'\0 \t\n'\\''\"\033??/\\'", "'a:b'"
+       quotearg:
+       "'simple'", "' \t\n'\\''\"\033??/\\'", "'a:b'"
+       quotearg_colon:
+       "'simple'", "' \t\n'\\''\"\033??/\\'", "'a:b'"
+    */
+    shell_always_quoting_style,
+
+    /* Quote names as for a C language string (ls --quoting-style=c).
+       Behaves like c_maybe_quoting_style if QA_ELIDE_OUTER_QUOTES is
+       in effect.  Split into consecutive strings if
+       QA_SPLIT_TRIGRAPHS.
+
+       quotearg_buffer:
+       "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
+       quotearg:
+       "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
+       quotearg_colon:
+       "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a\\:b\""
+    */
+    c_quoting_style,
+
+    /* Like c_quoting_style except omit the surrounding double-quote
+       characters if no quoted characters are encountered.
+
+       quotearg_buffer:
+       "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "a:b"
+       quotearg:
+       "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "a:b"
+       quotearg_colon:
+       "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
+    */
+    c_maybe_quoting_style,
+
+    /* Like c_quoting_style except always omit the surrounding
+       double-quote characters and ignore QA_SPLIT_TRIGRAPHS
+       (ls --quoting-style=escape).
+
+       quotearg_buffer:
+       "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b"
+       quotearg:
+       "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b"
+       quotearg_colon:
+       "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a\\:b"
+    */
+    escape_quoting_style,
+
+    /* Like clocale_quoting_style, but quote `like this' instead of
+       "like this" in the default C locale (ls --quoting-style=locale).
+
+       LC_MESSAGES=C
+       quotearg_buffer:
+       "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a:b'"
+       quotearg:
+       "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a:b'"
+       quotearg_colon:
+       "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a\\:b'"
+
+       LC_MESSAGES=pt_PT.utf8
+       quotearg_buffer:
+       "\302\253simple\302\273",
+       "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273"
+       quotearg:
+       "\302\253simple\302\273",
+       "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273"
+       quotearg_colon:
+       "\302\253simple\302\273",
+       "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273"
+    */
+    locale_quoting_style,
+
+    /* Like c_quoting_style except use quotation marks appropriate for
+       the locale and ignore QA_SPLIT_TRIGRAPHS
+       (ls --quoting-style=clocale).
+
+       LC_MESSAGES=C
+       quotearg_buffer:
+       "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
+       quotearg:
+       "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
+       quotearg_colon:
+       "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a\\:b\""
+
+       LC_MESSAGES=pt_PT.utf8
+       quotearg_buffer:
+       "\302\253simple\302\273",
+       "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273"
+       quotearg:
+       "\302\253simple\302\273",
+       "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273"
+       quotearg_colon:
+       "\302\253simple\302\273",
+       "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273"
+    */
+    clocale_quoting_style,
+
+    /* Like clocale_quoting_style except use the custom quotation marks
+       set by set_custom_quoting.  If custom quotation marks are not
+       set, the behavior is undefined.
+
+       left_quote = right_quote = "'"
+       quotearg_buffer:
+       "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a:b'"
+       quotearg:
+       "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a:b'"
+       quotearg_colon:
+       "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a\\:b'"
+
+       left_quote = "(" and right_quote = ")"
+       quotearg_buffer:
+       "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a:b)"
+       quotearg:
+       "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a:b)"
+       quotearg_colon:
+       "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a\\:b)"
+
+       left_quote = ":" and right_quote = " "
+       quotearg_buffer:
+       ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a:b "
+       quotearg:
+       ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a:b "
+       quotearg_colon:
+       ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a\\:b "
+
+       left_quote = "\"'" and right_quote = "'\""
+       Notice that this is treated as a single level of quotes or two
+       levels where the outer quote need not be escaped within the inner
+       quotes.  For two levels where the outer quote must be escaped
+       within the inner quotes, you must use separate quotearg
+       invocations.
+       quotearg_buffer:
+       "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a:b'\""
+       quotearg:
+       "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a:b'\""
+       quotearg_colon:
+       "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a\\:b'\""
+    */
+    custom_quoting_style
+  };
+
+/* Flags for use in set_quoting_flags.  */
+enum quoting_flags
+  {
+    /* Always elide null bytes from styles that do not quote them,
+       even when the length of the result is available to the
+       caller.  */
+    QA_ELIDE_NULL_BYTES = 0x01,
+
+    /* Omit the surrounding quote characters if no escaped characters
+       are encountered.  Note that if no other character needs
+       escaping, then neither does the escape character.  */
+    QA_ELIDE_OUTER_QUOTES = 0x02,
+
+    /* In the c_quoting_style and c_maybe_quoting_style, split ANSI
+       trigraph sequences into concatenated strings (for example,
+       "?""?/" rather than "??/", which could be confused with
+       "\\").  */
+    QA_SPLIT_TRIGRAPHS = 0x04
+  };
+
+/* For now, --quoting-style=literal is the default, but this may change.  */
+# ifndef DEFAULT_QUOTING_STYLE
+#  define DEFAULT_QUOTING_STYLE literal_quoting_style
+# endif
+
+/* Names of quoting styles and their corresponding values.  */
+extern char const *const quoting_style_args[];
+extern enum quoting_style const quoting_style_vals[];
+
+struct quoting_options;
+
+/* The functions listed below set and use a hidden variable
+   that contains the default quoting style options.  */
+
+/* Allocate a new set of quoting options, with contents initially identical
+   to O if O is not null, or to the default if O is null.
+   It is the caller's responsibility to free the result.  */
+struct quoting_options *clone_quoting_options (struct quoting_options *o);
+
+/* Get the value of O's quoting style.  If O is null, use the default.  */
+enum quoting_style get_quoting_style (struct quoting_options *o);
+
+/* In O (or in the default if O is null),
+   set the value of the quoting style to S.  */
+void set_quoting_style (struct quoting_options *o, enum quoting_style s);
+
+/* In O (or in the default if O is null),
+   set the value of the quoting options for character C to I.
+   Return the old value.  Currently, the only values defined for I are
+   0 (the default) and 1 (which means to quote the character even if
+   it would not otherwise be quoted).  C must never be a digit or a
+   letter that has special meaning after a backslash (for example, "\t"
+   for tab).  */
+int set_char_quoting (struct quoting_options *o, char c, int i);
+
+/* In O (or in the default if O is null),
+   set the value of the quoting options flag to I, which can be a
+   bitwise combination of enum quoting_flags, or 0 for default
+   behavior.  Return the old value.  */
+int set_quoting_flags (struct quoting_options *o, int i);
+
+/* In O (or in the default if O is null),
+   set the value of the quoting style to custom_quoting_style,
+   set the left quote to LEFT_QUOTE, and set the right quote to
+   RIGHT_QUOTE.  Each of LEFT_QUOTE and RIGHT_QUOTE must be
+   null-terminated and can be the empty string.  Because backslashes are
+   used for escaping, it does not make sense for RIGHT_QUOTE to contain
+   a backslash.  RIGHT_QUOTE must not begin with a digit or a letter
+   that has special meaning after a backslash (for example, "\t" for
+   tab).  */
+void set_custom_quoting (struct quoting_options *o,
+                         char const *left_quote,
+                         char const *right_quote);
+
+/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
+   argument ARG (of size ARGSIZE), using O to control quoting.
+   If O is null, use the default.
+   Terminate the output with a null character, and return the written
+   size of the output, not counting the terminating null.
+   If BUFFERSIZE is too small to store the output string, return the
+   value that would have been returned had BUFFERSIZE been large enough.
+   If ARGSIZE is -1, use the string length of the argument for ARGSIZE.
+   On output, BUFFER might contain embedded null bytes if ARGSIZE was
+   not -1, the style of O does not use backslash escapes, and the
+   flags of O do not request elision of null bytes.*/
+size_t quotearg_buffer (char *buffer, size_t buffersize,
+                        char const *arg, size_t argsize,
+                        struct quoting_options const *o);
+
+/* Like quotearg_buffer, except return the result in a newly allocated
+   buffer.  It is the caller's responsibility to free the result.  The
+   result will not contain embedded null bytes.  */
+char *quotearg_alloc (char const *arg, size_t argsize,
+                      struct quoting_options const *o);
+
+/* Like quotearg_alloc, except that the length of the result,
+   excluding the terminating null byte, is stored into SIZE if it is
+   non-NULL.  The result might contain embedded null bytes if ARGSIZE
+   was not -1, SIZE was not NULL, the style of O does not use
+   backslash escapes, and the flags of O do not request elision of
+   null bytes.*/
+char *quotearg_alloc_mem (char const *arg, size_t argsize,
+                          size_t *size, struct quoting_options const *o);
+
+/* Use storage slot N to return a quoted version of the string ARG.
+   Use the default quoting options.
+   The returned value points to static storage that can be
+   reused by the next call to this function with the same value of N.
+   N must be nonnegative.  The output of all functions in the
+   quotearg_n family are guaranteed to not contain embedded null
+   bytes.*/
+char *quotearg_n (int n, char const *arg);
+
+/* Equivalent to quotearg_n (0, ARG).  */
+char *quotearg (char const *arg);
+
+/* Use storage slot N to return a quoted version of the argument ARG
+   of size ARGSIZE.  This is like quotearg_n (N, ARG), except it can
+   quote null bytes.  */
+char *quotearg_n_mem (int n, char const *arg, size_t argsize);
+
+/* Equivalent to quotearg_n_mem (0, ARG, ARGSIZE).  */
+char *quotearg_mem (char const *arg, size_t argsize);
+
+/* Use style S and storage slot N to return a quoted version of the string ARG.
+   This is like quotearg_n (N, ARG), except that it uses S with no other
+   options to specify the quoting method.  */
+char *quotearg_n_style (int n, enum quoting_style s, char const *arg);
+
+/* Use style S and storage slot N to return a quoted version of the
+   argument ARG of size ARGSIZE.  This is like quotearg_n_style
+   (N, S, ARG), except it can quote null bytes.  */
+char *quotearg_n_style_mem (int n, enum quoting_style s,
+                            char const *arg, size_t argsize);
+
+/* Equivalent to quotearg_n_style (0, S, ARG).  */
+char *quotearg_style (enum quoting_style s, char const *arg);
+
+/* Equivalent to quotearg_n_style_mem (0, S, ARG, ARGSIZE).  */
+char *quotearg_style_mem (enum quoting_style s,
+                          char const *arg, size_t argsize);
+
+/* Like quotearg (ARG), except also quote any instances of CH.
+   See set_char_quoting for a description of acceptable CH values.  */
+char *quotearg_char (char const *arg, char ch);
+
+/* Like quotearg_char (ARG, CH), except it can quote null bytes.  */
+char *quotearg_char_mem (char const *arg, size_t argsize, char ch);
+
+/* Equivalent to quotearg_char (ARG, ':').  */
+char *quotearg_colon (char const *arg);
+
+/* Like quotearg_colon (ARG), except it can quote null bytes.  */
+char *quotearg_colon_mem (char const *arg, size_t argsize);
+
+/* Like quotearg_n_style (N, S, ARG) but with S as custom_quoting_style
+   with left quote as LEFT_QUOTE and right quote as RIGHT_QUOTE.  See
+   set_custom_quoting for a description of acceptable LEFT_QUOTE and
+   RIGHT_QUOTE values.  */
+char *quotearg_n_custom (int n, char const *left_quote,
+                         char const *right_quote, char const *arg);
+
+/* Like quotearg_n_custom (N, LEFT_QUOTE, RIGHT_QUOTE, ARG) except it
+   can quote null bytes.  */
+char *quotearg_n_custom_mem (int n, char const *left_quote,
+                             char const *right_quote,
+                             char const *arg, size_t argsize);
+
+/* Equivalent to quotearg_n_custom (0, LEFT_QUOTE, RIGHT_QUOTE, ARG).  */
+char *quotearg_custom (char const *left_quote, char const *right_quote,
+                       char const *arg);
+
+/* Equivalent to quotearg_n_custom_mem (0, LEFT_QUOTE, RIGHT_QUOTE, ARG,
+                                        ARGSIZE).  */
+char *quotearg_custom_mem (char const *left_quote,
+                           char const *right_quote,
+                           char const *arg, size_t argsize);
+
+/* Free any dynamically allocated memory.  */
+void quotearg_free (void);
+
+#endif /* !QUOTEARG_H_ */
diff --git a/gnu/rawmemchr.c b/gnu/rawmemchr.c
new file mode 100644 (file)
index 0000000..61aafcc
--- /dev/null
@@ -0,0 +1,138 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Searching in a string.
+   Copyright (C) 2008, 2009, 2010 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 <string.h>
+
+/* Find the first occurrence of C in S.  */
+void *
+rawmemchr (const void *s, int c_in)
+{
+  /* On 32-bit hardware, choosing longword to be a 32-bit unsigned
+     long instead of a 64-bit uintmax_t tends to give better
+     performance.  On 64-bit hardware, unsigned long is generally 64
+     bits already.  Change this typedef to experiment with
+     performance.  */
+  typedef unsigned long int longword;
+
+  const unsigned char *char_ptr;
+  const longword *longword_ptr;
+  longword repeated_one;
+  longword repeated_c;
+  unsigned char c;
+
+  c = (unsigned char) c_in;
+
+  /* Handle the first few bytes by reading one byte at a time.
+     Do this until CHAR_PTR is aligned on a longword boundary.  */
+  for (char_ptr = (const unsigned char *) s;
+       (size_t) char_ptr % sizeof (longword) != 0;
+       ++char_ptr)
+    if (*char_ptr == c)
+      return (void *) char_ptr;
+
+  longword_ptr = (const longword *) char_ptr;
+
+  /* All these elucidatory comments refer to 4-byte longwords,
+     but the theory applies equally well to any size longwords.  */
+
+  /* Compute auxiliary longword values:
+     repeated_one is a value which has a 1 in every byte.
+     repeated_c has c in every byte.  */
+  repeated_one = 0x01010101;
+  repeated_c = c | (c << 8);
+  repeated_c |= repeated_c << 16;
+  if (0xffffffffU < (longword) -1)
+    {
+      repeated_one |= repeated_one << 31 << 1;
+      repeated_c |= repeated_c << 31 << 1;
+      if (8 < sizeof (longword))
+        {
+          size_t i;
+
+          for (i = 64; i < sizeof (longword) * 8; i *= 2)
+            {
+              repeated_one |= repeated_one << i;
+              repeated_c |= repeated_c << i;
+            }
+        }
+    }
+
+  /* Instead of the traditional loop which tests each byte, we will
+     test a longword at a time.  The tricky part is testing if *any of
+     the four* bytes in the longword in question are equal to NUL or
+     c.  We first use an xor with repeated_c.  This reduces the task
+     to testing whether *any of the four* bytes in longword1 is zero.
+
+     We compute tmp =
+       ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7).
+     That is, we perform the following operations:
+       1. Subtract repeated_one.
+       2. & ~longword1.
+       3. & a mask consisting of 0x80 in every byte.
+     Consider what happens in each byte:
+       - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff,
+         and step 3 transforms it into 0x80.  A carry can also be propagated
+         to more significant bytes.
+       - If a byte of longword1 is nonzero, let its lowest 1 bit be at
+         position k (0 <= k <= 7); so the lowest k bits are 0.  After step 1,
+         the byte ends in a single bit of value 0 and k bits of value 1.
+         After step 2, the result is just k bits of value 1: 2^k - 1.  After
+         step 3, the result is 0.  And no carry is produced.
+     So, if longword1 has only non-zero bytes, tmp is zero.
+     Whereas if longword1 has a zero byte, call j the position of the least
+     significant zero byte.  Then the result has a zero at positions 0, ...,
+     j-1 and a 0x80 at position j.  We cannot predict the result at the more
+     significant bytes (positions j+1..3), but it does not matter since we
+     already have a non-zero bit at position 8*j+7.
+
+     The test whether any byte in longword1 is zero is equivalent
+     to testing whether tmp is nonzero.
+
+     This test can read beyond the end of a string, depending on where
+     C_IN is encountered.  However, this is considered safe since the
+     initialization phase ensured that the read will be aligned,
+     therefore, the read will not cross page boundaries and will not
+     cause a fault.  */
+
+  while (1)
+    {
+      longword longword1 = *longword_ptr ^ repeated_c;
+
+      if ((((longword1 - repeated_one) & ~longword1)
+           & (repeated_one << 7)) != 0)
+        break;
+      longword_ptr++;
+    }
+
+  char_ptr = (const unsigned char *) longword_ptr;
+
+  /* At this point, we know that one of the sizeof (longword) bytes
+     starting at char_ptr is == c.  On little-endian machines, we
+     could determine the first such byte without any further memory
+     accesses, just by looking at the tmp result from the last loop
+     iteration.  But this does not work on big-endian machines.
+     Choose code that works in both cases.  */
+
+  char_ptr = (unsigned char *) longword_ptr;
+  while (*char_ptr != c)
+    char_ptr++;
+  return (void *) char_ptr;
+}
diff --git a/gnu/rawmemchr.valgrind b/gnu/rawmemchr.valgrind
new file mode 100644 (file)
index 0000000..6363923
--- /dev/null
@@ -0,0 +1,12 @@
+# Suppress a valgrind message about use of uninitialized memory in rawmemchr().
+# This use is OK because it provides only a speedup.
+{
+    rawmemchr-value4
+    Memcheck:Value4
+    fun:rawmemchr
+}
+{
+    rawmemchr-value8
+    Memcheck:Value8
+    fun:rawmemchr
+}
diff --git a/gnu/readlink.c b/gnu/readlink.c
new file mode 100644 (file)
index 0000000..dcbc0fb
--- /dev/null
@@ -0,0 +1,76 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Stub for readlink().
+   Copyright (C) 2003-2007, 2009-2010 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 <string.h>
+#include <sys/stat.h>
+
+#if !HAVE_READLINK
+
+/* readlink() substitute for systems that don't have a readlink() function,
+   such as DJGPP 2.03 and mingw32.  */
+
+ssize_t
+readlink (const char *name, char *buf _GL_UNUSED,
+          size_t bufsize _GL_UNUSED)
+{
+  struct stat statbuf;
+
+  /* In general we should use lstat() here, not stat().  But on platforms
+     without symbolic links, lstat() - if it exists - would be equivalent to
+     stat(), therefore we can use stat().  This saves us a configure check.  */
+  if (stat (name, &statbuf) >= 0)
+    errno = EINVAL;
+  return -1;
+}
+
+#else /* HAVE_READLINK */
+
+# undef readlink
+
+/* readlink() wrapper that uses correct types, for systems like cygwin
+   1.5.x where readlink returns int, and which rejects trailing slash,
+   for Solaris 9.  */
+
+ssize_t
+rpl_readlink (const char *name, char *buf, size_t bufsize)
+{
+# if READLINK_TRAILING_SLASH_BUG
+  size_t len = strlen (name);
+  if (len && name[len - 1] == '/')
+    {
+      /* Even if name without the slash is a symlink to a directory,
+         both lstat() and stat() must resolve the trailing slash to
+         the directory rather than the symlink.  We can therefore
+         safely use stat() to distinguish between EINVAL and
+         ENOTDIR/ENOENT, avoiding extra overhead of rpl_lstat().  */
+      struct stat st;
+      if (stat (name, &st) == 0)
+        errno = EINVAL;
+      return -1;
+    }
+# endif /* READLINK_TRAILING_SLASH_BUG */
+  return readlink (name, buf, bufsize);
+}
+
+#endif /* HAVE_READLINK */
diff --git a/gnu/realloc.c b/gnu/realloc.c
new file mode 100644 (file)
index 0000000..04894fa
--- /dev/null
@@ -0,0 +1,90 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* realloc() function that is glibc compatible.
+
+   Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2010 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 and Bruno Haible */
+
+#include <config.h>
+
+/* Only the AC_FUNC_REALLOC macro defines 'realloc' already in config.h.  */
+#ifdef realloc
+# define NEED_REALLOC_GNU 1
+#endif
+
+/* Infer the properties of the system's malloc function.
+   Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h.  */
+#if GNULIB_MALLOC_GNU && !defined malloc
+# define SYSTEM_MALLOC_GLIBC_COMPATIBLE 1
+#endif
+
+/* Below we want to call the system's malloc and realloc.
+   Undefine the symbols here so that including <stdlib.h> provides a
+   declaration of malloc(), not of rpl_malloc(), and likewise for realloc.  */
+#undef malloc
+#undef realloc
+
+/* Specification.  */
+#include <stdlib.h>
+
+#include <errno.h>
+
+/* Below we want to call the system's malloc and realloc.
+   Undefine the symbols, if they were defined by gnulib's <stdlib.h>
+   replacement.  */
+#undef malloc
+#undef realloc
+
+/* Change the size of an allocated block of memory P to N bytes,
+   with error checking.  If N is zero, change it to 1.  If P is NULL,
+   use malloc.  */
+
+void *
+rpl_realloc (void *p, size_t n)
+{
+  void *result;
+
+#if NEED_REALLOC_GNU
+  if (n == 0)
+    {
+      n = 1;
+
+      /* In theory realloc might fail, so don't rely on it to free.  */
+      free (p);
+      p = NULL;
+    }
+#endif
+
+  if (p == NULL)
+    {
+#if GNULIB_REALLOC_GNU && !NEED_REALLOC_GNU && !SYSTEM_MALLOC_GLIBC_COMPATIBLE
+      if (n == 0)
+        n = 1;
+#endif
+      result = malloc (n);
+    }
+  else
+    result = realloc (p, n);
+
+#if !HAVE_REALLOC_POSIX
+  if (result == NULL)
+    errno = ENOMEM;
+#endif
+
+  return result;
+}
diff --git a/gnu/ref-add.sin b/gnu/ref-add.sin
new file mode 100644 (file)
index 0000000..dbb61df
--- /dev/null
@@ -0,0 +1,30 @@
+# Add this package to a list of references stored in a text file.
+#
+#   Copyright (C) 2000, 2009, 2010 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, write to the Free Software Foundation,
+#   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Written by Bruno Haible <haible@clisp.cons.org>.
+#
+/^# Packages using this file: / {
+  s/# Packages using this file://
+  ta
+  :a
+  s/ @PACKAGE@ / @PACKAGE@ /
+  tb
+  s/ $/ @PACKAGE@ /
+  :b
+  s/^/# Packages using this file:/
+}
diff --git a/gnu/ref-del.sin b/gnu/ref-del.sin
new file mode 100644 (file)
index 0000000..4c31a6e
--- /dev/null
@@ -0,0 +1,25 @@
+# Remove this package from a list of references stored in a text file.
+#
+#   Copyright (C) 2000, 2009, 2010 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, write to the Free Software Foundation,
+#   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Written by Bruno Haible <haible@clisp.cons.org>.
+#
+/^# Packages using this file: / {
+  s/# Packages using this file://
+  s/ @PACKAGE@ / /
+  s/^/# Packages using this file:/
+}
diff --git a/gnu/regcomp.c b/gnu/regcomp.c
new file mode 100644 (file)
index 0000000..69f5c94
--- /dev/null
@@ -0,0 +1,3871 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Extended regular expression matching and search library.
+   Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+   Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Isamu Hasegawa <isamu@yamato.ibm.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.
+
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern,
+                                         size_t length, reg_syntax_t syntax);
+static void re_compile_fastmap_iter (regex_t *bufp,
+                                    const re_dfastate_t *init_state,
+                                    char *fastmap);
+static reg_errcode_t init_dfa (re_dfa_t *dfa, size_t pat_len);
+#ifdef RE_ENABLE_I18N
+static void free_charset (re_charset_t *cset);
+#endif /* RE_ENABLE_I18N */
+static void free_workarea_compile (regex_t *preg);
+static reg_errcode_t create_initial_state (re_dfa_t *dfa);
+#ifdef RE_ENABLE_I18N
+static void optimize_utf8 (re_dfa_t *dfa);
+#endif
+static reg_errcode_t analyze (regex_t *preg);
+static reg_errcode_t preorder (bin_tree_t *root,
+                              reg_errcode_t (fn (void *, bin_tree_t *)),
+                              void *extra);
+static reg_errcode_t postorder (bin_tree_t *root,
+                               reg_errcode_t (fn (void *, bin_tree_t *)),
+                               void *extra);
+static reg_errcode_t optimize_subexps (void *extra, bin_tree_t *node);
+static reg_errcode_t lower_subexps (void *extra, bin_tree_t *node);
+static bin_tree_t *lower_subexp (reg_errcode_t *err, regex_t *preg,
+                                bin_tree_t *node);
+static reg_errcode_t calc_first (void *extra, bin_tree_t *node);
+static reg_errcode_t calc_next (void *extra, bin_tree_t *node);
+static reg_errcode_t link_nfa_nodes (void *extra, bin_tree_t *node);
+static Idx duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint);
+static Idx search_duplicated_node (const re_dfa_t *dfa, Idx org_node,
+                                  unsigned int constraint);
+static reg_errcode_t calc_eclosure (re_dfa_t *dfa);
+static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa,
+                                        Idx node, bool root);
+static reg_errcode_t calc_inveclosure (re_dfa_t *dfa);
+static Idx fetch_number (re_string_t *input, re_token_t *token,
+                        reg_syntax_t syntax);
+static int peek_token (re_token_t *token, re_string_t *input,
+                       reg_syntax_t syntax) internal_function;
+static bin_tree_t *parse (re_string_t *regexp, regex_t *preg,
+                         reg_syntax_t syntax, reg_errcode_t *err);
+static bin_tree_t *parse_reg_exp (re_string_t *regexp, regex_t *preg,
+                                 re_token_t *token, reg_syntax_t syntax,
+                                 Idx nest, reg_errcode_t *err);
+static bin_tree_t *parse_branch (re_string_t *regexp, regex_t *preg,
+                                re_token_t *token, reg_syntax_t syntax,
+                                Idx nest, reg_errcode_t *err);
+static bin_tree_t *parse_expression (re_string_t *regexp, regex_t *preg,
+                                    re_token_t *token, reg_syntax_t syntax,
+                                    Idx nest, reg_errcode_t *err);
+static bin_tree_t *parse_sub_exp (re_string_t *regexp, regex_t *preg,
+                                 re_token_t *token, reg_syntax_t syntax,
+                                 Idx nest, reg_errcode_t *err);
+static bin_tree_t *parse_dup_op (bin_tree_t *dup_elem, re_string_t *regexp,
+                                re_dfa_t *dfa, re_token_t *token,
+                                reg_syntax_t syntax, reg_errcode_t *err);
+static bin_tree_t *parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa,
+                                     re_token_t *token, reg_syntax_t syntax,
+                                     reg_errcode_t *err);
+static reg_errcode_t parse_bracket_element (bracket_elem_t *elem,
+                                           re_string_t *regexp,
+                                           re_token_t *token, int token_len,
+                                           re_dfa_t *dfa,
+                                           reg_syntax_t syntax,
+                                           bool accept_hyphen);
+static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem,
+                                         re_string_t *regexp,
+                                         re_token_t *token);
+#ifdef RE_ENABLE_I18N
+static reg_errcode_t build_equiv_class (bitset_t sbcset,
+                                       re_charset_t *mbcset,
+                                       Idx *equiv_class_alloc,
+                                       const unsigned char *name);
+static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans,
+                                     bitset_t sbcset,
+                                     re_charset_t *mbcset,
+                                     Idx *char_class_alloc,
+                                     const unsigned char *class_name,
+                                     reg_syntax_t syntax);
+#else  /* not RE_ENABLE_I18N */
+static reg_errcode_t build_equiv_class (bitset_t sbcset,
+                                       const unsigned char *name);
+static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans,
+                                     bitset_t sbcset,
+                                     const unsigned char *class_name,
+                                     reg_syntax_t syntax);
+#endif /* not RE_ENABLE_I18N */
+static bin_tree_t *build_charclass_op (re_dfa_t *dfa,
+                                      RE_TRANSLATE_TYPE trans,
+                                      const unsigned char *class_name,
+                                      const unsigned char *extra,
+                                      bool non_match, reg_errcode_t *err);
+static bin_tree_t *create_tree (re_dfa_t *dfa,
+                               bin_tree_t *left, bin_tree_t *right,
+                               re_token_type_t type);
+static bin_tree_t *create_token_tree (re_dfa_t *dfa,
+                                     bin_tree_t *left, bin_tree_t *right,
+                                     const re_token_t *token);
+static bin_tree_t *duplicate_tree (const bin_tree_t *src, re_dfa_t *dfa);
+static void free_token (re_token_t *node);
+static reg_errcode_t free_tree (void *extra, bin_tree_t *node);
+static reg_errcode_t mark_opt_subexp (void *extra, bin_tree_t *node);
+\f
+/* This table gives an error message for each of the error codes listed
+   in regex.h.  Obviously the order here has to be same as there.
+   POSIX doesn't require that we do anything for REG_NOERROR,
+   but why not be nice?  */
+
+static const char __re_error_msgid[] =
+  {
+#define REG_NOERROR_IDX        0
+    gettext_noop ("Success")   /* REG_NOERROR */
+    "\0"
+#define REG_NOMATCH_IDX (REG_NOERROR_IDX + sizeof "Success")
+    gettext_noop ("No match")  /* REG_NOMATCH */
+    "\0"
+#define REG_BADPAT_IDX (REG_NOMATCH_IDX + sizeof "No match")
+    gettext_noop ("Invalid regular expression") /* REG_BADPAT */
+    "\0"
+#define REG_ECOLLATE_IDX (REG_BADPAT_IDX + sizeof "Invalid regular expression")
+    gettext_noop ("Invalid collation character") /* REG_ECOLLATE */
+    "\0"
+#define REG_ECTYPE_IDX (REG_ECOLLATE_IDX + sizeof "Invalid collation character")
+    gettext_noop ("Invalid character class name") /* REG_ECTYPE */
+    "\0"
+#define REG_EESCAPE_IDX        (REG_ECTYPE_IDX + sizeof "Invalid character class name")
+    gettext_noop ("Trailing backslash") /* REG_EESCAPE */
+    "\0"
+#define REG_ESUBREG_IDX        (REG_EESCAPE_IDX + sizeof "Trailing backslash")
+    gettext_noop ("Invalid back reference") /* REG_ESUBREG */
+    "\0"
+#define REG_EBRACK_IDX (REG_ESUBREG_IDX + sizeof "Invalid back reference")
+    gettext_noop ("Unmatched [ or [^") /* REG_EBRACK */
+    "\0"
+#define REG_EPAREN_IDX (REG_EBRACK_IDX + sizeof "Unmatched [ or [^")
+    gettext_noop ("Unmatched ( or \\(") /* REG_EPAREN */
+    "\0"
+#define REG_EBRACE_IDX (REG_EPAREN_IDX + sizeof "Unmatched ( or \\(")
+    gettext_noop ("Unmatched \\{") /* REG_EBRACE */
+    "\0"
+#define REG_BADBR_IDX  (REG_EBRACE_IDX + sizeof "Unmatched \\{")
+    gettext_noop ("Invalid content of \\{\\}") /* REG_BADBR */
+    "\0"
+#define REG_ERANGE_IDX (REG_BADBR_IDX + sizeof "Invalid content of \\{\\}")
+    gettext_noop ("Invalid range end") /* REG_ERANGE */
+    "\0"
+#define REG_ESPACE_IDX (REG_ERANGE_IDX + sizeof "Invalid range end")
+    gettext_noop ("Memory exhausted") /* REG_ESPACE */
+    "\0"
+#define REG_BADRPT_IDX (REG_ESPACE_IDX + sizeof "Memory exhausted")
+    gettext_noop ("Invalid preceding regular expression") /* REG_BADRPT */
+    "\0"
+#define REG_EEND_IDX   (REG_BADRPT_IDX + sizeof "Invalid preceding regular expression")
+    gettext_noop ("Premature end of regular expression") /* REG_EEND */
+    "\0"
+#define REG_ESIZE_IDX  (REG_EEND_IDX + sizeof "Premature end of regular expression")
+    gettext_noop ("Regular expression too big") /* REG_ESIZE */
+    "\0"
+#define REG_ERPAREN_IDX        (REG_ESIZE_IDX + sizeof "Regular expression too big")
+    gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */
+  };
+
+static const size_t __re_error_msgid_idx[] =
+  {
+    REG_NOERROR_IDX,
+    REG_NOMATCH_IDX,
+    REG_BADPAT_IDX,
+    REG_ECOLLATE_IDX,
+    REG_ECTYPE_IDX,
+    REG_EESCAPE_IDX,
+    REG_ESUBREG_IDX,
+    REG_EBRACK_IDX,
+    REG_EPAREN_IDX,
+    REG_EBRACE_IDX,
+    REG_BADBR_IDX,
+    REG_ERANGE_IDX,
+    REG_ESPACE_IDX,
+    REG_BADRPT_IDX,
+    REG_EEND_IDX,
+    REG_ESIZE_IDX,
+    REG_ERPAREN_IDX
+  };
+\f
+/* Entry points for GNU code.  */
+
+/* re_compile_pattern is the GNU regular expression compiler: it
+   compiles PATTERN (of length LENGTH) and puts the result in BUFP.
+   Returns 0 if the pattern was valid, otherwise an error string.
+
+   Assumes the `allocated' (and perhaps `buffer') and `translate' fields
+   are set in BUFP on entry.  */
+
+#ifdef _LIBC
+const char *
+re_compile_pattern (pattern, length, bufp)
+    const char *pattern;
+    size_t length;
+    struct re_pattern_buffer *bufp;
+#else /* size_t might promote */
+const char *
+re_compile_pattern (const char *pattern, size_t length,
+                   struct re_pattern_buffer *bufp)
+#endif
+{
+  reg_errcode_t ret;
+
+  /* And GNU code determines whether or not to get register information
+     by passing null for the REGS argument to re_match, etc., not by
+     setting no_sub, unless RE_NO_SUB is set.  */
+  bufp->no_sub = !!(re_syntax_options & RE_NO_SUB);
+
+  /* Match anchors at newline.  */
+  bufp->newline_anchor = 1;
+
+  ret = re_compile_internal (bufp, pattern, length, re_syntax_options);
+
+  if (!ret)
+    return NULL;
+  return gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]);
+}
+#ifdef _LIBC
+weak_alias (__re_compile_pattern, re_compile_pattern)
+#endif
+
+/* Set by `re_set_syntax' to the current regexp syntax to recognize.  Can
+   also be assigned to arbitrarily: each pattern buffer stores its own
+   syntax, so it can be changed between regex compilations.  */
+/* This has no initializer because initialized variables in Emacs
+   become read-only after dumping.  */
+reg_syntax_t re_syntax_options;
+
+
+/* Specify the precise syntax of regexps for compilation.  This provides
+   for compatibility for various utilities which historically have
+   different, incompatible syntaxes.
+
+   The argument SYNTAX is a bit mask comprised of the various bits
+   defined in regex.h.  We return the old syntax.  */
+
+reg_syntax_t
+re_set_syntax (syntax)
+    reg_syntax_t syntax;
+{
+  reg_syntax_t ret = re_syntax_options;
+
+  re_syntax_options = syntax;
+  return ret;
+}
+#ifdef _LIBC
+weak_alias (__re_set_syntax, re_set_syntax)
+#endif
+
+int
+re_compile_fastmap (bufp)
+    struct re_pattern_buffer *bufp;
+{
+  re_dfa_t *dfa = (re_dfa_t *) bufp->buffer;
+  char *fastmap = bufp->fastmap;
+
+  memset (fastmap, '\0', sizeof (char) * SBC_MAX);
+  re_compile_fastmap_iter (bufp, dfa->init_state, fastmap);
+  if (dfa->init_state != dfa->init_state_word)
+    re_compile_fastmap_iter (bufp, dfa->init_state_word, fastmap);
+  if (dfa->init_state != dfa->init_state_nl)
+    re_compile_fastmap_iter (bufp, dfa->init_state_nl, fastmap);
+  if (dfa->init_state != dfa->init_state_begbuf)
+    re_compile_fastmap_iter (bufp, dfa->init_state_begbuf, fastmap);
+  bufp->fastmap_accurate = 1;
+  return 0;
+}
+#ifdef _LIBC
+weak_alias (__re_compile_fastmap, re_compile_fastmap)
+#endif
+
+static inline void
+__attribute ((always_inline))
+re_set_fastmap (char *fastmap, bool icase, int ch)
+{
+  fastmap[ch] = 1;
+  if (icase)
+    fastmap[tolower (ch)] = 1;
+}
+
+/* Helper function for re_compile_fastmap.
+   Compile fastmap for the initial_state INIT_STATE.  */
+
+static void
+re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state,
+                        char *fastmap)
+{
+  re_dfa_t *dfa = (re_dfa_t *) bufp->buffer;
+  Idx node_cnt;
+  bool icase = (dfa->mb_cur_max == 1 && (bufp->syntax & RE_ICASE));
+  for (node_cnt = 0; node_cnt < init_state->nodes.nelem; ++node_cnt)
+    {
+      Idx node = init_state->nodes.elems[node_cnt];
+      re_token_type_t type = dfa->nodes[node].type;
+
+      if (type == CHARACTER)
+       {
+         re_set_fastmap (fastmap, icase, dfa->nodes[node].opr.c);
+#ifdef RE_ENABLE_I18N
+         if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1)
+           {
+             unsigned char buf[MB_LEN_MAX];
+             unsigned char *p;
+             wchar_t wc;
+             mbstate_t state;
+
+             p = buf;
+             *p++ = dfa->nodes[node].opr.c;
+             while (++node < dfa->nodes_len
+                    && dfa->nodes[node].type == CHARACTER
+                    && dfa->nodes[node].mb_partial)
+               *p++ = dfa->nodes[node].opr.c;
+             memset (&state, '\0', sizeof (state));
+             if (__mbrtowc (&wc, (const char *) buf, p - buf,
+                            &state) == p - buf
+                 && (__wcrtomb ((char *) buf, towlower (wc), &state)
+                     != (size_t) -1))
+               re_set_fastmap (fastmap, false, buf[0]);
+           }
+#endif
+       }
+      else if (type == SIMPLE_BRACKET)
+       {
+         int i, ch;
+         for (i = 0, ch = 0; i < BITSET_WORDS; ++i)
+           {
+             int j;
+             bitset_word_t w = dfa->nodes[node].opr.sbcset[i];
+             for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch)
+               if (w & ((bitset_word_t) 1 << j))
+                 re_set_fastmap (fastmap, icase, ch);
+           }
+       }
+#ifdef RE_ENABLE_I18N
+      else if (type == COMPLEX_BRACKET)
+       {
+         re_charset_t *cset = dfa->nodes[node].opr.mbcset;
+         Idx i;
+
+# ifdef _LIBC
+         /* See if we have to try all bytes which start multiple collation
+            elements.
+            e.g. In da_DK, we want to catch 'a' since "aa" is a valid
+                 collation element, and don't catch 'b' since 'b' is
+                 the only collation element which starts from 'b' (and
+                 it is caught by SIMPLE_BRACKET).  */
+             if (_NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES) != 0
+                 && (cset->ncoll_syms || cset->nranges))
+               {
+                 const int32_t *table = (const int32_t *)
+                   _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
+                 for (i = 0; i < SBC_MAX; ++i)
+                   if (table[i] < 0)
+                     re_set_fastmap (fastmap, icase, i);
+               }
+# endif /* _LIBC */
+
+         /* See if we have to start the match at all multibyte characters,
+            i.e. where we would not find an invalid sequence.  This only
+            applies to multibyte character sets; for single byte character
+            sets, the SIMPLE_BRACKET again suffices.  */
+         if (dfa->mb_cur_max > 1
+             && (cset->nchar_classes || cset->non_match || cset->nranges
+# ifdef _LIBC
+                 || cset->nequiv_classes
+# endif /* _LIBC */
+                ))
+           {
+             unsigned char c = 0;
+             do
+               {
+                 mbstate_t mbs;
+                 memset (&mbs, 0, sizeof (mbs));
+                 if (__mbrtowc (NULL, (char *) &c, 1, &mbs) == (size_t) -2)
+                   re_set_fastmap (fastmap, false, (int) c);
+               }
+             while (++c != 0);
+           }
+
+         else
+           {
+             /* ... Else catch all bytes which can start the mbchars.  */
+             for (i = 0; i < cset->nmbchars; ++i)
+               {
+                 char buf[256];
+                 mbstate_t state;
+                 memset (&state, '\0', sizeof (state));
+                 if (__wcrtomb (buf, cset->mbchars[i], &state) != (size_t) -1)
+                   re_set_fastmap (fastmap, icase, *(unsigned char *) buf);
+                 if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1)
+                   {
+                     if (__wcrtomb (buf, towlower (cset->mbchars[i]), &state)
+                         != (size_t) -1)
+                       re_set_fastmap (fastmap, false, *(unsigned char *) buf);
+                   }
+               }
+           }
+       }
+#endif /* RE_ENABLE_I18N */
+      else if (type == OP_PERIOD
+#ifdef RE_ENABLE_I18N
+              || type == OP_UTF8_PERIOD
+#endif /* RE_ENABLE_I18N */
+              || type == END_OF_RE)
+       {
+         memset (fastmap, '\1', sizeof (char) * SBC_MAX);
+         if (type == END_OF_RE)
+           bufp->can_be_null = 1;
+         return;
+       }
+    }
+}
+\f
+/* Entry point for POSIX code.  */
+/* regcomp takes a regular expression as a string and compiles it.
+
+   PREG is a regex_t *.  We do not expect any fields to be initialized,
+   since POSIX says we shouldn't.  Thus, we set
+
+     `buffer' to the compiled pattern;
+     `used' to the length of the compiled pattern;
+     `syntax' to RE_SYNTAX_POSIX_EXTENDED if the
+       REG_EXTENDED bit in CFLAGS is set; otherwise, to
+       RE_SYNTAX_POSIX_BASIC;
+     `newline_anchor' to REG_NEWLINE being set in CFLAGS;
+     `fastmap' to an allocated space for the fastmap;
+     `fastmap_accurate' to zero;
+     `re_nsub' to the number of subexpressions in PATTERN.
+
+   PATTERN is the address of the pattern string.
+
+   CFLAGS is a series of bits which affect compilation.
+
+     If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we
+     use POSIX basic syntax.
+
+     If REG_NEWLINE is set, then . and [^...] don't match newline.
+     Also, regexec will try a match beginning after every newline.
+
+     If REG_ICASE is set, then we considers upper- and lowercase
+     versions of letters to be equivalent when matching.
+
+     If REG_NOSUB is set, then when PREG is passed to regexec, that
+     routine will report only success or failure, and nothing about the
+     registers.
+
+   It returns 0 if it succeeds, nonzero if it doesn't.  (See regex.h for
+   the return codes and their meanings.)  */
+
+int
+regcomp (preg, pattern, cflags)
+    regex_t *_Restrict_ preg;
+    const char *_Restrict_ pattern;
+    int cflags;
+{
+  reg_errcode_t ret;
+  reg_syntax_t syntax = ((cflags & REG_EXTENDED) ? RE_SYNTAX_POSIX_EXTENDED
+                        : RE_SYNTAX_POSIX_BASIC);
+
+  preg->buffer = NULL;
+  preg->allocated = 0;
+  preg->used = 0;
+
+  /* Try to allocate space for the fastmap.  */
+  preg->fastmap = re_malloc (char, SBC_MAX);
+  if (BE (preg->fastmap == NULL, 0))
+    return REG_ESPACE;
+
+  syntax |= (cflags & REG_ICASE) ? RE_ICASE : 0;
+
+  /* If REG_NEWLINE is set, newlines are treated differently.  */
+  if (cflags & REG_NEWLINE)
+    { /* REG_NEWLINE implies neither . nor [^...] match newline.  */
+      syntax &= ~RE_DOT_NEWLINE;
+      syntax |= RE_HAT_LISTS_NOT_NEWLINE;
+      /* It also changes the matching behavior.  */
+      preg->newline_anchor = 1;
+    }
+  else
+    preg->newline_anchor = 0;
+  preg->no_sub = !!(cflags & REG_NOSUB);
+  preg->translate = NULL;
+
+  ret = re_compile_internal (preg, pattern, strlen (pattern), syntax);
+
+  /* POSIX doesn't distinguish between an unmatched open-group and an
+     unmatched close-group: both are REG_EPAREN.  */
+  if (ret == REG_ERPAREN)
+    ret = REG_EPAREN;
+
+  /* We have already checked preg->fastmap != NULL.  */
+  if (BE (ret == REG_NOERROR, 1))
+    /* Compute the fastmap now, since regexec cannot modify the pattern
+       buffer.  This function never fails in this implementation.  */
+    (void) re_compile_fastmap (preg);
+  else
+    {
+      /* Some error occurred while compiling the expression.  */
+      re_free (preg->fastmap);
+      preg->fastmap = NULL;
+    }
+
+  return (int) ret;
+}
+#ifdef _LIBC
+weak_alias (__regcomp, regcomp)
+#endif
+
+/* Returns a message corresponding to an error code, ERRCODE, returned
+   from either regcomp or regexec.   We don't use PREG here.  */
+
+#ifdef _LIBC
+size_t
+regerror (errcode, preg, errbuf, errbuf_size)
+    int errcode;
+    const regex_t *_Restrict_ preg;
+    char *_Restrict_ errbuf;
+    size_t errbuf_size;
+#else /* size_t might promote */
+size_t
+regerror (int errcode, const regex_t *_Restrict_ preg,
+         char *_Restrict_ errbuf, size_t errbuf_size)
+#endif
+{
+  const char *msg;
+  size_t msg_size;
+
+  if (BE (errcode < 0
+         || errcode >= (int) (sizeof (__re_error_msgid_idx)
+                              / sizeof (__re_error_msgid_idx[0])), 0))
+    /* Only error codes returned by the rest of the code should be passed
+       to this routine.  If we are given anything else, or if other regex
+       code generates an invalid error code, then the program has a bug.
+       Dump core so we can fix it.  */
+    abort ();
+
+  msg = gettext (__re_error_msgid + __re_error_msgid_idx[errcode]);
+
+  msg_size = strlen (msg) + 1; /* Includes the null.  */
+
+  if (BE (errbuf_size != 0, 1))
+    {
+      size_t cpy_size = msg_size;
+      if (BE (msg_size > errbuf_size, 0))
+       {
+         cpy_size = errbuf_size - 1;
+         errbuf[cpy_size] = '\0';
+       }
+      memcpy (errbuf, msg, cpy_size);
+    }
+
+  return msg_size;
+}
+#ifdef _LIBC
+weak_alias (__regerror, regerror)
+#endif
+
+
+#ifdef RE_ENABLE_I18N
+/* This static array is used for the map to single-byte characters when
+   UTF-8 is used.  Otherwise we would allocate memory just to initialize
+   it the same all the time.  UTF-8 is the preferred encoding so this is
+   a worthwhile optimization.  */
+static const bitset_t utf8_sb_map =
+{
+  /* Set the first 128 bits.  */
+# if 4 * BITSET_WORD_BITS < ASCII_CHARS
+#  error "bitset_word_t is narrower than 32 bits"
+# elif 3 * BITSET_WORD_BITS < ASCII_CHARS
+  BITSET_WORD_MAX, BITSET_WORD_MAX, BITSET_WORD_MAX,
+# elif 2 * BITSET_WORD_BITS < ASCII_CHARS
+  BITSET_WORD_MAX, BITSET_WORD_MAX,
+# elif 1 * BITSET_WORD_BITS < ASCII_CHARS
+  BITSET_WORD_MAX,
+# endif
+  (BITSET_WORD_MAX
+   >> (SBC_MAX % BITSET_WORD_BITS == 0
+       ? 0
+       : BITSET_WORD_BITS - SBC_MAX % BITSET_WORD_BITS))
+};
+#endif
+
+
+static void
+free_dfa_content (re_dfa_t *dfa)
+{
+  Idx i, j;
+
+  if (dfa->nodes)
+    for (i = 0; i < dfa->nodes_len; ++i)
+      free_token (dfa->nodes + i);
+  re_free (dfa->nexts);
+  for (i = 0; i < dfa->nodes_len; ++i)
+    {
+      if (dfa->eclosures != NULL)
+       re_node_set_free (dfa->eclosures + i);
+      if (dfa->inveclosures != NULL)
+       re_node_set_free (dfa->inveclosures + i);
+      if (dfa->edests != NULL)
+       re_node_set_free (dfa->edests + i);
+    }
+  re_free (dfa->edests);
+  re_free (dfa->eclosures);
+  re_free (dfa->inveclosures);
+  re_free (dfa->nodes);
+
+  if (dfa->state_table)
+    for (i = 0; i <= dfa->state_hash_mask; ++i)
+      {
+       struct re_state_table_entry *entry = dfa->state_table + i;
+       for (j = 0; j < entry->num; ++j)
+         {
+           re_dfastate_t *state = entry->array[j];
+           free_state (state);
+         }
+       re_free (entry->array);
+      }
+  re_free (dfa->state_table);
+#ifdef RE_ENABLE_I18N
+  if (dfa->sb_char != utf8_sb_map)
+    re_free (dfa->sb_char);
+#endif
+  re_free (dfa->subexp_map);
+#ifdef DEBUG
+  re_free (dfa->re_str);
+#endif
+
+  re_free (dfa);
+}
+
+
+/* Free dynamically allocated space used by PREG.  */
+
+void
+regfree (preg)
+    regex_t *preg;
+{
+  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
+  if (BE (dfa != NULL, 1))
+    free_dfa_content (dfa);
+  preg->buffer = NULL;
+  preg->allocated = 0;
+
+  re_free (preg->fastmap);
+  preg->fastmap = NULL;
+
+  re_free (preg->translate);
+  preg->translate = NULL;
+}
+#ifdef _LIBC
+weak_alias (__regfree, regfree)
+#endif
+\f
+/* Entry points compatible with 4.2 BSD regex library.  We don't define
+   them unless specifically requested.  */
+
+#if defined _REGEX_RE_COMP || defined _LIBC
+
+/* BSD has one and only one pattern buffer.  */
+static struct re_pattern_buffer re_comp_buf;
+
+char *
+# ifdef _LIBC
+/* Make these definitions weak in libc, so POSIX programs can redefine
+   these names if they don't use our functions, and still use
+   regcomp/regexec above without link errors.  */
+weak_function
+# endif
+re_comp (s)
+     const char *s;
+{
+  reg_errcode_t ret;
+  char *fastmap;
+
+  if (!s)
+    {
+      if (!re_comp_buf.buffer)
+       return gettext ("No previous regular expression");
+      return 0;
+    }
+
+  if (re_comp_buf.buffer)
+    {
+      fastmap = re_comp_buf.fastmap;
+      re_comp_buf.fastmap = NULL;
+      __regfree (&re_comp_buf);
+      memset (&re_comp_buf, '\0', sizeof (re_comp_buf));
+      re_comp_buf.fastmap = fastmap;
+    }
+
+  if (re_comp_buf.fastmap == NULL)
+    {
+      re_comp_buf.fastmap = (char *) malloc (SBC_MAX);
+      if (re_comp_buf.fastmap == NULL)
+       return (char *) gettext (__re_error_msgid
+                                + __re_error_msgid_idx[(int) REG_ESPACE]);
+    }
+
+  /* Since `re_exec' always passes NULL for the `regs' argument, we
+     don't need to initialize the pattern buffer fields which affect it.  */
+
+  /* Match anchors at newlines.  */
+  re_comp_buf.newline_anchor = 1;
+
+  ret = re_compile_internal (&re_comp_buf, s, strlen (s), re_syntax_options);
+
+  if (!ret)
+    return NULL;
+
+  /* Yes, we're discarding `const' here if !HAVE_LIBINTL.  */
+  return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]);
+}
+
+#ifdef _LIBC
+libc_freeres_fn (free_mem)
+{
+  __regfree (&re_comp_buf);
+}
+#endif
+
+#endif /* _REGEX_RE_COMP */
+\f
+/* Internal entry point.
+   Compile the regular expression PATTERN, whose length is LENGTH.
+   SYNTAX indicate regular expression's syntax.  */
+
+static reg_errcode_t
+re_compile_internal (regex_t *preg, const char * pattern, size_t length,
+                    reg_syntax_t syntax)
+{
+  reg_errcode_t err = REG_NOERROR;
+  re_dfa_t *dfa;
+  re_string_t regexp;
+
+  /* Initialize the pattern buffer.  */
+  preg->fastmap_accurate = 0;
+  preg->syntax = syntax;
+  preg->not_bol = preg->not_eol = 0;
+  preg->used = 0;
+  preg->re_nsub = 0;
+  preg->can_be_null = 0;
+  preg->regs_allocated = REGS_UNALLOCATED;
+
+  /* Initialize the dfa.  */
+  dfa = (re_dfa_t *) preg->buffer;
+  if (BE (preg->allocated < sizeof (re_dfa_t), 0))
+    {
+      /* If zero allocated, but buffer is non-null, try to realloc
+        enough space.  This loses if buffer's address is bogus, but
+        that is the user's responsibility.  If ->buffer is NULL this
+        is a simple allocation.  */
+      dfa = re_realloc (preg->buffer, re_dfa_t, 1);
+      if (dfa == NULL)
+       return REG_ESPACE;
+      preg->allocated = sizeof (re_dfa_t);
+      preg->buffer = (unsigned char *) dfa;
+    }
+  preg->used = sizeof (re_dfa_t);
+
+  err = init_dfa (dfa, length);
+  if (BE (err != REG_NOERROR, 0))
+    {
+      free_dfa_content (dfa);
+      preg->buffer = NULL;
+      preg->allocated = 0;
+      return err;
+    }
+#ifdef DEBUG
+  /* Note: length+1 will not overflow since it is checked in init_dfa.  */
+  dfa->re_str = re_malloc (char, length + 1);
+  strncpy (dfa->re_str, pattern, length + 1);
+#endif
+
+  __libc_lock_init (dfa->lock);
+
+  err = re_string_construct (&regexp, pattern, length, preg->translate,
+                            (syntax & RE_ICASE) != 0, dfa);
+  if (BE (err != REG_NOERROR, 0))
+    {
+    re_compile_internal_free_return:
+      free_workarea_compile (preg);
+      re_string_destruct (&regexp);
+      free_dfa_content (dfa);
+      preg->buffer = NULL;
+      preg->allocated = 0;
+      return err;
+    }
+
+  /* Parse the regular expression, and build a structure tree.  */
+  preg->re_nsub = 0;
+  dfa->str_tree = parse (&regexp, preg, syntax, &err);
+  if (BE (dfa->str_tree == NULL, 0))
+    goto re_compile_internal_free_return;
+
+  /* Analyze the tree and create the nfa.  */
+  err = analyze (preg);
+  if (BE (err != REG_NOERROR, 0))
+    goto re_compile_internal_free_return;
+
+#ifdef RE_ENABLE_I18N
+  /* If possible, do searching in single byte encoding to speed things up.  */
+  if (dfa->is_utf8 && !(syntax & RE_ICASE) && preg->translate == NULL)
+    optimize_utf8 (dfa);
+#endif
+
+  /* Then create the initial state of the dfa.  */
+  err = create_initial_state (dfa);
+
+  /* Release work areas.  */
+  free_workarea_compile (preg);
+  re_string_destruct (&regexp);
+
+  if (BE (err != REG_NOERROR, 0))
+    {
+      free_dfa_content (dfa);
+      preg->buffer = NULL;
+      preg->allocated = 0;
+    }
+
+  return err;
+}
+
+/* Initialize DFA.  We use the length of the regular expression PAT_LEN
+   as the initial length of some arrays.  */
+
+static reg_errcode_t
+init_dfa (re_dfa_t *dfa, size_t pat_len)
+{
+  __re_size_t table_size;
+#ifndef _LIBC
+  char *codeset_name;
+#endif
+#ifdef RE_ENABLE_I18N
+  size_t max_i18n_object_size = MAX (sizeof (wchar_t), sizeof (wctype_t));
+#else
+  size_t max_i18n_object_size = 0;
+#endif
+  size_t max_object_size =
+    MAX (sizeof (struct re_state_table_entry),
+        MAX (sizeof (re_token_t),
+             MAX (sizeof (re_node_set),
+                  MAX (sizeof (regmatch_t),
+                       max_i18n_object_size))));
+
+  memset (dfa, '\0', sizeof (re_dfa_t));
+
+  /* Force allocation of str_tree_storage the first time.  */
+  dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE;
+
+  /* Avoid overflows.  The extra "/ 2" is for the table_size doubling
+     calculation below, and for similar doubling calculations
+     elsewhere.  And it's <= rather than <, because some of the
+     doubling calculations add 1 afterwards.  */
+  if (BE (SIZE_MAX / max_object_size / 2 <= pat_len, 0))
+    return REG_ESPACE;
+
+  dfa->nodes_alloc = pat_len + 1;
+  dfa->nodes = re_malloc (re_token_t, dfa->nodes_alloc);
+
+  /*  table_size = 2 ^ ceil(log pat_len) */
+  for (table_size = 1; ; table_size <<= 1)
+    if (table_size > pat_len)
+      break;
+
+  dfa->state_table = calloc (sizeof (struct re_state_table_entry), table_size);
+  dfa->state_hash_mask = table_size - 1;
+
+  dfa->mb_cur_max = MB_CUR_MAX;
+#ifdef _LIBC
+  if (dfa->mb_cur_max == 6
+      && strcmp (_NL_CURRENT (LC_CTYPE, _NL_CTYPE_CODESET_NAME), "UTF-8") == 0)
+    dfa->is_utf8 = 1;
+  dfa->map_notascii = (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_TO_NONASCII)
+                      != 0);
+#else
+  codeset_name = nl_langinfo (CODESET);
+  if (strcasecmp (codeset_name, "UTF-8") == 0
+      || strcasecmp (codeset_name, "UTF8") == 0)
+    dfa->is_utf8 = 1;
+
+  /* We check exhaustively in the loop below if this charset is a
+     superset of ASCII.  */
+  dfa->map_notascii = 0;
+#endif
+
+#ifdef RE_ENABLE_I18N
+  if (dfa->mb_cur_max > 1)
+    {
+      if (dfa->is_utf8)
+       dfa->sb_char = (re_bitset_ptr_t) utf8_sb_map;
+      else
+       {
+         int i, j, ch;
+
+         dfa->sb_char = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1);
+         if (BE (dfa->sb_char == NULL, 0))
+           return REG_ESPACE;
+
+         /* Set the bits corresponding to single byte chars.  */
+         for (i = 0, ch = 0; i < BITSET_WORDS; ++i)
+           for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch)
+             {
+               wint_t wch = __btowc (ch);
+               if (wch != WEOF)
+                 dfa->sb_char[i] |= (bitset_word_t) 1 << j;
+# ifndef _LIBC
+               if (isascii (ch) && wch != ch)
+                 dfa->map_notascii = 1;
+# endif
+             }
+       }
+    }
+#endif
+
+  if (BE (dfa->nodes == NULL || dfa->state_table == NULL, 0))
+    return REG_ESPACE;
+  return REG_NOERROR;
+}
+
+/* Initialize WORD_CHAR table, which indicate which character is
+   "word".  In this case "word" means that it is the word construction
+   character used by some operators like "\<", "\>", etc.  */
+
+static void
+internal_function
+init_word_char (re_dfa_t *dfa)
+{
+  int i, j, ch;
+  dfa->word_ops_used = 1;
+  for (i = 0, ch = 0; i < BITSET_WORDS; ++i)
+    for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch)
+      if (isalnum (ch) || ch == '_')
+       dfa->word_char[i] |= (bitset_word_t) 1 << j;
+}
+
+/* Free the work area which are only used while compiling.  */
+
+static void
+free_workarea_compile (regex_t *preg)
+{
+  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
+  bin_tree_storage_t *storage, *next;
+  for (storage = dfa->str_tree_storage; storage; storage = next)
+    {
+      next = storage->next;
+      re_free (storage);
+    }
+  dfa->str_tree_storage = NULL;
+  dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE;
+  dfa->str_tree = NULL;
+  re_free (dfa->org_indices);
+  dfa->org_indices = NULL;
+}
+
+/* Create initial states for all contexts.  */
+
+static reg_errcode_t
+create_initial_state (re_dfa_t *dfa)
+{
+  Idx first, i;
+  reg_errcode_t err;
+  re_node_set init_nodes;
+
+  /* Initial states have the epsilon closure of the node which is
+     the first node of the regular expression.  */
+  first = dfa->str_tree->first->node_idx;
+  dfa->init_node = first;
+  err = re_node_set_init_copy (&init_nodes, dfa->eclosures + first);
+  if (BE (err != REG_NOERROR, 0))
+    return err;
+
+  /* The back-references which are in initial states can epsilon transit,
+     since in this case all of the subexpressions can be null.
+     Then we add epsilon closures of the nodes which are the next nodes of
+     the back-references.  */
+  if (dfa->nbackref > 0)
+    for (i = 0; i < init_nodes.nelem; ++i)
+      {
+       Idx node_idx = init_nodes.elems[i];
+       re_token_type_t type = dfa->nodes[node_idx].type;
+
+       Idx clexp_idx;
+       if (type != OP_BACK_REF)
+         continue;
+       for (clexp_idx = 0; clexp_idx < init_nodes.nelem; ++clexp_idx)
+         {
+           re_token_t *clexp_node;
+           clexp_node = dfa->nodes + init_nodes.elems[clexp_idx];
+           if (clexp_node->type == OP_CLOSE_SUBEXP
+               && clexp_node->opr.idx == dfa->nodes[node_idx].opr.idx)
+             break;
+         }
+       if (clexp_idx == init_nodes.nelem)
+         continue;
+
+       if (type == OP_BACK_REF)
+         {
+           Idx dest_idx = dfa->edests[node_idx].elems[0];
+           if (!re_node_set_contains (&init_nodes, dest_idx))
+             {
+               reg_errcode_t merge_err
+                  = re_node_set_merge (&init_nodes, dfa->eclosures + dest_idx);
+               if (merge_err != REG_NOERROR)
+                 return merge_err;
+               i = 0;
+             }
+         }
+      }
+
+  /* It must be the first time to invoke acquire_state.  */
+  dfa->init_state = re_acquire_state_context (&err, dfa, &init_nodes, 0);
+  /* We don't check ERR here, since the initial state must not be NULL.  */
+  if (BE (dfa->init_state == NULL, 0))
+    return err;
+  if (dfa->init_state->has_constraint)
+    {
+      dfa->init_state_word = re_acquire_state_context (&err, dfa, &init_nodes,
+                                                      CONTEXT_WORD);
+      dfa->init_state_nl = re_acquire_state_context (&err, dfa, &init_nodes,
+                                                    CONTEXT_NEWLINE);
+      dfa->init_state_begbuf = re_acquire_state_context (&err, dfa,
+                                                        &init_nodes,
+                                                        CONTEXT_NEWLINE
+                                                        | CONTEXT_BEGBUF);
+      if (BE (dfa->init_state_word == NULL || dfa->init_state_nl == NULL
+             || dfa->init_state_begbuf == NULL, 0))
+       return err;
+    }
+  else
+    dfa->init_state_word = dfa->init_state_nl
+      = dfa->init_state_begbuf = dfa->init_state;
+
+  re_node_set_free (&init_nodes);
+  return REG_NOERROR;
+}
+\f
+#ifdef RE_ENABLE_I18N
+/* If it is possible to do searching in single byte encoding instead of UTF-8
+   to speed things up, set dfa->mb_cur_max to 1, clear is_utf8 and change
+   DFA nodes where needed.  */
+
+static void
+optimize_utf8 (re_dfa_t *dfa)
+{
+  Idx node;
+  int i;
+  bool mb_chars = false;
+  bool has_period = false;
+
+  for (node = 0; node < dfa->nodes_len; ++node)
+    switch (dfa->nodes[node].type)
+      {
+      case CHARACTER:
+       if (dfa->nodes[node].opr.c >= ASCII_CHARS)
+         mb_chars = true;
+       break;
+      case ANCHOR:
+       switch (dfa->nodes[node].opr.ctx_type)
+         {
+         case LINE_FIRST:
+         case LINE_LAST:
+         case BUF_FIRST:
+         case BUF_LAST:
+           break;
+         default:
+           /* Word anchors etc. cannot be handled.  It's okay to test
+              opr.ctx_type since constraints (for all DFA nodes) are
+              created by ORing one or more opr.ctx_type values.  */
+           return;
+         }
+       break;
+      case OP_PERIOD:
+       has_period = true;
+       break;
+      case OP_BACK_REF:
+      case OP_ALT:
+      case END_OF_RE:
+      case OP_DUP_ASTERISK:
+      case OP_OPEN_SUBEXP:
+      case OP_CLOSE_SUBEXP:
+       break;
+      case COMPLEX_BRACKET:
+       return;
+      case SIMPLE_BRACKET:
+       /* Just double check.  */
+       {
+         int rshift = (ASCII_CHARS % BITSET_WORD_BITS == 0
+                       ? 0
+                       : BITSET_WORD_BITS - ASCII_CHARS % BITSET_WORD_BITS);
+         for (i = ASCII_CHARS / BITSET_WORD_BITS; i < BITSET_WORDS; ++i)
+           {
+             if (dfa->nodes[node].opr.sbcset[i] >> rshift != 0)
+               return;
+             rshift = 0;
+           }
+       }
+       break;
+      default:
+       abort ();
+      }
+
+  if (mb_chars || has_period)
+    for (node = 0; node < dfa->nodes_len; ++node)
+      {
+       if (dfa->nodes[node].type == CHARACTER
+           && dfa->nodes[node].opr.c >= ASCII_CHARS)
+         dfa->nodes[node].mb_partial = 0;
+       else if (dfa->nodes[node].type == OP_PERIOD)
+         dfa->nodes[node].type = OP_UTF8_PERIOD;
+      }
+
+  /* The search can be in single byte locale.  */
+  dfa->mb_cur_max = 1;
+  dfa->is_utf8 = 0;
+  dfa->has_mb_node = dfa->nbackref > 0 || has_period;
+}
+#endif
+\f
+/* Analyze the structure tree, and calculate "first", "next", "edest",
+   "eclosure", and "inveclosure".  */
+
+static reg_errcode_t
+analyze (regex_t *preg)
+{
+  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
+  reg_errcode_t ret;
+
+  /* Allocate arrays.  */
+  dfa->nexts = re_malloc (Idx, dfa->nodes_alloc);
+  dfa->org_indices = re_malloc (Idx, dfa->nodes_alloc);
+  dfa->edests = re_malloc (re_node_set, dfa->nodes_alloc);
+  dfa->eclosures = re_malloc (re_node_set, dfa->nodes_alloc);
+  if (BE (dfa->nexts == NULL || dfa->org_indices == NULL || dfa->edests == NULL
+         || dfa->eclosures == NULL, 0))
+    return REG_ESPACE;
+
+  dfa->subexp_map = re_malloc (Idx, preg->re_nsub);
+  if (dfa->subexp_map != NULL)
+    {
+      Idx i;
+      for (i = 0; i < preg->re_nsub; i++)
+       dfa->subexp_map[i] = i;
+      preorder (dfa->str_tree, optimize_subexps, dfa);
+      for (i = 0; i < preg->re_nsub; i++)
+       if (dfa->subexp_map[i] != i)
+         break;
+      if (i == preg->re_nsub)
+       {
+         free (dfa->subexp_map);
+         dfa->subexp_map = NULL;
+       }
+    }
+
+  ret = postorder (dfa->str_tree, lower_subexps, preg);
+  if (BE (ret != REG_NOERROR, 0))
+    return ret;
+  ret = postorder (dfa->str_tree, calc_first, dfa);
+  if (BE (ret != REG_NOERROR, 0))
+    return ret;
+  preorder (dfa->str_tree, calc_next, dfa);
+  ret = preorder (dfa->str_tree, link_nfa_nodes, dfa);
+  if (BE (ret != REG_NOERROR, 0))
+    return ret;
+  ret = calc_eclosure (dfa);
+  if (BE (ret != REG_NOERROR, 0))
+    return ret;
+
+  /* We only need this during the prune_impossible_nodes pass in regexec.c;
+     skip it if p_i_n will not run, as calc_inveclosure can be quadratic.  */
+  if ((!preg->no_sub && preg->re_nsub > 0 && dfa->has_plural_match)
+      || dfa->nbackref)
+    {
+      dfa->inveclosures = re_malloc (re_node_set, dfa->nodes_len);
+      if (BE (dfa->inveclosures == NULL, 0))
+       return REG_ESPACE;
+      ret = calc_inveclosure (dfa);
+    }
+
+  return ret;
+}
+
+/* Our parse trees are very unbalanced, so we cannot use a stack to
+   implement parse tree visits.  Instead, we use parent pointers and
+   some hairy code in these two functions.  */
+static reg_errcode_t
+postorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)),
+          void *extra)
+{
+  bin_tree_t *node, *prev;
+
+  for (node = root; ; )
+    {
+      /* Descend down the tree, preferably to the left (or to the right
+        if that's the only child).  */
+      while (node->left || node->right)
+       if (node->left)
+         node = node->left;
+       else
+         node = node->right;
+
+      do
+       {
+         reg_errcode_t err = fn (extra, node);
+         if (BE (err != REG_NOERROR, 0))
+           return err;
+         if (node->parent == NULL)
+           return REG_NOERROR;
+         prev = node;
+         node = node->parent;
+       }
+      /* Go up while we have a node that is reached from the right.  */
+      while (node->right == prev || node->right == NULL);
+      node = node->right;
+    }
+}
+
+static reg_errcode_t
+preorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)),
+         void *extra)
+{
+  bin_tree_t *node;
+
+  for (node = root; ; )
+    {
+      reg_errcode_t err = fn (extra, node);
+      if (BE (err != REG_NOERROR, 0))
+       return err;
+
+      /* Go to the left node, or up and to the right.  */
+      if (node->left)
+       node = node->left;
+      else
+       {
+         bin_tree_t *prev = NULL;
+         while (node->right == prev || node->right == NULL)
+           {
+             prev = node;
+             node = node->parent;
+             if (!node)
+               return REG_NOERROR;
+           }
+         node = node->right;
+       }
+    }
+}
+
+/* Optimization pass: if a SUBEXP is entirely contained, strip it and tell
+   re_search_internal to map the inner one's opr.idx to this one's.  Adjust
+   backreferences as well.  Requires a preorder visit.  */
+static reg_errcode_t
+optimize_subexps (void *extra, bin_tree_t *node)
+{
+  re_dfa_t *dfa = (re_dfa_t *) extra;
+
+  if (node->token.type == OP_BACK_REF && dfa->subexp_map)
+    {
+      int idx = node->token.opr.idx;
+      node->token.opr.idx = dfa->subexp_map[idx];
+      dfa->used_bkref_map |= 1 << node->token.opr.idx;
+    }
+
+  else if (node->token.type == SUBEXP
+          && node->left && node->left->token.type == SUBEXP)
+    {
+      Idx other_idx = node->left->token.opr.idx;
+
+      node->left = node->left->left;
+      if (node->left)
+       node->left->parent = node;
+
+      dfa->subexp_map[other_idx] = dfa->subexp_map[node->token.opr.idx];
+      if (other_idx < BITSET_WORD_BITS)
+       dfa->used_bkref_map &= ~((bitset_word_t) 1 << other_idx);
+    }
+
+  return REG_NOERROR;
+}
+
+/* Lowering pass: Turn each SUBEXP node into the appropriate concatenation
+   of OP_OPEN_SUBEXP, the body of the SUBEXP (if any) and OP_CLOSE_SUBEXP.  */
+static reg_errcode_t
+lower_subexps (void *extra, bin_tree_t *node)
+{
+  regex_t *preg = (regex_t *) extra;
+  reg_errcode_t err = REG_NOERROR;
+
+  if (node->left && node->left->token.type == SUBEXP)
+    {
+      node->left = lower_subexp (&err, preg, node->left);
+      if (node->left)
+       node->left->parent = node;
+    }
+  if (node->right && node->right->token.type == SUBEXP)
+    {
+      node->right = lower_subexp (&err, preg, node->right);
+      if (node->right)
+       node->right->parent = node;
+    }
+
+  return err;
+}
+
+static bin_tree_t *
+lower_subexp (reg_errcode_t *err, regex_t *preg, bin_tree_t *node)
+{
+  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
+  bin_tree_t *body = node->left;
+  bin_tree_t *op, *cls, *tree1, *tree;
+
+  if (preg->no_sub
+      /* We do not optimize empty subexpressions, because otherwise we may
+        have bad CONCAT nodes with NULL children.  This is obviously not
+        very common, so we do not lose much.  An example that triggers
+        this case is the sed "script" /\(\)/x.  */
+      && node->left != NULL
+      && (node->token.opr.idx >= BITSET_WORD_BITS
+         || !(dfa->used_bkref_map
+              & ((bitset_word_t) 1 << node->token.opr.idx))))
+    return node->left;
+
+  /* Convert the SUBEXP node to the concatenation of an
+     OP_OPEN_SUBEXP, the contents, and an OP_CLOSE_SUBEXP.  */
+  op = create_tree (dfa, NULL, NULL, OP_OPEN_SUBEXP);
+  cls = create_tree (dfa, NULL, NULL, OP_CLOSE_SUBEXP);
+  tree1 = body ? create_tree (dfa, body, cls, CONCAT) : cls;
+  tree = create_tree (dfa, op, tree1, CONCAT);
+  if (BE (tree == NULL || tree1 == NULL || op == NULL || cls == NULL, 0))
+    {
+      *err = REG_ESPACE;
+      return NULL;
+    }
+
+  op->token.opr.idx = cls->token.opr.idx = node->token.opr.idx;
+  op->token.opt_subexp = cls->token.opt_subexp = node->token.opt_subexp;
+  return tree;
+}
+
+/* Pass 1 in building the NFA: compute FIRST and create unlinked automaton
+   nodes.  Requires a postorder visit.  */
+static reg_errcode_t
+calc_first (void *extra, bin_tree_t *node)
+{
+  re_dfa_t *dfa = (re_dfa_t *) extra;
+  if (node->token.type == CONCAT)
+    {
+      node->first = node->left->first;
+      node->node_idx = node->left->node_idx;
+    }
+  else
+    {
+      node->first = node;
+      node->node_idx = re_dfa_add_node (dfa, node->token);
+      if (BE (node->node_idx == REG_MISSING, 0))
+       return REG_ESPACE;
+      if (node->token.type == ANCHOR)
+       dfa->nodes[node->node_idx].constraint = node->token.opr.ctx_type;
+    }
+  return REG_NOERROR;
+}
+
+/* Pass 2: compute NEXT on the tree.  Preorder visit.  */
+static reg_errcode_t
+calc_next (void *extra, bin_tree_t *node)
+{
+  switch (node->token.type)
+    {
+    case OP_DUP_ASTERISK:
+      node->left->next = node;
+      break;
+    case CONCAT:
+      node->left->next = node->right->first;
+      node->right->next = node->next;
+      break;
+    default:
+      if (node->left)
+       node->left->next = node->next;
+      if (node->right)
+       node->right->next = node->next;
+      break;
+    }
+  return REG_NOERROR;
+}
+
+/* Pass 3: link all DFA nodes to their NEXT node (any order will do).  */
+static reg_errcode_t
+link_nfa_nodes (void *extra, bin_tree_t *node)
+{
+  re_dfa_t *dfa = (re_dfa_t *) extra;
+  Idx idx = node->node_idx;
+  reg_errcode_t err = REG_NOERROR;
+
+  switch (node->token.type)
+    {
+    case CONCAT:
+      break;
+
+    case END_OF_RE:
+      assert (node->next == NULL);
+      break;
+
+    case OP_DUP_ASTERISK:
+    case OP_ALT:
+      {
+       Idx left, right;
+       dfa->has_plural_match = 1;
+       if (node->left != NULL)
+         left = node->left->first->node_idx;
+       else
+         left = node->next->node_idx;
+       if (node->right != NULL)
+         right = node->right->first->node_idx;
+       else
+         right = node->next->node_idx;
+       assert (REG_VALID_INDEX (left));
+       assert (REG_VALID_INDEX (right));
+       err = re_node_set_init_2 (dfa->edests + idx, left, right);
+      }
+      break;
+
+    case ANCHOR:
+    case OP_OPEN_SUBEXP:
+    case OP_CLOSE_SUBEXP:
+      err = re_node_set_init_1 (dfa->edests + idx, node->next->node_idx);
+      break;
+
+    case OP_BACK_REF:
+      dfa->nexts[idx] = node->next->node_idx;
+      if (node->token.type == OP_BACK_REF)
+       err = re_node_set_init_1 (dfa->edests + idx, dfa->nexts[idx]);
+      break;
+
+    default:
+      assert (!IS_EPSILON_NODE (node->token.type));
+      dfa->nexts[idx] = node->next->node_idx;
+      break;
+    }
+
+  return err;
+}
+
+/* Duplicate the epsilon closure of the node ROOT_NODE.
+   Note that duplicated nodes have constraint INIT_CONSTRAINT in addition
+   to their own constraint.  */
+
+static reg_errcode_t
+internal_function
+duplicate_node_closure (re_dfa_t *dfa, Idx top_org_node, Idx top_clone_node,
+                       Idx root_node, unsigned int init_constraint)
+{
+  Idx org_node, clone_node;
+  bool ok;
+  unsigned int constraint = init_constraint;
+  for (org_node = top_org_node, clone_node = top_clone_node;;)
+    {
+      Idx org_dest, clone_dest;
+      if (dfa->nodes[org_node].type == OP_BACK_REF)
+       {
+         /* If the back reference epsilon-transit, its destination must
+            also have the constraint.  Then duplicate the epsilon closure
+            of the destination of the back reference, and store it in
+            edests of the back reference.  */
+         org_dest = dfa->nexts[org_node];
+         re_node_set_empty (dfa->edests + clone_node);
+         clone_dest = duplicate_node (dfa, org_dest, constraint);
+         if (BE (clone_dest == REG_MISSING, 0))
+           return REG_ESPACE;
+         dfa->nexts[clone_node] = dfa->nexts[org_node];
+         ok = re_node_set_insert (dfa->edests + clone_node, clone_dest);
+         if (BE (! ok, 0))
+           return REG_ESPACE;
+       }
+      else if (dfa->edests[org_node].nelem == 0)
+       {
+         /* In case of the node can't epsilon-transit, don't duplicate the
+            destination and store the original destination as the
+            destination of the node.  */
+         dfa->nexts[clone_node] = dfa->nexts[org_node];
+         break;
+       }
+      else if (dfa->edests[org_node].nelem == 1)
+       {
+         /* In case of the node can epsilon-transit, and it has only one
+            destination.  */
+         org_dest = dfa->edests[org_node].elems[0];
+         re_node_set_empty (dfa->edests + clone_node);
+         /* If the node is root_node itself, it means the epsilon closure
+            has a loop.  Then tie it to the destination of the root_node.  */
+         if (org_node == root_node && clone_node != org_node)
+           {
+             ok = re_node_set_insert (dfa->edests + clone_node, org_dest);
+             if (BE (! ok, 0))
+               return REG_ESPACE;
+             break;
+           }
+         /* In case the node has another constraint, append it.  */
+         constraint |= dfa->nodes[org_node].constraint;
+         clone_dest = duplicate_node (dfa, org_dest, constraint);
+         if (BE (clone_dest == REG_MISSING, 0))
+           return REG_ESPACE;
+         ok = re_node_set_insert (dfa->edests + clone_node, clone_dest);
+         if (BE (! ok, 0))
+           return REG_ESPACE;
+       }
+      else /* dfa->edests[org_node].nelem == 2 */
+       {
+         /* In case of the node can epsilon-transit, and it has two
+            destinations. In the bin_tree_t and DFA, that's '|' and '*'.   */
+         org_dest = dfa->edests[org_node].elems[0];
+         re_node_set_empty (dfa->edests + clone_node);
+         /* Search for a duplicated node which satisfies the constraint.  */
+         clone_dest = search_duplicated_node (dfa, org_dest, constraint);
+         if (clone_dest == REG_MISSING)
+           {
+             /* There is no such duplicated node, create a new one.  */
+             reg_errcode_t err;
+             clone_dest = duplicate_node (dfa, org_dest, constraint);
+             if (BE (clone_dest == REG_MISSING, 0))
+               return REG_ESPACE;
+             ok = re_node_set_insert (dfa->edests + clone_node, clone_dest);
+             if (BE (! ok, 0))
+               return REG_ESPACE;
+             err = duplicate_node_closure (dfa, org_dest, clone_dest,
+                                           root_node, constraint);
+             if (BE (err != REG_NOERROR, 0))
+               return err;
+           }
+         else
+           {
+             /* There is a duplicated node which satisfies the constraint,
+                use it to avoid infinite loop.  */
+             ok = re_node_set_insert (dfa->edests + clone_node, clone_dest);
+             if (BE (! ok, 0))
+               return REG_ESPACE;
+           }
+
+         org_dest = dfa->edests[org_node].elems[1];
+         clone_dest = duplicate_node (dfa, org_dest, constraint);
+         if (BE (clone_dest == REG_MISSING, 0))
+           return REG_ESPACE;
+         ok = re_node_set_insert (dfa->edests + clone_node, clone_dest);
+         if (BE (! ok, 0))
+           return REG_ESPACE;
+       }
+      org_node = org_dest;
+      clone_node = clone_dest;
+    }
+  return REG_NOERROR;
+}
+
+/* Search for a node which is duplicated from the node ORG_NODE, and
+   satisfies the constraint CONSTRAINT.  */
+
+static Idx
+search_duplicated_node (const re_dfa_t *dfa, Idx org_node,
+                       unsigned int constraint)
+{
+  Idx idx;
+  for (idx = dfa->nodes_len - 1; dfa->nodes[idx].duplicated && idx > 0; --idx)
+    {
+      if (org_node == dfa->org_indices[idx]
+         && constraint == dfa->nodes[idx].constraint)
+       return idx; /* Found.  */
+    }
+  return REG_MISSING; /* Not found.  */
+}
+
+/* Duplicate the node whose index is ORG_IDX and set the constraint CONSTRAINT.
+   Return the index of the new node, or REG_MISSING if insufficient storage is
+   available.  */
+
+static Idx
+duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint)
+{
+  Idx dup_idx = re_dfa_add_node (dfa, dfa->nodes[org_idx]);
+  if (BE (dup_idx != REG_MISSING, 1))
+    {
+      dfa->nodes[dup_idx].constraint = constraint;
+      dfa->nodes[dup_idx].constraint |= dfa->nodes[org_idx].constraint;
+      dfa->nodes[dup_idx].duplicated = 1;
+
+      /* Store the index of the original node.  */
+      dfa->org_indices[dup_idx] = org_idx;
+    }
+  return dup_idx;
+}
+
+static reg_errcode_t
+calc_inveclosure (re_dfa_t *dfa)
+{
+  Idx src, idx;
+  bool ok;
+  for (idx = 0; idx < dfa->nodes_len; ++idx)
+    re_node_set_init_empty (dfa->inveclosures + idx);
+
+  for (src = 0; src < dfa->nodes_len; ++src)
+    {
+      Idx *elems = dfa->eclosures[src].elems;
+      for (idx = 0; idx < dfa->eclosures[src].nelem; ++idx)
+       {
+         ok = re_node_set_insert_last (dfa->inveclosures + elems[idx], src);
+         if (BE (! ok, 0))
+           return REG_ESPACE;
+       }
+    }
+
+  return REG_NOERROR;
+}
+
+/* Calculate "eclosure" for all the node in DFA.  */
+
+static reg_errcode_t
+calc_eclosure (re_dfa_t *dfa)
+{
+  Idx node_idx;
+  bool incomplete;
+#ifdef DEBUG
+  assert (dfa->nodes_len > 0);
+#endif
+  incomplete = false;
+  /* For each nodes, calculate epsilon closure.  */
+  for (node_idx = 0; ; ++node_idx)
+    {
+      reg_errcode_t err;
+      re_node_set eclosure_elem;
+      if (node_idx == dfa->nodes_len)
+       {
+         if (!incomplete)
+           break;
+         incomplete = false;
+         node_idx = 0;
+       }
+
+#ifdef DEBUG
+      assert (dfa->eclosures[node_idx].nelem != REG_MISSING);
+#endif
+
+      /* If we have already calculated, skip it.  */
+      if (dfa->eclosures[node_idx].nelem != 0)
+       continue;
+      /* Calculate epsilon closure of `node_idx'.  */
+      err = calc_eclosure_iter (&eclosure_elem, dfa, node_idx, true);
+      if (BE (err != REG_NOERROR, 0))
+       return err;
+
+      if (dfa->eclosures[node_idx].nelem == 0)
+       {
+         incomplete = true;
+         re_node_set_free (&eclosure_elem);
+       }
+    }
+  return REG_NOERROR;
+}
+
+/* Calculate epsilon closure of NODE.  */
+
+static reg_errcode_t
+calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, Idx node, bool root)
+{
+  reg_errcode_t err;
+  Idx i;
+  re_node_set eclosure;
+  bool ok;
+  bool incomplete = false;
+  err = re_node_set_alloc (&eclosure, dfa->edests[node].nelem + 1);
+  if (BE (err != REG_NOERROR, 0))
+    return err;
+
+  /* This indicates that we are calculating this node now.
+     We reference this value to avoid infinite loop.  */
+  dfa->eclosures[node].nelem = REG_MISSING;
+
+  /* If the current node has constraints, duplicate all nodes
+     since they must inherit the constraints.  */
+  if (dfa->nodes[node].constraint
+      && dfa->edests[node].nelem
+      && !dfa->nodes[dfa->edests[node].elems[0]].duplicated)
+    {
+      err = duplicate_node_closure (dfa, node, node, node,
+                                   dfa->nodes[node].constraint);
+      if (BE (err != REG_NOERROR, 0))
+       return err;
+    }
+
+  /* Expand each epsilon destination nodes.  */
+  if (IS_EPSILON_NODE(dfa->nodes[node].type))
+    for (i = 0; i < dfa->edests[node].nelem; ++i)
+      {
+       re_node_set eclosure_elem;
+       Idx edest = dfa->edests[node].elems[i];
+       /* If calculating the epsilon closure of `edest' is in progress,
+          return intermediate result.  */
+       if (dfa->eclosures[edest].nelem == REG_MISSING)
+         {
+           incomplete = true;
+           continue;
+         }
+       /* If we haven't calculated the epsilon closure of `edest' yet,
+          calculate now. Otherwise use calculated epsilon closure.  */
+       if (dfa->eclosures[edest].nelem == 0)
+         {
+           err = calc_eclosure_iter (&eclosure_elem, dfa, edest, false);
+           if (BE (err != REG_NOERROR, 0))
+             return err;
+         }
+       else
+         eclosure_elem = dfa->eclosures[edest];
+       /* Merge the epsilon closure of `edest'.  */
+       err = re_node_set_merge (&eclosure, &eclosure_elem);
+       if (BE (err != REG_NOERROR, 0))
+         return err;
+       /* If the epsilon closure of `edest' is incomplete,
+          the epsilon closure of this node is also incomplete.  */
+       if (dfa->eclosures[edest].nelem == 0)
+         {
+           incomplete = true;
+           re_node_set_free (&eclosure_elem);
+         }
+      }
+
+  /* An epsilon closure includes itself.  */
+  ok = re_node_set_insert (&eclosure, node);
+  if (BE (! ok, 0))
+    return REG_ESPACE;
+  if (incomplete && !root)
+    dfa->eclosures[node].nelem = 0;
+  else
+    dfa->eclosures[node] = eclosure;
+  *new_set = eclosure;
+  return REG_NOERROR;
+}
+\f
+/* Functions for token which are used in the parser.  */
+
+/* Fetch a token from INPUT.
+   We must not use this function inside bracket expressions.  */
+
+static void
+internal_function
+fetch_token (re_token_t *result, re_string_t *input, reg_syntax_t syntax)
+{
+  re_string_skip_bytes (input, peek_token (result, input, syntax));
+}
+
+/* Peek a token from INPUT, and return the length of the token.
+   We must not use this function inside bracket expressions.  */
+
+static int
+internal_function
+peek_token (re_token_t *token, re_string_t *input, reg_syntax_t syntax)
+{
+  unsigned char c;
+
+  if (re_string_eoi (input))
+    {
+      token->type = END_OF_RE;
+      return 0;
+    }
+
+  c = re_string_peek_byte (input, 0);
+  token->opr.c = c;
+
+  token->word_char = 0;
+#ifdef RE_ENABLE_I18N
+  token->mb_partial = 0;
+  if (input->mb_cur_max > 1 &&
+      !re_string_first_byte (input, re_string_cur_idx (input)))
+    {
+      token->type = CHARACTER;
+      token->mb_partial = 1;
+      return 1;
+    }
+#endif
+  if (c == '\\')
+    {
+      unsigned char c2;
+      if (re_string_cur_idx (input) + 1 >= re_string_length (input))
+       {
+         token->type = BACK_SLASH;
+         return 1;
+       }
+
+      c2 = re_string_peek_byte_case (input, 1);
+      token->opr.c = c2;
+      token->type = CHARACTER;
+#ifdef RE_ENABLE_I18N
+      if (input->mb_cur_max > 1)
+       {
+         wint_t wc = re_string_wchar_at (input,
+                                         re_string_cur_idx (input) + 1);
+         token->word_char = IS_WIDE_WORD_CHAR (wc) != 0;
+       }
+      else
+#endif
+       token->word_char = IS_WORD_CHAR (c2) != 0;
+
+      switch (c2)
+       {
+       case '|':
+         if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_NO_BK_VBAR))
+           token->type = OP_ALT;
+         break;
+       case '1': case '2': case '3': case '4': case '5':
+       case '6': case '7': case '8': case '9':
+         if (!(syntax & RE_NO_BK_REFS))
+           {
+             token->type = OP_BACK_REF;
+             token->opr.idx = c2 - '1';
+           }
+         break;
+       case '<':
+         if (!(syntax & RE_NO_GNU_OPS))
+           {
+             token->type = ANCHOR;
+             token->opr.ctx_type = WORD_FIRST;
+           }
+         break;
+       case '>':
+         if (!(syntax & RE_NO_GNU_OPS))
+           {
+             token->type = ANCHOR;
+             token->opr.ctx_type = WORD_LAST;
+           }
+         break;
+       case 'b':
+         if (!(syntax & RE_NO_GNU_OPS))
+           {
+             token->type = ANCHOR;
+             token->opr.ctx_type = WORD_DELIM;
+           }
+         break;
+       case 'B':
+         if (!(syntax & RE_NO_GNU_OPS))
+           {
+             token->type = ANCHOR;
+             token->opr.ctx_type = NOT_WORD_DELIM;
+           }
+         break;
+       case 'w':
+         if (!(syntax & RE_NO_GNU_OPS))
+           token->type = OP_WORD;
+         break;
+       case 'W':
+         if (!(syntax & RE_NO_GNU_OPS))
+           token->type = OP_NOTWORD;
+         break;
+       case 's':
+         if (!(syntax & RE_NO_GNU_OPS))
+           token->type = OP_SPACE;
+         break;
+       case 'S':
+         if (!(syntax & RE_NO_GNU_OPS))
+           token->type = OP_NOTSPACE;
+         break;
+       case '`':
+         if (!(syntax & RE_NO_GNU_OPS))
+           {
+             token->type = ANCHOR;
+             token->opr.ctx_type = BUF_FIRST;
+           }
+         break;
+       case '\'':
+         if (!(syntax & RE_NO_GNU_OPS))
+           {
+             token->type = ANCHOR;
+             token->opr.ctx_type = BUF_LAST;
+           }
+         break;
+       case '(':
+         if (!(syntax & RE_NO_BK_PARENS))
+           token->type = OP_OPEN_SUBEXP;
+         break;
+       case ')':
+         if (!(syntax & RE_NO_BK_PARENS))
+           token->type = OP_CLOSE_SUBEXP;
+         break;
+       case '+':
+         if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM))
+           token->type = OP_DUP_PLUS;
+         break;
+       case '?':
+         if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM))
+           token->type = OP_DUP_QUESTION;
+         break;
+       case '{':
+         if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES)))
+           token->type = OP_OPEN_DUP_NUM;
+         break;
+       case '}':
+         if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES)))
+           token->type = OP_CLOSE_DUP_NUM;
+         break;
+       default:
+         break;
+       }
+      return 2;
+    }
+
+  token->type = CHARACTER;
+#ifdef RE_ENABLE_I18N
+  if (input->mb_cur_max > 1)
+    {
+      wint_t wc = re_string_wchar_at (input, re_string_cur_idx (input));
+      token->word_char = IS_WIDE_WORD_CHAR (wc) != 0;
+    }
+  else
+#endif
+    token->word_char = IS_WORD_CHAR (token->opr.c);
+
+  switch (c)
+    {
+    case '\n':
+      if (syntax & RE_NEWLINE_ALT)
+       token->type = OP_ALT;
+      break;
+    case '|':
+      if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_NO_BK_VBAR))
+       token->type = OP_ALT;
+      break;
+    case '*':
+      token->type = OP_DUP_ASTERISK;
+      break;
+    case '+':
+      if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM))
+       token->type = OP_DUP_PLUS;
+      break;
+    case '?':
+      if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM))
+       token->type = OP_DUP_QUESTION;
+      break;
+    case '{':
+      if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
+       token->type = OP_OPEN_DUP_NUM;
+      break;
+    case '}':
+      if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
+       token->type = OP_CLOSE_DUP_NUM;
+      break;
+    case '(':
+      if (syntax & RE_NO_BK_PARENS)
+       token->type = OP_OPEN_SUBEXP;
+      break;
+    case ')':
+      if (syntax & RE_NO_BK_PARENS)
+       token->type = OP_CLOSE_SUBEXP;
+      break;
+    case '[':
+      token->type = OP_OPEN_BRACKET;
+      break;
+    case '.':
+      token->type = OP_PERIOD;
+      break;
+    case '^':
+      if (!(syntax & (RE_CONTEXT_INDEP_ANCHORS | RE_CARET_ANCHORS_HERE)) &&
+         re_string_cur_idx (input) != 0)
+       {
+         char prev = re_string_peek_byte (input, -1);
+         if (!(syntax & RE_NEWLINE_ALT) || prev != '\n')
+           break;
+       }
+      token->type = ANCHOR;
+      token->opr.ctx_type = LINE_FIRST;
+      break;
+    case '$':
+      if (!(syntax & RE_CONTEXT_INDEP_ANCHORS) &&
+         re_string_cur_idx (input) + 1 != re_string_length (input))
+       {
+         re_token_t next;
+         re_string_skip_bytes (input, 1);
+         peek_token (&next, input, syntax);
+         re_string_skip_bytes (input, -1);
+         if (next.type != OP_ALT && next.type != OP_CLOSE_SUBEXP)
+           break;
+       }
+      token->type = ANCHOR;
+      token->opr.ctx_type = LINE_LAST;
+      break;
+    default:
+      break;
+    }
+  return 1;
+}
+
+/* Peek a token from INPUT, and return the length of the token.
+   We must not use this function out of bracket expressions.  */
+
+static int
+internal_function
+peek_token_bracket (re_token_t *token, re_string_t *input, reg_syntax_t syntax)
+{
+  unsigned char c;
+  if (re_string_eoi (input))
+    {
+      token->type = END_OF_RE;
+      return 0;
+    }
+  c = re_string_peek_byte (input, 0);
+  token->opr.c = c;
+
+#ifdef RE_ENABLE_I18N
+  if (input->mb_cur_max > 1 &&
+      !re_string_first_byte (input, re_string_cur_idx (input)))
+    {
+      token->type = CHARACTER;
+      return 1;
+    }
+#endif /* RE_ENABLE_I18N */
+
+  if (c == '\\' && (syntax & RE_BACKSLASH_ESCAPE_IN_LISTS)
+      && re_string_cur_idx (input) + 1 < re_string_length (input))
+    {
+      /* In this case, '\' escape a character.  */
+      unsigned char c2;
+      re_string_skip_bytes (input, 1);
+      c2 = re_string_peek_byte (input, 0);
+      token->opr.c = c2;
+      token->type = CHARACTER;
+      return 1;
+    }
+  if (c == '[') /* '[' is a special char in a bracket exps.  */
+    {
+      unsigned char c2;
+      int token_len;
+      if (re_string_cur_idx (input) + 1 < re_string_length (input))
+       c2 = re_string_peek_byte (input, 1);
+      else
+       c2 = 0;
+      token->opr.c = c2;
+      token_len = 2;
+      switch (c2)
+       {
+       case '.':
+         token->type = OP_OPEN_COLL_ELEM;
+         break;
+       case '=':
+         token->type = OP_OPEN_EQUIV_CLASS;
+         break;
+       case ':':
+         if (syntax & RE_CHAR_CLASSES)
+           {
+             token->type = OP_OPEN_CHAR_CLASS;
+             break;
+           }
+         /* else fall through.  */
+       default:
+         token->type = CHARACTER;
+         token->opr.c = c;
+         token_len = 1;
+         break;
+       }
+      return token_len;
+    }
+  switch (c)
+    {
+    case '-':
+      token->type = OP_CHARSET_RANGE;
+      break;
+    case ']':
+      token->type = OP_CLOSE_BRACKET;
+      break;
+    case '^':
+      token->type = OP_NON_MATCH_LIST;
+      break;
+    default:
+      token->type = CHARACTER;
+    }
+  return 1;
+}
+\f
+/* Functions for parser.  */
+
+/* Entry point of the parser.
+   Parse the regular expression REGEXP and return the structure tree.
+   If an error is occured, ERR is set by error code, and return NULL.
+   This function build the following tree, from regular expression <reg_exp>:
+          CAT
+          / \
+         /   \
+   <reg_exp>  EOR
+
+   CAT means concatenation.
+   EOR means end of regular expression.  */
+
+static bin_tree_t *
+parse (re_string_t *regexp, regex_t *preg, reg_syntax_t syntax,
+       reg_errcode_t *err)
+{
+  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
+  bin_tree_t *tree, *eor, *root;
+  re_token_t current_token;
+  dfa->syntax = syntax;
+  fetch_token (&current_token, regexp, syntax | RE_CARET_ANCHORS_HERE);
+  tree = parse_reg_exp (regexp, preg, &current_token, syntax, 0, err);
+  if (BE (*err != REG_NOERROR && tree == NULL, 0))
+    return NULL;
+  eor = create_tree (dfa, NULL, NULL, END_OF_RE);
+  if (tree != NULL)
+    root = create_tree (dfa, tree, eor, CONCAT);
+  else
+    root = eor;
+  if (BE (eor == NULL || root == NULL, 0))
+    {
+      *err = REG_ESPACE;
+      return NULL;
+    }
+  return root;
+}
+
+/* This function build the following tree, from regular expression
+   <branch1>|<branch2>:
+          ALT
+          / \
+         /   \
+   <branch1> <branch2>
+
+   ALT means alternative, which represents the operator `|'.  */
+
+static bin_tree_t *
+parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token,
+              reg_syntax_t syntax, Idx nest, reg_errcode_t *err)
+{
+  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
+  bin_tree_t *tree, *branch = NULL;
+  tree = parse_branch (regexp, preg, token, syntax, nest, err);
+  if (BE (*err != REG_NOERROR && tree == NULL, 0))
+    return NULL;
+
+  while (token->type == OP_ALT)
+    {
+      fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE);
+      if (token->type != OP_ALT && token->type != END_OF_RE
+         && (nest == 0 || token->type != OP_CLOSE_SUBEXP))
+       {
+         branch = parse_branch (regexp, preg, token, syntax, nest, err);
+         if (BE (*err != REG_NOERROR && branch == NULL, 0))
+           return NULL;
+       }
+      else
+       branch = NULL;
+      tree = create_tree (dfa, tree, branch, OP_ALT);
+      if (BE (tree == NULL, 0))
+       {
+         *err = REG_ESPACE;
+         return NULL;
+       }
+    }
+  return tree;
+}
+
+/* This function build the following tree, from regular expression
+   <exp1><exp2>:
+       CAT
+       / \
+       /   \
+   <exp1> <exp2>
+
+   CAT means concatenation.  */
+
+static bin_tree_t *
+parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token,
+             reg_syntax_t syntax, Idx nest, reg_errcode_t *err)
+{
+  bin_tree_t *tree, *expr;
+  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
+  tree = parse_expression (regexp, preg, token, syntax, nest, err);
+  if (BE (*err != REG_NOERROR && tree == NULL, 0))
+    return NULL;
+
+  while (token->type != OP_ALT && token->type != END_OF_RE
+        && (nest == 0 || token->type != OP_CLOSE_SUBEXP))
+    {
+      expr = parse_expression (regexp, preg, token, syntax, nest, err);
+      if (BE (*err != REG_NOERROR && expr == NULL, 0))
+       {
+         return NULL;
+       }
+      if (tree != NULL && expr != NULL)
+       {
+         tree = create_tree (dfa, tree, expr, CONCAT);
+         if (tree == NULL)
+           {
+             *err = REG_ESPACE;
+             return NULL;
+           }
+       }
+      else if (tree == NULL)
+       tree = expr;
+      /* Otherwise expr == NULL, we don't need to create new tree.  */
+    }
+  return tree;
+}
+
+/* This function build the following tree, from regular expression a*:
+        *
+        |
+        a
+*/
+
+static bin_tree_t *
+parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token,
+                 reg_syntax_t syntax, Idx nest, reg_errcode_t *err)
+{
+  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
+  bin_tree_t *tree;
+  switch (token->type)
+    {
+    case CHARACTER:
+      tree = create_token_tree (dfa, NULL, NULL, token);
+      if (BE (tree == NULL, 0))
+       {
+         *err = REG_ESPACE;
+         return NULL;
+       }
+#ifdef RE_ENABLE_I18N
+      if (dfa->mb_cur_max > 1)
+       {
+         while (!re_string_eoi (regexp)
+                && !re_string_first_byte (regexp, re_string_cur_idx (regexp)))
+           {
+             bin_tree_t *mbc_remain;
+             fetch_token (token, regexp, syntax);
+             mbc_remain = create_token_tree (dfa, NULL, NULL, token);
+             tree = create_tree (dfa, tree, mbc_remain, CONCAT);
+             if (BE (mbc_remain == NULL || tree == NULL, 0))
+               {
+                 *err = REG_ESPACE;
+                 return NULL;
+               }
+           }
+       }
+#endif
+      break;
+    case OP_OPEN_SUBEXP:
+      tree = parse_sub_exp (regexp, preg, token, syntax, nest + 1, err);
+      if (BE (*err != REG_NOERROR && tree == NULL, 0))
+       return NULL;
+      break;
+    case OP_OPEN_BRACKET:
+      tree = parse_bracket_exp (regexp, dfa, token, syntax, err);
+      if (BE (*err != REG_NOERROR && tree == NULL, 0))
+       return NULL;
+      break;
+    case OP_BACK_REF:
+      if (!BE (dfa->completed_bkref_map & (1 << token->opr.idx), 1))
+       {
+         *err = REG_ESUBREG;
+         return NULL;
+       }
+      dfa->used_bkref_map |= 1 << token->opr.idx;
+      tree = create_token_tree (dfa, NULL, NULL, token);
+      if (BE (tree == NULL, 0))
+       {
+         *err = REG_ESPACE;
+         return NULL;
+       }
+      ++dfa->nbackref;
+      dfa->has_mb_node = 1;
+      break;
+    case OP_OPEN_DUP_NUM:
+      if (syntax & RE_CONTEXT_INVALID_DUP)
+       {
+         *err = REG_BADRPT;
+         return NULL;
+       }
+      /* FALLTHROUGH */
+    case OP_DUP_ASTERISK:
+    case OP_DUP_PLUS:
+    case OP_DUP_QUESTION:
+      if (syntax & RE_CONTEXT_INVALID_OPS)
+       {
+         *err = REG_BADRPT;
+         return NULL;
+       }
+      else if (syntax & RE_CONTEXT_INDEP_OPS)
+       {
+         fetch_token (token, regexp, syntax);
+         return parse_expression (regexp, preg, token, syntax, nest, err);
+       }
+      /* else fall through  */
+    case OP_CLOSE_SUBEXP:
+      if ((token->type == OP_CLOSE_SUBEXP) &&
+         !(syntax & RE_UNMATCHED_RIGHT_PAREN_ORD))
+       {
+         *err = REG_ERPAREN;
+         return NULL;
+       }
+      /* else fall through  */
+    case OP_CLOSE_DUP_NUM:
+      /* We treat it as a normal character.  */
+
+      /* Then we can these characters as normal characters.  */
+      token->type = CHARACTER;
+      /* mb_partial and word_char bits should be initialized already
+        by peek_token.  */
+      tree = create_token_tree (dfa, NULL, NULL, token);
+      if (BE (tree == NULL, 0))
+       {
+         *err = REG_ESPACE;
+         return NULL;
+       }
+      break;
+    case ANCHOR:
+      if ((token->opr.ctx_type
+          & (WORD_DELIM | NOT_WORD_DELIM | WORD_FIRST | WORD_LAST))
+         && dfa->word_ops_used == 0)
+       init_word_char (dfa);
+      if (token->opr.ctx_type == WORD_DELIM
+         || token->opr.ctx_type == NOT_WORD_DELIM)
+       {
+         bin_tree_t *tree_first, *tree_last;
+         if (token->opr.ctx_type == WORD_DELIM)
+           {
+             token->opr.ctx_type = WORD_FIRST;
+             tree_first = create_token_tree (dfa, NULL, NULL, token);
+             token->opr.ctx_type = WORD_LAST;
+           }
+         else
+           {
+             token->opr.ctx_type = INSIDE_WORD;
+             tree_first = create_token_tree (dfa, NULL, NULL, token);
+             token->opr.ctx_type = INSIDE_NOTWORD;
+           }
+         tree_last = create_token_tree (dfa, NULL, NULL, token);
+         tree = create_tree (dfa, tree_first, tree_last, OP_ALT);
+         if (BE (tree_first == NULL || tree_last == NULL || tree == NULL, 0))
+           {
+             *err = REG_ESPACE;
+             return NULL;
+           }
+       }
+      else
+       {
+         tree = create_token_tree (dfa, NULL, NULL, token);
+         if (BE (tree == NULL, 0))
+           {
+             *err = REG_ESPACE;
+             return NULL;
+           }
+       }
+      /* We must return here, since ANCHORs can't be followed
+        by repetition operators.
+        eg. RE"^*" is invalid or "<ANCHOR(^)><CHAR(*)>",
+            it must not be "<ANCHOR(^)><REPEAT(*)>".  */
+      fetch_token (token, regexp, syntax);
+      return tree;
+    case OP_PERIOD:
+      tree = create_token_tree (dfa, NULL, NULL, token);
+      if (BE (tree == NULL, 0))
+       {
+         *err = REG_ESPACE;
+         return NULL;
+       }
+      if (dfa->mb_cur_max > 1)
+       dfa->has_mb_node = 1;
+      break;
+    case OP_WORD:
+    case OP_NOTWORD:
+      tree = build_charclass_op (dfa, regexp->trans,
+                                (const unsigned char *) "alnum",
+                                (const unsigned char *) "_",
+                                token->type == OP_NOTWORD, err);
+      if (BE (*err != REG_NOERROR && tree == NULL, 0))
+       return NULL;
+      break;
+    case OP_SPACE:
+    case OP_NOTSPACE:
+      tree = build_charclass_op (dfa, regexp->trans,
+                                (const unsigned char *) "space",
+                                (const unsigned char *) "",
+                                token->type == OP_NOTSPACE, err);
+      if (BE (*err != REG_NOERROR && tree == NULL, 0))
+       return NULL;
+      break;
+    case OP_ALT:
+    case END_OF_RE:
+      return NULL;
+    case BACK_SLASH:
+      *err = REG_EESCAPE;
+      return NULL;
+    default:
+      /* Must not happen?  */
+#ifdef DEBUG
+      assert (0);
+#endif
+      return NULL;
+    }
+  fetch_token (token, regexp, syntax);
+
+  while (token->type == OP_DUP_ASTERISK || token->type == OP_DUP_PLUS
+        || token->type == OP_DUP_QUESTION || token->type == OP_OPEN_DUP_NUM)
+    {
+      tree = parse_dup_op (tree, regexp, dfa, token, syntax, err);
+      if (BE (*err != REG_NOERROR && tree == NULL, 0))
+       return NULL;
+      /* In BRE consecutive duplications are not allowed.  */
+      if ((syntax & RE_CONTEXT_INVALID_DUP)
+         && (token->type == OP_DUP_ASTERISK
+             || token->type == OP_OPEN_DUP_NUM))
+       {
+         *err = REG_BADRPT;
+         return NULL;
+       }
+    }
+
+  return tree;
+}
+
+/* This function build the following tree, from regular expression
+   (<reg_exp>):
+        SUBEXP
+           |
+       <reg_exp>
+*/
+
+static bin_tree_t *
+parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token,
+              reg_syntax_t syntax, Idx nest, reg_errcode_t *err)
+{
+  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
+  bin_tree_t *tree;
+  size_t cur_nsub;
+  cur_nsub = preg->re_nsub++;
+
+  fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE);
+
+  /* The subexpression may be a null string.  */
+  if (token->type == OP_CLOSE_SUBEXP)
+    tree = NULL;
+  else
+    {
+      tree = parse_reg_exp (regexp, preg, token, syntax, nest, err);
+      if (BE (*err == REG_NOERROR && token->type != OP_CLOSE_SUBEXP, 0))
+       *err = REG_EPAREN;
+      if (BE (*err != REG_NOERROR, 0))
+       return NULL;
+    }
+
+  if (cur_nsub <= '9' - '1')
+    dfa->completed_bkref_map |= 1 << cur_nsub;
+
+  tree = create_tree (dfa, tree, NULL, SUBEXP);
+  if (BE (tree == NULL, 0))
+    {
+      *err = REG_ESPACE;
+      return NULL;
+    }
+  tree->token.opr.idx = cur_nsub;
+  return tree;
+}
+
+/* This function parse repetition operators like "*", "+", "{1,3}" etc.  */
+
+static bin_tree_t *
+parse_dup_op (bin_tree_t *elem, re_string_t *regexp, re_dfa_t *dfa,
+             re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err)
+{
+  bin_tree_t *tree = NULL, *old_tree = NULL;
+  Idx i, start, end, start_idx = re_string_cur_idx (regexp);
+  re_token_t start_token = *token;
+
+  if (token->type == OP_OPEN_DUP_NUM)
+    {
+      end = 0;
+      start = fetch_number (regexp, token, syntax);
+      if (start == REG_MISSING)
+       {
+         if (token->type == CHARACTER && token->opr.c == ',')
+           start = 0; /* We treat "{,m}" as "{0,m}".  */
+         else
+           {
+             *err = REG_BADBR; /* <re>{} is invalid.  */
+             return NULL;
+           }
+       }
+      if (BE (start != REG_ERROR, 1))
+       {
+         /* We treat "{n}" as "{n,n}".  */
+         end = ((token->type == OP_CLOSE_DUP_NUM) ? start
+                : ((token->type == CHARACTER && token->opr.c == ',')
+                   ? fetch_number (regexp, token, syntax) : REG_ERROR));
+       }
+      if (BE (start == REG_ERROR || end == REG_ERROR, 0))
+       {
+         /* Invalid sequence.  */
+         if (BE (!(syntax & RE_INVALID_INTERVAL_ORD), 0))
+           {
+             if (token->type == END_OF_RE)
+               *err = REG_EBRACE;
+             else
+               *err = REG_BADBR;
+
+             return NULL;
+           }
+
+         /* If the syntax bit is set, rollback.  */
+         re_string_set_index (regexp, start_idx);
+         *token = start_token;
+         token->type = CHARACTER;
+         /* mb_partial and word_char bits should be already initialized by
+            peek_token.  */
+         return elem;
+       }
+
+      if (BE ((end != REG_MISSING && start > end)
+             || token->type != OP_CLOSE_DUP_NUM, 0))
+       {
+         /* First number greater than second.  */
+         *err = REG_BADBR;
+         return NULL;
+       }
+    }
+  else
+    {
+      start = (token->type == OP_DUP_PLUS) ? 1 : 0;
+      end = (token->type == OP_DUP_QUESTION) ? 1 : REG_MISSING;
+    }
+
+  fetch_token (token, regexp, syntax);
+
+  if (BE (elem == NULL, 0))
+    return NULL;
+  if (BE (start == 0 && end == 0, 0))
+    {
+      postorder (elem, free_tree, NULL);
+      return NULL;
+    }
+
+  /* Extract "<re>{n,m}" to "<re><re>...<re><re>{0,<m-n>}".  */
+  if (BE (start > 0, 0))
+    {
+      tree = elem;
+      for (i = 2; i <= start; ++i)
+       {
+         elem = duplicate_tree (elem, dfa);
+         tree = create_tree (dfa, tree, elem, CONCAT);
+         if (BE (elem == NULL || tree == NULL, 0))
+           goto parse_dup_op_espace;
+       }
+
+      if (start == end)
+       return tree;
+
+      /* Duplicate ELEM before it is marked optional.  */
+      elem = duplicate_tree (elem, dfa);
+      old_tree = tree;
+    }
+  else
+    old_tree = NULL;
+
+  if (elem->token.type == SUBEXP)
+    postorder (elem, mark_opt_subexp, (void *) (long) elem->token.opr.idx);
+
+  tree = create_tree (dfa, elem, NULL,
+                     (end == REG_MISSING ? OP_DUP_ASTERISK : OP_ALT));
+  if (BE (tree == NULL, 0))
+    goto parse_dup_op_espace;
+
+/* From gnulib's "intprops.h":
+   True if the arithmetic type T is signed.  */
+#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+
+  /* This loop is actually executed only when end != REG_MISSING,
+     to rewrite <re>{0,n} as (<re>(<re>...<re>?)?)?...  We have
+     already created the start+1-th copy.  */
+  if (TYPE_SIGNED (Idx) || end != REG_MISSING)
+    for (i = start + 2; i <= end; ++i)
+      {
+       elem = duplicate_tree (elem, dfa);
+       tree = create_tree (dfa, tree, elem, CONCAT);
+       if (BE (elem == NULL || tree == NULL, 0))
+         goto parse_dup_op_espace;
+
+       tree = create_tree (dfa, tree, NULL, OP_ALT);
+       if (BE (tree == NULL, 0))
+         goto parse_dup_op_espace;
+      }
+
+  if (old_tree)
+    tree = create_tree (dfa, old_tree, tree, CONCAT);
+
+  return tree;
+
+ parse_dup_op_espace:
+  *err = REG_ESPACE;
+  return NULL;
+}
+
+/* Size of the names for collating symbol/equivalence_class/character_class.
+   I'm not sure, but maybe enough.  */
+#define BRACKET_NAME_BUF_SIZE 32
+
+#ifndef _LIBC
+  /* Local function for parse_bracket_exp only used in case of NOT _LIBC.
+     Build the range expression which starts from START_ELEM, and ends
+     at END_ELEM.  The result are written to MBCSET and SBCSET.
+     RANGE_ALLOC is the allocated size of mbcset->range_starts, and
+     mbcset->range_ends, is a pointer argument sinse we may
+     update it.  */
+
+static reg_errcode_t
+internal_function
+# ifdef RE_ENABLE_I18N
+build_range_exp (bitset_t sbcset, re_charset_t *mbcset, Idx *range_alloc,
+                bracket_elem_t *start_elem, bracket_elem_t *end_elem)
+# else /* not RE_ENABLE_I18N */
+build_range_exp (bitset_t sbcset, bracket_elem_t *start_elem,
+                bracket_elem_t *end_elem)
+# endif /* not RE_ENABLE_I18N */
+{
+  unsigned int start_ch, end_ch;
+  /* Equivalence Classes and Character Classes can't be a range start/end.  */
+  if (BE (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS
+         || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS,
+         0))
+    return REG_ERANGE;
+
+  /* We can handle no multi character collating elements without libc
+     support.  */
+  if (BE ((start_elem->type == COLL_SYM
+          && strlen ((char *) start_elem->opr.name) > 1)
+         || (end_elem->type == COLL_SYM
+             && strlen ((char *) end_elem->opr.name) > 1), 0))
+    return REG_ECOLLATE;
+
+# ifdef RE_ENABLE_I18N
+  {
+    wchar_t wc;
+    wint_t start_wc;
+    wint_t end_wc;
+    wchar_t cmp_buf[6] = {L'\0', L'\0', L'\0', L'\0', L'\0', L'\0'};
+
+    start_ch = ((start_elem->type == SB_CHAR) ? start_elem->opr.ch
+               : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0]
+                  : 0));
+    end_ch = ((end_elem->type == SB_CHAR) ? end_elem->opr.ch
+             : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0]
+                : 0));
+    start_wc = ((start_elem->type == SB_CHAR || start_elem->type == COLL_SYM)
+               ? __btowc (start_ch) : start_elem->opr.wch);
+    end_wc = ((end_elem->type == SB_CHAR || end_elem->type == COLL_SYM)
+             ? __btowc (end_ch) : end_elem->opr.wch);
+    if (start_wc == WEOF || end_wc == WEOF)
+      return REG_ECOLLATE;
+    cmp_buf[0] = start_wc;
+    cmp_buf[4] = end_wc;
+    if (wcscoll (cmp_buf, cmp_buf + 4) > 0)
+      return REG_ERANGE;
+
+    /* Got valid collation sequence values, add them as a new entry.
+       However, for !_LIBC we have no collation elements: if the
+       character set is single byte, the single byte character set
+       that we build below suffices.  parse_bracket_exp passes
+       no MBCSET if dfa->mb_cur_max == 1.  */
+    if (mbcset)
+      {
+       /* Check the space of the arrays.  */
+       if (BE (*range_alloc == mbcset->nranges, 0))
+         {
+           /* There is not enough space, need realloc.  */
+           wchar_t *new_array_start, *new_array_end;
+           Idx new_nranges;
+
+           /* +1 in case of mbcset->nranges is 0.  */
+           new_nranges = 2 * mbcset->nranges + 1;
+           /* Use realloc since mbcset->range_starts and mbcset->range_ends
+              are NULL if *range_alloc == 0.  */
+           new_array_start = re_realloc (mbcset->range_starts, wchar_t,
+                                         new_nranges);
+           new_array_end = re_realloc (mbcset->range_ends, wchar_t,
+                                       new_nranges);
+
+           if (BE (new_array_start == NULL || new_array_end == NULL, 0))
+             return REG_ESPACE;
+
+           mbcset->range_starts = new_array_start;
+           mbcset->range_ends = new_array_end;
+           *range_alloc = new_nranges;
+         }
+
+       mbcset->range_starts[mbcset->nranges] = start_wc;
+       mbcset->range_ends[mbcset->nranges++] = end_wc;
+      }
+
+    /* Build the table for single byte characters.  */
+    for (wc = 0; wc < SBC_MAX; ++wc)
+      {
+       cmp_buf[2] = wc;
+       if (wcscoll (cmp_buf, cmp_buf + 2) <= 0
+           && wcscoll (cmp_buf + 2, cmp_buf + 4) <= 0)
+         bitset_set (sbcset, wc);
+      }
+  }
+# else /* not RE_ENABLE_I18N */
+  {
+    unsigned int ch;
+    start_ch = ((start_elem->type == SB_CHAR ) ? start_elem->opr.ch
+               : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0]
+                  : 0));
+    end_ch = ((end_elem->type == SB_CHAR ) ? end_elem->opr.ch
+             : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0]
+                : 0));
+    if (start_ch > end_ch)
+      return REG_ERANGE;
+    /* Build the table for single byte characters.  */
+    for (ch = 0; ch < SBC_MAX; ++ch)
+      if (start_ch <= ch  && ch <= end_ch)
+       bitset_set (sbcset, ch);
+  }
+# endif /* not RE_ENABLE_I18N */
+  return REG_NOERROR;
+}
+#endif /* not _LIBC */
+
+#ifndef _LIBC
+/* Helper function for parse_bracket_exp only used in case of NOT _LIBC..
+   Build the collating element which is represented by NAME.
+   The result are written to MBCSET and SBCSET.
+   COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a
+   pointer argument since we may update it.  */
+
+static reg_errcode_t
+internal_function
+build_collating_symbol (bitset_t sbcset,
+# ifdef RE_ENABLE_I18N
+                       re_charset_t *mbcset, Idx *coll_sym_alloc,
+# endif
+                       const unsigned char *name)
+{
+  size_t name_len = strlen ((const char *) name);
+  if (BE (name_len != 1, 0))
+    return REG_ECOLLATE;
+  else
+    {
+      bitset_set (sbcset, name[0]);
+      return REG_NOERROR;
+    }
+}
+#endif /* not _LIBC */
+
+/* This function parse bracket expression like "[abc]", "[a-c]",
+   "[[.a-a.]]" etc.  */
+
+static bin_tree_t *
+parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,
+                  reg_syntax_t syntax, reg_errcode_t *err)
+{
+#ifdef _LIBC
+  const unsigned char *collseqmb;
+  const char *collseqwc;
+  uint32_t nrules;
+  int32_t table_size;
+  const int32_t *symb_table;
+  const unsigned char *extra;
+
+  /* Local function for parse_bracket_exp used in _LIBC environement.
+     Seek the collating symbol entry correspondings to NAME.
+     Return the index of the symbol in the SYMB_TABLE.  */
+
+  auto inline int32_t
+  __attribute ((always_inline))
+  seek_collating_symbol_entry (name, name_len)
+        const unsigned char *name;
+        size_t name_len;
+    {
+      int32_t hash = elem_hash ((const char *) name, name_len);
+      int32_t elem = hash % table_size;
+      if (symb_table[2 * elem] != 0)
+       {
+         int32_t second = hash % (table_size - 2) + 1;
+
+         do
+           {
+             /* First compare the hashing value.  */
+             if (symb_table[2 * elem] == hash
+                 /* Compare the length of the name.  */
+                 && name_len == extra[symb_table[2 * elem + 1]]
+                 /* Compare the name.  */
+                 && memcmp (name, &extra[symb_table[2 * elem + 1] + 1],
+                            name_len) == 0)
+               {
+                 /* Yep, this is the entry.  */
+                 break;
+               }
+
+             /* Next entry.  */
+             elem += second;
+           }
+         while (symb_table[2 * elem] != 0);
+       }
+      return elem;
+    }
+
+  /* Local function for parse_bracket_exp used in _LIBC environment.
+     Look up the collation sequence value of BR_ELEM.
+     Return the value if succeeded, UINT_MAX otherwise.  */
+
+  auto inline unsigned int
+  __attribute ((always_inline))
+  lookup_collation_sequence_value (br_elem)
+        bracket_elem_t *br_elem;
+    {
+      if (br_elem->type == SB_CHAR)
+       {
+         /*
+         if (MB_CUR_MAX == 1)
+         */
+         if (nrules == 0)
+           return collseqmb[br_elem->opr.ch];
+         else
+           {
+             wint_t wc = __btowc (br_elem->opr.ch);
+             return __collseq_table_lookup (collseqwc, wc);
+           }
+       }
+      else if (br_elem->type == MB_CHAR)
+       {
+         if (nrules != 0)
+           return __collseq_table_lookup (collseqwc, br_elem->opr.wch);
+       }
+      else if (br_elem->type == COLL_SYM)
+       {
+         size_t sym_name_len = strlen ((char *) br_elem->opr.name);
+         if (nrules != 0)
+           {
+             int32_t elem, idx;
+             elem = seek_collating_symbol_entry (br_elem->opr.name,
+                                                 sym_name_len);
+             if (symb_table[2 * elem] != 0)
+               {
+                 /* We found the entry.  */
+                 idx = symb_table[2 * elem + 1];
+                 /* Skip the name of collating element name.  */
+                 idx += 1 + extra[idx];
+                 /* Skip the byte sequence of the collating element.  */
+                 idx += 1 + extra[idx];
+                 /* Adjust for the alignment.  */
+                 idx = (idx + 3) & ~3;
+                 /* Skip the multibyte collation sequence value.  */
+                 idx += sizeof (unsigned int);
+                 /* Skip the wide char sequence of the collating element.  */
+                 idx += sizeof (unsigned int) *
+                   (1 + *(unsigned int *) (extra + idx));
+                 /* Return the collation sequence value.  */
+                 return *(unsigned int *) (extra + idx);
+               }
+             else if (symb_table[2 * elem] == 0 && sym_name_len == 1)
+               {
+                 /* No valid character.  Match it as a single byte
+                    character.  */
+                 return collseqmb[br_elem->opr.name[0]];
+               }
+           }
+         else if (sym_name_len == 1)
+           return collseqmb[br_elem->opr.name[0]];
+       }
+      return UINT_MAX;
+    }
+
+  /* Local function for parse_bracket_exp used in _LIBC environement.
+     Build the range expression which starts from START_ELEM, and ends
+     at END_ELEM.  The result are written to MBCSET and SBCSET.
+     RANGE_ALLOC is the allocated size of mbcset->range_starts, and
+     mbcset->range_ends, is a pointer argument sinse we may
+     update it.  */
+
+  auto inline reg_errcode_t
+  __attribute ((always_inline))
+  build_range_exp (sbcset, mbcset, range_alloc, start_elem, end_elem)
+        re_charset_t *mbcset;
+        Idx *range_alloc;
+        bitset_t sbcset;
+        bracket_elem_t *start_elem, *end_elem;
+    {
+      unsigned int ch;
+      uint32_t start_collseq;
+      uint32_t end_collseq;
+
+      /* Equivalence Classes and Character Classes can't be a range
+        start/end.  */
+      if (BE (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS
+             || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS,
+             0))
+       return REG_ERANGE;
+
+      start_collseq = lookup_collation_sequence_value (start_elem);
+      end_collseq = lookup_collation_sequence_value (end_elem);
+      /* Check start/end collation sequence values.  */
+      if (BE (start_collseq == UINT_MAX || end_collseq == UINT_MAX, 0))
+       return REG_ECOLLATE;
+      if (BE ((syntax & RE_NO_EMPTY_RANGES) && start_collseq > end_collseq, 0))
+       return REG_ERANGE;
+
+      /* Got valid collation sequence values, add them as a new entry.
+        However, if we have no collation elements, and the character set
+        is single byte, the single byte character set that we
+        build below suffices. */
+      if (nrules > 0 || dfa->mb_cur_max > 1)
+       {
+         /* Check the space of the arrays.  */
+         if (BE (*range_alloc == mbcset->nranges, 0))
+           {
+             /* There is not enough space, need realloc.  */
+             uint32_t *new_array_start;
+             uint32_t *new_array_end;
+             Idx new_nranges;
+
+             /* +1 in case of mbcset->nranges is 0.  */
+             new_nranges = 2 * mbcset->nranges + 1;
+             new_array_start = re_realloc (mbcset->range_starts, uint32_t,
+                                           new_nranges);
+             new_array_end = re_realloc (mbcset->range_ends, uint32_t,
+                                         new_nranges);
+
+             if (BE (new_array_start == NULL || new_array_end == NULL, 0))
+               return REG_ESPACE;
+
+             mbcset->range_starts = new_array_start;
+             mbcset->range_ends = new_array_end;
+             *range_alloc = new_nranges;
+           }
+
+         mbcset->range_starts[mbcset->nranges] = start_collseq;
+         mbcset->range_ends[mbcset->nranges++] = end_collseq;
+       }
+
+      /* Build the table for single byte characters.  */
+      for (ch = 0; ch < SBC_MAX; ch++)
+       {
+         uint32_t ch_collseq;
+         /*
+         if (MB_CUR_MAX == 1)
+         */
+         if (nrules == 0)
+           ch_collseq = collseqmb[ch];
+         else
+           ch_collseq = __collseq_table_lookup (collseqwc, __btowc (ch));
+         if (start_collseq <= ch_collseq && ch_collseq <= end_collseq)
+           bitset_set (sbcset, ch);
+       }
+      return REG_NOERROR;
+    }
+
+  /* Local function for parse_bracket_exp used in _LIBC environement.
+     Build the collating element which is represented by NAME.
+     The result are written to MBCSET and SBCSET.
+     COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a
+     pointer argument sinse we may update it.  */
+
+  auto inline reg_errcode_t
+  __attribute ((always_inline))
+  build_collating_symbol (sbcset, mbcset, coll_sym_alloc, name)
+        re_charset_t *mbcset;
+        Idx *coll_sym_alloc;
+        bitset_t sbcset;
+        const unsigned char *name;
+    {
+      int32_t elem, idx;
+      size_t name_len = strlen ((const char *) name);
+      if (nrules != 0)
+       {
+         elem = seek_collating_symbol_entry (name, name_len);
+         if (symb_table[2 * elem] != 0)
+           {
+             /* We found the entry.  */
+             idx = symb_table[2 * elem + 1];
+             /* Skip the name of collating element name.  */
+             idx += 1 + extra[idx];
+           }
+         else if (symb_table[2 * elem] == 0 && name_len == 1)
+           {
+             /* No valid character, treat it as a normal
+                character.  */
+             bitset_set (sbcset, name[0]);
+             return REG_NOERROR;
+           }
+         else
+           return REG_ECOLLATE;
+
+         /* Got valid collation sequence, add it as a new entry.  */
+         /* Check the space of the arrays.  */
+         if (BE (*coll_sym_alloc == mbcset->ncoll_syms, 0))
+           {
+             /* Not enough, realloc it.  */
+             /* +1 in case of mbcset->ncoll_syms is 0.  */
+             Idx new_coll_sym_alloc = 2 * mbcset->ncoll_syms + 1;
+             /* Use realloc since mbcset->coll_syms is NULL
+                if *alloc == 0.  */
+             int32_t *new_coll_syms = re_realloc (mbcset->coll_syms, int32_t,
+                                                  new_coll_sym_alloc);
+             if (BE (new_coll_syms == NULL, 0))
+               return REG_ESPACE;
+             mbcset->coll_syms = new_coll_syms;
+             *coll_sym_alloc = new_coll_sym_alloc;
+           }
+         mbcset->coll_syms[mbcset->ncoll_syms++] = idx;
+         return REG_NOERROR;
+       }
+      else
+       {
+         if (BE (name_len != 1, 0))
+           return REG_ECOLLATE;
+         else
+           {
+             bitset_set (sbcset, name[0]);
+             return REG_NOERROR;
+           }
+       }
+    }
+#endif
+
+  re_token_t br_token;
+  re_bitset_ptr_t sbcset;
+#ifdef RE_ENABLE_I18N
+  re_charset_t *mbcset;
+  Idx coll_sym_alloc = 0, range_alloc = 0, mbchar_alloc = 0;
+  Idx equiv_class_alloc = 0, char_class_alloc = 0;
+#endif /* not RE_ENABLE_I18N */
+  bool non_match = false;
+  bin_tree_t *work_tree;
+  int token_len;
+  bool first_round = true;
+#ifdef _LIBC
+  collseqmb = (const unsigned char *)
+    _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB);
+  nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+  if (nrules)
+    {
+      /*
+      if (MB_CUR_MAX > 1)
+      */
+      collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC);
+      table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB);
+      symb_table = (const int32_t *) _NL_CURRENT (LC_COLLATE,
+                                                 _NL_COLLATE_SYMB_TABLEMB);
+      extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE,
+                                                  _NL_COLLATE_SYMB_EXTRAMB);
+    }
+#endif
+  sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1);
+#ifdef RE_ENABLE_I18N
+  mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1);
+#endif /* RE_ENABLE_I18N */
+#ifdef RE_ENABLE_I18N
+  if (BE (sbcset == NULL || mbcset == NULL, 0))
+#else
+  if (BE (sbcset == NULL, 0))
+#endif /* RE_ENABLE_I18N */
+    {
+      *err = REG_ESPACE;
+      return NULL;
+    }
+
+  token_len = peek_token_bracket (token, regexp, syntax);
+  if (BE (token->type == END_OF_RE, 0))
+    {
+      *err = REG_BADPAT;
+      goto parse_bracket_exp_free_return;
+    }
+  if (token->type == OP_NON_MATCH_LIST)
+    {
+#ifdef RE_ENABLE_I18N
+      mbcset->non_match = 1;
+#endif /* not RE_ENABLE_I18N */
+      non_match = true;
+      if (syntax & RE_HAT_LISTS_NOT_NEWLINE)
+       bitset_set (sbcset, '\n');
+      re_string_skip_bytes (regexp, token_len); /* Skip a token.  */
+      token_len = peek_token_bracket (token, regexp, syntax);
+      if (BE (token->type == END_OF_RE, 0))
+       {
+         *err = REG_BADPAT;
+         goto parse_bracket_exp_free_return;
+       }
+    }
+
+  /* We treat the first ']' as a normal character.  */
+  if (token->type == OP_CLOSE_BRACKET)
+    token->type = CHARACTER;
+
+  while (1)
+    {
+      bracket_elem_t start_elem, end_elem;
+      unsigned char start_name_buf[BRACKET_NAME_BUF_SIZE];
+      unsigned char end_name_buf[BRACKET_NAME_BUF_SIZE];
+      reg_errcode_t ret;
+      int token_len2 = 0;
+      bool is_range_exp = false;
+      re_token_t token2;
+
+      start_elem.opr.name = start_name_buf;
+      ret = parse_bracket_element (&start_elem, regexp, token, token_len, dfa,
+                                  syntax, first_round);
+      if (BE (ret != REG_NOERROR, 0))
+       {
+         *err = ret;
+         goto parse_bracket_exp_free_return;
+       }
+      first_round = false;
+
+      /* Get information about the next token.  We need it in any case.  */
+      token_len = peek_token_bracket (token, regexp, syntax);
+
+      /* Do not check for ranges if we know they are not allowed.  */
+      if (start_elem.type != CHAR_CLASS && start_elem.type != EQUIV_CLASS)
+       {
+         if (BE (token->type == END_OF_RE, 0))
+           {
+             *err = REG_EBRACK;
+             goto parse_bracket_exp_free_return;
+           }
+         if (token->type == OP_CHARSET_RANGE)
+           {
+             re_string_skip_bytes (regexp, token_len); /* Skip '-'.  */
+             token_len2 = peek_token_bracket (&token2, regexp, syntax);
+             if (BE (token2.type == END_OF_RE, 0))
+               {
+                 *err = REG_EBRACK;
+                 goto parse_bracket_exp_free_return;
+               }
+             if (token2.type == OP_CLOSE_BRACKET)
+               {
+                 /* We treat the last '-' as a normal character.  */
+                 re_string_skip_bytes (regexp, -token_len);
+                 token->type = CHARACTER;
+               }
+             else
+               is_range_exp = true;
+           }
+       }
+
+      if (is_range_exp == true)
+       {
+         end_elem.opr.name = end_name_buf;
+         ret = parse_bracket_element (&end_elem, regexp, &token2, token_len2,
+                                      dfa, syntax, true);
+         if (BE (ret != REG_NOERROR, 0))
+           {
+             *err = ret;
+             goto parse_bracket_exp_free_return;
+           }
+
+         token_len = peek_token_bracket (token, regexp, syntax);
+
+#ifdef _LIBC
+         *err = build_range_exp (sbcset, mbcset, &range_alloc,
+                                 &start_elem, &end_elem);
+#else
+# ifdef RE_ENABLE_I18N
+         *err = build_range_exp (sbcset,
+                                 dfa->mb_cur_max > 1 ? mbcset : NULL,
+                                 &range_alloc, &start_elem, &end_elem);
+# else
+         *err = build_range_exp (sbcset, &start_elem, &end_elem);
+# endif
+#endif /* RE_ENABLE_I18N */
+         if (BE (*err != REG_NOERROR, 0))
+           goto parse_bracket_exp_free_return;
+       }
+      else
+       {
+         switch (start_elem.type)
+           {
+           case SB_CHAR:
+             bitset_set (sbcset, start_elem.opr.ch);
+             break;
+#ifdef RE_ENABLE_I18N
+           case MB_CHAR:
+             /* Check whether the array has enough space.  */
+             if (BE (mbchar_alloc == mbcset->nmbchars, 0))
+               {
+                 wchar_t *new_mbchars;
+                 /* Not enough, realloc it.  */
+                 /* +1 in case of mbcset->nmbchars is 0.  */
+                 mbchar_alloc = 2 * mbcset->nmbchars + 1;
+                 /* Use realloc since array is NULL if *alloc == 0.  */
+                 new_mbchars = re_realloc (mbcset->mbchars, wchar_t,
+                                           mbchar_alloc);
+                 if (BE (new_mbchars == NULL, 0))
+                   goto parse_bracket_exp_espace;
+                 mbcset->mbchars = new_mbchars;
+               }
+             mbcset->mbchars[mbcset->nmbchars++] = start_elem.opr.wch;
+             break;
+#endif /* RE_ENABLE_I18N */
+           case EQUIV_CLASS:
+             *err = build_equiv_class (sbcset,
+#ifdef RE_ENABLE_I18N
+                                       mbcset, &equiv_class_alloc,
+#endif /* RE_ENABLE_I18N */
+                                       start_elem.opr.name);
+             if (BE (*err != REG_NOERROR, 0))
+               goto parse_bracket_exp_free_return;
+             break;
+           case COLL_SYM:
+             *err = build_collating_symbol (sbcset,
+#ifdef RE_ENABLE_I18N
+                                            mbcset, &coll_sym_alloc,
+#endif /* RE_ENABLE_I18N */
+                                            start_elem.opr.name);
+             if (BE (*err != REG_NOERROR, 0))
+               goto parse_bracket_exp_free_return;
+             break;
+           case CHAR_CLASS:
+             *err = build_charclass (regexp->trans, sbcset,
+#ifdef RE_ENABLE_I18N
+                                     mbcset, &char_class_alloc,
+#endif /* RE_ENABLE_I18N */
+                                     start_elem.opr.name, syntax);
+             if (BE (*err != REG_NOERROR, 0))
+              goto parse_bracket_exp_free_return;
+             break;
+           default:
+             assert (0);
+             break;
+           }
+       }
+      if (BE (token->type == END_OF_RE, 0))
+       {
+         *err = REG_EBRACK;
+         goto parse_bracket_exp_free_return;
+       }
+      if (token->type == OP_CLOSE_BRACKET)
+       break;
+    }
+
+  re_string_skip_bytes (regexp, token_len); /* Skip a token.  */
+
+  /* If it is non-matching list.  */
+  if (non_match)
+    bitset_not (sbcset);
+
+#ifdef RE_ENABLE_I18N
+  /* Ensure only single byte characters are set.  */
+  if (dfa->mb_cur_max > 1)
+    bitset_mask (sbcset, dfa->sb_char);
+
+  if (mbcset->nmbchars || mbcset->ncoll_syms || mbcset->nequiv_classes
+      || mbcset->nranges || (dfa->mb_cur_max > 1 && (mbcset->nchar_classes
+                                                    || mbcset->non_match)))
+    {
+      bin_tree_t *mbc_tree;
+      int sbc_idx;
+      /* Build a tree for complex bracket.  */
+      dfa->has_mb_node = 1;
+      br_token.type = COMPLEX_BRACKET;
+      br_token.opr.mbcset = mbcset;
+      mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token);
+      if (BE (mbc_tree == NULL, 0))
+       goto parse_bracket_exp_espace;
+      for (sbc_idx = 0; sbc_idx < BITSET_WORDS; ++sbc_idx)
+       if (sbcset[sbc_idx])
+         break;
+      /* If there are no bits set in sbcset, there is no point
+        of having both SIMPLE_BRACKET and COMPLEX_BRACKET.  */
+      if (sbc_idx < BITSET_WORDS)
+       {
+         /* Build a tree for simple bracket.  */
+         br_token.type = SIMPLE_BRACKET;
+         br_token.opr.sbcset = sbcset;
+         work_tree = create_token_tree (dfa, NULL, NULL, &br_token);
+         if (BE (work_tree == NULL, 0))
+           goto parse_bracket_exp_espace;
+
+         /* Then join them by ALT node.  */
+         work_tree = create_tree (dfa, work_tree, mbc_tree, OP_ALT);
+         if (BE (work_tree == NULL, 0))
+           goto parse_bracket_exp_espace;
+       }
+      else
+       {
+         re_free (sbcset);
+         work_tree = mbc_tree;
+       }
+    }
+  else
+#endif /* not RE_ENABLE_I18N */
+    {
+#ifdef RE_ENABLE_I18N
+      free_charset (mbcset);
+#endif
+      /* Build a tree for simple bracket.  */
+      br_token.type = SIMPLE_BRACKET;
+      br_token.opr.sbcset = sbcset;
+      work_tree = create_token_tree (dfa, NULL, NULL, &br_token);
+      if (BE (work_tree == NULL, 0))
+       goto parse_bracket_exp_espace;
+    }
+  return work_tree;
+
+ parse_bracket_exp_espace:
+  *err = REG_ESPACE;
+ parse_bracket_exp_free_return:
+  re_free (sbcset);
+#ifdef RE_ENABLE_I18N
+  free_charset (mbcset);
+#endif /* RE_ENABLE_I18N */
+  return NULL;
+}
+
+/* Parse an element in the bracket expression.  */
+
+static reg_errcode_t
+parse_bracket_element (bracket_elem_t *elem, re_string_t *regexp,
+                      re_token_t *token, int token_len, re_dfa_t *dfa,
+                      reg_syntax_t syntax, bool accept_hyphen)
+{
+#ifdef RE_ENABLE_I18N
+  int cur_char_size;
+  cur_char_size = re_string_char_size_at (regexp, re_string_cur_idx (regexp));
+  if (cur_char_size > 1)
+    {
+      elem->type = MB_CHAR;
+      elem->opr.wch = re_string_wchar_at (regexp, re_string_cur_idx (regexp));
+      re_string_skip_bytes (regexp, cur_char_size);
+      return REG_NOERROR;
+    }
+#endif /* RE_ENABLE_I18N */
+  re_string_skip_bytes (regexp, token_len); /* Skip a token.  */
+  if (token->type == OP_OPEN_COLL_ELEM || token->type == OP_OPEN_CHAR_CLASS
+      || token->type == OP_OPEN_EQUIV_CLASS)
+    return parse_bracket_symbol (elem, regexp, token);
+  if (BE (token->type == OP_CHARSET_RANGE, 0) && !accept_hyphen)
+    {
+      /* A '-' must only appear as anything but a range indicator before
+        the closing bracket.  Everything else is an error.  */
+      re_token_t token2;
+      (void) peek_token_bracket (&token2, regexp, syntax);
+      if (token2.type != OP_CLOSE_BRACKET)
+       /* The actual error value is not standardized since this whole
+          case is undefined.  But ERANGE makes good sense.  */
+       return REG_ERANGE;
+    }
+  elem->type = SB_CHAR;
+  elem->opr.ch = token->opr.c;
+  return REG_NOERROR;
+}
+
+/* Parse a bracket symbol in the bracket expression.  Bracket symbols are
+   such as [:<character_class>:], [.<collating_element>.], and
+   [=<equivalent_class>=].  */
+
+static reg_errcode_t
+parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp,
+                     re_token_t *token)
+{
+  unsigned char ch, delim = token->opr.c;
+  int i = 0;
+  if (re_string_eoi(regexp))
+    return REG_EBRACK;
+  for (;; ++i)
+    {
+      if (i >= BRACKET_NAME_BUF_SIZE)
+       return REG_EBRACK;
+      if (token->type == OP_OPEN_CHAR_CLASS)
+       ch = re_string_fetch_byte_case (regexp);
+      else
+       ch = re_string_fetch_byte (regexp);
+      if (re_string_eoi(regexp))
+       return REG_EBRACK;
+      if (ch == delim && re_string_peek_byte (regexp, 0) == ']')
+       break;
+      elem->opr.name[i] = ch;
+    }
+  re_string_skip_bytes (regexp, 1);
+  elem->opr.name[i] = '\0';
+  switch (token->type)
+    {
+    case OP_OPEN_COLL_ELEM:
+      elem->type = COLL_SYM;
+      break;
+    case OP_OPEN_EQUIV_CLASS:
+      elem->type = EQUIV_CLASS;
+      break;
+    case OP_OPEN_CHAR_CLASS:
+      elem->type = CHAR_CLASS;
+      break;
+    default:
+      break;
+    }
+  return REG_NOERROR;
+}
+
+  /* Helper function for parse_bracket_exp.
+     Build the equivalence class which is represented by NAME.
+     The result are written to MBCSET and SBCSET.
+     EQUIV_CLASS_ALLOC is the allocated size of mbcset->equiv_classes,
+     is a pointer argument sinse we may update it.  */
+
+static reg_errcode_t
+#ifdef RE_ENABLE_I18N
+build_equiv_class (bitset_t sbcset, re_charset_t *mbcset,
+                  Idx *equiv_class_alloc, const unsigned char *name)
+#else /* not RE_ENABLE_I18N */
+build_equiv_class (bitset_t sbcset, const unsigned char *name)
+#endif /* not RE_ENABLE_I18N */
+{
+#ifdef _LIBC
+  uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+  if (nrules != 0)
+    {
+      const int32_t *table, *indirect;
+      const unsigned char *weights, *extra, *cp;
+      unsigned char char_buf[2];
+      int32_t idx1, idx2;
+      unsigned int ch;
+      size_t len;
+      /* This #include defines a local function!  */
+# include <locale/weight.h>
+      /* Calculate the index for equivalence class.  */
+      cp = name;
+      table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
+      weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE,
+                                              _NL_COLLATE_WEIGHTMB);
+      extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE,
+                                                  _NL_COLLATE_EXTRAMB);
+      indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE,
+                                               _NL_COLLATE_INDIRECTMB);
+      idx1 = findidx (&cp);
+      if (BE (idx1 == 0 || cp < name + strlen ((const char *) name), 0))
+       /* This isn't a valid character.  */
+       return REG_ECOLLATE;
+
+      /* Build single byte matcing table for this equivalence class.  */
+      char_buf[1] = (unsigned char) '\0';
+      len = weights[idx1 & 0xffffff];
+      for (ch = 0; ch < SBC_MAX; ++ch)
+       {
+         char_buf[0] = ch;
+         cp = char_buf;
+         idx2 = findidx (&cp);
+/*
+         idx2 = table[ch];
+*/
+         if (idx2 == 0)
+           /* This isn't a valid character.  */
+           continue;
+         /* Compare only if the length matches and the collation rule
+            index is the same.  */
+         if (len == weights[idx2 & 0xffffff] && (idx1 >> 24) == (idx2 >> 24))
+           {
+             int cnt = 0;
+
+             while (cnt <= len &&
+                    weights[(idx1 & 0xffffff) + 1 + cnt]
+                    == weights[(idx2 & 0xffffff) + 1 + cnt])
+               ++cnt;
+
+             if (cnt > len)
+               bitset_set (sbcset, ch);
+           }
+       }
+      /* Check whether the array has enough space.  */
+      if (BE (*equiv_class_alloc == mbcset->nequiv_classes, 0))
+       {
+         /* Not enough, realloc it.  */
+         /* +1 in case of mbcset->nequiv_classes is 0.  */
+         Idx new_equiv_class_alloc = 2 * mbcset->nequiv_classes + 1;
+         /* Use realloc since the array is NULL if *alloc == 0.  */
+         int32_t *new_equiv_classes = re_realloc (mbcset->equiv_classes,
+                                                  int32_t,
+                                                  new_equiv_class_alloc);
+         if (BE (new_equiv_classes == NULL, 0))
+           return REG_ESPACE;
+         mbcset->equiv_classes = new_equiv_classes;
+         *equiv_class_alloc = new_equiv_class_alloc;
+       }
+      mbcset->equiv_classes[mbcset->nequiv_classes++] = idx1;
+    }
+  else
+#endif /* _LIBC */
+    {
+      if (BE (strlen ((const char *) name) != 1, 0))
+       return REG_ECOLLATE;
+      bitset_set (sbcset, *name);
+    }
+  return REG_NOERROR;
+}
+
+  /* Helper function for parse_bracket_exp.
+     Build the character class which is represented by NAME.
+     The result are written to MBCSET and SBCSET.
+     CHAR_CLASS_ALLOC is the allocated size of mbcset->char_classes,
+     is a pointer argument sinse we may update it.  */
+
+static reg_errcode_t
+#ifdef RE_ENABLE_I18N
+build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset,
+                re_charset_t *mbcset, Idx *char_class_alloc,
+                const unsigned char *class_name, reg_syntax_t syntax)
+#else /* not RE_ENABLE_I18N */
+build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset,
+                const unsigned char *class_name, reg_syntax_t syntax)
+#endif /* not RE_ENABLE_I18N */
+{
+  int i;
+  const char *name = (const char *) class_name;
+
+  /* In case of REG_ICASE "upper" and "lower" match the both of
+     upper and lower cases.  */
+  if ((syntax & RE_ICASE)
+      && (strcmp (name, "upper") == 0 || strcmp (name, "lower") == 0))
+    name = "alpha";
+
+#ifdef RE_ENABLE_I18N
+  /* Check the space of the arrays.  */
+  if (BE (*char_class_alloc == mbcset->nchar_classes, 0))
+    {
+      /* Not enough, realloc it.  */
+      /* +1 in case of mbcset->nchar_classes is 0.  */
+      Idx new_char_class_alloc = 2 * mbcset->nchar_classes + 1;
+      /* Use realloc since array is NULL if *alloc == 0.  */
+      wctype_t *new_char_classes = re_realloc (mbcset->char_classes, wctype_t,
+                                              new_char_class_alloc);
+      if (BE (new_char_classes == NULL, 0))
+       return REG_ESPACE;
+      mbcset->char_classes = new_char_classes;
+      *char_class_alloc = new_char_class_alloc;
+    }
+  mbcset->char_classes[mbcset->nchar_classes++] = __wctype (name);
+#endif /* RE_ENABLE_I18N */
+
+#define BUILD_CHARCLASS_LOOP(ctype_func)       \
+  do {                                         \
+    if (BE (trans != NULL, 0))                 \
+      {                                                \
+       for (i = 0; i < SBC_MAX; ++i)           \
+         if (ctype_func (i))                   \
+           bitset_set (sbcset, trans[i]);      \
+      }                                                \
+    else                                       \
+      {                                                \
+       for (i = 0; i < SBC_MAX; ++i)           \
+         if (ctype_func (i))                   \
+           bitset_set (sbcset, i);             \
+      }                                                \
+  } while (0)
+
+  if (strcmp (name, "alnum") == 0)
+    BUILD_CHARCLASS_LOOP (isalnum);
+  else if (strcmp (name, "cntrl") == 0)
+    BUILD_CHARCLASS_LOOP (iscntrl);
+  else if (strcmp (name, "lower") == 0)
+    BUILD_CHARCLASS_LOOP (islower);
+  else if (strcmp (name, "space") == 0)
+    BUILD_CHARCLASS_LOOP (isspace);
+  else if (strcmp (name, "alpha") == 0)
+    BUILD_CHARCLASS_LOOP (isalpha);
+  else if (strcmp (name, "digit") == 0)
+    BUILD_CHARCLASS_LOOP (isdigit);
+  else if (strcmp (name, "print") == 0)
+    BUILD_CHARCLASS_LOOP (isprint);
+  else if (strcmp (name, "upper") == 0)
+    BUILD_CHARCLASS_LOOP (isupper);
+  else if (strcmp (name, "blank") == 0)
+    BUILD_CHARCLASS_LOOP (isblank);
+  else if (strcmp (name, "graph") == 0)
+    BUILD_CHARCLASS_LOOP (isgraph);
+  else if (strcmp (name, "punct") == 0)
+    BUILD_CHARCLASS_LOOP (ispunct);
+  else if (strcmp (name, "xdigit") == 0)
+    BUILD_CHARCLASS_LOOP (isxdigit);
+  else
+    return REG_ECTYPE;
+
+  return REG_NOERROR;
+}
+
+static bin_tree_t *
+build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans,
+                   const unsigned char *class_name,
+                   const unsigned char *extra, bool non_match,
+                   reg_errcode_t *err)
+{
+  re_bitset_ptr_t sbcset;
+#ifdef RE_ENABLE_I18N
+  re_charset_t *mbcset;
+  Idx alloc = 0;
+#endif /* not RE_ENABLE_I18N */
+  reg_errcode_t ret;
+  re_token_t br_token;
+  bin_tree_t *tree;
+
+  sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1);
+#ifdef RE_ENABLE_I18N
+  mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1);
+#endif /* RE_ENABLE_I18N */
+
+#ifdef RE_ENABLE_I18N
+  if (BE (sbcset == NULL || mbcset == NULL, 0))
+#else /* not RE_ENABLE_I18N */
+  if (BE (sbcset == NULL, 0))
+#endif /* not RE_ENABLE_I18N */
+    {
+      *err = REG_ESPACE;
+      return NULL;
+    }
+
+  if (non_match)
+    {
+#ifdef RE_ENABLE_I18N
+      mbcset->non_match = 1;
+#endif /* not RE_ENABLE_I18N */
+    }
+
+  /* We don't care the syntax in this case.  */
+  ret = build_charclass (trans, sbcset,
+#ifdef RE_ENABLE_I18N
+                        mbcset, &alloc,
+#endif /* RE_ENABLE_I18N */
+                        class_name, 0);
+
+  if (BE (ret != REG_NOERROR, 0))
+    {
+      re_free (sbcset);
+#ifdef RE_ENABLE_I18N
+      free_charset (mbcset);
+#endif /* RE_ENABLE_I18N */
+      *err = ret;
+      return NULL;
+    }
+  /* \w match '_' also.  */
+  for (; *extra; extra++)
+    bitset_set (sbcset, *extra);
+
+  /* If it is non-matching list.  */
+  if (non_match)
+    bitset_not (sbcset);
+
+#ifdef RE_ENABLE_I18N
+  /* Ensure only single byte characters are set.  */
+  if (dfa->mb_cur_max > 1)
+    bitset_mask (sbcset, dfa->sb_char);
+#endif
+
+  /* Build a tree for simple bracket.  */
+  br_token.type = SIMPLE_BRACKET;
+  br_token.opr.sbcset = sbcset;
+  tree = create_token_tree (dfa, NULL, NULL, &br_token);
+  if (BE (tree == NULL, 0))
+    goto build_word_op_espace;
+
+#ifdef RE_ENABLE_I18N
+  if (dfa->mb_cur_max > 1)
+    {
+      bin_tree_t *mbc_tree;
+      /* Build a tree for complex bracket.  */
+      br_token.type = COMPLEX_BRACKET;
+      br_token.opr.mbcset = mbcset;
+      dfa->has_mb_node = 1;
+      mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token);
+      if (BE (mbc_tree == NULL, 0))
+       goto build_word_op_espace;
+      /* Then join them by ALT node.  */
+      tree = create_tree (dfa, tree, mbc_tree, OP_ALT);
+      if (BE (mbc_tree != NULL, 1))
+       return tree;
+    }
+  else
+    {
+      free_charset (mbcset);
+      return tree;
+    }
+#else /* not RE_ENABLE_I18N */
+  return tree;
+#endif /* not RE_ENABLE_I18N */
+
+ build_word_op_espace:
+  re_free (sbcset);
+#ifdef RE_ENABLE_I18N
+  free_charset (mbcset);
+#endif /* RE_ENABLE_I18N */
+  *err = REG_ESPACE;
+  return NULL;
+}
+
+/* This is intended for the expressions like "a{1,3}".
+   Fetch a number from `input', and return the number.
+   Return REG_MISSING if the number field is empty like "{,1}".
+   Return REG_ERROR if an error occurred.  */
+
+static Idx
+fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax)
+{
+  Idx num = REG_MISSING;
+  unsigned char c;
+  while (1)
+    {
+      fetch_token (token, input, syntax);
+      c = token->opr.c;
+      if (BE (token->type == END_OF_RE, 0))
+       return REG_ERROR;
+      if (token->type == OP_CLOSE_DUP_NUM || c == ',')
+       break;
+      num = ((token->type != CHARACTER || c < '0' || '9' < c
+             || num == REG_ERROR)
+            ? REG_ERROR
+            : ((num == REG_MISSING) ? c - '0' : num * 10 + c - '0'));
+      num = (num > RE_DUP_MAX) ? REG_ERROR : num;
+    }
+  return num;
+}
+\f
+#ifdef RE_ENABLE_I18N
+static void
+free_charset (re_charset_t *cset)
+{
+  re_free (cset->mbchars);
+# ifdef _LIBC
+  re_free (cset->coll_syms);
+  re_free (cset->equiv_classes);
+  re_free (cset->range_starts);
+  re_free (cset->range_ends);
+# endif
+  re_free (cset->char_classes);
+  re_free (cset);
+}
+#endif /* RE_ENABLE_I18N */
+\f
+/* Functions for binary tree operation.  */
+
+/* Create a tree node.  */
+
+static bin_tree_t *
+create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right,
+            re_token_type_t type)
+{
+  re_token_t t;
+  t.type = type;
+  return create_token_tree (dfa, left, right, &t);
+}
+
+static bin_tree_t *
+create_token_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right,
+                  const re_token_t *token)
+{
+  bin_tree_t *tree;
+  if (BE (dfa->str_tree_storage_idx == BIN_TREE_STORAGE_SIZE, 0))
+    {
+      bin_tree_storage_t *storage = re_malloc (bin_tree_storage_t, 1);
+
+      if (storage == NULL)
+       return NULL;
+      storage->next = dfa->str_tree_storage;
+      dfa->str_tree_storage = storage;
+      dfa->str_tree_storage_idx = 0;
+    }
+  tree = &dfa->str_tree_storage->data[dfa->str_tree_storage_idx++];
+
+  tree->parent = NULL;
+  tree->left = left;
+  tree->right = right;
+  tree->token = *token;
+  tree->token.duplicated = 0;
+  tree->token.opt_subexp = 0;
+  tree->first = NULL;
+  tree->next = NULL;
+  tree->node_idx = REG_MISSING;
+
+  if (left != NULL)
+    left->parent = tree;
+  if (right != NULL)
+    right->parent = tree;
+  return tree;
+}
+
+/* Mark the tree SRC as an optional subexpression.
+   To be called from preorder or postorder.  */
+
+static reg_errcode_t
+mark_opt_subexp (void *extra, bin_tree_t *node)
+{
+  Idx idx = (Idx) (long) extra;
+  if (node->token.type == SUBEXP && node->token.opr.idx == idx)
+    node->token.opt_subexp = 1;
+
+  return REG_NOERROR;
+}
+
+/* Free the allocated memory inside NODE. */
+
+static void
+free_token (re_token_t *node)
+{
+#ifdef RE_ENABLE_I18N
+  if (node->type == COMPLEX_BRACKET && node->duplicated == 0)
+    free_charset (node->opr.mbcset);
+  else
+#endif /* RE_ENABLE_I18N */
+    if (node->type == SIMPLE_BRACKET && node->duplicated == 0)
+      re_free (node->opr.sbcset);
+}
+
+/* Worker function for tree walking.  Free the allocated memory inside NODE
+   and its children. */
+
+static reg_errcode_t
+free_tree (void *extra, bin_tree_t *node)
+{
+  free_token (&node->token);
+  return REG_NOERROR;
+}
+
+
+/* Duplicate the node SRC, and return new node.  This is a preorder
+   visit similar to the one implemented by the generic visitor, but
+   we need more infrastructure to maintain two parallel trees --- so,
+   it's easier to duplicate.  */
+
+static bin_tree_t *
+duplicate_tree (const bin_tree_t *root, re_dfa_t *dfa)
+{
+  const bin_tree_t *node;
+  bin_tree_t *dup_root;
+  bin_tree_t **p_new = &dup_root, *dup_node = root->parent;
+
+  for (node = root; ; )
+    {
+      /* Create a new tree and link it back to the current parent.  */
+      *p_new = create_token_tree (dfa, NULL, NULL, &node->token);
+      if (*p_new == NULL)
+       return NULL;
+      (*p_new)->parent = dup_node;
+      (*p_new)->token.duplicated = 1;
+      dup_node = *p_new;
+
+      /* Go to the left node, or up and to the right.  */
+      if (node->left)
+       {
+         node = node->left;
+         p_new = &dup_node->left;
+       }
+      else
+       {
+         const bin_tree_t *prev = NULL;
+         while (node->right == prev || node->right == NULL)
+           {
+             prev = node;
+             node = node->parent;
+             dup_node = dup_node->parent;
+             if (!node)
+               return dup_root;
+           }
+         node = node->right;
+         p_new = &dup_node->right;
+       }
+    }
+}
diff --git a/gnu/regex.c b/gnu/regex.c
new file mode 100644 (file)
index 0000000..5415c8f
--- /dev/null
@@ -0,0 +1,74 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Extended regular expression matching and search library.
+   Copyright (C) 2002, 2003, 2005, 2006, 2009, 2010 Free Software Foundation,
+   Inc.
+   This file is part of the GNU C Library.
+   Contributed by Isamu Hasegawa <isamu@yamato.ibm.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.
+
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include <config.h>
+
+/* Make sure noone compiles this code with a C++ compiler.  */
+#if defined __cplusplus && defined _LIBC
+# error "This is C code, use a C compiler"
+#endif
+
+#ifdef _LIBC
+/* We have to keep the namespace clean.  */
+# define regfree(preg) __regfree (preg)
+# define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef)
+# define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags)
+# define regerror(errcode, preg, errbuf, errbuf_size) \
+       __regerror(errcode, preg, errbuf, errbuf_size)
+# define re_set_registers(bu, re, nu, st, en) \
+       __re_set_registers (bu, re, nu, st, en)
+# define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \
+       __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
+# define re_match(bufp, string, size, pos, regs) \
+       __re_match (bufp, string, size, pos, regs)
+# define re_search(bufp, string, size, startpos, range, regs) \
+       __re_search (bufp, string, size, startpos, range, regs)
+# define re_compile_pattern(pattern, length, bufp) \
+       __re_compile_pattern (pattern, length, bufp)
+# define re_set_syntax(syntax) __re_set_syntax (syntax)
+# define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \
+       __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop)
+# define re_compile_fastmap(bufp) __re_compile_fastmap (bufp)
+
+# include "../locale/localeinfo.h"
+#endif
+
+/* On some systems, limits.h sets RE_DUP_MAX to a lower value than
+   GNU regex allows.  Include it before <regex.h>, which correctly
+   #undefs RE_DUP_MAX and sets it to the right value.  */
+#include <limits.h>
+
+#include <regex.h>
+#include "regex_internal.h"
+
+#include "regex_internal.c"
+#include "regcomp.c"
+#include "regexec.c"
+
+/* Binary backward compatibility.  */
+#if _LIBC
+# include <shlib-compat.h>
+# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3)
+link_warning (re_max_failures, "the 're_max_failures' variable is obsolete and will go away.")
+int re_max_failures = 2000;
+# endif
+#endif
diff --git a/gnu/regex.h b/gnu/regex.h
new file mode 100644 (file)
index 0000000..ef54b55
--- /dev/null
@@ -0,0 +1,678 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Definitions for data structures and routines for the regular
+   expression library.
+   Copyright (C) 1985, 1989, 1990, 1991, 1992, 1993, 1995, 1996, 1997, 1998,
+   2000, 2001, 2002, 2003, 2005, 2006, 2009, 2010 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
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef _REGEX_H
+#define _REGEX_H 1
+
+#include <sys/types.h>
+
+/* Allow the use in C++ code.  */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Define __USE_GNU_REGEX to declare GNU extensions that violate the
+   POSIX name space rules.  */
+#undef __USE_GNU_REGEX
+#if (defined _GNU_SOURCE                                       \
+     || (!defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE    \
+        && !defined _XOPEN_SOURCE))
+# define __USE_GNU_REGEX 1
+#endif
+
+#ifdef _REGEX_LARGE_OFFSETS
+
+/* Use types and values that are wide enough to represent signed and
+   unsigned byte offsets in memory.  This currently works only when
+   the regex code is used outside of the GNU C library; it is not yet
+   supported within glibc itself, and glibc users should not define
+   _REGEX_LARGE_OFFSETS.  */
+
+/* The type of the offset of a byte within a string.
+   For historical reasons POSIX 1003.1-2004 requires that regoff_t be
+   at least as wide as off_t.  However, many common POSIX platforms set
+   regoff_t to the more-sensible ssize_t and the Open Group has
+   signalled its intention to change the requirement to be that
+   regoff_t be at least as wide as ptrdiff_t and ssize_t; see XBD ERN
+   60 (2005-08-25).  We don't know of any hosts where ssize_t or
+   ptrdiff_t is wider than ssize_t, so ssize_t is safe.  */
+typedef ssize_t regoff_t;
+
+/* The type of nonnegative object indexes.  Traditionally, GNU regex
+   uses 'int' for these.  Code that uses __re_idx_t should work
+   regardless of whether the type is signed.  */
+typedef size_t __re_idx_t;
+
+/* The type of object sizes.  */
+typedef size_t __re_size_t;
+
+/* The type of object sizes, in places where the traditional code
+   uses unsigned long int.  */
+typedef size_t __re_long_size_t;
+
+#else
+
+/* Use types that are binary-compatible with the traditional GNU regex
+   implementation, which mishandles strings longer than INT_MAX.  */
+
+typedef int regoff_t;
+typedef int __re_idx_t;
+typedef unsigned int __re_size_t;
+typedef unsigned long int __re_long_size_t;
+
+#endif
+
+/* The following two types have to be signed and unsigned integer type
+   wide enough to hold a value of a pointer.  For most ANSI compilers
+   ptrdiff_t and size_t should be likely OK.  Still size of these two
+   types is 2 for Microsoft C.  Ugh... */
+typedef long int s_reg_t;
+typedef unsigned long int active_reg_t;
+
+/* The following bits are used to determine the regexp syntax we
+   recognize.  The set/not-set meanings are chosen so that Emacs syntax
+   remains the value 0.  The bits are given in alphabetical order, and
+   the definitions shifted by one from the previous bit; thus, when we
+   add or remove a bit, only one other definition need change.  */
+typedef unsigned long int reg_syntax_t;
+
+#ifdef __USE_GNU_REGEX
+
+/* If this bit is not set, then \ inside a bracket expression is literal.
+   If set, then such a \ quotes the following character.  */
+# define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1)
+
+/* If this bit is not set, then + and ? are operators, and \+ and \? are
+     literals.
+   If set, then \+ and \? are operators and + and ? are literals.  */
+# define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
+
+/* If this bit is set, then character classes are supported.  They are:
+     [:alpha:], [:upper:], [:lower:],  [:digit:], [:alnum:], [:xdigit:],
+     [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
+   If not set, then character classes are not supported.  */
+# define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
+
+/* If this bit is set, then ^ and $ are always anchors (outside bracket
+     expressions, of course).
+   If this bit is not set, then it depends:
+        ^  is an anchor if it is at the beginning of a regular
+           expression or after an open-group or an alternation operator;
+        $  is an anchor if it is at the end of a regular expression, or
+           before a close-group or an alternation operator.
+
+   This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
+   POSIX draft 11.2 says that * etc. in leading positions is undefined.
+   We already implemented a previous draft which made those constructs
+   invalid, though, so we haven't changed the code back.  */
+# define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
+
+/* If this bit is set, then special characters are always special
+     regardless of where they are in the pattern.
+   If this bit is not set, then special characters are special only in
+     some contexts; otherwise they are ordinary.  Specifically,
+     * + ? and intervals are only special when not after the beginning,
+     open-group, or alternation operator.  */
+# define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
+
+/* If this bit is set, then *, +, ?, and { cannot be first in an re or
+     immediately after an alternation or begin-group operator.  */
+# define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
+
+/* If this bit is set, then . matches newline.
+   If not set, then it doesn't.  */
+# define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
+
+/* If this bit is set, then . doesn't match NUL.
+   If not set, then it does.  */
+# define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
+
+/* If this bit is set, nonmatching lists [^...] do not match newline.
+   If not set, they do.  */
+# define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
+
+/* If this bit is set, either \{...\} or {...} defines an
+     interval, depending on RE_NO_BK_BRACES.
+   If not set, \{, \}, {, and } are literals.  */
+# define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
+
+/* If this bit is set, +, ? and | aren't recognized as operators.
+   If not set, they are.  */
+# define RE_LIMITED_OPS (RE_INTERVALS << 1)
+
+/* If this bit is set, newline is an alternation operator.
+   If not set, newline is literal.  */
+# define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
+
+/* If this bit is set, then `{...}' defines an interval, and \{ and \}
+     are literals.
+  If not set, then `\{...\}' defines an interval.  */
+# define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
+
+/* If this bit is set, (...) defines a group, and \( and \) are literals.
+   If not set, \(...\) defines a group, and ( and ) are literals.  */
+# define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
+
+/* If this bit is set, then \<digit> matches <digit>.
+   If not set, then \<digit> is a back-reference.  */
+# define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
+
+/* If this bit is set, then | is an alternation operator, and \| is literal.
+   If not set, then \| is an alternation operator, and | is literal.  */
+# define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
+
+/* If this bit is set, then an ending range point collating higher
+     than the starting range point, as in [z-a], is invalid.
+   If not set, then when ending range point collates higher than the
+     starting range point, the range is ignored.  */
+# define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
+
+/* If this bit is set, then an unmatched ) is ordinary.
+   If not set, then an unmatched ) is invalid.  */
+# define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
+
+/* If this bit is set, succeed as soon as we match the whole pattern,
+   without further backtracking.  */
+# define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
+
+/* If this bit is set, do not process the GNU regex operators.
+   If not set, then the GNU regex operators are recognized. */
+# define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1)
+
+/* If this bit is set, turn on internal regex debugging.
+   If not set, and debugging was on, turn it off.
+   This only works if regex.c is compiled -DDEBUG.
+   We define this bit always, so that all that's needed to turn on
+   debugging is to recompile regex.c; the calling code can always have
+   this bit set, and it won't affect anything in the normal case. */
+# define RE_DEBUG (RE_NO_GNU_OPS << 1)
+
+/* If this bit is set, a syntactically invalid interval is treated as
+   a string of ordinary characters.  For example, the ERE 'a{1' is
+   treated as 'a\{1'.  */
+# define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1)
+
+/* If this bit is set, then ignore case when matching.
+   If not set, then case is significant.  */
+# define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1)
+
+/* This bit is used internally like RE_CONTEXT_INDEP_ANCHORS but only
+   for ^, because it is difficult to scan the regex backwards to find
+   whether ^ should be special.  */
+# define RE_CARET_ANCHORS_HERE (RE_ICASE << 1)
+
+/* If this bit is set, then \{ cannot be first in an bre or
+   immediately after an alternation or begin-group operator.  */
+# define RE_CONTEXT_INVALID_DUP (RE_CARET_ANCHORS_HERE << 1)
+
+/* If this bit is set, then no_sub will be set to 1 during
+   re_compile_pattern.  */
+# define RE_NO_SUB (RE_CONTEXT_INVALID_DUP << 1)
+
+#endif /* defined __USE_GNU_REGEX */
+
+/* This global variable defines the particular regexp syntax to use (for
+   some interfaces).  When a regexp is compiled, the syntax used is
+   stored in the pattern buffer, so changing this does not affect
+   already-compiled regexps.  */
+extern reg_syntax_t re_syntax_options;
+\f
+#ifdef __USE_GNU_REGEX
+/* Define combinations of the above bits for the standard possibilities.
+   (The [[[ comments delimit what gets put into the Texinfo file, so
+   don't delete them!)  */
+/* [[[begin syntaxes]]] */
+# define RE_SYNTAX_EMACS 0
+
+# define RE_SYNTAX_AWK                                                 \
+  (RE_BACKSLASH_ESCAPE_IN_LISTS   | RE_DOT_NOT_NULL                    \
+   | RE_NO_BK_PARENS              | RE_NO_BK_REFS                      \
+   | RE_NO_BK_VBAR                | RE_NO_EMPTY_RANGES                 \
+   | RE_DOT_NEWLINE              | RE_CONTEXT_INDEP_ANCHORS            \
+   | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS)
+
+# define RE_SYNTAX_GNU_AWK                                             \
+  ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG)        \
+   & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS           \
+       | RE_CONTEXT_INVALID_OPS ))
+
+# define RE_SYNTAX_POSIX_AWK                                           \
+  (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS             \
+   | RE_INTERVALS          | RE_NO_GNU_OPS)
+
+# define RE_SYNTAX_GREP                                                        \
+  (RE_BK_PLUS_QM              | RE_CHAR_CLASSES                                \
+   | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS                           \
+   | RE_NEWLINE_ALT)
+
+# define RE_SYNTAX_EGREP                                               \
+  (RE_CHAR_CLASSES        | RE_CONTEXT_INDEP_ANCHORS                   \
+   | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE                   \
+   | RE_NEWLINE_ALT       | RE_NO_BK_PARENS                            \
+   | RE_NO_BK_VBAR)
+
+# define RE_SYNTAX_POSIX_EGREP                                         \
+  (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES                    \
+   | RE_INVALID_INTERVAL_ORD)
+
+/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff.  */
+# define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
+
+# define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
+
+/* Syntax bits common to both basic and extended POSIX regex syntax.  */
+# define _RE_SYNTAX_POSIX_COMMON                                       \
+  (RE_CHAR_CLASSES | RE_DOT_NEWLINE      | RE_DOT_NOT_NULL             \
+   | RE_INTERVALS  | RE_NO_EMPTY_RANGES)
+
+# define RE_SYNTAX_POSIX_BASIC                                         \
+  (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM | RE_CONTEXT_INVALID_DUP)
+
+/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
+   RE_LIMITED_OPS, i.e., \? \+ \| are not recognized.  Actually, this
+   isn't minimal, since other operators, such as \`, aren't disabled.  */
+# define RE_SYNTAX_POSIX_MINIMAL_BASIC                                 \
+  (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
+
+# define RE_SYNTAX_POSIX_EXTENDED                                      \
+  (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS                 \
+   | RE_CONTEXT_INDEP_OPS   | RE_NO_BK_BRACES                          \
+   | RE_NO_BK_PARENS        | RE_NO_BK_VBAR                            \
+   | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD)
+
+/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is
+   removed and RE_NO_BK_REFS is added.  */
+# define RE_SYNTAX_POSIX_MINIMAL_EXTENDED                              \
+  (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS                 \
+   | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES                          \
+   | RE_NO_BK_PARENS        | RE_NO_BK_REFS                            \
+   | RE_NO_BK_VBAR         | RE_UNMATCHED_RIGHT_PAREN_ORD)
+/* [[[end syntaxes]]] */
+
+#endif /* defined __USE_GNU_REGEX */
+\f
+#ifdef __USE_GNU_REGEX
+
+/* Maximum number of duplicates an interval can allow.  POSIX-conforming
+   systems might define this in <limits.h>, but we want our
+   value, so remove any previous define.  */
+# ifdef RE_DUP_MAX
+#  undef RE_DUP_MAX
+# endif
+
+/* RE_DUP_MAX is 2**15 - 1 because an earlier implementation stored
+   the counter as a 2-byte signed integer.  This is no longer true, so
+   RE_DUP_MAX could be increased to (INT_MAX / 10 - 1), or to
+   ((SIZE_MAX - 2) / 10 - 1) if _REGEX_LARGE_OFFSETS is defined.
+   However, there would be a huge performance problem if someone
+   actually used a pattern like a\{214748363\}, so RE_DUP_MAX retains
+   its historical value.  */
+# define RE_DUP_MAX (0x7fff)
+
+#endif /* defined __USE_GNU_REGEX */
+
+
+/* POSIX `cflags' bits (i.e., information for `regcomp').  */
+
+/* If this bit is set, then use extended regular expression syntax.
+   If not set, then use basic regular expression syntax.  */
+#define REG_EXTENDED 1
+
+/* If this bit is set, then ignore case when matching.
+   If not set, then case is significant.  */
+#define REG_ICASE (1 << 1)
+
+/* If this bit is set, then anchors do not match at newline
+     characters in the string.
+   If not set, then anchors do match at newlines.  */
+#define REG_NEWLINE (1 << 2)
+
+/* If this bit is set, then report only success or fail in regexec.
+   If not set, then returns differ between not matching and errors.  */
+#define REG_NOSUB (1 << 3)
+
+
+/* POSIX `eflags' bits (i.e., information for regexec).  */
+
+/* If this bit is set, then the beginning-of-line operator doesn't match
+     the beginning of the string (presumably because it's not the
+     beginning of a line).
+   If not set, then the beginning-of-line operator does match the
+     beginning of the string.  */
+#define REG_NOTBOL 1
+
+/* Like REG_NOTBOL, except for the end-of-line.  */
+#define REG_NOTEOL (1 << 1)
+
+/* Use PMATCH[0] to delimit the start and end of the search in the
+   buffer.  */
+#define REG_STARTEND (1 << 2)
+
+
+/* If any error codes are removed, changed, or added, update the
+   `__re_error_msgid' table in regcomp.c.  */
+
+typedef enum
+{
+  _REG_ENOSYS = -1,    /* This will never happen for this implementation.  */
+  _REG_NOERROR = 0,    /* Success.  */
+  _REG_NOMATCH,                /* Didn't find a match (for regexec).  */
+
+  /* POSIX regcomp return error codes.  (In the order listed in the
+     standard.)  */
+  _REG_BADPAT,         /* Invalid pattern.  */
+  _REG_ECOLLATE,       /* Invalid collating element.  */
+  _REG_ECTYPE,         /* Invalid character class name.  */
+  _REG_EESCAPE,                /* Trailing backslash.  */
+  _REG_ESUBREG,                /* Invalid back reference.  */
+  _REG_EBRACK,         /* Unmatched left bracket.  */
+  _REG_EPAREN,         /* Parenthesis imbalance.  */
+  _REG_EBRACE,         /* Unmatched \{.  */
+  _REG_BADBR,          /* Invalid contents of \{\}.  */
+  _REG_ERANGE,         /* Invalid range end.  */
+  _REG_ESPACE,         /* Ran out of memory.  */
+  _REG_BADRPT,         /* No preceding re for repetition op.  */
+
+  /* Error codes we've added.  */
+  _REG_EEND,           /* Premature end.  */
+  _REG_ESIZE,          /* Compiled pattern bigger than 2^16 bytes.  */
+  _REG_ERPAREN         /* Unmatched ) or \); not returned from regcomp.  */
+} reg_errcode_t;
+
+#ifdef _XOPEN_SOURCE
+# define REG_ENOSYS    _REG_ENOSYS
+#endif
+#define REG_NOERROR    _REG_NOERROR
+#define REG_NOMATCH    _REG_NOMATCH
+#define REG_BADPAT     _REG_BADPAT
+#define REG_ECOLLATE   _REG_ECOLLATE
+#define REG_ECTYPE     _REG_ECTYPE
+#define REG_EESCAPE    _REG_EESCAPE
+#define REG_ESUBREG    _REG_ESUBREG
+#define REG_EBRACK     _REG_EBRACK
+#define REG_EPAREN     _REG_EPAREN
+#define REG_EBRACE     _REG_EBRACE
+#define REG_BADBR      _REG_BADBR
+#define REG_ERANGE     _REG_ERANGE
+#define REG_ESPACE     _REG_ESPACE
+#define REG_BADRPT     _REG_BADRPT
+#define REG_EEND       _REG_EEND
+#define REG_ESIZE      _REG_ESIZE
+#define REG_ERPAREN    _REG_ERPAREN
+\f
+/* struct re_pattern_buffer normally uses member names like `buffer'
+   that POSIX does not allow.  In POSIX mode these members have names
+   with leading `re_' (e.g., `re_buffer').  */
+#ifdef __USE_GNU_REGEX
+# define _REG_RE_NAME(id) id
+# define _REG_RM_NAME(id) id
+#else
+# define _REG_RE_NAME(id) re_##id
+# define _REG_RM_NAME(id) rm_##id
+#endif
+
+/* The user can specify the type of the re_translate member by
+   defining the macro RE_TRANSLATE_TYPE, which defaults to unsigned
+   char *.  This pollutes the POSIX name space, so in POSIX mode just
+   use unsigned char *.  */
+#ifdef __USE_GNU_REGEX
+# ifndef RE_TRANSLATE_TYPE
+#  define RE_TRANSLATE_TYPE unsigned char *
+# endif
+# define REG_TRANSLATE_TYPE RE_TRANSLATE_TYPE
+#else
+# define REG_TRANSLATE_TYPE unsigned char *
+#endif
+
+/* This data structure represents a compiled pattern.  Before calling
+   the pattern compiler, the fields `buffer', `allocated', `fastmap',
+   `translate', and `no_sub' can be set.  After the pattern has been
+   compiled, the `re_nsub' field is available.  All other fields are
+   private to the regex routines.  */
+
+struct re_pattern_buffer
+{
+  /* Space that holds the compiled pattern.  It is declared as
+     `unsigned char *' because its elements are sometimes used as
+     array indexes.  */
+  unsigned char *_REG_RE_NAME (buffer);
+
+  /* Number of bytes to which `buffer' points.  */
+  __re_long_size_t _REG_RE_NAME (allocated);
+
+  /* Number of bytes actually used in `buffer'.  */
+  __re_long_size_t _REG_RE_NAME (used);
+
+  /* Syntax setting with which the pattern was compiled.  */
+  reg_syntax_t _REG_RE_NAME (syntax);
+
+  /* Pointer to a fastmap, if any, otherwise zero.  re_search uses the
+     fastmap, if there is one, to skip over impossible starting points
+     for matches.  */
+  char *_REG_RE_NAME (fastmap);
+
+  /* Either a translate table to apply to all characters before
+     comparing them, or zero for no translation.  The translation is
+     applied to a pattern when it is compiled and to a string when it
+     is matched.  */
+  REG_TRANSLATE_TYPE _REG_RE_NAME (translate);
+
+  /* Number of subexpressions found by the compiler.  */
+  size_t re_nsub;
+
+  /* Zero if this pattern cannot match the empty string, one else.
+     Well, in truth it's used only in `re_search_2', to see whether or
+     not we should use the fastmap, so we don't set this absolutely
+     perfectly; see `re_compile_fastmap' (the `duplicate' case).  */
+  unsigned int _REG_RE_NAME (can_be_null) : 1;
+
+  /* If REGS_UNALLOCATED, allocate space in the `regs' structure
+     for `max (RE_NREGS, re_nsub + 1)' groups.
+     If REGS_REALLOCATE, reallocate space if necessary.
+     If REGS_FIXED, use what's there.  */
+#ifdef __USE_GNU_REGEX
+# define REGS_UNALLOCATED 0
+# define REGS_REALLOCATE 1
+# define REGS_FIXED 2
+#endif
+  unsigned int _REG_RE_NAME (regs_allocated) : 2;
+
+  /* Set to zero when `regex_compile' compiles a pattern; set to one
+     by `re_compile_fastmap' if it updates the fastmap.  */
+  unsigned int _REG_RE_NAME (fastmap_accurate) : 1;
+
+  /* If set, `re_match_2' does not return information about
+     subexpressions.  */
+  unsigned int _REG_RE_NAME (no_sub) : 1;
+
+  /* If set, a beginning-of-line anchor doesn't match at the beginning
+     of the string.  */
+  unsigned int _REG_RE_NAME (not_bol) : 1;
+
+  /* Similarly for an end-of-line anchor.  */
+  unsigned int _REG_RE_NAME (not_eol) : 1;
+
+  /* If true, an anchor at a newline matches.  */
+  unsigned int _REG_RE_NAME (newline_anchor) : 1;
+
+/* [[[end pattern_buffer]]] */
+};
+
+typedef struct re_pattern_buffer regex_t;
+\f
+/* This is the structure we store register match data in.  See
+   regex.texinfo for a full description of what registers match.  */
+struct re_registers
+{
+  __re_size_t _REG_RM_NAME (num_regs);
+  regoff_t *_REG_RM_NAME (start);
+  regoff_t *_REG_RM_NAME (end);
+};
+
+
+/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
+   `re_match_2' returns information about at least this many registers
+   the first time a `regs' structure is passed.  */
+#if !defined RE_NREGS && defined __USE_GNU_REGEX
+# define RE_NREGS 30
+#endif
+
+
+/* POSIX specification for registers.  Aside from the different names than
+   `re_registers', POSIX uses an array of structures, instead of a
+   structure of arrays.  */
+typedef struct
+{
+  regoff_t rm_so;  /* Byte offset from string's start to substring's start.  */
+  regoff_t rm_eo;  /* Byte offset from string's start to substring's end.  */
+} regmatch_t;
+\f
+/* Declarations for routines.  */
+
+/* Sets the current default syntax to SYNTAX, and return the old syntax.
+   You can also simply assign to the `re_syntax_options' variable.  */
+extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax);
+
+/* Compile the regular expression PATTERN, with length LENGTH
+   and syntax given by the global `re_syntax_options', into the buffer
+   BUFFER.  Return NULL if successful, and an error string if not.  */
+extern const char *re_compile_pattern (const char *__pattern, size_t __length,
+                                      struct re_pattern_buffer *__buffer);
+
+
+/* Compile a fastmap for the compiled pattern in BUFFER; used to
+   accelerate searches.  Return 0 if successful and -2 if was an
+   internal error.  */
+extern int re_compile_fastmap (struct re_pattern_buffer *__buffer);
+
+
+/* Search in the string STRING (with length LENGTH) for the pattern
+   compiled into BUFFER.  Start searching at position START, for RANGE
+   characters.  Return the starting position of the match, -1 for no
+   match, or -2 for an internal error.  Also return register
+   information in REGS (if REGS and BUFFER->no_sub are nonzero).  */
+extern regoff_t re_search (struct re_pattern_buffer *__buffer,
+                          const char *__string, __re_idx_t __length,
+                          __re_idx_t __start, regoff_t __range,
+                          struct re_registers *__regs);
+
+
+/* Like `re_search', but search in the concatenation of STRING1 and
+   STRING2.  Also, stop searching at index START + STOP.  */
+extern regoff_t re_search_2 (struct re_pattern_buffer *__buffer,
+                            const char *__string1, __re_idx_t __length1,
+                            const char *__string2, __re_idx_t __length2,
+                            __re_idx_t __start, regoff_t __range,
+                            struct re_registers *__regs,
+                            __re_idx_t __stop);
+
+
+/* Like `re_search', but return how many characters in STRING the regexp
+   in BUFFER matched, starting at position START.  */
+extern regoff_t re_match (struct re_pattern_buffer *__buffer,
+                         const char *__string, __re_idx_t __length,
+                         __re_idx_t __start, struct re_registers *__regs);
+
+
+/* Relates to `re_match' as `re_search_2' relates to `re_search'.  */
+extern regoff_t re_match_2 (struct re_pattern_buffer *__buffer,
+                           const char *__string1, __re_idx_t __length1,
+                           const char *__string2, __re_idx_t __length2,
+                           __re_idx_t __start, struct re_registers *__regs,
+                           __re_idx_t __stop);
+
+
+/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
+   ENDS.  Subsequent matches using BUFFER and REGS will use this memory
+   for recording register information.  STARTS and ENDS must be
+   allocated with malloc, and must each be at least `NUM_REGS * sizeof
+   (regoff_t)' bytes long.
+
+   If NUM_REGS == 0, then subsequent matches should allocate their own
+   register data.
+
+   Unless this function is called, the first search or match using
+   PATTERN_BUFFER will allocate its own register data, without
+   freeing the old data.  */
+extern void re_set_registers (struct re_pattern_buffer *__buffer,
+                             struct re_registers *__regs,
+                             __re_size_t __num_regs,
+                             regoff_t *__starts, regoff_t *__ends);
+
+#if defined _REGEX_RE_COMP || defined _LIBC
+# ifndef _CRAY
+/* 4.2 bsd compatibility.  */
+extern char *re_comp (const char *);
+extern int re_exec (const char *);
+# endif
+#endif
+
+/* GCC 2.95 and later have "__restrict"; C99 compilers have
+   "restrict", and "configure" may have defined "restrict".
+   Other compilers use __restrict, __restrict__, and _Restrict, and
+   'configure' might #define 'restrict' to those words, so pick a
+   different name.  */
+#ifndef _Restrict_
+# if 199901L <= __STDC_VERSION__
+#  define _Restrict_ restrict
+# elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)
+#  define _Restrict_ __restrict
+# else
+#  define _Restrict_
+# endif
+#endif
+/* gcc 3.1 and up support the [restrict] syntax.  Don't trust
+   sys/cdefs.h's definition of __restrict_arr, though, as it
+   mishandles gcc -ansi -pedantic.  */
+#ifndef _Restrict_arr_
+# if ((199901L <= __STDC_VERSION__                                     \
+       || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__))    \
+          && !__STRICT_ANSI__))                                        \
+      && !defined __GNUG__)
+#  define _Restrict_arr_ _Restrict_
+# else
+#  define _Restrict_arr_
+# endif
+#endif
+
+/* POSIX compatibility.  */
+extern int regcomp (regex_t *_Restrict_ __preg,
+                   const char *_Restrict_ __pattern,
+                   int __cflags);
+
+extern int regexec (const regex_t *_Restrict_ __preg,
+                   const char *_Restrict_ __string, size_t __nmatch,
+                   regmatch_t __pmatch[_Restrict_arr_],
+                   int __eflags);
+
+extern size_t regerror (int __errcode, const regex_t *_Restrict_ __preg,
+                       char *_Restrict_ __errbuf, size_t __errbuf_size);
+
+extern void regfree (regex_t *__preg);
+
+
+#ifdef __cplusplus
+}
+#endif /* C++ */
+
+#endif /* regex.h */
diff --git a/gnu/regex_internal.c b/gnu/regex_internal.c
new file mode 100644 (file)
index 0000000..c964814
--- /dev/null
@@ -0,0 +1,1742 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Extended regular expression matching and search library.
+   Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+   Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Isamu Hasegawa <isamu@yamato.ibm.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.
+
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+static void re_string_construct_common (const char *str, Idx len,
+                                       re_string_t *pstr,
+                                       RE_TRANSLATE_TYPE trans, bool icase,
+                                       const re_dfa_t *dfa) internal_function;
+static re_dfastate_t *create_ci_newstate (const re_dfa_t *dfa,
+                                         const re_node_set *nodes,
+                                         re_hashval_t hash) internal_function;
+static re_dfastate_t *create_cd_newstate (const re_dfa_t *dfa,
+                                         const re_node_set *nodes,
+                                         unsigned int context,
+                                         re_hashval_t hash) internal_function;
+\f
+/* Functions for string operation.  */
+
+/* This function allocate the buffers.  It is necessary to call
+   re_string_reconstruct before using the object.  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+re_string_allocate (re_string_t *pstr, const char *str, Idx len, Idx init_len,
+                   RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa)
+{
+  reg_errcode_t ret;
+  Idx init_buf_len;
+
+  /* Ensure at least one character fits into the buffers.  */
+  if (init_len < dfa->mb_cur_max)
+    init_len = dfa->mb_cur_max;
+  init_buf_len = (len + 1 < init_len) ? len + 1: init_len;
+  re_string_construct_common (str, len, pstr, trans, icase, dfa);
+
+  ret = re_string_realloc_buffers (pstr, init_buf_len);
+  if (BE (ret != REG_NOERROR, 0))
+    return ret;
+
+  pstr->word_char = dfa->word_char;
+  pstr->word_ops_used = dfa->word_ops_used;
+  pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str;
+  pstr->valid_len = (pstr->mbs_allocated || dfa->mb_cur_max > 1) ? 0 : len;
+  pstr->valid_raw_len = pstr->valid_len;
+  return REG_NOERROR;
+}
+
+/* This function allocate the buffers, and initialize them.  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+re_string_construct (re_string_t *pstr, const char *str, Idx len,
+                    RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa)
+{
+  reg_errcode_t ret;
+  memset (pstr, '\0', sizeof (re_string_t));
+  re_string_construct_common (str, len, pstr, trans, icase, dfa);
+
+  if (len > 0)
+    {
+      ret = re_string_realloc_buffers (pstr, len + 1);
+      if (BE (ret != REG_NOERROR, 0))
+       return ret;
+    }
+  pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str;
+
+  if (icase)
+    {
+#ifdef RE_ENABLE_I18N
+      if (dfa->mb_cur_max > 1)
+       {
+         while (1)
+           {
+             ret = build_wcs_upper_buffer (pstr);
+             if (BE (ret != REG_NOERROR, 0))
+               return ret;
+             if (pstr->valid_raw_len >= len)
+               break;
+             if (pstr->bufs_len > pstr->valid_len + dfa->mb_cur_max)
+               break;
+             ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2);
+             if (BE (ret != REG_NOERROR, 0))
+               return ret;
+           }
+       }
+      else
+#endif /* RE_ENABLE_I18N  */
+       build_upper_buffer (pstr);
+    }
+  else
+    {
+#ifdef RE_ENABLE_I18N
+      if (dfa->mb_cur_max > 1)
+       build_wcs_buffer (pstr);
+      else
+#endif /* RE_ENABLE_I18N  */
+       {
+         if (trans != NULL)
+           re_string_translate_buffer (pstr);
+         else
+           {
+             pstr->valid_len = pstr->bufs_len;
+             pstr->valid_raw_len = pstr->bufs_len;
+           }
+       }
+    }
+
+  return REG_NOERROR;
+}
+
+/* Helper functions for re_string_allocate, and re_string_construct.  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len)
+{
+#ifdef RE_ENABLE_I18N
+  if (pstr->mb_cur_max > 1)
+    {
+      wint_t *new_wcs;
+
+      /* Avoid overflow.  */
+      size_t max_object_size = MAX (sizeof (wint_t), sizeof (Idx));
+      if (BE (SIZE_MAX / max_object_size < new_buf_len, 0))
+       return REG_ESPACE;
+
+      new_wcs = re_realloc (pstr->wcs, wint_t, new_buf_len);
+      if (BE (new_wcs == NULL, 0))
+       return REG_ESPACE;
+      pstr->wcs = new_wcs;
+      if (pstr->offsets != NULL)
+       {
+         Idx *new_offsets = re_realloc (pstr->offsets, Idx, new_buf_len);
+         if (BE (new_offsets == NULL, 0))
+           return REG_ESPACE;
+         pstr->offsets = new_offsets;
+       }
+    }
+#endif /* RE_ENABLE_I18N  */
+  if (pstr->mbs_allocated)
+    {
+      unsigned char *new_mbs = re_realloc (pstr->mbs, unsigned char,
+                                          new_buf_len);
+      if (BE (new_mbs == NULL, 0))
+       return REG_ESPACE;
+      pstr->mbs = new_mbs;
+    }
+  pstr->bufs_len = new_buf_len;
+  return REG_NOERROR;
+}
+
+
+static void
+internal_function
+re_string_construct_common (const char *str, Idx len, re_string_t *pstr,
+                           RE_TRANSLATE_TYPE trans, bool icase,
+                           const re_dfa_t *dfa)
+{
+  pstr->raw_mbs = (const unsigned char *) str;
+  pstr->len = len;
+  pstr->raw_len = len;
+  pstr->trans = trans;
+  pstr->icase = icase;
+  pstr->mbs_allocated = (trans != NULL || icase);
+  pstr->mb_cur_max = dfa->mb_cur_max;
+  pstr->is_utf8 = dfa->is_utf8;
+  pstr->map_notascii = dfa->map_notascii;
+  pstr->stop = pstr->len;
+  pstr->raw_stop = pstr->stop;
+}
+
+#ifdef RE_ENABLE_I18N
+
+/* Build wide character buffer PSTR->WCS.
+   If the byte sequence of the string are:
+     <mb1>(0), <mb1>(1), <mb2>(0), <mb2>(1), <sb3>
+   Then wide character buffer will be:
+     <wc1>   , WEOF    , <wc2>   , WEOF    , <wc3>
+   We use WEOF for padding, they indicate that the position isn't
+   a first byte of a multibyte character.
+
+   Note that this function assumes PSTR->VALID_LEN elements are already
+   built and starts from PSTR->VALID_LEN.  */
+
+static void
+internal_function
+build_wcs_buffer (re_string_t *pstr)
+{
+#ifdef _LIBC
+  unsigned char buf[MB_LEN_MAX];
+  assert (MB_LEN_MAX >= pstr->mb_cur_max);
+#else
+  unsigned char buf[64];
+#endif
+  mbstate_t prev_st;
+  Idx byte_idx, end_idx, remain_len;
+  size_t mbclen;
+
+  /* Build the buffers from pstr->valid_len to either pstr->len or
+     pstr->bufs_len.  */
+  end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len;
+  for (byte_idx = pstr->valid_len; byte_idx < end_idx;)
+    {
+      wchar_t wc;
+      const char *p;
+
+      remain_len = end_idx - byte_idx;
+      prev_st = pstr->cur_state;
+      /* Apply the translation if we need.  */
+      if (BE (pstr->trans != NULL, 0))
+       {
+         int i, ch;
+
+         for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i)
+           {
+             ch = pstr->raw_mbs [pstr->raw_mbs_idx + byte_idx + i];
+             buf[i] = pstr->mbs[byte_idx + i] = pstr->trans[ch];
+           }
+         p = (const char *) buf;
+       }
+      else
+       p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx;
+      mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state);
+      if (BE (mbclen == (size_t) -2, 0))
+       {
+         /* The buffer doesn't have enough space, finish to build.  */
+         pstr->cur_state = prev_st;
+         break;
+       }
+      else if (BE (mbclen == (size_t) -1 || mbclen == 0, 0))
+       {
+         /* We treat these cases as a singlebyte character.  */
+         mbclen = 1;
+         wc = (wchar_t) pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx];
+         if (BE (pstr->trans != NULL, 0))
+           wc = pstr->trans[wc];
+         pstr->cur_state = prev_st;
+       }
+
+      /* Write wide character and padding.  */
+      pstr->wcs[byte_idx++] = wc;
+      /* Write paddings.  */
+      for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;)
+       pstr->wcs[byte_idx++] = WEOF;
+    }
+  pstr->valid_len = byte_idx;
+  pstr->valid_raw_len = byte_idx;
+}
+
+/* Build wide character buffer PSTR->WCS like build_wcs_buffer,
+   but for REG_ICASE.  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+build_wcs_upper_buffer (re_string_t *pstr)
+{
+  mbstate_t prev_st;
+  Idx src_idx, byte_idx, end_idx, remain_len;
+  size_t mbclen;
+#ifdef _LIBC
+  char buf[MB_LEN_MAX];
+  assert (MB_LEN_MAX >= pstr->mb_cur_max);
+#else
+  char buf[64];
+#endif
+
+  byte_idx = pstr->valid_len;
+  end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len;
+
+  /* The following optimization assumes that ASCII characters can be
+     mapped to wide characters with a simple cast.  */
+  if (! pstr->map_notascii && pstr->trans == NULL && !pstr->offsets_needed)
+    {
+      while (byte_idx < end_idx)
+       {
+         wchar_t wc;
+
+         if (isascii (pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx])
+             && mbsinit (&pstr->cur_state))
+           {
+             /* In case of a singlebyte character.  */
+             pstr->mbs[byte_idx]
+               = toupper (pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]);
+             /* The next step uses the assumption that wchar_t is encoded
+                ASCII-safe: all ASCII values can be converted like this.  */
+             pstr->wcs[byte_idx] = (wchar_t) pstr->mbs[byte_idx];
+             ++byte_idx;
+             continue;
+           }
+
+         remain_len = end_idx - byte_idx;
+         prev_st = pstr->cur_state;
+         mbclen = __mbrtowc (&wc,
+                             ((const char *) pstr->raw_mbs + pstr->raw_mbs_idx
+                              + byte_idx), remain_len, &pstr->cur_state);
+         if (BE (mbclen < (size_t) -2, 1))
+           {
+             wchar_t wcu = wc;
+             if (iswlower (wc))
+               {
+                 size_t mbcdlen;
+
+                 wcu = towupper (wc);
+                 mbcdlen = wcrtomb (buf, wcu, &prev_st);
+                 if (BE (mbclen == mbcdlen, 1))
+                   memcpy (pstr->mbs + byte_idx, buf, mbclen);
+                 else
+                   {
+                     src_idx = byte_idx;
+                     goto offsets_needed;
+                   }
+               }
+             else
+               memcpy (pstr->mbs + byte_idx,
+                       pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx, mbclen);
+             pstr->wcs[byte_idx++] = wcu;
+             /* Write paddings.  */
+             for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;)
+               pstr->wcs[byte_idx++] = WEOF;
+           }
+         else if (mbclen == (size_t) -1 || mbclen == 0)
+           {
+             /* It is an invalid character or '\0'.  Just use the byte.  */
+             int ch = pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx];
+             pstr->mbs[byte_idx] = ch;
+             /* And also cast it to wide char.  */
+             pstr->wcs[byte_idx++] = (wchar_t) ch;
+             if (BE (mbclen == (size_t) -1, 0))
+               pstr->cur_state = prev_st;
+           }
+         else
+           {
+             /* The buffer doesn't have enough space, finish to build.  */
+             pstr->cur_state = prev_st;
+             break;
+           }
+       }
+      pstr->valid_len = byte_idx;
+      pstr->valid_raw_len = byte_idx;
+      return REG_NOERROR;
+    }
+  else
+    for (src_idx = pstr->valid_raw_len; byte_idx < end_idx;)
+      {
+       wchar_t wc;
+       const char *p;
+      offsets_needed:
+       remain_len = end_idx - byte_idx;
+       prev_st = pstr->cur_state;
+       if (BE (pstr->trans != NULL, 0))
+         {
+           int i, ch;
+
+           for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i)
+             {
+               ch = pstr->raw_mbs [pstr->raw_mbs_idx + src_idx + i];
+               buf[i] = pstr->trans[ch];
+             }
+           p = (const char *) buf;
+         }
+       else
+         p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + src_idx;
+       mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state);
+       if (BE (mbclen < (size_t) -2, 1))
+         {
+           wchar_t wcu = wc;
+           if (iswlower (wc))
+             {
+               size_t mbcdlen;
+
+               wcu = towupper (wc);
+               mbcdlen = wcrtomb ((char *) buf, wcu, &prev_st);
+               if (BE (mbclen == mbcdlen, 1))
+                 memcpy (pstr->mbs + byte_idx, buf, mbclen);
+               else if (mbcdlen != (size_t) -1)
+                 {
+                   size_t i;
+
+                   if (byte_idx + mbcdlen > pstr->bufs_len)
+                     {
+                       pstr->cur_state = prev_st;
+                       break;
+                     }
+
+                   if (pstr->offsets == NULL)
+                     {
+                       pstr->offsets = re_malloc (Idx, pstr->bufs_len);
+
+                       if (pstr->offsets == NULL)
+                         return REG_ESPACE;
+                     }
+                   if (!pstr->offsets_needed)
+                     {
+                       for (i = 0; i < (size_t) byte_idx; ++i)
+                         pstr->offsets[i] = i;
+                       pstr->offsets_needed = 1;
+                     }
+
+                   memcpy (pstr->mbs + byte_idx, buf, mbcdlen);
+                   pstr->wcs[byte_idx] = wcu;
+                   pstr->offsets[byte_idx] = src_idx;
+                   for (i = 1; i < mbcdlen; ++i)
+                     {
+                       pstr->offsets[byte_idx + i]
+                         = src_idx + (i < mbclen ? i : mbclen - 1);
+                       pstr->wcs[byte_idx + i] = WEOF;
+                     }
+                   pstr->len += mbcdlen - mbclen;
+                   if (pstr->raw_stop > src_idx)
+                     pstr->stop += mbcdlen - mbclen;
+                   end_idx = (pstr->bufs_len > pstr->len)
+                             ? pstr->len : pstr->bufs_len;
+                   byte_idx += mbcdlen;
+                   src_idx += mbclen;
+                   continue;
+                 }
+               else
+                 memcpy (pstr->mbs + byte_idx, p, mbclen);
+             }
+           else
+             memcpy (pstr->mbs + byte_idx, p, mbclen);
+
+           if (BE (pstr->offsets_needed != 0, 0))
+             {
+               size_t i;
+               for (i = 0; i < mbclen; ++i)
+                 pstr->offsets[byte_idx + i] = src_idx + i;
+             }
+           src_idx += mbclen;
+
+           pstr->wcs[byte_idx++] = wcu;
+           /* Write paddings.  */
+           for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;)
+             pstr->wcs[byte_idx++] = WEOF;
+         }
+       else if (mbclen == (size_t) -1 || mbclen == 0)
+         {
+           /* It is an invalid character or '\0'.  Just use the byte.  */
+           int ch = pstr->raw_mbs[pstr->raw_mbs_idx + src_idx];
+
+           if (BE (pstr->trans != NULL, 0))
+             ch = pstr->trans [ch];
+           pstr->mbs[byte_idx] = ch;
+
+           if (BE (pstr->offsets_needed != 0, 0))
+             pstr->offsets[byte_idx] = src_idx;
+           ++src_idx;
+
+           /* And also cast it to wide char.  */
+           pstr->wcs[byte_idx++] = (wchar_t) ch;
+           if (BE (mbclen == (size_t) -1, 0))
+             pstr->cur_state = prev_st;
+         }
+       else
+         {
+           /* The buffer doesn't have enough space, finish to build.  */
+           pstr->cur_state = prev_st;
+           break;
+         }
+      }
+  pstr->valid_len = byte_idx;
+  pstr->valid_raw_len = src_idx;
+  return REG_NOERROR;
+}
+
+/* Skip characters until the index becomes greater than NEW_RAW_IDX.
+   Return the index.  */
+
+static Idx
+internal_function
+re_string_skip_chars (re_string_t *pstr, Idx new_raw_idx, wint_t *last_wc)
+{
+  mbstate_t prev_st;
+  Idx rawbuf_idx;
+  size_t mbclen;
+  wint_t wc = WEOF;
+
+  /* Skip the characters which are not necessary to check.  */
+  for (rawbuf_idx = pstr->raw_mbs_idx + pstr->valid_raw_len;
+       rawbuf_idx < new_raw_idx;)
+    {
+      wchar_t wc2;
+      Idx remain_len;
+      remain_len = pstr->len - rawbuf_idx;
+      prev_st = pstr->cur_state;
+      mbclen = __mbrtowc (&wc2, (const char *) pstr->raw_mbs + rawbuf_idx,
+                         remain_len, &pstr->cur_state);
+      if (BE (mbclen == (size_t) -2 || mbclen == (size_t) -1 || mbclen == 0, 0))
+       {
+         /* We treat these cases as a single byte character.  */
+         if (mbclen == 0 || remain_len == 0)
+           wc = L'\0';
+         else
+           wc = *(unsigned char *) (pstr->raw_mbs + rawbuf_idx);
+         mbclen = 1;
+         pstr->cur_state = prev_st;
+       }
+      else
+       wc = wc2;
+      /* Then proceed the next character.  */
+      rawbuf_idx += mbclen;
+    }
+  *last_wc = wc;
+  return rawbuf_idx;
+}
+#endif /* RE_ENABLE_I18N  */
+
+/* Build the buffer PSTR->MBS, and apply the translation if we need.
+   This function is used in case of REG_ICASE.  */
+
+static void
+internal_function
+build_upper_buffer (re_string_t *pstr)
+{
+  Idx char_idx, end_idx;
+  end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len;
+
+  for (char_idx = pstr->valid_len; char_idx < end_idx; ++char_idx)
+    {
+      int ch = pstr->raw_mbs[pstr->raw_mbs_idx + char_idx];
+      if (BE (pstr->trans != NULL, 0))
+       ch = pstr->trans[ch];
+      if (islower (ch))
+       pstr->mbs[char_idx] = toupper (ch);
+      else
+       pstr->mbs[char_idx] = ch;
+    }
+  pstr->valid_len = char_idx;
+  pstr->valid_raw_len = char_idx;
+}
+
+/* Apply TRANS to the buffer in PSTR.  */
+
+static void
+internal_function
+re_string_translate_buffer (re_string_t *pstr)
+{
+  Idx buf_idx, end_idx;
+  end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len;
+
+  for (buf_idx = pstr->valid_len; buf_idx < end_idx; ++buf_idx)
+    {
+      int ch = pstr->raw_mbs[pstr->raw_mbs_idx + buf_idx];
+      pstr->mbs[buf_idx] = pstr->trans[ch];
+    }
+
+  pstr->valid_len = buf_idx;
+  pstr->valid_raw_len = buf_idx;
+}
+
+/* This function re-construct the buffers.
+   Concretely, convert to wide character in case of pstr->mb_cur_max > 1,
+   convert to upper case in case of REG_ICASE, apply translation.  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags)
+{
+  Idx offset;
+
+  if (BE (pstr->raw_mbs_idx <= idx, 0))
+    offset = idx - pstr->raw_mbs_idx;
+  else
+    {
+      /* Reset buffer.  */
+#ifdef RE_ENABLE_I18N
+      if (pstr->mb_cur_max > 1)
+       memset (&pstr->cur_state, '\0', sizeof (mbstate_t));
+#endif /* RE_ENABLE_I18N */
+      pstr->len = pstr->raw_len;
+      pstr->stop = pstr->raw_stop;
+      pstr->valid_len = 0;
+      pstr->raw_mbs_idx = 0;
+      pstr->valid_raw_len = 0;
+      pstr->offsets_needed = 0;
+      pstr->tip_context = ((eflags & REG_NOTBOL) ? CONTEXT_BEGBUF
+                          : CONTEXT_NEWLINE | CONTEXT_BEGBUF);
+      if (!pstr->mbs_allocated)
+       pstr->mbs = (unsigned char *) pstr->raw_mbs;
+      offset = idx;
+    }
+
+  if (BE (offset != 0, 1))
+    {
+      /* Should the already checked characters be kept?  */
+      if (BE (offset < pstr->valid_raw_len, 1))
+       {
+         /* Yes, move them to the front of the buffer.  */
+#ifdef RE_ENABLE_I18N
+         if (BE (pstr->offsets_needed, 0))
+           {
+             Idx low = 0, high = pstr->valid_len, mid;
+             do
+               {
+                 mid = (high + low) / 2;
+                 if (pstr->offsets[mid] > offset)
+                   high = mid;
+                 else if (pstr->offsets[mid] < offset)
+                   low = mid + 1;
+                 else
+                   break;
+               }
+             while (low < high);
+             if (pstr->offsets[mid] < offset)
+               ++mid;
+             pstr->tip_context = re_string_context_at (pstr, mid - 1,
+                                                       eflags);
+             /* This can be quite complicated, so handle specially
+                only the common and easy case where the character with
+                different length representation of lower and upper
+                case is present at or after offset.  */
+             if (pstr->valid_len > offset
+                 && mid == offset && pstr->offsets[mid] == offset)
+               {
+                 memmove (pstr->wcs, pstr->wcs + offset,
+                          (pstr->valid_len - offset) * sizeof (wint_t));
+                 memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset);
+                 pstr->valid_len -= offset;
+                 pstr->valid_raw_len -= offset;
+                 for (low = 0; low < pstr->valid_len; low++)
+                   pstr->offsets[low] = pstr->offsets[low + offset] - offset;
+               }
+             else
+               {
+                 /* Otherwise, just find out how long the partial multibyte
+                    character at offset is and fill it with WEOF/255.  */
+                 pstr->len = pstr->raw_len - idx + offset;
+                 pstr->stop = pstr->raw_stop - idx + offset;
+                 pstr->offsets_needed = 0;
+                 while (mid > 0 && pstr->offsets[mid - 1] == offset)
+                   --mid;
+                 while (mid < pstr->valid_len)
+                   if (pstr->wcs[mid] != WEOF)
+                     break;
+                   else
+                     ++mid;
+                 if (mid == pstr->valid_len)
+                   pstr->valid_len = 0;
+                 else
+                   {
+                     pstr->valid_len = pstr->offsets[mid] - offset;
+                     if (pstr->valid_len)
+                       {
+                         for (low = 0; low < pstr->valid_len; ++low)
+                           pstr->wcs[low] = WEOF;
+                         memset (pstr->mbs, 255, pstr->valid_len);
+                       }
+                   }
+                 pstr->valid_raw_len = pstr->valid_len;
+               }
+           }
+         else
+#endif
+           {
+             pstr->tip_context = re_string_context_at (pstr, offset - 1,
+                                                       eflags);
+#ifdef RE_ENABLE_I18N
+             if (pstr->mb_cur_max > 1)
+               memmove (pstr->wcs, pstr->wcs + offset,
+                        (pstr->valid_len - offset) * sizeof (wint_t));
+#endif /* RE_ENABLE_I18N */
+             if (BE (pstr->mbs_allocated, 0))
+               memmove (pstr->mbs, pstr->mbs + offset,
+                        pstr->valid_len - offset);
+             pstr->valid_len -= offset;
+             pstr->valid_raw_len -= offset;
+#if DEBUG
+             assert (pstr->valid_len > 0);
+#endif
+           }
+       }
+      else
+       {
+#ifdef RE_ENABLE_I18N
+         /* No, skip all characters until IDX.  */
+         Idx prev_valid_len = pstr->valid_len;
+
+         if (BE (pstr->offsets_needed, 0))
+           {
+             pstr->len = pstr->raw_len - idx + offset;
+             pstr->stop = pstr->raw_stop - idx + offset;
+             pstr->offsets_needed = 0;
+           }
+#endif
+         pstr->valid_len = 0;
+#ifdef RE_ENABLE_I18N
+         if (pstr->mb_cur_max > 1)
+           {
+             Idx wcs_idx;
+             wint_t wc = WEOF;
+
+             if (pstr->is_utf8)
+               {
+                 const unsigned char *raw, *p, *end;
+
+                 /* Special case UTF-8.  Multi-byte chars start with any
+                    byte other than 0x80 - 0xbf.  */
+                 raw = pstr->raw_mbs + pstr->raw_mbs_idx;
+                 end = raw + (offset - pstr->mb_cur_max);
+                 if (end < pstr->raw_mbs)
+                   end = pstr->raw_mbs;
+                 p = raw + offset - 1;
+#ifdef _LIBC
+                 /* We know the wchar_t encoding is UCS4, so for the simple
+                    case, ASCII characters, skip the conversion step.  */
+                 if (isascii (*p) && BE (pstr->trans == NULL, 1))
+                   {
+                     memset (&pstr->cur_state, '\0', sizeof (mbstate_t));
+                     /* pstr->valid_len = 0; */
+                     wc = (wchar_t) *p;
+                   }
+                 else
+#endif
+                   for (; p >= end; --p)
+                     if ((*p & 0xc0) != 0x80)
+                       {
+                         mbstate_t cur_state;
+                         wchar_t wc2;
+                         Idx mlen = raw + pstr->len - p;
+                         unsigned char buf[6];
+                         size_t mbclen;
+
+                         if (BE (pstr->trans != NULL, 0))
+                           {
+                             int i = mlen < 6 ? mlen : 6;
+                             while (--i >= 0)
+                               buf[i] = pstr->trans[p[i]];
+                           }
+                         /* XXX Don't use mbrtowc, we know which conversion
+                            to use (UTF-8 -> UCS4).  */
+                         memset (&cur_state, 0, sizeof (cur_state));
+                         mbclen = __mbrtowc (&wc2, (const char *) p, mlen,
+                                             &cur_state);
+                         if (raw + offset - p <= mbclen
+                             && mbclen < (size_t) -2)
+                           {
+                             memset (&pstr->cur_state, '\0',
+                                     sizeof (mbstate_t));
+                             pstr->valid_len = mbclen - (raw + offset - p);
+                             wc = wc2;
+                           }
+                         break;
+                       }
+               }
+
+             if (wc == WEOF)
+               pstr->valid_len = re_string_skip_chars (pstr, idx, &wc) - idx;
+             if (wc == WEOF)
+               pstr->tip_context
+                 = re_string_context_at (pstr, prev_valid_len - 1, eflags);
+             else
+               pstr->tip_context = ((BE (pstr->word_ops_used != 0, 0)
+                                     && IS_WIDE_WORD_CHAR (wc))
+                                    ? CONTEXT_WORD
+                                    : ((IS_WIDE_NEWLINE (wc)
+                                        && pstr->newline_anchor)
+                                       ? CONTEXT_NEWLINE : 0));
+             if (BE (pstr->valid_len, 0))
+               {
+                 for (wcs_idx = 0; wcs_idx < pstr->valid_len; ++wcs_idx)
+                   pstr->wcs[wcs_idx] = WEOF;
+                 if (pstr->mbs_allocated)
+                   memset (pstr->mbs, 255, pstr->valid_len);
+               }
+             pstr->valid_raw_len = pstr->valid_len;
+           }
+         else
+#endif /* RE_ENABLE_I18N */
+           {
+             int c = pstr->raw_mbs[pstr->raw_mbs_idx + offset - 1];
+             pstr->valid_raw_len = 0;
+             if (pstr->trans)
+               c = pstr->trans[c];
+             pstr->tip_context = (bitset_contain (pstr->word_char, c)
+                                  ? CONTEXT_WORD
+                                  : ((IS_NEWLINE (c) && pstr->newline_anchor)
+                                     ? CONTEXT_NEWLINE : 0));
+           }
+       }
+      if (!BE (pstr->mbs_allocated, 0))
+       pstr->mbs += offset;
+    }
+  pstr->raw_mbs_idx = idx;
+  pstr->len -= offset;
+  pstr->stop -= offset;
+
+  /* Then build the buffers.  */
+#ifdef RE_ENABLE_I18N
+  if (pstr->mb_cur_max > 1)
+    {
+      if (pstr->icase)
+       {
+         reg_errcode_t ret = build_wcs_upper_buffer (pstr);
+         if (BE (ret != REG_NOERROR, 0))
+           return ret;
+       }
+      else
+       build_wcs_buffer (pstr);
+    }
+  else
+#endif /* RE_ENABLE_I18N */
+    if (BE (pstr->mbs_allocated, 0))
+      {
+       if (pstr->icase)
+         build_upper_buffer (pstr);
+       else if (pstr->trans != NULL)
+         re_string_translate_buffer (pstr);
+      }
+    else
+      pstr->valid_len = pstr->len;
+
+  pstr->cur_idx = 0;
+  return REG_NOERROR;
+}
+
+static unsigned char
+internal_function __attribute ((pure))
+re_string_peek_byte_case (const re_string_t *pstr, Idx idx)
+{
+  int ch;
+  Idx off;
+
+  /* Handle the common (easiest) cases first.  */
+  if (BE (!pstr->mbs_allocated, 1))
+    return re_string_peek_byte (pstr, idx);
+
+#ifdef RE_ENABLE_I18N
+  if (pstr->mb_cur_max > 1
+      && ! re_string_is_single_byte_char (pstr, pstr->cur_idx + idx))
+    return re_string_peek_byte (pstr, idx);
+#endif
+
+  off = pstr->cur_idx + idx;
+#ifdef RE_ENABLE_I18N
+  if (pstr->offsets_needed)
+    off = pstr->offsets[off];
+#endif
+
+  ch = pstr->raw_mbs[pstr->raw_mbs_idx + off];
+
+#ifdef RE_ENABLE_I18N
+  /* Ensure that e.g. for tr_TR.UTF-8 BACKSLASH DOTLESS SMALL LETTER I
+     this function returns CAPITAL LETTER I instead of first byte of
+     DOTLESS SMALL LETTER I.  The latter would confuse the parser,
+     since peek_byte_case doesn't advance cur_idx in any way.  */
+  if (pstr->offsets_needed && !isascii (ch))
+    return re_string_peek_byte (pstr, idx);
+#endif
+
+  return ch;
+}
+
+static unsigned char
+internal_function __attribute ((pure))
+re_string_fetch_byte_case (re_string_t *pstr)
+{
+  if (BE (!pstr->mbs_allocated, 1))
+    return re_string_fetch_byte (pstr);
+
+#ifdef RE_ENABLE_I18N
+  if (pstr->offsets_needed)
+    {
+      Idx off;
+      int ch;
+
+      /* For tr_TR.UTF-8 [[:islower:]] there is
+        [[: CAPITAL LETTER I WITH DOT lower:]] in mbs.  Skip
+        in that case the whole multi-byte character and return
+        the original letter.  On the other side, with
+        [[: DOTLESS SMALL LETTER I return [[:I, as doing
+        anything else would complicate things too much.  */
+
+      if (!re_string_first_byte (pstr, pstr->cur_idx))
+       return re_string_fetch_byte (pstr);
+
+      off = pstr->offsets[pstr->cur_idx];
+      ch = pstr->raw_mbs[pstr->raw_mbs_idx + off];
+
+      if (! isascii (ch))
+       return re_string_fetch_byte (pstr);
+
+      re_string_skip_bytes (pstr,
+                           re_string_char_size_at (pstr, pstr->cur_idx));
+      return ch;
+    }
+#endif
+
+  return pstr->raw_mbs[pstr->raw_mbs_idx + pstr->cur_idx++];
+}
+
+static void
+internal_function
+re_string_destruct (re_string_t *pstr)
+{
+#ifdef RE_ENABLE_I18N
+  re_free (pstr->wcs);
+  re_free (pstr->offsets);
+#endif /* RE_ENABLE_I18N  */
+  if (pstr->mbs_allocated)
+    re_free (pstr->mbs);
+}
+
+/* Return the context at IDX in INPUT.  */
+
+static unsigned int
+internal_function
+re_string_context_at (const re_string_t *input, Idx idx, int eflags)
+{
+  int c;
+  if (BE (! REG_VALID_INDEX (idx), 0))
+    /* In this case, we use the value stored in input->tip_context,
+       since we can't know the character in input->mbs[-1] here.  */
+    return input->tip_context;
+  if (BE (idx == input->len, 0))
+    return ((eflags & REG_NOTEOL) ? CONTEXT_ENDBUF
+           : CONTEXT_NEWLINE | CONTEXT_ENDBUF);
+#ifdef RE_ENABLE_I18N
+  if (input->mb_cur_max > 1)
+    {
+      wint_t wc;
+      Idx wc_idx = idx;
+      while(input->wcs[wc_idx] == WEOF)
+       {
+#ifdef DEBUG
+         /* It must not happen.  */
+         assert (REG_VALID_INDEX (wc_idx));
+#endif
+         --wc_idx;
+         if (! REG_VALID_INDEX (wc_idx))
+           return input->tip_context;
+       }
+      wc = input->wcs[wc_idx];
+      if (BE (input->word_ops_used != 0, 0) && IS_WIDE_WORD_CHAR (wc))
+       return CONTEXT_WORD;
+      return (IS_WIDE_NEWLINE (wc) && input->newline_anchor
+             ? CONTEXT_NEWLINE : 0);
+    }
+  else
+#endif
+    {
+      c = re_string_byte_at (input, idx);
+      if (bitset_contain (input->word_char, c))
+       return CONTEXT_WORD;
+      return IS_NEWLINE (c) && input->newline_anchor ? CONTEXT_NEWLINE : 0;
+    }
+}
+\f
+/* Functions for set operation.  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+re_node_set_alloc (re_node_set *set, Idx size)
+{
+  set->alloc = size;
+  set->nelem = 0;
+  set->elems = re_malloc (Idx, size);
+  if (BE (set->elems == NULL, 0))
+    return REG_ESPACE;
+  return REG_NOERROR;
+}
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+re_node_set_init_1 (re_node_set *set, Idx elem)
+{
+  set->alloc = 1;
+  set->nelem = 1;
+  set->elems = re_malloc (Idx, 1);
+  if (BE (set->elems == NULL, 0))
+    {
+      set->alloc = set->nelem = 0;
+      return REG_ESPACE;
+    }
+  set->elems[0] = elem;
+  return REG_NOERROR;
+}
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+re_node_set_init_2 (re_node_set *set, Idx elem1, Idx elem2)
+{
+  set->alloc = 2;
+  set->elems = re_malloc (Idx, 2);
+  if (BE (set->elems == NULL, 0))
+    return REG_ESPACE;
+  if (elem1 == elem2)
+    {
+      set->nelem = 1;
+      set->elems[0] = elem1;
+    }
+  else
+    {
+      set->nelem = 2;
+      if (elem1 < elem2)
+       {
+         set->elems[0] = elem1;
+         set->elems[1] = elem2;
+       }
+      else
+       {
+         set->elems[0] = elem2;
+         set->elems[1] = elem1;
+       }
+    }
+  return REG_NOERROR;
+}
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+re_node_set_init_copy (re_node_set *dest, const re_node_set *src)
+{
+  dest->nelem = src->nelem;
+  if (src->nelem > 0)
+    {
+      dest->alloc = dest->nelem;
+      dest->elems = re_malloc (Idx, dest->alloc);
+      if (BE (dest->elems == NULL, 0))
+       {
+         dest->alloc = dest->nelem = 0;
+         return REG_ESPACE;
+       }
+      memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx));
+    }
+  else
+    re_node_set_init_empty (dest);
+  return REG_NOERROR;
+}
+
+/* Calculate the intersection of the sets SRC1 and SRC2. And merge it to
+   DEST. Return value indicate the error code or REG_NOERROR if succeeded.
+   Note: We assume dest->elems is NULL, when dest->alloc is 0.  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+re_node_set_add_intersect (re_node_set *dest, const re_node_set *src1,
+                          const re_node_set *src2)
+{
+  Idx i1, i2, is, id, delta, sbase;
+  if (src1->nelem == 0 || src2->nelem == 0)
+    return REG_NOERROR;
+
+  /* We need dest->nelem + 2 * elems_in_intersection; this is a
+     conservative estimate.  */
+  if (src1->nelem + src2->nelem + dest->nelem > dest->alloc)
+    {
+      Idx new_alloc = src1->nelem + src2->nelem + dest->alloc;
+      Idx *new_elems = re_realloc (dest->elems, Idx, new_alloc);
+      if (BE (new_elems == NULL, 0))
+       return REG_ESPACE;
+      dest->elems = new_elems;
+      dest->alloc = new_alloc;
+    }
+
+  /* Find the items in the intersection of SRC1 and SRC2, and copy
+     into the top of DEST those that are not already in DEST itself.  */
+  sbase = dest->nelem + src1->nelem + src2->nelem;
+  i1 = src1->nelem - 1;
+  i2 = src2->nelem - 1;
+  id = dest->nelem - 1;
+  for (;;)
+    {
+      if (src1->elems[i1] == src2->elems[i2])
+       {
+         /* Try to find the item in DEST.  Maybe we could binary search?  */
+         while (REG_VALID_INDEX (id) && dest->elems[id] > src1->elems[i1])
+           --id;
+
+          if (! REG_VALID_INDEX (id) || dest->elems[id] != src1->elems[i1])
+            dest->elems[--sbase] = src1->elems[i1];
+
+         if (! REG_VALID_INDEX (--i1) || ! REG_VALID_INDEX (--i2))
+           break;
+       }
+
+      /* Lower the highest of the two items.  */
+      else if (src1->elems[i1] < src2->elems[i2])
+       {
+         if (! REG_VALID_INDEX (--i2))
+           break;
+       }
+      else
+       {
+         if (! REG_VALID_INDEX (--i1))
+           break;
+       }
+    }
+
+  id = dest->nelem - 1;
+  is = dest->nelem + src1->nelem + src2->nelem - 1;
+  delta = is - sbase + 1;
+
+  /* Now copy.  When DELTA becomes zero, the remaining
+     DEST elements are already in place; this is more or
+     less the same loop that is in re_node_set_merge.  */
+  dest->nelem += delta;
+  if (delta > 0 && REG_VALID_INDEX (id))
+    for (;;)
+      {
+       if (dest->elems[is] > dest->elems[id])
+         {
+           /* Copy from the top.  */
+           dest->elems[id + delta--] = dest->elems[is--];
+           if (delta == 0)
+             break;
+         }
+       else
+         {
+           /* Slide from the bottom.  */
+           dest->elems[id + delta] = dest->elems[id];
+           if (! REG_VALID_INDEX (--id))
+             break;
+         }
+      }
+
+  /* Copy remaining SRC elements.  */
+  memcpy (dest->elems, dest->elems + sbase, delta * sizeof (Idx));
+
+  return REG_NOERROR;
+}
+
+/* Calculate the union set of the sets SRC1 and SRC2. And store it to
+   DEST. Return value indicate the error code or REG_NOERROR if succeeded.  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+re_node_set_init_union (re_node_set *dest, const re_node_set *src1,
+                       const re_node_set *src2)
+{
+  Idx i1, i2, id;
+  if (src1 != NULL && src1->nelem > 0 && src2 != NULL && src2->nelem > 0)
+    {
+      dest->alloc = src1->nelem + src2->nelem;
+      dest->elems = re_malloc (Idx, dest->alloc);
+      if (BE (dest->elems == NULL, 0))
+       return REG_ESPACE;
+    }
+  else
+    {
+      if (src1 != NULL && src1->nelem > 0)
+       return re_node_set_init_copy (dest, src1);
+      else if (src2 != NULL && src2->nelem > 0)
+       return re_node_set_init_copy (dest, src2);
+      else
+       re_node_set_init_empty (dest);
+      return REG_NOERROR;
+    }
+  for (i1 = i2 = id = 0 ; i1 < src1->nelem && i2 < src2->nelem ;)
+    {
+      if (src1->elems[i1] > src2->elems[i2])
+       {
+         dest->elems[id++] = src2->elems[i2++];
+         continue;
+       }
+      if (src1->elems[i1] == src2->elems[i2])
+       ++i2;
+      dest->elems[id++] = src1->elems[i1++];
+    }
+  if (i1 < src1->nelem)
+    {
+      memcpy (dest->elems + id, src1->elems + i1,
+            (src1->nelem - i1) * sizeof (Idx));
+      id += src1->nelem - i1;
+    }
+  else if (i2 < src2->nelem)
+    {
+      memcpy (dest->elems + id, src2->elems + i2,
+            (src2->nelem - i2) * sizeof (Idx));
+      id += src2->nelem - i2;
+    }
+  dest->nelem = id;
+  return REG_NOERROR;
+}
+
+/* Calculate the union set of the sets DEST and SRC. And store it to
+   DEST. Return value indicate the error code or REG_NOERROR if succeeded.  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+re_node_set_merge (re_node_set *dest, const re_node_set *src)
+{
+  Idx is, id, sbase, delta;
+  if (src == NULL || src->nelem == 0)
+    return REG_NOERROR;
+  if (dest->alloc < 2 * src->nelem + dest->nelem)
+    {
+      Idx new_alloc = 2 * (src->nelem + dest->alloc);
+      Idx *new_buffer = re_realloc (dest->elems, Idx, new_alloc);
+      if (BE (new_buffer == NULL, 0))
+       return REG_ESPACE;
+      dest->elems = new_buffer;
+      dest->alloc = new_alloc;
+    }
+
+  if (BE (dest->nelem == 0, 0))
+    {
+      dest->nelem = src->nelem;
+      memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx));
+      return REG_NOERROR;
+    }
+
+  /* Copy into the top of DEST the items of SRC that are not
+     found in DEST.  Maybe we could binary search in DEST?  */
+  for (sbase = dest->nelem + 2 * src->nelem,
+       is = src->nelem - 1, id = dest->nelem - 1;
+       REG_VALID_INDEX (is) && REG_VALID_INDEX (id); )
+    {
+      if (dest->elems[id] == src->elems[is])
+       is--, id--;
+      else if (dest->elems[id] < src->elems[is])
+       dest->elems[--sbase] = src->elems[is--];
+      else /* if (dest->elems[id] > src->elems[is]) */
+       --id;
+    }
+
+  if (REG_VALID_INDEX (is))
+    {
+      /* If DEST is exhausted, the remaining items of SRC must be unique.  */
+      sbase -= is + 1;
+      memcpy (dest->elems + sbase, src->elems, (is + 1) * sizeof (Idx));
+    }
+
+  id = dest->nelem - 1;
+  is = dest->nelem + 2 * src->nelem - 1;
+  delta = is - sbase + 1;
+  if (delta == 0)
+    return REG_NOERROR;
+
+  /* Now copy.  When DELTA becomes zero, the remaining
+     DEST elements are already in place.  */
+  dest->nelem += delta;
+  for (;;)
+    {
+      if (dest->elems[is] > dest->elems[id])
+       {
+         /* Copy from the top.  */
+         dest->elems[id + delta--] = dest->elems[is--];
+         if (delta == 0)
+           break;
+       }
+      else
+       {
+         /* Slide from the bottom.  */
+         dest->elems[id + delta] = dest->elems[id];
+         if (! REG_VALID_INDEX (--id))
+           {
+             /* Copy remaining SRC elements.  */
+             memcpy (dest->elems, dest->elems + sbase,
+                     delta * sizeof (Idx));
+             break;
+           }
+       }
+    }
+
+  return REG_NOERROR;
+}
+
+/* Insert the new element ELEM to the re_node_set* SET.
+   SET should not already have ELEM.
+   Return true if successful.  */
+
+static bool
+internal_function __attribute_warn_unused_result__
+re_node_set_insert (re_node_set *set, Idx elem)
+{
+  Idx idx;
+  /* In case the set is empty.  */
+  if (set->alloc == 0)
+    return BE (re_node_set_init_1 (set, elem) == REG_NOERROR, 1);
+
+  if (BE (set->nelem, 0) == 0)
+    {
+      /* We already guaranteed above that set->alloc != 0.  */
+      set->elems[0] = elem;
+      ++set->nelem;
+      return true;
+    }
+
+  /* Realloc if we need.  */
+  if (set->alloc == set->nelem)
+    {
+      Idx *new_elems;
+      set->alloc = set->alloc * 2;
+      new_elems = re_realloc (set->elems, Idx, set->alloc);
+      if (BE (new_elems == NULL, 0))
+       return false;
+      set->elems = new_elems;
+    }
+
+  /* Move the elements which follows the new element.  Test the
+     first element separately to skip a check in the inner loop.  */
+  if (elem < set->elems[0])
+    {
+      idx = 0;
+      for (idx = set->nelem; idx > 0; idx--)
+       set->elems[idx] = set->elems[idx - 1];
+    }
+  else
+    {
+      for (idx = set->nelem; set->elems[idx - 1] > elem; idx--)
+       set->elems[idx] = set->elems[idx - 1];
+    }
+
+  /* Insert the new element.  */
+  set->elems[idx] = elem;
+  ++set->nelem;
+  return true;
+}
+
+/* Insert the new element ELEM to the re_node_set* SET.
+   SET should not already have any element greater than or equal to ELEM.
+   Return true if successful.  */
+
+static bool
+internal_function __attribute_warn_unused_result__
+re_node_set_insert_last (re_node_set *set, Idx elem)
+{
+  /* Realloc if we need.  */
+  if (set->alloc == set->nelem)
+    {
+      Idx *new_elems;
+      set->alloc = (set->alloc + 1) * 2;
+      new_elems = re_realloc (set->elems, Idx, set->alloc);
+      if (BE (new_elems == NULL, 0))
+       return false;
+      set->elems = new_elems;
+    }
+
+  /* Insert the new element.  */
+  set->elems[set->nelem++] = elem;
+  return true;
+}
+
+/* Compare two node sets SET1 and SET2.
+   Return true if SET1 and SET2 are equivalent.  */
+
+static bool
+internal_function __attribute ((pure))
+re_node_set_compare (const re_node_set *set1, const re_node_set *set2)
+{
+  Idx i;
+  if (set1 == NULL || set2 == NULL || set1->nelem != set2->nelem)
+    return false;
+  for (i = set1->nelem ; REG_VALID_INDEX (--i) ; )
+    if (set1->elems[i] != set2->elems[i])
+      return false;
+  return true;
+}
+
+/* Return (idx + 1) if SET contains the element ELEM, return 0 otherwise.  */
+
+static Idx
+internal_function __attribute ((pure))
+re_node_set_contains (const re_node_set *set, Idx elem)
+{
+  __re_size_t idx, right, mid;
+  if (! REG_VALID_NONZERO_INDEX (set->nelem))
+    return 0;
+
+  /* Binary search the element.  */
+  idx = 0;
+  right = set->nelem - 1;
+  while (idx < right)
+    {
+      mid = (idx + right) / 2;
+      if (set->elems[mid] < elem)
+       idx = mid + 1;
+      else
+       right = mid;
+    }
+  return set->elems[idx] == elem ? idx + 1 : 0;
+}
+
+static void
+internal_function
+re_node_set_remove_at (re_node_set *set, Idx idx)
+{
+  if (idx < 0 || idx >= set->nelem)
+    return;
+  --set->nelem;
+  for (; idx < set->nelem; idx++)
+    set->elems[idx] = set->elems[idx + 1];
+}
+\f
+
+/* Add the token TOKEN to dfa->nodes, and return the index of the token.
+   Or return REG_MISSING if an error occurred.  */
+
+static Idx
+internal_function
+re_dfa_add_node (re_dfa_t *dfa, re_token_t token)
+{
+  if (BE (dfa->nodes_len >= dfa->nodes_alloc, 0))
+    {
+      size_t new_nodes_alloc = dfa->nodes_alloc * 2;
+      Idx *new_nexts, *new_indices;
+      re_node_set *new_edests, *new_eclosures;
+      re_token_t *new_nodes;
+      size_t max_object_size =
+       MAX (sizeof (re_token_t),
+            MAX (sizeof (re_node_set),
+                 sizeof (Idx)));
+
+      /* Avoid overflows.  */
+      if (BE (SIZE_MAX / 2 / max_object_size < dfa->nodes_alloc, 0))
+       return REG_MISSING;
+
+      new_nodes = re_realloc (dfa->nodes, re_token_t, new_nodes_alloc);
+      if (BE (new_nodes == NULL, 0))
+       return REG_MISSING;
+      dfa->nodes = new_nodes;
+      new_nexts = re_realloc (dfa->nexts, Idx, new_nodes_alloc);
+      new_indices = re_realloc (dfa->org_indices, Idx, new_nodes_alloc);
+      new_edests = re_realloc (dfa->edests, re_node_set, new_nodes_alloc);
+      new_eclosures = re_realloc (dfa->eclosures, re_node_set, new_nodes_alloc);
+      if (BE (new_nexts == NULL || new_indices == NULL
+             || new_edests == NULL || new_eclosures == NULL, 0))
+       return REG_MISSING;
+      dfa->nexts = new_nexts;
+      dfa->org_indices = new_indices;
+      dfa->edests = new_edests;
+      dfa->eclosures = new_eclosures;
+      dfa->nodes_alloc = new_nodes_alloc;
+    }
+  dfa->nodes[dfa->nodes_len] = token;
+  dfa->nodes[dfa->nodes_len].constraint = 0;
+#ifdef RE_ENABLE_I18N
+  {
+  int type = token.type;
+  dfa->nodes[dfa->nodes_len].accept_mb =
+    (type == OP_PERIOD && dfa->mb_cur_max > 1) || type == COMPLEX_BRACKET;
+  }
+#endif
+  dfa->nexts[dfa->nodes_len] = REG_MISSING;
+  re_node_set_init_empty (dfa->edests + dfa->nodes_len);
+  re_node_set_init_empty (dfa->eclosures + dfa->nodes_len);
+  return dfa->nodes_len++;
+}
+
+static inline re_hashval_t
+internal_function
+calc_state_hash (const re_node_set *nodes, unsigned int context)
+{
+  re_hashval_t hash = nodes->nelem + context;
+  Idx i;
+  for (i = 0 ; i < nodes->nelem ; i++)
+    hash += nodes->elems[i];
+  return hash;
+}
+
+/* Search for the state whose node_set is equivalent to NODES.
+   Return the pointer to the state, if we found it in the DFA.
+   Otherwise create the new one and return it.  In case of an error
+   return NULL and set the error code in ERR.
+   Note: - We assume NULL as the invalid state, then it is possible that
+          return value is NULL and ERR is REG_NOERROR.
+        - We never return non-NULL value in case of any errors, it is for
+          optimization.  */
+
+static re_dfastate_t *
+internal_function __attribute_warn_unused_result__
+re_acquire_state (reg_errcode_t *err, const re_dfa_t *dfa,
+                 const re_node_set *nodes)
+{
+  re_hashval_t hash;
+  re_dfastate_t *new_state;
+  struct re_state_table_entry *spot;
+  Idx i;
+#ifdef lint
+  /* Suppress bogus uninitialized-variable warnings.  */
+  *err = REG_NOERROR;
+#endif
+  if (BE (nodes->nelem == 0, 0))
+    {
+      *err = REG_NOERROR;
+      return NULL;
+    }
+  hash = calc_state_hash (nodes, 0);
+  spot = dfa->state_table + (hash & dfa->state_hash_mask);
+
+  for (i = 0 ; i < spot->num ; i++)
+    {
+      re_dfastate_t *state = spot->array[i];
+      if (hash != state->hash)
+       continue;
+      if (re_node_set_compare (&state->nodes, nodes))
+       return state;
+    }
+
+  /* There are no appropriate state in the dfa, create the new one.  */
+  new_state = create_ci_newstate (dfa, nodes, hash);
+  if (BE (new_state == NULL, 0))
+    *err = REG_ESPACE;
+
+  return new_state;
+}
+
+/* Search for the state whose node_set is equivalent to NODES and
+   whose context is equivalent to CONTEXT.
+   Return the pointer to the state, if we found it in the DFA.
+   Otherwise create the new one and return it.  In case of an error
+   return NULL and set the error code in ERR.
+   Note: - We assume NULL as the invalid state, then it is possible that
+          return value is NULL and ERR is REG_NOERROR.
+        - We never return non-NULL value in case of any errors, it is for
+          optimization.  */
+
+static re_dfastate_t *
+internal_function __attribute_warn_unused_result__
+re_acquire_state_context (reg_errcode_t *err, const re_dfa_t *dfa,
+                         const re_node_set *nodes, unsigned int context)
+{
+  re_hashval_t hash;
+  re_dfastate_t *new_state;
+  struct re_state_table_entry *spot;
+  Idx i;
+#ifdef lint
+  /* Suppress bogus uninitialized-variable warnings.  */
+  *err = REG_NOERROR;
+#endif
+  if (nodes->nelem == 0)
+    {
+      *err = REG_NOERROR;
+      return NULL;
+    }
+  hash = calc_state_hash (nodes, context);
+  spot = dfa->state_table + (hash & dfa->state_hash_mask);
+
+  for (i = 0 ; i < spot->num ; i++)
+    {
+      re_dfastate_t *state = spot->array[i];
+      if (state->hash == hash
+         && state->context == context
+         && re_node_set_compare (state->entrance_nodes, nodes))
+       return state;
+    }
+  /* There are no appropriate state in `dfa', create the new one.  */
+  new_state = create_cd_newstate (dfa, nodes, context, hash);
+  if (BE (new_state == NULL, 0))
+    *err = REG_ESPACE;
+
+  return new_state;
+}
+
+/* Finish initialization of the new state NEWSTATE, and using its hash value
+   HASH put in the appropriate bucket of DFA's state table.  Return value
+   indicates the error code if failed.  */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+register_state (const re_dfa_t *dfa, re_dfastate_t *newstate,
+               re_hashval_t hash)
+{
+  struct re_state_table_entry *spot;
+  reg_errcode_t err;
+  Idx i;
+
+  newstate->hash = hash;
+  err = re_node_set_alloc (&newstate->non_eps_nodes, newstate->nodes.nelem);
+  if (BE (err != REG_NOERROR, 0))
+    return REG_ESPACE;
+  for (i = 0; i < newstate->nodes.nelem; i++)
+    {
+      Idx elem = newstate->nodes.elems[i];
+      if (!IS_EPSILON_NODE (dfa->nodes[elem].type))
+       if (BE (! re_node_set_insert_last (&newstate->non_eps_nodes, elem), 0))
+         return REG_ESPACE;
+    }
+
+  spot = dfa->state_table + (hash & dfa->state_hash_mask);
+  if (BE (spot->alloc <= spot->num, 0))
+    {
+      Idx new_alloc = 2 * spot->num + 2;
+      re_dfastate_t **new_array = re_realloc (spot->array, re_dfastate_t *,
+                                             new_alloc);
+      if (BE (new_array == NULL, 0))
+       return REG_ESPACE;
+      spot->array = new_array;
+      spot->alloc = new_alloc;
+    }
+  spot->array[spot->num++] = newstate;
+  return REG_NOERROR;
+}
+
+static void
+free_state (re_dfastate_t *state)
+{
+  re_node_set_free (&state->non_eps_nodes);
+  re_node_set_free (&state->inveclosure);
+  if (state->entrance_nodes != &state->nodes)
+    {
+      re_node_set_free (state->entrance_nodes);
+      re_free (state->entrance_nodes);
+    }
+  re_node_set_free (&state->nodes);
+  re_free (state->word_trtable);
+  re_free (state->trtable);
+  re_free (state);
+}
+
+/* Create the new state which is independ of contexts.
+   Return the new state if succeeded, otherwise return NULL.  */
+
+static re_dfastate_t *
+internal_function __attribute_warn_unused_result__
+create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes,
+                   re_hashval_t hash)
+{
+  Idx i;
+  reg_errcode_t err;
+  re_dfastate_t *newstate;
+
+  newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1);
+  if (BE (newstate == NULL, 0))
+    return NULL;
+  err = re_node_set_init_copy (&newstate->nodes, nodes);
+  if (BE (err != REG_NOERROR, 0))
+    {
+      re_free (newstate);
+      return NULL;
+    }
+
+  newstate->entrance_nodes = &newstate->nodes;
+  for (i = 0 ; i < nodes->nelem ; i++)
+    {
+      re_token_t *node = dfa->nodes + nodes->elems[i];
+      re_token_type_t type = node->type;
+      if (type == CHARACTER && !node->constraint)
+       continue;
+#ifdef RE_ENABLE_I18N
+      newstate->accept_mb |= node->accept_mb;
+#endif /* RE_ENABLE_I18N */
+
+      /* If the state has the halt node, the state is a halt state.  */
+      if (type == END_OF_RE)
+       newstate->halt = 1;
+      else if (type == OP_BACK_REF)
+       newstate->has_backref = 1;
+      else if (type == ANCHOR || node->constraint)
+       newstate->has_constraint = 1;
+    }
+  err = register_state (dfa, newstate, hash);
+  if (BE (err != REG_NOERROR, 0))
+    {
+      free_state (newstate);
+      newstate = NULL;
+    }
+  return newstate;
+}
+
+/* Create the new state which is depend on the context CONTEXT.
+   Return the new state if succeeded, otherwise return NULL.  */
+
+static re_dfastate_t *
+internal_function __attribute_warn_unused_result__
+create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes,
+                   unsigned int context, re_hashval_t hash)
+{
+  Idx i, nctx_nodes = 0;
+  reg_errcode_t err;
+  re_dfastate_t *newstate;
+
+  newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1);
+  if (BE (newstate == NULL, 0))
+    return NULL;
+  err = re_node_set_init_copy (&newstate->nodes, nodes);
+  if (BE (err != REG_NOERROR, 0))
+    {
+      re_free (newstate);
+      return NULL;
+    }
+
+  newstate->context = context;
+  newstate->entrance_nodes = &newstate->nodes;
+
+  for (i = 0 ; i < nodes->nelem ; i++)
+    {
+      re_token_t *node = dfa->nodes + nodes->elems[i];
+      re_token_type_t type = node->type;
+      unsigned int constraint = node->constraint;
+
+      if (type == CHARACTER && !constraint)
+       continue;
+#ifdef RE_ENABLE_I18N
+      newstate->accept_mb |= node->accept_mb;
+#endif /* RE_ENABLE_I18N */
+
+      /* If the state has the halt node, the state is a halt state.  */
+      if (type == END_OF_RE)
+       newstate->halt = 1;
+      else if (type == OP_BACK_REF)
+       newstate->has_backref = 1;
+
+      if (constraint)
+       {
+         if (newstate->entrance_nodes == &newstate->nodes)
+           {
+             newstate->entrance_nodes = re_malloc (re_node_set, 1);
+             if (BE (newstate->entrance_nodes == NULL, 0))
+               {
+                 free_state (newstate);
+                 return NULL;
+               }
+             if (re_node_set_init_copy (newstate->entrance_nodes, nodes)
+                 != REG_NOERROR)
+               return NULL;
+             nctx_nodes = 0;
+             newstate->has_constraint = 1;
+           }
+
+         if (NOT_SATISFY_PREV_CONSTRAINT (constraint,context))
+           {
+             re_node_set_remove_at (&newstate->nodes, i - nctx_nodes);
+             ++nctx_nodes;
+           }
+       }
+    }
+  err = register_state (dfa, newstate, hash);
+  if (BE (err != REG_NOERROR, 0))
+    {
+      free_state (newstate);
+      newstate = NULL;
+    }
+  return  newstate;
+}
diff --git a/gnu/regex_internal.h b/gnu/regex_internal.h
new file mode 100644 (file)
index 0000000..4305be3
--- /dev/null
@@ -0,0 +1,873 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Extended regular expression matching and search library.
+   Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+   Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Isamu Hasegawa <isamu@yamato.ibm.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.
+
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef _REGEX_INTERNAL_H
+#define _REGEX_INTERNAL_H 1
+
+#include <assert.h>
+#include <ctype.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <langinfo.h>
+#ifndef _LIBC
+# include "localcharset.h"
+#endif
+#if defined HAVE_LOCALE_H || defined _LIBC
+# include <locale.h>
+#endif
+
+#include <wchar.h>
+#include <wctype.h>
+#include <stdint.h>
+#if defined _LIBC
+# include <bits/libc-lock.h>
+#else
+# define __libc_lock_init(NAME) do { } while (0)
+# define __libc_lock_lock(NAME) do { } while (0)
+# define __libc_lock_unlock(NAME) do { } while (0)
+#endif
+
+/* In case that the system doesn't have isblank().  */
+#if !defined _LIBC && ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK))
+# define isblank(ch) ((ch) == ' ' || (ch) == '\t')
+#endif
+
+#ifdef _LIBC
+# ifndef _RE_DEFINE_LOCALE_FUNCTIONS
+#  define _RE_DEFINE_LOCALE_FUNCTIONS 1
+#   include <locale/localeinfo.h>
+#   include <locale/elem-hash.h>
+#   include <locale/coll-lookup.h>
+# endif
+#endif
+
+/* This is for other GNU distributions with internationalized messages.  */
+#if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
+# include <libintl.h>
+# ifdef _LIBC
+#  undef gettext
+#  define gettext(msgid) \
+  INTUSE(__dcgettext) (_libc_intl_domainname, msgid, LC_MESSAGES)
+# endif
+#else
+# define gettext(msgid) (msgid)
+#endif
+
+#ifndef gettext_noop
+/* This define is so xgettext can find the internationalizable
+   strings.  */
+# define gettext_noop(String) String
+#endif
+
+/* For loser systems without the definition.  */
+#ifndef SIZE_MAX
+# define SIZE_MAX ((size_t) -1)
+#endif
+
+#if (defined MB_CUR_MAX && HAVE_LOCALE_H && HAVE_WCTYPE_H && HAVE_ISWCTYPE && HAVE_WCSCOLL) || _LIBC
+# define RE_ENABLE_I18N
+#endif
+
+#if __GNUC__ >= 3
+# define BE(expr, val) __builtin_expect (expr, val)
+#else
+# define BE(expr, val) (expr)
+# ifdef _LIBC
+#  define inline
+# endif
+#endif
+
+/* Number of ASCII characters.  */
+#define ASCII_CHARS 0x80
+
+/* Number of single byte characters.  */
+#define SBC_MAX (UCHAR_MAX + 1)
+
+#define COLL_ELEM_LEN_MAX 8
+
+/* The character which represents newline.  */
+#define NEWLINE_CHAR '\n'
+#define WIDE_NEWLINE_CHAR L'\n'
+
+/* Rename to standard API for using out of glibc.  */
+#ifndef _LIBC
+# define __wctype wctype
+# define __iswctype iswctype
+# define __btowc btowc
+# define __wcrtomb wcrtomb
+# define __mbrtowc mbrtowc
+# define __regfree regfree
+# define attribute_hidden
+#endif /* not _LIBC */
+
+#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
+# define __attribute(arg) __attribute__ (arg)
+#else
+# define __attribute(arg)
+#endif
+
+typedef __re_idx_t Idx;
+
+/* Special return value for failure to match.  */
+#define REG_MISSING ((Idx) -1)
+
+/* Special return value for internal error.  */
+#define REG_ERROR ((Idx) -2)
+
+/* Test whether N is a valid index, and is not one of the above.  */
+#ifdef _REGEX_LARGE_OFFSETS
+# define REG_VALID_INDEX(n) ((Idx) (n) < REG_ERROR)
+#else
+# define REG_VALID_INDEX(n) (0 <= (n))
+#endif
+
+/* Test whether N is a valid nonzero index.  */
+#ifdef _REGEX_LARGE_OFFSETS
+# define REG_VALID_NONZERO_INDEX(n) ((Idx) ((n) - 1) < (Idx) (REG_ERROR - 1))
+#else
+# define REG_VALID_NONZERO_INDEX(n) (0 < (n))
+#endif
+
+/* A hash value, suitable for computing hash tables.  */
+typedef __re_size_t re_hashval_t;
+
+/* An integer used to represent a set of bits.  It must be unsigned,
+   and must be at least as wide as unsigned int.  */
+typedef unsigned long int bitset_word_t;
+/* All bits set in a bitset_word_t.  */
+#define BITSET_WORD_MAX ULONG_MAX
+
+/* Number of bits in a bitset_word_t.  For portability to hosts with
+   padding bits, do not use '(sizeof (bitset_word_t) * CHAR_BIT)';
+   instead, deduce it directly from BITSET_WORD_MAX.  Avoid
+   greater-than-32-bit integers and unconditional shifts by more than
+   31 bits, as they're not portable.  */
+#if BITSET_WORD_MAX == 0xffffffffUL
+# define BITSET_WORD_BITS 32
+#elif BITSET_WORD_MAX >> 31 >> 4 == 1
+# define BITSET_WORD_BITS 36
+#elif BITSET_WORD_MAX >> 31 >> 16 == 1
+# define BITSET_WORD_BITS 48
+#elif BITSET_WORD_MAX >> 31 >> 28 == 1
+# define BITSET_WORD_BITS 60
+#elif BITSET_WORD_MAX >> 31 >> 31 >> 1 == 1
+# define BITSET_WORD_BITS 64
+#elif BITSET_WORD_MAX >> 31 >> 31 >> 9 == 1
+# define BITSET_WORD_BITS 72
+#elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 3 == 1
+# define BITSET_WORD_BITS 128
+#elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 7 == 1
+# define BITSET_WORD_BITS 256
+#elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 7 > 1
+# define BITSET_WORD_BITS 257 /* any value > SBC_MAX will do here */
+# if BITSET_WORD_BITS <= SBC_MAX
+#  error "Invalid SBC_MAX"
+# endif
+#else
+# error "Add case for new bitset_word_t size"
+#endif
+
+/* Number of bitset_word_t values in a bitset_t.  */
+#define BITSET_WORDS ((SBC_MAX + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS)
+
+typedef bitset_word_t bitset_t[BITSET_WORDS];
+typedef bitset_word_t *re_bitset_ptr_t;
+typedef const bitset_word_t *re_const_bitset_ptr_t;
+
+#define PREV_WORD_CONSTRAINT 0x0001
+#define PREV_NOTWORD_CONSTRAINT 0x0002
+#define NEXT_WORD_CONSTRAINT 0x0004
+#define NEXT_NOTWORD_CONSTRAINT 0x0008
+#define PREV_NEWLINE_CONSTRAINT 0x0010
+#define NEXT_NEWLINE_CONSTRAINT 0x0020
+#define PREV_BEGBUF_CONSTRAINT 0x0040
+#define NEXT_ENDBUF_CONSTRAINT 0x0080
+#define WORD_DELIM_CONSTRAINT 0x0100
+#define NOT_WORD_DELIM_CONSTRAINT 0x0200
+
+typedef enum
+{
+  INSIDE_WORD = PREV_WORD_CONSTRAINT | NEXT_WORD_CONSTRAINT,
+  WORD_FIRST = PREV_NOTWORD_CONSTRAINT | NEXT_WORD_CONSTRAINT,
+  WORD_LAST = PREV_WORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT,
+  INSIDE_NOTWORD = PREV_NOTWORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT,
+  LINE_FIRST = PREV_NEWLINE_CONSTRAINT,
+  LINE_LAST = NEXT_NEWLINE_CONSTRAINT,
+  BUF_FIRST = PREV_BEGBUF_CONSTRAINT,
+  BUF_LAST = NEXT_ENDBUF_CONSTRAINT,
+  WORD_DELIM = WORD_DELIM_CONSTRAINT,
+  NOT_WORD_DELIM = NOT_WORD_DELIM_CONSTRAINT
+} re_context_type;
+
+typedef struct
+{
+  Idx alloc;
+  Idx nelem;
+  Idx *elems;
+} re_node_set;
+
+typedef enum
+{
+  NON_TYPE = 0,
+
+  /* Node type, These are used by token, node, tree.  */
+  CHARACTER = 1,
+  END_OF_RE = 2,
+  SIMPLE_BRACKET = 3,
+  OP_BACK_REF = 4,
+  OP_PERIOD = 5,
+#ifdef RE_ENABLE_I18N
+  COMPLEX_BRACKET = 6,
+  OP_UTF8_PERIOD = 7,
+#endif /* RE_ENABLE_I18N */
+
+  /* We define EPSILON_BIT as a macro so that OP_OPEN_SUBEXP is used
+     when the debugger shows values of this enum type.  */
+#define EPSILON_BIT 8
+  OP_OPEN_SUBEXP = EPSILON_BIT | 0,
+  OP_CLOSE_SUBEXP = EPSILON_BIT | 1,
+  OP_ALT = EPSILON_BIT | 2,
+  OP_DUP_ASTERISK = EPSILON_BIT | 3,
+  ANCHOR = EPSILON_BIT | 4,
+
+  /* Tree type, these are used only by tree. */
+  CONCAT = 16,
+  SUBEXP = 17,
+
+  /* Token type, these are used only by token.  */
+  OP_DUP_PLUS = 18,
+  OP_DUP_QUESTION,
+  OP_OPEN_BRACKET,
+  OP_CLOSE_BRACKET,
+  OP_CHARSET_RANGE,
+  OP_OPEN_DUP_NUM,
+  OP_CLOSE_DUP_NUM,
+  OP_NON_MATCH_LIST,
+  OP_OPEN_COLL_ELEM,
+  OP_CLOSE_COLL_ELEM,
+  OP_OPEN_EQUIV_CLASS,
+  OP_CLOSE_EQUIV_CLASS,
+  OP_OPEN_CHAR_CLASS,
+  OP_CLOSE_CHAR_CLASS,
+  OP_WORD,
+  OP_NOTWORD,
+  OP_SPACE,
+  OP_NOTSPACE,
+  BACK_SLASH
+
+} re_token_type_t;
+
+#ifdef RE_ENABLE_I18N
+typedef struct
+{
+  /* Multibyte characters.  */
+  wchar_t *mbchars;
+
+  /* Collating symbols.  */
+# ifdef _LIBC
+  int32_t *coll_syms;
+# endif
+
+  /* Equivalence classes. */
+# ifdef _LIBC
+  int32_t *equiv_classes;
+# endif
+
+  /* Range expressions. */
+# ifdef _LIBC
+  uint32_t *range_starts;
+  uint32_t *range_ends;
+# else /* not _LIBC */
+  wchar_t *range_starts;
+  wchar_t *range_ends;
+# endif /* not _LIBC */
+
+  /* Character classes. */
+  wctype_t *char_classes;
+
+  /* If this character set is the non-matching list.  */
+  unsigned int non_match : 1;
+
+  /* # of multibyte characters.  */
+  Idx nmbchars;
+
+  /* # of collating symbols.  */
+  Idx ncoll_syms;
+
+  /* # of equivalence classes. */
+  Idx nequiv_classes;
+
+  /* # of range expressions. */
+  Idx nranges;
+
+  /* # of character classes. */
+  Idx nchar_classes;
+} re_charset_t;
+#endif /* RE_ENABLE_I18N */
+
+typedef struct
+{
+  union
+  {
+    unsigned char c;           /* for CHARACTER */
+    re_bitset_ptr_t sbcset;    /* for SIMPLE_BRACKET */
+#ifdef RE_ENABLE_I18N
+    re_charset_t *mbcset;      /* for COMPLEX_BRACKET */
+#endif /* RE_ENABLE_I18N */
+    Idx idx;                   /* for BACK_REF */
+    re_context_type ctx_type;  /* for ANCHOR */
+  } opr;
+#if __GNUC__ >= 2 && !__STRICT_ANSI__
+  re_token_type_t type : 8;
+#else
+  re_token_type_t type;
+#endif
+  unsigned int constraint : 10;        /* context constraint */
+  unsigned int duplicated : 1;
+  unsigned int opt_subexp : 1;
+#ifdef RE_ENABLE_I18N
+  unsigned int accept_mb : 1;
+  /* These 2 bits can be moved into the union if needed (e.g. if running out
+     of bits; move opr.c to opr.c.c and move the flags to opr.c.flags).  */
+  unsigned int mb_partial : 1;
+#endif
+  unsigned int word_char : 1;
+} re_token_t;
+
+#define IS_EPSILON_NODE(type) ((type) & EPSILON_BIT)
+
+struct re_string_t
+{
+  /* Indicate the raw buffer which is the original string passed as an
+     argument of regexec(), re_search(), etc..  */
+  const unsigned char *raw_mbs;
+  /* Store the multibyte string.  In case of "case insensitive mode" like
+     REG_ICASE, upper cases of the string are stored, otherwise MBS points
+     the same address that RAW_MBS points.  */
+  unsigned char *mbs;
+#ifdef RE_ENABLE_I18N
+  /* Store the wide character string which is corresponding to MBS.  */
+  wint_t *wcs;
+  Idx *offsets;
+  mbstate_t cur_state;
+#endif
+  /* Index in RAW_MBS.  Each character mbs[i] corresponds to
+     raw_mbs[raw_mbs_idx + i].  */
+  Idx raw_mbs_idx;
+  /* The length of the valid characters in the buffers.  */
+  Idx valid_len;
+  /* The corresponding number of bytes in raw_mbs array.  */
+  Idx valid_raw_len;
+  /* The length of the buffers MBS and WCS.  */
+  Idx bufs_len;
+  /* The index in MBS, which is updated by re_string_fetch_byte.  */
+  Idx cur_idx;
+  /* length of RAW_MBS array.  */
+  Idx raw_len;
+  /* This is RAW_LEN - RAW_MBS_IDX + VALID_LEN - VALID_RAW_LEN.  */
+  Idx len;
+  /* End of the buffer may be shorter than its length in the cases such
+     as re_match_2, re_search_2.  Then, we use STOP for end of the buffer
+     instead of LEN.  */
+  Idx raw_stop;
+  /* This is RAW_STOP - RAW_MBS_IDX adjusted through OFFSETS.  */
+  Idx stop;
+
+  /* The context of mbs[0].  We store the context independently, since
+     the context of mbs[0] may be different from raw_mbs[0], which is
+     the beginning of the input string.  */
+  unsigned int tip_context;
+  /* The translation passed as a part of an argument of re_compile_pattern.  */
+  RE_TRANSLATE_TYPE trans;
+  /* Copy of re_dfa_t's word_char.  */
+  re_const_bitset_ptr_t word_char;
+  /* true if REG_ICASE.  */
+  unsigned char icase;
+  unsigned char is_utf8;
+  unsigned char map_notascii;
+  unsigned char mbs_allocated;
+  unsigned char offsets_needed;
+  unsigned char newline_anchor;
+  unsigned char word_ops_used;
+  int mb_cur_max;
+};
+typedef struct re_string_t re_string_t;
+
+
+struct re_dfa_t;
+typedef struct re_dfa_t re_dfa_t;
+
+#ifndef _LIBC
+# if defined __i386__ && !defined __EMX__
+#  define internal_function   __attribute ((regparm (3), stdcall))
+# else
+#  define internal_function
+# endif
+#endif
+
+static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr,
+                                               Idx new_buf_len)
+     internal_function;
+#ifdef RE_ENABLE_I18N
+static void build_wcs_buffer (re_string_t *pstr) internal_function;
+static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr)
+     internal_function;
+#endif /* RE_ENABLE_I18N */
+static void build_upper_buffer (re_string_t *pstr) internal_function;
+static void re_string_translate_buffer (re_string_t *pstr) internal_function;
+static unsigned int re_string_context_at (const re_string_t *input, Idx idx,
+                                         int eflags)
+     internal_function __attribute ((pure));
+#define re_string_peek_byte(pstr, offset) \
+  ((pstr)->mbs[(pstr)->cur_idx + offset])
+#define re_string_fetch_byte(pstr) \
+  ((pstr)->mbs[(pstr)->cur_idx++])
+#define re_string_first_byte(pstr, idx) \
+  ((idx) == (pstr)->valid_len || (pstr)->wcs[idx] != WEOF)
+#define re_string_is_single_byte_char(pstr, idx) \
+  ((pstr)->wcs[idx] != WEOF && ((pstr)->valid_len == (idx) + 1 \
+                               || (pstr)->wcs[(idx) + 1] != WEOF))
+#define re_string_eoi(pstr) ((pstr)->stop <= (pstr)->cur_idx)
+#define re_string_cur_idx(pstr) ((pstr)->cur_idx)
+#define re_string_get_buffer(pstr) ((pstr)->mbs)
+#define re_string_length(pstr) ((pstr)->len)
+#define re_string_byte_at(pstr,idx) ((pstr)->mbs[idx])
+#define re_string_skip_bytes(pstr,idx) ((pstr)->cur_idx += (idx))
+#define re_string_set_index(pstr,idx) ((pstr)->cur_idx = (idx))
+
+#include <alloca.h>
+
+#ifndef _LIBC
+# if HAVE_ALLOCA
+/* The OS usually guarantees only one guard page at the bottom of the stack,
+   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.  */
+#  define __libc_use_alloca(n) ((n) < 4032)
+# else
+/* alloca is implemented with malloc, so just use malloc.  */
+#  define __libc_use_alloca(n) 0
+# endif
+#endif
+
+#ifndef MAX
+# define MAX(a,b) ((a) < (b) ? (b) : (a))
+#endif
+
+#define re_malloc(t,n) ((t *) malloc ((n) * sizeof (t)))
+#define re_realloc(p,t,n) ((t *) realloc (p, (n) * sizeof (t)))
+#define re_free(p) free (p)
+
+struct bin_tree_t
+{
+  struct bin_tree_t *parent;
+  struct bin_tree_t *left;
+  struct bin_tree_t *right;
+  struct bin_tree_t *first;
+  struct bin_tree_t *next;
+
+  re_token_t token;
+
+  /* `node_idx' is the index in dfa->nodes, if `type' == 0.
+     Otherwise `type' indicate the type of this node.  */
+  Idx node_idx;
+};
+typedef struct bin_tree_t bin_tree_t;
+
+#define BIN_TREE_STORAGE_SIZE \
+  ((1024 - sizeof (void *)) / sizeof (bin_tree_t))
+
+struct bin_tree_storage_t
+{
+  struct bin_tree_storage_t *next;
+  bin_tree_t data[BIN_TREE_STORAGE_SIZE];
+};
+typedef struct bin_tree_storage_t bin_tree_storage_t;
+
+#define CONTEXT_WORD 1
+#define CONTEXT_NEWLINE (CONTEXT_WORD << 1)
+#define CONTEXT_BEGBUF (CONTEXT_NEWLINE << 1)
+#define CONTEXT_ENDBUF (CONTEXT_BEGBUF << 1)
+
+#define IS_WORD_CONTEXT(c) ((c) & CONTEXT_WORD)
+#define IS_NEWLINE_CONTEXT(c) ((c) & CONTEXT_NEWLINE)
+#define IS_BEGBUF_CONTEXT(c) ((c) & CONTEXT_BEGBUF)
+#define IS_ENDBUF_CONTEXT(c) ((c) & CONTEXT_ENDBUF)
+#define IS_ORDINARY_CONTEXT(c) ((c) == 0)
+
+#define IS_WORD_CHAR(ch) (isalnum (ch) || (ch) == '_')
+#define IS_NEWLINE(ch) ((ch) == NEWLINE_CHAR)
+#define IS_WIDE_WORD_CHAR(ch) (iswalnum (ch) || (ch) == L'_')
+#define IS_WIDE_NEWLINE(ch) ((ch) == WIDE_NEWLINE_CHAR)
+
+#define NOT_SATISFY_PREV_CONSTRAINT(constraint,context) \
+ ((((constraint) & PREV_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \
+  || ((constraint & PREV_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \
+  || ((constraint & PREV_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context))\
+  || ((constraint & PREV_BEGBUF_CONSTRAINT) && !IS_BEGBUF_CONTEXT (context)))
+
+#define NOT_SATISFY_NEXT_CONSTRAINT(constraint,context) \
+ ((((constraint) & NEXT_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \
+  || (((constraint) & NEXT_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \
+  || (((constraint) & NEXT_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context)) \
+  || (((constraint) & NEXT_ENDBUF_CONSTRAINT) && !IS_ENDBUF_CONTEXT (context)))
+
+struct re_dfastate_t
+{
+  re_hashval_t hash;
+  re_node_set nodes;
+  re_node_set non_eps_nodes;
+  re_node_set inveclosure;
+  re_node_set *entrance_nodes;
+  struct re_dfastate_t **trtable, **word_trtable;
+  unsigned int context : 4;
+  unsigned int halt : 1;
+  /* If this state can accept `multi byte'.
+     Note that we refer to multibyte characters, and multi character
+     collating elements as `multi byte'.  */
+  unsigned int accept_mb : 1;
+  /* If this state has backreference node(s).  */
+  unsigned int has_backref : 1;
+  unsigned int has_constraint : 1;
+};
+typedef struct re_dfastate_t re_dfastate_t;
+
+struct re_state_table_entry
+{
+  Idx num;
+  Idx alloc;
+  re_dfastate_t **array;
+};
+
+/* Array type used in re_sub_match_last_t and re_sub_match_top_t.  */
+
+typedef struct
+{
+  Idx next_idx;
+  Idx alloc;
+  re_dfastate_t **array;
+} state_array_t;
+
+/* Store information about the node NODE whose type is OP_CLOSE_SUBEXP.  */
+
+typedef struct
+{
+  Idx node;
+  Idx str_idx; /* The position NODE match at.  */
+  state_array_t path;
+} re_sub_match_last_t;
+
+/* Store information about the node NODE whose type is OP_OPEN_SUBEXP.
+   And information about the node, whose type is OP_CLOSE_SUBEXP,
+   corresponding to NODE is stored in LASTS.  */
+
+typedef struct
+{
+  Idx str_idx;
+  Idx node;
+  state_array_t *path;
+  Idx alasts; /* Allocation size of LASTS.  */
+  Idx nlasts; /* The number of LASTS.  */
+  re_sub_match_last_t **lasts;
+} re_sub_match_top_t;
+
+struct re_backref_cache_entry
+{
+  Idx node;
+  Idx str_idx;
+  Idx subexp_from;
+  Idx subexp_to;
+  char more;
+  char unused;
+  unsigned short int eps_reachable_subexps_map;
+};
+
+typedef struct
+{
+  /* The string object corresponding to the input string.  */
+  re_string_t input;
+#if defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
+  const re_dfa_t *const dfa;
+#else
+  const re_dfa_t *dfa;
+#endif
+  /* EFLAGS of the argument of regexec.  */
+  int eflags;
+  /* Where the matching ends.  */
+  Idx match_last;
+  Idx last_node;
+  /* The state log used by the matcher.  */
+  re_dfastate_t **state_log;
+  Idx state_log_top;
+  /* Back reference cache.  */
+  Idx nbkref_ents;
+  Idx abkref_ents;
+  struct re_backref_cache_entry *bkref_ents;
+  int max_mb_elem_len;
+  Idx nsub_tops;
+  Idx asub_tops;
+  re_sub_match_top_t **sub_tops;
+} re_match_context_t;
+
+typedef struct
+{
+  re_dfastate_t **sifted_states;
+  re_dfastate_t **limited_states;
+  Idx last_node;
+  Idx last_str_idx;
+  re_node_set limits;
+} re_sift_context_t;
+
+struct re_fail_stack_ent_t
+{
+  Idx idx;
+  Idx node;
+  regmatch_t *regs;
+  re_node_set eps_via_nodes;
+};
+
+struct re_fail_stack_t
+{
+  Idx num;
+  Idx alloc;
+  struct re_fail_stack_ent_t *stack;
+};
+
+struct re_dfa_t
+{
+  re_token_t *nodes;
+  size_t nodes_alloc;
+  size_t nodes_len;
+  Idx *nexts;
+  Idx *org_indices;
+  re_node_set *edests;
+  re_node_set *eclosures;
+  re_node_set *inveclosures;
+  struct re_state_table_entry *state_table;
+  re_dfastate_t *init_state;
+  re_dfastate_t *init_state_word;
+  re_dfastate_t *init_state_nl;
+  re_dfastate_t *init_state_begbuf;
+  bin_tree_t *str_tree;
+  bin_tree_storage_t *str_tree_storage;
+  re_bitset_ptr_t sb_char;
+  int str_tree_storage_idx;
+
+  /* number of subexpressions `re_nsub' is in regex_t.  */
+  re_hashval_t state_hash_mask;
+  Idx init_node;
+  Idx nbackref; /* The number of backreference in this dfa.  */
+
+  /* Bitmap expressing which backreference is used.  */
+  bitset_word_t used_bkref_map;
+  bitset_word_t completed_bkref_map;
+
+  unsigned int has_plural_match : 1;
+  /* If this dfa has "multibyte node", which is a backreference or
+     a node which can accept multibyte character or multi character
+     collating element.  */
+  unsigned int has_mb_node : 1;
+  unsigned int is_utf8 : 1;
+  unsigned int map_notascii : 1;
+  unsigned int word_ops_used : 1;
+  int mb_cur_max;
+  bitset_t word_char;
+  reg_syntax_t syntax;
+  Idx *subexp_map;
+#ifdef DEBUG
+  char* re_str;
+#endif
+#ifdef _LIBC
+  __libc_lock_define (, lock)
+#endif
+};
+
+#define re_node_set_init_empty(set) memset (set, '\0', sizeof (re_node_set))
+#define re_node_set_remove(set,id) \
+  (re_node_set_remove_at (set, re_node_set_contains (set, id) - 1))
+#define re_node_set_empty(p) ((p)->nelem = 0)
+#define re_node_set_free(set) re_free ((set)->elems)
+\f
+
+typedef enum
+{
+  SB_CHAR,
+  MB_CHAR,
+  EQUIV_CLASS,
+  COLL_SYM,
+  CHAR_CLASS
+} bracket_elem_type;
+
+typedef struct
+{
+  bracket_elem_type type;
+  union
+  {
+    unsigned char ch;
+    unsigned char *name;
+    wchar_t wch;
+  } opr;
+} bracket_elem_t;
+
+
+/* Inline functions for bitset_t operation.  */
+
+static inline void
+bitset_set (bitset_t set, Idx i)
+{
+  set[i / BITSET_WORD_BITS] |= (bitset_word_t) 1 << i % BITSET_WORD_BITS;
+}
+
+static inline void
+bitset_clear (bitset_t set, Idx i)
+{
+  set[i / BITSET_WORD_BITS] &= ~ ((bitset_word_t) 1 << i % BITSET_WORD_BITS);
+}
+
+static inline bool
+bitset_contain (const bitset_t set, Idx i)
+{
+  return (set[i / BITSET_WORD_BITS] >> i % BITSET_WORD_BITS) & 1;
+}
+
+static inline void
+bitset_empty (bitset_t set)
+{
+  memset (set, '\0', sizeof (bitset_t));
+}
+
+static inline void
+bitset_set_all (bitset_t set)
+{
+  memset (set, -1, sizeof (bitset_word_t) * (SBC_MAX / BITSET_WORD_BITS));
+  if (SBC_MAX % BITSET_WORD_BITS != 0)
+    set[BITSET_WORDS - 1] =
+      ((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1;
+}
+
+static inline void
+bitset_copy (bitset_t dest, const bitset_t src)
+{
+  memcpy (dest, src, sizeof (bitset_t));
+}
+
+static inline void
+bitset_not (bitset_t set)
+{
+  int bitset_i;
+  for (bitset_i = 0; bitset_i < SBC_MAX / BITSET_WORD_BITS; ++bitset_i)
+    set[bitset_i] = ~set[bitset_i];
+  if (SBC_MAX % BITSET_WORD_BITS != 0)
+    set[BITSET_WORDS - 1] =
+      ((((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1)
+       & ~set[BITSET_WORDS - 1]);
+}
+
+static inline void
+bitset_merge (bitset_t dest, const bitset_t src)
+{
+  int bitset_i;
+  for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i)
+    dest[bitset_i] |= src[bitset_i];
+}
+
+static inline void
+bitset_mask (bitset_t dest, const bitset_t src)
+{
+  int bitset_i;
+  for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i)
+    dest[bitset_i] &= src[bitset_i];
+}
+
+#ifdef RE_ENABLE_I18N
+/* Inline functions for re_string.  */
+static inline int
+internal_function __attribute ((pure))
+re_string_char_size_at (const re_string_t *pstr, Idx idx)
+{
+  int byte_idx;
+  if (pstr->mb_cur_max == 1)
+    return 1;
+  for (byte_idx = 1; idx + byte_idx < pstr->valid_len; ++byte_idx)
+    if (pstr->wcs[idx + byte_idx] != WEOF)
+      break;
+  return byte_idx;
+}
+
+static inline wint_t
+internal_function __attribute ((pure))
+re_string_wchar_at (const re_string_t *pstr, Idx idx)
+{
+  if (pstr->mb_cur_max == 1)
+    return (wint_t) pstr->mbs[idx];
+  return (wint_t) pstr->wcs[idx];
+}
+
+static int
+internal_function __attribute ((pure))
+re_string_elem_size_at (const re_string_t *pstr, Idx idx)
+{
+# ifdef _LIBC
+  const unsigned char *p, *extra;
+  const int32_t *table, *indirect;
+  int32_t tmp;
+#  include <locale/weight.h>
+  uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+
+  if (nrules != 0)
+    {
+      table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
+      extra = (const unsigned char *)
+       _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
+      indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE,
+                                               _NL_COLLATE_INDIRECTMB);
+      p = pstr->mbs + idx;
+      tmp = findidx (&p);
+      return p - pstr->mbs - idx;
+    }
+  else
+# endif /* _LIBC */
+    return 1;
+}
+#endif /* RE_ENABLE_I18N */
+
+#ifndef __GNUC_PREREQ
+# if defined __GNUC__ && defined __GNUC_MINOR__
+#  define __GNUC_PREREQ(maj, min) \
+         ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+# else
+#  define __GNUC_PREREQ(maj, min) 0
+# endif
+#endif
+
+#if __GNUC_PREREQ (3,4)
+# undef __attribute_warn_unused_result__
+# define __attribute_warn_unused_result__ \
+   __attribute__ ((__warn_unused_result__))
+#else
+# define __attribute_warn_unused_result__ /* empty */
+#endif
+
+#endif /*  _REGEX_INTERNAL_H */
diff --git a/gnu/regexec.c b/gnu/regexec.c
new file mode 100644 (file)
index 0000000..9c21f12
--- /dev/null
@@ -0,0 +1,4418 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Extended regular expression matching and search library.
+   Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+   Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Isamu Hasegawa <isamu@yamato.ibm.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.
+
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags,
+                                    Idx n) internal_function;
+static void match_ctx_clean (re_match_context_t *mctx) internal_function;
+static void match_ctx_free (re_match_context_t *cache) internal_function;
+static reg_errcode_t match_ctx_add_entry (re_match_context_t *cache, Idx node,
+                                         Idx str_idx, Idx from, Idx to)
+     internal_function;
+static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx)
+     internal_function;
+static reg_errcode_t match_ctx_add_subtop (re_match_context_t *mctx, Idx node,
+                                          Idx str_idx) internal_function;
+static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop,
+                                                   Idx node, Idx str_idx)
+     internal_function;
+static void sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts,
+                          re_dfastate_t **limited_sts, Idx last_node,
+                          Idx last_str_idx)
+     internal_function;
+static reg_errcode_t re_search_internal (const regex_t *preg,
+                                        const char *string, Idx length,
+                                        Idx start, Idx last_start, Idx stop,
+                                        size_t nmatch, regmatch_t pmatch[],
+                                        int eflags) internal_function;
+static regoff_t re_search_2_stub (struct re_pattern_buffer *bufp,
+                                 const char *string1, Idx length1,
+                                 const char *string2, Idx length2,
+                                 Idx start, regoff_t range,
+                                 struct re_registers *regs,
+                                 Idx stop, bool ret_len) internal_function;
+static regoff_t re_search_stub (struct re_pattern_buffer *bufp,
+                               const char *string, Idx length, Idx start,
+                               regoff_t range, Idx stop,
+                               struct re_registers *regs,
+                               bool ret_len) internal_function;
+static unsigned int re_copy_regs (struct re_registers *regs, regmatch_t *pmatch,
+                                 Idx nregs, int regs_allocated)
+     internal_function;
+static reg_errcode_t prune_impossible_nodes (re_match_context_t *mctx)
+     internal_function;
+static Idx check_matching (re_match_context_t *mctx, bool fl_longest_match,
+                          Idx *p_match_first) internal_function;
+static Idx check_halt_state_context (const re_match_context_t *mctx,
+                                    const re_dfastate_t *state, Idx idx)
+     internal_function;
+static void update_regs (const re_dfa_t *dfa, regmatch_t *pmatch,
+                        regmatch_t *prev_idx_match, Idx cur_node,
+                        Idx cur_idx, Idx nmatch) internal_function;
+static reg_errcode_t push_fail_stack (struct re_fail_stack_t *fs,
+                                     Idx str_idx, Idx dest_node, Idx nregs,
+                                     regmatch_t *regs,
+                                     re_node_set *eps_via_nodes)
+     internal_function;
+static reg_errcode_t set_regs (const regex_t *preg,
+                              const re_match_context_t *mctx,
+                              size_t nmatch, regmatch_t *pmatch,
+                              bool fl_backtrack) internal_function;
+static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs)
+     internal_function;
+
+#ifdef RE_ENABLE_I18N
+static int sift_states_iter_mb (const re_match_context_t *mctx,
+                               re_sift_context_t *sctx,
+                               Idx node_idx, Idx str_idx, Idx max_str_idx)
+     internal_function;
+#endif /* RE_ENABLE_I18N */
+static reg_errcode_t sift_states_backward (const re_match_context_t *mctx,
+                                          re_sift_context_t *sctx)
+     internal_function;
+static reg_errcode_t build_sifted_states (const re_match_context_t *mctx,
+                                         re_sift_context_t *sctx, Idx str_idx,
+                                         re_node_set *cur_dest)
+     internal_function;
+static reg_errcode_t update_cur_sifted_state (const re_match_context_t *mctx,
+                                             re_sift_context_t *sctx,
+                                             Idx str_idx,
+                                             re_node_set *dest_nodes)
+     internal_function;
+static reg_errcode_t add_epsilon_src_nodes (const re_dfa_t *dfa,
+                                           re_node_set *dest_nodes,
+                                           const re_node_set *candidates)
+     internal_function;
+static bool check_dst_limits (const re_match_context_t *mctx,
+                             const re_node_set *limits,
+                             Idx dst_node, Idx dst_idx, Idx src_node,
+                             Idx src_idx) internal_function;
+static int check_dst_limits_calc_pos_1 (const re_match_context_t *mctx,
+                                       int boundaries, Idx subexp_idx,
+                                       Idx from_node, Idx bkref_idx)
+     internal_function;
+static int check_dst_limits_calc_pos (const re_match_context_t *mctx,
+                                     Idx limit, Idx subexp_idx,
+                                     Idx node, Idx str_idx,
+                                     Idx bkref_idx) internal_function;
+static reg_errcode_t check_subexp_limits (const re_dfa_t *dfa,
+                                         re_node_set *dest_nodes,
+                                         const re_node_set *candidates,
+                                         re_node_set *limits,
+                                         struct re_backref_cache_entry *bkref_ents,
+                                         Idx str_idx) internal_function;
+static reg_errcode_t sift_states_bkref (const re_match_context_t *mctx,
+                                       re_sift_context_t *sctx,
+                                       Idx str_idx, const re_node_set *candidates)
+     internal_function;
+static reg_errcode_t merge_state_array (const re_dfa_t *dfa,
+                                       re_dfastate_t **dst,
+                                       re_dfastate_t **src, Idx num)
+     internal_function;
+static re_dfastate_t *find_recover_state (reg_errcode_t *err,
+                                        re_match_context_t *mctx) internal_function;
+static re_dfastate_t *transit_state (reg_errcode_t *err,
+                                    re_match_context_t *mctx,
+                                    re_dfastate_t *state) internal_function;
+static re_dfastate_t *merge_state_with_log (reg_errcode_t *err,
+                                           re_match_context_t *mctx,
+                                           re_dfastate_t *next_state)
+     internal_function;
+static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx,
+                                               re_node_set *cur_nodes,
+                                               Idx str_idx) internal_function;
+#if 0
+static re_dfastate_t *transit_state_sb (reg_errcode_t *err,
+                                       re_match_context_t *mctx,
+                                       re_dfastate_t *pstate)
+     internal_function;
+#endif
+#ifdef RE_ENABLE_I18N
+static reg_errcode_t transit_state_mb (re_match_context_t *mctx,
+                                      re_dfastate_t *pstate)
+     internal_function;
+#endif /* RE_ENABLE_I18N */
+static reg_errcode_t transit_state_bkref (re_match_context_t *mctx,
+                                         const re_node_set *nodes)
+     internal_function;
+static reg_errcode_t get_subexp (re_match_context_t *mctx,
+                                Idx bkref_node, Idx bkref_str_idx)
+     internal_function;
+static reg_errcode_t get_subexp_sub (re_match_context_t *mctx,
+                                    const re_sub_match_top_t *sub_top,
+                                    re_sub_match_last_t *sub_last,
+                                    Idx bkref_node, Idx bkref_str)
+     internal_function;
+static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes,
+                            Idx subexp_idx, int type) internal_function;
+static reg_errcode_t check_arrival (re_match_context_t *mctx,
+                                   state_array_t *path, Idx top_node,
+                                   Idx top_str, Idx last_node, Idx last_str,
+                                   int type) internal_function;
+static reg_errcode_t check_arrival_add_next_nodes (re_match_context_t *mctx,
+                                                  Idx str_idx,
+                                                  re_node_set *cur_nodes,
+                                                  re_node_set *next_nodes)
+     internal_function;
+static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa,
+                                              re_node_set *cur_nodes,
+                                              Idx ex_subexp, int type)
+     internal_function;
+static reg_errcode_t check_arrival_expand_ecl_sub (const re_dfa_t *dfa,
+                                                  re_node_set *dst_nodes,
+                                                  Idx target, Idx ex_subexp,
+                                                  int type) internal_function;
+static reg_errcode_t expand_bkref_cache (re_match_context_t *mctx,
+                                        re_node_set *cur_nodes, Idx cur_str,
+                                        Idx subexp_num, int type)
+     internal_function;
+static bool build_trtable (const re_dfa_t *dfa,
+                          re_dfastate_t *state) internal_function;
+#ifdef RE_ENABLE_I18N
+static int check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx,
+                                   const re_string_t *input, Idx idx)
+     internal_function;
+# ifdef _LIBC
+static unsigned int find_collation_sequence_value (const unsigned char *mbs,
+                                                  size_t name_len)
+     internal_function;
+# endif /* _LIBC */
+#endif /* RE_ENABLE_I18N */
+static Idx group_nodes_into_DFAstates (const re_dfa_t *dfa,
+                                      const re_dfastate_t *state,
+                                      re_node_set *states_node,
+                                      bitset_t *states_ch) internal_function;
+static bool check_node_accept (const re_match_context_t *mctx,
+                              const re_token_t *node, Idx idx)
+     internal_function;
+static reg_errcode_t extend_buffers (re_match_context_t *mctx)
+     internal_function;
+\f
+/* Entry point for POSIX code.  */
+
+/* regexec searches for a given pattern, specified by PREG, in the
+   string STRING.
+
+   If NMATCH is zero or REG_NOSUB was set in the cflags argument to
+   `regcomp', we ignore PMATCH.  Otherwise, we assume PMATCH has at
+   least NMATCH elements, and we set them to the offsets of the
+   corresponding matched substrings.
+
+   EFLAGS specifies `execution flags' which affect matching: if
+   REG_NOTBOL is set, then ^ does not match at the beginning of the
+   string; if REG_NOTEOL is set, then $ does not match at the end.
+
+   We return 0 if we find a match and REG_NOMATCH if not.  */
+
+int
+regexec (preg, string, nmatch, pmatch, eflags)
+    const regex_t *_Restrict_ preg;
+    const char *_Restrict_ string;
+    size_t nmatch;
+    regmatch_t pmatch[_Restrict_arr_];
+    int eflags;
+{
+  reg_errcode_t err;
+  Idx start, length;
+#ifdef _LIBC
+  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
+#endif
+
+  if (eflags & ~(REG_NOTBOL | REG_NOTEOL | REG_STARTEND))
+    return REG_BADPAT;
+
+  if (eflags & REG_STARTEND)
+    {
+      start = pmatch[0].rm_so;
+      length = pmatch[0].rm_eo;
+    }
+  else
+    {
+      start = 0;
+      length = strlen (string);
+    }
+
+  __libc_lock_lock (dfa->lock);
+  if (preg->no_sub)
+    err = re_search_internal (preg, string, length, start, length,
+                             length, 0, NULL, eflags);
+  else
+    err = re_search_internal (preg, string, length, start, length,
+                             length, nmatch, pmatch, eflags);
+  __libc_lock_unlock (dfa->lock);
+  return err != REG_NOERROR;
+}
+
+#ifdef _LIBC
+# include <shlib-compat.h>
+versioned_symbol (libc, __regexec, regexec, GLIBC_2_3_4);
+
+# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)
+__typeof__ (__regexec) __compat_regexec;
+
+int
+attribute_compat_text_section
+__compat_regexec (const regex_t *_Restrict_ preg,
+                 const char *_Restrict_ string, size_t nmatch,
+                 regmatch_t pmatch[], int eflags)
+{
+  return regexec (preg, string, nmatch, pmatch,
+                 eflags & (REG_NOTBOL | REG_NOTEOL));
+}
+compat_symbol (libc, __compat_regexec, regexec, GLIBC_2_0);
+# endif
+#endif
+
+/* Entry points for GNU code.  */
+
+/* re_match, re_search, re_match_2, re_search_2
+
+   The former two functions operate on STRING with length LENGTH,
+   while the later two operate on concatenation of STRING1 and STRING2
+   with lengths LENGTH1 and LENGTH2, respectively.
+
+   re_match() matches the compiled pattern in BUFP against the string,
+   starting at index START.
+
+   re_search() first tries matching at index START, then it tries to match
+   starting from index START + 1, and so on.  The last start position tried
+   is START + RANGE.  (Thus RANGE = 0 forces re_search to operate the same
+   way as re_match().)
+
+   The parameter STOP of re_{match,search}_2 specifies that no match exceeding
+   the first STOP characters of the concatenation of the strings should be
+   concerned.
+
+   If REGS is not NULL, and BUFP->no_sub is not set, the offsets of the match
+   and all groups is stored in REGS.  (For the "_2" variants, the offsets are
+   computed relative to the concatenation, not relative to the individual
+   strings.)
+
+   On success, re_match* functions return the length of the match, re_search*
+   return the position of the start of the match.  Return value -1 means no
+   match was found and -2 indicates an internal error.  */
+
+regoff_t
+re_match (bufp, string, length, start, regs)
+    struct re_pattern_buffer *bufp;
+    const char *string;
+    Idx length, start;
+    struct re_registers *regs;
+{
+  return re_search_stub (bufp, string, length, start, 0, length, regs, true);
+}
+#ifdef _LIBC
+weak_alias (__re_match, re_match)
+#endif
+
+regoff_t
+re_search (bufp, string, length, start, range, regs)
+    struct re_pattern_buffer *bufp;
+    const char *string;
+    Idx length, start;
+    regoff_t range;
+    struct re_registers *regs;
+{
+  return re_search_stub (bufp, string, length, start, range, length, regs,
+                        false);
+}
+#ifdef _LIBC
+weak_alias (__re_search, re_search)
+#endif
+
+regoff_t
+re_match_2 (bufp, string1, length1, string2, length2, start, regs, stop)
+    struct re_pattern_buffer *bufp;
+    const char *string1, *string2;
+    Idx length1, length2, start, stop;
+    struct re_registers *regs;
+{
+  return re_search_2_stub (bufp, string1, length1, string2, length2,
+                          start, 0, regs, stop, true);
+}
+#ifdef _LIBC
+weak_alias (__re_match_2, re_match_2)
+#endif
+
+regoff_t
+re_search_2 (bufp, string1, length1, string2, length2, start, range, regs, stop)
+    struct re_pattern_buffer *bufp;
+    const char *string1, *string2;
+    Idx length1, length2, start, stop;
+    regoff_t range;
+    struct re_registers *regs;
+{
+  return re_search_2_stub (bufp, string1, length1, string2, length2,
+                          start, range, regs, stop, false);
+}
+#ifdef _LIBC
+weak_alias (__re_search_2, re_search_2)
+#endif
+
+static regoff_t
+internal_function
+re_search_2_stub (struct re_pattern_buffer *bufp,
+                 const char *string1, Idx length1,
+                 const char *string2, Idx length2,
+                 Idx start, regoff_t range, struct re_registers *regs,
+                 Idx stop, bool ret_len)
+{
+  const char *str;
+  regoff_t rval;
+  Idx len = length1 + length2;
+  char *s = NULL;
+
+  if (BE (length1 < 0 || length2 < 0 || stop < 0 || len < length1, 0))
+    return -2;
+
+  /* Concatenate the strings.  */
+  if (length2 > 0)
+    if (length1 > 0)
+      {
+       s = re_malloc (char, len);
+
+       if (BE (s == NULL, 0))
+         return -2;
+#ifdef _LIBC
+       memcpy (__mempcpy (s, string1, length1), string2, length2);
+#else
+       memcpy (s, string1, length1);
+       memcpy (s + length1, string2, length2);
+#endif
+       str = s;
+      }
+    else
+      str = string2;
+  else
+    str = string1;
+
+  rval = re_search_stub (bufp, str, len, start, range, stop, regs,
+                        ret_len);
+  re_free (s);
+  return rval;
+}
+
+/* The parameters have the same meaning as those of re_search.
+   Additional parameters:
+   If RET_LEN is true the length of the match is returned (re_match style);
+   otherwise the position of the match is returned.  */
+
+static regoff_t
+internal_function
+re_search_stub (struct re_pattern_buffer *bufp,
+               const char *string, Idx length,
+               Idx start, regoff_t range, Idx stop, struct re_registers *regs,
+               bool ret_len)
+{
+  reg_errcode_t result;
+  regmatch_t *pmatch;
+  Idx nregs;
+  regoff_t rval;
+  int eflags = 0;
+#ifdef _LIBC
+  re_dfa_t *dfa = (re_dfa_t *) bufp->buffer;
+#endif
+  Idx last_start = start + range;
+
+  /* Check for out-of-range.  */
+  if (BE (start < 0 || start > length, 0))
+    return -1;
+  if (BE (length < last_start || (0 <= range && last_start < start), 0))
+    last_start = length;
+  else if (BE (last_start < 0 || (range < 0 && start <= last_start), 0))
+    last_start = 0;
+
+  __libc_lock_lock (dfa->lock);
+
+  eflags |= (bufp->not_bol) ? REG_NOTBOL : 0;
+  eflags |= (bufp->not_eol) ? REG_NOTEOL : 0;
+
+  /* Compile fastmap if we haven't yet.  */
+  if (start < last_start && bufp->fastmap != NULL && !bufp->fastmap_accurate)
+    re_compile_fastmap (bufp);
+
+  if (BE (bufp->no_sub, 0))
+    regs = NULL;
+
+  /* We need at least 1 register.  */
+  if (regs == NULL)
+    nregs = 1;
+  else if (BE (bufp->regs_allocated == REGS_FIXED
+              && regs->num_regs <= bufp->re_nsub, 0))
+    {
+      nregs = regs->num_regs;
+      if (BE (nregs < 1, 0))
+       {
+         /* Nothing can be copied to regs.  */
+         regs = NULL;
+         nregs = 1;
+       }
+    }
+  else
+    nregs = bufp->re_nsub + 1;
+  pmatch = re_malloc (regmatch_t, nregs);
+  if (BE (pmatch == NULL, 0))
+    {
+      rval = -2;
+      goto out;
+    }
+
+  result = re_search_internal (bufp, string, length, start, last_start, stop,
+                              nregs, pmatch, eflags);
+
+  rval = 0;
+
+  /* I hope we needn't fill ther regs with -1's when no match was found.  */
+  if (result != REG_NOERROR)
+    rval = -1;
+  else if (regs != NULL)
+    {
+      /* If caller wants register contents data back, copy them.  */
+      bufp->regs_allocated = re_copy_regs (regs, pmatch, nregs,
+                                          bufp->regs_allocated);
+      if (BE (bufp->regs_allocated == REGS_UNALLOCATED, 0))
+       rval = -2;
+    }
+
+  if (BE (rval == 0, 1))
+    {
+      if (ret_len)
+       {
+         assert (pmatch[0].rm_so == start);
+         rval = pmatch[0].rm_eo - start;
+       }
+      else
+       rval = pmatch[0].rm_so;
+    }
+  re_free (pmatch);
+ out:
+  __libc_lock_unlock (dfa->lock);
+  return rval;
+}
+
+static unsigned int
+internal_function
+re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, Idx nregs,
+             int regs_allocated)
+{
+  int rval = REGS_REALLOCATE;
+  Idx i;
+  Idx need_regs = nregs + 1;
+  /* We need one extra element beyond `num_regs' for the `-1' marker GNU code
+     uses.  */
+
+  /* Have the register data arrays been allocated?  */
+  if (regs_allocated == REGS_UNALLOCATED)
+    { /* No.  So allocate them with malloc.  */
+      regs->start = re_malloc (regoff_t, need_regs);
+      if (BE (regs->start == NULL, 0))
+       return REGS_UNALLOCATED;
+      regs->end = re_malloc (regoff_t, need_regs);
+      if (BE (regs->end == NULL, 0))
+       {
+         re_free (regs->start);
+         return REGS_UNALLOCATED;
+       }
+      regs->num_regs = need_regs;
+    }
+  else if (regs_allocated == REGS_REALLOCATE)
+    { /* Yes.  If we need more elements than were already
+        allocated, reallocate them.  If we need fewer, just
+        leave it alone.  */
+      if (BE (need_regs > regs->num_regs, 0))
+       {
+         regoff_t *new_start = re_realloc (regs->start, regoff_t, need_regs);
+         regoff_t *new_end;
+         if (BE (new_start == NULL, 0))
+           return REGS_UNALLOCATED;
+         new_end = re_realloc (regs->end, regoff_t, need_regs);
+         if (BE (new_end == NULL, 0))
+           {
+             re_free (new_start);
+             return REGS_UNALLOCATED;
+           }
+         regs->start = new_start;
+         regs->end = new_end;
+         regs->num_regs = need_regs;
+       }
+    }
+  else
+    {
+      assert (regs_allocated == REGS_FIXED);
+      /* This function may not be called with REGS_FIXED and nregs too big.  */
+      assert (regs->num_regs >= nregs);
+      rval = REGS_FIXED;
+    }
+
+  /* Copy the regs.  */
+  for (i = 0; i < nregs; ++i)
+    {
+      regs->start[i] = pmatch[i].rm_so;
+      regs->end[i] = pmatch[i].rm_eo;
+    }
+  for ( ; i < regs->num_regs; ++i)
+    regs->start[i] = regs->end[i] = -1;
+
+  return rval;
+}
+
+/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
+   ENDS.  Subsequent matches using PATTERN_BUFFER and REGS will use
+   this memory for recording register information.  STARTS and ENDS
+   must be allocated using the malloc library routine, and must each
+   be at least NUM_REGS * sizeof (regoff_t) bytes long.
+
+   If NUM_REGS == 0, then subsequent matches should allocate their own
+   register data.
+
+   Unless this function is called, the first search or match using
+   PATTERN_BUFFER will allocate its own register data, without
+   freeing the old data.  */
+
+void
+re_set_registers (bufp, regs, num_regs, starts, ends)
+    struct re_pattern_buffer *bufp;
+    struct re_registers *regs;
+    __re_size_t num_regs;
+    regoff_t *starts, *ends;
+{
+  if (num_regs)
+    {
+      bufp->regs_allocated = REGS_REALLOCATE;
+      regs->num_regs = num_regs;
+      regs->start = starts;
+      regs->end = ends;
+    }
+  else
+    {
+      bufp->regs_allocated = REGS_UNALLOCATED;
+      regs->num_regs = 0;
+      regs->start = regs->end = NULL;
+    }
+}
+#ifdef _LIBC
+weak_alias (__re_set_registers, re_set_registers)
+#endif
+\f
+/* Entry points compatible with 4.2 BSD regex library.  We don't define
+   them unless specifically requested.  */
+
+#if defined _REGEX_RE_COMP || defined _LIBC
+int
+# ifdef _LIBC
+weak_function
+# endif
+re_exec (s)
+     const char *s;
+{
+  return 0 == regexec (&re_comp_buf, s, 0, NULL, 0);
+}
+#endif /* _REGEX_RE_COMP */
+\f
+/* Internal entry point.  */
+
+/* Searches for a compiled pattern PREG in the string STRING, whose
+   length is LENGTH.  NMATCH, PMATCH, and EFLAGS have the same
+   meaning as with regexec.  LAST_START is START + RANGE, where
+   START and RANGE have the same meaning as with re_search.
+   Return REG_NOERROR if we find a match, and REG_NOMATCH if not,
+   otherwise return the error code.
+   Note: We assume front end functions already check ranges.
+   (0 <= LAST_START && LAST_START <= LENGTH)  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+re_search_internal (const regex_t *preg,
+                   const char *string, Idx length,
+                   Idx start, Idx last_start, Idx stop,
+                   size_t nmatch, regmatch_t pmatch[],
+                   int eflags)
+{
+  reg_errcode_t err;
+  const re_dfa_t *dfa = (const re_dfa_t *) preg->buffer;
+  Idx left_lim, right_lim;
+  int incr;
+  bool fl_longest_match;
+  int match_kind;
+  Idx match_first;
+  Idx match_last = REG_MISSING;
+  Idx extra_nmatch;
+  bool sb;
+  int ch;
+#if defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
+  re_match_context_t mctx = { .dfa = dfa };
+#else
+  re_match_context_t mctx;
+#endif
+  char *fastmap = ((preg->fastmap != NULL && preg->fastmap_accurate
+                   && start != last_start && !preg->can_be_null)
+                  ? preg->fastmap : NULL);
+  RE_TRANSLATE_TYPE t = preg->translate;
+
+#if !(defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L))
+  memset (&mctx, '\0', sizeof (re_match_context_t));
+  mctx.dfa = dfa;
+#endif
+
+  extra_nmatch = (nmatch > preg->re_nsub) ? nmatch - (preg->re_nsub + 1) : 0;
+  nmatch -= extra_nmatch;
+
+  /* Check if the DFA haven't been compiled.  */
+  if (BE (preg->used == 0 || dfa->init_state == NULL
+         || dfa->init_state_word == NULL || dfa->init_state_nl == NULL
+         || dfa->init_state_begbuf == NULL, 0))
+    return REG_NOMATCH;
+
+#ifdef DEBUG
+  /* We assume front-end functions already check them.  */
+  assert (0 <= last_start && last_start <= length);
+#endif
+
+  /* If initial states with non-begbuf contexts have no elements,
+     the regex must be anchored.  If preg->newline_anchor is set,
+     we'll never use init_state_nl, so do not check it.  */
+  if (dfa->init_state->nodes.nelem == 0
+      && dfa->init_state_word->nodes.nelem == 0
+      && (dfa->init_state_nl->nodes.nelem == 0
+         || !preg->newline_anchor))
+    {
+      if (start != 0 && last_start != 0)
+        return REG_NOMATCH;
+      start = last_start = 0;
+    }
+
+  /* We must check the longest matching, if nmatch > 0.  */
+  fl_longest_match = (nmatch != 0 || dfa->nbackref);
+
+  err = re_string_allocate (&mctx.input, string, length, dfa->nodes_len + 1,
+                           preg->translate, (preg->syntax & RE_ICASE) != 0,
+                           dfa);
+  if (BE (err != REG_NOERROR, 0))
+    goto free_return;
+  mctx.input.stop = stop;
+  mctx.input.raw_stop = stop;
+  mctx.input.newline_anchor = preg->newline_anchor;
+
+  err = match_ctx_init (&mctx, eflags, dfa->nbackref * 2);
+  if (BE (err != REG_NOERROR, 0))
+    goto free_return;
+
+  /* We will log all the DFA states through which the dfa pass,
+     if nmatch > 1, or this dfa has "multibyte node", which is a
+     back-reference or a node which can accept multibyte character or
+     multi character collating element.  */
+  if (nmatch > 1 || dfa->has_mb_node)
+    {
+      /* Avoid overflow.  */
+      if (BE (SIZE_MAX / sizeof (re_dfastate_t *) <= mctx.input.bufs_len, 0))
+       {
+         err = REG_ESPACE;
+         goto free_return;
+       }
+
+      mctx.state_log = re_malloc (re_dfastate_t *, mctx.input.bufs_len + 1);
+      if (BE (mctx.state_log == NULL, 0))
+       {
+         err = REG_ESPACE;
+         goto free_return;
+       }
+    }
+  else
+    mctx.state_log = NULL;
+
+  match_first = start;
+  mctx.input.tip_context = (eflags & REG_NOTBOL) ? CONTEXT_BEGBUF
+                          : CONTEXT_NEWLINE | CONTEXT_BEGBUF;
+
+  /* Check incrementally whether of not the input string match.  */
+  incr = (last_start < start) ? -1 : 1;
+  left_lim = (last_start < start) ? last_start : start;
+  right_lim = (last_start < start) ? start : last_start;
+  sb = dfa->mb_cur_max == 1;
+  match_kind =
+    (fastmap
+     ? ((sb || !(preg->syntax & RE_ICASE || t) ? 4 : 0)
+       | (start <= last_start ? 2 : 0)
+       | (t != NULL ? 1 : 0))
+     : 8);
+
+  for (;; match_first += incr)
+    {
+      err = REG_NOMATCH;
+      if (match_first < left_lim || right_lim < match_first)
+       goto free_return;
+
+      /* Advance as rapidly as possible through the string, until we
+        find a plausible place to start matching.  This may be done
+        with varying efficiency, so there are various possibilities:
+        only the most common of them are specialized, in order to
+        save on code size.  We use a switch statement for speed.  */
+      switch (match_kind)
+       {
+       case 8:
+         /* No fastmap.  */
+         break;
+
+       case 7:
+         /* Fastmap with single-byte translation, match forward.  */
+         while (BE (match_first < right_lim, 1)
+                && !fastmap[t[(unsigned char) string[match_first]]])
+           ++match_first;
+         goto forward_match_found_start_or_reached_end;
+
+       case 6:
+         /* Fastmap without translation, match forward.  */
+         while (BE (match_first < right_lim, 1)
+                && !fastmap[(unsigned char) string[match_first]])
+           ++match_first;
+
+       forward_match_found_start_or_reached_end:
+         if (BE (match_first == right_lim, 0))
+           {
+             ch = match_first >= length
+                      ? 0 : (unsigned char) string[match_first];
+             if (!fastmap[t ? t[ch] : ch])
+               goto free_return;
+           }
+         break;
+
+       case 4:
+       case 5:
+         /* Fastmap without multi-byte translation, match backwards.  */
+         while (match_first >= left_lim)
+           {
+             ch = match_first >= length
+                      ? 0 : (unsigned char) string[match_first];
+             if (fastmap[t ? t[ch] : ch])
+               break;
+             --match_first;
+           }
+         if (match_first < left_lim)
+           goto free_return;
+         break;
+
+       default:
+         /* In this case, we can't determine easily the current byte,
+            since it might be a component byte of a multibyte
+            character.  Then we use the constructed buffer instead.  */
+         for (;;)
+           {
+             /* If MATCH_FIRST is out of the valid range, reconstruct the
+                buffers.  */
+             __re_size_t offset = match_first - mctx.input.raw_mbs_idx;
+             if (BE (offset >= (__re_size_t) mctx.input.valid_raw_len, 0))
+               {
+                 err = re_string_reconstruct (&mctx.input, match_first,
+                                              eflags);
+                 if (BE (err != REG_NOERROR, 0))
+                   goto free_return;
+
+                 offset = match_first - mctx.input.raw_mbs_idx;
+               }
+             /* If MATCH_FIRST is out of the buffer, leave it as '\0'.
+                Note that MATCH_FIRST must not be smaller than 0.  */
+             ch = (match_first >= length
+                   ? 0 : re_string_byte_at (&mctx.input, offset));
+             if (fastmap[ch])
+               break;
+             match_first += incr;
+             if (match_first < left_lim || match_first > right_lim)
+               {
+                 err = REG_NOMATCH;
+                 goto free_return;
+               }
+           }
+         break;
+       }
+
+      /* Reconstruct the buffers so that the matcher can assume that
+        the matching starts from the beginning of the buffer.  */
+      err = re_string_reconstruct (&mctx.input, match_first, eflags);
+      if (BE (err != REG_NOERROR, 0))
+       goto free_return;
+
+#ifdef RE_ENABLE_I18N
+     /* Don't consider this char as a possible match start if it part,
+       yet isn't the head, of a multibyte character.  */
+      if (!sb && !re_string_first_byte (&mctx.input, 0))
+       continue;
+#endif
+
+      /* It seems to be appropriate one, then use the matcher.  */
+      /* We assume that the matching starts from 0.  */
+      mctx.state_log_top = mctx.nbkref_ents = mctx.max_mb_elem_len = 0;
+      match_last = check_matching (&mctx, fl_longest_match,
+                                  start <= last_start ? &match_first : NULL);
+      if (match_last != REG_MISSING)
+       {
+         if (BE (match_last == REG_ERROR, 0))
+           {
+             err = REG_ESPACE;
+             goto free_return;
+           }
+         else
+           {
+             mctx.match_last = match_last;
+             if ((!preg->no_sub && nmatch > 1) || dfa->nbackref)
+               {
+                 re_dfastate_t *pstate = mctx.state_log[match_last];
+                 mctx.last_node = check_halt_state_context (&mctx, pstate,
+                                                            match_last);
+               }
+             if ((!preg->no_sub && nmatch > 1 && dfa->has_plural_match)
+                 || dfa->nbackref)
+               {
+                 err = prune_impossible_nodes (&mctx);
+                 if (err == REG_NOERROR)
+                   break;
+                 if (BE (err != REG_NOMATCH, 0))
+                   goto free_return;
+                 match_last = REG_MISSING;
+               }
+             else
+               break; /* We found a match.  */
+           }
+       }
+
+      match_ctx_clean (&mctx);
+    }
+
+#ifdef DEBUG
+  assert (match_last != REG_MISSING);
+  assert (err == REG_NOERROR);
+#endif
+
+  /* Set pmatch[] if we need.  */
+  if (nmatch > 0)
+    {
+      Idx reg_idx;
+
+      /* Initialize registers.  */
+      for (reg_idx = 1; reg_idx < nmatch; ++reg_idx)
+       pmatch[reg_idx].rm_so = pmatch[reg_idx].rm_eo = -1;
+
+      /* Set the points where matching start/end.  */
+      pmatch[0].rm_so = 0;
+      pmatch[0].rm_eo = mctx.match_last;
+      /* FIXME: This function should fail if mctx.match_last exceeds
+        the maximum possible regoff_t value.  We need a new error
+        code REG_OVERFLOW.  */
+
+      if (!preg->no_sub && nmatch > 1)
+       {
+         err = set_regs (preg, &mctx, nmatch, pmatch,
+                         dfa->has_plural_match && dfa->nbackref > 0);
+         if (BE (err != REG_NOERROR, 0))
+           goto free_return;
+       }
+
+      /* At last, add the offset to the each registers, since we slided
+        the buffers so that we could assume that the matching starts
+        from 0.  */
+      for (reg_idx = 0; reg_idx < nmatch; ++reg_idx)
+       if (pmatch[reg_idx].rm_so != -1)
+         {
+#ifdef RE_ENABLE_I18N
+           if (BE (mctx.input.offsets_needed != 0, 0))
+             {
+               pmatch[reg_idx].rm_so =
+                 (pmatch[reg_idx].rm_so == mctx.input.valid_len
+                  ? mctx.input.valid_raw_len
+                  : mctx.input.offsets[pmatch[reg_idx].rm_so]);
+               pmatch[reg_idx].rm_eo =
+                 (pmatch[reg_idx].rm_eo == mctx.input.valid_len
+                  ? mctx.input.valid_raw_len
+                  : mctx.input.offsets[pmatch[reg_idx].rm_eo]);
+             }
+#else
+           assert (mctx.input.offsets_needed == 0);
+#endif
+           pmatch[reg_idx].rm_so += match_first;
+           pmatch[reg_idx].rm_eo += match_first;
+         }
+      for (reg_idx = 0; reg_idx < extra_nmatch; ++reg_idx)
+       {
+         pmatch[nmatch + reg_idx].rm_so = -1;
+         pmatch[nmatch + reg_idx].rm_eo = -1;
+       }
+
+      if (dfa->subexp_map)
+       for (reg_idx = 0; reg_idx + 1 < nmatch; reg_idx++)
+         if (dfa->subexp_map[reg_idx] != reg_idx)
+           {
+             pmatch[reg_idx + 1].rm_so
+               = pmatch[dfa->subexp_map[reg_idx] + 1].rm_so;
+             pmatch[reg_idx + 1].rm_eo
+               = pmatch[dfa->subexp_map[reg_idx] + 1].rm_eo;
+           }
+    }
+
+ free_return:
+  re_free (mctx.state_log);
+  if (dfa->nbackref)
+    match_ctx_free (&mctx);
+  re_string_destruct (&mctx.input);
+  return err;
+}
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+prune_impossible_nodes (re_match_context_t *mctx)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  Idx halt_node, match_last;
+  reg_errcode_t ret;
+  re_dfastate_t **sifted_states;
+  re_dfastate_t **lim_states = NULL;
+  re_sift_context_t sctx;
+#ifdef DEBUG
+  assert (mctx->state_log != NULL);
+#endif
+  match_last = mctx->match_last;
+  halt_node = mctx->last_node;
+
+  /* Avoid overflow.  */
+  if (BE (SIZE_MAX / sizeof (re_dfastate_t *) <= match_last, 0))
+    return REG_ESPACE;
+
+  sifted_states = re_malloc (re_dfastate_t *, match_last + 1);
+  if (BE (sifted_states == NULL, 0))
+    {
+      ret = REG_ESPACE;
+      goto free_return;
+    }
+  if (dfa->nbackref)
+    {
+      lim_states = re_malloc (re_dfastate_t *, match_last + 1);
+      if (BE (lim_states == NULL, 0))
+       {
+         ret = REG_ESPACE;
+         goto free_return;
+       }
+      while (1)
+       {
+         memset (lim_states, '\0',
+                 sizeof (re_dfastate_t *) * (match_last + 1));
+         sift_ctx_init (&sctx, sifted_states, lim_states, halt_node,
+                        match_last);
+         ret = sift_states_backward (mctx, &sctx);
+         re_node_set_free (&sctx.limits);
+         if (BE (ret != REG_NOERROR, 0))
+             goto free_return;
+         if (sifted_states[0] != NULL || lim_states[0] != NULL)
+           break;
+         do
+           {
+             --match_last;
+             if (! REG_VALID_INDEX (match_last))
+               {
+                 ret = REG_NOMATCH;
+                 goto free_return;
+               }
+           } while (mctx->state_log[match_last] == NULL
+                    || !mctx->state_log[match_last]->halt);
+         halt_node = check_halt_state_context (mctx,
+                                               mctx->state_log[match_last],
+                                               match_last);
+       }
+      ret = merge_state_array (dfa, sifted_states, lim_states,
+                              match_last + 1);
+      re_free (lim_states);
+      lim_states = NULL;
+      if (BE (ret != REG_NOERROR, 0))
+       goto free_return;
+    }
+  else
+    {
+      sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last);
+      ret = sift_states_backward (mctx, &sctx);
+      re_node_set_free (&sctx.limits);
+      if (BE (ret != REG_NOERROR, 0))
+       goto free_return;
+      if (sifted_states[0] == NULL)
+       {
+         ret = REG_NOMATCH;
+         goto free_return;
+       }
+    }
+  re_free (mctx->state_log);
+  mctx->state_log = sifted_states;
+  sifted_states = NULL;
+  mctx->last_node = halt_node;
+  mctx->match_last = match_last;
+  ret = REG_NOERROR;
+ free_return:
+  re_free (sifted_states);
+  re_free (lim_states);
+  return ret;
+}
+
+/* Acquire an initial state and return it.
+   We must select appropriate initial state depending on the context,
+   since initial states may have constraints like "\<", "^", etc..  */
+
+static inline re_dfastate_t *
+__attribute ((always_inline)) internal_function
+acquire_init_state_context (reg_errcode_t *err, const re_match_context_t *mctx,
+                           Idx idx)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  if (dfa->init_state->has_constraint)
+    {
+      unsigned int context;
+      context = re_string_context_at (&mctx->input, idx - 1, mctx->eflags);
+      if (IS_WORD_CONTEXT (context))
+       return dfa->init_state_word;
+      else if (IS_ORDINARY_CONTEXT (context))
+       return dfa->init_state;
+      else if (IS_BEGBUF_CONTEXT (context) && IS_NEWLINE_CONTEXT (context))
+       return dfa->init_state_begbuf;
+      else if (IS_NEWLINE_CONTEXT (context))
+       return dfa->init_state_nl;
+      else if (IS_BEGBUF_CONTEXT (context))
+       {
+         /* It is relatively rare case, then calculate on demand.  */
+         return re_acquire_state_context (err, dfa,
+                                          dfa->init_state->entrance_nodes,
+                                          context);
+       }
+      else
+       /* Must not happen?  */
+       return dfa->init_state;
+    }
+  else
+    return dfa->init_state;
+}
+
+/* Check whether the regular expression match input string INPUT or not,
+   and return the index where the matching end.  Return REG_MISSING if
+   there is no match, and return REG_ERROR in case of an error.
+   FL_LONGEST_MATCH means we want the POSIX longest matching.
+   If P_MATCH_FIRST is not NULL, and the match fails, it is set to the
+   next place where we may want to try matching.
+   Note that the matcher assume that the maching starts from the current
+   index of the buffer.  */
+
+static Idx
+internal_function __attribute_warn_unused_result__
+check_matching (re_match_context_t *mctx, bool fl_longest_match,
+               Idx *p_match_first)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  reg_errcode_t err;
+  Idx match = 0;
+  Idx match_last = REG_MISSING;
+  Idx cur_str_idx = re_string_cur_idx (&mctx->input);
+  re_dfastate_t *cur_state;
+  bool at_init_state = p_match_first != NULL;
+  Idx next_start_idx = cur_str_idx;
+
+  err = REG_NOERROR;
+  cur_state = acquire_init_state_context (&err, mctx, cur_str_idx);
+  /* An initial state must not be NULL (invalid).  */
+  if (BE (cur_state == NULL, 0))
+    {
+      assert (err == REG_ESPACE);
+      return REG_ERROR;
+    }
+
+  if (mctx->state_log != NULL)
+    {
+      mctx->state_log[cur_str_idx] = cur_state;
+
+      /* Check OP_OPEN_SUBEXP in the initial state in case that we use them
+        later.  E.g. Processing back references.  */
+      if (BE (dfa->nbackref, 0))
+       {
+         at_init_state = false;
+         err = check_subexp_matching_top (mctx, &cur_state->nodes, 0);
+         if (BE (err != REG_NOERROR, 0))
+           return err;
+
+         if (cur_state->has_backref)
+           {
+             err = transit_state_bkref (mctx, &cur_state->nodes);
+             if (BE (err != REG_NOERROR, 0))
+               return err;
+           }
+       }
+    }
+
+  /* If the RE accepts NULL string.  */
+  if (BE (cur_state->halt, 0))
+    {
+      if (!cur_state->has_constraint
+         || check_halt_state_context (mctx, cur_state, cur_str_idx))
+       {
+         if (!fl_longest_match)
+           return cur_str_idx;
+         else
+           {
+             match_last = cur_str_idx;
+             match = 1;
+           }
+       }
+    }
+
+  while (!re_string_eoi (&mctx->input))
+    {
+      re_dfastate_t *old_state = cur_state;
+      Idx next_char_idx = re_string_cur_idx (&mctx->input) + 1;
+
+      if (BE (next_char_idx >= mctx->input.bufs_len, 0)
+         || (BE (next_char_idx >= mctx->input.valid_len, 0)
+             && mctx->input.valid_len < mctx->input.len))
+       {
+         err = extend_buffers (mctx);
+         if (BE (err != REG_NOERROR, 0))
+           {
+             assert (err == REG_ESPACE);
+             return REG_ERROR;
+           }
+       }
+
+      cur_state = transit_state (&err, mctx, cur_state);
+      if (mctx->state_log != NULL)
+       cur_state = merge_state_with_log (&err, mctx, cur_state);
+
+      if (cur_state == NULL)
+       {
+         /* Reached the invalid state or an error.  Try to recover a valid
+            state using the state log, if available and if we have not
+            already found a valid (even if not the longest) match.  */
+         if (BE (err != REG_NOERROR, 0))
+           return REG_ERROR;
+
+         if (mctx->state_log == NULL
+             || (match && !fl_longest_match)
+             || (cur_state = find_recover_state (&err, mctx)) == NULL)
+           break;
+       }
+
+      if (BE (at_init_state, 0))
+       {
+         if (old_state == cur_state)
+           next_start_idx = next_char_idx;
+         else
+           at_init_state = false;
+       }
+
+      if (cur_state->halt)
+       {
+         /* Reached a halt state.
+            Check the halt state can satisfy the current context.  */
+         if (!cur_state->has_constraint
+             || check_halt_state_context (mctx, cur_state,
+                                          re_string_cur_idx (&mctx->input)))
+           {
+             /* We found an appropriate halt state.  */
+             match_last = re_string_cur_idx (&mctx->input);
+             match = 1;
+
+             /* We found a match, do not modify match_first below.  */
+             p_match_first = NULL;
+             if (!fl_longest_match)
+               break;
+           }
+       }
+    }
+
+  if (p_match_first)
+    *p_match_first += next_start_idx;
+
+  return match_last;
+}
+
+/* Check NODE match the current context.  */
+
+static bool
+internal_function
+check_halt_node_context (const re_dfa_t *dfa, Idx node, unsigned int context)
+{
+  re_token_type_t type = dfa->nodes[node].type;
+  unsigned int constraint = dfa->nodes[node].constraint;
+  if (type != END_OF_RE)
+    return false;
+  if (!constraint)
+    return true;
+  if (NOT_SATISFY_NEXT_CONSTRAINT (constraint, context))
+    return false;
+  return true;
+}
+
+/* Check the halt state STATE match the current context.
+   Return 0 if not match, if the node, STATE has, is a halt node and
+   match the context, return the node.  */
+
+static Idx
+internal_function
+check_halt_state_context (const re_match_context_t *mctx,
+                         const re_dfastate_t *state, Idx idx)
+{
+  Idx i;
+  unsigned int context;
+#ifdef DEBUG
+  assert (state->halt);
+#endif
+  context = re_string_context_at (&mctx->input, idx, mctx->eflags);
+  for (i = 0; i < state->nodes.nelem; ++i)
+    if (check_halt_node_context (mctx->dfa, state->nodes.elems[i], context))
+      return state->nodes.elems[i];
+  return 0;
+}
+
+/* Compute the next node to which "NFA" transit from NODE("NFA" is a NFA
+   corresponding to the DFA).
+   Return the destination node, and update EPS_VIA_NODES;
+   return REG_MISSING in case of errors.  */
+
+static Idx
+internal_function
+proceed_next_node (const re_match_context_t *mctx, Idx nregs, regmatch_t *regs,
+                  Idx *pidx, Idx node, re_node_set *eps_via_nodes,
+                  struct re_fail_stack_t *fs)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  Idx i;
+  bool ok;
+  if (IS_EPSILON_NODE (dfa->nodes[node].type))
+    {
+      re_node_set *cur_nodes = &mctx->state_log[*pidx]->nodes;
+      re_node_set *edests = &dfa->edests[node];
+      Idx dest_node;
+      ok = re_node_set_insert (eps_via_nodes, node);
+      if (BE (! ok, 0))
+       return REG_ERROR;
+      /* Pick up a valid destination, or return REG_MISSING if none
+        is found.  */
+      for (dest_node = REG_MISSING, i = 0; i < edests->nelem; ++i)
+       {
+         Idx candidate = edests->elems[i];
+         if (!re_node_set_contains (cur_nodes, candidate))
+           continue;
+          if (dest_node == REG_MISSING)
+           dest_node = candidate;
+
+         else
+           {
+             /* In order to avoid infinite loop like "(a*)*", return the second
+                epsilon-transition if the first was already considered.  */
+             if (re_node_set_contains (eps_via_nodes, dest_node))
+               return candidate;
+
+             /* Otherwise, push the second epsilon-transition on the fail stack.  */
+             else if (fs != NULL
+                      && push_fail_stack (fs, *pidx, candidate, nregs, regs,
+                                          eps_via_nodes))
+               return REG_ERROR;
+
+             /* We know we are going to exit.  */
+             break;
+           }
+       }
+      return dest_node;
+    }
+  else
+    {
+      Idx naccepted = 0;
+      re_token_type_t type = dfa->nodes[node].type;
+
+#ifdef RE_ENABLE_I18N
+      if (dfa->nodes[node].accept_mb)
+       naccepted = check_node_accept_bytes (dfa, node, &mctx->input, *pidx);
+      else
+#endif /* RE_ENABLE_I18N */
+      if (type == OP_BACK_REF)
+       {
+         Idx subexp_idx = dfa->nodes[node].opr.idx + 1;
+         naccepted = regs[subexp_idx].rm_eo - regs[subexp_idx].rm_so;
+         if (fs != NULL)
+           {
+             if (regs[subexp_idx].rm_so == -1 || regs[subexp_idx].rm_eo == -1)
+               return REG_MISSING;
+             else if (naccepted)
+               {
+                 char *buf = (char *) re_string_get_buffer (&mctx->input);
+                 if (memcmp (buf + regs[subexp_idx].rm_so, buf + *pidx,
+                             naccepted) != 0)
+                   return REG_MISSING;
+               }
+           }
+
+         if (naccepted == 0)
+           {
+             Idx dest_node;
+             ok = re_node_set_insert (eps_via_nodes, node);
+             if (BE (! ok, 0))
+               return REG_ERROR;
+             dest_node = dfa->edests[node].elems[0];
+             if (re_node_set_contains (&mctx->state_log[*pidx]->nodes,
+                                       dest_node))
+               return dest_node;
+           }
+       }
+
+      if (naccepted != 0
+         || check_node_accept (mctx, dfa->nodes + node, *pidx))
+       {
+         Idx dest_node = dfa->nexts[node];
+         *pidx = (naccepted == 0) ? *pidx + 1 : *pidx + naccepted;
+         if (fs && (*pidx > mctx->match_last || mctx->state_log[*pidx] == NULL
+                    || !re_node_set_contains (&mctx->state_log[*pidx]->nodes,
+                                              dest_node)))
+           return REG_MISSING;
+         re_node_set_empty (eps_via_nodes);
+         return dest_node;
+       }
+    }
+  return REG_MISSING;
+}
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node,
+                Idx nregs, regmatch_t *regs, re_node_set *eps_via_nodes)
+{
+  reg_errcode_t err;
+  Idx num = fs->num++;
+  if (fs->num == fs->alloc)
+    {
+      struct re_fail_stack_ent_t *new_array;
+      new_array = realloc (fs->stack, (sizeof (struct re_fail_stack_ent_t)
+                                      * fs->alloc * 2));
+      if (new_array == NULL)
+       return REG_ESPACE;
+      fs->alloc *= 2;
+      fs->stack = new_array;
+    }
+  fs->stack[num].idx = str_idx;
+  fs->stack[num].node = dest_node;
+  fs->stack[num].regs = re_malloc (regmatch_t, nregs);
+  if (fs->stack[num].regs == NULL)
+    return REG_ESPACE;
+  memcpy (fs->stack[num].regs, regs, sizeof (regmatch_t) * nregs);
+  err = re_node_set_init_copy (&fs->stack[num].eps_via_nodes, eps_via_nodes);
+  return err;
+}
+
+static Idx
+internal_function
+pop_fail_stack (struct re_fail_stack_t *fs, Idx *pidx, Idx nregs,
+               regmatch_t *regs, re_node_set *eps_via_nodes)
+{
+  Idx num = --fs->num;
+  assert (REG_VALID_INDEX (num));
+  *pidx = fs->stack[num].idx;
+  memcpy (regs, fs->stack[num].regs, sizeof (regmatch_t) * nregs);
+  re_node_set_free (eps_via_nodes);
+  re_free (fs->stack[num].regs);
+  *eps_via_nodes = fs->stack[num].eps_via_nodes;
+  return fs->stack[num].node;
+}
+
+/* Set the positions where the subexpressions are starts/ends to registers
+   PMATCH.
+   Note: We assume that pmatch[0] is already set, and
+   pmatch[i].rm_so == pmatch[i].rm_eo == -1 for 0 < i < nmatch.  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+set_regs (const regex_t *preg, const re_match_context_t *mctx, size_t nmatch,
+         regmatch_t *pmatch, bool fl_backtrack)
+{
+  const re_dfa_t *dfa = (const re_dfa_t *) preg->buffer;
+  Idx idx, cur_node;
+  re_node_set eps_via_nodes;
+  struct re_fail_stack_t *fs;
+  struct re_fail_stack_t fs_body = { 0, 2, NULL };
+  regmatch_t *prev_idx_match;
+  bool prev_idx_match_malloced = false;
+
+#ifdef DEBUG
+  assert (nmatch > 1);
+  assert (mctx->state_log != NULL);
+#endif
+  if (fl_backtrack)
+    {
+      fs = &fs_body;
+      fs->stack = re_malloc (struct re_fail_stack_ent_t, fs->alloc);
+      if (fs->stack == NULL)
+       return REG_ESPACE;
+    }
+  else
+    fs = NULL;
+
+  cur_node = dfa->init_node;
+  re_node_set_init_empty (&eps_via_nodes);
+
+  if (__libc_use_alloca (nmatch * sizeof (regmatch_t)))
+    prev_idx_match = (regmatch_t *) alloca (nmatch * sizeof (regmatch_t));
+  else
+    {
+      prev_idx_match = re_malloc (regmatch_t, nmatch);
+      if (prev_idx_match == NULL)
+       {
+         free_fail_stack_return (fs);
+         return REG_ESPACE;
+       }
+      prev_idx_match_malloced = true;
+    }
+  memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch);
+
+  for (idx = pmatch[0].rm_so; idx <= pmatch[0].rm_eo ;)
+    {
+      update_regs (dfa, pmatch, prev_idx_match, cur_node, idx, nmatch);
+
+      if (idx == pmatch[0].rm_eo && cur_node == mctx->last_node)
+       {
+         Idx reg_idx;
+         if (fs)
+           {
+             for (reg_idx = 0; reg_idx < nmatch; ++reg_idx)
+               if (pmatch[reg_idx].rm_so > -1 && pmatch[reg_idx].rm_eo == -1)
+                 break;
+             if (reg_idx == nmatch)
+               {
+                 re_node_set_free (&eps_via_nodes);
+                 if (prev_idx_match_malloced)
+                   re_free (prev_idx_match);
+                 return free_fail_stack_return (fs);
+               }
+             cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch,
+                                        &eps_via_nodes);
+           }
+         else
+           {
+             re_node_set_free (&eps_via_nodes);
+             if (prev_idx_match_malloced)
+               re_free (prev_idx_match);
+             return REG_NOERROR;
+           }
+       }
+
+      /* Proceed to next node.  */
+      cur_node = proceed_next_node (mctx, nmatch, pmatch, &idx, cur_node,
+                                   &eps_via_nodes, fs);
+
+      if (BE (! REG_VALID_INDEX (cur_node), 0))
+       {
+         if (BE (cur_node == REG_ERROR, 0))
+           {
+             re_node_set_free (&eps_via_nodes);
+             if (prev_idx_match_malloced)
+               re_free (prev_idx_match);
+             free_fail_stack_return (fs);
+             return REG_ESPACE;
+           }
+         if (fs)
+           cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch,
+                                      &eps_via_nodes);
+         else
+           {
+             re_node_set_free (&eps_via_nodes);
+             if (prev_idx_match_malloced)
+               re_free (prev_idx_match);
+             return REG_NOMATCH;
+           }
+       }
+    }
+  re_node_set_free (&eps_via_nodes);
+  if (prev_idx_match_malloced)
+    re_free (prev_idx_match);
+  return free_fail_stack_return (fs);
+}
+
+static reg_errcode_t
+internal_function
+free_fail_stack_return (struct re_fail_stack_t *fs)
+{
+  if (fs)
+    {
+      Idx fs_idx;
+      for (fs_idx = 0; fs_idx < fs->num; ++fs_idx)
+       {
+         re_node_set_free (&fs->stack[fs_idx].eps_via_nodes);
+         re_free (fs->stack[fs_idx].regs);
+       }
+      re_free (fs->stack);
+    }
+  return REG_NOERROR;
+}
+
+static void
+internal_function
+update_regs (const re_dfa_t *dfa, regmatch_t *pmatch,
+            regmatch_t *prev_idx_match, Idx cur_node, Idx cur_idx, Idx nmatch)
+{
+  int type = dfa->nodes[cur_node].type;
+  if (type == OP_OPEN_SUBEXP)
+    {
+      Idx reg_num = dfa->nodes[cur_node].opr.idx + 1;
+
+      /* We are at the first node of this sub expression.  */
+      if (reg_num < nmatch)
+       {
+         pmatch[reg_num].rm_so = cur_idx;
+         pmatch[reg_num].rm_eo = -1;
+       }
+    }
+  else if (type == OP_CLOSE_SUBEXP)
+    {
+      Idx reg_num = dfa->nodes[cur_node].opr.idx + 1;
+      if (reg_num < nmatch)
+       {
+         /* We are at the last node of this sub expression.  */
+         if (pmatch[reg_num].rm_so < cur_idx)
+           {
+             pmatch[reg_num].rm_eo = cur_idx;
+             /* This is a non-empty match or we are not inside an optional
+                subexpression.  Accept this right away.  */
+             memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch);
+           }
+         else
+           {
+             if (dfa->nodes[cur_node].opt_subexp
+                 && prev_idx_match[reg_num].rm_so != -1)
+               /* We transited through an empty match for an optional
+                  subexpression, like (a?)*, and this is not the subexp's
+                  first match.  Copy back the old content of the registers
+                  so that matches of an inner subexpression are undone as
+                  well, like in ((a?))*.  */
+               memcpy (pmatch, prev_idx_match, sizeof (regmatch_t) * nmatch);
+             else
+               /* We completed a subexpression, but it may be part of
+                  an optional one, so do not update PREV_IDX_MATCH.  */
+               pmatch[reg_num].rm_eo = cur_idx;
+           }
+       }
+    }
+}
+
+/* This function checks the STATE_LOG from the SCTX->last_str_idx to 0
+   and sift the nodes in each states according to the following rules.
+   Updated state_log will be wrote to STATE_LOG.
+
+   Rules: We throw away the Node `a' in the STATE_LOG[STR_IDX] if...
+     1. When STR_IDX == MATCH_LAST(the last index in the state_log):
+       If `a' isn't the LAST_NODE and `a' can't epsilon transit to
+       the LAST_NODE, we throw away the node `a'.
+     2. When 0 <= STR_IDX < MATCH_LAST and `a' accepts
+       string `s' and transit to `b':
+       i. If 'b' isn't in the STATE_LOG[STR_IDX+strlen('s')], we throw
+          away the node `a'.
+       ii. If 'b' is in the STATE_LOG[STR_IDX+strlen('s')] but 'b' is
+           thrown away, we throw away the node `a'.
+     3. When 0 <= STR_IDX < MATCH_LAST and 'a' epsilon transit to 'b':
+       i. If 'b' isn't in the STATE_LOG[STR_IDX], we throw away the
+          node `a'.
+       ii. If 'b' is in the STATE_LOG[STR_IDX] but 'b' is thrown away,
+           we throw away the node `a'.  */
+
+#define STATE_NODE_CONTAINS(state,node) \
+  ((state) != NULL && re_node_set_contains (&(state)->nodes, node))
+
+static reg_errcode_t
+internal_function
+sift_states_backward (const re_match_context_t *mctx, re_sift_context_t *sctx)
+{
+  reg_errcode_t err;
+  int null_cnt = 0;
+  Idx str_idx = sctx->last_str_idx;
+  re_node_set cur_dest;
+
+#ifdef DEBUG
+  assert (mctx->state_log != NULL && mctx->state_log[str_idx] != NULL);
+#endif
+
+  /* Build sifted state_log[str_idx].  It has the nodes which can epsilon
+     transit to the last_node and the last_node itself.  */
+  err = re_node_set_init_1 (&cur_dest, sctx->last_node);
+  if (BE (err != REG_NOERROR, 0))
+    return err;
+  err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest);
+  if (BE (err != REG_NOERROR, 0))
+    goto free_return;
+
+  /* Then check each states in the state_log.  */
+  while (str_idx > 0)
+    {
+      /* Update counters.  */
+      null_cnt = (sctx->sifted_states[str_idx] == NULL) ? null_cnt + 1 : 0;
+      if (null_cnt > mctx->max_mb_elem_len)
+       {
+         memset (sctx->sifted_states, '\0',
+                 sizeof (re_dfastate_t *) * str_idx);
+         re_node_set_free (&cur_dest);
+         return REG_NOERROR;
+       }
+      re_node_set_empty (&cur_dest);
+      --str_idx;
+
+      if (mctx->state_log[str_idx])
+       {
+         err = build_sifted_states (mctx, sctx, str_idx, &cur_dest);
+         if (BE (err != REG_NOERROR, 0))
+           goto free_return;
+       }
+
+      /* Add all the nodes which satisfy the following conditions:
+        - It can epsilon transit to a node in CUR_DEST.
+        - It is in CUR_SRC.
+        And update state_log.  */
+      err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest);
+      if (BE (err != REG_NOERROR, 0))
+       goto free_return;
+    }
+  err = REG_NOERROR;
+ free_return:
+  re_node_set_free (&cur_dest);
+  return err;
+}
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+build_sifted_states (const re_match_context_t *mctx, re_sift_context_t *sctx,
+                    Idx str_idx, re_node_set *cur_dest)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  const re_node_set *cur_src = &mctx->state_log[str_idx]->non_eps_nodes;
+  Idx i;
+
+  /* Then build the next sifted state.
+     We build the next sifted state on `cur_dest', and update
+     `sifted_states[str_idx]' with `cur_dest'.
+     Note:
+     `cur_dest' is the sifted state from `state_log[str_idx + 1]'.
+     `cur_src' points the node_set of the old `state_log[str_idx]'
+     (with the epsilon nodes pre-filtered out).  */
+  for (i = 0; i < cur_src->nelem; i++)
+    {
+      Idx prev_node = cur_src->elems[i];
+      int naccepted = 0;
+      bool ok;
+
+#ifdef DEBUG
+      re_token_type_t type = dfa->nodes[prev_node].type;
+      assert (!IS_EPSILON_NODE (type));
+#endif
+#ifdef RE_ENABLE_I18N
+      /* If the node may accept `multi byte'.  */
+      if (dfa->nodes[prev_node].accept_mb)
+       naccepted = sift_states_iter_mb (mctx, sctx, prev_node,
+                                        str_idx, sctx->last_str_idx);
+#endif /* RE_ENABLE_I18N */
+
+      /* We don't check backreferences here.
+        See update_cur_sifted_state().  */
+      if (!naccepted
+         && check_node_accept (mctx, dfa->nodes + prev_node, str_idx)
+         && STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + 1],
+                                 dfa->nexts[prev_node]))
+       naccepted = 1;
+
+      if (naccepted == 0)
+       continue;
+
+      if (sctx->limits.nelem)
+       {
+         Idx to_idx = str_idx + naccepted;
+         if (check_dst_limits (mctx, &sctx->limits,
+                               dfa->nexts[prev_node], to_idx,
+                               prev_node, str_idx))
+           continue;
+       }
+      ok = re_node_set_insert (cur_dest, prev_node);
+      if (BE (! ok, 0))
+       return REG_ESPACE;
+    }
+
+  return REG_NOERROR;
+}
+
+/* Helper functions.  */
+
+static reg_errcode_t
+internal_function
+clean_state_log_if_needed (re_match_context_t *mctx, Idx next_state_log_idx)
+{
+  Idx top = mctx->state_log_top;
+
+  if (next_state_log_idx >= mctx->input.bufs_len
+      || (next_state_log_idx >= mctx->input.valid_len
+         && mctx->input.valid_len < mctx->input.len))
+    {
+      reg_errcode_t err;
+      err = extend_buffers (mctx);
+      if (BE (err != REG_NOERROR, 0))
+       return err;
+    }
+
+  if (top < next_state_log_idx)
+    {
+      memset (mctx->state_log + top + 1, '\0',
+             sizeof (re_dfastate_t *) * (next_state_log_idx - top));
+      mctx->state_log_top = next_state_log_idx;
+    }
+  return REG_NOERROR;
+}
+
+static reg_errcode_t
+internal_function
+merge_state_array (const re_dfa_t *dfa, re_dfastate_t **dst,
+                  re_dfastate_t **src, Idx num)
+{
+  Idx st_idx;
+  reg_errcode_t err;
+  for (st_idx = 0; st_idx < num; ++st_idx)
+    {
+      if (dst[st_idx] == NULL)
+       dst[st_idx] = src[st_idx];
+      else if (src[st_idx] != NULL)
+       {
+         re_node_set merged_set;
+         err = re_node_set_init_union (&merged_set, &dst[st_idx]->nodes,
+                                       &src[st_idx]->nodes);
+         if (BE (err != REG_NOERROR, 0))
+           return err;
+         dst[st_idx] = re_acquire_state (&err, dfa, &merged_set);
+         re_node_set_free (&merged_set);
+         if (BE (err != REG_NOERROR, 0))
+           return err;
+       }
+    }
+  return REG_NOERROR;
+}
+
+static reg_errcode_t
+internal_function
+update_cur_sifted_state (const re_match_context_t *mctx,
+                        re_sift_context_t *sctx, Idx str_idx,
+                        re_node_set *dest_nodes)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  reg_errcode_t err = REG_NOERROR;
+  const re_node_set *candidates;
+  candidates = ((mctx->state_log[str_idx] == NULL) ? NULL
+               : &mctx->state_log[str_idx]->nodes);
+
+  if (dest_nodes->nelem == 0)
+    sctx->sifted_states[str_idx] = NULL;
+  else
+    {
+      if (candidates)
+       {
+         /* At first, add the nodes which can epsilon transit to a node in
+            DEST_NODE.  */
+         err = add_epsilon_src_nodes (dfa, dest_nodes, candidates);
+         if (BE (err != REG_NOERROR, 0))
+           return err;
+
+         /* Then, check the limitations in the current sift_context.  */
+         if (sctx->limits.nelem)
+           {
+             err = check_subexp_limits (dfa, dest_nodes, candidates, &sctx->limits,
+                                        mctx->bkref_ents, str_idx);
+             if (BE (err != REG_NOERROR, 0))
+               return err;
+           }
+       }
+
+      sctx->sifted_states[str_idx] = re_acquire_state (&err, dfa, dest_nodes);
+      if (BE (err != REG_NOERROR, 0))
+       return err;
+    }
+
+  if (candidates && mctx->state_log[str_idx]->has_backref)
+    {
+      err = sift_states_bkref (mctx, sctx, str_idx, candidates);
+      if (BE (err != REG_NOERROR, 0))
+       return err;
+    }
+  return REG_NOERROR;
+}
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+add_epsilon_src_nodes (const re_dfa_t *dfa, re_node_set *dest_nodes,
+                      const re_node_set *candidates)
+{
+  reg_errcode_t err = REG_NOERROR;
+  Idx i;
+
+  re_dfastate_t *state = re_acquire_state (&err, dfa, dest_nodes);
+  if (BE (err != REG_NOERROR, 0))
+    return err;
+
+  if (!state->inveclosure.alloc)
+    {
+      err = re_node_set_alloc (&state->inveclosure, dest_nodes->nelem);
+      if (BE (err != REG_NOERROR, 0))
+       return REG_ESPACE;
+      for (i = 0; i < dest_nodes->nelem; i++)
+       {
+         err = re_node_set_merge (&state->inveclosure,
+                                  dfa->inveclosures + dest_nodes->elems[i]);
+         if (BE (err != REG_NOERROR, 0))
+           return REG_ESPACE;
+       }
+    }
+  return re_node_set_add_intersect (dest_nodes, candidates,
+                                   &state->inveclosure);
+}
+
+static reg_errcode_t
+internal_function
+sub_epsilon_src_nodes (const re_dfa_t *dfa, Idx node, re_node_set *dest_nodes,
+                      const re_node_set *candidates)
+{
+    Idx ecl_idx;
+    reg_errcode_t err;
+    re_node_set *inv_eclosure = dfa->inveclosures + node;
+    re_node_set except_nodes;
+    re_node_set_init_empty (&except_nodes);
+    for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx)
+      {
+       Idx cur_node = inv_eclosure->elems[ecl_idx];
+       if (cur_node == node)
+         continue;
+       if (IS_EPSILON_NODE (dfa->nodes[cur_node].type))
+         {
+           Idx edst1 = dfa->edests[cur_node].elems[0];
+           Idx edst2 = ((dfa->edests[cur_node].nelem > 1)
+                        ? dfa->edests[cur_node].elems[1] : REG_MISSING);
+           if ((!re_node_set_contains (inv_eclosure, edst1)
+                && re_node_set_contains (dest_nodes, edst1))
+               || (REG_VALID_NONZERO_INDEX (edst2)
+                   && !re_node_set_contains (inv_eclosure, edst2)
+                   && re_node_set_contains (dest_nodes, edst2)))
+             {
+               err = re_node_set_add_intersect (&except_nodes, candidates,
+                                                dfa->inveclosures + cur_node);
+               if (BE (err != REG_NOERROR, 0))
+                 {
+                   re_node_set_free (&except_nodes);
+                   return err;
+                 }
+             }
+         }
+      }
+    for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx)
+      {
+       Idx cur_node = inv_eclosure->elems[ecl_idx];
+       if (!re_node_set_contains (&except_nodes, cur_node))
+         {
+           Idx idx = re_node_set_contains (dest_nodes, cur_node) - 1;
+           re_node_set_remove_at (dest_nodes, idx);
+         }
+      }
+    re_node_set_free (&except_nodes);
+    return REG_NOERROR;
+}
+
+static bool
+internal_function
+check_dst_limits (const re_match_context_t *mctx, const re_node_set *limits,
+                 Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  Idx lim_idx, src_pos, dst_pos;
+
+  Idx dst_bkref_idx = search_cur_bkref_entry (mctx, dst_idx);
+  Idx src_bkref_idx = search_cur_bkref_entry (mctx, src_idx);
+  for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx)
+    {
+      Idx subexp_idx;
+      struct re_backref_cache_entry *ent;
+      ent = mctx->bkref_ents + limits->elems[lim_idx];
+      subexp_idx = dfa->nodes[ent->node].opr.idx;
+
+      dst_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx],
+                                          subexp_idx, dst_node, dst_idx,
+                                          dst_bkref_idx);
+      src_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx],
+                                          subexp_idx, src_node, src_idx,
+                                          src_bkref_idx);
+
+      /* In case of:
+        <src> <dst> ( <subexp> )
+        ( <subexp> ) <src> <dst>
+        ( <subexp1> <src> <subexp2> <dst> <subexp3> )  */
+      if (src_pos == dst_pos)
+       continue; /* This is unrelated limitation.  */
+      else
+       return true;
+    }
+  return false;
+}
+
+static int
+internal_function
+check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, int boundaries,
+                            Idx subexp_idx, Idx from_node, Idx bkref_idx)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  const re_node_set *eclosures = dfa->eclosures + from_node;
+  Idx node_idx;
+
+  /* Else, we are on the boundary: examine the nodes on the epsilon
+     closure.  */
+  for (node_idx = 0; node_idx < eclosures->nelem; ++node_idx)
+    {
+      Idx node = eclosures->elems[node_idx];
+      switch (dfa->nodes[node].type)
+       {
+       case OP_BACK_REF:
+         if (bkref_idx != REG_MISSING)
+           {
+             struct re_backref_cache_entry *ent = mctx->bkref_ents + bkref_idx;
+             do
+               {
+                 Idx dst;
+                 int cpos;
+
+                 if (ent->node != node)
+                   continue;
+
+                 if (subexp_idx < BITSET_WORD_BITS
+                     && !(ent->eps_reachable_subexps_map
+                          & ((bitset_word_t) 1 << subexp_idx)))
+                   continue;
+
+                 /* Recurse trying to reach the OP_OPEN_SUBEXP and
+                    OP_CLOSE_SUBEXP cases below.  But, if the
+                    destination node is the same node as the source
+                    node, don't recurse because it would cause an
+                    infinite loop: a regex that exhibits this behavior
+                    is ()\1*\1*  */
+                 dst = dfa->edests[node].elems[0];
+                 if (dst == from_node)
+                   {
+                     if (boundaries & 1)
+                       return -1;
+                     else /* if (boundaries & 2) */
+                       return 0;
+                   }
+
+                 cpos =
+                   check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx,
+                                                dst, bkref_idx);
+                 if (cpos == -1 /* && (boundaries & 1) */)
+                   return -1;
+                 if (cpos == 0 && (boundaries & 2))
+                   return 0;
+
+                 if (subexp_idx < BITSET_WORD_BITS)
+                   ent->eps_reachable_subexps_map
+                     &= ~((bitset_word_t) 1 << subexp_idx);
+               }
+             while (ent++->more);
+           }
+         break;
+
+       case OP_OPEN_SUBEXP:
+         if ((boundaries & 1) && subexp_idx == dfa->nodes[node].opr.idx)
+           return -1;
+         break;
+
+       case OP_CLOSE_SUBEXP:
+         if ((boundaries & 2) && subexp_idx == dfa->nodes[node].opr.idx)
+           return 0;
+         break;
+
+       default:
+           break;
+       }
+    }
+
+  return (boundaries & 2) ? 1 : 0;
+}
+
+static int
+internal_function
+check_dst_limits_calc_pos (const re_match_context_t *mctx, Idx limit,
+                          Idx subexp_idx, Idx from_node, Idx str_idx,
+                          Idx bkref_idx)
+{
+  struct re_backref_cache_entry *lim = mctx->bkref_ents + limit;
+  int boundaries;
+
+  /* If we are outside the range of the subexpression, return -1 or 1.  */
+  if (str_idx < lim->subexp_from)
+    return -1;
+
+  if (lim->subexp_to < str_idx)
+    return 1;
+
+  /* If we are within the subexpression, return 0.  */
+  boundaries = (str_idx == lim->subexp_from);
+  boundaries |= (str_idx == lim->subexp_to) << 1;
+  if (boundaries == 0)
+    return 0;
+
+  /* Else, examine epsilon closure.  */
+  return check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx,
+                                     from_node, bkref_idx);
+}
+
+/* Check the limitations of sub expressions LIMITS, and remove the nodes
+   which are against limitations from DEST_NODES. */
+
+static reg_errcode_t
+internal_function
+check_subexp_limits (const re_dfa_t *dfa, re_node_set *dest_nodes,
+                    const re_node_set *candidates, re_node_set *limits,
+                    struct re_backref_cache_entry *bkref_ents, Idx str_idx)
+{
+  reg_errcode_t err;
+  Idx node_idx, lim_idx;
+
+  for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx)
+    {
+      Idx subexp_idx;
+      struct re_backref_cache_entry *ent;
+      ent = bkref_ents + limits->elems[lim_idx];
+
+      if (str_idx <= ent->subexp_from || ent->str_idx < str_idx)
+       continue; /* This is unrelated limitation.  */
+
+      subexp_idx = dfa->nodes[ent->node].opr.idx;
+      if (ent->subexp_to == str_idx)
+       {
+         Idx ops_node = REG_MISSING;
+         Idx cls_node = REG_MISSING;
+         for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx)
+           {
+             Idx node = dest_nodes->elems[node_idx];
+             re_token_type_t type = dfa->nodes[node].type;
+             if (type == OP_OPEN_SUBEXP
+                 && subexp_idx == dfa->nodes[node].opr.idx)
+               ops_node = node;
+             else if (type == OP_CLOSE_SUBEXP
+                      && subexp_idx == dfa->nodes[node].opr.idx)
+               cls_node = node;
+           }
+
+         /* Check the limitation of the open subexpression.  */
+         /* Note that (ent->subexp_to = str_idx != ent->subexp_from).  */
+         if (REG_VALID_INDEX (ops_node))
+           {
+             err = sub_epsilon_src_nodes (dfa, ops_node, dest_nodes,
+                                          candidates);
+             if (BE (err != REG_NOERROR, 0))
+               return err;
+           }
+
+         /* Check the limitation of the close subexpression.  */
+         if (REG_VALID_INDEX (cls_node))
+           for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx)
+             {
+               Idx node = dest_nodes->elems[node_idx];
+               if (!re_node_set_contains (dfa->inveclosures + node,
+                                          cls_node)
+                   && !re_node_set_contains (dfa->eclosures + node,
+                                             cls_node))
+                 {
+                   /* It is against this limitation.
+                      Remove it form the current sifted state.  */
+                   err = sub_epsilon_src_nodes (dfa, node, dest_nodes,
+                                                candidates);
+                   if (BE (err != REG_NOERROR, 0))
+                     return err;
+                   --node_idx;
+                 }
+             }
+       }
+      else /* (ent->subexp_to != str_idx)  */
+       {
+         for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx)
+           {
+             Idx node = dest_nodes->elems[node_idx];
+             re_token_type_t type = dfa->nodes[node].type;
+             if (type == OP_CLOSE_SUBEXP || type == OP_OPEN_SUBEXP)
+               {
+                 if (subexp_idx != dfa->nodes[node].opr.idx)
+                   continue;
+                 /* It is against this limitation.
+                    Remove it form the current sifted state.  */
+                 err = sub_epsilon_src_nodes (dfa, node, dest_nodes,
+                                              candidates);
+                 if (BE (err != REG_NOERROR, 0))
+                   return err;
+               }
+           }
+       }
+    }
+  return REG_NOERROR;
+}
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+sift_states_bkref (const re_match_context_t *mctx, re_sift_context_t *sctx,
+                  Idx str_idx, const re_node_set *candidates)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  reg_errcode_t err;
+  Idx node_idx, node;
+  re_sift_context_t local_sctx;
+  Idx first_idx = search_cur_bkref_entry (mctx, str_idx);
+
+  if (first_idx == REG_MISSING)
+    return REG_NOERROR;
+
+  local_sctx.sifted_states = NULL; /* Mark that it hasn't been initialized.  */
+
+  for (node_idx = 0; node_idx < candidates->nelem; ++node_idx)
+    {
+      Idx enabled_idx;
+      re_token_type_t type;
+      struct re_backref_cache_entry *entry;
+      node = candidates->elems[node_idx];
+      type = dfa->nodes[node].type;
+      /* Avoid infinite loop for the REs like "()\1+".  */
+      if (node == sctx->last_node && str_idx == sctx->last_str_idx)
+       continue;
+      if (type != OP_BACK_REF)
+       continue;
+
+      entry = mctx->bkref_ents + first_idx;
+      enabled_idx = first_idx;
+      do
+       {
+         Idx subexp_len;
+         Idx to_idx;
+         Idx dst_node;
+         bool ok;
+         re_dfastate_t *cur_state;
+
+         if (entry->node != node)
+           continue;
+         subexp_len = entry->subexp_to - entry->subexp_from;
+         to_idx = str_idx + subexp_len;
+         dst_node = (subexp_len ? dfa->nexts[node]
+                     : dfa->edests[node].elems[0]);
+
+         if (to_idx > sctx->last_str_idx
+             || sctx->sifted_states[to_idx] == NULL
+             || !STATE_NODE_CONTAINS (sctx->sifted_states[to_idx], dst_node)
+             || check_dst_limits (mctx, &sctx->limits, node,
+                                  str_idx, dst_node, to_idx))
+           continue;
+
+         if (local_sctx.sifted_states == NULL)
+           {
+             local_sctx = *sctx;
+             err = re_node_set_init_copy (&local_sctx.limits, &sctx->limits);
+             if (BE (err != REG_NOERROR, 0))
+               goto free_return;
+           }
+         local_sctx.last_node = node;
+         local_sctx.last_str_idx = str_idx;
+         ok = re_node_set_insert (&local_sctx.limits, enabled_idx);
+         if (BE (! ok, 0))
+           {
+             err = REG_ESPACE;
+             goto free_return;
+           }
+         cur_state = local_sctx.sifted_states[str_idx];
+         err = sift_states_backward (mctx, &local_sctx);
+         if (BE (err != REG_NOERROR, 0))
+           goto free_return;
+         if (sctx->limited_states != NULL)
+           {
+             err = merge_state_array (dfa, sctx->limited_states,
+                                      local_sctx.sifted_states,
+                                      str_idx + 1);
+             if (BE (err != REG_NOERROR, 0))
+               goto free_return;
+           }
+         local_sctx.sifted_states[str_idx] = cur_state;
+         re_node_set_remove (&local_sctx.limits, enabled_idx);
+
+         /* mctx->bkref_ents may have changed, reload the pointer.  */
+         entry = mctx->bkref_ents + enabled_idx;
+       }
+      while (enabled_idx++, entry++->more);
+    }
+  err = REG_NOERROR;
+ free_return:
+  if (local_sctx.sifted_states != NULL)
+    {
+      re_node_set_free (&local_sctx.limits);
+    }
+
+  return err;
+}
+
+
+#ifdef RE_ENABLE_I18N
+static int
+internal_function
+sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx,
+                    Idx node_idx, Idx str_idx, Idx max_str_idx)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  int naccepted;
+  /* Check the node can accept `multi byte'.  */
+  naccepted = check_node_accept_bytes (dfa, node_idx, &mctx->input, str_idx);
+  if (naccepted > 0 && str_idx + naccepted <= max_str_idx &&
+      !STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + naccepted],
+                           dfa->nexts[node_idx]))
+    /* The node can't accept the `multi byte', or the
+       destination was already thrown away, then the node
+       could't accept the current input `multi byte'.   */
+    naccepted = 0;
+  /* Otherwise, it is sure that the node could accept
+     `naccepted' bytes input.  */
+  return naccepted;
+}
+#endif /* RE_ENABLE_I18N */
+
+\f
+/* Functions for state transition.  */
+
+/* Return the next state to which the current state STATE will transit by
+   accepting the current input byte, and update STATE_LOG if necessary.
+   If STATE can accept a multibyte char/collating element/back reference
+   update the destination of STATE_LOG.  */
+
+static re_dfastate_t *
+internal_function __attribute_warn_unused_result__
+transit_state (reg_errcode_t *err, re_match_context_t *mctx,
+              re_dfastate_t *state)
+{
+  re_dfastate_t **trtable;
+  unsigned char ch;
+
+#ifdef RE_ENABLE_I18N
+  /* If the current state can accept multibyte.  */
+  if (BE (state->accept_mb, 0))
+    {
+      *err = transit_state_mb (mctx, state);
+      if (BE (*err != REG_NOERROR, 0))
+       return NULL;
+    }
+#endif /* RE_ENABLE_I18N */
+
+  /* Then decide the next state with the single byte.  */
+#if 0
+  if (0)
+    /* don't use transition table  */
+    return transit_state_sb (err, mctx, state);
+#endif
+
+  /* Use transition table  */
+  ch = re_string_fetch_byte (&mctx->input);
+  for (;;)
+    {
+      trtable = state->trtable;
+      if (BE (trtable != NULL, 1))
+       return trtable[ch];
+
+      trtable = state->word_trtable;
+      if (BE (trtable != NULL, 1))
+       {
+         unsigned int context;
+         context
+           = re_string_context_at (&mctx->input,
+                                   re_string_cur_idx (&mctx->input) - 1,
+                                   mctx->eflags);
+         if (IS_WORD_CONTEXT (context))
+           return trtable[ch + SBC_MAX];
+         else
+           return trtable[ch];
+       }
+
+      if (!build_trtable (mctx->dfa, state))
+       {
+         *err = REG_ESPACE;
+         return NULL;
+       }
+
+      /* Retry, we now have a transition table.  */
+    }
+}
+
+/* Update the state_log if we need */
+static re_dfastate_t *
+internal_function
+merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx,
+                     re_dfastate_t *next_state)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  Idx cur_idx = re_string_cur_idx (&mctx->input);
+
+  if (cur_idx > mctx->state_log_top)
+    {
+      mctx->state_log[cur_idx] = next_state;
+      mctx->state_log_top = cur_idx;
+    }
+  else if (mctx->state_log[cur_idx] == 0)
+    {
+      mctx->state_log[cur_idx] = next_state;
+    }
+  else
+    {
+      re_dfastate_t *pstate;
+      unsigned int context;
+      re_node_set next_nodes, *log_nodes, *table_nodes = NULL;
+      /* If (state_log[cur_idx] != 0), it implies that cur_idx is
+        the destination of a multibyte char/collating element/
+        back reference.  Then the next state is the union set of
+        these destinations and the results of the transition table.  */
+      pstate = mctx->state_log[cur_idx];
+      log_nodes = pstate->entrance_nodes;
+      if (next_state != NULL)
+       {
+         table_nodes = next_state->entrance_nodes;
+         *err = re_node_set_init_union (&next_nodes, table_nodes,
+                                            log_nodes);
+         if (BE (*err != REG_NOERROR, 0))
+           return NULL;
+       }
+      else
+       next_nodes = *log_nodes;
+      /* Note: We already add the nodes of the initial state,
+        then we don't need to add them here.  */
+
+      context = re_string_context_at (&mctx->input,
+                                     re_string_cur_idx (&mctx->input) - 1,
+                                     mctx->eflags);
+      next_state = mctx->state_log[cur_idx]
+       = re_acquire_state_context (err, dfa, &next_nodes, context);
+      /* We don't need to check errors here, since the return value of
+        this function is next_state and ERR is already set.  */
+
+      if (table_nodes != NULL)
+       re_node_set_free (&next_nodes);
+    }
+
+  if (BE (dfa->nbackref, 0) && next_state != NULL)
+    {
+      /* Check OP_OPEN_SUBEXP in the current state in case that we use them
+        later.  We must check them here, since the back references in the
+        next state might use them.  */
+      *err = check_subexp_matching_top (mctx, &next_state->nodes,
+                                       cur_idx);
+      if (BE (*err != REG_NOERROR, 0))
+       return NULL;
+
+      /* If the next state has back references.  */
+      if (next_state->has_backref)
+       {
+         *err = transit_state_bkref (mctx, &next_state->nodes);
+         if (BE (*err != REG_NOERROR, 0))
+           return NULL;
+         next_state = mctx->state_log[cur_idx];
+       }
+    }
+
+  return next_state;
+}
+
+/* Skip bytes in the input that correspond to part of a
+   multi-byte match, then look in the log for a state
+   from which to restart matching.  */
+static re_dfastate_t *
+internal_function
+find_recover_state (reg_errcode_t *err, re_match_context_t *mctx)
+{
+  re_dfastate_t *cur_state;
+  do
+    {
+      Idx max = mctx->state_log_top;
+      Idx cur_str_idx = re_string_cur_idx (&mctx->input);
+
+      do
+       {
+         if (++cur_str_idx > max)
+           return NULL;
+         re_string_skip_bytes (&mctx->input, 1);
+       }
+      while (mctx->state_log[cur_str_idx] == NULL);
+
+      cur_state = merge_state_with_log (err, mctx, NULL);
+    }
+  while (*err == REG_NOERROR && cur_state == NULL);
+  return cur_state;
+}
+
+/* Helper functions for transit_state.  */
+
+/* From the node set CUR_NODES, pick up the nodes whose types are
+   OP_OPEN_SUBEXP and which have corresponding back references in the regular
+   expression. And register them to use them later for evaluating the
+   correspoding back references.  */
+
+static reg_errcode_t
+internal_function
+check_subexp_matching_top (re_match_context_t *mctx, re_node_set *cur_nodes,
+                          Idx str_idx)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  Idx node_idx;
+  reg_errcode_t err;
+
+  /* TODO: This isn't efficient.
+          Because there might be more than one nodes whose types are
+          OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all
+          nodes.
+          E.g. RE: (a){2}  */
+  for (node_idx = 0; node_idx < cur_nodes->nelem; ++node_idx)
+    {
+      Idx node = cur_nodes->elems[node_idx];
+      if (dfa->nodes[node].type == OP_OPEN_SUBEXP
+         && dfa->nodes[node].opr.idx < BITSET_WORD_BITS
+         && (dfa->used_bkref_map
+             & ((bitset_word_t) 1 << dfa->nodes[node].opr.idx)))
+       {
+         err = match_ctx_add_subtop (mctx, node, str_idx);
+         if (BE (err != REG_NOERROR, 0))
+           return err;
+       }
+    }
+  return REG_NOERROR;
+}
+
+#if 0
+/* Return the next state to which the current state STATE will transit by
+   accepting the current input byte.  */
+
+static re_dfastate_t *
+transit_state_sb (reg_errcode_t *err, re_match_context_t *mctx,
+                 re_dfastate_t *state)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  re_node_set next_nodes;
+  re_dfastate_t *next_state;
+  Idx node_cnt, cur_str_idx = re_string_cur_idx (&mctx->input);
+  unsigned int context;
+
+  *err = re_node_set_alloc (&next_nodes, state->nodes.nelem + 1);
+  if (BE (*err != REG_NOERROR, 0))
+    return NULL;
+  for (node_cnt = 0; node_cnt < state->nodes.nelem; ++node_cnt)
+    {
+      Idx cur_node = state->nodes.elems[node_cnt];
+      if (check_node_accept (mctx, dfa->nodes + cur_node, cur_str_idx))
+       {
+         *err = re_node_set_merge (&next_nodes,
+                                   dfa->eclosures + dfa->nexts[cur_node]);
+         if (BE (*err != REG_NOERROR, 0))
+           {
+             re_node_set_free (&next_nodes);
+             return NULL;
+           }
+       }
+    }
+  context = re_string_context_at (&mctx->input, cur_str_idx, mctx->eflags);
+  next_state = re_acquire_state_context (err, dfa, &next_nodes, context);
+  /* We don't need to check errors here, since the return value of
+     this function is next_state and ERR is already set.  */
+
+  re_node_set_free (&next_nodes);
+  re_string_skip_bytes (&mctx->input, 1);
+  return next_state;
+}
+#endif
+
+#ifdef RE_ENABLE_I18N
+static reg_errcode_t
+internal_function
+transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  reg_errcode_t err;
+  Idx i;
+
+  for (i = 0; i < pstate->nodes.nelem; ++i)
+    {
+      re_node_set dest_nodes, *new_nodes;
+      Idx cur_node_idx = pstate->nodes.elems[i];
+      int naccepted;
+      Idx dest_idx;
+      unsigned int context;
+      re_dfastate_t *dest_state;
+
+      if (!dfa->nodes[cur_node_idx].accept_mb)
+       continue;
+
+      if (dfa->nodes[cur_node_idx].constraint)
+       {
+         context = re_string_context_at (&mctx->input,
+                                         re_string_cur_idx (&mctx->input),
+                                         mctx->eflags);
+         if (NOT_SATISFY_NEXT_CONSTRAINT (dfa->nodes[cur_node_idx].constraint,
+                                          context))
+           continue;
+       }
+
+      /* How many bytes the node can accept?  */
+      naccepted = check_node_accept_bytes (dfa, cur_node_idx, &mctx->input,
+                                          re_string_cur_idx (&mctx->input));
+      if (naccepted == 0)
+       continue;
+
+      /* The node can accepts `naccepted' bytes.  */
+      dest_idx = re_string_cur_idx (&mctx->input) + naccepted;
+      mctx->max_mb_elem_len = ((mctx->max_mb_elem_len < naccepted) ? naccepted
+                              : mctx->max_mb_elem_len);
+      err = clean_state_log_if_needed (mctx, dest_idx);
+      if (BE (err != REG_NOERROR, 0))
+       return err;
+#ifdef DEBUG
+      assert (dfa->nexts[cur_node_idx] != REG_MISSING);
+#endif
+      new_nodes = dfa->eclosures + dfa->nexts[cur_node_idx];
+
+      dest_state = mctx->state_log[dest_idx];
+      if (dest_state == NULL)
+       dest_nodes = *new_nodes;
+      else
+       {
+         err = re_node_set_init_union (&dest_nodes,
+                                       dest_state->entrance_nodes, new_nodes);
+         if (BE (err != REG_NOERROR, 0))
+           return err;
+       }
+      context = re_string_context_at (&mctx->input, dest_idx - 1,
+                                     mctx->eflags);
+      mctx->state_log[dest_idx]
+       = re_acquire_state_context (&err, dfa, &dest_nodes, context);
+      if (dest_state != NULL)
+       re_node_set_free (&dest_nodes);
+      if (BE (mctx->state_log[dest_idx] == NULL && err != REG_NOERROR, 0))
+       return err;
+    }
+  return REG_NOERROR;
+}
+#endif /* RE_ENABLE_I18N */
+
+static reg_errcode_t
+internal_function
+transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  reg_errcode_t err;
+  Idx i;
+  Idx cur_str_idx = re_string_cur_idx (&mctx->input);
+
+  for (i = 0; i < nodes->nelem; ++i)
+    {
+      Idx dest_str_idx, prev_nelem, bkc_idx;
+      Idx node_idx = nodes->elems[i];
+      unsigned int context;
+      const re_token_t *node = dfa->nodes + node_idx;
+      re_node_set *new_dest_nodes;
+
+      /* Check whether `node' is a backreference or not.  */
+      if (node->type != OP_BACK_REF)
+       continue;
+
+      if (node->constraint)
+       {
+         context = re_string_context_at (&mctx->input, cur_str_idx,
+                                         mctx->eflags);
+         if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context))
+           continue;
+       }
+
+      /* `node' is a backreference.
+        Check the substring which the substring matched.  */
+      bkc_idx = mctx->nbkref_ents;
+      err = get_subexp (mctx, node_idx, cur_str_idx);
+      if (BE (err != REG_NOERROR, 0))
+       goto free_return;
+
+      /* And add the epsilon closures (which is `new_dest_nodes') of
+        the backreference to appropriate state_log.  */
+#ifdef DEBUG
+      assert (dfa->nexts[node_idx] != REG_MISSING);
+#endif
+      for (; bkc_idx < mctx->nbkref_ents; ++bkc_idx)
+       {
+         Idx subexp_len;
+         re_dfastate_t *dest_state;
+         struct re_backref_cache_entry *bkref_ent;
+         bkref_ent = mctx->bkref_ents + bkc_idx;
+         if (bkref_ent->node != node_idx || bkref_ent->str_idx != cur_str_idx)
+           continue;
+         subexp_len = bkref_ent->subexp_to - bkref_ent->subexp_from;
+         new_dest_nodes = (subexp_len == 0
+                           ? dfa->eclosures + dfa->edests[node_idx].elems[0]
+                           : dfa->eclosures + dfa->nexts[node_idx]);
+         dest_str_idx = (cur_str_idx + bkref_ent->subexp_to
+                         - bkref_ent->subexp_from);
+         context = re_string_context_at (&mctx->input, dest_str_idx - 1,
+                                         mctx->eflags);
+         dest_state = mctx->state_log[dest_str_idx];
+         prev_nelem = ((mctx->state_log[cur_str_idx] == NULL) ? 0
+                       : mctx->state_log[cur_str_idx]->nodes.nelem);
+         /* Add `new_dest_node' to state_log.  */
+         if (dest_state == NULL)
+           {
+             mctx->state_log[dest_str_idx]
+               = re_acquire_state_context (&err, dfa, new_dest_nodes,
+                                           context);
+             if (BE (mctx->state_log[dest_str_idx] == NULL
+                     && err != REG_NOERROR, 0))
+               goto free_return;
+           }
+         else
+           {
+             re_node_set dest_nodes;
+             err = re_node_set_init_union (&dest_nodes,
+                                           dest_state->entrance_nodes,
+                                           new_dest_nodes);
+             if (BE (err != REG_NOERROR, 0))
+               {
+                 re_node_set_free (&dest_nodes);
+                 goto free_return;
+               }
+             mctx->state_log[dest_str_idx]
+               = re_acquire_state_context (&err, dfa, &dest_nodes, context);
+             re_node_set_free (&dest_nodes);
+             if (BE (mctx->state_log[dest_str_idx] == NULL
+                     && err != REG_NOERROR, 0))
+               goto free_return;
+           }
+         /* We need to check recursively if the backreference can epsilon
+            transit.  */
+         if (subexp_len == 0
+             && mctx->state_log[cur_str_idx]->nodes.nelem > prev_nelem)
+           {
+             err = check_subexp_matching_top (mctx, new_dest_nodes,
+                                              cur_str_idx);
+             if (BE (err != REG_NOERROR, 0))
+               goto free_return;
+             err = transit_state_bkref (mctx, new_dest_nodes);
+             if (BE (err != REG_NOERROR, 0))
+               goto free_return;
+           }
+       }
+    }
+  err = REG_NOERROR;
+ free_return:
+  return err;
+}
+
+/* Enumerate all the candidates which the backreference BKREF_NODE can match
+   at BKREF_STR_IDX, and register them by match_ctx_add_entry().
+   Note that we might collect inappropriate candidates here.
+   However, the cost of checking them strictly here is too high, then we
+   delay these checking for prune_impossible_nodes().  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  Idx subexp_num, sub_top_idx;
+  const char *buf = (const char *) re_string_get_buffer (&mctx->input);
+  /* Return if we have already checked BKREF_NODE at BKREF_STR_IDX.  */
+  Idx cache_idx = search_cur_bkref_entry (mctx, bkref_str_idx);
+  if (cache_idx != REG_MISSING)
+    {
+      const struct re_backref_cache_entry *entry
+       = mctx->bkref_ents + cache_idx;
+      do
+       if (entry->node == bkref_node)
+         return REG_NOERROR; /* We already checked it.  */
+      while (entry++->more);
+    }
+
+  subexp_num = dfa->nodes[bkref_node].opr.idx;
+
+  /* For each sub expression  */
+  for (sub_top_idx = 0; sub_top_idx < mctx->nsub_tops; ++sub_top_idx)
+    {
+      reg_errcode_t err;
+      re_sub_match_top_t *sub_top = mctx->sub_tops[sub_top_idx];
+      re_sub_match_last_t *sub_last;
+      Idx sub_last_idx, sl_str, bkref_str_off;
+
+      if (dfa->nodes[sub_top->node].opr.idx != subexp_num)
+       continue; /* It isn't related.  */
+
+      sl_str = sub_top->str_idx;
+      bkref_str_off = bkref_str_idx;
+      /* At first, check the last node of sub expressions we already
+        evaluated.  */
+      for (sub_last_idx = 0; sub_last_idx < sub_top->nlasts; ++sub_last_idx)
+       {
+         regoff_t sl_str_diff;
+         sub_last = sub_top->lasts[sub_last_idx];
+         sl_str_diff = sub_last->str_idx - sl_str;
+         /* The matched string by the sub expression match with the substring
+            at the back reference?  */
+         if (sl_str_diff > 0)
+           {
+             if (BE (bkref_str_off + sl_str_diff > mctx->input.valid_len, 0))
+               {
+                 /* Not enough chars for a successful match.  */
+                 if (bkref_str_off + sl_str_diff > mctx->input.len)
+                   break;
+
+                 err = clean_state_log_if_needed (mctx,
+                                                  bkref_str_off
+                                                  + sl_str_diff);
+                 if (BE (err != REG_NOERROR, 0))
+                   return err;
+                 buf = (const char *) re_string_get_buffer (&mctx->input);
+               }
+             if (memcmp (buf + bkref_str_off, buf + sl_str, sl_str_diff) != 0)
+               /* We don't need to search this sub expression any more.  */
+               break;
+           }
+         bkref_str_off += sl_str_diff;
+         sl_str += sl_str_diff;
+         err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node,
+                               bkref_str_idx);
+
+         /* Reload buf, since the preceding call might have reallocated
+            the buffer.  */
+         buf = (const char *) re_string_get_buffer (&mctx->input);
+
+         if (err == REG_NOMATCH)
+           continue;
+         if (BE (err != REG_NOERROR, 0))
+           return err;
+       }
+
+      if (sub_last_idx < sub_top->nlasts)
+       continue;
+      if (sub_last_idx > 0)
+       ++sl_str;
+      /* Then, search for the other last nodes of the sub expression.  */
+      for (; sl_str <= bkref_str_idx; ++sl_str)
+       {
+         Idx cls_node;
+         regoff_t sl_str_off;
+         const re_node_set *nodes;
+         sl_str_off = sl_str - sub_top->str_idx;
+         /* The matched string by the sub expression match with the substring
+            at the back reference?  */
+         if (sl_str_off > 0)
+           {
+             if (BE (bkref_str_off >= mctx->input.valid_len, 0))
+               {
+                 /* If we are at the end of the input, we cannot match.  */
+                 if (bkref_str_off >= mctx->input.len)
+                   break;
+
+                 err = extend_buffers (mctx);
+                 if (BE (err != REG_NOERROR, 0))
+                   return err;
+
+                 buf = (const char *) re_string_get_buffer (&mctx->input);
+               }
+             if (buf [bkref_str_off++] != buf[sl_str - 1])
+               break; /* We don't need to search this sub expression
+                         any more.  */
+           }
+         if (mctx->state_log[sl_str] == NULL)
+           continue;
+         /* Does this state have a ')' of the sub expression?  */
+         nodes = &mctx->state_log[sl_str]->nodes;
+         cls_node = find_subexp_node (dfa, nodes, subexp_num,
+                                      OP_CLOSE_SUBEXP);
+         if (cls_node == REG_MISSING)
+           continue; /* No.  */
+         if (sub_top->path == NULL)
+           {
+             sub_top->path = calloc (sizeof (state_array_t),
+                                     sl_str - sub_top->str_idx + 1);
+             if (sub_top->path == NULL)
+               return REG_ESPACE;
+           }
+         /* Can the OP_OPEN_SUBEXP node arrive the OP_CLOSE_SUBEXP node
+            in the current context?  */
+         err = check_arrival (mctx, sub_top->path, sub_top->node,
+                              sub_top->str_idx, cls_node, sl_str,
+                              OP_CLOSE_SUBEXP);
+         if (err == REG_NOMATCH)
+             continue;
+         if (BE (err != REG_NOERROR, 0))
+             return err;
+         sub_last = match_ctx_add_sublast (sub_top, cls_node, sl_str);
+         if (BE (sub_last == NULL, 0))
+           return REG_ESPACE;
+         err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node,
+                               bkref_str_idx);
+         if (err == REG_NOMATCH)
+           continue;
+       }
+    }
+  return REG_NOERROR;
+}
+
+/* Helper functions for get_subexp().  */
+
+/* Check SUB_LAST can arrive to the back reference BKREF_NODE at BKREF_STR.
+   If it can arrive, register the sub expression expressed with SUB_TOP
+   and SUB_LAST.  */
+
+static reg_errcode_t
+internal_function
+get_subexp_sub (re_match_context_t *mctx, const re_sub_match_top_t *sub_top,
+               re_sub_match_last_t *sub_last, Idx bkref_node, Idx bkref_str)
+{
+  reg_errcode_t err;
+  Idx to_idx;
+  /* Can the subexpression arrive the back reference?  */
+  err = check_arrival (mctx, &sub_last->path, sub_last->node,
+                      sub_last->str_idx, bkref_node, bkref_str,
+                      OP_OPEN_SUBEXP);
+  if (err != REG_NOERROR)
+    return err;
+  err = match_ctx_add_entry (mctx, bkref_node, bkref_str, sub_top->str_idx,
+                            sub_last->str_idx);
+  if (BE (err != REG_NOERROR, 0))
+    return err;
+  to_idx = bkref_str + sub_last->str_idx - sub_top->str_idx;
+  return clean_state_log_if_needed (mctx, to_idx);
+}
+
+/* Find the first node which is '(' or ')' and whose index is SUBEXP_IDX.
+   Search '(' if FL_OPEN, or search ')' otherwise.
+   TODO: This function isn't efficient...
+        Because there might be more than one nodes whose types are
+        OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all
+        nodes.
+        E.g. RE: (a){2}  */
+
+static Idx
+internal_function
+find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes,
+                 Idx subexp_idx, int type)
+{
+  Idx cls_idx;
+  for (cls_idx = 0; cls_idx < nodes->nelem; ++cls_idx)
+    {
+      Idx cls_node = nodes->elems[cls_idx];
+      const re_token_t *node = dfa->nodes + cls_node;
+      if (node->type == type
+         && node->opr.idx == subexp_idx)
+       return cls_node;
+    }
+  return REG_MISSING;
+}
+
+/* Check whether the node TOP_NODE at TOP_STR can arrive to the node
+   LAST_NODE at LAST_STR.  We record the path onto PATH since it will be
+   heavily reused.
+   Return REG_NOERROR if it can arrive, or REG_NOMATCH otherwise.  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+check_arrival (re_match_context_t *mctx, state_array_t *path, Idx top_node,
+              Idx top_str, Idx last_node, Idx last_str, int type)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  reg_errcode_t err = REG_NOERROR;
+  Idx subexp_num, backup_cur_idx, str_idx, null_cnt;
+  re_dfastate_t *cur_state = NULL;
+  re_node_set *cur_nodes, next_nodes;
+  re_dfastate_t **backup_state_log;
+  unsigned int context;
+
+  subexp_num = dfa->nodes[top_node].opr.idx;
+  /* Extend the buffer if we need.  */
+  if (BE (path->alloc < last_str + mctx->max_mb_elem_len + 1, 0))
+    {
+      re_dfastate_t **new_array;
+      Idx old_alloc = path->alloc;
+      Idx new_alloc = old_alloc + last_str + mctx->max_mb_elem_len + 1;
+      if (BE (new_alloc < old_alloc, 0)
+         || BE (SIZE_MAX / sizeof (re_dfastate_t *) < new_alloc, 0))
+       return REG_ESPACE;
+      new_array = re_realloc (path->array, re_dfastate_t *, new_alloc);
+      if (BE (new_array == NULL, 0))
+       return REG_ESPACE;
+      path->array = new_array;
+      path->alloc = new_alloc;
+      memset (new_array + old_alloc, '\0',
+             sizeof (re_dfastate_t *) * (path->alloc - old_alloc));
+    }
+
+  str_idx = path->next_idx ? path->next_idx : top_str;
+
+  /* Temporary modify MCTX.  */
+  backup_state_log = mctx->state_log;
+  backup_cur_idx = mctx->input.cur_idx;
+  mctx->state_log = path->array;
+  mctx->input.cur_idx = str_idx;
+
+  /* Setup initial node set.  */
+  context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags);
+  if (str_idx == top_str)
+    {
+      err = re_node_set_init_1 (&next_nodes, top_node);
+      if (BE (err != REG_NOERROR, 0))
+       return err;
+      err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type);
+      if (BE (err != REG_NOERROR, 0))
+       {
+         re_node_set_free (&next_nodes);
+         return err;
+       }
+    }
+  else
+    {
+      cur_state = mctx->state_log[str_idx];
+      if (cur_state && cur_state->has_backref)
+       {
+         err = re_node_set_init_copy (&next_nodes, &cur_state->nodes);
+         if (BE (err != REG_NOERROR, 0))
+           return err;
+       }
+      else
+       re_node_set_init_empty (&next_nodes);
+    }
+  if (str_idx == top_str || (cur_state && cur_state->has_backref))
+    {
+      if (next_nodes.nelem)
+       {
+         err = expand_bkref_cache (mctx, &next_nodes, str_idx,
+                                   subexp_num, type);
+         if (BE (err != REG_NOERROR, 0))
+           {
+             re_node_set_free (&next_nodes);
+             return err;
+           }
+       }
+      cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context);
+      if (BE (cur_state == NULL && err != REG_NOERROR, 0))
+       {
+         re_node_set_free (&next_nodes);
+         return err;
+       }
+      mctx->state_log[str_idx] = cur_state;
+    }
+
+  for (null_cnt = 0; str_idx < last_str && null_cnt <= mctx->max_mb_elem_len;)
+    {
+      re_node_set_empty (&next_nodes);
+      if (mctx->state_log[str_idx + 1])
+       {
+         err = re_node_set_merge (&next_nodes,
+                                  &mctx->state_log[str_idx + 1]->nodes);
+         if (BE (err != REG_NOERROR, 0))
+           {
+             re_node_set_free (&next_nodes);
+             return err;
+           }
+       }
+      if (cur_state)
+       {
+         err = check_arrival_add_next_nodes (mctx, str_idx,
+                                             &cur_state->non_eps_nodes,
+                                             &next_nodes);
+         if (BE (err != REG_NOERROR, 0))
+           {
+             re_node_set_free (&next_nodes);
+             return err;
+           }
+       }
+      ++str_idx;
+      if (next_nodes.nelem)
+       {
+         err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type);
+         if (BE (err != REG_NOERROR, 0))
+           {
+             re_node_set_free (&next_nodes);
+             return err;
+           }
+         err = expand_bkref_cache (mctx, &next_nodes, str_idx,
+                                   subexp_num, type);
+         if (BE (err != REG_NOERROR, 0))
+           {
+             re_node_set_free (&next_nodes);
+             return err;
+           }
+       }
+      context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags);
+      cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context);
+      if (BE (cur_state == NULL && err != REG_NOERROR, 0))
+       {
+         re_node_set_free (&next_nodes);
+         return err;
+       }
+      mctx->state_log[str_idx] = cur_state;
+      null_cnt = cur_state == NULL ? null_cnt + 1 : 0;
+    }
+  re_node_set_free (&next_nodes);
+  cur_nodes = (mctx->state_log[last_str] == NULL ? NULL
+              : &mctx->state_log[last_str]->nodes);
+  path->next_idx = str_idx;
+
+  /* Fix MCTX.  */
+  mctx->state_log = backup_state_log;
+  mctx->input.cur_idx = backup_cur_idx;
+
+  /* Then check the current node set has the node LAST_NODE.  */
+  if (cur_nodes != NULL && re_node_set_contains (cur_nodes, last_node))
+    return REG_NOERROR;
+
+  return REG_NOMATCH;
+}
+
+/* Helper functions for check_arrival.  */
+
+/* Calculate the destination nodes of CUR_NODES at STR_IDX, and append them
+   to NEXT_NODES.
+   TODO: This function is similar to the functions transit_state*(),
+        however this function has many additional works.
+        Can't we unify them?  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx,
+                             re_node_set *cur_nodes, re_node_set *next_nodes)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  bool ok;
+  Idx cur_idx;
+#ifdef RE_ENABLE_I18N
+  reg_errcode_t err = REG_NOERROR;
+#endif
+  re_node_set union_set;
+  re_node_set_init_empty (&union_set);
+  for (cur_idx = 0; cur_idx < cur_nodes->nelem; ++cur_idx)
+    {
+      int naccepted = 0;
+      Idx cur_node = cur_nodes->elems[cur_idx];
+#ifdef DEBUG
+      re_token_type_t type = dfa->nodes[cur_node].type;
+      assert (!IS_EPSILON_NODE (type));
+#endif
+#ifdef RE_ENABLE_I18N
+      /* If the node may accept `multi byte'.  */
+      if (dfa->nodes[cur_node].accept_mb)
+       {
+         naccepted = check_node_accept_bytes (dfa, cur_node, &mctx->input,
+                                              str_idx);
+         if (naccepted > 1)
+           {
+             re_dfastate_t *dest_state;
+             Idx next_node = dfa->nexts[cur_node];
+             Idx next_idx = str_idx + naccepted;
+             dest_state = mctx->state_log[next_idx];
+             re_node_set_empty (&union_set);
+             if (dest_state)
+               {
+                 err = re_node_set_merge (&union_set, &dest_state->nodes);
+                 if (BE (err != REG_NOERROR, 0))
+                   {
+                     re_node_set_free (&union_set);
+                     return err;
+                   }
+               }
+             ok = re_node_set_insert (&union_set, next_node);
+             if (BE (! ok, 0))
+               {
+                 re_node_set_free (&union_set);
+                 return REG_ESPACE;
+               }
+             mctx->state_log[next_idx] = re_acquire_state (&err, dfa,
+                                                           &union_set);
+             if (BE (mctx->state_log[next_idx] == NULL
+                     && err != REG_NOERROR, 0))
+               {
+                 re_node_set_free (&union_set);
+                 return err;
+               }
+           }
+       }
+#endif /* RE_ENABLE_I18N */
+      if (naccepted
+         || check_node_accept (mctx, dfa->nodes + cur_node, str_idx))
+       {
+         ok = re_node_set_insert (next_nodes, dfa->nexts[cur_node]);
+         if (BE (! ok, 0))
+           {
+             re_node_set_free (&union_set);
+             return REG_ESPACE;
+           }
+       }
+    }
+  re_node_set_free (&union_set);
+  return REG_NOERROR;
+}
+
+/* For all the nodes in CUR_NODES, add the epsilon closures of them to
+   CUR_NODES, however exclude the nodes which are:
+    - inside the sub expression whose number is EX_SUBEXP, if FL_OPEN.
+    - out of the sub expression whose number is EX_SUBEXP, if !FL_OPEN.
+*/
+
+static reg_errcode_t
+internal_function
+check_arrival_expand_ecl (const re_dfa_t *dfa, re_node_set *cur_nodes,
+                         Idx ex_subexp, int type)
+{
+  reg_errcode_t err;
+  Idx idx, outside_node;
+  re_node_set new_nodes;
+#ifdef DEBUG
+  assert (cur_nodes->nelem);
+#endif
+  err = re_node_set_alloc (&new_nodes, cur_nodes->nelem);
+  if (BE (err != REG_NOERROR, 0))
+    return err;
+  /* Create a new node set NEW_NODES with the nodes which are epsilon
+     closures of the node in CUR_NODES.  */
+
+  for (idx = 0; idx < cur_nodes->nelem; ++idx)
+    {
+      Idx cur_node = cur_nodes->elems[idx];
+      const re_node_set *eclosure = dfa->eclosures + cur_node;
+      outside_node = find_subexp_node (dfa, eclosure, ex_subexp, type);
+      if (outside_node == REG_MISSING)
+       {
+         /* There are no problematic nodes, just merge them.  */
+         err = re_node_set_merge (&new_nodes, eclosure);
+         if (BE (err != REG_NOERROR, 0))
+           {
+             re_node_set_free (&new_nodes);
+             return err;
+           }
+       }
+      else
+       {
+         /* There are problematic nodes, re-calculate incrementally.  */
+         err = check_arrival_expand_ecl_sub (dfa, &new_nodes, cur_node,
+                                             ex_subexp, type);
+         if (BE (err != REG_NOERROR, 0))
+           {
+             re_node_set_free (&new_nodes);
+             return err;
+           }
+       }
+    }
+  re_node_set_free (cur_nodes);
+  *cur_nodes = new_nodes;
+  return REG_NOERROR;
+}
+
+/* Helper function for check_arrival_expand_ecl.
+   Check incrementally the epsilon closure of TARGET, and if it isn't
+   problematic append it to DST_NODES.  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+check_arrival_expand_ecl_sub (const re_dfa_t *dfa, re_node_set *dst_nodes,
+                             Idx target, Idx ex_subexp, int type)
+{
+  Idx cur_node;
+  for (cur_node = target; !re_node_set_contains (dst_nodes, cur_node);)
+    {
+      bool ok;
+
+      if (dfa->nodes[cur_node].type == type
+         && dfa->nodes[cur_node].opr.idx == ex_subexp)
+       {
+         if (type == OP_CLOSE_SUBEXP)
+           {
+             ok = re_node_set_insert (dst_nodes, cur_node);
+             if (BE (! ok, 0))
+               return REG_ESPACE;
+           }
+         break;
+       }
+      ok = re_node_set_insert (dst_nodes, cur_node);
+      if (BE (! ok, 0))
+       return REG_ESPACE;
+      if (dfa->edests[cur_node].nelem == 0)
+       break;
+      if (dfa->edests[cur_node].nelem == 2)
+       {
+         reg_errcode_t err;
+         err = check_arrival_expand_ecl_sub (dfa, dst_nodes,
+                                             dfa->edests[cur_node].elems[1],
+                                             ex_subexp, type);
+         if (BE (err != REG_NOERROR, 0))
+           return err;
+       }
+      cur_node = dfa->edests[cur_node].elems[0];
+    }
+  return REG_NOERROR;
+}
+
+
+/* For all the back references in the current state, calculate the
+   destination of the back references by the appropriate entry
+   in MCTX->BKREF_ENTS.  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+expand_bkref_cache (re_match_context_t *mctx, re_node_set *cur_nodes,
+                   Idx cur_str, Idx subexp_num, int type)
+{
+  const re_dfa_t *const dfa = mctx->dfa;
+  reg_errcode_t err;
+  Idx cache_idx_start = search_cur_bkref_entry (mctx, cur_str);
+  struct re_backref_cache_entry *ent;
+
+  if (cache_idx_start == REG_MISSING)
+    return REG_NOERROR;
+
+ restart:
+  ent = mctx->bkref_ents + cache_idx_start;
+  do
+    {
+      Idx to_idx, next_node;
+
+      /* Is this entry ENT is appropriate?  */
+      if (!re_node_set_contains (cur_nodes, ent->node))
+       continue; /* No.  */
+
+      to_idx = cur_str + ent->subexp_to - ent->subexp_from;
+      /* Calculate the destination of the back reference, and append it
+        to MCTX->STATE_LOG.  */
+      if (to_idx == cur_str)
+       {
+         /* The backreference did epsilon transit, we must re-check all the
+            node in the current state.  */
+         re_node_set new_dests;
+         reg_errcode_t err2, err3;
+         next_node = dfa->edests[ent->node].elems[0];
+         if (re_node_set_contains (cur_nodes, next_node))
+           continue;
+         err = re_node_set_init_1 (&new_dests, next_node);
+         err2 = check_arrival_expand_ecl (dfa, &new_dests, subexp_num, type);
+         err3 = re_node_set_merge (cur_nodes, &new_dests);
+         re_node_set_free (&new_dests);
+         if (BE (err != REG_NOERROR || err2 != REG_NOERROR
+                 || err3 != REG_NOERROR, 0))
+           {
+             err = (err != REG_NOERROR ? err
+                    : (err2 != REG_NOERROR ? err2 : err3));
+             return err;
+           }
+         /* TODO: It is still inefficient...  */
+         goto restart;
+       }
+      else
+       {
+         re_node_set union_set;
+         next_node = dfa->nexts[ent->node];
+         if (mctx->state_log[to_idx])
+           {
+             bool ok;
+             if (re_node_set_contains (&mctx->state_log[to_idx]->nodes,
+                                       next_node))
+               continue;
+             err = re_node_set_init_copy (&union_set,
+                                          &mctx->state_log[to_idx]->nodes);
+             ok = re_node_set_insert (&union_set, next_node);
+             if (BE (err != REG_NOERROR || ! ok, 0))
+               {
+                 re_node_set_free (&union_set);
+                 err = err != REG_NOERROR ? err : REG_ESPACE;
+                 return err;
+               }
+           }
+         else
+           {
+             err = re_node_set_init_1 (&union_set, next_node);
+             if (BE (err != REG_NOERROR, 0))
+               return err;
+           }
+         mctx->state_log[to_idx] = re_acquire_state (&err, dfa, &union_set);
+         re_node_set_free (&union_set);
+         if (BE (mctx->state_log[to_idx] == NULL
+                 && err != REG_NOERROR, 0))
+           return err;
+       }
+    }
+  while (ent++->more);
+  return REG_NOERROR;
+}
+
+/* Build transition table for the state.
+   Return true if successful.  */
+
+static bool
+internal_function
+build_trtable (const re_dfa_t *dfa, re_dfastate_t *state)
+{
+  reg_errcode_t err;
+  Idx i, j;
+  int ch;
+  bool need_word_trtable = false;
+  bitset_word_t elem, mask;
+  bool dests_node_malloced = false;
+  bool dest_states_malloced = false;
+  Idx ndests; /* Number of the destination states from `state'.  */
+  re_dfastate_t **trtable;
+  re_dfastate_t **dest_states = NULL, **dest_states_word, **dest_states_nl;
+  re_node_set follows, *dests_node;
+  bitset_t *dests_ch;
+  bitset_t acceptable;
+
+  struct dests_alloc
+  {
+    re_node_set dests_node[SBC_MAX];
+    bitset_t dests_ch[SBC_MAX];
+  } *dests_alloc;
+
+  /* We build DFA states which corresponds to the destination nodes
+     from `state'.  `dests_node[i]' represents the nodes which i-th
+     destination state contains, and `dests_ch[i]' represents the
+     characters which i-th destination state accepts.  */
+  if (__libc_use_alloca (sizeof (struct dests_alloc)))
+    dests_alloc = (struct dests_alloc *) alloca (sizeof (struct dests_alloc));
+  else
+    {
+      dests_alloc = re_malloc (struct dests_alloc, 1);
+      if (BE (dests_alloc == NULL, 0))
+       return false;
+      dests_node_malloced = true;
+    }
+  dests_node = dests_alloc->dests_node;
+  dests_ch = dests_alloc->dests_ch;
+
+  /* Initialize transiton table.  */
+  state->word_trtable = state->trtable = NULL;
+
+  /* At first, group all nodes belonging to `state' into several
+     destinations.  */
+  ndests = group_nodes_into_DFAstates (dfa, state, dests_node, dests_ch);
+  if (BE (! REG_VALID_NONZERO_INDEX (ndests), 0))
+    {
+      if (dests_node_malloced)
+       free (dests_alloc);
+      if (ndests == 0)
+       {
+         state->trtable = (re_dfastate_t **)
+           calloc (sizeof (re_dfastate_t *), SBC_MAX);
+         return true;
+       }
+      return false;
+    }
+
+  err = re_node_set_alloc (&follows, ndests + 1);
+  if (BE (err != REG_NOERROR, 0))
+    goto out_free;
+
+  /* Avoid arithmetic overflow in size calculation.  */
+  if (BE ((((SIZE_MAX - (sizeof (re_node_set) + sizeof (bitset_t)) * SBC_MAX)
+           / (3 * sizeof (re_dfastate_t *)))
+          < ndests),
+         0))
+    goto out_free;
+
+  if (__libc_use_alloca ((sizeof (re_node_set) + sizeof (bitset_t)) * SBC_MAX
+                        + ndests * 3 * sizeof (re_dfastate_t *)))
+    dest_states = (re_dfastate_t **)
+      alloca (ndests * 3 * sizeof (re_dfastate_t *));
+  else
+    {
+      dest_states = (re_dfastate_t **)
+       malloc (ndests * 3 * sizeof (re_dfastate_t *));
+      if (BE (dest_states == NULL, 0))
+       {
+out_free:
+         if (dest_states_malloced)
+           free (dest_states);
+         re_node_set_free (&follows);
+         for (i = 0; i < ndests; ++i)
+           re_node_set_free (dests_node + i);
+         if (dests_node_malloced)
+           free (dests_alloc);
+         return false;
+       }
+      dest_states_malloced = true;
+    }
+  dest_states_word = dest_states + ndests;
+  dest_states_nl = dest_states_word + ndests;
+  bitset_empty (acceptable);
+
+  /* Then build the states for all destinations.  */
+  for (i = 0; i < ndests; ++i)
+    {
+      Idx next_node;
+      re_node_set_empty (&follows);
+      /* Merge the follows of this destination states.  */
+      for (j = 0; j < dests_node[i].nelem; ++j)
+       {
+         next_node = dfa->nexts[dests_node[i].elems[j]];
+         if (next_node != REG_MISSING)
+           {
+             err = re_node_set_merge (&follows, dfa->eclosures + next_node);
+             if (BE (err != REG_NOERROR, 0))
+               goto out_free;
+           }
+       }
+      dest_states[i] = re_acquire_state_context (&err, dfa, &follows, 0);
+      if (BE (dest_states[i] == NULL && err != REG_NOERROR, 0))
+       goto out_free;
+      /* If the new state has context constraint,
+        build appropriate states for these contexts.  */
+      if (dest_states[i]->has_constraint)
+       {
+         dest_states_word[i] = re_acquire_state_context (&err, dfa, &follows,
+                                                         CONTEXT_WORD);
+         if (BE (dest_states_word[i] == NULL && err != REG_NOERROR, 0))
+           goto out_free;
+
+         if (dest_states[i] != dest_states_word[i] && dfa->mb_cur_max > 1)
+           need_word_trtable = true;
+
+         dest_states_nl[i] = re_acquire_state_context (&err, dfa, &follows,
+                                                       CONTEXT_NEWLINE);
+         if (BE (dest_states_nl[i] == NULL && err != REG_NOERROR, 0))
+           goto out_free;
+       }
+      else
+       {
+         dest_states_word[i] = dest_states[i];
+         dest_states_nl[i] = dest_states[i];
+       }
+      bitset_merge (acceptable, dests_ch[i]);
+    }
+
+  if (!BE (need_word_trtable, 0))
+    {
+      /* We don't care about whether the following character is a word
+        character, or we are in a single-byte character set so we can
+        discern by looking at the character code: allocate a
+        256-entry transition table.  */
+      trtable = state->trtable =
+       (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX);
+      if (BE (trtable == NULL, 0))
+       goto out_free;
+
+      /* For all characters ch...:  */
+      for (i = 0; i < BITSET_WORDS; ++i)
+       for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1;
+            elem;
+            mask <<= 1, elem >>= 1, ++ch)
+         if (BE (elem & 1, 0))
+           {
+             /* There must be exactly one destination which accepts
+                character ch.  See group_nodes_into_DFAstates.  */
+             for (j = 0; (dests_ch[j][i] & mask) == 0; ++j)
+               ;
+
+             /* j-th destination accepts the word character ch.  */
+             if (dfa->word_char[i] & mask)
+               trtable[ch] = dest_states_word[j];
+             else
+               trtable[ch] = dest_states[j];
+           }
+    }
+  else
+    {
+      /* We care about whether the following character is a word
+        character, and we are in a multi-byte character set: discern
+        by looking at the character code: build two 256-entry
+        transition tables, one starting at trtable[0] and one
+        starting at trtable[SBC_MAX].  */
+      trtable = state->word_trtable =
+       (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), 2 * SBC_MAX);
+      if (BE (trtable == NULL, 0))
+       goto out_free;
+
+      /* For all characters ch...:  */
+      for (i = 0; i < BITSET_WORDS; ++i)
+       for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1;
+            elem;
+            mask <<= 1, elem >>= 1, ++ch)
+         if (BE (elem & 1, 0))
+           {
+             /* There must be exactly one destination which accepts
+                character ch.  See group_nodes_into_DFAstates.  */
+             for (j = 0; (dests_ch[j][i] & mask) == 0; ++j)
+               ;
+
+             /* j-th destination accepts the word character ch.  */
+             trtable[ch] = dest_states[j];
+             trtable[ch + SBC_MAX] = dest_states_word[j];
+           }
+    }
+
+  /* new line */
+  if (bitset_contain (acceptable, NEWLINE_CHAR))
+    {
+      /* The current state accepts newline character.  */
+      for (j = 0; j < ndests; ++j)
+       if (bitset_contain (dests_ch[j], NEWLINE_CHAR))
+         {
+           /* k-th destination accepts newline character.  */
+           trtable[NEWLINE_CHAR] = dest_states_nl[j];
+           if (need_word_trtable)
+             trtable[NEWLINE_CHAR + SBC_MAX] = dest_states_nl[j];
+           /* There must be only one destination which accepts
+              newline.  See group_nodes_into_DFAstates.  */
+           break;
+         }
+    }
+
+  if (dest_states_malloced)
+    free (dest_states);
+
+  re_node_set_free (&follows);
+  for (i = 0; i < ndests; ++i)
+    re_node_set_free (dests_node + i);
+
+  if (dests_node_malloced)
+    free (dests_alloc);
+
+  return true;
+}
+
+/* Group all nodes belonging to STATE into several destinations.
+   Then for all destinations, set the nodes belonging to the destination
+   to DESTS_NODE[i] and set the characters accepted by the destination
+   to DEST_CH[i].  This function return the number of destinations.  */
+
+static Idx
+internal_function
+group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state,
+                           re_node_set *dests_node, bitset_t *dests_ch)
+{
+  reg_errcode_t err;
+  bool ok;
+  Idx i, j, k;
+  Idx ndests; /* Number of the destinations from `state'.  */
+  bitset_t accepts; /* Characters a node can accept.  */
+  const re_node_set *cur_nodes = &state->nodes;
+  bitset_empty (accepts);
+  ndests = 0;
+
+  /* For all the nodes belonging to `state',  */
+  for (i = 0; i < cur_nodes->nelem; ++i)
+    {
+      re_token_t *node = &dfa->nodes[cur_nodes->elems[i]];
+      re_token_type_t type = node->type;
+      unsigned int constraint = node->constraint;
+
+      /* Enumerate all single byte character this node can accept.  */
+      if (type == CHARACTER)
+       bitset_set (accepts, node->opr.c);
+      else if (type == SIMPLE_BRACKET)
+       {
+         bitset_merge (accepts, node->opr.sbcset);
+       }
+      else if (type == OP_PERIOD)
+       {
+#ifdef RE_ENABLE_I18N
+         if (dfa->mb_cur_max > 1)
+           bitset_merge (accepts, dfa->sb_char);
+         else
+#endif
+           bitset_set_all (accepts);
+         if (!(dfa->syntax & RE_DOT_NEWLINE))
+           bitset_clear (accepts, '\n');
+         if (dfa->syntax & RE_DOT_NOT_NULL)
+           bitset_clear (accepts, '\0');
+       }
+#ifdef RE_ENABLE_I18N
+      else if (type == OP_UTF8_PERIOD)
+       {
+         if (ASCII_CHARS % BITSET_WORD_BITS == 0)
+           memset (accepts, -1, ASCII_CHARS / CHAR_BIT);
+         else
+           bitset_merge (accepts, utf8_sb_map);
+         if (!(dfa->syntax & RE_DOT_NEWLINE))
+           bitset_clear (accepts, '\n');
+         if (dfa->syntax & RE_DOT_NOT_NULL)
+           bitset_clear (accepts, '\0');
+       }
+#endif
+      else
+       continue;
+
+      /* Check the `accepts' and sift the characters which are not
+        match it the context.  */
+      if (constraint)
+       {
+         if (constraint & NEXT_NEWLINE_CONSTRAINT)
+           {
+             bool accepts_newline = bitset_contain (accepts, NEWLINE_CHAR);
+             bitset_empty (accepts);
+             if (accepts_newline)
+               bitset_set (accepts, NEWLINE_CHAR);
+             else
+               continue;
+           }
+         if (constraint & NEXT_ENDBUF_CONSTRAINT)
+           {
+             bitset_empty (accepts);
+             continue;
+           }
+
+         if (constraint & NEXT_WORD_CONSTRAINT)
+           {
+             bitset_word_t any_set = 0;
+             if (type == CHARACTER && !node->word_char)
+               {
+                 bitset_empty (accepts);
+                 continue;
+               }
+#ifdef RE_ENABLE_I18N
+             if (dfa->mb_cur_max > 1)
+               for (j = 0; j < BITSET_WORDS; ++j)
+                 any_set |= (accepts[j] &= (dfa->word_char[j] | ~dfa->sb_char[j]));
+             else
+#endif
+               for (j = 0; j < BITSET_WORDS; ++j)
+                 any_set |= (accepts[j] &= dfa->word_char[j]);
+             if (!any_set)
+               continue;
+           }
+         if (constraint & NEXT_NOTWORD_CONSTRAINT)
+           {
+             bitset_word_t any_set = 0;
+             if (type == CHARACTER && node->word_char)
+               {
+                 bitset_empty (accepts);
+                 continue;
+               }
+#ifdef RE_ENABLE_I18N
+             if (dfa->mb_cur_max > 1)
+               for (j = 0; j < BITSET_WORDS; ++j)
+                 any_set |= (accepts[j] &= ~(dfa->word_char[j] & dfa->sb_char[j]));
+             else
+#endif
+               for (j = 0; j < BITSET_WORDS; ++j)
+                 any_set |= (accepts[j] &= ~dfa->word_char[j]);
+             if (!any_set)
+               continue;
+           }
+       }
+
+      /* Then divide `accepts' into DFA states, or create a new
+        state.  Above, we make sure that accepts is not empty.  */
+      for (j = 0; j < ndests; ++j)
+       {
+         bitset_t intersec; /* Intersection sets, see below.  */
+         bitset_t remains;
+         /* Flags, see below.  */
+         bitset_word_t has_intersec, not_subset, not_consumed;
+
+         /* Optimization, skip if this state doesn't accept the character.  */
+         if (type == CHARACTER && !bitset_contain (dests_ch[j], node->opr.c))
+           continue;
+
+         /* Enumerate the intersection set of this state and `accepts'.  */
+         has_intersec = 0;
+         for (k = 0; k < BITSET_WORDS; ++k)
+           has_intersec |= intersec[k] = accepts[k] & dests_ch[j][k];
+         /* And skip if the intersection set is empty.  */
+         if (!has_intersec)
+           continue;
+
+         /* Then check if this state is a subset of `accepts'.  */
+         not_subset = not_consumed = 0;
+         for (k = 0; k < BITSET_WORDS; ++k)
+           {
+             not_subset |= remains[k] = ~accepts[k] & dests_ch[j][k];
+             not_consumed |= accepts[k] = accepts[k] & ~dests_ch[j][k];
+           }
+
+         /* If this state isn't a subset of `accepts', create a
+            new group state, which has the `remains'. */
+         if (not_subset)
+           {
+             bitset_copy (dests_ch[ndests], remains);
+             bitset_copy (dests_ch[j], intersec);
+             err = re_node_set_init_copy (dests_node + ndests, &dests_node[j]);
+             if (BE (err != REG_NOERROR, 0))
+               goto error_return;
+             ++ndests;
+           }
+
+         /* Put the position in the current group. */
+         ok = re_node_set_insert (&dests_node[j], cur_nodes->elems[i]);
+         if (BE (! ok, 0))
+           goto error_return;
+
+         /* If all characters are consumed, go to next node. */
+         if (!not_consumed)
+           break;
+       }
+      /* Some characters remain, create a new group. */
+      if (j == ndests)
+       {
+         bitset_copy (dests_ch[ndests], accepts);
+         err = re_node_set_init_1 (dests_node + ndests, cur_nodes->elems[i]);
+         if (BE (err != REG_NOERROR, 0))
+           goto error_return;
+         ++ndests;
+         bitset_empty (accepts);
+       }
+    }
+  return ndests;
+ error_return:
+  for (j = 0; j < ndests; ++j)
+    re_node_set_free (dests_node + j);
+  return REG_MISSING;
+}
+
+#ifdef RE_ENABLE_I18N
+/* Check how many bytes the node `dfa->nodes[node_idx]' accepts.
+   Return the number of the bytes the node accepts.
+   STR_IDX is the current index of the input string.
+
+   This function handles the nodes which can accept one character, or
+   one collating element like '.', '[a-z]', opposite to the other nodes
+   can only accept one byte.  */
+
+static int
+internal_function
+check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx,
+                        const re_string_t *input, Idx str_idx)
+{
+  const re_token_t *node = dfa->nodes + node_idx;
+  int char_len, elem_len;
+  Idx i;
+
+  if (BE (node->type == OP_UTF8_PERIOD, 0))
+    {
+      unsigned char c = re_string_byte_at (input, str_idx), d;
+      if (BE (c < 0xc2, 1))
+       return 0;
+
+      if (str_idx + 2 > input->len)
+       return 0;
+
+      d = re_string_byte_at (input, str_idx + 1);
+      if (c < 0xe0)
+       return (d < 0x80 || d > 0xbf) ? 0 : 2;
+      else if (c < 0xf0)
+       {
+         char_len = 3;
+         if (c == 0xe0 && d < 0xa0)
+           return 0;
+       }
+      else if (c < 0xf8)
+       {
+         char_len = 4;
+         if (c == 0xf0 && d < 0x90)
+           return 0;
+       }
+      else if (c < 0xfc)
+       {
+         char_len = 5;
+         if (c == 0xf8 && d < 0x88)
+           return 0;
+       }
+      else if (c < 0xfe)
+       {
+         char_len = 6;
+         if (c == 0xfc && d < 0x84)
+           return 0;
+       }
+      else
+       return 0;
+
+      if (str_idx + char_len > input->len)
+       return 0;
+
+      for (i = 1; i < char_len; ++i)
+       {
+         d = re_string_byte_at (input, str_idx + i);
+         if (d < 0x80 || d > 0xbf)
+           return 0;
+       }
+      return char_len;
+    }
+
+  char_len = re_string_char_size_at (input, str_idx);
+  if (node->type == OP_PERIOD)
+    {
+      if (char_len <= 1)
+       return 0;
+      /* FIXME: I don't think this if is needed, as both '\n'
+        and '\0' are char_len == 1.  */
+      /* '.' accepts any one character except the following two cases.  */
+      if ((!(dfa->syntax & RE_DOT_NEWLINE) &&
+          re_string_byte_at (input, str_idx) == '\n') ||
+         ((dfa->syntax & RE_DOT_NOT_NULL) &&
+          re_string_byte_at (input, str_idx) == '\0'))
+       return 0;
+      return char_len;
+    }
+
+  elem_len = re_string_elem_size_at (input, str_idx);
+  if ((elem_len <= 1 && char_len <= 1) || char_len == 0)
+    return 0;
+
+  if (node->type == COMPLEX_BRACKET)
+    {
+      const re_charset_t *cset = node->opr.mbcset;
+# ifdef _LIBC
+      const unsigned char *pin
+       = ((const unsigned char *) re_string_get_buffer (input) + str_idx);
+      Idx j;
+      uint32_t nrules;
+# endif /* _LIBC */
+      int match_len = 0;
+      wchar_t wc = ((cset->nranges || cset->nchar_classes || cset->nmbchars)
+                   ? re_string_wchar_at (input, str_idx) : 0);
+
+      /* match with multibyte character?  */
+      for (i = 0; i < cset->nmbchars; ++i)
+       if (wc == cset->mbchars[i])
+         {
+           match_len = char_len;
+           goto check_node_accept_bytes_match;
+         }
+      /* match with character_class?  */
+      for (i = 0; i < cset->nchar_classes; ++i)
+       {
+         wctype_t wt = cset->char_classes[i];
+         if (__iswctype (wc, wt))
+           {
+             match_len = char_len;
+             goto check_node_accept_bytes_match;
+           }
+       }
+
+# ifdef _LIBC
+      nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+      if (nrules != 0)
+       {
+         unsigned int in_collseq = 0;
+         const int32_t *table, *indirect;
+         const unsigned char *weights, *extra;
+         const char *collseqwc;
+         int32_t idx;
+         /* This #include defines a local function!  */
+#  include <locale/weight.h>
+
+         /* match with collating_symbol?  */
+         if (cset->ncoll_syms)
+           extra = (const unsigned char *)
+             _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB);
+         for (i = 0; i < cset->ncoll_syms; ++i)
+           {
+             const unsigned char *coll_sym = extra + cset->coll_syms[i];
+             /* Compare the length of input collating element and
+                the length of current collating element.  */
+             if (*coll_sym != elem_len)
+               continue;
+             /* Compare each bytes.  */
+             for (j = 0; j < *coll_sym; j++)
+               if (pin[j] != coll_sym[1 + j])
+                 break;
+             if (j == *coll_sym)
+               {
+                 /* Match if every bytes is equal.  */
+                 match_len = j;
+                 goto check_node_accept_bytes_match;
+               }
+           }
+
+         if (cset->nranges)
+           {
+             if (elem_len <= char_len)
+               {
+                 collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC);
+                 in_collseq = __collseq_table_lookup (collseqwc, wc);
+               }
+             else
+               in_collseq = find_collation_sequence_value (pin, elem_len);
+           }
+         /* match with range expression?  */
+         for (i = 0; i < cset->nranges; ++i)
+           if (cset->range_starts[i] <= in_collseq
+               && in_collseq <= cset->range_ends[i])
+             {
+               match_len = elem_len;
+               goto check_node_accept_bytes_match;
+             }
+
+         /* match with equivalence_class?  */
+         if (cset->nequiv_classes)
+           {
+             const unsigned char *cp = pin;
+             table = (const int32_t *)
+               _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
+             weights = (const unsigned char *)
+               _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB);
+             extra = (const unsigned char *)
+               _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
+             indirect = (const int32_t *)
+               _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB);
+             int32_t idx = findidx (&cp);
+             if (idx > 0)
+               for (i = 0; i < cset->nequiv_classes; ++i)
+                 {
+                   int32_t equiv_class_idx = cset->equiv_classes[i];
+                   size_t weight_len = weights[idx & 0xffffff];
+                   if (weight_len == weights[equiv_class_idx & 0xffffff]
+                       && (idx >> 24) == (equiv_class_idx >> 24))
+                     {
+                       Idx cnt = 0;
+
+                       idx &= 0xffffff;
+                       equiv_class_idx &= 0xffffff;
+
+                       while (cnt <= weight_len
+                              && (weights[equiv_class_idx + 1 + cnt]
+                                  == weights[idx + 1 + cnt]))
+                         ++cnt;
+                       if (cnt > weight_len)
+                         {
+                           match_len = elem_len;
+                           goto check_node_accept_bytes_match;
+                         }
+                     }
+                 }
+           }
+       }
+      else
+# endif /* _LIBC */
+       {
+         /* match with range expression?  */
+#if __GNUC__ >= 2 && ! (__STDC_VERSION__ < 199901L && __STRICT_ANSI__)
+         wchar_t cmp_buf[] = {L'\0', L'\0', wc, L'\0', L'\0', L'\0'};
+#else
+         wchar_t cmp_buf[] = {L'\0', L'\0', L'\0', L'\0', L'\0', L'\0'};
+         cmp_buf[2] = wc;
+#endif
+         for (i = 0; i < cset->nranges; ++i)
+           {
+             cmp_buf[0] = cset->range_starts[i];
+             cmp_buf[4] = cset->range_ends[i];
+             if (wcscoll (cmp_buf, cmp_buf + 2) <= 0
+                 && wcscoll (cmp_buf + 2, cmp_buf + 4) <= 0)
+               {
+                 match_len = char_len;
+                 goto check_node_accept_bytes_match;
+               }
+           }
+       }
+    check_node_accept_bytes_match:
+      if (!cset->non_match)
+       return match_len;
+      else
+       {
+         if (match_len > 0)
+           return 0;
+         else
+           return (elem_len > char_len) ? elem_len : char_len;
+       }
+    }
+  return 0;
+}
+
+# ifdef _LIBC
+static unsigned int
+internal_function
+find_collation_sequence_value (const unsigned char *mbs, size_t mbs_len)
+{
+  uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+  if (nrules == 0)
+    {
+      if (mbs_len == 1)
+       {
+         /* No valid character.  Match it as a single byte character.  */
+         const unsigned char *collseq = (const unsigned char *)
+           _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB);
+         return collseq[mbs[0]];
+       }
+      return UINT_MAX;
+    }
+  else
+    {
+      int32_t idx;
+      const unsigned char *extra = (const unsigned char *)
+       _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB);
+      int32_t extrasize = (const unsigned char *)
+       _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB + 1) - extra;
+
+      for (idx = 0; idx < extrasize;)
+       {
+         int mbs_cnt;
+         bool found = false;
+         int32_t elem_mbs_len;
+         /* Skip the name of collating element name.  */
+         idx = idx + extra[idx] + 1;
+         elem_mbs_len = extra[idx++];
+         if (mbs_len == elem_mbs_len)
+           {
+             for (mbs_cnt = 0; mbs_cnt < elem_mbs_len; ++mbs_cnt)
+               if (extra[idx + mbs_cnt] != mbs[mbs_cnt])
+                 break;
+             if (mbs_cnt == elem_mbs_len)
+               /* Found the entry.  */
+               found = true;
+           }
+         /* Skip the byte sequence of the collating element.  */
+         idx += elem_mbs_len;
+         /* Adjust for the alignment.  */
+         idx = (idx + 3) & ~3;
+         /* Skip the collation sequence value.  */
+         idx += sizeof (uint32_t);
+         /* Skip the wide char sequence of the collating element.  */
+         idx = idx + sizeof (uint32_t) * (extra[idx] + 1);
+         /* If we found the entry, return the sequence value.  */
+         if (found)
+           return *(uint32_t *) (extra + idx);
+         /* Skip the collation sequence value.  */
+         idx += sizeof (uint32_t);
+       }
+      return UINT_MAX;
+    }
+}
+# endif /* _LIBC */
+#endif /* RE_ENABLE_I18N */
+
+/* Check whether the node accepts the byte which is IDX-th
+   byte of the INPUT.  */
+
+static bool
+internal_function
+check_node_accept (const re_match_context_t *mctx, const re_token_t *node,
+                  Idx idx)
+{
+  unsigned char ch;
+  ch = re_string_byte_at (&mctx->input, idx);
+  switch (node->type)
+    {
+    case CHARACTER:
+      if (node->opr.c != ch)
+        return false;
+      break;
+
+    case SIMPLE_BRACKET:
+      if (!bitset_contain (node->opr.sbcset, ch))
+        return false;
+      break;
+
+#ifdef RE_ENABLE_I18N
+    case OP_UTF8_PERIOD:
+      if (ch >= ASCII_CHARS)
+        return false;
+      /* FALLTHROUGH */
+#endif
+    case OP_PERIOD:
+      if ((ch == '\n' && !(mctx->dfa->syntax & RE_DOT_NEWLINE))
+         || (ch == '\0' && (mctx->dfa->syntax & RE_DOT_NOT_NULL)))
+       return false;
+      break;
+
+    default:
+      return false;
+    }
+
+  if (node->constraint)
+    {
+      /* The node has constraints.  Check whether the current context
+        satisfies the constraints.  */
+      unsigned int context = re_string_context_at (&mctx->input, idx,
+                                                  mctx->eflags);
+      if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context))
+       return false;
+    }
+
+  return true;
+}
+
+/* Extend the buffers, if the buffers have run out.  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+extend_buffers (re_match_context_t *mctx)
+{
+  reg_errcode_t ret;
+  re_string_t *pstr = &mctx->input;
+
+  /* Avoid overflow.  */
+  if (BE (SIZE_MAX / 2 / sizeof (re_dfastate_t *) <= pstr->bufs_len, 0))
+    return REG_ESPACE;
+
+  /* Double the lengthes of the buffers.  */
+  ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2);
+  if (BE (ret != REG_NOERROR, 0))
+    return ret;
+
+  if (mctx->state_log != NULL)
+    {
+      /* And double the length of state_log.  */
+      /* XXX We have no indication of the size of this buffer.  If this
+        allocation fail we have no indication that the state_log array
+        does not have the right size.  */
+      re_dfastate_t **new_array = re_realloc (mctx->state_log, re_dfastate_t *,
+                                             pstr->bufs_len + 1);
+      if (BE (new_array == NULL, 0))
+       return REG_ESPACE;
+      mctx->state_log = new_array;
+    }
+
+  /* Then reconstruct the buffers.  */
+  if (pstr->icase)
+    {
+#ifdef RE_ENABLE_I18N
+      if (pstr->mb_cur_max > 1)
+       {
+         ret = build_wcs_upper_buffer (pstr);
+         if (BE (ret != REG_NOERROR, 0))
+           return ret;
+       }
+      else
+#endif /* RE_ENABLE_I18N  */
+       build_upper_buffer (pstr);
+    }
+  else
+    {
+#ifdef RE_ENABLE_I18N
+      if (pstr->mb_cur_max > 1)
+       build_wcs_buffer (pstr);
+      else
+#endif /* RE_ENABLE_I18N  */
+       {
+         if (pstr->trans != NULL)
+           re_string_translate_buffer (pstr);
+       }
+    }
+  return REG_NOERROR;
+}
+
+\f
+/* Functions for matching context.  */
+
+/* Initialize MCTX.  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+match_ctx_init (re_match_context_t *mctx, int eflags, Idx n)
+{
+  mctx->eflags = eflags;
+  mctx->match_last = REG_MISSING;
+  if (n > 0)
+    {
+      /* Avoid overflow.  */
+      size_t max_object_size =
+       MAX (sizeof (struct re_backref_cache_entry),
+            sizeof (re_sub_match_top_t *));
+      if (BE (SIZE_MAX / max_object_size < n, 0))
+       return REG_ESPACE;
+
+      mctx->bkref_ents = re_malloc (struct re_backref_cache_entry, n);
+      mctx->sub_tops = re_malloc (re_sub_match_top_t *, n);
+      if (BE (mctx->bkref_ents == NULL || mctx->sub_tops == NULL, 0))
+       return REG_ESPACE;
+    }
+  /* Already zero-ed by the caller.
+     else
+       mctx->bkref_ents = NULL;
+     mctx->nbkref_ents = 0;
+     mctx->nsub_tops = 0;  */
+  mctx->abkref_ents = n;
+  mctx->max_mb_elem_len = 1;
+  mctx->asub_tops = n;
+  return REG_NOERROR;
+}
+
+/* Clean the entries which depend on the current input in MCTX.
+   This function must be invoked when the matcher changes the start index
+   of the input, or changes the input string.  */
+
+static void
+internal_function
+match_ctx_clean (re_match_context_t *mctx)
+{
+  Idx st_idx;
+  for (st_idx = 0; st_idx < mctx->nsub_tops; ++st_idx)
+    {
+      Idx sl_idx;
+      re_sub_match_top_t *top = mctx->sub_tops[st_idx];
+      for (sl_idx = 0; sl_idx < top->nlasts; ++sl_idx)
+       {
+         re_sub_match_last_t *last = top->lasts[sl_idx];
+         re_free (last->path.array);
+         re_free (last);
+       }
+      re_free (top->lasts);
+      if (top->path)
+       {
+         re_free (top->path->array);
+         re_free (top->path);
+       }
+      free (top);
+    }
+
+  mctx->nsub_tops = 0;
+  mctx->nbkref_ents = 0;
+}
+
+/* Free all the memory associated with MCTX.  */
+
+static void
+internal_function
+match_ctx_free (re_match_context_t *mctx)
+{
+  /* First, free all the memory associated with MCTX->SUB_TOPS.  */
+  match_ctx_clean (mctx);
+  re_free (mctx->sub_tops);
+  re_free (mctx->bkref_ents);
+}
+
+/* Add a new backreference entry to MCTX.
+   Note that we assume that caller never call this function with duplicate
+   entry, and call with STR_IDX which isn't smaller than any existing entry.
+*/
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+match_ctx_add_entry (re_match_context_t *mctx, Idx node, Idx str_idx, Idx from,
+                    Idx to)
+{
+  if (mctx->nbkref_ents >= mctx->abkref_ents)
+    {
+      struct re_backref_cache_entry* new_entry;
+      new_entry = re_realloc (mctx->bkref_ents, struct re_backref_cache_entry,
+                             mctx->abkref_ents * 2);
+      if (BE (new_entry == NULL, 0))
+       {
+         re_free (mctx->bkref_ents);
+         return REG_ESPACE;
+       }
+      mctx->bkref_ents = new_entry;
+      memset (mctx->bkref_ents + mctx->nbkref_ents, '\0',
+             sizeof (struct re_backref_cache_entry) * mctx->abkref_ents);
+      mctx->abkref_ents *= 2;
+    }
+  if (mctx->nbkref_ents > 0
+      && mctx->bkref_ents[mctx->nbkref_ents - 1].str_idx == str_idx)
+    mctx->bkref_ents[mctx->nbkref_ents - 1].more = 1;
+
+  mctx->bkref_ents[mctx->nbkref_ents].node = node;
+  mctx->bkref_ents[mctx->nbkref_ents].str_idx = str_idx;
+  mctx->bkref_ents[mctx->nbkref_ents].subexp_from = from;
+  mctx->bkref_ents[mctx->nbkref_ents].subexp_to = to;
+
+  /* This is a cache that saves negative results of check_dst_limits_calc_pos.
+     If bit N is clear, means that this entry won't epsilon-transition to
+     an OP_OPEN_SUBEXP or OP_CLOSE_SUBEXP for the N+1-th subexpression.  If
+     it is set, check_dst_limits_calc_pos_1 will recurse and try to find one
+     such node.
+
+     A backreference does not epsilon-transition unless it is empty, so set
+     to all zeros if FROM != TO.  */
+  mctx->bkref_ents[mctx->nbkref_ents].eps_reachable_subexps_map
+    = (from == to ? -1 : 0);
+
+  mctx->bkref_ents[mctx->nbkref_ents++].more = 0;
+  if (mctx->max_mb_elem_len < to - from)
+    mctx->max_mb_elem_len = to - from;
+  return REG_NOERROR;
+}
+
+/* Return the first entry with the same str_idx, or REG_MISSING if none is
+   found.  Note that MCTX->BKREF_ENTS is already sorted by MCTX->STR_IDX.  */
+
+static Idx
+internal_function
+search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx)
+{
+  Idx left, right, mid, last;
+  last = right = mctx->nbkref_ents;
+  for (left = 0; left < right;)
+    {
+      mid = (left + right) / 2;
+      if (mctx->bkref_ents[mid].str_idx < str_idx)
+       left = mid + 1;
+      else
+       right = mid;
+    }
+  if (left < last && mctx->bkref_ents[left].str_idx == str_idx)
+    return left;
+  else
+    return REG_MISSING;
+}
+
+/* Register the node NODE, whose type is OP_OPEN_SUBEXP, and which matches
+   at STR_IDX.  */
+
+static reg_errcode_t
+internal_function __attribute_warn_unused_result__
+match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx)
+{
+#ifdef DEBUG
+  assert (mctx->sub_tops != NULL);
+  assert (mctx->asub_tops > 0);
+#endif
+  if (BE (mctx->nsub_tops == mctx->asub_tops, 0))
+    {
+      Idx new_asub_tops = mctx->asub_tops * 2;
+      re_sub_match_top_t **new_array = re_realloc (mctx->sub_tops,
+                                                  re_sub_match_top_t *,
+                                                  new_asub_tops);
+      if (BE (new_array == NULL, 0))
+       return REG_ESPACE;
+      mctx->sub_tops = new_array;
+      mctx->asub_tops = new_asub_tops;
+    }
+  mctx->sub_tops[mctx->nsub_tops] = calloc (1, sizeof (re_sub_match_top_t));
+  if (BE (mctx->sub_tops[mctx->nsub_tops] == NULL, 0))
+    return REG_ESPACE;
+  mctx->sub_tops[mctx->nsub_tops]->node = node;
+  mctx->sub_tops[mctx->nsub_tops++]->str_idx = str_idx;
+  return REG_NOERROR;
+}
+
+/* Register the node NODE, whose type is OP_CLOSE_SUBEXP, and which matches
+   at STR_IDX, whose corresponding OP_OPEN_SUBEXP is SUB_TOP.  */
+
+static re_sub_match_last_t *
+internal_function
+match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx)
+{
+  re_sub_match_last_t *new_entry;
+  if (BE (subtop->nlasts == subtop->alasts, 0))
+    {
+      Idx new_alasts = 2 * subtop->alasts + 1;
+      re_sub_match_last_t **new_array = re_realloc (subtop->lasts,
+                                                   re_sub_match_last_t *,
+                                                   new_alasts);
+      if (BE (new_array == NULL, 0))
+       return NULL;
+      subtop->lasts = new_array;
+      subtop->alasts = new_alasts;
+    }
+  new_entry = calloc (1, sizeof (re_sub_match_last_t));
+  if (BE (new_entry != NULL, 1))
+    {
+      subtop->lasts[subtop->nlasts] = new_entry;
+      new_entry->node = node;
+      new_entry->str_idx = str_idx;
+      ++subtop->nlasts;
+    }
+  return new_entry;
+}
+
+static void
+internal_function
+sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts,
+              re_dfastate_t **limited_sts, Idx last_node, Idx last_str_idx)
+{
+  sctx->sifted_states = sifted_sts;
+  sctx->limited_states = limited_sts;
+  sctx->last_node = last_node;
+  sctx->last_str_idx = last_str_idx;
+  re_node_set_init_empty (&sctx->limits);
+}
diff --git a/gnu/rmdir.c b/gnu/rmdir.c
new file mode 100644 (file)
index 0000000..5b1c095
--- /dev/null
@@ -0,0 +1,101 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Work around rmdir bugs.
+
+   Copyright (C) 1988, 1990, 1999, 2003-2006, 2009-2010 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>
+
+#include <unistd.h>
+
+#include <errno.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#undef rmdir
+
+/* Remove directory DIR.
+   Return 0 if successful, -1 if not.  */
+
+int
+rpl_rmdir (char const *dir)
+{
+#if HAVE_RMDIR
+  /* Work around cygwin 1.5.x bug where rmdir("dir/./") succeeds.  */
+  size_t len = strlen (dir);
+  int result;
+  while (len && ISSLASH (dir[len - 1]))
+    len--;
+  if (len && dir[len - 1] == '.' && (1 == len || ISSLASH (dir[len - 2])))
+    {
+      errno = EINVAL;
+      return -1;
+    }
+  result = rmdir (dir);
+  /* Work around mingw bug, where rmdir("file/") fails with EINVAL
+     instead of ENOTDIR.  We've already filtered out trailing ., the
+     only reason allowed by POSIX for EINVAL.  */
+  if (result == -1 && errno == EINVAL)
+    errno = ENOTDIR;
+  return result;
+
+#else /* !HAVE_RMDIR */
+  /* rmdir adapted from GNU tar.  FIXME: Delete this implementation in
+     2010 if no one reports a system with missing rmdir.  */
+  pid_t cpid;
+  int status;
+  struct stat statbuf;
+
+  if (stat (dir, &statbuf) != 0)
+    return -1;                  /* errno already set */
+
+  if (!S_ISDIR (statbuf.st_mode))
+    {
+      errno = ENOTDIR;
+      return -1;
+    }
+
+  cpid = fork ();
+  switch (cpid)
+    {
+    case -1:                    /* cannot fork */
+      return -1;                /* errno already set */
+
+    case 0:                     /* child process */
+      execl ("/bin/rmdir", "rmdir", dir, (char *) 0);
+      _exit (1);
+
+    default:                    /* parent process */
+
+      /* Wait for kid to finish.  */
+
+      while (wait (&status) != cpid)
+        /* Do nothing.  */ ;
+
+      if (status)
+        {
+
+          /* /bin/rmdir failed.  */
+
+          errno = EIO;
+          return -1;
+        }
+      return 0;
+    }
+#endif /* !HAVE_RMDIR */
+}
diff --git a/gnu/rpmatch.c b/gnu/rpmatch.c
new file mode 100644 (file)
index 0000000..d002a03
--- /dev/null
@@ -0,0 +1,175 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Determine whether string value is affirmation or negative response
+   according to current locale's data.
+
+   Copyright (C) 1996, 1998, 2000, 2002-2003, 2006-2010 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 <stdlib.h>
+
+#include <stdbool.h>
+#include <stddef.h>
+
+#if ENABLE_NLS
+# include <sys/types.h>
+# include <limits.h>
+# include <string.h>
+# if HAVE_LANGINFO_YESEXPR
+#  include <langinfo.h>
+# endif
+# include <regex.h>
+# include "gettext.h"
+# define _(msgid) gettext (msgid)
+# define N_(msgid) gettext_noop (msgid)
+
+# if HAVE_LANGINFO_YESEXPR
+/* Return the localized regular expression pattern corresponding to
+   ENGLISH_PATTERN.  NL_INDEX can be used with nl_langinfo.
+   The resulting string may only be used until the next nl_langinfo call.  */
+static const char *
+localized_pattern (const char *english_pattern, nl_item nl_index,
+                   bool posixly_correct)
+{
+  const char *translated_pattern;
+
+  /* We prefer to get the patterns from a PO file.  It would be possible to
+     always use nl_langinfo (YESEXPR) instead of _("^[yY]"), and
+     nl_langinfo (NOEXPR) instead of _("^[nN]"), if we could assume that the
+     system's locale support is good.  But this is not the case e.g. on Cygwin.
+     The localizations of gnulib.pot are of better quality in general.
+     Also, if we use locale info from non-free systems that don't have a
+     'localedef' command, we deprive the users of the freedom to localize
+     this pattern for their preferred language.
+     But some programs, such as 'cp', 'mv', 'rm', 'find', 'xargs', are
+     specified by POSIX to use nl_langinfo (YESEXPR).  We implement this
+     behaviour if POSIXLY_CORRECT is set, for the sake of these programs.  */
+
+  /* If the user wants strict POSIX compliance, use nl_langinfo.  */
+  if (posixly_correct)
+    {
+      translated_pattern = nl_langinfo (nl_index);
+      /* Check against a broken system return value.  */
+      if (translated_pattern != NULL && translated_pattern[0] != '\0')
+        return translated_pattern;
+   }
+
+  /* Look in the gnulib message catalog.  */
+  translated_pattern = _(english_pattern);
+  if (translated_pattern == english_pattern)
+    {
+      /* The gnulib message catalog provides no translation.
+         Try the system's message catalog.  */
+      translated_pattern = nl_langinfo (nl_index);
+      /* Check against a broken system return value.  */
+      if (translated_pattern != NULL && translated_pattern[0] != '\0')
+        return translated_pattern;
+      /* Fall back to English.  */
+      translated_pattern = english_pattern;
+    }
+  return translated_pattern;
+}
+# else
+#  define localized_pattern(english_pattern,nl_index,posixly_correct) \
+     _(english_pattern)
+# endif
+
+static int
+try (const char *response, const char *pattern, char **lastp, regex_t *re)
+{
+  if (*lastp == NULL || strcmp (pattern, *lastp) != 0)
+    {
+      char *safe_pattern;
+
+      /* The pattern has changed.  */
+      if (*lastp != NULL)
+        {
+          /* Free the old compiled pattern.  */
+          regfree (re);
+          free (*lastp);
+          *lastp = NULL;
+        }
+      /* Put the PATTERN into safe memory before calling regcomp.
+         (regcomp may call nl_langinfo, overwriting PATTERN's storage.  */
+      safe_pattern = strdup (pattern);
+      if (safe_pattern == NULL)
+        return -1;
+      /* Compile the pattern and cache it for future runs.  */
+      if (regcomp (re, safe_pattern, REG_EXTENDED) != 0)
+        return -1;
+      *lastp = safe_pattern;
+    }
+
+  /* See if the regular expression matches RESPONSE.  */
+  return regexec (re, response, 0, NULL, 0) == 0;
+}
+#endif
+
+
+int
+rpmatch (const char *response)
+{
+#if ENABLE_NLS
+  /* Match against one of the response patterns, compiling the pattern
+     first if necessary.  */
+
+  /* We cache the response patterns and compiled regexps here.  */
+  static char *last_yesexpr, *last_noexpr;
+  static regex_t cached_yesre, cached_nore;
+
+# if HAVE_LANGINFO_YESEXPR
+  bool posixly_correct = (getenv ("POSIXLY_CORRECT") != NULL);
+# endif
+
+  const char *yesexpr, *noexpr;
+  int result;
+
+  /* TRANSLATORS: A regular expression testing for an affirmative answer
+     (english: "yes").  Testing the first character may be sufficient.
+     Take care to consider upper and lower case.
+     To enquire the regular expression that your system uses for this
+     purpose, you can use the command
+       locale -k LC_MESSAGES | grep '^yesexpr='  */
+  yesexpr = localized_pattern (N_("^[yY]"), YESEXPR, posixly_correct);
+  result = try (response, yesexpr, &last_yesexpr, &cached_yesre);
+  if (result < 0)
+    return -1;
+  if (result)
+    return 1;
+
+  /* TRANSLATORS: A regular expression testing for a negative answer
+     (english: "no").  Testing the first character may be sufficient.
+     Take care to consider upper and lower case.
+     To enquire the regular expression that your system uses for this
+     purpose, you can use the command
+       locale -k LC_MESSAGES | grep '^noexpr='  */
+  noexpr = localized_pattern (N_("^[nN]"), NOEXPR, posixly_correct);
+  result = try (response, noexpr, &last_noexpr, &cached_nore);
+  if (result < 0)
+    return -1;
+  if (result)
+    return 0;
+
+  return -1;
+#else
+  /* Test against "^[yY]" and "^[nN]", hardcoded to avoid requiring regex */
+  return (*response == 'y' || *response == 'Y' ? 1
+          : *response == 'n' || *response == 'N' ? 0 : -1);
+#endif
+}
diff --git a/gnu/safe-read.c b/gnu/safe-read.c
new file mode 100644 (file)
index 0000000..6cfec24
--- /dev/null
@@ -0,0 +1,79 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* An interface to read and write that retries after interrupts.
+
+   Copyright (C) 1993-1994, 1998, 2002-2006, 2009-2010 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.  */
+#ifdef SAFE_WRITE
+# include "safe-write.h"
+#else
+# include "safe-read.h"
+#endif
+
+/* Get ssize_t.  */
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <errno.h>
+
+#ifdef EINTR
+# define IS_EINTR(x) ((x) == EINTR)
+#else
+# define IS_EINTR(x) 0
+#endif
+
+#include <limits.h>
+
+#ifdef SAFE_WRITE
+# define safe_rw safe_write
+# define rw write
+#else
+# define safe_rw safe_read
+# define rw read
+# undef const
+# define const /* empty */
+#endif
+
+/* Read(write) up to COUNT bytes at BUF from(to) descriptor FD, retrying if
+   interrupted.  Return the actual number of bytes read(written), zero for EOF,
+   or SAFE_READ_ERROR(SAFE_WRITE_ERROR) upon error.  */
+size_t
+safe_rw (int fd, void const *buf, size_t count)
+{
+  /* Work around a bug in Tru64 5.1.  Attempting to read more than
+     INT_MAX bytes fails with errno == EINVAL.  See
+     <http://lists.gnu.org/archive/html/bug-gnu-utils/2002-04/msg00010.html>.
+     When decreasing COUNT, keep it block-aligned.  */
+  enum { BUGGY_READ_MAXIMUM = INT_MAX & ~8191 };
+
+  for (;;)
+    {
+      ssize_t result = rw (fd, buf, count);
+
+      if (0 <= result)
+        return result;
+      else if (IS_EINTR (errno))
+        continue;
+      else if (errno == EINVAL && BUGGY_READ_MAXIMUM < count)
+        count = BUGGY_READ_MAXIMUM;
+      else
+        return result;
+    }
+}
diff --git a/gnu/safe-read.h b/gnu/safe-read.h
new file mode 100644 (file)
index 0000000..a6dddf4
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* An interface to read() that retries after interrupts.
+   Copyright (C) 2002, 2006, 2009-2010 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 <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define SAFE_READ_ERROR ((size_t) -1)
+
+/* Read up to COUNT bytes at BUF from descriptor FD, retrying if interrupted.
+   Return the actual number of bytes read, zero for EOF, or SAFE_READ_ERROR
+   upon error.  */
+extern size_t safe_read (int fd, void *buf, size_t count);
+
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/gnu/safe-write.c b/gnu/safe-write.c
new file mode 100644 (file)
index 0000000..d5e05c8
--- /dev/null
@@ -0,0 +1,20 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* An interface to write that retries after interrupts.
+   Copyright (C) 2002, 2009-2010 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/>.  */
+
+#define SAFE_WRITE
+#include "safe-read.c"
diff --git a/gnu/safe-write.h b/gnu/safe-write.h
new file mode 100644 (file)
index 0000000..3e74442
--- /dev/null
@@ -0,0 +1,26 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* An interface to write() that retries after interrupts.
+   Copyright (C) 2002, 2009-2010 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 <stddef.h>
+
+#define SAFE_WRITE_ERROR ((size_t) -1)
+
+/* Write up to COUNT bytes at BUF to descriptor FD, retrying if interrupted.
+   Return the actual number of bytes written, zero for EOF, or SAFE_WRITE_ERROR
+   upon error.  */
+extern size_t safe_write (int fd, const void *buf, size_t count);
diff --git a/gnu/same-inode.h b/gnu/same-inode.h
new file mode 100644 (file)
index 0000000..3db599a
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Determine whether two stat buffers refer to the same file.
+
+   Copyright (C) 2006, 2009-2010 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 SAME_INODE_H
+# define SAME_INODE_H 1
+
+# define SAME_INODE(Stat_buf_1, Stat_buf_2) \
+   ((Stat_buf_1).st_ino == (Stat_buf_2).st_ino \
+    && (Stat_buf_1).st_dev == (Stat_buf_2).st_dev)
+
+#endif
diff --git a/gnu/same.c b/gnu/same.c
new file mode 100644 (file)
index 0000000..5d9c585
--- /dev/null
@@ -0,0 +1,125 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Determine whether two file names refer to the same file.
+
+   Copyright (C) 1997-2000, 2002-2006, 2009-2010 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 */
+
+#include <config.h>
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include <string.h>
+
+#include <limits.h>
+#ifndef _POSIX_NAME_MAX
+# define _POSIX_NAME_MAX 14
+#endif
+
+#include "same.h"
+#include "dirname.h"
+#include "error.h"
+#include "same-inode.h"
+
+#ifndef MIN
+# define MIN(a, b) ((a) < (b) ? (a) : (b))
+#endif
+
+/* Return nonzero if SOURCE and DEST point to the same name in the same
+   directory.  */
+
+bool
+same_name (const char *source, const char *dest)
+{
+  /* Compare the basenames.  */
+  char const *source_basename = last_component (source);
+  char const *dest_basename = last_component (dest);
+  size_t source_baselen = base_len (source_basename);
+  size_t dest_baselen = base_len (dest_basename);
+  bool identical_basenames =
+    (source_baselen == dest_baselen
+     && memcmp (source_basename, dest_basename, dest_baselen) == 0);
+  bool compare_dirs = identical_basenames;
+  bool same = false;
+
+#if ! _POSIX_NO_TRUNC && HAVE_PATHCONF && defined _PC_NAME_MAX
+  /* This implementation silently truncates components of file names.  If
+     the base names might be truncated, check whether the truncated
+     base names are the same, while checking the directories.  */
+  size_t slen_max = HAVE_LONG_FILE_NAMES ? 255 : _POSIX_NAME_MAX;
+  size_t min_baselen = MIN (source_baselen, dest_baselen);
+  if (slen_max <= min_baselen
+      && memcmp (source_basename, dest_basename, slen_max) == 0)
+    compare_dirs = true;
+#endif
+
+  if (compare_dirs)
+    {
+      struct stat source_dir_stats;
+      struct stat dest_dir_stats;
+      char *source_dirname, *dest_dirname;
+
+      /* Compare the parent directories (via the device and inode numbers).  */
+      source_dirname = dir_name (source);
+      dest_dirname = dir_name (dest);
+
+      if (stat (source_dirname, &source_dir_stats))
+        {
+          /* Shouldn't happen.  */
+          error (1, errno, "%s", source_dirname);
+        }
+
+      if (stat (dest_dirname, &dest_dir_stats))
+        {
+          /* Shouldn't happen.  */
+          error (1, errno, "%s", dest_dirname);
+        }
+
+      same = SAME_INODE (source_dir_stats, dest_dir_stats);
+
+#if ! _POSIX_NO_TRUNC && HAVE_PATHCONF && defined _PC_NAME_MAX
+      if (same && ! identical_basenames)
+        {
+          long name_max = (errno = 0, pathconf (dest_dirname, _PC_NAME_MAX));
+          if (name_max < 0)
+            {
+              if (errno)
+                {
+                  /* Shouldn't happen.  */
+                  error (1, errno, "%s", dest_dirname);
+                }
+              same = false;
+            }
+          else
+            same = (name_max <= min_baselen
+                    && memcmp (source_basename, dest_basename, name_max) == 0);
+        }
+#endif
+
+      free (source_dirname);
+      free (dest_dirname);
+    }
+
+  return same;
+}
diff --git a/gnu/same.h b/gnu/same.h
new file mode 100644 (file)
index 0000000..c4b58fd
--- /dev/null
@@ -0,0 +1,27 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Determine whether two file names refer to the same file.
+
+   Copyright (C) 1997-2000, 2003-2004, 2009-2010 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 SAME_H_
+# define SAME_H_ 1
+
+# include <stdbool.h>
+
+bool same_name (const char *source, const char *dest);
+
+#endif /* SAME_H_ */
diff --git a/gnu/save-cwd.c b/gnu/save-cwd.c
new file mode 100644 (file)
index 0000000..6cb3c36
--- /dev/null
@@ -0,0 +1,111 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* save-cwd.c -- Save and restore current working directory.
+
+   Copyright (C) 1995, 1997-1998, 2003-2006, 2009-2010 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.  */
+
+#include <config.h>
+
+#include "save-cwd.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "chdir-long.h"
+#include "unistd--.h"
+#include "xgetcwd.h"
+
+#if GNULIB_FCNTL_SAFER
+# include "fcntl--.h"
+#else
+# define GNULIB_FCNTL_SAFER 0
+#endif
+
+/* On systems without the fchdir function (WOE), pretend that open
+   always returns -1 so that save_cwd resorts to using xgetcwd.
+   Since chdir_long requires fchdir, use chdir instead.  */
+#if !HAVE_FCHDIR
+# undef open
+# define open(File, Flags) (-1)
+# undef fchdir
+# define fchdir(Fd) (abort (), -1)
+# undef chdir_long
+# define chdir_long(Dir) chdir (Dir)
+#endif
+
+/* Record the location of the current working directory in CWD so that
+   the program may change to other directories and later use restore_cwd
+   to return to the recorded location.  This function may allocate
+   space using malloc (via xgetcwd) or leave a file descriptor open;
+   use free_cwd to perform the necessary free or close.  Upon failure,
+   no memory is allocated, any locally opened file descriptors are
+   closed;  return non-zero -- in that case, free_cwd need not be
+   called, but doing so is ok.  Otherwise, return zero.
+
+   The `raison d'etre' for this interface is that the working directory
+   is sometimes inaccessible, and getcwd is not robust or as efficient.
+   So, we prefer to use the open/fchdir approach, but fall back on
+   getcwd if necessary.
+
+   Some systems lack fchdir altogether: e.g., OS/2, pre-2001 Cygwin,
+   SCO Xenix.  Also, SunOS 4 and Irix 5.3 provide the function, yet it
+   doesn't work for partitions on which auditing is enabled.  If
+   you're still using an obsolete system with these problems, please
+   send email to the maintainer of this code.  */
+
+int
+save_cwd (struct saved_cwd *cwd)
+{
+  cwd->name = NULL;
+
+  cwd->desc = open (".", O_RDONLY);
+  if (!GNULIB_FCNTL_SAFER)
+    cwd->desc = fd_safer (cwd->desc);
+  if (cwd->desc < 0)
+    {
+      cwd->name = xgetcwd ();
+      return cwd->name ? 0 : -1;
+    }
+
+  return 0;
+}
+
+/* Change to recorded location, CWD, in directory hierarchy.
+   Upon failure, return -1 (errno is set by chdir or fchdir).
+   Upon success, return zero.  */
+
+int
+restore_cwd (const struct saved_cwd *cwd)
+{
+  if (0 <= cwd->desc)
+    return fchdir (cwd->desc);
+  else
+    return chdir_long (cwd->name);
+}
+
+void
+free_cwd (struct saved_cwd *cwd)
+{
+  if (cwd->desc >= 0)
+    close (cwd->desc);
+  free (cwd->name);
+}
diff --git a/gnu/save-cwd.h b/gnu/save-cwd.h
new file mode 100644 (file)
index 0000000..a3a0307
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Save and restore current working directory.
+
+   Copyright (C) 1995, 1997-1998, 2003, 2009-2010 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.  */
+
+#ifndef SAVE_CWD_H
+# define SAVE_CWD_H 1
+
+struct saved_cwd
+  {
+    int desc;
+    char *name;
+  };
+
+int save_cwd (struct saved_cwd *cwd);
+int restore_cwd (const struct saved_cwd *cwd);
+void free_cwd (struct saved_cwd *cwd);
+
+#endif /* SAVE_CWD_H */
diff --git a/gnu/savedir.c b/gnu/savedir.c
new file mode 100644 (file)
index 0000000..a1eaa43
--- /dev/null
@@ -0,0 +1,132 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* savedir.c -- save the list of files in a directory in a string
+
+   Copyright (C) 1990, 1997-2001, 2003-2006, 2009-2010 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 David MacKenzie <djm@gnu.ai.mit.edu>. */
+
+#include <config.h>
+
+#include "savedir.h"
+
+#include <sys/types.h>
+
+#include <errno.h>
+
+#include "dirent--.h"
+#ifndef _D_EXACT_NAMLEN
+# define _D_EXACT_NAMLEN(dp)    strlen ((dp)->d_name)
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "xalloc.h"
+
+#ifndef NAME_SIZE_DEFAULT
+# define NAME_SIZE_DEFAULT 512
+#endif
+
+/* Return a freshly allocated string containing the file names
+   in directory DIRP, separated by '\0' characters;
+   the end is marked by two '\0' characters in a row.
+   Return NULL (setting errno) if DIRP cannot be read or closed.
+   If DIRP is NULL, return NULL without affecting errno.  */
+
+static char *
+savedirstream (DIR *dirp)
+{
+  char *name_space;
+  size_t allocated = NAME_SIZE_DEFAULT;
+  size_t used = 0;
+  int save_errno;
+
+  if (dirp == NULL)
+    return NULL;
+
+  name_space = xmalloc (allocated);
+
+  for (;;)
+    {
+      struct dirent const *dp;
+      char const *entry;
+
+      errno = 0;
+      dp = readdir (dirp);
+      if (! dp)
+        break;
+
+      /* Skip "", ".", and "..".  "" is returned by at least one buggy
+         implementation: Solaris 2.4 readdir on NFS file systems.  */
+      entry = dp->d_name;
+      if (entry[entry[0] != '.' ? 0 : entry[1] != '.' ? 1 : 2] != '\0')
+        {
+          size_t entry_size = _D_EXACT_NAMLEN (dp) + 1;
+          if (used + entry_size < used)
+            xalloc_die ();
+          if (allocated <= used + entry_size)
+            {
+              do
+                {
+                  if (2 * allocated < allocated)
+                    xalloc_die ();
+                  allocated *= 2;
+                }
+              while (allocated <= used + entry_size);
+
+              name_space = xrealloc (name_space, allocated);
+            }
+          memcpy (name_space + used, entry, entry_size);
+          used += entry_size;
+        }
+    }
+  name_space[used] = '\0';
+  save_errno = errno;
+  if (closedir (dirp) != 0)
+    save_errno = errno;
+  if (save_errno != 0)
+    {
+      free (name_space);
+      errno = save_errno;
+      return NULL;
+    }
+  return name_space;
+}
+
+/* Return a freshly allocated string containing the file names
+   in directory DIR, separated by '\0' characters;
+   the end is marked by two '\0' characters in a row.
+   Return NULL (setting errno) if DIR cannot be opened, read, or closed.  */
+
+char *
+savedir (char const *dir)
+{
+  return savedirstream (opendir (dir));
+}
+
+/* Return a freshly allocated string containing the file names
+   in directory FD, separated by '\0' characters;
+   the end is marked by two '\0' characters in a row.
+   Return NULL (setting errno) if FD cannot be read or closed.  */
+
+char *
+fdsavedir (int fd)
+{
+  return savedirstream (fdopendir (fd));
+}
diff --git a/gnu/savedir.h b/gnu/savedir.h
new file mode 100644 (file)
index 0000000..ee50d80
--- /dev/null
@@ -0,0 +1,29 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Save the list of files in a directory in a string.
+
+   Copyright (C) 1997, 1999, 2001, 2003, 2005, 2009-2010 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 David MacKenzie <djm@gnu.ai.mit.edu>. */
+
+#if !defined SAVEDIR_H_
+# define SAVEDIR_H_
+
+char *savedir (char const *dir);
+char *fdsavedir (int fd);
+
+#endif
diff --git a/gnu/setenv.c b/gnu/setenv.c
new file mode 100644 (file)
index 0000000..d4670e5
--- /dev/null
@@ -0,0 +1,385 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copyright (C) 1992, 1995-2003, 2005-2010 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
+   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 !_LIBC
+# include <config.h>
+#endif
+
+/* Don't use __attribute__ __nonnull__ in this compilation unit.  Otherwise gcc
+   optimizes away the name == NULL test below.  */
+#define _GL_ARG_NONNULL(params)
+
+#include <alloca.h>
+
+/* Specification.  */
+#include <stdlib.h>
+
+#include <errno.h>
+#ifndef __set_errno
+# define __set_errno(ev) ((errno) = (ev))
+#endif
+
+#include <string.h>
+#if _LIBC || HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#if !_LIBC
+# include "malloca.h"
+#endif
+
+#if _LIBC || !HAVE_SETENV
+
+#if !_LIBC
+# define __environ      environ
+#endif
+
+#if _LIBC
+/* This lock protects against simultaneous modifications of `environ'.  */
+# include <bits/libc-lock.h>
+__libc_lock_define_initialized (static, envlock)
+# define LOCK   __libc_lock_lock (envlock)
+# define UNLOCK __libc_lock_unlock (envlock)
+#else
+# define LOCK
+# define UNLOCK
+#endif
+
+/* In the GNU C library we must keep the namespace clean.  */
+#ifdef _LIBC
+# define setenv __setenv
+# define clearenv __clearenv
+# define tfind __tfind
+# define tsearch __tsearch
+#endif
+
+/* In the GNU C library implementation we try to be more clever and
+   allow arbitrarily many changes of the environment given that the used
+   values are from a small set.  Outside glibc this will eat up all
+   memory after a while.  */
+#if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \
+                      && defined __GNUC__)
+# define USE_TSEARCH    1
+# include <search.h>
+typedef int (*compar_fn_t) (const void *, const void *);
+
+/* This is a pointer to the root of the search tree with the known
+   values.  */
+static void *known_values;
+
+# define KNOWN_VALUE(Str) \
+  ({                                                                          \
+    void *value = tfind (Str, &known_values, (compar_fn_t) strcmp);           \
+    value != NULL ? *(char **) value : NULL;                                  \
+  })
+# define STORE_VALUE(Str) \
+  tsearch (Str, &known_values, (compar_fn_t) strcmp)
+
+#else
+# undef USE_TSEARCH
+
+# define KNOWN_VALUE(Str) NULL
+# define STORE_VALUE(Str) do { } while (0)
+
+#endif
+
+
+/* If this variable is not a null pointer we allocated the current
+   environment.  */
+static char **last_environ;
+
+
+/* This function is used by `setenv' and `putenv'.  The difference between
+   the two functions is that for the former must create a new string which
+   is then placed in the environment, while the argument of `putenv'
+   must be used directly.  This is all complicated by the fact that we try
+   to reuse values once generated for a `setenv' call since we can never
+   free the strings.  */
+int
+__add_to_environ (const char *name, const char *value, const char *combined,
+                  int replace)
+{
+  register char **ep;
+  register size_t size;
+  const size_t namelen = strlen (name);
+  const size_t vallen = value != NULL ? strlen (value) + 1 : 0;
+
+  LOCK;
+
+  /* We have to get the pointer now that we have the lock and not earlier
+     since another thread might have created a new environment.  */
+  ep = __environ;
+
+  size = 0;
+  if (ep != NULL)
+    {
+      for (; *ep != NULL; ++ep)
+        if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=')
+          break;
+        else
+          ++size;
+    }
+
+  if (ep == NULL || *ep == NULL)
+    {
+      char **new_environ;
+#ifdef USE_TSEARCH
+      char *new_value;
+#endif
+
+      /* We allocated this space; we can extend it.  */
+      new_environ =
+        (char **) (last_environ == NULL
+                   ? malloc ((size + 2) * sizeof (char *))
+                   : realloc (last_environ, (size + 2) * sizeof (char *)));
+      if (new_environ == NULL)
+        {
+          UNLOCK;
+          return -1;
+        }
+
+      /* If the whole entry is given add it.  */
+      if (combined != NULL)
+        /* We must not add the string to the search tree since it belongs
+           to the user.  */
+        new_environ[size] = (char *) combined;
+      else
+        {
+          /* See whether the value is already known.  */
+#ifdef USE_TSEARCH
+# ifdef _LIBC
+          new_value = (char *) alloca (namelen + 1 + vallen);
+          __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1),
+                     value, vallen);
+# else
+          new_value = (char *) malloca (namelen + 1 + vallen);
+          if (new_value == NULL)
+            {
+              __set_errno (ENOMEM);
+              UNLOCK;
+              return -1;
+            }
+          memcpy (new_value, name, namelen);
+          new_value[namelen] = '=';
+          memcpy (&new_value[namelen + 1], value, vallen);
+# endif
+
+          new_environ[size] = KNOWN_VALUE (new_value);
+          if (new_environ[size] == NULL)
+#endif
+            {
+              new_environ[size] = (char *) malloc (namelen + 1 + vallen);
+              if (new_environ[size] == NULL)
+                {
+#if defined USE_TSEARCH && !defined _LIBC
+                  freea (new_value);
+#endif
+                  __set_errno (ENOMEM);
+                  UNLOCK;
+                  return -1;
+                }
+
+#ifdef USE_TSEARCH
+              memcpy (new_environ[size], new_value, namelen + 1 + vallen);
+#else
+              memcpy (new_environ[size], name, namelen);
+              new_environ[size][namelen] = '=';
+              memcpy (&new_environ[size][namelen + 1], value, vallen);
+#endif
+              /* And save the value now.  We cannot do this when we remove
+                 the string since then we cannot decide whether it is a
+                 user string or not.  */
+              STORE_VALUE (new_environ[size]);
+            }
+#if defined USE_TSEARCH && !defined _LIBC
+          freea (new_value);
+#endif
+        }
+
+      if (__environ != last_environ)
+        memcpy ((char *) new_environ, (char *) __environ,
+                size * sizeof (char *));
+
+      new_environ[size + 1] = NULL;
+
+      last_environ = __environ = new_environ;
+    }
+  else if (replace)
+    {
+      char *np;
+
+      /* Use the user string if given.  */
+      if (combined != NULL)
+        np = (char *) combined;
+      else
+        {
+#ifdef USE_TSEARCH
+          char *new_value;
+# ifdef _LIBC
+          new_value = alloca (namelen + 1 + vallen);
+          __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1),
+                     value, vallen);
+# else
+          new_value = malloca (namelen + 1 + vallen);
+          if (new_value == NULL)
+            {
+              __set_errno (ENOMEM);
+              UNLOCK;
+              return -1;
+            }
+          memcpy (new_value, name, namelen);
+          new_value[namelen] = '=';
+          memcpy (&new_value[namelen + 1], value, vallen);
+# endif
+
+          np = KNOWN_VALUE (new_value);
+          if (np == NULL)
+#endif
+            {
+              np = malloc (namelen + 1 + vallen);
+              if (np == NULL)
+                {
+#if defined USE_TSEARCH && !defined _LIBC
+                  freea (new_value);
+#endif
+                  __set_errno (ENOMEM);
+                  UNLOCK;
+                  return -1;
+                }
+
+#ifdef USE_TSEARCH
+              memcpy (np, new_value, namelen + 1 + vallen);
+#else
+              memcpy (np, name, namelen);
+              np[namelen] = '=';
+              memcpy (&np[namelen + 1], value, vallen);
+#endif
+              /* And remember the value.  */
+              STORE_VALUE (np);
+            }
+#if defined USE_TSEARCH && !defined _LIBC
+          freea (new_value);
+#endif
+        }
+
+      *ep = np;
+    }
+
+  UNLOCK;
+
+  return 0;
+}
+
+int
+setenv (const char *name, const char *value, int replace)
+{
+  if (name == NULL || *name == '\0' || strchr (name, '=') != NULL)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  return __add_to_environ (name, value, NULL, replace);
+}
+
+/* The `clearenv' was planned to be added to POSIX.1 but probably
+   never made it.  Nevertheless the POSIX.9 standard (POSIX bindings
+   for Fortran 77) requires this function.  */
+int
+clearenv (void)
+{
+  LOCK;
+
+  if (__environ == last_environ && __environ != NULL)
+    {
+      /* We allocated this environment so we can free it.  */
+      free (__environ);
+      last_environ = NULL;
+    }
+
+  /* Clear the environment pointer removes the whole environment.  */
+  __environ = NULL;
+
+  UNLOCK;
+
+  return 0;
+}
+
+#ifdef _LIBC
+static void
+free_mem (void)
+{
+  /* Remove all traces.  */
+  clearenv ();
+
+  /* Now remove the search tree.  */
+  __tdestroy (known_values, free);
+  known_values = NULL;
+}
+text_set_element (__libc_subfreeres, free_mem);
+
+
+# undef setenv
+# undef clearenv
+weak_alias (__setenv, setenv)
+weak_alias (__clearenv, clearenv)
+#endif
+
+#endif /* _LIBC || !HAVE_SETENV */
+
+/* The rest of this file is called into use when replacing an existing
+   but buggy setenv.  Known bugs include failure to diagnose invalid
+   name, and consuming a leading '=' from value.  */
+#if HAVE_SETENV
+
+# undef setenv
+# define STREQ(a, b) (strcmp (a, b) == 0)
+
+int
+rpl_setenv (const char *name, const char *value, int replace)
+{
+  int result;
+  if (!name || !*name || strchr (name, '='))
+    {
+      errno = EINVAL;
+      return -1;
+    }
+  /* Call the real setenv even if replace is 0, in case implementation
+     has underlying data to update, such as when environ changes.  */
+  result = setenv (name, value, replace);
+  if (result == 0 && replace && *value == '=')
+    {
+      char *tmp = getenv (name);
+      if (!STREQ (tmp, value))
+        {
+          int saved_errno;
+          size_t len = strlen (value);
+          tmp = malloca (len + 2);
+          /* Since leading '=' is eaten, double it up.  */
+          *tmp = '=';
+          memcpy (tmp + 1, value, len + 1);
+          result = setenv (name, tmp, replace);
+          saved_errno = errno;
+          freea (tmp);
+          errno = saved_errno;
+        }
+    }
+  return result;
+}
+
+#endif /* HAVE_SETENV */
diff --git a/gnu/size_max.h b/gnu/size_max.h
new file mode 100644 (file)
index 0000000..58443ab
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* size_max.h -- declare SIZE_MAX through system headers
+   Copyright (C) 2005-2006, 2009-2010 Free Software Foundation, Inc.
+   Written by Simon Josefsson.
+
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef GNULIB_SIZE_MAX_H
+#define GNULIB_SIZE_MAX_H
+
+/* Get SIZE_MAX declaration on systems like Solaris 7/8/9.  */
+# include <limits.h>
+/* Get SIZE_MAX declaration on systems like glibc 2.  */
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+/* On systems where these include files don't define it, SIZE_MAX is defined
+   in config.h.  */
+
+#endif /* GNULIB_SIZE_MAX_H */
diff --git a/gnu/sleep.c b/gnu/sleep.c
new file mode 100644 (file)
index 0000000..4303d47
--- /dev/null
@@ -0,0 +1,77 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Pausing execution of the current thread.
+   Copyright (C) 2007, 2009, 2010 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 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 <limits.h>
+
+#include "verify.h"
+
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+# define WIN32_LEAN_AND_MEAN  /* avoid including junk */
+# include <windows.h>
+
+unsigned int
+sleep (unsigned int seconds)
+{
+  unsigned int remaining;
+
+  /* Sleep for 1 second many times, because
+       1. Sleep is not interruptiple by Ctrl-C,
+       2. we want to avoid arithmetic overflow while multiplying with 1000.  */
+  for (remaining = seconds; remaining > 0; remaining--)
+    Sleep (1000);
+
+  return remaining;
+}
+
+#elif HAVE_SLEEP
+
+# undef sleep
+
+/* Guarantee unlimited sleep and a reasonable return value.  Cygwin
+   1.5.x rejects attempts to sleep more than 49.7 days (2**32
+   milliseconds), but uses uninitialized memory which results in a
+   garbage answer.  */
+unsigned int
+rpl_sleep (unsigned int seconds)
+{
+  /* This requires int larger than 16 bits.  */
+  verify (UINT_MAX / 49 / 24 / 60 / 60);
+  const unsigned int limit = 49 * 24 * 60 * 60;
+  while (limit < seconds)
+    {
+      unsigned int result;
+      seconds -= limit;
+      result = sleep (limit);
+      if (result)
+        return seconds + result;
+    }
+  return sleep (seconds);
+}
+
+#else /* !HAVE_SLEEP */
+
+ #error "Please port gnulib sleep.c to your platform, possibly using usleep() or select(), then report this to bug-gnulib."
+
+#endif
diff --git a/gnu/snprintf.c b/gnu/snprintf.c
new file mode 100644 (file)
index 0000000..2fb5c31
--- /dev/null
@@ -0,0 +1,74 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Formatted output to strings.
+   Copyright (C) 2004, 2006-2010 Free Software Foundation, Inc.
+   Written by Simon Josefsson and Paul Eggert.
+
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <stdio.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "vasnprintf.h"
+
+/* Print formatted output to string STR.  Similar to sprintf, but
+   additional length SIZE limit how much is written into STR.  Returns
+   string length of formatted string (which may be larger than SIZE).
+   STR may be NULL, in which case nothing will be written.  On error,
+   return a negative value.  */
+int
+snprintf (char *str, size_t size, const char *format, ...)
+{
+  char *output;
+  size_t len;
+  size_t lenbuf = size;
+  va_list args;
+
+  va_start (args, format);
+  output = vasnprintf (str, &lenbuf, format, args);
+  len = lenbuf;
+  va_end (args);
+
+  if (!output)
+    return -1;
+
+  if (output != str)
+    {
+      if (size)
+        {
+          size_t pruned_len = (len < size ? len : size - 1);
+          memcpy (str, output, pruned_len);
+          str[pruned_len] = '\0';
+        }
+
+      free (output);
+    }
+
+  if (INT_MAX < len)
+    {
+      errno = EOVERFLOW;
+      return -1;
+    }
+
+  return len;
+}
diff --git a/gnu/stat-macros.h b/gnu/stat-macros.h
new file mode 100644 (file)
index 0000000..00112ce
--- /dev/null
@@ -0,0 +1,5 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* All the mode bits that can be affected by chmod.  */
+#define CHMOD_MODE_BITS \
+  (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
diff --git a/gnu/stat-time.h b/gnu/stat-time.h
new file mode 100644 (file)
index 0000000..3587fc2
--- /dev/null
@@ -0,0 +1,189 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* stat-related time functions.
+
+   Copyright (C) 2005, 2007, 2009-2010 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 STAT_TIME_H
+#define STAT_TIME_H 1
+
+#include <sys/stat.h>
+#include <time.h>
+
+/* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type
+   struct timespec, if available.  If not, then STAT_TIMESPEC_NS (ST,
+   ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST,
+   if available.  ST_XTIM can be st_atim, st_ctim, st_mtim, or st_birthtim
+   for access, status change, data modification, or birth (creation)
+   time respectively.
+
+   These macros are private to stat-time.h.  */
+#if defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC
+# ifdef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC
+#  define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim)
+# else
+#  define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.tv_nsec)
+# endif
+#elif defined HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC
+# define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim##espec)
+#elif defined HAVE_STRUCT_STAT_ST_ATIMENSEC
+# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim##ensec)
+#elif defined HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC
+# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.st__tim.tv_nsec)
+#endif
+
+/* Return the nanosecond component of *ST's access time.  */
+static inline long int
+get_stat_atime_ns (struct stat const *st)
+{
+# if defined STAT_TIMESPEC
+  return STAT_TIMESPEC (st, st_atim).tv_nsec;
+# elif defined STAT_TIMESPEC_NS
+  return STAT_TIMESPEC_NS (st, st_atim);
+# else
+  return 0;
+# endif
+}
+
+/* Return the nanosecond component of *ST's status change time.  */
+static inline long int
+get_stat_ctime_ns (struct stat const *st)
+{
+# if defined STAT_TIMESPEC
+  return STAT_TIMESPEC (st, st_ctim).tv_nsec;
+# elif defined STAT_TIMESPEC_NS
+  return STAT_TIMESPEC_NS (st, st_ctim);
+# else
+  return 0;
+# endif
+}
+
+/* Return the nanosecond component of *ST's data modification time.  */
+static inline long int
+get_stat_mtime_ns (struct stat const *st)
+{
+# if defined STAT_TIMESPEC
+  return STAT_TIMESPEC (st, st_mtim).tv_nsec;
+# elif defined STAT_TIMESPEC_NS
+  return STAT_TIMESPEC_NS (st, st_mtim);
+# else
+  return 0;
+# endif
+}
+
+/* Return the nanosecond component of *ST's birth time.  */
+static inline long int
+get_stat_birthtime_ns (struct stat const *st)
+{
+# if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC
+  return STAT_TIMESPEC (st, st_birthtim).tv_nsec;
+# elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC
+  return STAT_TIMESPEC_NS (st, st_birthtim);
+# else
+  /* Avoid a "parameter unused" warning.  */
+  (void) st;
+  return 0;
+# endif
+}
+
+/* Return *ST's access time.  */
+static inline struct timespec
+get_stat_atime (struct stat const *st)
+{
+#ifdef STAT_TIMESPEC
+  return STAT_TIMESPEC (st, st_atim);
+#else
+  struct timespec t;
+  t.tv_sec = st->st_atime;
+  t.tv_nsec = get_stat_atime_ns (st);
+  return t;
+#endif
+}
+
+/* Return *ST's status change time.  */
+static inline struct timespec
+get_stat_ctime (struct stat const *st)
+{
+#ifdef STAT_TIMESPEC
+  return STAT_TIMESPEC (st, st_ctim);
+#else
+  struct timespec t;
+  t.tv_sec = st->st_ctime;
+  t.tv_nsec = get_stat_ctime_ns (st);
+  return t;
+#endif
+}
+
+/* Return *ST's data modification time.  */
+static inline struct timespec
+get_stat_mtime (struct stat const *st)
+{
+#ifdef STAT_TIMESPEC
+  return STAT_TIMESPEC (st, st_mtim);
+#else
+  struct timespec t;
+  t.tv_sec = st->st_mtime;
+  t.tv_nsec = get_stat_mtime_ns (st);
+  return t;
+#endif
+}
+
+/* Return *ST's birth time, if available; otherwise return a value
+   with negative tv_nsec.  */
+static inline struct timespec
+get_stat_birthtime (struct stat const *st)
+{
+  struct timespec t;
+
+#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \
+     || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC)
+  t = STAT_TIMESPEC (st, st_birthtim);
+#elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC
+  t.tv_sec = st->st_birthtime;
+  t.tv_nsec = st->st_birthtimensec;
+#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+  /* Woe32 native platforms (but not Cygwin) put the "file creation
+     time" in st_ctime (!).  See
+     <http://msdn2.microsoft.com/de-de/library/14h5k7ff(VS.80).aspx>.  */
+  t.tv_sec = st->st_ctime;
+  t.tv_nsec = 0;
+#else
+  /* Birth time is not supported.  Set tv_sec to avoid undefined behavior.  */
+  t.tv_sec = -1;
+  t.tv_nsec = -1;
+  /* Avoid a "parameter unused" warning.  */
+  (void) st;
+#endif
+
+#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \
+     || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC \
+     || defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC)
+  /* FreeBSD and NetBSD sometimes signal the absence of knowledge by
+     using zero.  Attempt to work around this problem.  Alas, this can
+     report failure even for valid time stamps.  Also, NetBSD
+     sometimes returns junk in the birth time fields; work around this
+     bug if it it is detected.  There's no need to detect negative
+     tv_nsec junk as negative tv_nsec already indicates an error.  */
+  if (t.tv_sec == 0 || 1000000000 <= t.tv_nsec)
+    t.tv_nsec = -1;
+#endif
+
+  return t;
+}
+
+#endif
diff --git a/gnu/stat.c b/gnu/stat.c
new file mode 100644 (file)
index 0000000..8db01a4
--- /dev/null
@@ -0,0 +1,106 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Work around platform bugs in stat.
+   Copyright (C) 2009, 2010 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 Eric Blake */
+
+#include <config.h>
+
+/* Get the original definition of stat.  It might be defined as a macro.  */
+#define __need_system_sys_stat_h
+#include <sys/types.h>
+#include <sys/stat.h>
+#undef __need_system_sys_stat_h
+
+static inline int
+orig_stat (const char *filename, struct stat *buf)
+{
+  return stat (filename, buf);
+}
+
+/* Specification.  */
+#include <sys/stat.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <stdbool.h>
+#include <string.h>
+
+/* Store information about NAME into ST.  Work around bugs with
+   trailing slashes.  Mingw has other bugs (such as st_ino always
+   being 0 on success) which this wrapper does not work around.  But
+   at least this implementation provides the ability to emulate fchdir
+   correctly.  */
+
+int
+rpl_stat (char const *name, struct stat *st)
+{
+  int result = orig_stat (name, st);
+#if REPLACE_FUNC_STAT_FILE
+  /* Solaris 9 mistakenly succeeds when given a non-directory with a
+     trailing slash.  */
+  if (result == 0 && !S_ISDIR (st->st_mode))
+    {
+      size_t len = strlen (name);
+      if (ISSLASH (name[len - 1]))
+        {
+          errno = ENOTDIR;
+          return -1;
+        }
+    }
+#endif /* REPLACE_FUNC_STAT_FILE */
+#if REPLACE_FUNC_STAT_DIR
+  if (result == -1 && errno == ENOENT)
+    {
+      /* Due to mingw's oddities, there are some directories (like
+         c:\) where stat() only succeeds with a trailing slash, and
+         other directories (like c:\windows) where stat() only
+         succeeds without a trailing slash.  But we want the two to be
+         synonymous, since chdir() manages either style.  Likewise, Mingw also
+         reports ENOENT for names longer than PATH_MAX, when we want
+         ENAMETOOLONG, and for stat("file/"), when we want ENOTDIR.
+         Fortunately, mingw PATH_MAX is small enough for stack
+         allocation.  */
+      char fixed_name[PATH_MAX + 1] = {0};
+      size_t len = strlen (name);
+      bool check_dir = false;
+      if (PATH_MAX <= len)
+        errno = ENAMETOOLONG;
+      else if (len)
+        {
+          strcpy (fixed_name, name);
+          if (ISSLASH (fixed_name[len - 1]))
+            {
+              check_dir = true;
+              while (len && ISSLASH (fixed_name[len - 1]))
+                fixed_name[--len] = '\0';
+              if (!len)
+                fixed_name[0] = '/';
+            }
+          else
+            fixed_name[len++] = '/';
+          result = orig_stat (fixed_name, st);
+          if (result == 0 && check_dir && !S_ISDIR (st->st_mode))
+            {
+              result = -1;
+              errno = ENOTDIR;
+            }
+        }
+    }
+#endif /* REPLACE_FUNC_STAT_DIR */
+  return result;
+}
diff --git a/gnu/stdarg.in.h b/gnu/stdarg.in.h
new file mode 100644 (file)
index 0000000..5a17d8a
--- /dev/null
@@ -0,0 +1,37 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Substitute for and wrapper around <stdarg.h>.
+   Copyright (C) 2008, 2009, 2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _GL_STDARG_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_STDARG_H@
+
+#ifndef _GL_STDARG_H
+#define _GL_STDARG_H
+
+#ifndef va_copy
+# define va_copy(a,b) ((a) = (b))
+#endif
+
+#endif /* _GL_STDARG_H */
+#endif /* _GL_STDARG_H */
diff --git a/gnu/stdbool.in.h b/gnu/stdbool.in.h
new file mode 100644 (file)
index 0000000..39d1847
--- /dev/null
@@ -0,0 +1,121 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copyright (C) 2001-2003, 2006-2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <haible@clisp.cons.org>, 2001.
+
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _GL_STDBOOL_H
+#define _GL_STDBOOL_H
+
+/* ISO C 99 <stdbool.h> for platforms that lack it.  */
+
+/* Usage suggestions:
+
+   Programs that use <stdbool.h> should be aware of some limitations
+   and standards compliance issues.
+
+   Standards compliance:
+
+       - <stdbool.h> must be #included before 'bool', 'false', 'true'
+         can be used.
+
+       - You cannot assume that sizeof (bool) == 1.
+
+       - Programs should not undefine the macros bool, true, and false,
+         as C99 lists that as an "obsolescent feature".
+
+   Limitations of this substitute, when used in a C89 environment:
+
+       - <stdbool.h> must be #included before the '_Bool' type can be used.
+
+       - You cannot assume that _Bool is a typedef; it might be a macro.
+
+       - Bit-fields of type 'bool' are not supported.  Portable code
+         should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'.
+
+       - In C99, casts and automatic conversions to '_Bool' or 'bool' are
+         performed in such a way that every nonzero value gets converted
+         to 'true', and zero gets converted to 'false'.  This doesn't work
+         with this substitute.  With this substitute, only the values 0 and 1
+         give the expected result when converted to _Bool' or 'bool'.
+
+   Also, it is suggested that programs use 'bool' rather than '_Bool';
+   this isn't required, but 'bool' is more common.  */
+
+
+/* 7.16. Boolean type and values */
+
+/* BeOS <sys/socket.h> already #defines false 0, true 1.  We use the same
+   definitions below, but temporarily we have to #undef them.  */
+#if defined __BEOS__ && !defined __HAIKU__
+# include <OS.h> /* defines bool but not _Bool */
+# undef false
+# undef true
+#endif
+
+/* For the sake of symbolic names in gdb, we define true and false as
+   enum constants, not only as macros.
+   It is tempting to write
+      typedef enum { false = 0, true = 1 } _Bool;
+   so that gdb prints values of type 'bool' symbolically. But if we do
+   this, values of type '_Bool' may promote to 'int' or 'unsigned int'
+   (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int'
+   (see ISO C 99 6.3.1.1.(2)).  So we add a negative value to the
+   enum; this ensures that '_Bool' promotes to 'int'.  */
+#if defined __cplusplus || (defined __BEOS__ && !defined __HAIKU__)
+  /* A compiler known to have 'bool'.  */
+  /* If the compiler already has both 'bool' and '_Bool', we can assume they
+     are the same types.  */
+# if !@HAVE__BOOL@
+typedef bool _Bool;
+# endif
+#else
+# if !defined __GNUC__
+   /* If @HAVE__BOOL@:
+        Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when
+        the built-in _Bool type is used.  See
+          http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+          http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+          http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
+        Similar bugs are likely with other compilers as well; this file
+        wouldn't be used if <stdbool.h> was working.
+        So we override the _Bool type.
+      If !@HAVE__BOOL@:
+        Need to define _Bool ourselves. As 'signed char' or as an enum type?
+        Use of a typedef, with SunPRO C, leads to a stupid
+          "warning: _Bool is a keyword in ISO C99".
+        Use of an enum type, with IRIX cc, leads to a stupid
+          "warning(1185): enumerated type mixed with another type".
+        Even the existence of an enum type, without a typedef,
+          "Invalid enumerator. (badenum)" with HP-UX cc on Tru64.
+        The only benefit of the enum, debuggability, is not important
+        with these compilers.  So use 'signed char' and no enum.  */
+#  define _Bool signed char
+# else
+   /* With this compiler, trust the _Bool type if the compiler has it.  */
+#  if !@HAVE__BOOL@
+typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool;
+#  endif
+# endif
+#endif
+#define bool _Bool
+
+/* The other macros must be usable in preprocessor directives.  */
+#define false 0
+#define true 1
+#define __bool_true_false_are_defined 1
+
+#endif /* _GL_STDBOOL_H */
diff --git a/gnu/stddef.in.h b/gnu/stddef.in.h
new file mode 100644 (file)
index 0000000..2de616b
--- /dev/null
@@ -0,0 +1,88 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
+
+   Copyright (C) 2009, 2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* Written by Eric Blake.  */
+
+/*
+ * POSIX 2008 <stddef.h> for platforms that have issues.
+ * <http://www.opengroup.org/susv3xbd/stddef.h.html>
+ */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+#if defined __need_wchar_t || defined __need_size_t  \
+  || defined __need_ptrdiff_t || defined __need_NULL \
+  || defined __need_wint_t
+/* Special invocation convention inside gcc header files.  In
+   particular, gcc provides a version of <stddef.h> that blindly
+   redefines NULL even when __need_wint_t was defined, even though
+   wint_t is not normally provided by <stddef.h>.  Hence, we must
+   remember if special invocation has ever been used to obtain wint_t,
+   in which case we need to clean up NULL yet again.  */
+
+# if !(defined _GL_STDDEF_H && defined _GL_STDDEF_WINT_T)
+#  ifdef __need_wint_t
+#   undef _GL_STDDEF_H
+#   define _GL_STDDEF_WINT_T
+#  endif
+#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
+# endif
+
+#else
+/* Normal invocation convention.  */
+
+# ifndef _GL_STDDEF_H
+
+/* The include_next requires a split double-inclusion guard.  */
+
+#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
+
+#  ifndef _GL_STDDEF_H
+#   define _GL_STDDEF_H
+
+/* On NetBSD 5.0, the definition of NULL lacks proper parentheses.  */
+#if @REPLACE_NULL@
+# undef NULL
+# ifdef __cplusplus
+   /* ISO C++ says that the macro NULL must expand to an integer constant
+      expression, hence '((void *) 0)' is not allowed in C++.  */
+#  if __GNUG__ >= 3
+    /* GNU C++ has a __null macro that behaves like an integer ('int' or
+       'long') but has the same size as a pointer.  Use that, to avoid
+       warnings.  */
+#   define NULL __null
+#  else
+#   define NULL 0L
+#  endif
+# else
+#  define NULL ((void *) 0)
+# endif
+#endif
+
+/* Some platforms lack wchar_t.  */
+#if !@HAVE_WCHAR_T@
+# define wchar_t int
+#endif
+
+#  endif /* _GL_STDDEF_H */
+# endif /* _GL_STDDEF_H */
+#endif /* __need_XXX */
diff --git a/gnu/stdint.in.h b/gnu/stdint.in.h
new file mode 100644 (file)
index 0000000..8fd48f0
--- /dev/null
@@ -0,0 +1,569 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copyright (C) 2001-2002, 2004-2010 Free Software Foundation, Inc.
+   Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
+   This file is part of gnulib.
+
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/*
+ * ISO C 99 <stdint.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/stdint.h.html>
+ */
+
+#ifndef _GL_STDINT_H
+
+/* When including a system file that in turn includes <inttypes.h>,
+   use the system <inttypes.h>, not our substitute.  This avoids
+   problems with (for example) VMS, whose <sys/bitypes.h> includes
+   <inttypes.h>.  */
+#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+
+/* Get those types that are already defined in other system include
+   files, so that we can "#define int8_t signed char" below without
+   worrying about a later system include file containing a "typedef
+   signed char int8_t;" that will get messed up by our macro.  Our
+   macros should all be consistent with the system versions, except
+   for the "fast" types and macros, which we recommend against using
+   in public interfaces due to compiler differences.  */
+
+#if @HAVE_STDINT_H@
+# if defined __sgi && ! defined __c99
+   /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users
+      with "This header file is to be used only for c99 mode compilations"
+      diagnostics.  */
+#  define __STDINT_H__
+# endif
+  /* Other systems may have an incomplete or buggy <stdint.h>.
+     Include it before <inttypes.h>, since any "#include <stdint.h>"
+     in <inttypes.h> would reinclude us, skipping our contents because
+     _GL_STDINT_H is defined.
+     The include_next requires a split double-inclusion guard.  */
+# if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+# endif
+# @INCLUDE_NEXT@ @NEXT_STDINT_H@
+#endif
+
+#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+#define _GL_STDINT_H
+
+/* <sys/types.h> defines some of the stdint.h types as well, on glibc,
+   IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).
+   AIX 5.2 <sys/types.h> isn't needed and causes troubles.
+   MacOS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but
+   relies on the system <stdint.h> definitions, so include
+   <sys/types.h> after @NEXT_STDINT_H@.  */
+#if @HAVE_SYS_TYPES_H@ && ! defined _AIX
+# include <sys/types.h>
+#endif
+
+/* Get LONG_MIN, LONG_MAX, ULONG_MAX.  */
+#include <limits.h>
+
+#if @HAVE_INTTYPES_H@
+  /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines
+     int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__.
+     <inttypes.h> also defines intptr_t and uintptr_t.  */
+# include <inttypes.h>
+#elif @HAVE_SYS_INTTYPES_H@
+  /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
+     the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX.  */
+# include <sys/inttypes.h>
+#endif
+
+#if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__
+  /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines
+     int{8,16,32,64}_t and __BIT_TYPES_DEFINED__.  In libc5 >= 5.2.2 it is
+     included by <sys/types.h>.  */
+# include <sys/bitypes.h>
+#endif
+
+#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+
+/* Minimum and maximum values for a integer type under the usual assumption.
+   Return an unspecified value if BITS == 0, adding a check to pacify
+   picky compilers.  */
+
+#define _STDINT_MIN(signed, bits, zero) \
+  ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero))
+
+#define _STDINT_MAX(signed, bits, zero) \
+  ((signed) \
+   ? ~ _STDINT_MIN (signed, bits, zero) \
+   : /* The expression for the unsigned case.  The subtraction of (signed) \
+        is a nop in the unsigned case and avoids "signed integer overflow" \
+        warnings in the signed case.  */ \
+     ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
+
+/* 7.18.1.1. Exact-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits.  */
+
+#undef int8_t
+#undef uint8_t
+typedef signed char gl_int8_t;
+typedef unsigned char gl_uint8_t;
+#define int8_t gl_int8_t
+#define uint8_t gl_uint8_t
+
+#undef int16_t
+#undef uint16_t
+typedef short int gl_int16_t;
+typedef unsigned short int gl_uint16_t;
+#define int16_t gl_int16_t
+#define uint16_t gl_uint16_t
+
+#undef int32_t
+#undef uint32_t
+typedef int gl_int32_t;
+typedef unsigned int gl_uint32_t;
+#define int32_t gl_int32_t
+#define uint32_t gl_uint32_t
+
+/* Do not undefine int64_t if gnulib is not being used with 64-bit
+   types, since otherwise it breaks platforms like Tandem/NSK.  */
+#if LONG_MAX >> 31 >> 31 == 1
+# undef int64_t
+typedef long int gl_int64_t;
+# define int64_t gl_int64_t
+# define GL_INT64_T
+#elif defined _MSC_VER
+# undef int64_t
+typedef __int64 gl_int64_t;
+# define int64_t gl_int64_t
+# define GL_INT64_T
+#elif @HAVE_LONG_LONG_INT@
+# undef int64_t
+typedef long long int gl_int64_t;
+# define int64_t gl_int64_t
+# define GL_INT64_T
+#endif
+
+#if ULONG_MAX >> 31 >> 31 >> 1 == 1
+# undef uint64_t
+typedef unsigned long int gl_uint64_t;
+# define uint64_t gl_uint64_t
+# define GL_UINT64_T
+#elif defined _MSC_VER
+# undef uint64_t
+typedef unsigned __int64 gl_uint64_t;
+# define uint64_t gl_uint64_t
+# define GL_UINT64_T
+#elif @HAVE_UNSIGNED_LONG_LONG_INT@
+# undef uint64_t
+typedef unsigned long long int gl_uint64_t;
+# define uint64_t gl_uint64_t
+# define GL_UINT64_T
+#endif
+
+/* Avoid collision with Solaris 2.5.1 <pthread.h> etc.  */
+#define _UINT8_T
+#define _UINT32_T
+#define _UINT64_T
+
+
+/* 7.18.1.2. Minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
+   are the same as the corresponding N_t types.  */
+
+#undef int_least8_t
+#undef uint_least8_t
+#undef int_least16_t
+#undef uint_least16_t
+#undef int_least32_t
+#undef uint_least32_t
+#undef int_least64_t
+#undef uint_least64_t
+#define int_least8_t int8_t
+#define uint_least8_t uint8_t
+#define int_least16_t int16_t
+#define uint_least16_t uint16_t
+#define int_least32_t int32_t
+#define uint_least32_t uint32_t
+#ifdef GL_INT64_T
+# define int_least64_t int64_t
+#endif
+#ifdef GL_UINT64_T
+# define uint_least64_t uint64_t
+#endif
+
+/* 7.18.1.3. Fastest minimum-width integer types */
+
+/* Note: Other <stdint.h> substitutes may define these types differently.
+   It is not recommended to use these types in public header files. */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
+   are taken from the same list of types.  Assume that 'long int'
+   is fast enough for all narrower integers.  */
+
+#undef int_fast8_t
+#undef uint_fast8_t
+#undef int_fast16_t
+#undef uint_fast16_t
+#undef int_fast32_t
+#undef uint_fast32_t
+#undef int_fast64_t
+#undef uint_fast64_t
+typedef long int gl_int_fast8_t;
+typedef unsigned long int gl_uint_fast8_t;
+typedef long int gl_int_fast16_t;
+typedef unsigned long int gl_uint_fast16_t;
+typedef long int gl_int_fast32_t;
+typedef unsigned long int gl_uint_fast32_t;
+#define int_fast8_t gl_int_fast8_t
+#define uint_fast8_t gl_uint_fast8_t
+#define int_fast16_t gl_int_fast16_t
+#define uint_fast16_t gl_uint_fast16_t
+#define int_fast32_t gl_int_fast32_t
+#define uint_fast32_t gl_uint_fast32_t
+#ifdef GL_INT64_T
+# define int_fast64_t int64_t
+#endif
+#ifdef GL_UINT64_T
+# define uint_fast64_t uint64_t
+#endif
+
+/* 7.18.1.4. Integer types capable of holding object pointers */
+
+#undef intptr_t
+#undef uintptr_t
+typedef long int gl_intptr_t;
+typedef unsigned long int gl_uintptr_t;
+#define intptr_t gl_intptr_t
+#define uintptr_t gl_uintptr_t
+
+/* 7.18.1.5. Greatest-width integer types */
+
+/* Note: These types are compiler dependent. It may be unwise to use them in
+   public header files. */
+
+#undef intmax_t
+#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+typedef long long int gl_intmax_t;
+# define intmax_t gl_intmax_t
+#elif defined GL_INT64_T
+# define intmax_t int64_t
+#else
+typedef long int gl_intmax_t;
+# define intmax_t gl_intmax_t
+#endif
+
+#undef uintmax_t
+#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+typedef unsigned long long int gl_uintmax_t;
+# define uintmax_t gl_uintmax_t
+#elif defined GL_UINT64_T
+# define uintmax_t uint64_t
+#else
+typedef unsigned long int gl_uintmax_t;
+# define uintmax_t gl_uintmax_t
+#endif
+
+/* Verify that intmax_t and uintmax_t have the same size.  Too much code
+   breaks if this is not the case.  If this check fails, the reason is likely
+   to be found in the autoconf macros.  */
+typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) - 1];
+
+/* 7.18.2. Limits of specified-width integer types */
+
+#if ! defined __cplusplus || defined __STDC_LIMIT_MACROS
+
+/* 7.18.2.1. Limits of exact-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits.  */
+
+#undef INT8_MIN
+#undef INT8_MAX
+#undef UINT8_MAX
+#define INT8_MIN  (~ INT8_MAX)
+#define INT8_MAX  127
+#define UINT8_MAX  255
+
+#undef INT16_MIN
+#undef INT16_MAX
+#undef UINT16_MAX
+#define INT16_MIN  (~ INT16_MAX)
+#define INT16_MAX  32767
+#define UINT16_MAX  65535
+
+#undef INT32_MIN
+#undef INT32_MAX
+#undef UINT32_MAX
+#define INT32_MIN  (~ INT32_MAX)
+#define INT32_MAX  2147483647
+#define UINT32_MAX  4294967295U
+
+#undef INT64_MIN
+#undef INT64_MAX
+#ifdef GL_INT64_T
+/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0
+   evaluates the latter incorrectly in preprocessor expressions.  */
+# define INT64_MIN  (- INTMAX_C (1) << 63)
+# define INT64_MAX  INTMAX_C (9223372036854775807)
+#endif
+
+#undef UINT64_MAX
+#ifdef GL_UINT64_T
+# define UINT64_MAX  UINTMAX_C (18446744073709551615)
+#endif
+
+/* 7.18.2.2. Limits of minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
+   are the same as the corresponding N_t types.  */
+
+#undef INT_LEAST8_MIN
+#undef INT_LEAST8_MAX
+#undef UINT_LEAST8_MAX
+#define INT_LEAST8_MIN  INT8_MIN
+#define INT_LEAST8_MAX  INT8_MAX
+#define UINT_LEAST8_MAX  UINT8_MAX
+
+#undef INT_LEAST16_MIN
+#undef INT_LEAST16_MAX
+#undef UINT_LEAST16_MAX
+#define INT_LEAST16_MIN  INT16_MIN
+#define INT_LEAST16_MAX  INT16_MAX
+#define UINT_LEAST16_MAX  UINT16_MAX
+
+#undef INT_LEAST32_MIN
+#undef INT_LEAST32_MAX
+#undef UINT_LEAST32_MAX
+#define INT_LEAST32_MIN  INT32_MIN
+#define INT_LEAST32_MAX  INT32_MAX
+#define UINT_LEAST32_MAX  UINT32_MAX
+
+#undef INT_LEAST64_MIN
+#undef INT_LEAST64_MAX
+#ifdef GL_INT64_T
+# define INT_LEAST64_MIN  INT64_MIN
+# define INT_LEAST64_MAX  INT64_MAX
+#endif
+
+#undef UINT_LEAST64_MAX
+#ifdef GL_UINT64_T
+# define UINT_LEAST64_MAX  UINT64_MAX
+#endif
+
+/* 7.18.2.3. Limits of fastest minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
+   are taken from the same list of types.  */
+
+#undef INT_FAST8_MIN
+#undef INT_FAST8_MAX
+#undef UINT_FAST8_MAX
+#define INT_FAST8_MIN  LONG_MIN
+#define INT_FAST8_MAX  LONG_MAX
+#define UINT_FAST8_MAX  ULONG_MAX
+
+#undef INT_FAST16_MIN
+#undef INT_FAST16_MAX
+#undef UINT_FAST16_MAX
+#define INT_FAST16_MIN  LONG_MIN
+#define INT_FAST16_MAX  LONG_MAX
+#define UINT_FAST16_MAX  ULONG_MAX
+
+#undef INT_FAST32_MIN
+#undef INT_FAST32_MAX
+#undef UINT_FAST32_MAX
+#define INT_FAST32_MIN  LONG_MIN
+#define INT_FAST32_MAX  LONG_MAX
+#define UINT_FAST32_MAX  ULONG_MAX
+
+#undef INT_FAST64_MIN
+#undef INT_FAST64_MAX
+#ifdef GL_INT64_T
+# define INT_FAST64_MIN  INT64_MIN
+# define INT_FAST64_MAX  INT64_MAX
+#endif
+
+#undef UINT_FAST64_MAX
+#ifdef GL_UINT64_T
+# define UINT_FAST64_MAX  UINT64_MAX
+#endif
+
+/* 7.18.2.4. Limits of integer types capable of holding object pointers */
+
+#undef INTPTR_MIN
+#undef INTPTR_MAX
+#undef UINTPTR_MAX
+#define INTPTR_MIN  LONG_MIN
+#define INTPTR_MAX  LONG_MAX
+#define UINTPTR_MAX  ULONG_MAX
+
+/* 7.18.2.5. Limits of greatest-width integer types */
+
+#undef INTMAX_MIN
+#undef INTMAX_MAX
+#ifdef INT64_MAX
+# define INTMAX_MIN  INT64_MIN
+# define INTMAX_MAX  INT64_MAX
+#else
+# define INTMAX_MIN  INT32_MIN
+# define INTMAX_MAX  INT32_MAX
+#endif
+
+#undef UINTMAX_MAX
+#ifdef UINT64_MAX
+# define UINTMAX_MAX  UINT64_MAX
+#else
+# define UINTMAX_MAX  UINT32_MAX
+#endif
+
+/* 7.18.3. Limits of other integer types */
+
+/* ptrdiff_t limits */
+#undef PTRDIFF_MIN
+#undef PTRDIFF_MAX
+#if @APPLE_UNIVERSAL_BUILD@
+# ifdef _LP64
+#  define PTRDIFF_MIN  _STDINT_MIN (1, 64, 0l)
+#  define PTRDIFF_MAX  _STDINT_MAX (1, 64, 0l)
+# else
+#  define PTRDIFF_MIN  _STDINT_MIN (1, 32, 0)
+#  define PTRDIFF_MAX  _STDINT_MAX (1, 32, 0)
+# endif
+#else
+# define PTRDIFF_MIN  \
+    _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
+# define PTRDIFF_MAX  \
+    _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
+#endif
+
+/* sig_atomic_t limits */
+#undef SIG_ATOMIC_MIN
+#undef SIG_ATOMIC_MAX
+#define SIG_ATOMIC_MIN  \
+   _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
+                0@SIG_ATOMIC_T_SUFFIX@)
+#define SIG_ATOMIC_MAX  \
+   _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
+                0@SIG_ATOMIC_T_SUFFIX@)
+
+
+/* size_t limit */
+#undef SIZE_MAX
+#if @APPLE_UNIVERSAL_BUILD@
+# ifdef _LP64
+#  define SIZE_MAX  _STDINT_MAX (0, 64, 0ul)
+# else
+#  define SIZE_MAX  _STDINT_MAX (0, 32, 0ul)
+# endif
+#else
+# define SIZE_MAX  _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@)
+#endif
+
+/* wchar_t limits */
+/* Get WCHAR_MIN, WCHAR_MAX.
+   This include is not on the top, above, because on OSF/1 4.0 we have a sequence of nested
+   includes <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes
+   <stdint.h> and assumes its types are already defined.  */
+#if ! (defined WCHAR_MIN && defined WCHAR_MAX)
+# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
+# include <wchar.h>
+# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
+#endif
+#undef WCHAR_MIN
+#undef WCHAR_MAX
+#define WCHAR_MIN  \
+   _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
+#define WCHAR_MAX  \
+   _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
+
+/* wint_t limits */
+#undef WINT_MIN
+#undef WINT_MAX
+#define WINT_MIN  \
+   _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
+#define WINT_MAX  \
+   _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
+
+#endif /* !defined __cplusplus || defined __STDC_LIMIT_MACROS */
+
+/* 7.18.4. Macros for integer constants */
+
+#if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS
+
+/* 7.18.4.1. Macros for minimum-width integer constants */
+/* According to ISO C 99 Technical Corrigendum 1 */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits, and int is 32 bits.  */
+
+#undef INT8_C
+#undef UINT8_C
+#define INT8_C(x) x
+#define UINT8_C(x) x
+
+#undef INT16_C
+#undef UINT16_C
+#define INT16_C(x) x
+#define UINT16_C(x) x
+
+#undef INT32_C
+#undef UINT32_C
+#define INT32_C(x) x
+#define UINT32_C(x) x ## U
+
+#undef INT64_C
+#undef UINT64_C
+#if LONG_MAX >> 31 >> 31 == 1
+# define INT64_C(x) x##L
+#elif defined _MSC_VER
+# define INT64_C(x) x##i64
+#elif @HAVE_LONG_LONG_INT@
+# define INT64_C(x) x##LL
+#endif
+#if ULONG_MAX >> 31 >> 31 >> 1 == 1
+# define UINT64_C(x) x##UL
+#elif defined _MSC_VER
+# define UINT64_C(x) x##ui64
+#elif @HAVE_UNSIGNED_LONG_LONG_INT@
+# define UINT64_C(x) x##ULL
+#endif
+
+/* 7.18.4.2. Macros for greatest-width integer constants */
+
+#undef INTMAX_C
+#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+# define INTMAX_C(x)   x##LL
+#elif defined GL_INT64_T
+# define INTMAX_C(x)   INT64_C(x)
+#else
+# define INTMAX_C(x)   x##L
+#endif
+
+#undef UINTMAX_C
+#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+# define UINTMAX_C(x)  x##ULL
+#elif defined GL_UINT64_T
+# define UINTMAX_C(x)  UINT64_C(x)
+#else
+# define UINTMAX_C(x)  x##UL
+#endif
+
+#endif /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */
+
+#endif /* _GL_STDINT_H */
+#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */
diff --git a/gnu/stdio-impl.h b/gnu/stdio-impl.h
new file mode 100644 (file)
index 0000000..a05563f
--- /dev/null
@@ -0,0 +1,96 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Implementation details of FILE streams.
+   Copyright (C) 2007-2010 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/>.  */
+
+/* Many stdio implementations have the same logic and therefore can share
+   the same implementation of stdio extension API, except that some fields
+   have different naming conventions, or their access requires some casts.  */
+
+
+/* BSD stdio derived implementations.  */
+
+#if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */
+
+# if defined __DragonFly__          /* DragonFly */
+  /* See <http://www.dragonflybsd.org/cvsweb/src/lib/libc/stdio/priv_stdio.h?rev=HEAD&content-type=text/x-cvsweb-markup>.  */
+#  define fp_ ((struct { struct __FILE_public pub; \
+                         struct { unsigned char *_base; int _size; } _bf; \
+                         void *cookie; \
+                         void *_close; \
+                         void *_read; \
+                         void *_seek; \
+                         void *_write; \
+                         struct { unsigned char *_base; int _size; } _ub; \
+                         int _ur; \
+                         unsigned char _ubuf[3]; \
+                         unsigned char _nbuf[1]; \
+                         struct { unsigned char *_base; int _size; } _lb; \
+                         int _blksize; \
+                         fpos_t _offset; \
+                         /* More fields, not relevant here.  */ \
+                       } *) fp)
+  /* See <http://www.dragonflybsd.org/cvsweb/src/include/stdio.h?rev=HEAD&content-type=text/x-cvsweb-markup>.  */
+#  define _p pub._p
+#  define _flags pub._flags
+#  define _r pub._r
+#  define _w pub._w
+# else
+#  define fp_ fp
+# endif
+
+# if defined __NetBSD__ || defined __OpenBSD__ /* NetBSD, OpenBSD */
+  /* See <http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
+     and <http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup> */
+  struct __sfileext
+    {
+      struct  __sbuf _ub; /* ungetc buffer */
+      /* More fields, not relevant here.  */
+    };
+#  define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub
+# else                                         /* FreeBSD, DragonFly, MacOS X, Cygwin */
+#  define fp_ub fp_->_ub
+# endif
+
+# define HASUB(fp) (fp_ub._base != NULL)
+
+#endif
+
+
+/* SystemV derived implementations.  */
+
+#if defined _IOERR
+
+# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */
+#  define fp_ ((struct { unsigned char *_ptr; \
+                         unsigned char *_base; \
+                         unsigned char *_end; \
+                         long _cnt; \
+                         int _file; \
+                         unsigned int _flag; \
+                       } *) fp)
+# else
+#  define fp_ fp
+# endif
+
+# if defined _SCO_DS                /* OpenServer */
+#  define _cnt __cnt
+#  define _ptr __ptr
+#  define _base __base
+#  define _flag __flag
+# endif
+
+#endif
diff --git a/gnu/stdio-write.c b/gnu/stdio-write.c
new file mode 100644 (file)
index 0000000..06047b4
--- /dev/null
@@ -0,0 +1,152 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* POSIX compatible FILE stream write function.
+   Copyright (C) 2008-2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+   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 <stdio.h>
+
+/* Replace these functions only if module 'sigpipe' is requested.  */
+#if GNULIB_SIGPIPE
+
+/* On native Windows platforms, SIGPIPE does not exist.  When write() is
+   called on a pipe with no readers, WriteFile() fails with error
+   GetLastError() = ERROR_NO_DATA, and write() in consequence fails with
+   error EINVAL.  This write() function is at the basis of the function
+   which flushes the buffer of a FILE stream.  */
+
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+#  include <errno.h>
+#  include <signal.h>
+#  include <io.h>
+
+#  define WIN32_LEAN_AND_MEAN  /* avoid including junk */
+#  include <windows.h>
+
+#  define CALL_WITH_SIGPIPE_EMULATION(RETTYPE, EXPRESSION, FAILED) \
+  if (ferror (stream))                                                        \
+    return (EXPRESSION);                                                      \
+  else                                                                        \
+    {                                                                         \
+      RETTYPE ret;                                                            \
+      SetLastError (0);                                                       \
+      ret = (EXPRESSION);                                                     \
+      if (FAILED && GetLastError () == ERROR_NO_DATA && ferror (stream))      \
+        {                                                                     \
+          int fd = fileno (stream);                                           \
+          if (fd >= 0                                                         \
+              && GetFileType ((HANDLE) _get_osfhandle (fd)) == FILE_TYPE_PIPE)\
+            {                                                                 \
+              /* Try to raise signal SIGPIPE.  */                             \
+              raise (SIGPIPE);                                                \
+              /* If it is currently blocked or ignored, change errno from     \
+                 EINVAL to EPIPE.  */                                         \
+              errno = EPIPE;                                                  \
+            }                                                                 \
+        }                                                                     \
+      return ret;                                                             \
+    }
+
+#  if !REPLACE_PRINTF_POSIX /* avoid collision with printf.c */
+#   if !DEPENDS_ON_LIBINTL /* avoid collision with intl/printf.c */
+int
+printf (const char *format, ...)
+{
+  int retval;
+  va_list args;
+
+  va_start (args, format);
+  retval = vfprintf (stdout, format, args);
+  va_end (args);
+
+  return retval;
+}
+#   endif
+#  endif
+
+#  if !REPLACE_FPRINTF_POSIX /* avoid collision with fprintf.c */
+int
+fprintf (FILE *stream, const char *format, ...)
+{
+  int retval;
+  va_list args;
+
+  va_start (args, format);
+  retval = vfprintf (stream, format, args);
+  va_end (args);
+
+  return retval;
+}
+#  endif
+
+#  if !REPLACE_VPRINTF_POSIX /* avoid collision with vprintf.c */
+int
+vprintf (const char *format, va_list args)
+{
+  return vfprintf (stdout, format, args);
+}
+#  endif
+
+#  if !REPLACE_VFPRINTF_POSIX /* avoid collision with vfprintf.c */
+int
+vfprintf (FILE *stream, const char *format, va_list args)
+#undef vfprintf
+{
+  CALL_WITH_SIGPIPE_EMULATION (int, vfprintf (stream, format, args), ret == EOF)
+}
+#  endif
+
+int
+putchar (int c)
+{
+  return fputc (c, stdout);
+}
+
+int
+fputc (int c, FILE *stream)
+#undef fputc
+{
+  CALL_WITH_SIGPIPE_EMULATION (int, fputc (c, stream), ret == EOF)
+}
+
+int
+fputs (const char *string, FILE *stream)
+#undef fputs
+{
+  CALL_WITH_SIGPIPE_EMULATION (int, fputs (string, stream), ret == EOF)
+}
+
+int
+puts (const char *string)
+#undef puts
+{
+  FILE *stream = stdout;
+  CALL_WITH_SIGPIPE_EMULATION (int, puts (string), ret == EOF)
+}
+
+size_t
+fwrite (const void *ptr, size_t s, size_t n, FILE *stream)
+#undef fwrite
+{
+  CALL_WITH_SIGPIPE_EMULATION (size_t, fwrite (ptr, s, n, stream), ret < n)
+}
+
+# endif
+#endif
diff --git a/gnu/stdio.in.h b/gnu/stdio.in.h
new file mode 100644 (file)
index 0000000..88b368b
--- /dev/null
@@ -0,0 +1,1008 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A GNU-like <stdio.h>.
+
+   Copyright (C) 2004, 2007-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+#if defined __need_FILE || defined __need___FILE
+/* Special invocation convention inside glibc header files.  */
+
+#@INCLUDE_NEXT@ @NEXT_STDIO_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_STDIO_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_STDIO_H@
+
+#ifndef _GL_STDIO_H
+#define _GL_STDIO_H
+
+/* Get va_list.  Needed on many systems, including glibc 2.8.  */
+#include <stdarg.h>
+
+#include <stddef.h>
+
+/* Get off_t and ssize_t.  Needed on many systems, including glibc 2.8.  */
+#include <sys/types.h>
+
+#ifndef __attribute__
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The __-protected variants of the attributes 'format' and 'printf' are
+   accepted by gcc versions 2.6.4 (effectively 2.7) and later.
+   We enable __attribute__ only if these are supported too, because
+   gnulib and libintl do '#define printf __printf__' when they override
+   the 'printf' function.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+#  define __attribute__(Spec)   /* empty */
+# endif
+#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.  */
+
+
+#if @GNULIB_DPRINTF@
+# if @REPLACE_DPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define dprintf rpl_dprintf
+#  endif
+_GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *format, ...)
+                                __attribute__ ((__format__ (__printf__, 2, 3)))
+                                _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...));
+# else
+#  if !@HAVE_DPRINTF@
+_GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...)
+                                __attribute__ ((__format__ (__printf__, 2, 3)))
+                                _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (dprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef dprintf
+# if HAVE_RAW_DECL_DPRINTF
+_GL_WARN_ON_USE (dprintf, "dprintf is unportable - "
+                 "use gnulib module dprintf for portability");
+# endif
+#endif
+
+#if @GNULIB_FCLOSE@
+/* Close STREAM and its underlying file descriptor.  */
+# if @REPLACE_FCLOSE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fclose rpl_fclose
+#  endif
+_GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fclose, int, (FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fclose, int, (FILE *stream));
+# endif
+_GL_CXXALIASWARN (fclose);
+#elif defined GNULIB_POSIXCHECK
+# undef fclose
+/* Assume fclose is always declared.  */
+_GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - "
+                 "use gnulib module fclose for portable POSIX compliance");
+#endif
+
+#if @GNULIB_FFLUSH@
+/* Flush all pending data on STREAM according to POSIX rules.  Both
+   output and seekable input streams are supported.
+   Note! LOSS OF DATA can occur if fflush is applied on an input stream
+   that is _not_seekable_ or on an update stream that is _not_seekable_
+   and in which the most recent operation was input.  Seekability can
+   be tested with lseek(fileno(fp),0,SEEK_CUR).  */
+# if @REPLACE_FFLUSH@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fflush rpl_fflush
+#  endif
+_GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream));
+_GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream));
+# else
+_GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream));
+# endif
+_GL_CXXALIASWARN (fflush);
+#elif defined GNULIB_POSIXCHECK
+# undef fflush
+/* Assume fflush is always declared.  */
+_GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - "
+                 "use gnulib module fflush for portable POSIX compliance");
+#endif
+
+/* It is very rare that the developer ever has full control of stdin,
+   so any use of gets warrants an unconditional warning.  Assume it is
+   always declared, since it is required by C89.  */
+#undef gets
+_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+
+#if @GNULIB_FOPEN@
+# if @REPLACE_FOPEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fopen
+#   define fopen rpl_fopen
+#  endif
+_GL_FUNCDECL_RPL (fopen, FILE *, (const char *filename, const char *mode)
+                                 _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode));
+# else
+_GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode));
+# endif
+_GL_CXXALIASWARN (fopen);
+#elif defined GNULIB_POSIXCHECK
+# undef fopen
+/* Assume fopen is always declared.  */
+_GL_WARN_ON_USE (fopen, "fopen on Win32 platforms is not POSIX compatible - "
+                 "use gnulib module fopen for portability");
+#endif
+
+#if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@
+# if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \
+     || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fprintf rpl_fprintf
+#  endif
+#  define GNULIB_overrides_fprintf 1
+_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...)
+                                __attribute__ ((__format__ (__printf__, 2, 3)))
+                                _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...));
+# else
+_GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (fprintf);
+#endif
+#if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_fprintf
+#  undef fprintf
+# endif
+/* Assume fprintf is always declared.  */
+_GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - "
+                 "use gnulib module fprintf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if @GNULIB_FPURGE@
+/* Discard all pending buffered I/O data on STREAM.
+   STREAM must not be wide-character oriented.
+   When discarding pending output, the file position is set back to where it
+   was before the write calls.  When discarding pending input, the file
+   position is advanced to match the end of the previously read input.
+   Return 0 if successful.  Upon error, return -1 and set errno.  */
+# if @REPLACE_FPURGE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fpurge rpl_fpurge
+#  endif
+_GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream));
+# else
+#  if !@HAVE_DECL_FPURGE@
+_GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream));
+# endif
+_GL_CXXALIASWARN (fpurge);
+#elif defined GNULIB_POSIXCHECK
+# undef fpurge
+# if HAVE_RAW_DECL_FPURGE
+_GL_WARN_ON_USE (fpurge, "fpurge is not always present - "
+                 "use gnulib module fpurge for portability");
+# endif
+#endif
+
+#if @GNULIB_FPUTC@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fputc
+#   define fputc rpl_fputc
+#  endif
+_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fputc);
+#endif
+
+#if @GNULIB_FPUTS@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fputs
+#   define fputs rpl_fputs
+#  endif
+_GL_FUNCDECL_RPL (fputs, int, (const char *string, FILE *stream)
+                              _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fputs);
+#endif
+
+#if @GNULIB_FREOPEN@
+# if @REPLACE_FREOPEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef freopen
+#   define freopen rpl_freopen
+#  endif
+_GL_FUNCDECL_RPL (freopen, FILE *,
+                  (const char *filename, const char *mode, FILE *stream)
+                  _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (freopen, FILE *,
+                  (const char *filename, const char *mode, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (freopen, FILE *,
+                  (const char *filename, const char *mode, FILE *stream));
+# endif
+_GL_CXXALIASWARN (freopen);
+#elif defined GNULIB_POSIXCHECK
+# undef freopen
+/* Assume freopen is always declared.  */
+_GL_WARN_ON_USE (freopen, "freopen on Win32 platforms is not POSIX compatible - "
+                 "use gnulib module freopen for portability");
+#endif
+
+
+/* Set up the following warnings, based on which modules are in use.
+   GNU Coding Standards discourage the use of fseek, since it imposes
+   an arbitrary limitation on some 32-bit hosts.  Remember that the
+   fseek module depends on the fseeko module, so we only have three
+   cases to consider:
+
+   1. The developer is not using either module.  Issue a warning under
+   GNULIB_POSIXCHECK for both functions, to remind them that both
+   functions have bugs on some systems.  _GL_NO_LARGE_FILES has no
+   impact on this warning.
+
+   2. The developer is using both modules.  They may be unaware of the
+   arbitrary limitations of fseek, so issue a warning under
+   GNULIB_POSIXCHECK.  On the other hand, they may be using both
+   modules intentionally, so the developer can define
+   _GL_NO_LARGE_FILES in the compilation units where the use of fseek
+   is safe, to silence the warning.
+
+   3. The developer is using the fseeko module, but not fseek.  Gnulib
+   guarantees that fseek will still work around platform bugs in that
+   case, but we presume that the developer is aware of the pitfalls of
+   fseek and was trying to avoid it, so issue a warning even when
+   GNULIB_POSIXCHECK is undefined.  Again, _GL_NO_LARGE_FILES can be
+   defined to silence the warning in particular compilation units.
+   In C++ compilations with GNULIB_NAMESPACE, in order to avoid that
+   fseek gets defined as a macro, it is recommended that the developer
+   uses the fseek module, even if he is not calling the fseek function.
+
+   Most gnulib clients that perform stream operations should fall into
+   category 3.  */
+
+#if @GNULIB_FSEEK@
+# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES
+#  define _GL_FSEEK_WARN /* Category 2, above.  */
+#  undef fseek
+# endif
+# if @REPLACE_FSEEK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fseek
+#   define fseek rpl_fseek
+#  endif
+_GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence));
+# else
+_GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence));
+# endif
+_GL_CXXALIASWARN (fseek);
+#endif
+
+#if @GNULIB_FSEEKO@
+# if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES
+#  define _GL_FSEEK_WARN /* Category 3, above.  */
+#  undef fseek
+# endif
+# if @REPLACE_FSEEKO@
+/* Provide fseek, fseeko functions that are aware of a preceding
+   fflush(), and which detect pipes.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fseeko
+#   define fseeko rpl_fseeko
+#  endif
+_GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)
+                               _GL_ARG_NONNULL ((1)));
+#  if !@GNULIB_FSEEK@
+    /* In order to avoid that fseek gets defined as a macro here, the
+       developer can request the 'fseek' module.  */
+#   undef fseek
+#   define fseek rpl_fseek
+static inline int _GL_ARG_NONNULL ((1))
+rpl_fseek (FILE *fp, long offset, int whence)
+{
+  return fseeko (fp, offset, whence);
+}
+#  endif
+_GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence));
+# else
+_GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence));
+# endif
+_GL_CXXALIASWARN (fseeko);
+#elif defined GNULIB_POSIXCHECK
+# define _GL_FSEEK_WARN /* Category 1, above.  */
+# undef fseek
+# undef fseeko
+# if HAVE_RAW_DECL_FSEEKO
+_GL_WARN_ON_USE (fseeko, "fseeko is unportable - "
+                 "use gnulib module fseeko for portability");
+# endif
+#endif
+
+#ifdef _GL_FSEEK_WARN
+# undef _GL_FSEEK_WARN
+/* Here, either fseek is undefined (but C89 guarantees that it is
+   declared), or it is defined as rpl_fseek (declared above).  */
+_GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB "
+                 "on 32-bit platforms - "
+                 "use fseeko function for handling of large files");
+#endif
+
+
+/* ftell, ftello.  See the comments on fseek/fseeko.  */
+
+#if @GNULIB_FTELL@
+# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES
+#  define _GL_FTELL_WARN /* Category 2, above.  */
+#  undef ftell
+# endif
+# if @REPLACE_FTELL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ftell
+#   define ftell rpl_ftell
+#  endif
+_GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (ftell, long, (FILE *fp));
+# else
+_GL_CXXALIAS_SYS (ftell, long, (FILE *fp));
+# endif
+_GL_CXXALIASWARN (ftell);
+#endif
+
+#if @GNULIB_FTELLO@
+# if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES
+#  define _GL_FTELL_WARN /* Category 3, above.  */
+#  undef ftell
+# endif
+# if @REPLACE_FTELLO@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ftello
+#   define ftello rpl_ftello
+#  endif
+_GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1)));
+#  if !@GNULIB_FTELL@
+    /* In order to avoid that ftell gets defined as a macro here, the
+       developer can request the 'ftell' module.  */
+#   undef ftell
+#   define ftell rpl_ftell
+static inline long _GL_ARG_NONNULL ((1))
+rpl_ftell (FILE *f)
+{
+  return ftello (f);
+}
+#  endif
+_GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp));
+# else
+_GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp));
+# endif
+_GL_CXXALIASWARN (ftello);
+#elif defined GNULIB_POSIXCHECK
+# define _GL_FTELL_WARN /* Category 1, above.  */
+# undef ftell
+# undef ftello
+# if HAVE_RAW_DECL_FTELLO
+_GL_WARN_ON_USE (ftello, "ftello is unportable - "
+                 "use gnulib module ftello for portability");
+# endif
+#endif
+
+#ifdef _GL_FTELL_WARN
+# undef _GL_FTELL_WARN
+/* Here, either ftell is undefined (but C89 guarantees that it is
+   declared), or it is defined as rpl_ftell (declared above).  */
+_GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB "
+                 "on 32-bit platforms - "
+                 "use ftello function for handling of large files");
+#endif
+
+
+#if @GNULIB_FWRITE@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fwrite
+#   define fwrite rpl_fwrite
+#  endif
+_GL_FUNCDECL_RPL (fwrite, size_t,
+                  (const void *ptr, size_t s, size_t n, FILE *stream)
+                  _GL_ARG_NONNULL ((1, 4)));
+_GL_CXXALIAS_RPL (fwrite, size_t,
+                  (const void *ptr, size_t s, size_t n, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fwrite, size_t,
+                  (const void *ptr, size_t s, size_t n, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fwrite);
+#endif
+
+#if @GNULIB_GETDELIM@
+/* Read input, up to (and including) the next occurrence of DELIMITER, from
+   STREAM, store it in *LINEPTR (and NUL-terminate it).
+   *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE
+   bytes of space.  It is realloc'd as necessary.
+   Return the number of bytes read and stored at *LINEPTR (not including the
+   NUL terminator), or -1 on error or EOF.  */
+# if @REPLACE_GETDELIM@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getdelim
+#   define getdelim rpl_getdelim
+#  endif
+_GL_FUNCDECL_RPL (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 4)));
+_GL_CXXALIAS_RPL (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream));
+# else
+#  if !@HAVE_DECL_GETDELIM@
+_GL_FUNCDECL_SYS (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 4)));
+#  endif
+_GL_CXXALIAS_SYS (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream));
+# endif
+_GL_CXXALIASWARN (getdelim);
+#elif defined GNULIB_POSIXCHECK
+# undef getdelim
+# if HAVE_RAW_DECL_GETDELIM
+_GL_WARN_ON_USE (getdelim, "getdelim is unportable - "
+                 "use gnulib module getdelim for portability");
+# endif
+#endif
+
+#if @GNULIB_GETLINE@
+/* Read a line, up to (and including) the next newline, from STREAM, store it
+   in *LINEPTR (and NUL-terminate it).
+   *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE
+   bytes of space.  It is realloc'd as necessary.
+   Return the number of bytes read and stored at *LINEPTR (not including the
+   NUL terminator), or -1 on error or EOF.  */
+# if @REPLACE_GETLINE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getline
+#   define getline rpl_getline
+#  endif
+_GL_FUNCDECL_RPL (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+_GL_CXXALIAS_RPL (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream));
+# else
+#  if !@HAVE_DECL_GETLINE@
+_GL_FUNCDECL_SYS (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream));
+# endif
+_GL_CXXALIASWARN (getline);
+#elif defined GNULIB_POSIXCHECK
+# undef getline
+# if HAVE_RAW_DECL_GETLINE
+_GL_WARN_ON_USE (getline, "getline is unportable - "
+                 "use gnulib module getline for portability");
+# endif
+#endif
+
+#if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@
+struct obstack;
+/* Grow an obstack with formatted output.  Return the number of
+   bytes added to OBS.  No trailing nul byte is added, and the
+   object should be closed with obstack_finish before use.  Upon
+   memory allocation error, call obstack_alloc_failed_handler.  Upon
+   other error, return -1.  */
+# if @REPLACE_OBSTACK_PRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define obstack_printf rpl_obstack_printf
+#  endif
+_GL_FUNCDECL_RPL (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...)
+                  __attribute__ ((__format__ (__printf__, 2, 3)))
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...));
+# else
+#  if !@HAVE_DECL_OBSTACK_PRINTF@
+_GL_FUNCDECL_SYS (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...)
+                  __attribute__ ((__format__ (__printf__, 2, 3)))
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (obstack_printf);
+# if @REPLACE_OBSTACK_PRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define obstack_vprintf rpl_obstack_vprintf
+#  endif
+_GL_FUNCDECL_RPL (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args)
+                  __attribute__ ((__format__ (__printf__, 2, 0)))
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args));
+# else
+#  if !@HAVE_DECL_OBSTACK_PRINTF@
+_GL_FUNCDECL_SYS (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args)
+                  __attribute__ ((__format__ (__printf__, 2, 0)))
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (obstack_vprintf);
+#endif
+
+#if @GNULIB_PERROR@
+/* Print a message to standard error, describing the value of ERRNO,
+   (if STRING is not NULL and not empty) prefixed with STRING and ": ",
+   and terminated with a newline.  */
+# if @REPLACE_PERROR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define perror rpl_perror
+#  endif
+_GL_FUNCDECL_RPL (perror, void, (const char *string));
+_GL_CXXALIAS_RPL (perror, void, (const char *string));
+# else
+_GL_CXXALIAS_SYS (perror, void, (const char *string));
+# endif
+_GL_CXXALIASWARN (perror);
+#elif defined GNULIB_POSIXCHECK
+# undef perror
+/* Assume perror is always declared.  */
+_GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - "
+                 "use gnulib module perror for portability");
+#endif
+
+#if @GNULIB_POPEN@
+# if @REPLACE_POPEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef popen
+#   define popen rpl_popen
+#  endif
+_GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode)
+                                 _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode));
+# else
+_GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode));
+# endif
+_GL_CXXALIASWARN (popen);
+#elif defined GNULIB_POSIXCHECK
+# undef popen
+# if HAVE_RAW_DECL_POPEN
+_GL_WARN_ON_USE (popen, "popen is buggy on some platforms - "
+                 "use gnulib module popen or pipe for more portability");
+# endif
+#endif
+
+#if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@
+# if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \
+     || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+/* Don't break __attribute__((format(printf,M,N))).  */
+#   define printf __printf__
+#  endif
+#  define GNULIB_overrides_printf 1
+_GL_FUNCDECL_RPL_1 (__printf__, int,
+                    (const char *format, ...)
+                    __attribute__ ((__format__ (__printf__, 1, 2)))
+                    _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...));
+# else
+_GL_CXXALIAS_SYS (printf, int, (const char *format, ...));
+# endif
+_GL_CXXALIASWARN (printf);
+#endif
+#if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_printf
+#  undef printf
+# endif
+/* Assume printf is always declared.  */
+_GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - "
+                 "use gnulib module printf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if @GNULIB_PUTC@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef putc
+#   define putc rpl_fputc
+#  endif
+_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream));
+# endif
+_GL_CXXALIASWARN (putc);
+#endif
+
+#if @GNULIB_PUTCHAR@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef putchar
+#   define putchar rpl_putchar
+#  endif
+_GL_FUNCDECL_RPL (putchar, int, (int c));
+_GL_CXXALIAS_RPL (putchar, int, (int c));
+# else
+_GL_CXXALIAS_SYS (putchar, int, (int c));
+# endif
+_GL_CXXALIASWARN (putchar);
+#endif
+
+#if @GNULIB_PUTS@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef puts
+#   define puts rpl_puts
+#  endif
+_GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (puts, int, (const char *string));
+# else
+_GL_CXXALIAS_SYS (puts, int, (const char *string));
+# endif
+_GL_CXXALIASWARN (puts);
+#endif
+
+#if @GNULIB_REMOVE@
+# if @REPLACE_REMOVE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef remove
+#   define remove rpl_remove
+#  endif
+_GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (remove, int, (const char *name));
+# else
+_GL_CXXALIAS_SYS (remove, int, (const char *name));
+# endif
+_GL_CXXALIASWARN (remove);
+#elif defined GNULIB_POSIXCHECK
+# undef remove
+/* Assume remove is always declared.  */
+_GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - "
+                 "use gnulib module remove for more portability");
+#endif
+
+#if @GNULIB_RENAME@
+# if @REPLACE_RENAME@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef rename
+#   define rename rpl_rename
+#  endif
+_GL_FUNCDECL_RPL (rename, int,
+                  (const char *old_filename, const char *new_filename)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (rename, int,
+                  (const char *old_filename, const char *new_filename));
+# else
+_GL_CXXALIAS_SYS (rename, int,
+                  (const char *old_filename, const char *new_filename));
+# endif
+_GL_CXXALIASWARN (rename);
+#elif defined GNULIB_POSIXCHECK
+# undef rename
+/* Assume rename is always declared.  */
+_GL_WARN_ON_USE (rename, "rename is buggy on some platforms - "
+                 "use gnulib module rename for more portability");
+#endif
+
+#if @GNULIB_RENAMEAT@
+# if @REPLACE_RENAMEAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef renameat
+#   define renameat rpl_renameat
+#  endif
+_GL_FUNCDECL_RPL (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2)
+                  _GL_ARG_NONNULL ((2, 4)));
+_GL_CXXALIAS_RPL (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2));
+# else
+#  if !@HAVE_RENAMEAT@
+_GL_FUNCDECL_SYS (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2)
+                  _GL_ARG_NONNULL ((2, 4)));
+#  endif
+_GL_CXXALIAS_SYS (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2));
+# endif
+_GL_CXXALIASWARN (renameat);
+#elif defined GNULIB_POSIXCHECK
+# undef renameat
+# if HAVE_RAW_DECL_RENAMEAT
+_GL_WARN_ON_USE (renameat, "renameat is not portable - "
+                 "use gnulib module renameat for portability");
+# endif
+#endif
+
+#if @GNULIB_SNPRINTF@
+# if @REPLACE_SNPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define snprintf rpl_snprintf
+#  endif
+_GL_FUNCDECL_RPL (snprintf, int,
+                  (char *str, size_t size, const char *format, ...)
+                  __attribute__ ((__format__ (__printf__, 3, 4)))
+                  _GL_ARG_NONNULL ((3)));
+_GL_CXXALIAS_RPL (snprintf, int,
+                  (char *str, size_t size, const char *format, ...));
+# else
+#  if !@HAVE_DECL_SNPRINTF@
+_GL_FUNCDECL_SYS (snprintf, int,
+                  (char *str, size_t size, const char *format, ...)
+                  __attribute__ ((__format__ (__printf__, 3, 4)))
+                  _GL_ARG_NONNULL ((3)));
+#  endif
+_GL_CXXALIAS_SYS (snprintf, int,
+                  (char *str, size_t size, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (snprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef snprintf
+# if HAVE_RAW_DECL_SNPRINTF
+_GL_WARN_ON_USE (snprintf, "snprintf is unportable - "
+                 "use gnulib module snprintf for portability");
+# endif
+#endif
+
+/* Some people would argue that sprintf should be handled like gets
+   (for example, OpenBSD issues a link warning for both functions),
+   since both can cause security holes due to buffer overruns.
+   However, we believe that sprintf can be used safely, and is more
+   efficient than snprintf in those safe cases; and as proof of our
+   belief, we use sprintf in several gnulib modules.  So this header
+   intentionally avoids adding a warning to sprintf except when
+   GNULIB_POSIXCHECK is defined.  */
+
+#if @GNULIB_SPRINTF_POSIX@
+# if @REPLACE_SPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define sprintf rpl_sprintf
+#  endif
+_GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...)
+                                __attribute__ ((__format__ (__printf__, 2, 3)))
+                                _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...));
+# else
+_GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (sprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef sprintf
+/* Assume sprintf is always declared.  */
+_GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - "
+                 "use gnulib module sprintf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if @GNULIB_VASPRINTF@
+/* Write formatted output to a string dynamically allocated with malloc().
+   If the memory allocation succeeds, store the address of the string in
+   *RESULT and return the number of resulting bytes, excluding the trailing
+   NUL.  Upon memory allocation error, or some other error, return -1.  */
+# if @REPLACE_VASPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define asprintf rpl_asprintf
+#  endif
+_GL_FUNCDECL_RPL (asprintf, int,
+                  (char **result, const char *format, ...)
+                  __attribute__ ((__format__ (__printf__, 2, 3)))
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (asprintf, int,
+                  (char **result, const char *format, ...));
+# else
+#  if !@HAVE_VASPRINTF@
+_GL_FUNCDECL_SYS (asprintf, int,
+                  (char **result, const char *format, ...)
+                  __attribute__ ((__format__ (__printf__, 2, 3)))
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (asprintf, int,
+                  (char **result, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (asprintf);
+# if @REPLACE_VASPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vasprintf rpl_vasprintf
+#  endif
+_GL_FUNCDECL_RPL (vasprintf, int,
+                  (char **result, const char *format, va_list args)
+                  __attribute__ ((__format__ (__printf__, 2, 0)))
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (vasprintf, int,
+                  (char **result, const char *format, va_list args));
+# else
+#  if !@HAVE_VASPRINTF@
+_GL_FUNCDECL_SYS (vasprintf, int,
+                  (char **result, const char *format, va_list args)
+                  __attribute__ ((__format__ (__printf__, 2, 0)))
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (vasprintf, int,
+                  (char **result, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vasprintf);
+#endif
+
+#if @GNULIB_VDPRINTF@
+# if @REPLACE_VDPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vdprintf rpl_vdprintf
+#  endif
+_GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *format, va_list args)
+                                 __attribute__ ((__format__ (__printf__, 2, 0)))
+                                 _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args));
+# else
+#  if !@HAVE_VDPRINTF@
+_GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args)
+                                 __attribute__ ((__format__ (__printf__, 2, 0)))
+                                 _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (vdprintf, int, (int fd, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vdprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef vdprintf
+# if HAVE_RAW_DECL_VDPRINTF
+_GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - "
+                 "use gnulib module vdprintf for portability");
+# endif
+#endif
+
+#if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@
+# if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \
+     || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vfprintf rpl_vfprintf
+#  endif
+#  define GNULIB_overrides_vfprintf 1
+_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)
+                                 __attribute__ ((__format__ (__printf__, 2, 0)))
+                                 _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args));
+# else
+_GL_CXXALIAS_SYS (vfprintf, int, (FILE *fp, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vfprintf);
+#endif
+#if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_vfprintf
+#  undef vfprintf
+# endif
+/* Assume vfprintf is always declared.  */
+_GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - "
+                 "use gnulib module vfprintf-posix for portable "
+                      "POSIX compliance");
+#endif
+
+#if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@
+# if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \
+     || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vprintf rpl_vprintf
+#  endif
+#  define GNULIB_overrides_vprintf 1
+_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args)
+                                __attribute__ ((__format__ (__printf__, 1, 0)))
+                                _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (vprintf, int, (const char *format, va_list args));
+# else
+_GL_CXXALIAS_SYS (vprintf, int, (const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vprintf);
+#endif
+#if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_vprintf
+#  undef vprintf
+# endif
+/* Assume vprintf is always declared.  */
+_GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - "
+                 "use gnulib module vprintf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if @GNULIB_VSNPRINTF@
+# if @REPLACE_VSNPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vsnprintf rpl_vsnprintf
+#  endif
+_GL_FUNCDECL_RPL (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args)
+                  __attribute__ ((__format__ (__printf__, 3, 0)))
+                  _GL_ARG_NONNULL ((3)));
+_GL_CXXALIAS_RPL (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args));
+# else
+#  if !@HAVE_DECL_VSNPRINTF@
+_GL_FUNCDECL_SYS (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args)
+                  __attribute__ ((__format__ (__printf__, 3, 0)))
+                  _GL_ARG_NONNULL ((3)));
+#  endif
+_GL_CXXALIAS_SYS (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vsnprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef vsnprintf
+# if HAVE_RAW_DECL_VSNPRINTF
+_GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - "
+                 "use gnulib module vsnprintf for portability");
+# endif
+#endif
+
+#if @GNULIB_VSPRINTF_POSIX@
+# if @REPLACE_VSPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vsprintf rpl_vsprintf
+#  endif
+_GL_FUNCDECL_RPL (vsprintf, int,
+                  (char *str, const char *format, va_list args)
+                  __attribute__ ((__format__ (__printf__, 2, 0)))
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (vsprintf, int,
+                  (char *str, const char *format, va_list args));
+# else
+_GL_CXXALIAS_SYS (vsprintf, int,
+                  (char *str, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vsprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef vsprintf
+/* Assume vsprintf is always declared.  */
+_GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - "
+                 "use gnulib module vsprintf-posix for portable "
+                      "POSIX compliance");
+#endif
+
+
+#endif /* _GL_STDIO_H */
+#endif /* _GL_STDIO_H */
+#endif
diff --git a/gnu/stdlib.in.h b/gnu/stdlib.in.h
new file mode 100644 (file)
index 0000000..9b40775
--- /dev/null
@@ -0,0 +1,638 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A GNU-like <stdlib.h>.
+
+   Copyright (C) 1995, 2001-2004, 2006-2010 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
+
+#if defined __need_malloc_and_calloc
+/* Special invocation convention inside glibc header files.  */
+
+#@INCLUDE_NEXT@ @NEXT_STDLIB_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_STDLIB_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_STDLIB_H@
+
+#ifndef _GL_STDLIB_H
+#define _GL_STDLIB_H
+
+/* NetBSD 5.0 mis-defines NULL.  */
+#include <stddef.h>
+
+/* Solaris declares getloadavg() in <sys/loadavg.h>.  */
+#if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@
+# include <sys/loadavg.h>
+#endif
+
+/* OSF/1 5.1 declares 'struct random_data' in <random.h>, which is included
+   from <stdlib.h> if _REENTRANT is defined.  Include it always.  */
+#if @HAVE_RANDOM_H@
+# include <random.h>
+#endif
+
+#if !@HAVE_STRUCT_RANDOM_DATA@ || (@GNULIB_RANDOM_R@ && !@HAVE_RANDOM_R@) \
+    || defined GNULIB_POSIXCHECK
+# include <stdint.h>
+#endif
+
+#if !@HAVE_STRUCT_RANDOM_DATA@
+struct random_data
+{
+  int32_t *fptr;                /* Front pointer.  */
+  int32_t *rptr;                /* Rear pointer.  */
+  int32_t *state;               /* Array of state values.  */
+  int rand_type;                /* Type of random number generator.  */
+  int rand_deg;                 /* Degree of random number generator.  */
+  int rand_sep;                 /* Distance between front and rear.  */
+  int32_t *end_ptr;             /* Pointer behind state table.  */
+};
+#endif
+
+#if (@GNULIB_MKSTEMP@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__
+/* On MacOS X 10.3, only <unistd.h> declares mkstemp.  */
+/* On Cygwin 1.7.1, only <unistd.h> declares getsubopt.  */
+/* But avoid namespace pollution on glibc systems.  */
+# include <unistd.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.  */
+
+
+/* Some systems do not define EXIT_*, despite otherwise supporting C89.  */
+#ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+#endif
+/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere
+   with proper operation of xargs.  */
+#ifndef EXIT_FAILURE
+# define EXIT_FAILURE 1
+#elif EXIT_FAILURE != 1
+# undef EXIT_FAILURE
+# define EXIT_FAILURE 1
+#endif
+
+
+#if @GNULIB_ATOLL@
+/* Parse a signed decimal integer.
+   Returns the value of the integer.  Errors are not detected.  */
+# if !@HAVE_ATOLL@
+_GL_FUNCDECL_SYS (atoll, long long, (const char *string) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (atoll, long long, (const char *string));
+_GL_CXXALIASWARN (atoll);
+#elif defined GNULIB_POSIXCHECK
+# undef atoll
+# if HAVE_RAW_DECL_ATOLL
+_GL_WARN_ON_USE (atoll, "atoll is unportable - "
+                 "use gnulib module atoll for portability");
+# endif
+#endif
+
+#if @GNULIB_CALLOC_POSIX@
+# if !@HAVE_CALLOC_POSIX@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef calloc
+#   define calloc rpl_calloc
+#  endif
+_GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size));
+_GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size));
+# else
+_GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size));
+# endif
+_GL_CXXALIASWARN (calloc);
+#elif defined GNULIB_POSIXCHECK
+# undef calloc
+/* Assume calloc is always declared.  */
+_GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - "
+                 "use gnulib module calloc-posix for portability");
+#endif
+
+#if @GNULIB_CANONICALIZE_FILE_NAME@
+# if @REPLACE_CANONICALIZE_FILE_NAME@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define canonicalize_file_name rpl_canonicalize_file_name
+#  endif
+_GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name)
+                                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name));
+# else
+#  if !@HAVE_CANONICALIZE_FILE_NAME@
+_GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name)
+                                                  _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name));
+# endif
+_GL_CXXALIASWARN (canonicalize_file_name);
+#elif defined GNULIB_POSIXCHECK
+# undef canonicalize_file_name
+# if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME
+_GL_WARN_ON_USE (canonicalize_file_name, "canonicalize_file_name is unportable - "
+                 "use gnulib module canonicalize-lgpl for portability");
+# endif
+#endif
+
+#if @GNULIB_GETLOADAVG@
+/* Store max(NELEM,3) load average numbers in LOADAVG[].
+   The three numbers are the load average of the last 1 minute, the last 5
+   minutes, and the last 15 minutes, respectively.
+   LOADAVG is an array of NELEM numbers.  */
+# if !@HAVE_DECL_GETLOADAVG@
+_GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem)
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem));
+_GL_CXXALIASWARN (getloadavg);
+#elif defined GNULIB_POSIXCHECK
+# undef getloadavg
+# if HAVE_RAW_DECL_GETLOADAVG
+_GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - "
+                 "use gnulib module getloadavg for portability");
+# endif
+#endif
+
+#if @GNULIB_GETSUBOPT@
+/* Assuming *OPTIONP is a comma separated list of elements of the form
+   "token" or "token=value", getsubopt parses the first of these elements.
+   If the first element refers to a "token" that is member of the given
+   NULL-terminated array of tokens:
+     - It replaces the comma with a NUL byte, updates *OPTIONP to point past
+       the first option and the comma, sets *VALUEP to the value of the
+       element (or NULL if it doesn't contain an "=" sign),
+     - It returns the index of the "token" in the given array of tokens.
+   Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined.
+   For more details see the POSIX:2001 specification.
+   http://www.opengroup.org/susv3xsh/getsubopt.html */
+# if !@HAVE_GETSUBOPT@
+_GL_FUNCDECL_SYS (getsubopt, int,
+                  (char **optionp, char *const *tokens, char **valuep)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+# endif
+_GL_CXXALIAS_SYS (getsubopt, int,
+                  (char **optionp, char *const *tokens, char **valuep));
+_GL_CXXALIASWARN (getsubopt);
+#elif defined GNULIB_POSIXCHECK
+# undef getsubopt
+# if HAVE_RAW_DECL_GETSUBOPT
+_GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - "
+                 "use gnulib module getsubopt for portability");
+# endif
+#endif
+
+#if @GNULIB_MALLOC_POSIX@
+# if !@HAVE_MALLOC_POSIX@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef malloc
+#   define malloc rpl_malloc
+#  endif
+_GL_FUNCDECL_RPL (malloc, void *, (size_t size));
+_GL_CXXALIAS_RPL (malloc, void *, (size_t size));
+# else
+_GL_CXXALIAS_SYS (malloc, void *, (size_t size));
+# endif
+_GL_CXXALIASWARN (malloc);
+#elif defined GNULIB_POSIXCHECK
+# undef malloc
+/* Assume malloc is always declared.  */
+_GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - "
+                 "use gnulib module malloc-posix for portability");
+#endif
+
+#if @GNULIB_MKDTEMP@
+/* Create a unique temporary directory from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the directory name unique.
+   Returns TEMPLATE, or a null pointer if it cannot get a unique name.
+   The directory is created mode 700.  */
+# if !@HAVE_MKDTEMP@
+_GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/));
+_GL_CXXALIASWARN (mkdtemp);
+#elif defined GNULIB_POSIXCHECK
+# undef mkdtemp
+# if HAVE_RAW_DECL_MKDTEMP
+_GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - "
+                 "use gnulib module mkdtemp for portability");
+# endif
+#endif
+
+#if @GNULIB_MKOSTEMP@
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   The file is then created, with the specified flags, ensuring it didn't exist
+   before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if !@HAVE_MKOSTEMP@
+_GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)
+                                 _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/));
+_GL_CXXALIASWARN (mkostemp);
+#elif defined GNULIB_POSIXCHECK
+# undef mkostemp
+# if HAVE_RAW_DECL_MKOSTEMP
+_GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - "
+                 "use gnulib module mkostemp for portability");
+# endif
+#endif
+
+#if @GNULIB_MKOSTEMPS@
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE before a suffix of length
+   SUFFIXLEN must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   The file is then created, with the specified flags, ensuring it didn't exist
+   before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if !@HAVE_MKOSTEMPS@
+_GL_FUNCDECL_SYS (mkostemps, int,
+                  (char * /*template*/, int /*suffixlen*/, int /*flags*/)
+                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkostemps, int,
+                  (char * /*template*/, int /*suffixlen*/, int /*flags*/));
+_GL_CXXALIASWARN (mkostemps);
+#elif defined GNULIB_POSIXCHECK
+# undef mkostemps
+# if HAVE_RAW_DECL_MKOSTEMPS
+_GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - "
+                 "use gnulib module mkostemps for portability");
+# endif
+#endif
+
+#if @GNULIB_MKSTEMP@
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The file is then created, ensuring it didn't exist before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if @REPLACE_MKSTEMP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mkstemp rpl_mkstemp
+#  endif
+_GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/));
+# else
+_GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/));
+# endif
+_GL_CXXALIASWARN (mkstemp);
+#elif defined GNULIB_POSIXCHECK
+# undef mkstemp
+# if HAVE_RAW_DECL_MKSTEMP
+_GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - "
+                 "use gnulib module mkstemp for portability");
+# endif
+#endif
+
+#if @GNULIB_MKSTEMPS@
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE prior to a suffix of length
+   SUFFIXLEN must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The file is then created, ensuring it didn't exist before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if !@HAVE_MKSTEMPS@
+_GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)
+                                 _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/));
+_GL_CXXALIASWARN (mkstemps);
+#elif defined GNULIB_POSIXCHECK
+# undef mkstemps
+# if HAVE_RAW_DECL_MKSTEMPS
+_GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - "
+                 "use gnulib module mkstemps for portability");
+# endif
+#endif
+
+#if @GNULIB_PUTENV@
+# if @REPLACE_PUTENV@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef putenv
+#   define putenv rpl_putenv
+#  endif
+_GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (putenv, int, (char *string));
+# else
+_GL_CXXALIAS_SYS (putenv, int, (char *string));
+# endif
+_GL_CXXALIASWARN (putenv);
+#endif
+
+
+#if @GNULIB_RANDOM_R@
+# if !@HAVE_RANDOM_R@
+#  ifndef RAND_MAX
+#   define RAND_MAX 2147483647
+#  endif
+# endif
+#endif
+
+#if @GNULIB_RANDOM_R@
+# if !@HAVE_RANDOM_R@
+_GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result)
+                                 _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result));
+_GL_CXXALIASWARN (random_r);
+#elif defined GNULIB_POSIXCHECK
+# undef random_r
+# if HAVE_RAW_DECL_RANDOM_R
+_GL_WARN_ON_USE (random_r, "random_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+#if @GNULIB_RANDOM_R@
+# if !@HAVE_RANDOM_R@
+_GL_FUNCDECL_SYS (srandom_r, int,
+                  (unsigned int seed, struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (srandom_r, int,
+                  (unsigned int seed, struct random_data *rand_state));
+_GL_CXXALIASWARN (srandom_r);
+#elif defined GNULIB_POSIXCHECK
+# undef srandom_r
+# if HAVE_RAW_DECL_SRANDOM_R
+_GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+#if @GNULIB_RANDOM_R@
+# if !@HAVE_RANDOM_R@
+_GL_FUNCDECL_SYS (initstate_r, int,
+                  (unsigned int seed, char *buf, size_t buf_size,
+                   struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((2, 4)));
+# endif
+_GL_CXXALIAS_SYS (initstate_r, int,
+                  (unsigned int seed, char *buf, size_t buf_size,
+                   struct random_data *rand_state));
+_GL_CXXALIASWARN (initstate_r);
+#elif defined GNULIB_POSIXCHECK
+# undef initstate_r
+# if HAVE_RAW_DECL_INITSTATE_R
+_GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+#if @GNULIB_RANDOM_R@
+# if !@HAVE_RANDOM_R@
+_GL_FUNCDECL_SYS (setstate_r, int,
+                  (char *arg_state, struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (setstate_r, int,
+                  (char *arg_state, struct random_data *rand_state));
+_GL_CXXALIASWARN (setstate_r);
+#elif defined GNULIB_POSIXCHECK
+# undef setstate_r
+# if HAVE_RAW_DECL_SETSTATE_R
+_GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+
+#if @GNULIB_REALLOC_POSIX@
+# if !@HAVE_REALLOC_POSIX@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef realloc
+#   define realloc rpl_realloc
+#  endif
+_GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size));
+_GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size));
+# else
+_GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size));
+# endif
+_GL_CXXALIASWARN (realloc);
+#elif defined GNULIB_POSIXCHECK
+# undef realloc
+/* Assume realloc is always declared.  */
+_GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - "
+                 "use gnulib module realloc-posix for portability");
+#endif
+
+#if @GNULIB_REALPATH@
+# if @REPLACE_REALPATH@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define realpath rpl_realpath
+#  endif
+_GL_FUNCDECL_RPL (realpath, char *, (const char *name, char *resolved)
+                                    _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (realpath, char *, (const char *name, char *resolved));
+# else
+#  if !@HAVE_REALPATH@
+_GL_FUNCDECL_SYS (realpath, char *, (const char *name, char *resolved)
+                                    _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (realpath, char *, (const char *name, char *resolved));
+# endif
+_GL_CXXALIASWARN (realpath);
+#elif defined GNULIB_POSIXCHECK
+# undef realpath
+# if HAVE_RAW_DECL_REALPATH
+_GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module "
+                 "canonicalize or canonicalize-lgpl for portability");
+# endif
+#endif
+
+#if @GNULIB_RPMATCH@
+/* Test a user response to a question.
+   Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear.  */
+# if !@HAVE_RPMATCH@
+_GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (rpmatch, int, (const char *response));
+_GL_CXXALIASWARN (rpmatch);
+#elif defined GNULIB_POSIXCHECK
+# undef rpmatch
+# if HAVE_RAW_DECL_RPMATCH
+_GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - "
+                 "use gnulib module rpmatch for portability");
+# endif
+#endif
+
+#if @GNULIB_SETENV@
+/* Set NAME to VALUE in the environment.
+   If REPLACE is nonzero, overwrite an existing value.  */
+# if @REPLACE_SETENV@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef setenv
+#   define setenv rpl_setenv
+#  endif
+_GL_FUNCDECL_RPL (setenv, int,
+                  (const char *name, const char *value, int replace)
+                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (setenv, int,
+                  (const char *name, const char *value, int replace));
+# else
+#  if !@HAVE_SETENV@
+_GL_FUNCDECL_SYS (setenv, int,
+                  (const char *name, const char *value, int replace)
+                  _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (setenv, int,
+                  (const char *name, const char *value, int replace));
+# endif
+_GL_CXXALIASWARN (setenv);
+#elif defined GNULIB_POSIXCHECK
+# undef setenv
+# if HAVE_RAW_DECL_SETENV
+_GL_WARN_ON_USE (setenv, "setenv is unportable - "
+                 "use gnulib module setenv for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOD@
+ /* Parse a double from STRING, updating ENDP if appropriate.  */
+# if @REPLACE_STRTOD@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strtod rpl_strtod
+#  endif
+_GL_FUNCDECL_RPL (strtod, double, (const char *str, char **endp)
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtod, double, (const char *str, char **endp));
+# else
+#  if !@HAVE_STRTOD@
+_GL_FUNCDECL_SYS (strtod, double, (const char *str, char **endp)
+                                  _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strtod, double, (const char *str, char **endp));
+# endif
+_GL_CXXALIASWARN (strtod);
+#elif defined GNULIB_POSIXCHECK
+# undef strtod
+# if HAVE_RAW_DECL_STRTOD
+_GL_WARN_ON_USE (strtod, "strtod is unportable - "
+                 "use gnulib module strtod for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOLL@
+/* Parse a signed integer whose textual representation starts at STRING.
+   The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
+   it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
+   "0x").
+   If ENDPTR is not NULL, the address of the first byte after the integer is
+   stored in *ENDPTR.
+   Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set
+   to ERANGE.  */
+# if !@HAVE_STRTOLL@
+_GL_FUNCDECL_SYS (strtoll, long long,
+                  (const char *string, char **endptr, int base)
+                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoll, long long,
+                  (const char *string, char **endptr, int base));
+_GL_CXXALIASWARN (strtoll);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoll
+# if HAVE_RAW_DECL_STRTOLL
+_GL_WARN_ON_USE (strtoll, "strtoll is unportable - "
+                 "use gnulib module strtoll for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOULL@
+/* Parse an unsigned integer whose textual representation starts at STRING.
+   The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
+   it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
+   "0x").
+   If ENDPTR is not NULL, the address of the first byte after the integer is
+   stored in *ENDPTR.
+   Upon overflow, the return value is ULLONG_MAX, and errno is set to
+   ERANGE.  */
+# if !@HAVE_STRTOULL@
+_GL_FUNCDECL_SYS (strtoull, unsigned long long,
+                  (const char *string, char **endptr, int base)
+                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoull, unsigned long long,
+                  (const char *string, char **endptr, int base));
+_GL_CXXALIASWARN (strtoull);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoull
+# if HAVE_RAW_DECL_STRTOULL
+_GL_WARN_ON_USE (strtoull, "strtoull is unportable - "
+                 "use gnulib module strtoull for portability");
+# endif
+#endif
+
+#if @GNULIB_UNSETENV@
+/* Remove the variable NAME from the environment.  */
+# if @REPLACE_UNSETENV@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef unsetenv
+#   define unsetenv rpl_unsetenv
+#  endif
+_GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (unsetenv, int, (const char *name));
+# else
+#  if !@HAVE_UNSETENV@
+_GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (unsetenv, int, (const char *name));
+# endif
+_GL_CXXALIASWARN (unsetenv);
+#elif defined GNULIB_POSIXCHECK
+# undef unsetenv
+# if HAVE_RAW_DECL_UNSETENV
+_GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - "
+                 "use gnulib module unsetenv for portability");
+# endif
+#endif
+
+
+#endif /* _GL_STDLIB_H */
+#endif /* _GL_STDLIB_H */
+#endif
diff --git a/gnu/stpcpy.c b/gnu/stpcpy.c
new file mode 100644 (file)
index 0000000..cd7fad0
--- /dev/null
@@ -0,0 +1,51 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* stpcpy.c -- copy a string and return pointer to end of new string
+   Copyright (C) 1992, 1995, 1997-1998, 2006, 2009-2010 Free Software
+   Foundation, Inc.
+
+   NOTE: The canonical source of this file is maintained with the GNU C Library.
+   Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+
+   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 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>
+
+#include <string.h>
+
+#undef __stpcpy
+#ifdef _LIBC
+# undef stpcpy
+#endif
+
+#ifndef weak_alias
+# define __stpcpy stpcpy
+#endif
+
+/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST.  */
+char *
+__stpcpy (char *dest, const char *src)
+{
+  register char *d = dest;
+  register const char *s = src;
+
+  do
+    *d++ = *s;
+  while (*s++ != '\0');
+
+  return d - 1;
+}
+#ifdef weak_alias
+weak_alias (__stpcpy, stpcpy)
+#endif
diff --git a/gnu/strcasecmp.c b/gnu/strcasecmp.c
new file mode 100644 (file)
index 0000000..d954714
--- /dev/null
@@ -0,0 +1,65 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Case-insensitive string comparison function.
+   Copyright (C) 1998-1999, 2005-2007, 2009-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <string.h>
+
+#include <ctype.h>
+#include <limits.h>
+
+#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
+
+/* 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.
+   Note: This function does not work with multibyte strings!  */
+
+int
+strcasecmp (const char *s1, const char *s2)
+{
+  const unsigned char *p1 = (const unsigned char *) s1;
+  const unsigned char *p2 = (const unsigned char *) s2;
+  unsigned char c1, c2;
+
+  if (p1 == p2)
+    return 0;
+
+  do
+    {
+      c1 = TOLOWER (*p1);
+      c2 = TOLOWER (*p2);
+
+      if (c1 == '\0')
+        break;
+
+      ++p1;
+      ++p2;
+    }
+  while (c1 == c2);
+
+  if (UCHAR_MAX <= INT_MAX)
+    return c1 - c2;
+  else
+    /* On machines where 'char' and 'int' are types of the same size, the
+       difference of two 'unsigned char' values - including the sign bit -
+       doesn't fit in an 'int'.  */
+    return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
+}
diff --git a/gnu/strchrnul.c b/gnu/strchrnul.c
new file mode 100644 (file)
index 0000000..eb431da
--- /dev/null
@@ -0,0 +1,144 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Searching in a string.
+   Copyright (C) 2003, 2007, 2008, 2009, 2010 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 <string.h>
+
+/* Find the first occurrence of C in S or the final NUL byte.  */
+char *
+strchrnul (const char *s, int c_in)
+{
+  /* On 32-bit hardware, choosing longword to be a 32-bit unsigned
+     long instead of a 64-bit uintmax_t tends to give better
+     performance.  On 64-bit hardware, unsigned long is generally 64
+     bits already.  Change this typedef to experiment with
+     performance.  */
+  typedef unsigned long int longword;
+
+  const unsigned char *char_ptr;
+  const longword *longword_ptr;
+  longword repeated_one;
+  longword repeated_c;
+  unsigned char c;
+
+  c = (unsigned char) c_in;
+  if (!c)
+    return rawmemchr (s, 0);
+
+  /* Handle the first few bytes by reading one byte at a time.
+     Do this until CHAR_PTR is aligned on a longword boundary.  */
+  for (char_ptr = (const unsigned char *) s;
+       (size_t) char_ptr % sizeof (longword) != 0;
+       ++char_ptr)
+    if (!*char_ptr || *char_ptr == c)
+      return (char *) char_ptr;
+
+  longword_ptr = (const longword *) char_ptr;
+
+  /* All these elucidatory comments refer to 4-byte longwords,
+     but the theory applies equally well to any size longwords.  */
+
+  /* Compute auxiliary longword values:
+     repeated_one is a value which has a 1 in every byte.
+     repeated_c has c in every byte.  */
+  repeated_one = 0x01010101;
+  repeated_c = c | (c << 8);
+  repeated_c |= repeated_c << 16;
+  if (0xffffffffU < (longword) -1)
+    {
+      repeated_one |= repeated_one << 31 << 1;
+      repeated_c |= repeated_c << 31 << 1;
+      if (8 < sizeof (longword))
+        {
+          size_t i;
+
+          for (i = 64; i < sizeof (longword) * 8; i *= 2)
+            {
+              repeated_one |= repeated_one << i;
+              repeated_c |= repeated_c << i;
+            }
+        }
+    }
+
+  /* Instead of the traditional loop which tests each byte, we will
+     test a longword at a time.  The tricky part is testing if *any of
+     the four* bytes in the longword in question are equal to NUL or
+     c.  We first use an xor with repeated_c.  This reduces the task
+     to testing whether *any of the four* bytes in longword1 or
+     longword2 is zero.
+
+     Let's consider longword1.  We compute tmp =
+       ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7).
+     That is, we perform the following operations:
+       1. Subtract repeated_one.
+       2. & ~longword1.
+       3. & a mask consisting of 0x80 in every byte.
+     Consider what happens in each byte:
+       - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff,
+         and step 3 transforms it into 0x80.  A carry can also be propagated
+         to more significant bytes.
+       - If a byte of longword1 is nonzero, let its lowest 1 bit be at
+         position k (0 <= k <= 7); so the lowest k bits are 0.  After step 1,
+         the byte ends in a single bit of value 0 and k bits of value 1.
+         After step 2, the result is just k bits of value 1: 2^k - 1.  After
+         step 3, the result is 0.  And no carry is produced.
+     So, if longword1 has only non-zero bytes, tmp is zero.
+     Whereas if longword1 has a zero byte, call j the position of the least
+     significant zero byte.  Then the result has a zero at positions 0, ...,
+     j-1 and a 0x80 at position j.  We cannot predict the result at the more
+     significant bytes (positions j+1..3), but it does not matter since we
+     already have a non-zero bit at position 8*j+7.
+
+     The test whether any byte in longword1 or longword2 is zero is equivalent
+     to testing whether tmp1 is nonzero or tmp2 is nonzero.  We can combine
+     this into a single test, whether (tmp1 | tmp2) is nonzero.
+
+     This test can read more than one byte beyond the end of a string,
+     depending on where the terminating NUL is encountered.  However,
+     this is considered safe since the initialization phase ensured
+     that the read will be aligned, therefore, the read will not cross
+     page boundaries and will not cause a fault.  */
+
+  while (1)
+    {
+      longword longword1 = *longword_ptr ^ repeated_c;
+      longword longword2 = *longword_ptr;
+
+      if (((((longword1 - repeated_one) & ~longword1)
+            | ((longword2 - repeated_one) & ~longword2))
+           & (repeated_one << 7)) != 0)
+        break;
+      longword_ptr++;
+    }
+
+  char_ptr = (const unsigned char *) longword_ptr;
+
+  /* At this point, we know that one of the sizeof (longword) bytes
+     starting at char_ptr is == 0 or == c.  On little-endian machines,
+     we could determine the first such byte without any further memory
+     accesses, just by looking at the tmp result from the last loop
+     iteration.  But this does not work on big-endian machines.
+     Choose code that works in both cases.  */
+
+  char_ptr = (unsigned char *) longword_ptr;
+  while (*char_ptr && (*char_ptr != c))
+    char_ptr++;
+  return (char *) char_ptr;
+}
diff --git a/gnu/strchrnul.valgrind b/gnu/strchrnul.valgrind
new file mode 100644 (file)
index 0000000..b14fa13
--- /dev/null
@@ -0,0 +1,12 @@
+# Suppress a valgrind message about use of uninitialized memory in strchrnul().
+# This use is OK because it provides only a speedup.
+{
+    strchrnul-value4
+    Memcheck:Value4
+    fun:strchrnul
+}
+{
+    strchrnul-value8
+    Memcheck:Value8
+    fun:strchrnul
+}
diff --git a/gnu/strdup.c b/gnu/strdup.c
new file mode 100644 (file)
index 0000000..223ac7f
--- /dev/null
@@ -0,0 +1,57 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copyright (C) 1991, 1996, 1997, 1998, 2002, 2003, 2004, 2006, 2007, 2009,
+   2010 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
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _LIBC
+# include <config.h>
+#endif
+
+/* Get specification.  */
+#include <string.h>
+
+#include <stdlib.h>
+
+#undef __strdup
+#ifdef _LIBC
+# undef strdup
+#endif
+
+#ifndef weak_alias
+# define __strdup strdup
+#endif
+
+/* Duplicate S, returning an identical malloc'd string.  */
+char *
+__strdup (const char *s)
+{
+  size_t len = strlen (s) + 1;
+  void *new = malloc (len);
+
+  if (new == NULL)
+    return NULL;
+
+  return (char *) memcpy (new, s, len);
+}
+#ifdef libc_hidden_def
+libc_hidden_def (__strdup)
+#endif
+#ifdef weak_alias
+weak_alias (__strdup, strdup)
+#endif
diff --git a/gnu/streq.h b/gnu/streq.h
new file mode 100644 (file)
index 0000000..97ebcbe
--- /dev/null
@@ -0,0 +1,178 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Optimized string comparison.
+   Copyright (C) 2001-2002, 2007, 2009-2010 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
+   Lesser 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>.  */
+
+#ifndef _GL_STREQ_H
+#define _GL_STREQ_H
+
+#include <string.h>
+
+/* STREQ allows to optimize string comparison with a small literal string.
+     STREQ (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
+   is semantically equivalent to
+     strcmp (s, "EUC-KR") == 0
+   just faster.  */
+
+/* Help GCC to generate good code for string comparisons with
+   immediate strings. */
+#if defined (__GNUC__) && defined (__OPTIMIZE__)
+
+static inline int
+streq9 (const char *s1, const char *s2)
+{
+  return strcmp (s1 + 9, s2 + 9) == 0;
+}
+
+static inline int
+streq8 (const char *s1, const char *s2, char s28)
+{
+  if (s1[8] == s28)
+    {
+      if (s28 == 0)
+        return 1;
+      else
+        return streq9 (s1, s2);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq7 (const char *s1, const char *s2, char s27, char s28)
+{
+  if (s1[7] == s27)
+    {
+      if (s27 == 0)
+        return 1;
+      else
+        return streq8 (s1, s2, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq6 (const char *s1, const char *s2, char s26, char s27, char s28)
+{
+  if (s1[6] == s26)
+    {
+      if (s26 == 0)
+        return 1;
+      else
+        return streq7 (s1, s2, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28)
+{
+  if (s1[5] == s25)
+    {
+      if (s25 == 0)
+        return 1;
+      else
+        return streq6 (s1, s2, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[4] == s24)
+    {
+      if (s24 == 0)
+        return 1;
+      else
+        return streq5 (s1, s2, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[3] == s23)
+    {
+      if (s23 == 0)
+        return 1;
+      else
+        return streq4 (s1, s2, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[2] == s22)
+    {
+      if (s22 == 0)
+        return 1;
+      else
+        return streq3 (s1, s2, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[1] == s21)
+    {
+      if (s21 == 0)
+        return 1;
+      else
+        return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq0 (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 (s1[0] == s20)
+    {
+      if (s20 == 0)
+        return 1;
+      else
+        return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+#define STREQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+  streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28)
+
+#else
+
+#define STREQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+  (strcmp (s1, s2) == 0)
+
+#endif
+
+#endif /* _GL_STREQ_H */
diff --git a/gnu/strerror.c b/gnu/strerror.c
new file mode 100644 (file)
index 0000000..26ef483
--- /dev/null
@@ -0,0 +1,349 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* strerror.c --- POSIX compatible system error routine
+
+   Copyright (C) 2007-2010 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>
+
+#include <string.h>
+
+#if REPLACE_STRERROR
+
+# include <errno.h>
+# include <stdio.h>
+
+# if GNULIB_defined_ESOCK /* native Windows platforms */
+#  if HAVE_WINSOCK2_H
+#   include <winsock2.h>
+#  endif
+# endif
+
+# include "intprops.h"
+
+# undef strerror
+# if ! HAVE_DECL_STRERROR
+#  define strerror(n) NULL
+# endif
+
+char *
+rpl_strerror (int n)
+{
+  char const *msg = NULL;
+  /* These error messages are taken from glibc/sysdeps/gnu/errlist.c.  */
+  switch (n)
+    {
+# if GNULIB_defined_ETXTBSY
+    case ETXTBSY:
+      msg = "Text file busy";
+      break;
+# endif
+
+# if GNULIB_defined_ESOCK /* native Windows platforms */
+    /* EWOULDBLOCK is the same as EAGAIN.  */
+    case EINPROGRESS:
+      msg = "Operation now in progress";
+      break;
+    case EALREADY:
+      msg = "Operation already in progress";
+      break;
+    case ENOTSOCK:
+      msg = "Socket operation on non-socket";
+      break;
+    case EDESTADDRREQ:
+      msg = "Destination address required";
+      break;
+    case EMSGSIZE:
+      msg = "Message too long";
+      break;
+    case EPROTOTYPE:
+      msg = "Protocol wrong type for socket";
+      break;
+    case ENOPROTOOPT:
+      msg = "Protocol not available";
+      break;
+    case EPROTONOSUPPORT:
+      msg = "Protocol not supported";
+      break;
+    case ESOCKTNOSUPPORT:
+      msg = "Socket type not supported";
+      break;
+    case EOPNOTSUPP:
+      msg = "Operation not supported";
+      break;
+    case EPFNOSUPPORT:
+      msg = "Protocol family not supported";
+      break;
+    case EAFNOSUPPORT:
+      msg = "Address family not supported by protocol";
+      break;
+    case EADDRINUSE:
+      msg = "Address already in use";
+      break;
+    case EADDRNOTAVAIL:
+      msg = "Cannot assign requested address";
+      break;
+    case ENETDOWN:
+      msg = "Network is down";
+      break;
+    case ENETUNREACH:
+      msg = "Network is unreachable";
+      break;
+    case ENETRESET:
+      msg = "Network dropped connection on reset";
+      break;
+    case ECONNABORTED:
+      msg = "Software caused connection abort";
+      break;
+    case ECONNRESET:
+      msg = "Connection reset by peer";
+      break;
+    case ENOBUFS:
+      msg = "No buffer space available";
+      break;
+    case EISCONN:
+      msg = "Transport endpoint is already connected";
+      break;
+    case ENOTCONN:
+      msg = "Transport endpoint is not connected";
+      break;
+    case ESHUTDOWN:
+      msg = "Cannot send after transport endpoint shutdown";
+      break;
+    case ETOOMANYREFS:
+      msg = "Too many references: cannot splice";
+      break;
+    case ETIMEDOUT:
+      msg = "Connection timed out";
+      break;
+    case ECONNREFUSED:
+      msg = "Connection refused";
+      break;
+    case ELOOP:
+      msg = "Too many levels of symbolic links";
+      break;
+    case EHOSTDOWN:
+      msg = "Host is down";
+      break;
+    case EHOSTUNREACH:
+      msg = "No route to host";
+      break;
+    case EPROCLIM:
+      msg = "Too many processes";
+      break;
+    case EUSERS:
+      msg = "Too many users";
+      break;
+    case EDQUOT:
+      msg = "Disk quota exceeded";
+      break;
+    case ESTALE:
+      msg = "Stale NFS file handle";
+      break;
+    case EREMOTE:
+      msg = "Object is remote";
+      break;
+#  if HAVE_WINSOCK2_H
+    /* WSA_INVALID_HANDLE maps to EBADF */
+    /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */
+    /* WSA_INVALID_PARAMETER maps to EINVAL */
+    case WSA_OPERATION_ABORTED:
+      msg = "Overlapped operation aborted";
+      break;
+    case WSA_IO_INCOMPLETE:
+      msg = "Overlapped I/O event object not in signaled state";
+      break;
+    case WSA_IO_PENDING:
+      msg = "Overlapped operations will complete later";
+      break;
+    /* WSAEINTR maps to EINTR */
+    /* WSAEBADF maps to EBADF */
+    /* WSAEACCES maps to EACCES */
+    /* WSAEFAULT maps to EFAULT */
+    /* WSAEINVAL maps to EINVAL */
+    /* WSAEMFILE maps to EMFILE */
+    /* WSAEWOULDBLOCK maps to EWOULDBLOCK */
+    /* WSAEINPROGRESS is EINPROGRESS */
+    /* WSAEALREADY is EALREADY */
+    /* WSAENOTSOCK is ENOTSOCK */
+    /* WSAEDESTADDRREQ is EDESTADDRREQ */
+    /* WSAEMSGSIZE is EMSGSIZE */
+    /* WSAEPROTOTYPE is EPROTOTYPE */
+    /* WSAENOPROTOOPT is ENOPROTOOPT */
+    /* WSAEPROTONOSUPPORT is EPROTONOSUPPORT */
+    /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */
+    /* WSAEOPNOTSUPP is EOPNOTSUPP */
+    /* WSAEPFNOSUPPORT is EPFNOSUPPORT */
+    /* WSAEAFNOSUPPORT is EAFNOSUPPORT */
+    /* WSAEADDRINUSE is EADDRINUSE */
+    /* WSAEADDRNOTAVAIL is EADDRNOTAVAIL */
+    /* WSAENETDOWN is ENETDOWN */
+    /* WSAENETUNREACH is ENETUNREACH */
+    /* WSAENETRESET is ENETRESET */
+    /* WSAECONNABORTED is ECONNABORTED */
+    /* WSAECONNRESET is ECONNRESET */
+    /* WSAENOBUFS is ENOBUFS */
+    /* WSAEISCONN is EISCONN */
+    /* WSAENOTCONN is ENOTCONN */
+    /* WSAESHUTDOWN is ESHUTDOWN */
+    /* WSAETOOMANYREFS is ETOOMANYREFS */
+    /* WSAETIMEDOUT is ETIMEDOUT */
+    /* WSAECONNREFUSED is ECONNREFUSED */
+    /* WSAELOOP is ELOOP */
+    /* WSAENAMETOOLONG maps to ENAMETOOLONG */
+    /* WSAEHOSTDOWN is EHOSTDOWN */
+    /* WSAEHOSTUNREACH is EHOSTUNREACH */
+    /* WSAENOTEMPTY maps to ENOTEMPTY */
+    /* WSAEPROCLIM is EPROCLIM */
+    /* WSAEUSERS is EUSERS */
+    /* WSAEDQUOT is EDQUOT */
+    /* WSAESTALE is ESTALE */
+    /* WSAEREMOTE is EREMOTE */
+    case WSASYSNOTREADY:
+      msg = "Network subsystem is unavailable";
+      break;
+    case WSAVERNOTSUPPORTED:
+      msg = "Winsock.dll version out of range";
+      break;
+    case WSANOTINITIALISED:
+      msg = "Successful WSAStartup not yet performed";
+      break;
+    case WSAEDISCON:
+      msg = "Graceful shutdown in progress";
+      break;
+    case WSAENOMORE: case WSA_E_NO_MORE:
+      msg = "No more results";
+      break;
+    case WSAECANCELLED: case WSA_E_CANCELLED:
+      msg = "Call was canceled";
+      break;
+    case WSAEINVALIDPROCTABLE:
+      msg = "Procedure call table is invalid";
+      break;
+    case WSAEINVALIDPROVIDER:
+      msg = "Service provider is invalid";
+      break;
+    case WSAEPROVIDERFAILEDINIT:
+      msg = "Service provider failed to initialize";
+      break;
+    case WSASYSCALLFAILURE:
+      msg = "System call failure";
+      break;
+    case WSASERVICE_NOT_FOUND:
+      msg = "Service not found";
+      break;
+    case WSATYPE_NOT_FOUND:
+      msg = "Class type not found";
+      break;
+    case WSAEREFUSED:
+      msg = "Database query was refused";
+      break;
+    case WSAHOST_NOT_FOUND:
+      msg = "Host not found";
+      break;
+    case WSATRY_AGAIN:
+      msg = "Nonauthoritative host not found";
+      break;
+    case WSANO_RECOVERY:
+      msg = "Nonrecoverable error";
+      break;
+    case WSANO_DATA:
+      msg = "Valid name, no data record of requested type";
+      break;
+    /* WSA_QOS_* omitted */
+#  endif
+# endif
+
+# if GNULIB_defined_ENOMSG
+    case ENOMSG:
+      msg = "No message of desired type";
+      break;
+# endif
+
+# if GNULIB_defined_EIDRM
+    case EIDRM:
+      msg = "Identifier removed";
+      break;
+# endif
+
+# if GNULIB_defined_ENOLINK
+    case ENOLINK:
+      msg = "Link has been severed";
+      break;
+# endif
+
+# if GNULIB_defined_EPROTO
+    case EPROTO:
+      msg = "Protocol error";
+      break;
+# endif
+
+# if GNULIB_defined_EMULTIHOP
+    case EMULTIHOP:
+      msg = "Multihop attempted";
+      break;
+# endif
+
+# if GNULIB_defined_EBADMSG
+    case EBADMSG:
+      msg = "Bad message";
+      break;
+# endif
+
+# if GNULIB_defined_EOVERFLOW
+    case EOVERFLOW:
+      msg = "Value too large for defined data type";
+      break;
+# endif
+
+# if GNULIB_defined_ENOTSUP
+    case ENOTSUP:
+      msg = "Not supported";
+      break;
+# endif
+
+# if GNULIB_defined_ESTALE
+    case ESTALE:
+      msg = "Stale NFS file handle";
+      break;
+# endif
+
+# if GNULIB_defined_ECANCELED
+    case ECANCELED:
+      msg = "Operation canceled";
+      break;
+# endif
+    }
+
+  if (msg)
+    return (char *) msg;
+
+  {
+    char *result = strerror (n);
+
+    if (result == NULL || result[0] == '\0')
+      {
+        static char const fmt[] = "Unknown error (%d)";
+        static char msg_buf[sizeof fmt + INT_STRLEN_BOUND (n)];
+        sprintf (msg_buf, fmt, n);
+        return msg_buf;
+      }
+
+    return result;
+  }
+}
+
+#endif
diff --git a/gnu/string.in.h b/gnu/string.in.h
new file mode 100644 (file)
index 0000000..8b414ad
--- /dev/null
@@ -0,0 +1,831 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A GNU-like <string.h>.
+
+   Copyright (C) 1995-1996, 2001-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _GL_STRING_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_STRING_H@
+
+#ifndef _GL_STRING_H
+#define _GL_STRING_H
+
+/* NetBSD 5.0 mis-defines NULL.  */
+#include <stddef.h>
+
+/* MirBSD defines mbslen as a macro.  */
+#if @GNULIB_MBSLEN@ && defined __MirBSD__
+# include <wchar.h>
+#endif
+
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
+#  define __attribute__(Spec) /* empty */
+# endif
+/* The attribute __pure__ was added in gcc 2.96.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96)
+#  define __pure__ /* empty */
+# endif
+#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.  */
+
+
+/* Return the first instance of C within N bytes of S, or NULL.  */
+#if @GNULIB_MEMCHR@
+# if @REPLACE_MEMCHR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define memchr rpl_memchr
+#  endif
+_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n)
+                                  __attribute__ ((__pure__))
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n));
+# else
+#  if defined __SUNPRO_CC
+  /* This compiler defines an overloaded function
+       extern "C" { const void * std::memchr (const void *, int, size_t); }
+       extern "C++" { inline void * std::memchr (void *, int, size_t); }
+     and diagnoses an error
+     "Error: Could not find a match for std::memchr(const void*, int, unsigned)"
+   */
+_GL_CXXALIAS_SYS_CAST2 (memchr,
+                        void *, (void const *__s, int __c, size_t __n),
+                        void const *, (void const *__s, int __c, size_t __n));
+#  else
+_GL_CXXALIAS_SYS (memchr, void *, (void const *__s, int __c, size_t __n));
+#  endif
+# endif
+_GL_CXXALIASWARN (memchr);
+#elif defined GNULIB_POSIXCHECK
+# undef memchr
+/* Assume memchr is always declared.  */
+_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - "
+                 "use gnulib module memchr for portability" );
+#endif
+
+/* Return the first occurrence of NEEDLE in HAYSTACK.  */
+#if @GNULIB_MEMMEM@
+# if @REPLACE_MEMMEM@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define memmem rpl_memmem
+#  endif
+_GL_FUNCDECL_RPL (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len)
+                  __attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len));
+# else
+#  if ! @HAVE_DECL_MEMMEM@
+_GL_FUNCDECL_SYS (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len)
+                  __attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 3)));
+#  endif
+_GL_CXXALIAS_SYS (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len));
+# endif
+_GL_CXXALIASWARN (memmem);
+#elif defined GNULIB_POSIXCHECK
+# undef memmem
+# if HAVE_RAW_DECL_MEMMEM
+_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - "
+                 "use gnulib module memmem-simple for portability, "
+                 "and module memmem for speed" );
+# endif
+#endif
+
+/* Copy N bytes of SRC to DEST, return pointer to bytes after the
+   last written byte.  */
+#if @GNULIB_MEMPCPY@
+# if ! @HAVE_MEMPCPY@
+_GL_FUNCDECL_SYS (mempcpy, void *,
+                  (void *restrict __dest, void const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (mempcpy, void *,
+                  (void *restrict __dest, void const *restrict __src,
+                   size_t __n));
+_GL_CXXALIASWARN (mempcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef mempcpy
+# if HAVE_RAW_DECL_MEMPCPY
+_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - "
+                 "use gnulib module mempcpy for portability");
+# endif
+#endif
+
+/* Search backwards through a block for a byte (specified as an int).  */
+#if @GNULIB_MEMRCHR@
+# if ! @HAVE_DECL_MEMRCHR@
+_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t)
+                                   __attribute__ ((__pure__))
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (memrchr, void *, (void const *, int, size_t));
+_GL_CXXALIASWARN (memrchr);
+#elif defined GNULIB_POSIXCHECK
+# undef memrchr
+# if HAVE_RAW_DECL_MEMRCHR
+_GL_WARN_ON_USE (memrchr, "memrchr is unportable - "
+                 "use gnulib module memrchr for portability");
+# endif
+#endif
+
+/* Find the first occurrence of C in S.  More efficient than
+   memchr(S,C,N), at the expense of undefined behavior if C does not
+   occur within N bytes.  */
+#if @GNULIB_RAWMEMCHR@
+# if ! @HAVE_RAWMEMCHR@
+_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in)
+                                     __attribute__ ((__pure__))
+                                     _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (rawmemchr, void *, (void const *__s, int __c_in));
+_GL_CXXALIASWARN (rawmemchr);
+#elif defined GNULIB_POSIXCHECK
+# undef rawmemchr
+# if HAVE_RAW_DECL_RAWMEMCHR
+_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - "
+                 "use gnulib module rawmemchr for portability");
+# endif
+#endif
+
+/* Copy SRC to DST, returning the address of the terminating '\0' in DST.  */
+#if @GNULIB_STPCPY@
+# if ! @HAVE_STPCPY@
+_GL_FUNCDECL_SYS (stpcpy, char *,
+                  (char *restrict __dst, char const *restrict __src)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (stpcpy, char *,
+                  (char *restrict __dst, char const *restrict __src));
+_GL_CXXALIASWARN (stpcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef stpcpy
+# if HAVE_RAW_DECL_STPCPY
+_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - "
+                 "use gnulib module stpcpy for portability");
+# endif
+#endif
+
+/* Copy no more than N bytes of SRC to DST, returning a pointer past the
+   last non-NUL byte written into DST.  */
+#if @GNULIB_STPNCPY@
+# if ! @HAVE_STPNCPY@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define stpncpy rpl_stpncpy
+#  endif
+_GL_FUNCDECL_RPL (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n));
+# else
+_GL_CXXALIAS_SYS (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n));
+# endif
+_GL_CXXALIASWARN (stpncpy);
+#elif defined GNULIB_POSIXCHECK
+# undef stpncpy
+# if HAVE_RAW_DECL_STPNCPY
+_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - "
+                 "use gnulib module stpncpy for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strchr() does not work with multibyte strings if the locale encoding is
+   GB18030 and the character to be searched is a digit.  */
+# undef strchr
+/* Assume strchr is always declared.  */
+_GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings "
+                 "in some multibyte locales - "
+                 "use mbschr if you care about internationalization");
+#endif
+
+/* Find the first occurrence of C in S or the final NUL byte.  */
+#if @GNULIB_STRCHRNUL@
+# if ! @HAVE_STRCHRNUL@
+_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in)
+                                     __attribute__ ((__pure__))
+                                     _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strchrnul, char *, (char const *__s, int __c_in));
+_GL_CXXALIASWARN (strchrnul);
+#elif defined GNULIB_POSIXCHECK
+# undef strchrnul
+# if HAVE_RAW_DECL_STRCHRNUL
+_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - "
+                 "use gnulib module strchrnul for portability");
+# endif
+#endif
+
+/* Duplicate S, returning an identical malloc'd string.  */
+#if @GNULIB_STRDUP@
+# if @REPLACE_STRDUP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strdup
+#   define strdup rpl_strdup
+#  endif
+_GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strdup, char *, (char const *__s));
+# else
+#  if !(@HAVE_DECL_STRDUP@ || defined strdup)
+_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strdup, char *, (char const *__s));
+# endif
+_GL_CXXALIASWARN (strdup);
+#elif defined GNULIB_POSIXCHECK
+# undef strdup
+# if HAVE_RAW_DECL_STRDUP
+_GL_WARN_ON_USE (strdup, "strdup is unportable - "
+                 "use gnulib module strdup for portability");
+# endif
+#endif
+
+/* Return a newly allocated copy of at most N bytes of STRING.  */
+#if @GNULIB_STRNDUP@
+# if @REPLACE_STRNDUP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strndup
+#   define strndup rpl_strndup
+#  endif
+_GL_FUNCDECL_RPL (strndup, char *, (char const *__string, size_t __n)
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n));
+# else
+#  if ! @HAVE_DECL_STRNDUP@
+_GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n)
+                                   _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strndup, char *, (char const *__string, size_t __n));
+# endif
+_GL_CXXALIASWARN (strndup);
+#elif defined GNULIB_POSIXCHECK
+# undef strndup
+# if HAVE_RAW_DECL_STRNDUP
+_GL_WARN_ON_USE (strndup, "strndup is unportable - "
+                 "use gnulib module strndup for portability");
+# endif
+#endif
+
+/* Find the length (number of bytes) of STRING, but scan at most
+   MAXLEN bytes.  If no '\0' terminator is found in that many bytes,
+   return MAXLEN.  */
+#if @GNULIB_STRNLEN@
+# if ! @HAVE_DECL_STRNLEN@
+_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen)
+                                   __attribute__ ((__pure__))
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, size_t __maxlen));
+_GL_CXXALIASWARN (strnlen);
+#elif defined GNULIB_POSIXCHECK
+# undef strnlen
+# if HAVE_RAW_DECL_STRNLEN
+_GL_WARN_ON_USE (strnlen, "strnlen is unportable - "
+                 "use gnulib module strnlen for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strcspn() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it does not work with multibyte strings if the
+   locale encoding is GB18030 and one of the characters to be searched is a
+   digit.  */
+# undef strcspn
+/* Assume strcspn is always declared.  */
+_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbscspn if you care about internationalization");
+#endif
+
+/* Find the first occurrence in S of any character in ACCEPT.  */
+#if @GNULIB_STRPBRK@
+# if ! @HAVE_STRPBRK@
+_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept)
+                                   __attribute__ ((__pure__))
+                                   _GL_ARG_NONNULL ((1, 2)));
+# endif
+# if defined __SUNPRO_CC
+  /* This compiler defines an overloaded function
+       extern "C" { const char * strpbrk (const char *, const char *); }
+       extern "C++" { inline char * strpbrk (char *, const char *); }
+     and diagnoses an error
+     "Error: Could not find a match for std::strpbrk(const char*, const char*)"
+   */
+_GL_CXXALIAS_SYS_CAST2 (strpbrk,
+                        char *, (char const *__s, char const *__accept),
+                        const char *, (char const *__s, char const *__accept));
+# else
+_GL_CXXALIAS_SYS (strpbrk, char *, (char const *__s, char const *__accept));
+# endif
+_GL_CXXALIASWARN (strpbrk);
+# if defined GNULIB_POSIXCHECK
+/* strpbrk() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it does not work with multibyte strings if the
+   locale encoding is GB18030 and one of the characters to be searched is a
+   digit.  */
+#  undef strpbrk
+_GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbspbrk if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strpbrk
+# if HAVE_RAW_DECL_STRPBRK
+_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - "
+                 "use gnulib module strpbrk for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strspn() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it cannot work with multibyte strings.  */
+# undef strspn
+/* Assume strspn is always declared.  */
+_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbsspn if you care about internationalization");
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strrchr() does not work with multibyte strings if the locale encoding is
+   GB18030 and the character to be searched is a digit.  */
+# undef strrchr
+/* Assume strrchr is always declared.  */
+_GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings "
+                 "in some multibyte locales - "
+                 "use mbsrchr if you care about internationalization");
+#endif
+
+/* Search the next delimiter (char listed in DELIM) starting at *STRINGP.
+   If one is found, overwrite it with a NUL, and advance *STRINGP
+   to point to the next char after it.  Otherwise, set *STRINGP to NULL.
+   If *STRINGP was already NULL, nothing happens.
+   Return the old value of *STRINGP.
+
+   This is a variant of strtok() that is multithread-safe and supports
+   empty fields.
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+   Caveat: It doesn't work with multibyte strings unless all of the delimiter
+           characters are ASCII characters < 0x30.
+
+   See also strtok_r().  */
+#if @GNULIB_STRSEP@
+# if ! @HAVE_STRSEP@
+_GL_FUNCDECL_SYS (strsep, char *,
+                  (char **restrict __stringp, char const *restrict __delim)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (strsep, char *,
+                  (char **restrict __stringp, char const *restrict __delim));
+_GL_CXXALIASWARN (strsep);
+# if defined GNULIB_POSIXCHECK
+#  undef strsep
+_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbssep if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strsep
+# if HAVE_RAW_DECL_STRSEP
+_GL_WARN_ON_USE (strsep, "strsep is unportable - "
+                 "use gnulib module strsep for portability");
+# endif
+#endif
+
+#if @GNULIB_STRSTR@
+# if @REPLACE_STRSTR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strstr rpl_strstr
+#  endif
+_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle)
+                                  __attribute__ ((__pure__))
+                                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle));
+# else
+_GL_CXXALIAS_SYS (strstr, char *, (const char *haystack, const char *needle));
+# endif
+_GL_CXXALIASWARN (strstr);
+#elif defined GNULIB_POSIXCHECK
+/* strstr() does not work with multibyte strings if the locale encoding is
+   different from UTF-8:
+   POSIX says that it operates on "strings", and "string" in POSIX is defined
+   as a sequence of bytes, not of characters.  */
+# undef strstr
+/* Assume strstr is always declared.  */
+_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot "
+                 "work correctly on character strings in most "
+                 "multibyte locales - "
+                 "use mbsstr if you care about internationalization, "
+                 "or use strstr if you care about speed");
+#endif
+
+/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive
+   comparison.  */
+#if @GNULIB_STRCASESTR@
+# if @REPLACE_STRCASESTR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strcasestr rpl_strcasestr
+#  endif
+_GL_FUNCDECL_RPL (strcasestr, char *,
+                  (const char *haystack, const char *needle)
+                  __attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strcasestr, char *,
+                  (const char *haystack, const char *needle));
+# else
+#  if ! @HAVE_STRCASESTR@
+_GL_FUNCDECL_SYS (strcasestr, char *,
+                  (const char *haystack, const char *needle)
+                  __attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (strcasestr, char *,
+                  (const char *haystack, const char *needle));
+# endif
+_GL_CXXALIASWARN (strcasestr);
+#elif defined GNULIB_POSIXCHECK
+/* strcasestr() does not work with multibyte strings:
+   It is a glibc extension, and glibc implements it only for unibyte
+   locales.  */
+# undef strcasestr
+# if HAVE_RAW_DECL_STRCASESTR
+_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character "
+                 "strings in multibyte locales - "
+                 "use mbscasestr if you care about "
+                 "internationalization, or use c-strcasestr if you want "
+                 "a locale independent function");
+# endif
+#endif
+
+/* Parse S into tokens separated by characters in DELIM.
+   If S is NULL, the saved pointer in SAVE_PTR is used as
+   the next starting point.  For example:
+        char s[] = "-abc-=-def";
+        char *sp;
+        x = strtok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
+        x = strtok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
+        x = strtok_r(NULL, "=", &sp);   // x = NULL
+                // s = "abc\0-def\0"
+
+   This is a variant of strtok() that is multithread-safe.
+
+   For the POSIX documentation for this function, see:
+   http://www.opengroup.org/susv3xsh/strtok.html
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+   Caveat: It doesn't work with multibyte strings unless all of the delimiter
+           characters are ASCII characters < 0x30.
+
+   See also strsep().  */
+#if @GNULIB_STRTOK_R@
+# if @REPLACE_STRTOK_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strtok_r
+#   define strtok_r rpl_strtok_r
+#  endif
+_GL_FUNCDECL_RPL (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr)
+                  _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr));
+# else
+#  if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK
+#   undef strtok_r
+#  endif
+#  if ! @HAVE_DECL_STRTOK_R@
+_GL_FUNCDECL_SYS (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr)
+                  _GL_ARG_NONNULL ((2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr));
+# endif
+_GL_CXXALIASWARN (strtok_r);
+# if defined GNULIB_POSIXCHECK
+_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character "
+                 "strings in multibyte locales - "
+                 "use mbstok_r if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strtok_r
+# if HAVE_RAW_DECL_STRTOK_R
+_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - "
+                 "use gnulib module strtok_r for portability");
+# endif
+#endif
+
+
+/* The following functions are not specified by POSIX.  They are gnulib
+   extensions.  */
+
+#if @GNULIB_MBSLEN@
+/* Return the number of multibyte characters in the character string STRING.
+   This considers multibyte characters, unlike strlen, which counts bytes.  */
+# ifdef __MirBSD__  /* MirBSD defines mbslen as a macro.  Override it.  */
+#  undef mbslen
+# endif
+# if @HAVE_MBSLEN@  /* AIX, OSF/1, MirBSD define mbslen already in libc.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbslen rpl_mbslen
+#  endif
+_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string));
+# else
+_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string));
+# endif
+_GL_CXXALIASWARN (mbslen);
+#endif
+
+#if @GNULIB_MBSNLEN@
+/* Return the number of multibyte characters in the character string starting
+   at STRING and ending at STRING + LEN.  */
+_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len)
+     _GL_ARG_NONNULL ((1));
+#endif
+
+#if @GNULIB_MBSCHR@
+/* Locate the first single-byte character C in the character string STRING,
+   and return a pointer to it.  Return NULL if C is not found in STRING.
+   Unlike strchr(), this function works correctly in multibyte locales with
+   encodings such as GB18030.  */
+# if defined __hpux
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbschr rpl_mbschr /* avoid collision with HP-UX function */
+#  endif
+_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c)
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c));
+# else
+_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c)
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c));
+# endif
+_GL_CXXALIASWARN (mbschr);
+#endif
+
+#if @GNULIB_MBSRCHR@
+/* Locate the last single-byte character C in the character string STRING,
+   and return a pointer to it.  Return NULL if C is not found in STRING.
+   Unlike strrchr(), this function works correctly in multibyte locales with
+   encodings such as GB18030.  */
+# if defined __hpux
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbsrchr rpl_mbsrchr /* avoid collision with HP-UX function */
+#  endif
+_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c)
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c));
+# else
+_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c)
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c));
+# endif
+_GL_CXXALIASWARN (mbsrchr);
+#endif
+
+#if @GNULIB_MBSSTR@
+/* Find the first occurrence of the character string NEEDLE in the character
+   string HAYSTACK.  Return NULL if NEEDLE is not found in HAYSTACK.
+   Unlike strstr(), this function works correctly in multibyte locales with
+   encodings different from UTF-8.  */
+_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSCASECMP@
+/* Compare the character 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.
+   Note: This function may, in multibyte locales, return 0 for strings of
+   different lengths!
+   Unlike strcasecmp(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSNCASECMP@
+/* Compare the initial segment of the character string S1 consisting of at most
+   N characters with the initial segment of the character string S2 consisting
+   of at most N characters, ignoring case, returning less than, equal to or
+   greater than zero if the initial segment of S1 is lexicographically less
+   than, equal to or greater than the initial segment of S2.
+   Note: This function may, in multibyte locales, return 0 for initial segments
+   of different lengths!
+   Unlike strncasecmp(), this function works correctly in multibyte locales.
+   But beware that N is not a byte count but a character count!  */
+_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSPCASECMP@
+/* Compare the initial segment of the character string STRING consisting of
+   at most mbslen (PREFIX) characters with the character string PREFIX,
+   ignoring case, returning less than, equal to or greater than zero if this
+   initial segment is lexicographically less than, equal to or greater than
+   PREFIX.
+   Note: This function may, in multibyte locales, return 0 if STRING is of
+   smaller length than PREFIX!
+   Unlike strncasecmp(), this function works correctly in multibyte
+   locales.  */
+_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSCASESTR@
+/* Find the first occurrence of the character string NEEDLE in the character
+   string HAYSTACK, using case-insensitive comparison.
+   Note: This function may, in multibyte locales, return success even if
+   strlen (haystack) < strlen (needle) !
+   Unlike strcasestr(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSCSPN@
+/* Find the first occurrence in the character string STRING of any character
+   in the character string ACCEPT.  Return the number of bytes from the
+   beginning of the string to this occurrence, or to the end of the string
+   if none exists.
+   Unlike strcspn(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSPBRK@
+/* Find the first occurrence in the character string STRING of any character
+   in the character string ACCEPT.  Return the pointer to it, or NULL if none
+   exists.
+   Unlike strpbrk(), this function works correctly in multibyte locales.  */
+# if defined __hpux
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */
+#  endif
+_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept)
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept));
+# else
+_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept)
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept));
+# endif
+_GL_CXXALIASWARN (mbspbrk);
+#endif
+
+#if @GNULIB_MBSSPN@
+/* Find the first occurrence in the character string STRING of any character
+   not in the character string REJECT.  Return the number of bytes from the
+   beginning of the string to this occurrence, or to the end of the string
+   if none exists.
+   Unlike strspn(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSSEP@
+/* Search the next delimiter (multibyte character listed in the character
+   string DELIM) starting at the character string *STRINGP.
+   If one is found, overwrite it with a NUL, and advance *STRINGP to point
+   to the next multibyte character after it.  Otherwise, set *STRINGP to NULL.
+   If *STRINGP was already NULL, nothing happens.
+   Return the old value of *STRINGP.
+
+   This is a variant of mbstok_r() that supports empty fields.
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+
+   See also mbstok_r().  */
+_GL_EXTERN_C char * mbssep (char **stringp, const char *delim)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSTOK_R@
+/* Parse the character string STRING into tokens separated by characters in
+   the character string DELIM.
+   If STRING is NULL, the saved pointer in SAVE_PTR is used as
+   the next starting point.  For example:
+        char s[] = "-abc-=-def";
+        char *sp;
+        x = mbstok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
+        x = mbstok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
+        x = mbstok_r(NULL, "=", &sp);   // x = NULL
+                // s = "abc\0-def\0"
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+
+   See also mbssep().  */
+_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr)
+     _GL_ARG_NONNULL ((2, 3));
+#endif
+
+/* Map any int, typically from errno, into an error message.  */
+#if @GNULIB_STRERROR@
+# if @REPLACE_STRERROR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strerror
+#   define strerror rpl_strerror
+#  endif
+_GL_FUNCDECL_RPL (strerror, char *, (int));
+_GL_CXXALIAS_RPL (strerror, char *, (int));
+# else
+_GL_CXXALIAS_SYS (strerror, char *, (int));
+# endif
+_GL_CXXALIASWARN (strerror);
+#elif defined GNULIB_POSIXCHECK
+# undef strerror
+/* Assume strerror is always declared.  */
+_GL_WARN_ON_USE (strerror, "strerror is unportable - "
+                 "use gnulib module strerror to guarantee non-NULL result");
+#endif
+
+#if @GNULIB_STRSIGNAL@
+# if @REPLACE_STRSIGNAL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strsignal rpl_strsignal
+#  endif
+_GL_FUNCDECL_RPL (strsignal, char *, (int __sig));
+_GL_CXXALIAS_RPL (strsignal, char *, (int __sig));
+# else
+#  if ! @HAVE_DECL_STRSIGNAL@
+_GL_FUNCDECL_SYS (strsignal, char *, (int __sig));
+#  endif
+/* Need to cast, because on Cygwin 1.5.x systems, the return type is
+   'const char *'.  */
+_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig));
+# endif
+_GL_CXXALIASWARN (strsignal);
+#elif defined GNULIB_POSIXCHECK
+# undef strsignal
+# if HAVE_RAW_DECL_STRSIGNAL
+_GL_WARN_ON_USE (strsignal, "strsignal is unportable - "
+                 "use gnulib module strsignal for portability");
+# endif
+#endif
+
+#if @GNULIB_STRVERSCMP@
+# if !@HAVE_STRVERSCMP@
+_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *)
+                                   _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *));
+_GL_CXXALIASWARN (strverscmp);
+#elif defined GNULIB_POSIXCHECK
+# undef strverscmp
+# if HAVE_RAW_DECL_STRVERSCMP
+_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - "
+                 "use gnulib module strverscmp for portability");
+# endif
+#endif
+
+
+#endif /* _GL_STRING_H */
+#endif /* _GL_STRING_H */
diff --git a/gnu/strings.in.h b/gnu/strings.in.h
new file mode 100644 (file)
index 0000000..e1d7725
--- /dev/null
@@ -0,0 +1,95 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A substitute <strings.h>.
+
+   Copyright (C) 2007-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _GL_STRINGS_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_STRINGS_H@
+
+#ifndef _GL_STRINGS_H
+#define _GL_STRINGS_H
+
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* 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.
+   Note: This function does not work in multibyte locales.  */
+#if ! @HAVE_STRCASECMP@
+extern int strcasecmp (char const *s1, char const *s2)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+#if defined GNULIB_POSIXCHECK
+/* strcasecmp() does not work with multibyte strings:
+   POSIX says that it operates on "strings", and "string" in POSIX is defined
+   as a sequence of bytes, not of characters.   */
+# undef strcasecmp
+# if HAVE_RAW_DECL_STRCASECMP
+_GL_WARN_ON_USE (strcasecmp, "strcasecmp cannot work correctly on character "
+                 "strings in multibyte locales - "
+                 "use mbscasecmp if you care about "
+                 "internationalization, or use c_strcasecmp , "
+                 "gnulib module c-strcase) if you want a locale "
+                 "independent function");
+# endif
+#endif
+
+/* Compare no more than N bytes 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.
+   Note: This function cannot work correctly in multibyte locales.  */
+#if ! @HAVE_DECL_STRNCASECMP@
+extern int strncasecmp (char const *s1, char const *s2, size_t n)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+#if defined GNULIB_POSIXCHECK
+/* strncasecmp() does not work with multibyte strings:
+   POSIX says that it operates on "strings", and "string" in POSIX is defined
+   as a sequence of bytes, not of characters.  */
+# undef strncasecmp
+# if HAVE_RAW_DECL_STRNCASECMP
+_GL_WARN_ON_USE (strncasecmp, "strncasecmp cannot work correctly on character "
+                 "strings in multibyte locales - "
+                 "use mbsncasecmp or mbspcasecmp if you care about "
+                 "internationalization, or use c_strncasecmp , "
+                 "gnulib module c-strcase) if you want a locale "
+                 "independent function");
+# endif
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GL_STRING_H */
+#endif /* _GL_STRING_H */
diff --git a/gnu/stripslash.c b/gnu/stripslash.c
new file mode 100644 (file)
index 0000000..c52a910
--- /dev/null
@@ -0,0 +1,47 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* stripslash.c -- remove redundant trailing slashes from a file name
+
+   Copyright (C) 1990, 2001, 2003-2006, 2009-2010 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>
+
+#include "dirname.h"
+
+/* Remove trailing slashes from FILE.  Return true if a trailing slash
+   was removed.  This is useful when using file name completion from a
+   shell that adds a "/" after directory names (such as tcsh and
+   bash), because on symlinks to directories, several system calls
+   have different semantics according to whether a trailing slash is
+   present.  */
+
+bool
+strip_trailing_slashes (char *file)
+{
+  char *base = last_component (file);
+  char *base_lim;
+  bool had_slash;
+
+  /* last_component returns "" for file system roots, but we need to turn
+     `///' into `/'.  */
+  if (! *base)
+    base = file;
+  base_lim = base + base_len (base);
+  had_slash = (*base_lim != '\0');
+  *base_lim = '\0';
+  return had_slash;
+}
diff --git a/gnu/strncasecmp.c b/gnu/strncasecmp.c
new file mode 100644 (file)
index 0000000..c0972ab
--- /dev/null
@@ -0,0 +1,65 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* strncasecmp.c -- case insensitive string comparator
+   Copyright (C) 1998-1999, 2005-2007, 2009-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <string.h>
+
+#include <ctype.h>
+#include <limits.h>
+
+#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
+
+/* Compare no more than N bytes 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.
+   Note: This function cannot work correctly in multibyte locales.  */
+
+int
+strncasecmp (const char *s1, const char *s2, size_t n)
+{
+  register const unsigned char *p1 = (const unsigned char *) s1;
+  register const unsigned char *p2 = (const unsigned char *) s2;
+  unsigned char c1, c2;
+
+  if (p1 == p2 || n == 0)
+    return 0;
+
+  do
+    {
+      c1 = TOLOWER (*p1);
+      c2 = TOLOWER (*p2);
+
+      if (--n == 0 || c1 == '\0')
+        break;
+
+      ++p1;
+      ++p2;
+    }
+  while (c1 == c2);
+
+  if (UCHAR_MAX <= INT_MAX)
+    return c1 - c2;
+  else
+    /* On machines where 'char' and 'int' are types of the same size, the
+       difference of two 'unsigned char' values - including the sign bit -
+       doesn't fit in an 'int'.  */
+    return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
+}
diff --git a/gnu/strndup.c b/gnu/strndup.c
new file mode 100644 (file)
index 0000000..a7e03ef
--- /dev/null
@@ -0,0 +1,39 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A replacement function, for systems that lack strndup.
+
+   Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2005, 2006, 2007, 2009,
+   2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <stdlib.h>
+
+char *
+strndup (char const *s, size_t n)
+{
+  size_t len = strnlen (s, n);
+  char *new = malloc (len + 1);
+
+  if (new == NULL)
+    return NULL;
+
+  new[len] = '\0';
+  return memcpy (new, s, len);
+}
diff --git a/gnu/strnlen.c b/gnu/strnlen.c
new file mode 100644 (file)
index 0000000..2455d5c
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Find the length of STRING, but scan at most MAXLEN characters.
+   Copyright (C) 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
+   Written by Simon Josefsson.
+
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include <config.h>
+
+#include <string.h>
+
+/* Find the length of STRING, but scan at most MAXLEN characters.
+   If no '\0' terminator is found in that many characters, return MAXLEN.  */
+
+size_t
+strnlen (const char *string, size_t maxlen)
+{
+  const char *end = memchr (string, '\0', maxlen);
+  return end ? (size_t) (end - string) : maxlen;
+}
diff --git a/gnu/strnlen1.c b/gnu/strnlen1.c
new file mode 100644 (file)
index 0000000..c0fa062
--- /dev/null
@@ -0,0 +1,37 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
+   Copyright (C) 2005-2006, 2009-2010 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 "strnlen1.h"
+
+#include <string.h>
+
+/* 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.  */
+size_t
+strnlen1 (const char *string, size_t maxlen)
+{
+  const char *end = (const char *) memchr (string, '\0', maxlen);
+  if (end != NULL)
+    return end - string + 1;
+  else
+    return maxlen;
+}
diff --git a/gnu/strnlen1.h b/gnu/strnlen1.h
new file mode 100644 (file)
index 0000000..df1ea80
--- /dev/null
@@ -0,0 +1,41 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
+   Copyright (C) 2005, 2009, 2010 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 _STRNLEN1_H
+#define _STRNLEN1_H
+
+#include <stddef.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#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
+}
+#endif
+
+
+#endif /* _STRNLEN1_H */
diff --git a/gnu/strtoimax.c b/gnu/strtoimax.c
new file mode 100644 (file)
index 0000000..bbdb9c6
--- /dev/null
@@ -0,0 +1,77 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Convert string representation of a number into an intmax_t value.
+
+   Copyright (C) 1999, 2001, 2002, 2003, 2004, 2006, 2009, 2010 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. */
+
+#include <config.h>
+
+/* Verify interface.  */
+#include <inttypes.h>
+
+#include <stdlib.h>
+
+#include "verify.h"
+
+#ifdef UNSIGNED
+# ifndef HAVE_DECL_STRTOULL
+"this configure-time declaration test was not run"
+# endif
+# if !HAVE_DECL_STRTOULL && HAVE_UNSIGNED_LONG_LONG_INT
+unsigned long long int strtoull (char const *, char **, int);
+# endif
+
+#else
+
+# ifndef HAVE_DECL_STRTOLL
+"this configure-time declaration test was not run"
+# endif
+# if !HAVE_DECL_STRTOLL && HAVE_LONG_LONG_INT
+long long int strtoll (char const *, char **, int);
+# endif
+#endif
+
+#ifdef UNSIGNED
+# define Have_long_long HAVE_UNSIGNED_LONG_LONG_INT
+# define Int uintmax_t
+# define Unsigned unsigned
+# define strtoimax strtoumax
+# define strtol strtoul
+# define strtoll strtoull
+#else
+# define Have_long_long HAVE_LONG_LONG_INT
+# define Int intmax_t
+# define Unsigned
+#endif
+
+Int
+strtoimax (char const *ptr, char **endptr, int base)
+{
+#if Have_long_long
+  verify (sizeof (Int) == sizeof (Unsigned long int)
+          || sizeof (Int) == sizeof (Unsigned long long int));
+
+  if (sizeof (Int) != sizeof (Unsigned long int))
+    return strtoll (ptr, endptr, base);
+#else
+  verify (sizeof (Int) == sizeof (Unsigned long int));
+#endif
+
+  return strtol (ptr, endptr, base);
+}
diff --git a/gnu/strtol.c b/gnu/strtol.c
new file mode 100644 (file)
index 0000000..7e3519d
--- /dev/null
@@ -0,0 +1,436 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Convert string representation of a number into an integer value.
+
+   Copyright (C) 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2003, 2005,
+   2006, 2007, 2009, 2010 Free Software Foundation, Inc.
+
+   NOTE: The canonical source of this file is maintained with the GNU C
+   Library.  Bugs can be reported to bug-glibc@gnu.org.
+
+   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 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/>.  */
+
+#ifdef _LIBC
+# define USE_NUMBER_GROUPING
+#else
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#ifndef __set_errno
+# define __set_errno(Val) errno = (Val)
+#endif
+
+#include <limits.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef USE_NUMBER_GROUPING
+# include "../locale/localeinfo.h"
+#endif
+
+/* Nonzero if we are defining `strtoul' or `strtoull', operating on
+   unsigned integers.  */
+#ifndef UNSIGNED
+# define UNSIGNED 0
+# define INT LONG int
+#else
+# define INT unsigned LONG int
+#endif
+
+/* Determine the name.  */
+#ifdef USE_IN_EXTENDED_LOCALE_MODEL
+# if UNSIGNED
+#  ifdef USE_WIDE_CHAR
+#   ifdef QUAD
+#    define strtol __wcstoull_l
+#   else
+#    define strtol __wcstoul_l
+#   endif
+#  else
+#   ifdef QUAD
+#    define strtol __strtoull_l
+#   else
+#    define strtol __strtoul_l
+#   endif
+#  endif
+# else
+#  ifdef USE_WIDE_CHAR
+#   ifdef QUAD
+#    define strtol __wcstoll_l
+#   else
+#    define strtol __wcstol_l
+#   endif
+#  else
+#   ifdef QUAD
+#    define strtol __strtoll_l
+#   else
+#    define strtol __strtol_l
+#   endif
+#  endif
+# endif
+#else
+# if UNSIGNED
+#  ifdef USE_WIDE_CHAR
+#   ifdef QUAD
+#    define strtol wcstoull
+#   else
+#    define strtol wcstoul
+#   endif
+#  else
+#   ifdef QUAD
+#    define strtol strtoull
+#   else
+#    define strtol strtoul
+#   endif
+#  endif
+# else
+#  ifdef USE_WIDE_CHAR
+#   ifdef QUAD
+#    define strtol wcstoll
+#   else
+#    define strtol wcstol
+#   endif
+#  else
+#   ifdef QUAD
+#    define strtol strtoll
+#   endif
+#  endif
+# endif
+#endif
+
+/* If QUAD is defined, we are defining `strtoll' or `strtoull',
+   operating on `long long int's.  */
+#ifdef QUAD
+# define LONG long long
+# define STRTOL_LONG_MIN LONG_LONG_MIN
+# define STRTOL_LONG_MAX LONG_LONG_MAX
+# define STRTOL_ULONG_MAX ULONG_LONG_MAX
+
+/* The extra casts in the following macros work around compiler bugs,
+   e.g., in Cray C 5.0.3.0.  */
+
+/* True if negative values of the signed integer type T use two's
+   complement, ones' complement, or signed magnitude representation,
+   respectively.  Much GNU code assumes two's complement, but some
+   people like to be portable to all possible C hosts.  */
+# define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
+# define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
+# define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
+
+/* True if the arithmetic type T is signed.  */
+# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+
+/* The maximum and minimum values for the integer type T.  These
+   macros have undefined behavior if T is signed and has padding bits.
+   If this is a problem for you, please let us know how to fix it for
+   your host.  */
+# define TYPE_MINIMUM(t) \
+   ((t) (! TYPE_SIGNED (t) \
+         ? (t) 0 \
+         : TYPE_SIGNED_MAGNITUDE (t) \
+         ? ~ (t) 0 \
+         : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
+# define TYPE_MAXIMUM(t) \
+   ((t) (! TYPE_SIGNED (t) \
+         ? (t) -1 \
+         : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
+
+# ifndef ULONG_LONG_MAX
+#  define ULONG_LONG_MAX TYPE_MAXIMUM (unsigned long long)
+# endif
+# ifndef LONG_LONG_MAX
+#  define LONG_LONG_MAX TYPE_MAXIMUM (long long int)
+# endif
+# ifndef LONG_LONG_MIN
+#  define LONG_LONG_MIN TYPE_MINIMUM (long long int)
+# endif
+
+# if __GNUC__ == 2 && __GNUC_MINOR__ < 7
+   /* Work around gcc bug with using this constant.  */
+   static const unsigned long long int maxquad = ULONG_LONG_MAX;
+#  undef STRTOL_ULONG_MAX
+#  define STRTOL_ULONG_MAX maxquad
+# endif
+#else
+# define LONG long
+# define STRTOL_LONG_MIN LONG_MIN
+# define STRTOL_LONG_MAX LONG_MAX
+# define STRTOL_ULONG_MAX ULONG_MAX
+#endif
+
+
+/* We use this code also for the extended locale handling where the
+   function gets as an additional argument the locale which has to be
+   used.  To access the values we have to redefine the _NL_CURRENT
+   macro.  */
+#ifdef USE_IN_EXTENDED_LOCALE_MODEL
+# undef _NL_CURRENT
+# define _NL_CURRENT(category, item) \
+  (current->values[_NL_ITEM_INDEX (item)].string)
+# define LOCALE_PARAM , loc
+# define LOCALE_PARAM_PROTO , __locale_t loc
+#else
+# define LOCALE_PARAM
+# define LOCALE_PARAM_PROTO
+#endif
+
+#include <wchar.h>
+
+#ifdef USE_WIDE_CHAR
+# include <wctype.h>
+# define L_(Ch) L##Ch
+# define UCHAR_TYPE wint_t
+# define STRING_TYPE wchar_t
+# ifdef USE_IN_EXTENDED_LOCALE_MODEL
+#  define ISSPACE(Ch) __iswspace_l ((Ch), loc)
+#  define ISALPHA(Ch) __iswalpha_l ((Ch), loc)
+#  define TOUPPER(Ch) __towupper_l ((Ch), loc)
+# else
+#  define ISSPACE(Ch) iswspace (Ch)
+#  define ISALPHA(Ch) iswalpha (Ch)
+#  define TOUPPER(Ch) towupper (Ch)
+# endif
+#else
+# define L_(Ch) Ch
+# define UCHAR_TYPE unsigned char
+# define STRING_TYPE char
+# ifdef USE_IN_EXTENDED_LOCALE_MODEL
+#  define ISSPACE(Ch) __isspace_l ((Ch), loc)
+#  define ISALPHA(Ch) __isalpha_l ((Ch), loc)
+#  define TOUPPER(Ch) __toupper_l ((Ch), loc)
+# else
+#  define ISSPACE(Ch) isspace (Ch)
+#  define ISALPHA(Ch) isalpha (Ch)
+#  define TOUPPER(Ch) toupper (Ch)
+# endif
+#endif
+
+#define INTERNAL(X) INTERNAL1(X)
+#define INTERNAL1(X) __##X##_internal
+#define WEAKNAME(X) WEAKNAME1(X)
+
+#ifdef USE_NUMBER_GROUPING
+/* This file defines a function to check for correct grouping.  */
+# include "grouping.h"
+#endif
+
+
+
+/* Convert NPTR to an `unsigned long int' or `long int' in base BASE.
+   If BASE is 0 the base is determined by the presence of a leading
+   zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal.
+   If BASE is < 2 or > 36, it is reset to 10.
+   If ENDPTR is not NULL, a pointer to the character after the last
+   one converted is stored in *ENDPTR.  */
+
+INT
+INTERNAL (strtol) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+                   int base, int group LOCALE_PARAM_PROTO)
+{
+  int negative;
+  register unsigned LONG int cutoff;
+  register unsigned int cutlim;
+  register unsigned LONG int i;
+  register const STRING_TYPE *s;
+  register UCHAR_TYPE c;
+  const STRING_TYPE *save, *end;
+  int overflow;
+
+#ifdef USE_NUMBER_GROUPING
+# ifdef USE_IN_EXTENDED_LOCALE_MODEL
+  struct locale_data *current = loc->__locales[LC_NUMERIC];
+# endif
+  /* The thousands character of the current locale.  */
+  wchar_t thousands = L'\0';
+  /* The numeric grouping specification of the current locale,
+     in the format described in <locale.h>.  */
+  const char *grouping;
+
+  if (group)
+    {
+      grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
+      if (*grouping <= 0 || *grouping == CHAR_MAX)
+        grouping = NULL;
+      else
+        {
+          /* Figure out the thousands separator character.  */
+# if defined _LIBC || defined _HAVE_BTOWC
+          thousands = __btowc (*_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP));
+          if (thousands == WEOF)
+            thousands = L'\0';
+# endif
+          if (thousands == L'\0')
+            grouping = NULL;
+        }
+    }
+  else
+    grouping = NULL;
+#endif
+
+  if (base < 0 || base == 1 || base > 36)
+    {
+      __set_errno (EINVAL);
+      return 0;
+    }
+
+  save = s = nptr;
+
+  /* Skip white space.  */
+  while (ISSPACE (*s))
+    ++s;
+  if (*s == L_('\0'))
+    goto noconv;
+
+  /* Check for a sign.  */
+  if (*s == L_('-'))
+    {
+      negative = 1;
+      ++s;
+    }
+  else if (*s == L_('+'))
+    {
+      negative = 0;
+      ++s;
+    }
+  else
+    negative = 0;
+
+  /* Recognize number prefix and if BASE is zero, figure it out ourselves.  */
+  if (*s == L_('0'))
+    {
+      if ((base == 0 || base == 16) && TOUPPER (s[1]) == L_('X'))
+        {
+          s += 2;
+          base = 16;
+        }
+      else if (base == 0)
+        base = 8;
+    }
+  else if (base == 0)
+    base = 10;
+
+  /* Save the pointer so we can check later if anything happened.  */
+  save = s;
+
+#ifdef USE_NUMBER_GROUPING
+  if (group)
+    {
+      /* Find the end of the digit string and check its grouping.  */
+      end = s;
+      for (c = *end; c != L_('\0'); c = *++end)
+        if ((wchar_t) c != thousands
+            && ((wchar_t) c < L_('0') || (wchar_t) c > L_('9'))
+            && (!ISALPHA (c) || (int) (TOUPPER (c) - L_('A') + 10) >= base))
+          break;
+      if (*s == thousands)
+        end = s;
+      else
+        end = correctly_grouped_prefix (s, end, thousands, grouping);
+    }
+  else
+#endif
+    end = NULL;
+
+  cutoff = STRTOL_ULONG_MAX / (unsigned LONG int) base;
+  cutlim = STRTOL_ULONG_MAX % (unsigned LONG int) base;
+
+  overflow = 0;
+  i = 0;
+  for (c = *s; c != L_('\0'); c = *++s)
+    {
+      if (s == end)
+        break;
+      if (c >= L_('0') && c <= L_('9'))
+        c -= L_('0');
+      else if (ISALPHA (c))
+        c = TOUPPER (c) - L_('A') + 10;
+      else
+        break;
+      if ((int) c >= base)
+        break;
+      /* Check for overflow.  */
+      if (i > cutoff || (i == cutoff && c > cutlim))
+        overflow = 1;
+      else
+        {
+          i *= (unsigned LONG int) base;
+          i += c;
+        }
+    }
+
+  /* Check if anything actually happened.  */
+  if (s == save)
+    goto noconv;
+
+  /* Store in ENDPTR the address of one character
+     past the last character we converted.  */
+  if (endptr != NULL)
+    *endptr = (STRING_TYPE *) s;
+
+#if !UNSIGNED
+  /* Check for a value that is within the range of
+     `unsigned LONG int', but outside the range of `LONG int'.  */
+  if (overflow == 0
+      && i > (negative
+              ? -((unsigned LONG int) (STRTOL_LONG_MIN + 1)) + 1
+              : (unsigned LONG int) STRTOL_LONG_MAX))
+    overflow = 1;
+#endif
+
+  if (overflow)
+    {
+      __set_errno (ERANGE);
+#if UNSIGNED
+      return STRTOL_ULONG_MAX;
+#else
+      return negative ? STRTOL_LONG_MIN : STRTOL_LONG_MAX;
+#endif
+    }
+
+  /* Return the result of the appropriate sign.  */
+  return negative ? -i : i;
+
+noconv:
+  /* We must handle a special case here: the base is 0 or 16 and the
+     first two characters are '0' and 'x', but the rest are no
+     hexadecimal digits.  This is no error case.  We return 0 and
+     ENDPTR points to the `x`.  */
+  if (endptr != NULL)
+    {
+      if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X')
+          && save[-2] == L_('0'))
+        *endptr = (STRING_TYPE *) &save[-1];
+      else
+        /*  There was no number to convert.  */
+        *endptr = (STRING_TYPE *) nptr;
+    }
+
+  return 0L;
+}
+\f
+/* External user entry point.  */
+
+
+INT
+#ifdef weak_function
+weak_function
+#endif
+strtol (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+        int base LOCALE_PARAM_PROTO)
+{
+  return INTERNAL (strtol) (nptr, endptr, base, 0 LOCALE_PARAM);
+}
diff --git a/gnu/strtoll.c b/gnu/strtoll.c
new file mode 100644 (file)
index 0000000..09e7272
--- /dev/null
@@ -0,0 +1,35 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Function to parse a `long long int' from text.
+   Copyright (C) 1995, 1996, 1997, 1999, 2001, 2009, 2010 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
+   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/>.  */
+
+#define QUAD    1
+
+#include <strtol.c>
+
+#ifdef _LIBC
+# ifdef SHARED
+#  include <shlib-compat.h>
+
+#  if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+compat_symbol (libc, __strtoll_internal, __strtoq_internal, GLIBC_2_0);
+#  endif
+
+# endif
+weak_alias (strtoll, strtoq)
+#endif
diff --git a/gnu/strtoul.c b/gnu/strtoul.c
new file mode 100644 (file)
index 0000000..d16d3b9
--- /dev/null
@@ -0,0 +1,21 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copyright (C) 1991, 1997, 2009, 2010 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
+   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/>.  */
+
+#define UNSIGNED        1
+
+#include "strtol.c"
diff --git a/gnu/strtoull.c b/gnu/strtoull.c
new file mode 100644 (file)
index 0000000..5082c31
--- /dev/null
@@ -0,0 +1,29 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Function to parse an `unsigned long long int' from text.
+   Copyright (C) 1995, 1996, 1997, 1999, 2009, 2010 Free Software Foundation,
+   Inc.
+   NOTE: The canonical source of this file is maintained with the GNU C
+   Library.  Bugs can be reported to bug-glibc@gnu.org.
+
+   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 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/>.  */
+
+#define QUAD 1
+
+#include "strtoul.c"
+
+#ifdef _LIBC
+strong_alias (__strtoull_internal, __strtouq_internal)
+weak_alias (strtoull, strtouq)
+#endif
diff --git a/gnu/strtoumax.c b/gnu/strtoumax.c
new file mode 100644 (file)
index 0000000..44a2f8b
--- /dev/null
@@ -0,0 +1,4 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+#define UNSIGNED 1
+#include "strtoimax.c"
diff --git a/gnu/sys_stat.in.h b/gnu/sys_stat.in.h
new file mode 100644 (file)
index 0000000..75e38ed
--- /dev/null
@@ -0,0 +1,633 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Provide a more complete sys/stat header file.
+   Copyright (C) 2005-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* Written by Eric Blake, Paul Eggert, and Jim Meyering.  */
+
+/* This file is supposed to be used on platforms where <sys/stat.h> is
+   incomplete.  It is intended to provide definitions and prototypes
+   needed by an application.  Start with what the system provides.  */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+#if defined __need_system_sys_stat_h
+/* Special invocation convention.  */
+
+#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_SYS_STAT_H
+
+/* Get nlink_t.  */
+#include <sys/types.h>
+
+/* Get struct timespec.  */
+#include <time.h>
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
+
+#ifndef _GL_SYS_STAT_H
+#define _GL_SYS_STAT_H
+
+/* 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.  */
+
+/* Before doing "#define mkdir rpl_mkdir" below, we need to include all
+   headers that may declare mkdir().  */
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+# include <io.h>
+#endif
+
+#ifndef S_IFMT
+# define S_IFMT 0170000
+#endif
+
+#if STAT_MACROS_BROKEN
+# undef S_ISBLK
+# undef S_ISCHR
+# undef S_ISDIR
+# undef S_ISFIFO
+# undef S_ISLNK
+# undef S_ISNAM
+# undef S_ISMPB
+# undef S_ISMPC
+# undef S_ISNWK
+# undef S_ISREG
+# undef S_ISSOCK
+#endif
+
+#ifndef S_ISBLK
+# ifdef S_IFBLK
+#  define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
+# else
+#  define S_ISBLK(m) 0
+# endif
+#endif
+
+#ifndef S_ISCHR
+# ifdef S_IFCHR
+#  define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
+# else
+#  define S_ISCHR(m) 0
+# endif
+#endif
+
+#ifndef S_ISDIR
+# ifdef S_IFDIR
+#  define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+# else
+#  define S_ISDIR(m) 0
+# endif
+#endif
+
+#ifndef S_ISDOOR /* Solaris 2.5 and up */
+# define S_ISDOOR(m) 0
+#endif
+
+#ifndef S_ISFIFO
+# ifdef S_IFIFO
+#  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
+# else
+#  define S_ISFIFO(m) 0
+# endif
+#endif
+
+#ifndef S_ISLNK
+# ifdef S_IFLNK
+#  define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+# else
+#  define S_ISLNK(m) 0
+# endif
+#endif
+
+#ifndef S_ISMPB /* V7 */
+# ifdef S_IFMPB
+#  define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
+#  define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
+# else
+#  define S_ISMPB(m) 0
+#  define S_ISMPC(m) 0
+# endif
+#endif
+
+#ifndef S_ISNAM /* Xenix */
+# ifdef S_IFNAM
+#  define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
+# else
+#  define S_ISNAM(m) 0
+# endif
+#endif
+
+#ifndef S_ISNWK /* HP/UX */
+# ifdef S_IFNWK
+#  define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
+# else
+#  define S_ISNWK(m) 0
+# endif
+#endif
+
+#ifndef S_ISPORT /* Solaris 10 and up */
+# define S_ISPORT(m) 0
+#endif
+
+#ifndef S_ISREG
+# ifdef S_IFREG
+#  define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+# else
+#  define S_ISREG(m) 0
+# endif
+#endif
+
+#ifndef S_ISSOCK
+# ifdef S_IFSOCK
+#  define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
+# else
+#  define S_ISSOCK(m) 0
+# endif
+#endif
+
+
+#ifndef S_TYPEISMQ
+# define S_TYPEISMQ(p) 0
+#endif
+
+#ifndef S_TYPEISTMO
+# define S_TYPEISTMO(p) 0
+#endif
+
+
+#ifndef S_TYPEISSEM
+# ifdef S_INSEM
+#  define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM)
+# else
+#  define S_TYPEISSEM(p) 0
+# endif
+#endif
+
+#ifndef S_TYPEISSHM
+# ifdef S_INSHD
+#  define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD)
+# else
+#  define S_TYPEISSHM(p) 0
+# endif
+#endif
+
+/* high performance ("contiguous data") */
+#ifndef S_ISCTG
+# define S_ISCTG(p) 0
+#endif
+
+/* Cray DMF (data migration facility): off line, with data  */
+#ifndef S_ISOFD
+# define S_ISOFD(p) 0
+#endif
+
+/* Cray DMF (data migration facility): off line, with no data  */
+#ifndef S_ISOFL
+# define S_ISOFL(p) 0
+#endif
+
+/* 4.4BSD whiteout */
+#ifndef S_ISWHT
+# define S_ISWHT(m) 0
+#endif
+
+/* If any of the following are undefined,
+   define them to their de facto standard values.  */
+#if !S_ISUID
+# define S_ISUID 04000
+#endif
+#if !S_ISGID
+# define S_ISGID 02000
+#endif
+
+/* S_ISVTX is a common extension to POSIX.  */
+#ifndef S_ISVTX
+# define S_ISVTX 01000
+#endif
+
+#if !S_IRUSR && S_IREAD
+# define S_IRUSR S_IREAD
+#endif
+#if !S_IRUSR
+# define S_IRUSR 00400
+#endif
+#if !S_IRGRP
+# define S_IRGRP (S_IRUSR >> 3)
+#endif
+#if !S_IROTH
+# define S_IROTH (S_IRUSR >> 6)
+#endif
+
+#if !S_IWUSR && S_IWRITE
+# define S_IWUSR S_IWRITE
+#endif
+#if !S_IWUSR
+# define S_IWUSR 00200
+#endif
+#if !S_IWGRP
+# define S_IWGRP (S_IWUSR >> 3)
+#endif
+#if !S_IWOTH
+# define S_IWOTH (S_IWUSR >> 6)
+#endif
+
+#if !S_IXUSR && S_IEXEC
+# define S_IXUSR S_IEXEC
+#endif
+#if !S_IXUSR
+# define S_IXUSR 00100
+#endif
+#if !S_IXGRP
+# define S_IXGRP (S_IXUSR >> 3)
+#endif
+#if !S_IXOTH
+# define S_IXOTH (S_IXUSR >> 6)
+#endif
+
+#if !S_IRWXU
+# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
+#endif
+#if !S_IRWXG
+# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
+#endif
+#if !S_IRWXO
+# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
+#endif
+
+/* S_IXUGO is a common extension to POSIX.  */
+#if !S_IXUGO
+# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
+#endif
+
+#ifndef S_IRWXUGO
+# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
+#endif
+
+/* Macros for futimens and utimensat.  */
+#ifndef UTIME_NOW
+# define UTIME_NOW (-1)
+# define UTIME_OMIT (-2)
+#endif
+
+
+#if @GNULIB_FCHMODAT@
+# if !@HAVE_FCHMODAT@
+_GL_FUNCDECL_SYS (fchmodat, int,
+                  (int fd, char const *file, mode_t mode, int flag)
+                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (fchmodat, int,
+                  (int fd, char const *file, mode_t mode, int flag));
+_GL_CXXALIASWARN (fchmodat);
+#elif defined GNULIB_POSIXCHECK
+# undef fchmodat
+# if HAVE_RAW_DECL_FCHMODAT
+_GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if @REPLACE_FSTAT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  define fstat rpl_fstat
+# endif
+_GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf));
+#else
+_GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf));
+#endif
+_GL_CXXALIASWARN (fstat);
+
+
+#if @GNULIB_FSTATAT@
+# if @REPLACE_FSTATAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fstatat
+#   define fstatat rpl_fstatat
+#  endif
+_GL_FUNCDECL_RPL (fstatat, int,
+                  (int fd, char const *name, struct stat *st, int flags)
+                  _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (fstatat, int,
+                  (int fd, char const *name, struct stat *st, int flags));
+# else
+#  if !@HAVE_FSTATAT@
+_GL_FUNCDECL_SYS (fstatat, int,
+                  (int fd, char const *name, struct stat *st, int flags)
+                  _GL_ARG_NONNULL ((2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (fstatat, int,
+                  (int fd, char const *name, struct stat *st, int flags));
+# endif
+_GL_CXXALIASWARN (fstatat);
+#elif defined GNULIB_POSIXCHECK
+# undef fstatat
+# if HAVE_RAW_DECL_FSTATAT
+_GL_WARN_ON_USE (fstatat, "fstatat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FUTIMENS@
+# if @REPLACE_FUTIMENS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef futimens
+#   define futimens rpl_futimens
+#  endif
+_GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2]));
+_GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2]));
+# else
+#  if !@HAVE_FUTIMENS@
+_GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2]));
+#  endif
+_GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2]));
+# endif
+_GL_CXXALIASWARN (futimens);
+#elif defined GNULIB_POSIXCHECK
+# undef futimens
+# if HAVE_RAW_DECL_FUTIMENS
+_GL_WARN_ON_USE (futimens, "futimens is not portable - "
+                 "use gnulib module futimens for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LCHMOD@
+/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME
+   denotes a symbolic link.  */
+# if !@HAVE_LCHMOD@
+/* The lchmod replacement follows symbolic links.  Callers should take
+   this into account; lchmod should be applied only to arguments that
+   are known to not be symbolic links.  On hosts that lack lchmod,
+   this can lead to race conditions between the check and the
+   invocation of lchmod, but we know of no workarounds that are
+   reliable in general.  You might try requesting support for lchmod
+   from your operating system supplier.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define lchmod chmod
+#  endif
+_GL_CXXALIAS_RPL_1 (lchmod, chmod, int, (const char *filename, mode_t mode));
+# else
+#  if 0 /* assume already declared */
+_GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode)
+                               _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode));
+# endif
+_GL_CXXALIASWARN (lchmod);
+#elif defined GNULIB_POSIXCHECK
+# undef lchmod
+# if HAVE_RAW_DECL_LCHMOD
+_GL_WARN_ON_USE (lchmod, "lchmod is unportable - "
+                 "use gnulib module lchmod for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LSTAT@
+# if ! @HAVE_LSTAT@
+/* mingw does not support symlinks, therefore it does not have lstat.  But
+   without links, stat does just fine.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define lstat stat
+#  endif
+_GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *name, struct stat *buf));
+# elif @REPLACE_LSTAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef lstat
+#   define lstat rpl_lstat
+#  endif
+_GL_FUNCDECL_RPL (lstat, int, (const char *name, struct stat *buf)
+                              _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (lstat, int, (const char *name, struct stat *buf));
+# else
+_GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf));
+# endif
+_GL_CXXALIASWARN (lstat);
+#elif defined GNULIB_POSIXCHECK
+# undef lstat
+# if HAVE_RAW_DECL_LSTAT
+_GL_WARN_ON_USE (lstat, "lstat is unportable - "
+                 "use gnulib module lstat for portability");
+# endif
+#endif
+
+
+#if @REPLACE_MKDIR@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  undef mkdir
+#  define mkdir rpl_mkdir
+# endif
+_GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
+#else
+/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
+   Additionally, it declares _mkdir (and depending on compile flags, an
+   alias mkdir), only in the nonstandard <io.h>, which is included above.  */
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+static inline int
+rpl_mkdir (char const *name, mode_t mode)
+{
+  return _mkdir (name);
+}
+
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mkdir rpl_mkdir
+#  endif
+_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
+# else
+_GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode));
+# endif
+#endif
+_GL_CXXALIASWARN (mkdir);
+
+
+#if @GNULIB_MKDIRAT@
+# if !@HAVE_MKDIRAT@
+_GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)
+                                _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode));
+_GL_CXXALIASWARN (mkdirat);
+#elif defined GNULIB_POSIXCHECK
+# undef mkdirat
+# if HAVE_RAW_DECL_MKDIRAT
+_GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_MKFIFO@
+# if @REPLACE_MKFIFO@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mkfifo
+#   define mkfifo rpl_mkfifo
+#  endif
+_GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode)
+                               _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode));
+# else
+#  if !@HAVE_MKFIFO@
+_GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode)
+                               _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode));
+# endif
+_GL_CXXALIASWARN (mkfifo);
+#elif defined GNULIB_POSIXCHECK
+# undef mkfifo
+# if HAVE_RAW_DECL_MKFIFO
+_GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - "
+                 "use gnulib module mkfifo for portability");
+# endif
+#endif
+
+
+#if @GNULIB_MKFIFOAT@
+# if !@HAVE_MKFIFOAT@
+_GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)
+                                 _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode));
+_GL_CXXALIASWARN (mkfifoat);
+#elif defined GNULIB_POSIXCHECK
+# undef mkfifoat
+# if HAVE_RAW_DECL_MKFIFOAT
+_GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - "
+                 "use gnulib module mkfifoat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_MKNOD@
+# if @REPLACE_MKNOD@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mknod
+#   define mknod rpl_mknod
+#  endif
+_GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev));
+# else
+#  if !@HAVE_MKNOD@
+_GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev)
+                              _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev));
+# endif
+_GL_CXXALIASWARN (mknod);
+#elif defined GNULIB_POSIXCHECK
+# undef mknod
+# if HAVE_RAW_DECL_MKNOD
+_GL_WARN_ON_USE (mknod, "mknod is not portable - "
+                 "use gnulib module mknod for portability");
+# endif
+#endif
+
+
+#if @GNULIB_MKNODAT@
+# if !@HAVE_MKNODAT@
+_GL_FUNCDECL_SYS (mknodat, int,
+                  (int fd, char const *file, mode_t mode, dev_t dev)
+                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (mknodat, int,
+                  (int fd, char const *file, mode_t mode, dev_t dev));
+_GL_CXXALIASWARN (mknodat);
+#elif defined GNULIB_POSIXCHECK
+# undef mknodat
+# if HAVE_RAW_DECL_MKNODAT
+_GL_WARN_ON_USE (mknodat, "mknodat is not portable - "
+                 "use gnulib module mkfifoat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_STAT@
+# if @REPLACE_STAT@
+/* We can't use the object-like #define stat rpl_stat, because of
+   struct stat.  This means that rpl_stat will not be used if the user
+   does (stat)(a,b).  Oh well.  */
+#  undef stat
+#  ifdef _LARGE_FILES
+    /* With _LARGE_FILES defined, AIX (only) defines stat to stat64,
+       so we have to replace stat64() instead of stat(). */
+#   define stat stat64
+#   undef stat64
+#   define stat64(name, st) rpl_stat (name, st)
+#  else /* !_LARGE_FILES */
+#   define stat(name, st) rpl_stat (name, st)
+#  endif /* !_LARGE_FILES */
+_GL_EXTERN_C int stat (const char *name, struct stat *buf) _GL_ARG_NONNULL ((1, 2));
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef stat
+# if HAVE_RAW_DECL_STAT
+_GL_WARN_ON_USE (stat, "stat is unportable - "
+                 "use gnulib module stat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_UTIMENSAT@
+# if @REPLACE_UTIMENSAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef utimensat
+#   define utimensat rpl_utimensat
+#  endif
+_GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name,
+                                   struct timespec const times[2], int flag)
+                                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name,
+                                   struct timespec const times[2], int flag));
+# else
+#  if !@HAVE_UTIMENSAT@
+_GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name,
+                                   struct timespec const times[2], int flag)
+                                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name,
+                                   struct timespec const times[2], int flag));
+# endif
+_GL_CXXALIASWARN (utimensat);
+#elif defined GNULIB_POSIXCHECK
+# undef utimensat
+# if HAVE_RAW_DECL_UTIMENSAT
+_GL_WARN_ON_USE (utimensat, "utimensat is not portable - "
+                 "use gnulib module utimensat for portability");
+# endif
+#endif
+
+
+#endif /* _GL_SYS_STAT_H */
+#endif /* _GL_SYS_STAT_H */
+#endif
diff --git a/gnu/sys_time.in.h b/gnu/sys_time.in.h
new file mode 100644 (file)
index 0000000..ea9bb26
--- /dev/null
@@ -0,0 +1,97 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Provide a more complete sys/time.h.
+
+   Copyright (C) 2007-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* Written by Paul Eggert.  */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+#if defined _GL_SYS_TIME_H
+
+/* Simply delegate to the system's header, without adding anything.  */
+# if @HAVE_SYS_TIME_H@
+#  @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@
+# endif
+
+#else
+
+# define _GL_SYS_TIME_H
+
+# if @HAVE_SYS_TIME_H@
+#  @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@
+# else
+#  include <time.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.  */
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+# if ! @HAVE_STRUCT_TIMEVAL@
+struct timeval
+{
+  time_t tv_sec;
+  long int tv_usec;
+};
+# endif
+
+# ifdef __cplusplus
+}
+# endif
+
+# if @GNULIB_GETTIMEOFDAY@
+#  if @REPLACE_GETTIMEOFDAY@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef gettimeofday
+#    define gettimeofday rpl_gettimeofday
+#   endif
+_GL_FUNCDECL_RPL (gettimeofday, int,
+                  (struct timeval *restrict, void *restrict)
+                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (gettimeofday, int,
+                  (struct timeval *restrict, void *restrict));
+#  else
+#   if !@HAVE_GETTIMEOFDAY@
+_GL_FUNCDECL_SYS (gettimeofday, int,
+                  (struct timeval *restrict, void *restrict)
+                  _GL_ARG_NONNULL ((1)));
+#   endif
+/* Need to cast, because on glibc systems, by default, the second argument is
+                                                  struct timezone *.  */
+_GL_CXXALIAS_SYS_CAST (gettimeofday, int,
+                       (struct timeval *restrict, void *restrict));
+#  endif
+_GL_CXXALIASWARN (gettimeofday);
+# elif defined GNULIB_POSIXCHECK
+#  undef gettimeofday
+#  if HAVE_RAW_DECL_GETTIMEOFDAY
+_GL_WARN_ON_USE (gettimeofday, "gettimeofday is unportable - "
+                "use gnulib module gettimeofday for portability");
+#  endif
+# endif
+
+#endif /* _GL_SYS_TIME_H */
diff --git a/gnu/sysexits.in.h b/gnu/sysexits.in.h
new file mode 100644 (file)
index 0000000..da13faa
--- /dev/null
@@ -0,0 +1,73 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* exit() exit codes for some BSD system programs.
+   Copyright (C) 2003, 2006-2010 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 Simon Josefsson based on sysexits(3) man page */
+
+#ifndef _GL_SYSEXITS_H
+
+#if @HAVE_SYSEXITS_H@
+
+# if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+# endif
+
+/* IRIX 6.5 has an <unistd.h> that defines a macro EX_OK with a nonzero
+   value.  Override it.  See
+   <http://lists.gnu.org/archive/html/bug-gnulib/2007-03/msg00361.html>  */
+# ifdef __sgi
+#  include <unistd.h>
+#  undef EX_OK
+# endif
+
+/* The include_next requires a split double-inclusion guard.  */
+# @INCLUDE_NEXT@ @NEXT_SYSEXITS_H@
+
+/* HP-UX 11 <sysexits.h> ends at EX_NOPERM.  */
+# ifndef EX_CONFIG
+#  define EX_CONFIG 78
+# endif
+
+#endif
+
+#ifndef _GL_SYSEXITS_H
+#define _GL_SYSEXITS_H
+
+#if !@HAVE_SYSEXITS_H@
+
+# define EX_OK 0 /* same value as EXIT_SUCCESS */
+
+# define EX_USAGE 64
+# define EX_DATAERR 65
+# define EX_NOINPUT 66
+# define EX_NOUSER 67
+# define EX_NOHOST 68
+# define EX_UNAVAILABLE 69
+# define EX_SOFTWARE 70
+# define EX_OSERR 71
+# define EX_OSFILE 72
+# define EX_CANTCREAT 73
+# define EX_IOERR 74
+# define EX_TEMPFAIL 75
+# define EX_PROTOCOL 76
+# define EX_NOPERM 77
+# define EX_CONFIG 78
+
+#endif
+
+#endif /* _GL_SYSEXITS_H */
+#endif /* _GL_SYSEXITS_H */
diff --git a/gnu/tempname.c b/gnu/tempname.c
new file mode 100644 (file)
index 0000000..4686f26
--- /dev/null
@@ -0,0 +1,313 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* tempname.c - generate the name of a temporary file.
+
+   Copyright (C) 1991-2003, 2005-2007, 2009-2010 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/>.  */
+
+/* Extracted from glibc sysdeps/posix/tempname.c.  See also tmpdir.c.  */
+
+#if !_LIBC
+# include <config.h>
+# include "tempname.h"
+#endif
+
+#include <sys/types.h>
+#include <assert.h>
+
+#include <errno.h>
+#ifndef __set_errno
+# define __set_errno(Val) errno = (Val)
+#endif
+
+#include <stdio.h>
+#ifndef P_tmpdir
+# define P_tmpdir "/tmp"
+#endif
+#ifndef TMP_MAX
+# define TMP_MAX 238328
+#endif
+#ifndef __GT_FILE
+# define __GT_FILE      0
+# define __GT_DIR       1
+# define __GT_NOCREATE  2
+#endif
+#if !_LIBC && (GT_FILE != __GT_FILE || GT_DIR != __GT_DIR       \
+               || GT_NOCREATE != __GT_NOCREATE)
+# error report this to bug-gnulib@gnu.org
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <fcntl.h>
+#include <sys/time.h>
+#include <stdint.h>
+#include <unistd.h>
+
+#include <sys/stat.h>
+
+#if _LIBC
+# define struct_stat64 struct stat64
+#else
+# define struct_stat64 struct stat
+# define __gen_tempname gen_tempname
+# define __getpid getpid
+# define __gettimeofday gettimeofday
+# define __mkdir mkdir
+# define __open open
+# define __open64 open
+# define __lxstat64(version, file, buf) lstat (file, buf)
+# define __xstat64(version, file, buf) stat (file, buf)
+#endif
+
+#if ! (HAVE___SECURE_GETENV || _LIBC)
+# define __secure_getenv getenv
+#endif
+
+#ifdef _LIBC
+# include <hp-timing.h>
+# if HP_TIMING_AVAIL
+#  define RANDOM_BITS(Var) \
+  if (__builtin_expect (value == UINT64_C (0), 0))                            \
+    {                                                                         \
+      /* If this is the first time this function is used initialize           \
+         the variable we accumulate the value in to some somewhat             \
+         random value.  If we'd not do this programs at startup time          \
+         might have a reduced set of possible names, at least on slow         \
+         machines.  */                                                        \
+      struct timeval tv;                                                      \
+      __gettimeofday (&tv, NULL);                                             \
+      value = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec;                      \
+    }                                                                         \
+  HP_TIMING_NOW (Var)
+# endif
+#endif
+
+/* Use the widest available unsigned type if uint64_t is not
+   available.  The algorithm below extracts a number less than 62**6
+   (approximately 2**35.725) from uint64_t, so ancient hosts where
+   uintmax_t is only 32 bits lose about 3.725 bits of randomness,
+   which is better than not having mkstemp at all.  */
+#if !defined UINT64_MAX && !defined uint64_t
+# define uint64_t uintmax_t
+#endif
+
+#if _LIBC
+/* Return nonzero if DIR is an existent directory.  */
+static int
+direxists (const char *dir)
+{
+  struct_stat64 buf;
+  return __xstat64 (_STAT_VER, dir, &buf) == 0 && S_ISDIR (buf.st_mode);
+}
+
+/* Path search algorithm, for tmpnam, tmpfile, etc.  If DIR is
+   non-null and exists, uses it; otherwise uses the first of $TMPDIR,
+   P_tmpdir, /tmp that exists.  Copies into TMPL a template suitable
+   for use with mk[s]temp.  Will fail (-1) if DIR is non-null and
+   doesn't exist, none of the searched dirs exists, or there's not
+   enough space in TMPL. */
+int
+__path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx,
+               int try_tmpdir)
+{
+  const char *d;
+  size_t dlen, plen;
+
+  if (!pfx || !pfx[0])
+    {
+      pfx = "file";
+      plen = 4;
+    }
+  else
+    {
+      plen = strlen (pfx);
+      if (plen > 5)
+        plen = 5;
+    }
+
+  if (try_tmpdir)
+    {
+      d = __secure_getenv ("TMPDIR");
+      if (d != NULL && direxists (d))
+        dir = d;
+      else if (dir != NULL && direxists (dir))
+        /* nothing */ ;
+      else
+        dir = NULL;
+    }
+  if (dir == NULL)
+    {
+      if (direxists (P_tmpdir))
+        dir = P_tmpdir;
+      else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp"))
+        dir = "/tmp";
+      else
+        {
+          __set_errno (ENOENT);
+          return -1;
+        }
+    }
+
+  dlen = strlen (dir);
+  while (dlen > 1 && dir[dlen - 1] == '/')
+    dlen--;                     /* remove trailing slashes */
+
+  /* check we have room for "${dir}/${pfx}XXXXXX\0" */
+  if (tmpl_len < dlen + 1 + plen + 6 + 1)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  sprintf (tmpl, "%.*s/%.*sXXXXXX", (int) dlen, dir, (int) plen, pfx);
+  return 0;
+}
+#endif /* _LIBC */
+
+/* These are the characters used in temporary file names.  */
+static const char letters[] =
+"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+
+/* Generate a temporary file name based on TMPL.  TMPL must match the
+   rules for mk[s]temp (i.e. end in "XXXXXX", possibly with a suffix).
+   The name constructed does not exist at the time of the call to
+   __gen_tempname.  TMPL is overwritten with the result.
+
+   KIND may be one of:
+   __GT_NOCREATE:       simply verify that the name does not exist
+                        at the time of the call.
+   __GT_FILE:           create the file using open(O_CREAT|O_EXCL)
+                        and return a read-write fd.  The file is mode 0600.
+   __GT_DIR:            create a directory, which will be mode 0700.
+
+   We use a clever algorithm to get hard-to-predict names. */
+int
+__gen_tempname (char *tmpl, int suffixlen, int flags, int kind)
+{
+  int len;
+  char *XXXXXX;
+  static uint64_t value;
+  uint64_t random_time_bits;
+  unsigned int count;
+  int fd = -1;
+  int save_errno = errno;
+  struct_stat64 st;
+
+  /* A lower bound on the number of temporary files to attempt to
+     generate.  The maximum total number of temporary file names that
+     can exist for a given template is 62**6.  It should never be
+     necessary to try all these combinations.  Instead if a reasonable
+     number of names is tried (we define reasonable as 62**3) fail to
+     give the system administrator the chance to remove the problems.  */
+#define ATTEMPTS_MIN (62 * 62 * 62)
+
+  /* The number of times to attempt to generate a temporary file.  To
+     conform to POSIX, this must be no smaller than TMP_MAX.  */
+#if ATTEMPTS_MIN < TMP_MAX
+  unsigned int attempts = TMP_MAX;
+#else
+  unsigned int attempts = ATTEMPTS_MIN;
+#endif
+
+  len = strlen (tmpl);
+  if (len < 6 + suffixlen || memcmp (&tmpl[len - 6 - suffixlen], "XXXXXX", 6))
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  /* This is where the Xs start.  */
+  XXXXXX = &tmpl[len - 6 - suffixlen];
+
+  /* Get some more or less random data.  */
+#ifdef RANDOM_BITS
+  RANDOM_BITS (random_time_bits);
+#else
+  {
+    struct timeval tv;
+    __gettimeofday (&tv, NULL);
+    random_time_bits = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec;
+  }
+#endif
+  value += random_time_bits ^ __getpid ();
+
+  for (count = 0; count < attempts; value += 7777, ++count)
+    {
+      uint64_t v = value;
+
+      /* Fill in the random bits.  */
+      XXXXXX[0] = letters[v % 62];
+      v /= 62;
+      XXXXXX[1] = letters[v % 62];
+      v /= 62;
+      XXXXXX[2] = letters[v % 62];
+      v /= 62;
+      XXXXXX[3] = letters[v % 62];
+      v /= 62;
+      XXXXXX[4] = letters[v % 62];
+      v /= 62;
+      XXXXXX[5] = letters[v % 62];
+
+      switch (kind)
+        {
+        case __GT_FILE:
+          fd = __open (tmpl,
+                       (flags & ~O_ACCMODE)
+                       | O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
+          break;
+
+        case __GT_DIR:
+          fd = __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR);
+          break;
+
+        case __GT_NOCREATE:
+          /* This case is backward from the other three.  __gen_tempname
+             succeeds if __xstat fails because the name does not exist.
+             Note the continue to bypass the common logic at the bottom
+             of the loop.  */
+          if (__lxstat64 (_STAT_VER, tmpl, &st) < 0)
+            {
+              if (errno == ENOENT)
+                {
+                  __set_errno (save_errno);
+                  return 0;
+                }
+              else
+                /* Give up now. */
+                return -1;
+            }
+          continue;
+
+        default:
+          assert (! "invalid KIND in __gen_tempname");
+          abort ();
+        }
+
+      if (fd >= 0)
+        {
+          __set_errno (save_errno);
+          return fd;
+        }
+      else if (errno != EEXIST)
+        return -1;
+    }
+
+  /* We got out of the loop because we ran out of combinations to try.  */
+  __set_errno (EEXIST);
+  return -1;
+}
diff --git a/gnu/tempname.h b/gnu/tempname.h
new file mode 100644 (file)
index 0000000..4de561d
--- /dev/null
@@ -0,0 +1,52 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Create a temporary file or directory.
+
+   Copyright (C) 2006, 2009-2010 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/>.  */
+
+/* header written by Eric Blake */
+
+#ifndef GL_TEMPNAME_H
+# define GL_TEMPNAME_H
+
+# include <stdio.h>
+
+# ifdef __GT_FILE
+#  define GT_FILE     __GT_FILE
+#  define GT_DIR      __GT_DIR
+#  define GT_NOCREATE __GT_NOCREATE
+# else
+#  define GT_FILE     0
+#  define GT_DIR      1
+#  define GT_NOCREATE 2
+# endif
+
+/* Generate a temporary file name based on TMPL.  TMPL must match the
+   rules for mk[s]temp (i.e. end in "XXXXXX", possibly with a suffix).
+   The name constructed does not exist at the time of the call to
+   gen_tempname.  TMPL is overwritten with the result.
+
+   KIND may be one of:
+   GT_NOCREATE:         simply verify that the name does not exist
+                        at the time of the call.
+   GT_FILE:             create a large file using open(O_CREAT|O_EXCL)
+                        and return a read-write fd.  The file is mode 0600.
+   GT_DIR:              create a directory, which will be mode 0700.
+
+   We use a clever algorithm to get hard-to-predict names. */
+extern int gen_tempname (char *tmpl, int suffixlen, int flags, int kind);
+
+#endif /* GL_TEMPNAME_H */
diff --git a/gnu/time.in.h b/gnu/time.in.h
new file mode 100644 (file)
index 0000000..816f732
--- /dev/null
@@ -0,0 +1,197 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A more-standard <time.h>.
+
+   Copyright (C) 2007-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+/* Don't get in the way of glibc when it includes time.h merely to
+   declare a few standard symbols, rather than to declare all the
+   symbols.  Also, Solaris 8 <time.h> eventually includes itself
+   recursively; if that is happening, just include the system <time.h>
+   without adding our own declarations.  */
+#if (defined __need_time_t || defined __need_clock_t \
+     || defined __need_timespec \
+     || defined _GL_TIME_H)
+
+# @INCLUDE_NEXT@ @NEXT_TIME_H@
+
+#else
+
+# define _GL_TIME_H
+
+# @INCLUDE_NEXT@ @NEXT_TIME_H@
+
+/* NetBSD 5.0 mis-defines NULL.  */
+#include <stddef.h>
+
+/* 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.  */
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+/* Some systems don't define struct timespec (e.g., AIX 4.1, Ultrix 4.3).
+   Or they define it with the wrong member names or define it in <sys/time.h>
+   (e.g., FreeBSD circa 1997).  */
+# if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@
+#  if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+#   include <sys/time.h>
+#  else
+#   undef timespec
+#   define timespec rpl_timespec
+struct timespec
+{
+  time_t tv_sec;
+  long int tv_nsec;
+};
+#  endif
+# endif
+
+# ifdef __cplusplus
+}
+# endif
+
+/* Sleep for at least RQTP seconds unless interrupted,  If interrupted,
+   return -1 and store the remaining time into RMTP.  See
+   <http://www.opengroup.org/susv3xsh/nanosleep.html>.  */
+# if @GNULIB_NANOSLEEP@
+#  if @REPLACE_NANOSLEEP@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define nanosleep rpl_nanosleep
+#   endif
+_GL_FUNCDECL_RPL (nanosleep, int,
+                  (struct timespec const *__rqtp, struct timespec *__rmtp)
+                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (nanosleep, int,
+                  (struct timespec const *__rqtp, struct timespec *__rmtp));
+#  else
+_GL_CXXALIAS_SYS (nanosleep, int,
+                  (struct timespec const *__rqtp, struct timespec *__rmtp));
+#  endif
+_GL_CXXALIASWARN (nanosleep);
+# endif
+
+/* Return the 'time_t' representation of TP and normalize TP.  */
+# if @GNULIB_MKTIME@
+#  if @REPLACE_MKTIME@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define mktime rpl_mktime
+#   endif
+_GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp));
+#  else
+_GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp));
+#  endif
+_GL_CXXALIASWARN (mktime);
+# endif
+
+/* Convert TIMER to RESULT, assuming local time and UTC respectively.  See
+   <http://www.opengroup.org/susv3xsh/localtime_r.html> and
+   <http://www.opengroup.org/susv3xsh/gmtime_r.html>.  */
+# if @REPLACE_LOCALTIME_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef localtime_r
+#   define localtime_r rpl_localtime_r
+#  endif
+_GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer,
+                                             struct tm *restrict __result)
+                                            _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer,
+                                             struct tm *restrict __result));
+# else
+_GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer,
+                                             struct tm *restrict __result));
+# endif
+_GL_CXXALIASWARN (localtime_r);
+# if @REPLACE_LOCALTIME_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef gmtime_r
+#   define gmtime_r rpl_gmtime_r
+#  endif
+_GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer,
+                                          struct tm *restrict __result)
+                                         _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer,
+                                          struct tm *restrict __result));
+# else
+_GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer,
+                                          struct tm *restrict __result));
+# endif
+_GL_CXXALIASWARN (gmtime_r);
+
+/* Parse BUF as a time stamp, assuming FORMAT specifies its layout, and store
+   the resulting broken-down time into TM.  See
+   <http://www.opengroup.org/susv3xsh/strptime.html>.  */
+# if @GNULIB_STRPTIME@
+#  if @REPLACE_STRPTIME@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef strptime
+#    define strptime rpl_strptime
+#   endif
+_GL_FUNCDECL_RPL (strptime, char *, (char const *restrict __buf,
+                                     char const *restrict __format,
+                                     struct tm *restrict __tm)
+                                    _GL_ARG_NONNULL ((1, 2, 3)));
+_GL_CXXALIAS_RPL (strptime, char *, (char const *restrict __buf,
+                                     char const *restrict __format,
+                                     struct tm *restrict __tm));
+#  else
+_GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf,
+                                     char const *restrict __format,
+                                     struct tm *restrict __tm));
+#  endif
+_GL_CXXALIASWARN (strptime);
+# endif
+
+/* Convert TM to a time_t value, assuming UTC.  */
+# if @GNULIB_TIMEGM@
+#  if @REPLACE_TIMEGM@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef timegm
+#    define timegm rpl_timegm
+#   endif
+_GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm));
+#  else
+_GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm));
+#  endif
+_GL_CXXALIASWARN (timegm);
+# endif
+
+/* Encourage applications to avoid unsafe functions that can overrun
+   buffers when given outlandish struct tm values.  Portable
+   applications should use strftime (or even sprintf) instead.  */
+# if GNULIB_PORTCHECK
+#  undef asctime
+#  define asctime eschew_asctime
+#  undef asctime_r
+#  define asctime_r eschew_asctime_r
+#  undef ctime
+#  define ctime eschew_ctime
+#  undef ctime_r
+#  define ctime_r eschew_ctime_r
+# endif
+
+#endif
diff --git a/gnu/time_r.c b/gnu/time_r.c
new file mode 100644 (file)
index 0000000..0c3477a
--- /dev/null
@@ -0,0 +1,49 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Reentrant time functions like localtime_r.
+
+   Copyright (C) 2003, 2006, 2007, 2009, 2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* Written by Paul Eggert.  */
+
+#include <config.h>
+
+#include <time.h>
+
+#include <string.h>
+
+static struct tm *
+copy_tm_result (struct tm *dest, struct tm const *src)
+{
+  if (! src)
+    return 0;
+  *dest = *src;
+  return dest;
+}
+
+
+struct tm *
+gmtime_r (time_t const * restrict t, struct tm * restrict tp)
+{
+  return copy_tm_result (tp, gmtime (t));
+}
+
+struct tm *
+localtime_r (time_t const * restrict t, struct tm * restrict tp)
+{
+  return copy_tm_result (tp, localtime (t));
+}
diff --git a/gnu/timespec.h b/gnu/timespec.h
new file mode 100644 (file)
index 0000000..ce94b71
--- /dev/null
@@ -0,0 +1,41 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* timespec -- System time interface
+
+   Copyright (C) 2000, 2002, 2004-2005, 2007, 2009-2010 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 ! defined TIMESPEC_H
+# define TIMESPEC_H
+
+# include <time.h>
+
+/* Return negative, zero, positive if A < B, A == B, A > B, respectively.
+   Assume the nanosecond components are in range, or close to it.  */
+static inline int
+timespec_cmp (struct timespec a, struct timespec b)
+{
+  return (a.tv_sec < b.tv_sec ? -1
+          : a.tv_sec > b.tv_sec ? 1
+          : a.tv_nsec < b.tv_nsec ? -1
+          : a.tv_nsec > b.tv_nsec ? 1
+          : 0);
+}
+
+void gettime (struct timespec *);
+int settime (struct timespec const *);
+
+#endif
diff --git a/gnu/uinttostr.c b/gnu/uinttostr.c
new file mode 100644 (file)
index 0000000..7ccafeb
--- /dev/null
@@ -0,0 +1,6 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+#define inttostr uinttostr
+#define inttype unsigned int
+#define inttype_is_signed 0
+#include "inttostr.c"
diff --git a/gnu/umaxtostr.c b/gnu/umaxtostr.c
new file mode 100644 (file)
index 0000000..94a9cc5
--- /dev/null
@@ -0,0 +1,6 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+#define inttostr umaxtostr
+#define inttype uintmax_t
+#define inttype_is_signed 0
+#include "inttostr.c"
diff --git a/gnu/unistd--.h b/gnu/unistd--.h
new file mode 100644 (file)
index 0000000..27a12b7
--- /dev/null
@@ -0,0 +1,34 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Like unistd.h, but redefine some names to avoid glitches.
+
+   Copyright (C) 2005, 2009-2010 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.  */
+
+#include <unistd.h>
+#include "unistd-safer.h"
+
+#undef dup
+#define dup dup_safer
+
+#undef pipe
+#define pipe pipe_safer
+
+#if GNULIB_PIPE2_SAFER
+# undef pipe2
+# define pipe2 pipe2_safer
+#endif
diff --git a/gnu/unistd-safer.h b/gnu/unistd-safer.h
new file mode 100644 (file)
index 0000000..93475f6
--- /dev/null
@@ -0,0 +1,33 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Invoke unistd-like functions, but avoid some glitches.
+
+   Copyright (C) 2001, 2003, 2005, 2009-2010 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 and Eric Blake.  */
+
+int dup_safer (int);
+int fd_safer (int);
+int pipe_safer (int[2]);
+
+#if GNULIB_FD_SAFER_FLAG
+int dup_safer_flag (int, int);
+int fd_safer_flag (int, int);
+#endif
+
+#if GNULIB_PIPE2_SAFER
+int pipe2_safer (int[2], int);
+#endif
diff --git a/gnu/unistd.in.h b/gnu/unistd.in.h
new file mode 100644 (file)
index 0000000..316c51e
--- /dev/null
@@ -0,0 +1,1199 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Substitute for and wrapper around <unistd.h>.
+   Copyright (C) 2003-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _GL_UNISTD_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+/* The include_next requires a split double-inclusion guard.  */
+#if @HAVE_UNISTD_H@
+# @INCLUDE_NEXT@ @NEXT_UNISTD_H@
+#endif
+
+#ifndef _GL_UNISTD_H
+#define _GL_UNISTD_H
+
+/* NetBSD 5.0 mis-defines NULL.  Also get size_t.  */
+#include <stddef.h>
+
+/* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>.  */
+/* Cygwin 1.7.1 declares symlinkat in <stdio.h>, not in <unistd.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \
+     || (@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK)) \
+    && ! defined __GLIBC__
+# include <stdio.h>
+#endif
+
+/* Cygwin 1.7.1 declares unlinkat in <fcntl.h>, not in <unistd.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__
+# include <fcntl.h>
+#endif
+
+/* mingw fails to declare _exit in <unistd.h>.  */
+/* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>.  */
+/* Solaris declares getcwd not only in <unistd.h> but also in <stdlib.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#ifndef __GLIBC__
+# include <stdlib.h>
+#endif
+
+/* mingw declares getcwd in <io.h>, not in <unistd.h>.  */
+#if ((@GNULIB_GETCWD@ || defined GNULIB_POSIXCHECK) \
+     && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
+# include <io.h>
+#endif
+
+#if (@GNULIB_WRITE@ || @GNULIB_READLINK@ || @GNULIB_READLINKAT@ \
+     || @GNULIB_PREAD@ || defined GNULIB_POSIXCHECK)
+/* Get ssize_t.  */
+# include <sys/types.h>
+#endif
+
+/* Get getopt(), optarg, optind, opterr, optopt.
+   But avoid namespace pollution on glibc systems.  */
+#if @GNULIB_UNISTD_H_GETOPT@ && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT
+# include <getopt.h>
+#endif
+
+#if @GNULIB_GETHOSTNAME@
+/* Get all possible declarations of gethostname().  */
+# if @UNISTD_H_HAVE_WINSOCK2_H@
+#  include <winsock2.h>
+#  if !defined _GL_SYS_SOCKET_H
+#   undef socket
+#   define socket               socket_used_without_including_sys_socket_h
+#   undef connect
+#   define connect              connect_used_without_including_sys_socket_h
+#   undef accept
+#   define accept               accept_used_without_including_sys_socket_h
+#   undef bind
+#   define bind                 bind_used_without_including_sys_socket_h
+#   undef getpeername
+#   define getpeername          getpeername_used_without_including_sys_socket_h
+#   undef getsockname
+#   define getsockname          getsockname_used_without_including_sys_socket_h
+#   undef getsockopt
+#   define getsockopt           getsockopt_used_without_including_sys_socket_h
+#   undef listen
+#   define listen               listen_used_without_including_sys_socket_h
+#   undef recv
+#   define recv                 recv_used_without_including_sys_socket_h
+#   undef send
+#   define send                 send_used_without_including_sys_socket_h
+#   undef recvfrom
+#   define recvfrom             recvfrom_used_without_including_sys_socket_h
+#   undef sendto
+#   define sendto               sendto_used_without_including_sys_socket_h
+#   undef setsockopt
+#   define setsockopt           setsockopt_used_without_including_sys_socket_h
+#   undef shutdown
+#   define shutdown             shutdown_used_without_including_sys_socket_h
+#  endif
+#  if !defined _GL_SYS_SELECT_H
+#   undef select
+#   define select               select_used_without_including_sys_select_h
+#  endif
+# endif
+#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.  */
+
+
+/* OS/2 EMX lacks these macros.  */
+#ifndef STDIN_FILENO
+# define STDIN_FILENO 0
+#endif
+#ifndef STDOUT_FILENO
+# define STDOUT_FILENO 1
+#endif
+#ifndef STDERR_FILENO
+# define STDERR_FILENO 2
+#endif
+
+/* Ensure *_OK macros exist.  */
+#ifndef F_OK
+# define F_OK 0
+# define X_OK 1
+# define W_OK 2
+# define R_OK 4
+#endif
+
+
+/* Declare overridden functions.  */
+
+
+#if defined GNULIB_POSIXCHECK
+/* The access() function is a security risk.  */
+_GL_WARN_ON_USE (access, "the access function is a security risk - "
+                 "use the gnulib module faccessat instead");
+#endif
+
+
+#if @GNULIB_CHOWN@
+/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
+   to GID (if GID is not -1).  Follow symbolic links.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/chown.html>.  */
+# if @REPLACE_CHOWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef chown
+#   define chown rpl_chown
+#  endif
+_GL_FUNCDECL_RPL (chown, int, (const char *file, uid_t uid, gid_t gid)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (chown, int, (const char *file, uid_t uid, gid_t gid));
+# else
+#  if !@HAVE_CHOWN@
+_GL_FUNCDECL_SYS (chown, int, (const char *file, uid_t uid, gid_t gid)
+                              _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (chown, int, (const char *file, uid_t uid, gid_t gid));
+# endif
+_GL_CXXALIASWARN (chown);
+#elif defined GNULIB_POSIXCHECK
+# undef chown
+# if HAVE_RAW_DECL_CHOWN
+_GL_WARN_ON_USE (chown, "chown fails to follow symlinks on some systems and "
+                 "doesn't treat a uid or gid of -1 on some systems - "
+                 "use gnulib module chown for portability");
+# endif
+#endif
+
+
+#if @GNULIB_CLOSE@
+# if @REPLACE_CLOSE@
+/* Automatically included by modules that need a replacement for close.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef close
+#   define close rpl_close
+#  endif
+_GL_FUNCDECL_RPL (close, int, (int fd));
+_GL_CXXALIAS_RPL (close, int, (int fd));
+# else
+_GL_CXXALIAS_SYS (close, int, (int fd));
+# endif
+_GL_CXXALIASWARN (close);
+#elif @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+# undef close
+# define close close_used_without_requesting_gnulib_module_close
+#elif defined GNULIB_POSIXCHECK
+# undef close
+/* Assume close is always declared.  */
+_GL_WARN_ON_USE (close, "close does not portably work on sockets - "
+                 "use gnulib module close for portability");
+#endif
+
+
+#if @REPLACE_DUP@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  define dup rpl_dup
+# endif
+_GL_FUNCDECL_RPL (dup, int, (int oldfd));
+_GL_CXXALIAS_RPL (dup, int, (int oldfd));
+#else
+_GL_CXXALIAS_SYS (dup, int, (int oldfd));
+#endif
+_GL_CXXALIASWARN (dup);
+
+
+#if @GNULIB_DUP2@
+/* Copy the file descriptor OLDFD into file descriptor NEWFD.  Do nothing if
+   NEWFD = OLDFD, otherwise close NEWFD first if it is open.
+   Return newfd if successful, otherwise -1 and errno set.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/dup2.html>.  */
+# if @REPLACE_DUP2@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define dup2 rpl_dup2
+#  endif
+_GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd));
+_GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd));
+# else
+#  if !@HAVE_DUP2@
+_GL_FUNCDECL_SYS (dup2, int, (int oldfd, int newfd));
+#  endif
+_GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd));
+# endif
+_GL_CXXALIASWARN (dup2);
+#elif defined GNULIB_POSIXCHECK
+# undef dup2
+# if HAVE_RAW_DECL_DUP2
+_GL_WARN_ON_USE (dup2, "dup2 is unportable - "
+                 "use gnulib module dup2 for portability");
+# endif
+#endif
+
+
+#if @GNULIB_DUP3@
+/* Copy the file descriptor OLDFD into file descriptor NEWFD, with the
+   specified flags.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   Close NEWFD first if it is open.
+   Return newfd if successful, otherwise -1 and errno set.
+   See the Linux man page at
+   <http://www.kernel.org/doc/man-pages/online/pages/man2/dup3.2.html>.  */
+# if @HAVE_DUP3@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define dup3 rpl_dup3
+#  endif
+_GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags));
+_GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags));
+# else
+_GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags));
+_GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags));
+# endif
+_GL_CXXALIASWARN (dup3);
+#elif defined GNULIB_POSIXCHECK
+# undef dup3
+# if HAVE_RAW_DECL_DUP3
+_GL_WARN_ON_USE (dup3, "dup3 is unportable - "
+                 "use gnulib module dup3 for portability");
+# endif
+#endif
+
+
+#if @GNULIB_ENVIRON@
+# if !@HAVE_DECL_ENVIRON@
+/* Set of environment variables and values.  An array of strings of the form
+   "VARIABLE=VALUE", terminated with a NULL.  */
+#  if defined __APPLE__ && defined __MACH__
+#   include <crt_externs.h>
+#   define environ (*_NSGetEnviron ())
+#  else
+#   ifdef __cplusplus
+extern "C" {
+#   endif
+extern char **environ;
+#   ifdef __cplusplus
+}
+#   endif
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if HAVE_RAW_DECL_ENVIRON
+static inline char ***
+rpl_environ (void)
+{
+  return &environ;
+}
+_GL_WARN_ON_USE (rpl_environ, "environ is unportable - "
+                 "use gnulib module environ for portability");
+#  undef environ
+#  define environ (*rpl_environ ())
+# endif
+#endif
+
+
+#if @GNULIB_EUIDACCESS@
+/* Like access(), except that it uses the effective user id and group id of
+   the current process.  */
+# if !@HAVE_EUIDACCESS@
+_GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode)
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode));
+_GL_CXXALIASWARN (euidaccess);
+# if defined GNULIB_POSIXCHECK
+/* Like access(), this function is a security risk.  */
+_GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - "
+                 "use the gnulib module faccessat instead");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef euidaccess
+# if HAVE_RAW_DECL_EUIDACCESS
+_GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - "
+                 "use gnulib module euidaccess for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FACCESSAT@
+# if !@HAVE_FACCESSAT@
+_GL_FUNCDECL_SYS (faccessat, int,
+                  (int fd, char const *file, int mode, int flag)
+                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (faccessat, int,
+                  (int fd, char const *file, int mode, int flag));
+_GL_CXXALIASWARN (faccessat);
+#elif defined GNULIB_POSIXCHECK
+# undef faccessat
+# if HAVE_RAW_DECL_FACCESSAT
+_GL_WARN_ON_USE (faccessat, "faccessat is not portable - "
+                 "use gnulib module faccessat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FCHDIR@
+/* Change the process' current working directory to the directory on which
+   the given file descriptor is open.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/fchdir.html>.  */
+# if @REPLACE_FCHDIR@
+_GL_FUNCDECL_RPL (fchdir, int, (int /*fd*/));
+_GL_CXXALIAS_RPL (fchdir, int, (int /*fd*/));
+
+/* Gnulib internal hooks needed to maintain the fchdir metadata.  */
+_GL_EXTERN_C int _gl_register_fd (int fd, const char *filename)
+     _GL_ARG_NONNULL ((2));
+_GL_EXTERN_C void _gl_unregister_fd (int fd);
+_GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd);
+_GL_EXTERN_C const char *_gl_directory_name (int fd);
+
+# else
+_GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/));
+# endif
+_GL_CXXALIASWARN (fchdir);
+#elif defined GNULIB_POSIXCHECK
+# undef fchdir
+# if HAVE_RAW_DECL_FCHDIR
+_GL_WARN_ON_USE (fchdir, "fchdir is unportable - "
+                 "use gnulib module fchdir for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FCHOWNAT@
+# if @REPLACE_FCHOWNAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fchownat
+#   define fchownat rpl_fchownat
+#  endif
+_GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag));
+# else
+#  if !@HAVE_FCHOWNAT@
+_GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag));
+# endif
+_GL_CXXALIASWARN (fchownat);
+#elif defined GNULIB_POSIXCHECK
+# undef fchownat
+# if HAVE_RAW_DECL_FCHOWNAT
+_GL_WARN_ON_USE (fchownat, "fchownat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FSYNC@
+/* Synchronize changes to a file.
+   Return 0 if successful, otherwise -1 and errno set.
+   See POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/fsync.html>.  */
+# if !@HAVE_FSYNC@
+_GL_FUNCDECL_SYS (fsync, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (fsync, int, (int fd));
+_GL_CXXALIASWARN (fsync);
+#elif defined GNULIB_POSIXCHECK
+# undef fsync
+# if HAVE_RAW_DECL_FSYNC
+_GL_WARN_ON_USE (fsync, "fsync is unportable - "
+                 "use gnulib module fsync for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FTRUNCATE@
+/* Change the size of the file to which FD is opened to become equal to LENGTH.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/ftruncate.html>.  */
+# if !@HAVE_FTRUNCATE@
+_GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length));
+# endif
+_GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length));
+_GL_CXXALIASWARN (ftruncate);
+#elif defined GNULIB_POSIXCHECK
+# undef ftruncate
+# if HAVE_RAW_DECL_FTRUNCATE
+_GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - "
+                 "use gnulib module ftruncate for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETCWD@
+/* Get the name of the current working directory, and put it in SIZE bytes
+   of BUF.
+   Return BUF if successful, or NULL if the directory couldn't be determined
+   or SIZE was too small.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/getcwd.html>.
+   Additionally, the gnulib module 'getcwd' guarantees the following GNU
+   extension: If BUF is NULL, an array is allocated with 'malloc'; the array
+   is SIZE bytes long, unless SIZE == 0, in which case it is as big as
+   necessary.  */
+# if @REPLACE_GETCWD@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define getcwd rpl_getcwd
+#  endif
+_GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size));
+_GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size));
+# else
+_GL_CXXALIAS_SYS (getcwd, char *, (char *buf, size_t size));
+# endif
+_GL_CXXALIASWARN (getcwd);
+#elif defined GNULIB_POSIXCHECK
+# undef getcwd
+# if HAVE_RAW_DECL_GETCWD
+_GL_WARN_ON_USE (getcwd, "getcwd is unportable - "
+                 "use gnulib module getcwd for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETDOMAINNAME@
+/* Return the NIS domain name of the machine.
+   WARNING! The NIS domain name is unrelated to the fully qualified host name
+            of the machine.  It is also unrelated to email addresses.
+   WARNING! The NIS domain name is usually the empty string or "(none)" when
+            not using NIS.
+
+   Put up to LEN bytes of the NIS domain name into NAME.
+   Null terminate it if the name is shorter than LEN.
+   If the NIS domain name is longer than LEN, set errno = EINVAL and return -1.
+   Return 0 if successful, otherwise set errno and return -1.  */
+# if !@HAVE_GETDOMAINNAME@
+_GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len)
+                                      _GL_ARG_NONNULL ((1)));
+# endif
+/* Need to cast, because on MacOS X 10.5 systems, the second parameter is
+                                                        int len.  */
+_GL_CXXALIAS_SYS_CAST (getdomainname, int, (char *name, size_t len));
+_GL_CXXALIASWARN (getdomainname);
+#elif defined GNULIB_POSIXCHECK
+# undef getdomainname
+# if HAVE_RAW_DECL_GETDOMAINNAME
+_GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - "
+                 "use gnulib module getdomainname for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETDTABLESIZE@
+/* Return the maximum number of file descriptors in the current process.
+   In POSIX, this is same as sysconf (_SC_OPEN_MAX).  */
+# if !@HAVE_GETDTABLESIZE@
+_GL_FUNCDECL_SYS (getdtablesize, int, (void));
+# endif
+_GL_CXXALIAS_SYS (getdtablesize, int, (void));
+_GL_CXXALIASWARN (getdtablesize);
+#elif defined GNULIB_POSIXCHECK
+# undef getdtablesize
+# if HAVE_RAW_DECL_GETDTABLESIZE
+_GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - "
+                 "use gnulib module getdtablesize for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETGROUPS@
+/* Return the supplemental groups that the current process belongs to.
+   It is unspecified whether the effective group id is in the list.
+   If N is 0, return the group count; otherwise, N describes how many
+   entries are available in GROUPS.  Return -1 and set errno if N is
+   not 0 and not large enough.  Fails with ENOSYS on some systems.  */
+# if @REPLACE_GETGROUPS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getgroups
+#   define getgroups rpl_getgroups
+#  endif
+_GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups));
+_GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups));
+# else
+#  if !@HAVE_GETGROUPS@
+_GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups));
+#  endif
+_GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups));
+# endif
+_GL_CXXALIASWARN (getgroups);
+#elif defined GNULIB_POSIXCHECK
+# undef getgroups
+# if HAVE_RAW_DECL_GETGROUPS
+_GL_WARN_ON_USE (getgroups, "getgroups is unportable - "
+                 "use gnulib module getgroups for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETHOSTNAME@
+/* Return the standard host name of the machine.
+   WARNING! The host name may or may not be fully qualified.
+
+   Put up to LEN bytes of the host name into NAME.
+   Null terminate it if the name is shorter than LEN.
+   If the host name is longer than LEN, set errno = EINVAL and return -1.
+   Return 0 if successful, otherwise set errno and return -1.  */
+# if @UNISTD_H_HAVE_WINSOCK2_H@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef gethostname
+#   define gethostname rpl_gethostname
+#  endif
+_GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len)
+                                    _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len));
+# else
+#  if !@HAVE_GETHOSTNAME@
+_GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len)
+                                    _GL_ARG_NONNULL ((1)));
+#  endif
+/* Need to cast, because on Solaris 10 systems, the second parameter is
+                                                      int len.  */
+_GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len));
+# endif
+_GL_CXXALIASWARN (gethostname);
+#elif @UNISTD_H_HAVE_WINSOCK2_H@
+# undef gethostname
+# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname
+#elif defined GNULIB_POSIXCHECK
+# undef gethostname
+# if HAVE_RAW_DECL_GETHOSTNAME
+_GL_WARN_ON_USE (gethostname, "gethostname is unportable - "
+                 "use gnulib module gethostname for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETLOGIN@
+/* Returns the user's login name, or NULL if it cannot be found.  Upon error,
+   returns NULL with errno set.
+
+   See <http://www.opengroup.org/susv3xsh/getlogin.html>.
+
+   Most programs don't need to use this function, because the information is
+   available through environment variables:
+     ${LOGNAME-$USER}        on Unix platforms,
+     $USERNAME               on native Windows platforms.
+ */
+# if !@HAVE_GETLOGIN@
+_GL_FUNCDECL_SYS (getlogin, char *, (void));
+# endif
+_GL_CXXALIAS_SYS (getlogin, char *, (void));
+_GL_CXXALIASWARN (getlogin);
+#elif defined GNULIB_POSIXCHECK
+# undef getlogin
+# if HAVE_RAW_DECL_GETLOGIN
+_GL_WARN_ON_USE (getlogin, "getlogin is unportable - "
+                 "use gnulib module getlogin for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETLOGIN_R@
+/* Copies the user's login name to NAME.
+   The array pointed to by NAME has room for SIZE bytes.
+
+   Returns 0 if successful.  Upon error, an error number is returned, or -1 in
+   the case that the login name cannot be found but no specific error is
+   provided (this case is hopefully rare but is left open by the POSIX spec).
+
+   See <http://www.opengroup.org/susv3xsh/getlogin.html>.
+
+   Most programs don't need to use this function, because the information is
+   available through environment variables:
+     ${LOGNAME-$USER}        on Unix platforms,
+     $USERNAME               on native Windows platforms.
+ */
+# if !@HAVE_DECL_GETLOGIN_R@
+_GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size)
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+/* Need to cast, because on Solaris 10 systems, the second argument is
+                                                     int size.  */
+_GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size));
+_GL_CXXALIASWARN (getlogin_r);
+#elif defined GNULIB_POSIXCHECK
+# undef getlogin_r
+# if HAVE_RAW_DECL_GETLOGIN_R
+_GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - "
+                 "use gnulib module getlogin_r for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETPAGESIZE@
+# if @REPLACE_GETPAGESIZE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define getpagesize rpl_getpagesize
+#  endif
+_GL_FUNCDECL_RPL (getpagesize, int, (void));
+_GL_CXXALIAS_RPL (getpagesize, int, (void));
+# else
+#  if !@HAVE_GETPAGESIZE@
+#   if !defined getpagesize
+/* This is for POSIX systems.  */
+#    if !defined _gl_getpagesize && defined _SC_PAGESIZE
+#     if ! (defined __VMS && __VMS_VER < 70000000)
+#      define _gl_getpagesize() sysconf (_SC_PAGESIZE)
+#     endif
+#    endif
+/* This is for older VMS.  */
+#    if !defined _gl_getpagesize && defined __VMS
+#     ifdef __ALPHA
+#      define _gl_getpagesize() 8192
+#     else
+#      define _gl_getpagesize() 512
+#     endif
+#    endif
+/* This is for BeOS.  */
+#    if !defined _gl_getpagesize && @HAVE_OS_H@
+#     include <OS.h>
+#     if defined B_PAGE_SIZE
+#      define _gl_getpagesize() B_PAGE_SIZE
+#     endif
+#    endif
+/* This is for AmigaOS4.0.  */
+#    if !defined _gl_getpagesize && defined __amigaos4__
+#     define _gl_getpagesize() 2048
+#    endif
+/* This is for older Unix systems.  */
+#    if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@
+#     include <sys/param.h>
+#     ifdef EXEC_PAGESIZE
+#      define _gl_getpagesize() EXEC_PAGESIZE
+#     else
+#      ifdef NBPG
+#       ifndef CLSIZE
+#        define CLSIZE 1
+#       endif
+#       define _gl_getpagesize() (NBPG * CLSIZE)
+#      else
+#       ifdef NBPC
+#        define _gl_getpagesize() NBPC
+#       endif
+#      endif
+#     endif
+#    endif
+#    if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#     define getpagesize() _gl_getpagesize ()
+#    else
+static inline int
+getpagesize ()
+{
+  return _gl_getpagesize ();
+}
+#    endif
+#   endif
+#  endif
+/* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t.  */
+_GL_CXXALIAS_SYS_CAST (getpagesize, int, (void));
+# endif
+_GL_CXXALIASWARN (getpagesize);
+#elif defined GNULIB_POSIXCHECK
+# undef getpagesize
+# if HAVE_RAW_DECL_GETPAGESIZE
+_GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - "
+                 "use gnulib module getpagesize for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETUSERSHELL@
+/* Return the next valid login shell on the system, or NULL when the end of
+   the list has been reached.  */
+# if !@HAVE_GETUSERSHELL@
+_GL_FUNCDECL_SYS (getusershell, char *, (void));
+# endif
+_GL_CXXALIAS_SYS (getusershell, char *, (void));
+_GL_CXXALIASWARN (getusershell);
+#elif defined GNULIB_POSIXCHECK
+# undef getusershell
+# if HAVE_RAW_DECL_GETUSERSHELL
+_GL_WARN_ON_USE (getusershell, "getusershell is unportable - "
+                 "use gnulib module getusershell for portability");
+# endif
+#endif
+
+#if @GNULIB_GETUSERSHELL@
+/* Rewind to pointer that is advanced at each getusershell() call.  */
+# if !@HAVE_GETUSERSHELL@
+_GL_FUNCDECL_SYS (setusershell, void, (void));
+# endif
+_GL_CXXALIAS_SYS (setusershell, void, (void));
+_GL_CXXALIASWARN (setusershell);
+#elif defined GNULIB_POSIXCHECK
+# undef setusershell
+# if HAVE_RAW_DECL_SETUSERSHELL
+_GL_WARN_ON_USE (setusershell, "setusershell is unportable - "
+                 "use gnulib module getusershell for portability");
+# endif
+#endif
+
+#if @GNULIB_GETUSERSHELL@
+/* Free the pointer that is advanced at each getusershell() call and
+   associated resources.  */
+# if !@HAVE_GETUSERSHELL@
+_GL_FUNCDECL_SYS (endusershell, void, (void));
+# endif
+_GL_CXXALIAS_SYS (endusershell, void, (void));
+_GL_CXXALIASWARN (endusershell);
+#elif defined GNULIB_POSIXCHECK
+# undef endusershell
+# if HAVE_RAW_DECL_ENDUSERSHELL
+_GL_WARN_ON_USE (endusershell, "endusershell is unportable - "
+                 "use gnulib module getusershell for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LCHOWN@
+/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
+   to GID (if GID is not -1).  Do not follow symbolic links.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/lchown.html>.  */
+# if @REPLACE_LCHOWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef lchown
+#   define lchown rpl_lchown
+#  endif
+_GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)
+                               _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group));
+# else
+#  if !@HAVE_LCHOWN@
+_GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)
+                               _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group));
+# endif
+_GL_CXXALIASWARN (lchown);
+#elif defined GNULIB_POSIXCHECK
+# undef lchown
+# if HAVE_RAW_DECL_LCHOWN
+_GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - "
+                 "use gnulib module lchown for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LINK@
+/* Create a new hard link for an existing file.
+   Return 0 if successful, otherwise -1 and errno set.
+   See POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/link.html>.  */
+# if @REPLACE_LINK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define link rpl_link
+#  endif
+_GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2)
+                             _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2));
+# else
+#  if !@HAVE_LINK@
+_GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2)
+                             _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2));
+# endif
+_GL_CXXALIASWARN (link);
+#elif defined GNULIB_POSIXCHECK
+# undef link
+# if HAVE_RAW_DECL_LINK
+_GL_WARN_ON_USE (link, "link is unportable - "
+                 "use gnulib module link for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LINKAT@
+/* Create a new hard link for an existing file, relative to two
+   directories.  FLAG controls whether symlinks are followed.
+   Return 0 if successful, otherwise -1 and errno set.  */
+# if @REPLACE_LINKAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef linkat
+#   define linkat rpl_linkat
+#  endif
+_GL_FUNCDECL_RPL (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag)
+                  _GL_ARG_NONNULL ((2, 4)));
+_GL_CXXALIAS_RPL (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag));
+# else
+#  if !@HAVE_LINKAT@
+_GL_FUNCDECL_SYS (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag)
+                  _GL_ARG_NONNULL ((2, 4)));
+#  endif
+_GL_CXXALIAS_SYS (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag));
+# endif
+_GL_CXXALIASWARN (linkat);
+#elif defined GNULIB_POSIXCHECK
+# undef linkat
+# if HAVE_RAW_DECL_LINKAT
+_GL_WARN_ON_USE (linkat, "linkat is unportable - "
+                 "use gnulib module linkat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LSEEK@
+/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END.
+   Return the new offset if successful, otherwise -1 and errno set.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/lseek.html>.  */
+# if @REPLACE_LSEEK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define lseek rpl_lseek
+#  endif
+_GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence));
+_GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence));
+# else
+_GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence));
+# endif
+_GL_CXXALIASWARN (lseek);
+#elif defined GNULIB_POSIXCHECK
+# undef lseek
+# if HAVE_RAW_DECL_LSEEK
+_GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some "
+                 "systems - use gnulib module lseek for portability");
+# endif
+#endif
+
+
+#if @GNULIB_PIPE2@
+/* Create a pipe, applying the given flags when opening the read-end of the
+   pipe and the write-end of the pipe.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   Store the read-end as fd[0] and the write-end as fd[1].
+   Return 0 upon success, or -1 with errno set upon failure.
+   See also the Linux man page at
+   <http://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html>.  */
+# if @HAVE_PIPE2@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define pipe2 rpl_pipe2
+#  endif
+_GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags));
+# else
+_GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags));
+# endif
+_GL_CXXALIASWARN (pipe2);
+#elif defined GNULIB_POSIXCHECK
+# undef pipe2
+# if HAVE_RAW_DECL_PIPE2
+_GL_WARN_ON_USE (pipe2, "pipe2 is unportable - "
+                 "use gnulib module pipe2 for portability");
+# endif
+#endif
+
+
+#if @GNULIB_PREAD@
+/* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET.
+   Return the number of bytes placed into BUF if successful, otherwise
+   set errno and return -1.  0 indicates EOF.  See the POSIX:2001
+   specification <http://www.opengroup.org/susv3xsh/pread.html>.  */
+# if @REPLACE_PREAD@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define pread rpl_pread
+#  endif
+_GL_FUNCDECL_RPL (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset));
+# else
+#  if !@HAVE_PREAD@
+_GL_FUNCDECL_SYS (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset));
+# endif
+_GL_CXXALIASWARN (pread);
+#elif defined GNULIB_POSIXCHECK
+# undef pread
+# if HAVE_RAW_DECL_PREAD
+_GL_WARN_ON_USE (pread, "pread is unportable - "
+                 "use gnulib module pread for portability");
+# endif
+#endif
+
+
+#if @GNULIB_READLINK@
+/* Read the contents of the symbolic link FILE and place the first BUFSIZE
+   bytes of it into BUF.  Return the number of bytes placed into BUF if
+   successful, otherwise -1 and errno set.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/readlink.html>.  */
+# if @REPLACE_READLINK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define readlink rpl_readlink
+#  endif
+_GL_FUNCDECL_RPL (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize));
+# else
+#  if !@HAVE_READLINK@
+_GL_FUNCDECL_SYS (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize));
+# endif
+_GL_CXXALIASWARN (readlink);
+#elif defined GNULIB_POSIXCHECK
+# undef readlink
+# if HAVE_RAW_DECL_READLINK
+_GL_WARN_ON_USE (readlink, "readlink is unportable - "
+                 "use gnulib module readlink for portability");
+# endif
+#endif
+
+
+#if @GNULIB_READLINKAT@
+# if !@HAVE_READLINKAT@
+_GL_FUNCDECL_SYS (readlinkat, ssize_t,
+                  (int fd, char const *file, char *buf, size_t len)
+                  _GL_ARG_NONNULL ((2, 3)));
+# endif
+_GL_CXXALIAS_SYS (readlinkat, ssize_t,
+                  (int fd, char const *file, char *buf, size_t len));
+_GL_CXXALIASWARN (readlinkat);
+#elif defined GNULIB_POSIXCHECK
+# undef readlinkat
+# if HAVE_RAW_DECL_READLINKAT
+_GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - "
+                 "use gnulib module symlinkat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_RMDIR@
+/* Remove the directory DIR.  */
+# if @REPLACE_RMDIR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define rmdir rpl_rmdir
+#  endif
+_GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (rmdir, int, (char const *name));
+# else
+_GL_CXXALIAS_SYS (rmdir, int, (char const *name));
+# endif
+_GL_CXXALIASWARN (rmdir);
+#elif defined GNULIB_POSIXCHECK
+# undef rmdir
+# if HAVE_RAW_DECL_RMDIR
+_GL_WARN_ON_USE (rmdir, "rmdir is unportable - "
+                 "use gnulib module rmdir for portability");
+# endif
+#endif
+
+
+#if @GNULIB_SLEEP@
+/* Pause the execution of the current thread for N seconds.
+   Returns the number of seconds left to sleep.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/sleep.html>.  */
+# if @REPLACE_SLEEP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef sleep
+#   define sleep rpl_sleep
+#  endif
+_GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n));
+_GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n));
+# else
+#  if !@HAVE_SLEEP@
+_GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n));
+#  endif
+_GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n));
+# endif
+_GL_CXXALIASWARN (sleep);
+#elif defined GNULIB_POSIXCHECK
+# undef sleep
+# if HAVE_RAW_DECL_SLEEP
+_GL_WARN_ON_USE (sleep, "sleep is unportable - "
+                 "use gnulib module sleep for portability");
+# endif
+#endif
+
+
+#if @GNULIB_SYMLINK@
+# if @REPLACE_SYMLINK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef symlink
+#   define symlink rpl_symlink
+#  endif
+_GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file)
+                                _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file));
+# else
+#  if !@HAVE_SYMLINK@
+_GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file)
+                                _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file));
+# endif
+_GL_CXXALIASWARN (symlink);
+#elif defined GNULIB_POSIXCHECK
+# undef symlink
+# if HAVE_RAW_DECL_SYMLINK
+_GL_WARN_ON_USE (symlink, "symlink is not portable - "
+                 "use gnulib module symlink for portability");
+# endif
+#endif
+
+
+#if @GNULIB_SYMLINKAT@
+# if !@HAVE_SYMLINKAT@
+_GL_FUNCDECL_SYS (symlinkat, int,
+                  (char const *contents, int fd, char const *file)
+                  _GL_ARG_NONNULL ((1, 3)));
+# endif
+_GL_CXXALIAS_SYS (symlinkat, int,
+                  (char const *contents, int fd, char const *file));
+_GL_CXXALIASWARN (symlinkat);
+#elif defined GNULIB_POSIXCHECK
+# undef symlinkat
+# if HAVE_RAW_DECL_SYMLINKAT
+_GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - "
+                 "use gnulib module symlinkat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_UNLINK@
+# if @REPLACE_UNLINK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef unlink
+#   define unlink rpl_unlink
+#  endif
+_GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (unlink, int, (char const *file));
+# else
+_GL_CXXALIAS_SYS (unlink, int, (char const *file));
+# endif
+_GL_CXXALIASWARN (unlink);
+#elif defined GNULIB_POSIXCHECK
+# undef unlink
+# if HAVE_RAW_DECL_UNLINK
+_GL_WARN_ON_USE (unlink, "unlink is not portable - "
+                 "use gnulib module unlink for portability");
+# endif
+#endif
+
+
+#if @GNULIB_UNLINKAT@
+# if @REPLACE_UNLINKAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef unlinkat
+#   define unlinkat rpl_unlinkat
+#  endif
+_GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag));
+# else
+#  if !@HAVE_UNLINKAT@
+_GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag));
+# endif
+_GL_CXXALIASWARN (unlinkat);
+#elif defined GNULIB_POSIXCHECK
+# undef unlinkat
+# if HAVE_RAW_DECL_UNLINKAT
+_GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_USLEEP@
+/* Pause the execution of the current thread for N microseconds.
+   Returns 0 on completion, or -1 on range error.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/sleep.html>.  */
+# if @REPLACE_USLEEP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef usleep
+#   define usleep rpl_usleep
+#  endif
+_GL_FUNCDECL_RPL (usleep, int, (useconds_t n));
+_GL_CXXALIAS_RPL (usleep, int, (useconds_t n));
+# else
+#  if !@HAVE_USLEEP@
+_GL_FUNCDECL_SYS (usleep, int, (useconds_t n));
+#  endif
+_GL_CXXALIAS_SYS (usleep, int, (useconds_t n));
+# endif
+_GL_CXXALIASWARN (usleep);
+#elif defined GNULIB_POSIXCHECK
+# undef usleep
+# if HAVE_RAW_DECL_USLEEP
+_GL_WARN_ON_USE (usleep, "usleep is unportable - "
+                 "use gnulib module usleep for portability");
+# endif
+#endif
+
+
+#if @GNULIB_WRITE@
+/* Write up to COUNT bytes starting at BUF to file descriptor FD.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/write.html>.  */
+# if @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef write
+#   define write rpl_write
+#  endif
+_GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count)
+                                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count));
+# else
+_GL_CXXALIAS_SYS (write, ssize_t, (int fd, const void *buf, size_t count));
+# endif
+_GL_CXXALIASWARN (write);
+#endif
+
+
+#endif /* _GL_UNISTD_H */
+#endif /* _GL_UNISTD_H */
diff --git a/gnu/unitypes.h b/gnu/unitypes.h
new file mode 100644 (file)
index 0000000..61571c3
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Elementary types for the GNU UniString library.
+   Copyright (C) 2002, 2005-2006, 2009-2010 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
+   Lesser 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 _UNITYPES_H
+#define _UNITYPES_H
+
+/* Get uint8_t, uint16_t, uint32_t.  */
+#include <stdint.h>
+
+/* Type representing a Unicode character.  */
+typedef uint32_t ucs4_t;
+
+#endif /* _UNITYPES_H */
diff --git a/gnu/uniwidth.h b/gnu/uniwidth.h
new file mode 100644 (file)
index 0000000..30e1923
--- /dev/null
@@ -0,0 +1,67 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Display width functions.
+   Copyright (C) 2001-2002, 2005, 2007, 2009-2010 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
+   Lesser 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 _UNIWIDTH_H
+#define _UNIWIDTH_H
+
+#include "unitypes.h"
+
+/* Get size_t.  */
+#include <stddef.h>
+
+/* Get locale_charset() declaration.  */
+#include "localcharset.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Display width.  */
+
+/* These functions are locale dependent.  The encoding argument identifies
+   the encoding (e.g. "ISO-8859-2" for Polish).  */
+
+/* Determine number of column positions required for UC.  */
+extern int
+       uc_width (ucs4_t uc, const char *encoding);
+
+/* Determine number of column positions required for first N units
+   (or fewer if S ends before this) in S.  */
+extern int
+       u8_width (const uint8_t *s, size_t n, const char *encoding);
+extern int
+       u16_width (const uint16_t *s, size_t n, const char *encoding);
+extern int
+       u32_width (const uint32_t *s, size_t n, const char *encoding);
+
+/* Determine number of column positions required for S.  */
+extern int
+       u8_strwidth (const uint8_t *s, const char *encoding);
+extern int
+       u16_strwidth (const uint16_t *s, const char *encoding);
+extern int
+       u32_strwidth (const uint32_t *s, const char *encoding);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _UNIWIDTH_H */
diff --git a/gnu/uniwidth/cjk.h b/gnu/uniwidth/cjk.h
new file mode 100644 (file)
index 0000000..c2b69cc
--- /dev/null
@@ -0,0 +1,39 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Test for CJK encoding.
+   Copyright (C) 2001-2002, 2005-2007, 2009-2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2002.
+
+   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
+   Lesser 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 "streq.h"
+
+static int
+is_cjk_encoding (const char *encoding)
+{
+  if (0
+      /* Legacy Japanese encodings */
+      || STREQ (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)
+      /* Legacy Chinese encodings */
+      || STREQ (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0)
+      || STREQ (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0)
+      || STREQ (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)
+      || STREQ (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)
+      /* Legacy Korean encodings */
+      || STREQ (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
+      || STREQ (encoding, "CP949", 'C', 'P', '9', '4', '9', 0, 0, 0, 0)
+      || STREQ (encoding, "JOHAB", 'J', 'O', 'H', 'A', 'B', 0, 0, 0, 0))
+    return 1;
+  return 0;
+}
diff --git a/gnu/uniwidth/width.c b/gnu/uniwidth/width.c
new file mode 100644 (file)
index 0000000..2dba811
--- /dev/null
@@ -0,0 +1,361 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Determine display width of Unicode character.
+   Copyright (C) 2001-2002, 2006-2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2002.
+
+   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
+   Lesser 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 "uniwidth.h"
+
+#include "cjk.h"
+
+/*
+ * Non-spacing attribute table.
+ * Consists of:
+ * - Non-spacing characters; generated from PropList.txt or
+ *   "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt"
+ * - Format control characters; generated from
+ *   "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt"
+ * - Zero width characters; generated from
+ *   "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt"
+ */
+static const unsigned char nonspacing_table_data[26*64] = {
+  /* 0x0000-0x01ff */
+  0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */
+  0xff, 0xff, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, /* 0x0080-0x00bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00c0-0x00ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x013f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0140-0x017f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x01bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0-0x01ff */
+  /* 0x0200-0x03ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200-0x023f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240-0x027f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280-0x02bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c0-0x02ff */
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0300-0x033f */
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x0340-0x037f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0380-0x03bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x03c0-0x03ff */
+  /* 0x0400-0x05ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0400-0x043f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0440-0x047f */
+  0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0480-0x04bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04c0-0x04ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0500-0x053f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0540-0x057f */
+  0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */
+  0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */
+  /* 0x0600-0x07ff */
+  0x0f, 0x00, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */
+  0x00, 0xf8, 0xff, 0x7f, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */
+  0x00, 0x00, 0xc0, 0xff, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */
+  0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */
+  0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */
+  0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x07c0-0x07ff */
+  /* 0x0800-0x09ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0800-0x083f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08c0-0x08ff */
+  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0900-0x093f */
+  0xfe, 0x21, 0x1e, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */
+  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */
+  0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x09c0-0x09ff */
+  /* 0x0a00-0x0bff */
+  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a00-0x0a3f */
+  0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, /* 0x0a40-0x0a7f */
+  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a80-0x0abf */
+  0xbe, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0ac0-0x0aff */
+  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0x0b00-0x0b3f */
+  0x1e, 0x20, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0b40-0x0b7f */
+  0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b80-0x0bbf */
+  0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0bc0-0x0bff */
+  /* 0x0c00-0x0dff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x0c00-0x0c3f */
+  0xc1, 0x3d, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */
+  0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d00-0x0d3f */
+  0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0d40-0x0d7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d80-0x0dbf */
+  0x00, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0dc0-0x0dff */
+  /* 0x0e00-0x0fff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x07, /* 0x0e00-0x0e3f */
+  0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e40-0x0e7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1b, /* 0x0e80-0x0ebf */
+  0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0ec0-0x0eff */
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x02, /* 0x0f00-0x0f3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, /* 0x0f40-0x0f7f */
+  0xdf, 0x00, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x1f, /* 0x0f80-0x0fbf */
+  0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0fc0-0x0fff */
+  /* 0x1000-0x11ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfd, 0x66, /* 0x1000-0x103f */
+  0x00, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x1e, 0x00, /* 0x1040-0x107f */
+  0x64, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1080-0x10bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c0-0x10ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1100-0x113f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1140-0x117f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1180-0x11bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c0-0x11ff */
+  /* 0x1200-0x13ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1200-0x123f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1240-0x127f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1280-0x12bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x12c0-0x12ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1300-0x133f */
+  0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, /* 0x1340-0x137f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1380-0x13bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13c0-0x13ff */
+  /* 0x1600-0x17ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1600-0x163f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1640-0x167f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1680-0x16bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16c0-0x16ff */
+  0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, /* 0x1700-0x173f */
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1740-0x177f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, /* 0x1780-0x17bf */
+  0x40, 0xfe, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x17c0-0x17ff */
+  /* 0x1800-0x19ff */
+  0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* 0x1880-0x18bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18c0-0x18ff */
+  0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0e, /* 0x1900-0x193f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1940-0x197f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1980-0x19bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x19c0-0x19ff */
+  /* 0x1a00-0x1bff */
+  0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a40-0x1a7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a80-0x1abf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ac0-0x1aff */
+  0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x17, /* 0x1b00-0x1b3f */
+  0x04, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x1b40-0x1b7f */
+  0x03, 0x00, 0x00, 0x00, 0x3c, 0x03, 0x00, 0x00, /* 0x1b80-0x1bbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc0-0x1bff */
+  /* 0x1c00-0x1dff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xcf, 0x00, /* 0x1c00-0x1c3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c40-0x1c7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c80-0x1cbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1cc0-0x1cff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d00-0x1d3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d40-0x1d7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d80-0x1dbf */
+  0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xc0, /* 0x1dc0-0x1dff */
+  /* 0x2000-0x21ff */
+  0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */
+  0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, /* 0x2040-0x207f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */
+  0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, /* 0x20c0-0x20ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2100-0x213f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2140-0x217f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2180-0x21bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x21c0-0x21ff */
+  /* 0x2c00-0x2dff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c00-0x2c3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c40-0x2c7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c80-0x2cbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2cc0-0x2cff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d00-0x2d3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d40-0x2d7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d80-0x2dbf */
+  0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x2dc0-0x2dff */
+  /* 0x3000-0x31ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, /* 0x3000-0x303f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3040-0x307f */
+  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, /* 0x3080-0x30bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30c0-0x30ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3100-0x313f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3140-0x317f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3180-0x31bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x31c0-0x31ff */
+  /* 0xa600-0xa7ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa600-0xa63f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x30, /* 0xa640-0xa67f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa680-0xa6bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa6c0-0xa6ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa700-0xa73f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa740-0xa77f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa780-0xa7bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa7c0-0xa7ff */
+  /* 0xa800-0xa9ff */
+  0x44, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0xa800-0xa83f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa840-0xa87f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa880-0xa8bf */
+  0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8c0-0xa8ff */
+  0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, /* 0xa900-0xa93f */
+  0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa980-0xa9bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */
+  /* 0xaa00-0xabff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x66, 0x00, /* 0xaa00-0xaa3f */
+  0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa40-0xaa7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa80-0xaabf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaac0-0xaaff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab00-0xab3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab40-0xab7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab80-0xabbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xabc0-0xabff */
+  /* 0xfa00-0xfbff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa00-0xfa3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa40-0xfa7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa80-0xfabf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfac0-0xfaff */
+  0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0xfb00-0xfb3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb40-0xfb7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb80-0xfbbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfbc0-0xfbff */
+  /* 0xfe00-0xffff */
+  0xff, 0xff, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, /* 0xfe00-0xfe3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe40-0xfe7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe80-0xfebf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xfec0-0xfeff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */
+  /* 0x10000-0x101ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10000-0x1003f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10040-0x1007f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10080-0x100bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100c0-0x100ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10100-0x1013f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10140-0x1017f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10180-0x101bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* 0x101c0-0x101ff */
+  /* 0x10a00-0x10bff */
+  0x6e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x10a00-0x10a3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a40-0x10a7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a80-0x10abf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10ac0-0x10aff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b00-0x10b3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b40-0x10b7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b80-0x10bbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10bc0-0x10bff */
+  /* 0x1d000-0x1d1ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */
+  0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0xf8, /* 0x1d140-0x1d17f */
+  0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d1c0-0x1d1ff */
+  /* 0x1d200-0x1d3ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d200-0x1d23f */
+  0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d240-0x1d27f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d280-0x1d2bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d2c0-0x1d2ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d300-0x1d33f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d340-0x1d37f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d380-0x1d3bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  /* 0x1d3c0-0x1d3ff */
+};
+static const signed char nonspacing_table_ind[240] = {
+   0,  1,  2,  3,  4,  5,  6,  7, /* 0x0000-0x0fff */
+   8,  9, -1, 10, 11, 12, 13, -1, /* 0x1000-0x1fff */
+  14, -1, -1, -1, -1, -1, 15, -1, /* 0x2000-0x2fff */
+  16, -1, -1, -1, -1, -1, -1, -1, /* 0x3000-0x3fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x4000-0x4fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x5000-0x5fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x6000-0x6fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x7000-0x7fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x8000-0x8fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x9000-0x9fff */
+  -1, -1, -1, 17, 18, 19, -1, -1, /* 0xa000-0xafff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb000-0xbfff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd000-0xdfff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */
+  -1, -1, -1, -1, -1, 20, -1, 21, /* 0xf000-0xffff */
+  22, -1, -1, -1, -1, 23, -1, -1, /* 0x10000-0x10fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x11000-0x11fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x16000-0x16fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1b000-0x1bfff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1c000-0x1cfff */
+  24, 25, -1, -1, -1, -1, -1, -1  /* 0x1d000-0x1dfff */
+};
+
+/* Determine number of column positions required for UC.  */
+int
+uc_width (ucs4_t uc, const char *encoding)
+{
+  /* Test for non-spacing or control character.  */
+  if ((uc >> 9) < 240)
+    {
+      int ind = nonspacing_table_ind[uc >> 9];
+      if (ind >= 0)
+        if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1)
+          {
+            if (uc > 0 && uc < 0xa0)
+              return -1;
+            else
+              return 0;
+          }
+    }
+  else if ((uc >> 9) == (0xe0000 >> 9))
+    {
+      if (uc >= 0xe0100)
+        {
+          if (uc <= 0xe01ef)
+            return 0;
+        }
+      else
+        {
+          if (uc >= 0xe0020 ? uc <= 0xe007f : uc == 0xe0001)
+            return 0;
+        }
+    }
+  /* Test for double-width character.
+   * Generated from "grep '^....;[WF]' EastAsianWidth.txt"
+   * and            "grep '^....;[^WF]' EastAsianWidth.txt"
+   */
+  if (uc >= 0x1100
+      && ((uc < 0x1160) /* Hangul Jamo */
+          || (uc >= 0x2329 && uc < 0x232b) /* Angle Brackets */
+          || (uc >= 0x2e80 && uc < 0xa4d0  /* CJK ... Yi */
+              && !(uc == 0x303f) && !(uc >= 0x4dc0 && uc < 0x4e00))
+          || (uc >= 0xac00 && uc < 0xd7a4) /* Hangul Syllables */
+          || (uc >= 0xf900 && uc < 0xfb00) /* CJK Compatibility Ideographs */
+          || (uc >= 0xfe10 && uc < 0xfe20) /* Presentation Forms for Vertical */
+          || (uc >= 0xfe30 && uc < 0xfe70) /* CJK Compatibility Forms */
+          || (uc >= 0xff00 && uc < 0xff61) /* Fullwidth Forms */
+          || (uc >= 0xffe0 && uc < 0xffe7) /* Fullwidth Signs */
+          || (uc >= 0x20000 && uc <= 0x2a6d6) /* CJK */
+          || (uc >= 0x2f800 && uc <= 0x2fa1d) /* CJK Compatibility Ideographs */
+     )   )
+    return 2;
+  /* In ancient CJK encodings, Cyrillic and most other characters are
+     double-width as well.  */
+  if (uc >= 0x00A1 && uc < 0xFF61 && uc != 0x20A9
+      && is_cjk_encoding (encoding))
+    return 2;
+  return 1;
+}
diff --git a/gnu/unlink.c b/gnu/unlink.c
new file mode 100644 (file)
index 0000000..568d2cd
--- /dev/null
@@ -0,0 +1,87 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Work around unlink bugs.
+
+   Copyright (C) 2009, 2010 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>
+
+#include <unistd.h>
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#undef unlink
+
+/* Remove file NAME.
+   Return 0 if successful, -1 if not.  */
+
+int
+rpl_unlink (char const *name)
+{
+  /* Work around Solaris 9 bug where unlink("file/") succeeds.  */
+  size_t len = strlen (name);
+  int result = 0;
+  if (len && ISSLASH (name[len - 1]))
+    {
+      /* We can't unlink(2) something if it doesn't exist.  If it does
+         exist, then it resolved to a directory, due to the trailing
+         slash, and POSIX requires that the unlink attempt to remove
+         that directory (which would leave the symlink dangling).
+         Unfortunately, Solaris 9 is one of the platforms where the
+         root user can unlink directories, and we don't want to
+         cripple this behavior on real directories, even if it is
+         seldom needed (at any rate, it's nicer to let coreutils'
+         unlink(1) give the correct errno for non-root users).  But we
+         don't know whether name was an actual directory, or a symlink
+         to a directory; and due to the bug of ignoring trailing
+         slash, Solaris 9 would end up successfully unlinking the
+         symlink instead of the directory.  Technically, we could use
+         realpath to find the canonical directory name to attempt
+         deletion on.  But that is a lot of work for a corner case; so
+         we instead just use an lstat on the shortened name, and
+         reject symlinks with trailing slashes.  The root user of
+         unlink(1) will just have to live with the rule that they
+         can't delete a directory via a symlink.  */
+      struct stat st;
+      result = lstat (name, &st);
+      if (result == 0)
+        {
+          /* Trailing NUL will overwrite the trailing slash.  */
+          char *short_name = malloc (len);
+          if (!short_name)
+            {
+              errno = EPERM;
+              return -1;
+            }
+          memcpy (short_name, name, len);
+          while (len && ISSLASH (short_name[len - 1]))
+            short_name[--len] = '\0';
+          if (len && (lstat (short_name, &st) || S_ISLNK (st.st_mode)))
+            {
+              free (short_name);
+              errno = EPERM;
+              return -1;
+            }
+          free (short_name);
+        }
+    }
+  if (!result)
+    result = unlink (name);
+  return result;
+}
diff --git a/gnu/unlinkat.c b/gnu/unlinkat.c
new file mode 100644 (file)
index 0000000..0d68213
--- /dev/null
@@ -0,0 +1,107 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Work around unlinkat bugs on Solaris 9.
+
+   Copyright (C) 2009-2010 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 Eric Blake.  */
+
+#include <config.h>
+
+#include <unistd.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#include "openat.h"
+
+#if HAVE_UNLINKAT
+
+# undef unlinkat
+
+/* unlinkat without AT_REMOVEDIR does not honor trailing / on Solaris
+   9.  Solve it in a similar manner to unlink.  */
+
+int
+rpl_unlinkat (int fd, char const *name, int flag)
+{
+  size_t len;
+  int result = 0;
+  /* rmdir behavior has no problems with trailing slash.  */
+  if (flag & AT_REMOVEDIR)
+    return unlinkat (fd, name, flag);
+
+  len = strlen (name);
+  if (len && ISSLASH (name[len - 1]))
+    {
+      /* See the lengthy comment in unlink.c why we disobey the POSIX
+         rule of letting unlink("link-to-dir/") attempt to unlink a
+         directory.  */
+      struct stat st;
+      result = lstatat (fd, name, &st);
+      if (result == 0)
+        {
+          /* Trailing NUL will overwrite the trailing slash.  */
+          char *short_name = malloc (len);
+          if (!short_name)
+            {
+              errno = EPERM;
+              return -1;
+            }
+          memcpy (short_name, name, len);
+          while (len && ISSLASH (short_name[len - 1]))
+            short_name[--len] = '\0';
+          if (len && (lstatat (fd, short_name, &st) || S_ISLNK (st.st_mode)))
+            {
+              free (short_name);
+              errno = EPERM;
+              return -1;
+            }
+          free (short_name);
+        }
+    }
+  if (!result)
+    result = unlinkat (fd, name, flag);
+  return result;
+}
+
+#else /* !HAVE_UNLINKAT */
+
+/* Replacement for Solaris' function by the same name.
+   <http://www.google.com/search?q=unlinkat+site:docs.sun.com>
+   First, try to simulate it via (unlink|rmdir) ("/proc/self/fd/FD/FILE").
+   Failing that, simulate it via save_cwd/fchdir/(unlink|rmdir)/restore_cwd.
+   If either the save_cwd or the restore_cwd fails (relatively unlikely),
+   then give a diagnostic and exit nonzero.
+   Otherwise, this function works just like Solaris' unlinkat.  */
+
+# define AT_FUNC_NAME unlinkat
+# define AT_FUNC_F1 rmdir
+# define AT_FUNC_F2 unlink
+# define AT_FUNC_USE_F1_COND AT_REMOVEDIR
+# define AT_FUNC_POST_FILE_PARAM_DECLS , int flag
+# define AT_FUNC_POST_FILE_ARGS        /* empty */
+# include "at-func.c"
+# undef AT_FUNC_NAME
+# undef AT_FUNC_F1
+# undef AT_FUNC_F2
+# undef AT_FUNC_USE_F1_COND
+# undef AT_FUNC_POST_FILE_PARAM_DECLS
+# undef AT_FUNC_POST_FILE_ARGS
+
+#endif /* !HAVE_UNLINKAT */
diff --git a/gnu/unlinkdir.c b/gnu/unlinkdir.c
new file mode 100644 (file)
index 0000000..1473b3c
--- /dev/null
@@ -0,0 +1,56 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* unlinkdir.c - determine whether we can unlink directories
+
+   Copyright (C) 2005-2006, 2009-2010 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, Jim Meyering, and David Bartley.  */
+
+#include <config.h>
+
+#include "unlinkdir.h"
+#include "priv-set.h"
+#include <unistd.h>
+
+#if ! UNLINK_CANNOT_UNLINK_DIR
+
+/* Return true if we cannot unlink directories, false if we might be
+   able to unlink directories.  */
+
+bool
+cannot_unlink_dir (void)
+{
+  static bool initialized;
+  static bool cannot;
+
+  if (! initialized)
+    {
+# if defined PRIV_SYS_LINKDIR
+      /* We might be able to unlink directories if we cannot
+         determine our privileges, or if we have the
+         PRIV_SYS_LINKDIR privilege.  */
+      cannot = (priv_set_ismember (PRIV_SYS_LINKDIR) == 0);
+# else
+      /* In traditional Unix, only root can unlink directories.  */
+      cannot = (geteuid () != 0);
+# endif
+      initialized = true;
+    }
+
+  return cannot;
+}
+
+#endif
diff --git a/gnu/unlinkdir.h b/gnu/unlinkdir.h
new file mode 100644 (file)
index 0000000..5c64afe
--- /dev/null
@@ -0,0 +1,28 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* unlinkdir.h - determine (and maybe change) whether we can unlink directories
+
+   Copyright (C) 2005, 2009-2010 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 and Jim Meyering.  */
+
+#include <stdbool.h>
+
+#if UNLINK_CANNOT_UNLINK_DIR
+# define cannot_unlink_dir() true
+#else
+bool cannot_unlink_dir (void);
+#endif
diff --git a/gnu/unlocked-io.h b/gnu/unlocked-io.h
new file mode 100644 (file)
index 0000000..cf11ece
--- /dev/null
@@ -0,0 +1,138 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Prefer faster, non-thread-safe stdio functions if available.
+
+   Copyright (C) 2001-2004, 2009-2010 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.  */
+
+#ifndef UNLOCKED_IO_H
+# define UNLOCKED_IO_H 1
+
+/* These are wrappers for functions/macros from the GNU C library, and
+   from other C libraries supporting POSIX's optional thread-safe functions.
+
+   The standard I/O functions are thread-safe.  These *_unlocked ones are
+   more efficient but not thread-safe.  That they're not thread-safe is
+   fine since all of the applications in this package are single threaded.
+
+   Also, some code that is shared with the GNU C library may invoke
+   the *_unlocked functions directly.  On hosts that lack those
+   functions, invoke the non-thread-safe versions instead.  */
+
+# include <stdio.h>
+
+# if HAVE_DECL_CLEARERR_UNLOCKED
+#  undef clearerr
+#  define clearerr(x) clearerr_unlocked (x)
+# else
+#  define clearerr_unlocked(x) clearerr (x)
+# endif
+
+# if HAVE_DECL_FEOF_UNLOCKED
+#  undef feof
+#  define feof(x) feof_unlocked (x)
+# else
+#  define feof_unlocked(x) feof (x)
+# endif
+
+# if HAVE_DECL_FERROR_UNLOCKED
+#  undef ferror
+#  define ferror(x) ferror_unlocked (x)
+# else
+#  define ferror_unlocked(x) ferror (x)
+# endif
+
+# if HAVE_DECL_FFLUSH_UNLOCKED
+#  undef fflush
+#  define fflush(x) fflush_unlocked (x)
+# else
+#  define fflush_unlocked(x) fflush (x)
+# endif
+
+# if HAVE_DECL_FGETS_UNLOCKED
+#  undef fgets
+#  define fgets(x,y,z) fgets_unlocked (x,y,z)
+# else
+#  define fgets_unlocked(x,y,z) fgets (x,y,z)
+# endif
+
+# if HAVE_DECL_FPUTC_UNLOCKED
+#  undef fputc
+#  define fputc(x,y) fputc_unlocked (x,y)
+# else
+#  define fputc_unlocked(x,y) fputc (x,y)
+# endif
+
+# if HAVE_DECL_FPUTS_UNLOCKED
+#  undef fputs
+#  define fputs(x,y) fputs_unlocked (x,y)
+# else
+#  define fputs_unlocked(x,y) fputs (x,y)
+# endif
+
+# if HAVE_DECL_FREAD_UNLOCKED
+#  undef fread
+#  define fread(w,x,y,z) fread_unlocked (w,x,y,z)
+# else
+#  define fread_unlocked(w,x,y,z) fread (w,x,y,z)
+# endif
+
+# if HAVE_DECL_FWRITE_UNLOCKED
+#  undef fwrite
+#  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
+# else
+#  define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z)
+# endif
+
+# if HAVE_DECL_GETC_UNLOCKED
+#  undef getc
+#  define getc(x) getc_unlocked (x)
+# else
+#  define getc_unlocked(x) getc (x)
+# endif
+
+# if HAVE_DECL_GETCHAR_UNLOCKED
+#  undef getchar
+#  define getchar() getchar_unlocked ()
+# else
+#  define getchar_unlocked() getchar ()
+# endif
+
+# if HAVE_DECL_PUTC_UNLOCKED
+#  undef putc
+#  define putc(x,y) putc_unlocked (x,y)
+# else
+#  define putc_unlocked(x,y) putc (x,y)
+# endif
+
+# if HAVE_DECL_PUTCHAR_UNLOCKED
+#  undef putchar
+#  define putchar(x) putchar_unlocked (x)
+# else
+#  define putchar_unlocked(x) putchar (x)
+# endif
+
+# undef flockfile
+# define flockfile(x) ((void) 0)
+
+# undef ftrylockfile
+# define ftrylockfile(x) 0
+
+# undef funlockfile
+# define funlockfile(x) ((void) 0)
+
+#endif /* UNLOCKED_IO_H */
diff --git a/gnu/unsetenv.c b/gnu/unsetenv.c
new file mode 100644 (file)
index 0000000..d22a29a
--- /dev/null
@@ -0,0 +1,122 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Copyright (C) 1992, 1995-2002, 2005-2010 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
+   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>
+
+/* Don't use __attribute__ __nonnull__ in this compilation unit.  Otherwise gcc
+   optimizes away the name == NULL test below.  */
+#define _GL_ARG_NONNULL(params)
+
+/* Specification.  */
+#include <stdlib.h>
+
+#include <errno.h>
+#if !_LIBC
+# define __set_errno(ev) ((errno) = (ev))
+#endif
+
+#include <string.h>
+#include <unistd.h>
+
+#if !_LIBC
+# define __environ      environ
+#endif
+
+#if _LIBC
+/* This lock protects against simultaneous modifications of `environ'.  */
+# include <bits/libc-lock.h>
+__libc_lock_define_initialized (static, envlock)
+# define LOCK   __libc_lock_lock (envlock)
+# define UNLOCK __libc_lock_unlock (envlock)
+#else
+# define LOCK
+# define UNLOCK
+#endif
+
+/* In the GNU C library we must keep the namespace clean.  */
+#ifdef _LIBC
+# define unsetenv __unsetenv
+#endif
+
+#if _LIBC || !HAVE_UNSETENV
+
+int
+unsetenv (const char *name)
+{
+  size_t len;
+  char **ep;
+
+  if (name == NULL || *name == '\0' || strchr (name, '=') != NULL)
+    {
+      __set_errno (EINVAL);
+      return -1;
+    }
+
+  len = strlen (name);
+
+  LOCK;
+
+  ep = __environ;
+  while (*ep != NULL)
+    if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+      {
+        /* Found it.  Remove this pointer by moving later ones back.  */
+        char **dp = ep;
+
+        do
+          dp[0] = dp[1];
+        while (*dp++);
+        /* Continue the loop in case NAME appears again.  */
+      }
+    else
+      ++ep;
+
+  UNLOCK;
+
+  return 0;
+}
+
+#ifdef _LIBC
+# undef unsetenv
+weak_alias (__unsetenv, unsetenv)
+#endif
+
+#else /* HAVE_UNSETENV */
+
+# undef unsetenv
+
+/* Call the underlying unsetenv, in case there is hidden bookkeeping
+   that needs updating beyond just modifying environ.  */
+int
+rpl_unsetenv (const char *name)
+{
+  int result = 0;
+  if (!name || !*name || strchr (name, '='))
+    {
+      errno = EINVAL;
+      return -1;
+    }
+  while (getenv (name))
+# if !VOID_UNSETENV
+    result =
+# endif
+      unsetenv (name);
+  return result;
+}
+
+#endif /* HAVE_UNSETENV */
diff --git a/gnu/utimens.c b/gnu/utimens.c
new file mode 100644 (file)
index 0000000..8ce10d1
--- /dev/null
@@ -0,0 +1,515 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Set file access and modification times.
+
+   Copyright (C) 2003-2010 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 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.  */
+
+/* derived from a function in touch.c */
+
+#include <config.h>
+
+#include "utimens.h"
+
+#include <assert.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdbool.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <unistd.h>
+
+#include "stat-time.h"
+#include "timespec.h"
+
+#if HAVE_UTIME_H
+# include <utime.h>
+#endif
+
+/* Some systems (even some that do have <utime.h>) don't declare this
+   structure anywhere.  */
+#ifndef HAVE_STRUCT_UTIMBUF
+struct utimbuf
+{
+  long actime;
+  long modtime;
+};
+#endif
+
+/* Avoid recursion with rpl_futimens or rpl_utimensat.  */
+#undef futimens
+#undef utimensat
+
+/* Solaris 9 mistakenly succeeds when given a non-directory with a
+   trailing slash.  Force the use of rpl_stat for a fix.  */
+#ifndef REPLACE_FUNC_STAT_FILE
+# define REPLACE_FUNC_STAT_FILE 0
+#endif
+
+#if HAVE_UTIMENSAT || HAVE_FUTIMENS
+/* Cache variables for whether the utimensat syscall works; used to
+   avoid calling the syscall if we know it will just fail with ENOSYS,
+   and to avoid unnecessary work in massaging timestamps if the
+   syscall will work.  Multiple variables are needed, to distinguish
+   between the following scenarios on Linux:
+   utimensat doesn't exist, or is in glibc but kernel 2.6.18 fails with ENOSYS
+   kernel 2.6.22 and earlier rejects AT_SYMLINK_NOFOLLOW
+   kernel 2.6.25 and earlier reject UTIME_NOW/UTIME_OMIT with non-zero tv_sec
+   kernel 2.6.32 used with xfs or ntfs-3g fail to honor UTIME_OMIT
+   utimensat completely works
+   For each cache variable: 0 = unknown, 1 = yes, -1 = no.  */
+static int utimensat_works_really;
+static int lutimensat_works_really;
+#endif /* HAVE_UTIMENSAT || HAVE_FUTIMENS */
+
+/* Validate the requested timestamps.  Return 0 if the resulting
+   timespec can be used for utimensat (after possibly modifying it to
+   work around bugs in utimensat).  Return a positive value if the
+   timespec needs further adjustment based on stat results: 1 if any
+   adjustment is needed for utimes, and 2 if any adjustment is needed
+   for Linux utimensat.  Return -1, with errno set to EINVAL, if
+   timespec is out of range.  */
+static int
+validate_timespec (struct timespec timespec[2])
+{
+  int result = 0;
+  int utime_omit_count = 0;
+  assert (timespec);
+  if ((timespec[0].tv_nsec != UTIME_NOW
+       && timespec[0].tv_nsec != UTIME_OMIT
+       && (timespec[0].tv_nsec < 0 || 1000000000 <= timespec[0].tv_nsec))
+      || (timespec[1].tv_nsec != UTIME_NOW
+          && timespec[1].tv_nsec != UTIME_OMIT
+          && (timespec[1].tv_nsec < 0 || 1000000000 <= timespec[1].tv_nsec)))
+    {
+      errno = EINVAL;
+      return -1;
+    }
+  /* Work around Linux kernel 2.6.25 bug, where utimensat fails with
+     EINVAL if tv_sec is not 0 when using the flag values of tv_nsec.
+     Flag a Linux kernel 2.6.32 bug, where an mtime of UTIME_OMIT
+     fails to bump ctime.  */
+  if (timespec[0].tv_nsec == UTIME_NOW
+      || timespec[0].tv_nsec == UTIME_OMIT)
+    {
+      timespec[0].tv_sec = 0;
+      result = 1;
+      if (timespec[0].tv_nsec == UTIME_OMIT)
+        utime_omit_count++;
+    }
+  if (timespec[1].tv_nsec == UTIME_NOW
+      || timespec[1].tv_nsec == UTIME_OMIT)
+    {
+      timespec[1].tv_sec = 0;
+      result = 1;
+      if (timespec[1].tv_nsec == UTIME_OMIT)
+        utime_omit_count++;
+    }
+  return result + (utime_omit_count == 1);
+}
+
+/* Normalize any UTIME_NOW or UTIME_OMIT values in *TS, using stat
+   buffer STATBUF to obtain the current timestamps of the file.  If
+   both times are UTIME_NOW, set *TS to NULL (as this can avoid some
+   permissions issues).  If both times are UTIME_OMIT, return true
+   (nothing further beyond the prior collection of STATBUF is
+   necessary); otherwise return false.  */
+static bool
+update_timespec (struct stat const *statbuf, struct timespec *ts[2])
+{
+  struct timespec *timespec = *ts;
+  if (timespec[0].tv_nsec == UTIME_OMIT
+      && timespec[1].tv_nsec == UTIME_OMIT)
+    return true;
+  if (timespec[0].tv_nsec == UTIME_NOW
+      && timespec[1].tv_nsec == UTIME_NOW)
+    {
+      *ts = NULL;
+      return false;
+    }
+
+  if (timespec[0].tv_nsec == UTIME_OMIT)
+    timespec[0] = get_stat_atime (statbuf);
+  else if (timespec[0].tv_nsec == UTIME_NOW)
+    gettime (&timespec[0]);
+
+  if (timespec[1].tv_nsec == UTIME_OMIT)
+    timespec[1] = get_stat_mtime (statbuf);
+  else if (timespec[1].tv_nsec == UTIME_NOW)
+    gettime (&timespec[1]);
+
+  return false;
+}
+
+/* Set the access and modification time stamps of FD (a.k.a. FILE) to be
+   TIMESPEC[0] and TIMESPEC[1], respectively.
+   FD must be either negative -- in which case it is ignored --
+   or a file descriptor that is open on FILE.
+   If FD is nonnegative, then FILE can be NULL, which means
+   use just futimes (or equivalent) instead of utimes (or equivalent),
+   and fail if on an old system without futimes (or equivalent).
+   If TIMESPEC is null, set the time stamps to the current time.
+   Return 0 on success, -1 (setting errno) on failure.  */
+
+int
+fdutimens (char const *file, int fd, struct timespec const timespec[2])
+{
+  struct timespec adjusted_timespec[2];
+  struct timespec *ts = timespec ? adjusted_timespec : NULL;
+  int adjustment_needed = 0;
+  struct stat st;
+
+  if (ts)
+    {
+      adjusted_timespec[0] = timespec[0];
+      adjusted_timespec[1] = timespec[1];
+      adjustment_needed = validate_timespec (ts);
+    }
+  if (adjustment_needed < 0)
+    return -1;
+
+  /* Require that at least one of FD or FILE are valid.  Works around
+     a Linux bug where futimens (AT_FDCWD, NULL) changes "." rather
+     than failing.  */
+  if (!file)
+    {
+      if (fd < 0)
+        {
+          errno = EBADF;
+          return -1;
+        }
+      if (dup2 (fd, fd) != fd)
+        return -1;
+    }
+
+  /* Some Linux-based NFS clients are buggy, and mishandle time stamps
+     of files in NFS file systems in some cases.  We have no
+     configure-time test for this, but please see
+     <http://bugs.gentoo.org/show_bug.cgi?id=132673> for references to
+     some of the problems with Linux 2.6.16.  If this affects you,
+     compile with -DHAVE_BUGGY_NFS_TIME_STAMPS; this is reported to
+     help in some cases, albeit at a cost in performance.  But you
+     really should upgrade your kernel to a fixed version, since the
+     problem affects many applications.  */
+
+#if HAVE_BUGGY_NFS_TIME_STAMPS
+  if (fd < 0)
+    sync ();
+  else
+    fsync (fd);
+#endif
+
+  /* POSIX 2008 added two interfaces to set file timestamps with
+     nanosecond resolution; newer Linux implements both functions via
+     a single syscall.  We provide a fallback for ENOSYS (for example,
+     compiling against Linux 2.6.25 kernel headers and glibc 2.7, but
+     running on Linux 2.6.18 kernel).  */
+#if HAVE_UTIMENSAT || HAVE_FUTIMENS
+  if (0 <= utimensat_works_really)
+    {
+      int result;
+# if __linux__
+      /* As recently as Linux kernel 2.6.32 (Dec 2009), several file
+         systems (xfs, ntfs-3g) have bugs with a single UTIME_OMIT,
+         but work if both times are either explicitly specified or
+         UTIME_NOW.  Work around it with a preparatory [f]stat prior
+         to calling futimens/utimensat; fortunately, there is not much
+         timing impact due to the extra syscall even on file systems
+         where UTIME_OMIT would have worked.  FIXME: Simplify this in
+         2012, when file system bugs are no longer common.  */
+      if (adjustment_needed == 2)
+        {
+          if (fd < 0 ? stat (file, &st) : fstat (fd, &st))
+            return -1;
+          if (ts[0].tv_nsec == UTIME_OMIT)
+            ts[0] = get_stat_atime (&st);
+          else if (ts[1].tv_nsec == UTIME_OMIT)
+            ts[1] = get_stat_mtime (&st);
+          /* Note that st is good, in case utimensat gives ENOSYS.  */
+          adjustment_needed++;
+        }
+# endif /* __linux__ */
+# if HAVE_UTIMENSAT
+      if (fd < 0)
+        {
+          result = utimensat (AT_FDCWD, file, ts, 0);
+#  ifdef __linux__
+          /* Work around a kernel bug:
+             http://bugzilla.redhat.com/442352
+             http://bugzilla.redhat.com/449910
+             It appears that utimensat can mistakenly return 280 rather
+             than -1 upon ENOSYS failure.
+             FIXME: remove in 2010 or whenever the offending kernels
+             are no longer in common use.  */
+          if (0 < result)
+            errno = ENOSYS;
+#  endif /* __linux__ */
+          if (result == 0 || errno != ENOSYS)
+            {
+              utimensat_works_really = 1;
+              return result;
+            }
+        }
+# endif /* HAVE_UTIMENSAT */
+# if HAVE_FUTIMENS
+      if (0 <= fd)
+        {
+          result = futimens (fd, ts);
+#  ifdef __linux__
+          /* Work around the same bug as above.  */
+          if (0 < result)
+            errno = ENOSYS;
+#  endif /* __linux__ */
+          if (result == 0 || errno != ENOSYS)
+            {
+              utimensat_works_really = 1;
+              return result;
+            }
+        }
+# endif /* HAVE_FUTIMENS */
+    }
+  utimensat_works_really = -1;
+  lutimensat_works_really = -1;
+#endif /* HAVE_UTIMENSAT || HAVE_FUTIMENS */
+
+  /* The platform lacks an interface to set file timestamps with
+     nanosecond resolution, so do the best we can, discarding any
+     fractional part of the timestamp.  */
+
+  if (adjustment_needed || (REPLACE_FUNC_STAT_FILE && fd < 0))
+    {
+      if (adjustment_needed != 3
+          && (fd < 0 ? stat (file, &st) : fstat (fd, &st)))
+        return -1;
+      if (ts && update_timespec (&st, &ts))
+        return 0;
+    }
+
+  {
+#if HAVE_FUTIMESAT || HAVE_WORKING_UTIMES
+    struct timeval timeval[2];
+    struct timeval const *t;
+    if (ts)
+      {
+        timeval[0].tv_sec = ts[0].tv_sec;
+        timeval[0].tv_usec = ts[0].tv_nsec / 1000;
+        timeval[1].tv_sec = ts[1].tv_sec;
+        timeval[1].tv_usec = ts[1].tv_nsec / 1000;
+        t = timeval;
+      }
+    else
+      t = NULL;
+
+    if (fd < 0)
+      {
+# if HAVE_FUTIMESAT
+        return futimesat (AT_FDCWD, file, t);
+# endif
+      }
+    else
+      {
+        /* If futimesat or futimes fails here, don't try to speed things
+           up by returning right away.  glibc can incorrectly fail with
+           errno == ENOENT if /proc isn't mounted.  Also, Mandrake 10.0
+           in high security mode doesn't allow ordinary users to read
+           /proc/self, so glibc incorrectly fails with errno == EACCES.
+           If errno == EIO, EPERM, or EROFS, it's probably safe to fail
+           right away, but these cases are rare enough that they're not
+           worth optimizing, and who knows what other messed-up systems
+           are out there?  So play it safe and fall back on the code
+           below.  */
+# if HAVE_FUTIMESAT && !FUTIMESAT_NULL_BUG
+        if (futimesat (fd, NULL, t) == 0)
+          return 0;
+# elif HAVE_FUTIMES
+        if (futimes (fd, t) == 0)
+          return 0;
+# endif
+      }
+#endif /* HAVE_FUTIMESAT || HAVE_WORKING_UTIMES */
+
+    if (!file)
+      {
+#if ! ((HAVE_FUTIMESAT && !FUTIMESAT_NULL_BUG)          \
+        || (HAVE_WORKING_UTIMES && HAVE_FUTIMES))
+        errno = ENOSYS;
+#endif
+        return -1;
+      }
+
+#if HAVE_WORKING_UTIMES
+    return utimes (file, t);
+#else
+    {
+      struct utimbuf utimbuf;
+      struct utimbuf *ut;
+      if (ts)
+        {
+          utimbuf.actime = ts[0].tv_sec;
+          utimbuf.modtime = ts[1].tv_sec;
+          ut = &utimbuf;
+        }
+      else
+        ut = NULL;
+
+      return utime (file, ut);
+    }
+#endif /* !HAVE_WORKING_UTIMES */
+  }
+}
+
+/* Set the access and modification time stamps of FD (a.k.a. FILE) to be
+   TIMESPEC[0] and TIMESPEC[1], respectively.
+   FD must be either negative -- in which case it is ignored --
+   or a file descriptor that is open on FILE.
+   If FD is nonnegative, then FILE can be NULL, which means
+   use just futimes (or equivalent) instead of utimes (or equivalent),
+   and fail if on an old system without futimes (or equivalent).
+   If TIMESPEC is null, set the time stamps to the current time.
+   Return 0 on success, -1 (setting errno) on failure.  */
+
+int
+gl_futimens (int fd, char const *file, struct timespec const timespec[2])
+{
+  return fdutimens (file, fd, timespec);
+}
+
+/* Set the access and modification time stamps of FILE to be
+   TIMESPEC[0] and TIMESPEC[1], respectively.  */
+int
+utimens (char const *file, struct timespec const timespec[2])
+{
+  return fdutimens (file, -1, timespec);
+}
+
+/* Set the access and modification time stamps of FILE to be
+   TIMESPEC[0] and TIMESPEC[1], respectively, without dereferencing
+   symlinks.  Fail with ENOSYS if the platform does not support
+   changing symlink timestamps, but FILE was a symlink.  */
+int
+lutimens (char const *file, struct timespec const timespec[2])
+{
+  struct timespec adjusted_timespec[2];
+  struct timespec *ts = timespec ? adjusted_timespec : NULL;
+  int adjustment_needed = 0;
+  struct stat st;
+
+  if (ts)
+    {
+      adjusted_timespec[0] = timespec[0];
+      adjusted_timespec[1] = timespec[1];
+      adjustment_needed = validate_timespec (ts);
+    }
+  if (adjustment_needed < 0)
+    return -1;
+
+  /* The Linux kernel did not support symlink timestamps until
+     utimensat, in version 2.6.22, so we don't need to mimic
+     gl_futimens' worry about buggy NFS clients.  But we do have to
+     worry about bogus return values.  */
+
+#if HAVE_UTIMENSAT
+  if (0 <= lutimensat_works_really)
+    {
+      int result;
+# if __linux__
+      /* As recently as Linux kernel 2.6.32 (Dec 2009), several file
+         systems (xfs, ntfs-3g) have bugs with a single UTIME_OMIT,
+         but work if both times are either explicitly specified or
+         UTIME_NOW.  Work around it with a preparatory lstat prior to
+         calling utimensat; fortunately, there is not much timing
+         impact due to the extra syscall even on file systems where
+         UTIME_OMIT would have worked.  FIXME: Simplify this in 2012,
+         when file system bugs are no longer common.  */
+      if (adjustment_needed == 2)
+        {
+          if (lstat (file, &st))
+            return -1;
+          if (ts[0].tv_nsec == UTIME_OMIT)
+            ts[0] = get_stat_atime (&st);
+          else if (ts[1].tv_nsec == UTIME_OMIT)
+            ts[1] = get_stat_mtime (&st);
+          /* Note that st is good, in case utimensat gives ENOSYS.  */
+          adjustment_needed++;
+        }
+# endif /* __linux__ */
+      result = utimensat (AT_FDCWD, file, ts, AT_SYMLINK_NOFOLLOW);
+# ifdef __linux__
+      /* Work around a kernel bug:
+         http://bugzilla.redhat.com/442352
+         http://bugzilla.redhat.com/449910
+         It appears that utimensat can mistakenly return 280 rather
+         than -1 upon ENOSYS failure.
+         FIXME: remove in 2010 or whenever the offending kernels
+         are no longer in common use.  */
+      if (0 < result)
+        errno = ENOSYS;
+# endif
+      if (result == 0 || errno != ENOSYS)
+        {
+          utimensat_works_really = 1;
+          lutimensat_works_really = 1;
+          return result;
+        }
+    }
+  lutimensat_works_really = -1;
+#endif /* HAVE_UTIMENSAT */
+
+  /* The platform lacks an interface to set file timestamps with
+     nanosecond resolution, so do the best we can, discarding any
+     fractional part of the timestamp.  */
+
+  if (adjustment_needed || REPLACE_FUNC_STAT_FILE)
+    {
+      if (adjustment_needed != 3 && lstat (file, &st))
+        return -1;
+      if (ts && update_timespec (&st, &ts))
+        return 0;
+    }
+
+  /* On Linux, lutimes is a thin wrapper around utimensat, so there is
+     no point trying lutimes if utimensat failed with ENOSYS.  */
+#if HAVE_LUTIMES && !HAVE_UTIMENSAT
+  {
+    struct timeval timeval[2];
+    struct timeval const *t;
+    int result;
+    if (ts)
+      {
+        timeval[0].tv_sec = ts[0].tv_sec;
+        timeval[0].tv_usec = ts[0].tv_nsec / 1000;
+        timeval[1].tv_sec = ts[1].tv_sec;
+        timeval[1].tv_usec = ts[1].tv_nsec / 1000;
+        t = timeval;
+      }
+    else
+      t = NULL;
+
+    result = lutimes (file, t);
+    if (result == 0 || errno != ENOSYS)
+      return result;
+  }
+#endif /* HAVE_LUTIMES && !HAVE_UTIMENSAT */
+
+  /* Out of luck for symlinks, but we still handle regular files.  */
+  if (!(adjustment_needed || REPLACE_FUNC_STAT_FILE) && lstat (file, &st))
+    return -1;
+  if (!S_ISLNK (st.st_mode))
+    return fdutimens (file, -1, ts);
+  errno = ENOSYS;
+  return -1;
+}
diff --git a/gnu/utimens.h b/gnu/utimens.h
new file mode 100644 (file)
index 0000000..37f92b7
--- /dev/null
@@ -0,0 +1,21 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+#include <time.h>
+int fdutimens (char const *, int, struct timespec const [2]);
+int gl_futimens (int, char const *, struct timespec const [2]);
+int utimens (char const *, struct timespec const [2]);
+int lutimens (char const *, struct timespec const [2]);
+
+#if GNULIB_FDUTIMENSAT
+# include <fcntl.h>
+# include <sys/stat.h>
+
+int fdutimensat (int dir, char const *name, int fd, struct timespec const [2]);
+
+/* Using this function makes application code slightly more readable.  */
+static inline int
+lutimensat (int fd, char const *file, struct timespec const times[2])
+{
+  return utimensat (fd, file, times, AT_SYMLINK_NOFOLLOW);
+}
+#endif
diff --git a/gnu/vasnprintf.c b/gnu/vasnprintf.c
new file mode 100644 (file)
index 0000000..3fbba53
--- /dev/null
@@ -0,0 +1,5490 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* vsprintf with automatic memory allocation.
+   Copyright (C) 1999, 2002-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* This file can be parametrized with the following macros:
+     VASNPRINTF         The name of the function being defined.
+     FCHAR_T            The element type of the format string.
+     DCHAR_T            The element type of the destination (result) string.
+     FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters
+                        in the format string are ASCII. MUST be set if
+                        FCHAR_T and DCHAR_T are not the same type.
+     DIRECTIVE          Structure denoting a format directive.
+                        Depends on FCHAR_T.
+     DIRECTIVES         Structure denoting the set of format directives of a
+                        format string.  Depends on FCHAR_T.
+     PRINTF_PARSE       Function that parses a format string.
+                        Depends on FCHAR_T.
+     DCHAR_CPY          memcpy like function for DCHAR_T[] arrays.
+     DCHAR_SET          memset like function for DCHAR_T[] arrays.
+     DCHAR_MBSNLEN      mbsnlen like function for DCHAR_T[] arrays.
+     SNPRINTF           The system's snprintf (or similar) function.
+                        This may be either snprintf or swprintf.
+     TCHAR_T            The element type of the argument and result string
+                        of the said SNPRINTF function.  This may be either
+                        char or wchar_t.  The code exploits that
+                        sizeof (TCHAR_T) | sizeof (DCHAR_T) and
+                        alignof (TCHAR_T) <= alignof (DCHAR_T).
+     DCHAR_IS_TCHAR     Set to 1 if DCHAR_T and TCHAR_T are the same type.
+     DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[].
+     DCHAR_IS_UINT8_T   Set to 1 if DCHAR_T is uint8_t.
+     DCHAR_IS_UINT16_T  Set to 1 if DCHAR_T is uint16_t.
+     DCHAR_IS_UINT32_T  Set to 1 if DCHAR_T is uint32_t.  */
+
+/* Tell glibc's <stdio.h> to provide a prototype for snprintf().
+   This must come before <config.h> because <config.h> may include
+   <features.h>, and once <features.h> has been included, it's too late.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE    1
+#endif
+
+#ifndef VASNPRINTF
+# include <config.h>
+#endif
+#ifndef IN_LIBINTL
+# include <alloca.h>
+#endif
+
+/* Specification.  */
+#ifndef VASNPRINTF
+# if WIDE_CHAR_VERSION
+#  include "vasnwprintf.h"
+# else
+#  include "vasnprintf.h"
+# endif
+#endif
+
+#include <locale.h>     /* localeconv() */
+#include <stdio.h>      /* snprintf(), sprintf() */
+#include <stdlib.h>     /* abort(), malloc(), realloc(), free() */
+#include <string.h>     /* memcpy(), strlen() */
+#include <errno.h>      /* errno */
+#include <limits.h>     /* CHAR_BIT */
+#include <float.h>      /* DBL_MAX_EXP, LDBL_MAX_EXP */
+#if HAVE_NL_LANGINFO
+# include <langinfo.h>
+#endif
+#ifndef VASNPRINTF
+# if WIDE_CHAR_VERSION
+#  include "wprintf-parse.h"
+# else
+#  include "printf-parse.h"
+# endif
+#endif
+
+/* Checked size_t computations.  */
+#include "xsize.h"
+
+#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "float+.h"
+#endif
+
+#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "isnand-nolibm.h"
+#endif
+
+#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "isnanl-nolibm.h"
+# include "fpucw.h"
+#endif
+
+#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "isnand-nolibm.h"
+# include "printf-frexp.h"
+#endif
+
+#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "isnanl-nolibm.h"
+# include "printf-frexpl.h"
+# include "fpucw.h"
+#endif
+
+/* Default parameters.  */
+#ifndef VASNPRINTF
+# if WIDE_CHAR_VERSION
+#  define VASNPRINTF vasnwprintf
+#  define FCHAR_T wchar_t
+#  define DCHAR_T wchar_t
+#  define TCHAR_T wchar_t
+#  define DCHAR_IS_TCHAR 1
+#  define DIRECTIVE wchar_t_directive
+#  define DIRECTIVES wchar_t_directives
+#  define PRINTF_PARSE wprintf_parse
+#  define DCHAR_CPY wmemcpy
+#  define DCHAR_SET wmemset
+# else
+#  define VASNPRINTF vasnprintf
+#  define FCHAR_T char
+#  define DCHAR_T char
+#  define TCHAR_T char
+#  define DCHAR_IS_TCHAR 1
+#  define DIRECTIVE char_directive
+#  define DIRECTIVES char_directives
+#  define PRINTF_PARSE printf_parse
+#  define DCHAR_CPY memcpy
+#  define DCHAR_SET memset
+# endif
+#endif
+#if WIDE_CHAR_VERSION
+  /* TCHAR_T is wchar_t.  */
+# define USE_SNPRINTF 1
+# if HAVE_DECL__SNWPRINTF
+   /* On Windows, the function swprintf() has a different signature than
+      on Unix; we use the _snwprintf() function instead.  */
+#  define SNPRINTF _snwprintf
+# else
+   /* Unix.  */
+#  define SNPRINTF swprintf
+# endif
+#else
+  /* TCHAR_T is char.  */
+  /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'.
+     But don't use it on BeOS, since BeOS snprintf produces no output if the
+     size argument is >= 0x3000000.
+     Also don't use it on Linux libc5, since there snprintf with size = 1
+     writes any output without bounds, like sprintf.  */
+# if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ && !(__GNU_LIBRARY__ == 1)
+#  define USE_SNPRINTF 1
+# else
+#  define USE_SNPRINTF 0
+# endif
+# if HAVE_DECL__SNPRINTF
+   /* Windows.  */
+#  define SNPRINTF _snprintf
+# else
+   /* Unix.  */
+#  define SNPRINTF snprintf
+   /* Here we need to call the native snprintf, not rpl_snprintf.  */
+#  undef snprintf
+# endif
+#endif
+/* Here we need to call the native sprintf, not rpl_sprintf.  */
+#undef sprintf
+
+/* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized"
+   warnings in this file.  Use -Dlint to suppress them.  */
+#ifdef lint
+# define IF_LINT(Code) Code
+#else
+# define IF_LINT(Code) /* empty */
+#endif
+
+/* Avoid some warnings from "gcc -Wshadow".
+   This file doesn't use the exp() and remainder() functions.  */
+#undef exp
+#define exp expo
+#undef remainder
+#define remainder rem
+
+#if !USE_SNPRINTF && !WIDE_CHAR_VERSION
+# if (HAVE_STRNLEN && !defined _AIX)
+#  define local_strnlen strnlen
+# else
+#  ifndef local_strnlen_defined
+#   define local_strnlen_defined 1
+static size_t
+local_strnlen (const char *string, size_t maxlen)
+{
+  const char *end = memchr (string, '\0', maxlen);
+  return end ? (size_t) (end - string) : maxlen;
+}
+#  endif
+# endif
+#endif
+
+#if (!USE_SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T && (WIDE_CHAR_VERSION || DCHAR_IS_TCHAR)
+# if HAVE_WCSLEN
+#  define local_wcslen wcslen
+# else
+   /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid
+      a dependency towards this library, here is a local substitute.
+      Define this substitute only once, even if this file is included
+      twice in the same compilation unit.  */
+#  ifndef local_wcslen_defined
+#   define local_wcslen_defined 1
+static size_t
+local_wcslen (const wchar_t *s)
+{
+  const wchar_t *ptr;
+
+  for (ptr = s; *ptr != (wchar_t) 0; ptr++)
+    ;
+  return ptr - s;
+}
+#  endif
+# endif
+#endif
+
+#if !USE_SNPRINTF && HAVE_WCHAR_T && WIDE_CHAR_VERSION
+# if HAVE_WCSNLEN
+#  define local_wcsnlen wcsnlen
+# else
+#  ifndef local_wcsnlen_defined
+#   define local_wcsnlen_defined 1
+static size_t
+local_wcsnlen (const wchar_t *s, size_t maxlen)
+{
+  const wchar_t *ptr;
+
+  for (ptr = s; maxlen > 0 && *ptr != (wchar_t) 0; ptr++, maxlen--)
+    ;
+  return ptr - s;
+}
+#  endif
+# endif
+#endif
+
+#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL
+/* Determine the decimal-point character according to the current locale.  */
+# ifndef decimal_point_char_defined
+#  define decimal_point_char_defined 1
+static char
+decimal_point_char (void)
+{
+  const char *point;
+  /* Determine it in a multithread-safe way.  We know nl_langinfo is
+     multithread-safe on glibc systems and MacOS X systems, but is not required
+     to be multithread-safe by POSIX.  sprintf(), however, is multithread-safe.
+     localeconv() is rarely multithread-safe.  */
+#  if HAVE_NL_LANGINFO && (__GLIBC__ || (defined __APPLE__ && defined __MACH__))
+  point = nl_langinfo (RADIXCHAR);
+#  elif 1
+  char pointbuf[5];
+  sprintf (pointbuf, "%#.0f", 1.0);
+  point = &pointbuf[1];
+#  else
+  point = localeconv () -> decimal_point;
+#  endif
+  /* The decimal point is always a single byte: either '.' or ','.  */
+  return (point[0] != '\0' ? point[0] : '.');
+}
+# endif
+#endif
+
+#if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL
+
+/* Equivalent to !isfinite(x) || x == 0, but does not require libm.  */
+static int
+is_infinite_or_zero (double x)
+{
+  return isnand (x) || x + x == x;
+}
+
+#endif
+
+#if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL
+
+/* Equivalent to !isfinite(x) || x == 0, but does not require libm.  */
+static int
+is_infinite_or_zerol (long double x)
+{
+  return isnanl (x) || x + x == x;
+}
+
+#endif
+
+#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL
+
+/* Converting 'long double' to decimal without rare rounding bugs requires
+   real bignums.  We use the naming conventions of GNU gmp, but vastly simpler
+   (and slower) algorithms.  */
+
+typedef unsigned int mp_limb_t;
+# define GMP_LIMB_BITS 32
+typedef int mp_limb_verify[2 * (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS) - 1];
+
+typedef unsigned long long mp_twolimb_t;
+# define GMP_TWOLIMB_BITS 64
+typedef int mp_twolimb_verify[2 * (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS) - 1];
+
+/* Representation of a bignum >= 0.  */
+typedef struct
+{
+  size_t nlimbs;
+  mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc().  */
+} mpn_t;
+
+/* Compute the product of two bignums >= 0.
+   Return the allocated memory in case of success, NULL in case of memory
+   allocation failure.  */
+static void *
+multiply (mpn_t src1, mpn_t src2, mpn_t *dest)
+{
+  const mp_limb_t *p1;
+  const mp_limb_t *p2;
+  size_t len1;
+  size_t len2;
+
+  if (src1.nlimbs <= src2.nlimbs)
+    {
+      len1 = src1.nlimbs;
+      p1 = src1.limbs;
+      len2 = src2.nlimbs;
+      p2 = src2.limbs;
+    }
+  else
+    {
+      len1 = src2.nlimbs;
+      p1 = src2.limbs;
+      len2 = src1.nlimbs;
+      p2 = src1.limbs;
+    }
+  /* Now 0 <= len1 <= len2.  */
+  if (len1 == 0)
+    {
+      /* src1 or src2 is zero.  */
+      dest->nlimbs = 0;
+      dest->limbs = (mp_limb_t *) malloc (1);
+    }
+  else
+    {
+      /* Here 1 <= len1 <= len2.  */
+      size_t dlen;
+      mp_limb_t *dp;
+      size_t k, i, j;
+
+      dlen = len1 + len2;
+      dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t));
+      if (dp == NULL)
+        return NULL;
+      for (k = len2; k > 0; )
+        dp[--k] = 0;
+      for (i = 0; i < len1; i++)
+        {
+          mp_limb_t digit1 = p1[i];
+          mp_twolimb_t carry = 0;
+          for (j = 0; j < len2; j++)
+            {
+              mp_limb_t digit2 = p2[j];
+              carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2;
+              carry += dp[i + j];
+              dp[i + j] = (mp_limb_t) carry;
+              carry = carry >> GMP_LIMB_BITS;
+            }
+          dp[i + len2] = (mp_limb_t) carry;
+        }
+      /* Normalise.  */
+      while (dlen > 0 && dp[dlen - 1] == 0)
+        dlen--;
+      dest->nlimbs = dlen;
+      dest->limbs = dp;
+    }
+  return dest->limbs;
+}
+
+/* Compute the quotient of a bignum a >= 0 and a bignum b > 0.
+   a is written as  a = q * b + r  with 0 <= r < b.  q is the quotient, r
+   the remainder.
+   Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd,
+   q is incremented.
+   Return the allocated memory in case of success, NULL in case of memory
+   allocation failure.  */
+static void *
+divide (mpn_t a, mpn_t b, mpn_t *q)
+{
+  /* Algorithm:
+     First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]]
+     with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS).
+     If m<n, then q:=0 and r:=a.
+     If m>=n=1, perform a single-precision division:
+       r:=0, j:=m,
+       while j>0 do
+         {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j =
+               = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r<b[0]<beta}
+         j:=j-1, r:=r*beta+a[j], q[j]:=floor(r/b[0]), r:=r-b[0]*q[j].
+       Normalise [q[m-1],...,q[0]], yields q.
+     If m>=n>1, perform a multiple-precision division:
+       We have a/b < beta^(m-n+1).
+       s:=intDsize-1-(highest bit in b[n-1]), 0<=s<intDsize.
+       Shift a and b left by s bits, copying them. r:=a.
+       r=[r[m],...,r[0]], b=[b[n-1],...,b[0]] with b[n-1]>=beta/2.
+       For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).}
+         Compute q* :
+           q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]).
+           In case of overflow (q* >= beta) set q* := beta-1.
+           Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2]
+           and c3 := b[n-2] * q*.
+           {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow
+            occurred.  Furthermore 0 <= c3 < beta^2.
+            If there was overflow and
+            r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2,
+            the next test can be skipped.}
+           While c3 > c2, {Here 0 <= c2 < c3 < beta^2}
+             Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2].
+           If q* > 0:
+             Put r := r - b * q* * beta^j. In detail:
+               [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]].
+               hence: u:=0, for i:=0 to n-1 do
+                              u := u + q* * b[i],
+                              r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry),
+                              u:=u div beta (+ 1, if carry in subtraction)
+                      r[n+j]:=r[n+j]-u.
+               {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1
+                               < q* + 1 <= beta,
+                the carry u does not overflow.}
+             If a negative carry occurs, put q* := q* - 1
+               and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]].
+         Set q[j] := q*.
+       Normalise [q[m-n],..,q[0]]; this yields the quotient q.
+       Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the
+       rest r.
+       The room for q[j] can be allocated at the memory location of r[n+j].
+     Finally, round-to-even:
+       Shift r left by 1 bit.
+       If r > b or if r = b and q[0] is odd, q := q+1.
+   */
+  const mp_limb_t *a_ptr = a.limbs;
+  size_t a_len = a.nlimbs;
+  const mp_limb_t *b_ptr = b.limbs;
+  size_t b_len = b.nlimbs;
+  mp_limb_t *roomptr;
+  mp_limb_t *tmp_roomptr = NULL;
+  mp_limb_t *q_ptr;
+  size_t q_len;
+  mp_limb_t *r_ptr;
+  size_t r_len;
+
+  /* Allocate room for a_len+2 digits.
+     (Need a_len+1 digits for the real division and 1 more digit for the
+     final rounding of q.)  */
+  roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t));
+  if (roomptr == NULL)
+    return NULL;
+
+  /* Normalise a.  */
+  while (a_len > 0 && a_ptr[a_len - 1] == 0)
+    a_len--;
+
+  /* Normalise b.  */
+  for (;;)
+    {
+      if (b_len == 0)
+        /* Division by zero.  */
+        abort ();
+      if (b_ptr[b_len - 1] == 0)
+        b_len--;
+      else
+        break;
+    }
+
+  /* Here m = a_len >= 0 and n = b_len > 0.  */
+
+  if (a_len < b_len)
+    {
+      /* m<n: trivial case.  q=0, r := copy of a.  */
+      r_ptr = roomptr;
+      r_len = a_len;
+      memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t));
+      q_ptr = roomptr + a_len;
+      q_len = 0;
+    }
+  else if (b_len == 1)
+    {
+      /* n=1: single precision division.
+         beta^(m-1) <= a < beta^m  ==>  beta^(m-2) <= a/b < beta^m  */
+      r_ptr = roomptr;
+      q_ptr = roomptr + 1;
+      {
+        mp_limb_t den = b_ptr[0];
+        mp_limb_t remainder = 0;
+        const mp_limb_t *sourceptr = a_ptr + a_len;
+        mp_limb_t *destptr = q_ptr + a_len;
+        size_t count;
+        for (count = a_len; count > 0; count--)
+          {
+            mp_twolimb_t num =
+              ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr;
+            *--destptr = num / den;
+            remainder = num % den;
+          }
+        /* Normalise and store r.  */
+        if (remainder > 0)
+          {
+            r_ptr[0] = remainder;
+            r_len = 1;
+          }
+        else
+          r_len = 0;
+        /* Normalise q.  */
+        q_len = a_len;
+        if (q_ptr[q_len - 1] == 0)
+          q_len--;
+      }
+    }
+  else
+    {
+      /* n>1: multiple precision division.
+         beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n  ==>
+         beta^(m-n-1) <= a/b < beta^(m-n+1).  */
+      /* Determine s.  */
+      size_t s;
+      {
+        mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */
+        s = 31;
+        if (msd >= 0x10000)
+          {
+            msd = msd >> 16;
+            s -= 16;
+          }
+        if (msd >= 0x100)
+          {
+            msd = msd >> 8;
+            s -= 8;
+          }
+        if (msd >= 0x10)
+          {
+            msd = msd >> 4;
+            s -= 4;
+          }
+        if (msd >= 0x4)
+          {
+            msd = msd >> 2;
+            s -= 2;
+          }
+        if (msd >= 0x2)
+          {
+            msd = msd >> 1;
+            s -= 1;
+          }
+      }
+      /* 0 <= s < GMP_LIMB_BITS.
+         Copy b, shifting it left by s bits.  */
+      if (s > 0)
+        {
+          tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t));
+          if (tmp_roomptr == NULL)
+            {
+              free (roomptr);
+              return NULL;
+            }
+          {
+            const mp_limb_t *sourceptr = b_ptr;
+            mp_limb_t *destptr = tmp_roomptr;
+            mp_twolimb_t accu = 0;
+            size_t count;
+            for (count = b_len; count > 0; count--)
+              {
+                accu += (mp_twolimb_t) *sourceptr++ << s;
+                *destptr++ = (mp_limb_t) accu;
+                accu = accu >> GMP_LIMB_BITS;
+              }
+            /* accu must be zero, since that was how s was determined.  */
+            if (accu != 0)
+              abort ();
+          }
+          b_ptr = tmp_roomptr;
+        }
+      /* Copy a, shifting it left by s bits, yields r.
+         Memory layout:
+         At the beginning: r = roomptr[0..a_len],
+         at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len]  */
+      r_ptr = roomptr;
+      if (s == 0)
+        {
+          memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t));
+          r_ptr[a_len] = 0;
+        }
+      else
+        {
+          const mp_limb_t *sourceptr = a_ptr;
+          mp_limb_t *destptr = r_ptr;
+          mp_twolimb_t accu = 0;
+          size_t count;
+          for (count = a_len; count > 0; count--)
+            {
+              accu += (mp_twolimb_t) *sourceptr++ << s;
+              *destptr++ = (mp_limb_t) accu;
+              accu = accu >> GMP_LIMB_BITS;
+            }
+          *destptr++ = (mp_limb_t) accu;
+        }
+      q_ptr = roomptr + b_len;
+      q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */
+      {
+        size_t j = a_len - b_len; /* m-n */
+        mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */
+        mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */
+        mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */
+          ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd;
+        /* Division loop, traversed m-n+1 times.
+           j counts down, b is unchanged, beta/2 <= b[n-1] < beta.  */
+        for (;;)
+          {
+            mp_limb_t q_star;
+            mp_limb_t c1;
+            if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */
+              {
+                /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow.  */
+                mp_twolimb_t num =
+                  ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS)
+                  | r_ptr[j + b_len - 1];
+                q_star = num / b_msd;
+                c1 = num % b_msd;
+              }
+            else
+              {
+                /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1].  */
+                q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */
+                /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta
+                   <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta
+                   <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta)
+                        {<= beta !}.
+                   If yes, jump directly to the subtraction loop.
+                   (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta
+                    <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */
+                if (r_ptr[j + b_len] > b_msd
+                    || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd)
+                  /* r[j+n] >= b[n-1]+1 or
+                     r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a
+                     carry.  */
+                  goto subtract;
+              }
+            /* q_star = q*,
+               c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, <beta).  */
+            {
+              mp_twolimb_t c2 = /* c1*beta+r[j+n-2] */
+                ((mp_twolimb_t) c1 << GMP_LIMB_BITS) | r_ptr[j + b_len - 2];
+              mp_twolimb_t c3 = /* b[n-2] * q* */
+                (mp_twolimb_t) b_2msd * (mp_twolimb_t) q_star;
+              /* While c2 < c3, increase c2 and decrease c3.
+                 Consider c3-c2.  While it is > 0, decrease it by
+                 b[n-1]*beta+b[n-2].  Because of b[n-1]*beta+b[n-2] >= beta^2/2
+                 this can happen only twice.  */
+              if (c3 > c2)
+                {
+                  q_star = q_star - 1; /* q* := q* - 1 */
+                  if (c3 - c2 > b_msdd)
+                    q_star = q_star - 1; /* q* := q* - 1 */
+                }
+            }
+            if (q_star > 0)
+              subtract:
+              {
+                /* Subtract r := r - b * q* * beta^j.  */
+                mp_limb_t cr;
+                {
+                  const mp_limb_t *sourceptr = b_ptr;
+                  mp_limb_t *destptr = r_ptr + j;
+                  mp_twolimb_t carry = 0;
+                  size_t count;
+                  for (count = b_len; count > 0; count--)
+                    {
+                      /* Here 0 <= carry <= q*.  */
+                      carry =
+                        carry
+                        + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++
+                        + (mp_limb_t) ~(*destptr);
+                      /* Here 0 <= carry <= beta*q* + beta-1.  */
+                      *destptr++ = ~(mp_limb_t) carry;
+                      carry = carry >> GMP_LIMB_BITS; /* <= q* */
+                    }
+                  cr = (mp_limb_t) carry;
+                }
+                /* Subtract cr from r_ptr[j + b_len], then forget about
+                   r_ptr[j + b_len].  */
+                if (cr > r_ptr[j + b_len])
+                  {
+                    /* Subtraction gave a carry.  */
+                    q_star = q_star - 1; /* q* := q* - 1 */
+                    /* Add b back.  */
+                    {
+                      const mp_limb_t *sourceptr = b_ptr;
+                      mp_limb_t *destptr = r_ptr + j;
+                      mp_limb_t carry = 0;
+                      size_t count;
+                      for (count = b_len; count > 0; count--)
+                        {
+                          mp_limb_t source1 = *sourceptr++;
+                          mp_limb_t source2 = *destptr;
+                          *destptr++ = source1 + source2 + carry;
+                          carry =
+                            (carry
+                             ? source1 >= (mp_limb_t) ~source2
+                             : source1 > (mp_limb_t) ~source2);
+                        }
+                    }
+                    /* Forget about the carry and about r[j+n].  */
+                  }
+              }
+            /* q* is determined.  Store it as q[j].  */
+            q_ptr[j] = q_star;
+            if (j == 0)
+              break;
+            j--;
+          }
+      }
+      r_len = b_len;
+      /* Normalise q.  */
+      if (q_ptr[q_len - 1] == 0)
+        q_len--;
+# if 0 /* Not needed here, since we need r only to compare it with b/2, and
+          b is shifted left by s bits.  */
+      /* Shift r right by s bits.  */
+      if (s > 0)
+        {
+          mp_limb_t ptr = r_ptr + r_len;
+          mp_twolimb_t accu = 0;
+          size_t count;
+          for (count = r_len; count > 0; count--)
+            {
+              accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS;
+              accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s);
+              *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS);
+            }
+        }
+# endif
+      /* Normalise r.  */
+      while (r_len > 0 && r_ptr[r_len - 1] == 0)
+        r_len--;
+    }
+  /* Compare r << 1 with b.  */
+  if (r_len > b_len)
+    goto increment_q;
+  {
+    size_t i;
+    for (i = b_len;;)
+      {
+        mp_limb_t r_i =
+          (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0)
+          | (i < r_len ? r_ptr[i] << 1 : 0);
+        mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0);
+        if (r_i > b_i)
+          goto increment_q;
+        if (r_i < b_i)
+          goto keep_q;
+        if (i == 0)
+          break;
+        i--;
+      }
+  }
+  if (q_len > 0 && ((q_ptr[0] & 1) != 0))
+    /* q is odd.  */
+    increment_q:
+    {
+      size_t i;
+      for (i = 0; i < q_len; i++)
+        if (++(q_ptr[i]) != 0)
+          goto keep_q;
+      q_ptr[q_len++] = 1;
+    }
+  keep_q:
+  if (tmp_roomptr != NULL)
+    free (tmp_roomptr);
+  q->limbs = q_ptr;
+  q->nlimbs = q_len;
+  return roomptr;
+}
+
+/* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal
+   representation.
+   Destroys the contents of a.
+   Return the allocated memory - containing the decimal digits in low-to-high
+   order, terminated with a NUL character - in case of success, NULL in case
+   of memory allocation failure.  */
+static char *
+convert_to_decimal (mpn_t a, size_t extra_zeroes)
+{
+  mp_limb_t *a_ptr = a.limbs;
+  size_t a_len = a.nlimbs;
+  /* 0.03345 is slightly larger than log(2)/(9*log(10)).  */
+  size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1);
+  char *c_ptr = (char *) malloc (xsum (c_len, extra_zeroes));
+  if (c_ptr != NULL)
+    {
+      char *d_ptr = c_ptr;
+      for (; extra_zeroes > 0; extra_zeroes--)
+        *d_ptr++ = '0';
+      while (a_len > 0)
+        {
+          /* Divide a by 10^9, in-place.  */
+          mp_limb_t remainder = 0;
+          mp_limb_t *ptr = a_ptr + a_len;
+          size_t count;
+          for (count = a_len; count > 0; count--)
+            {
+              mp_twolimb_t num =
+                ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr;
+              *ptr = num / 1000000000;
+              remainder = num % 1000000000;
+            }
+          /* Store the remainder as 9 decimal digits.  */
+          for (count = 9; count > 0; count--)
+            {
+              *d_ptr++ = '0' + (remainder % 10);
+              remainder = remainder / 10;
+            }
+          /* Normalize a.  */
+          if (a_ptr[a_len - 1] == 0)
+            a_len--;
+        }
+      /* Remove leading zeroes.  */
+      while (d_ptr > c_ptr && d_ptr[-1] == '0')
+        d_ptr--;
+      /* But keep at least one zero.  */
+      if (d_ptr == c_ptr)
+        *d_ptr++ = '0';
+      /* Terminate the string.  */
+      *d_ptr = '\0';
+    }
+  return c_ptr;
+}
+
+# if NEED_PRINTF_LONG_DOUBLE
+
+/* Assuming x is finite and >= 0:
+   write x as x = 2^e * m, where m is a bignum.
+   Return the allocated memory in case of success, NULL in case of memory
+   allocation failure.  */
+static void *
+decode_long_double (long double x, int *ep, mpn_t *mp)
+{
+  mpn_t m;
+  int exp;
+  long double y;
+  size_t i;
+
+  /* Allocate memory for result.  */
+  m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS;
+  m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t));
+  if (m.limbs == NULL)
+    return NULL;
+  /* Split into exponential part and mantissa.  */
+  y = frexpl (x, &exp);
+  if (!(y >= 0.0L && y < 1.0L))
+    abort ();
+  /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * LDBL_MANT_BIT), and the
+     latter is an integer.  */
+  /* Convert the mantissa (y * LDBL_MANT_BIT) to a sequence of limbs.
+     I'm not sure whether it's safe to cast a 'long double' value between
+     2^31 and 2^32 to 'unsigned int', therefore play safe and cast only
+     'long double' values between 0 and 2^16 (to 'unsigned int' or 'int',
+     doesn't matter).  */
+#  if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0
+#   if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2
+    {
+      mp_limb_t hi, lo;
+      y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2));
+      hi = (int) y;
+      y -= hi;
+      if (!(y >= 0.0L && y < 1.0L))
+        abort ();
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      lo = (int) y;
+      y -= lo;
+      if (!(y >= 0.0L && y < 1.0L))
+        abort ();
+      m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo;
+    }
+#   else
+    {
+      mp_limb_t d;
+      y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS);
+      d = (int) y;
+      y -= d;
+      if (!(y >= 0.0L && y < 1.0L))
+        abort ();
+      m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d;
+    }
+#   endif
+#  endif
+  for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; )
+    {
+      mp_limb_t hi, lo;
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      hi = (int) y;
+      y -= hi;
+      if (!(y >= 0.0L && y < 1.0L))
+        abort ();
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      lo = (int) y;
+      y -= lo;
+      if (!(y >= 0.0L && y < 1.0L))
+        abort ();
+      m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo;
+    }
+#if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess
+         precision.  */
+  if (!(y == 0.0L))
+    abort ();
+#endif
+  /* Normalise.  */
+  while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0)
+    m.nlimbs--;
+  *mp = m;
+  *ep = exp - LDBL_MANT_BIT;
+  return m.limbs;
+}
+
+# endif
+
+# if NEED_PRINTF_DOUBLE
+
+/* Assuming x is finite and >= 0:
+   write x as x = 2^e * m, where m is a bignum.
+   Return the allocated memory in case of success, NULL in case of memory
+   allocation failure.  */
+static void *
+decode_double (double x, int *ep, mpn_t *mp)
+{
+  mpn_t m;
+  int exp;
+  double y;
+  size_t i;
+
+  /* Allocate memory for result.  */
+  m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS;
+  m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t));
+  if (m.limbs == NULL)
+    return NULL;
+  /* Split into exponential part and mantissa.  */
+  y = frexp (x, &exp);
+  if (!(y >= 0.0 && y < 1.0))
+    abort ();
+  /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * DBL_MANT_BIT), and the
+     latter is an integer.  */
+  /* Convert the mantissa (y * DBL_MANT_BIT) to a sequence of limbs.
+     I'm not sure whether it's safe to cast a 'double' value between
+     2^31 and 2^32 to 'unsigned int', therefore play safe and cast only
+     'double' values between 0 and 2^16 (to 'unsigned int' or 'int',
+     doesn't matter).  */
+#  if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0
+#   if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2
+    {
+      mp_limb_t hi, lo;
+      y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2));
+      hi = (int) y;
+      y -= hi;
+      if (!(y >= 0.0 && y < 1.0))
+        abort ();
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      lo = (int) y;
+      y -= lo;
+      if (!(y >= 0.0 && y < 1.0))
+        abort ();
+      m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo;
+    }
+#   else
+    {
+      mp_limb_t d;
+      y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS);
+      d = (int) y;
+      y -= d;
+      if (!(y >= 0.0 && y < 1.0))
+        abort ();
+      m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d;
+    }
+#   endif
+#  endif
+  for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; )
+    {
+      mp_limb_t hi, lo;
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      hi = (int) y;
+      y -= hi;
+      if (!(y >= 0.0 && y < 1.0))
+        abort ();
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      lo = (int) y;
+      y -= lo;
+      if (!(y >= 0.0 && y < 1.0))
+        abort ();
+      m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo;
+    }
+  if (!(y == 0.0))
+    abort ();
+  /* Normalise.  */
+  while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0)
+    m.nlimbs--;
+  *mp = m;
+  *ep = exp - DBL_MANT_BIT;
+  return m.limbs;
+}
+
+# endif
+
+/* Assuming x = 2^e * m is finite and >= 0, and n is an integer:
+   Returns the decimal representation of round (x * 10^n).
+   Return the allocated memory - containing the decimal digits in low-to-high
+   order, terminated with a NUL character - in case of success, NULL in case
+   of memory allocation failure.  */
+static char *
+scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n)
+{
+  int s;
+  size_t extra_zeroes;
+  unsigned int abs_n;
+  unsigned int abs_s;
+  mp_limb_t *pow5_ptr;
+  size_t pow5_len;
+  unsigned int s_limbs;
+  unsigned int s_bits;
+  mpn_t pow5;
+  mpn_t z;
+  void *z_memory;
+  char *digits;
+
+  if (memory == NULL)
+    return NULL;
+  /* x = 2^e * m, hence
+     y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m)
+       = round (2^s * 5^n * m).  */
+  s = e + n;
+  extra_zeroes = 0;
+  /* Factor out a common power of 10 if possible.  */
+  if (s > 0 && n > 0)
+    {
+      extra_zeroes = (s < n ? s : n);
+      s -= extra_zeroes;
+      n -= extra_zeroes;
+    }
+  /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes.
+     Before converting to decimal, we need to compute
+     z = round (2^s * 5^n * m).  */
+  /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same
+     sign.  2.322 is slightly larger than log(5)/log(2).  */
+  abs_n = (n >= 0 ? n : -n);
+  abs_s = (s >= 0 ? s : -s);
+  pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1
+                                    + abs_s / GMP_LIMB_BITS + 1)
+                                   * sizeof (mp_limb_t));
+  if (pow5_ptr == NULL)
+    {
+      free (memory);
+      return NULL;
+    }
+  /* Initialize with 1.  */
+  pow5_ptr[0] = 1;
+  pow5_len = 1;
+  /* Multiply with 5^|n|.  */
+  if (abs_n > 0)
+    {
+      static mp_limb_t const small_pow5[13 + 1] =
+        {
+          1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625,
+          48828125, 244140625, 1220703125
+        };
+      unsigned int n13;
+      for (n13 = 0; n13 <= abs_n; n13 += 13)
+        {
+          mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13];
+          size_t j;
+          mp_twolimb_t carry = 0;
+          for (j = 0; j < pow5_len; j++)
+            {
+              mp_limb_t digit2 = pow5_ptr[j];
+              carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2;
+              pow5_ptr[j] = (mp_limb_t) carry;
+              carry = carry >> GMP_LIMB_BITS;
+            }
+          if (carry > 0)
+            pow5_ptr[pow5_len++] = (mp_limb_t) carry;
+        }
+    }
+  s_limbs = abs_s / GMP_LIMB_BITS;
+  s_bits = abs_s % GMP_LIMB_BITS;
+  if (n >= 0 ? s >= 0 : s <= 0)
+    {
+      /* Multiply with 2^|s|.  */
+      if (s_bits > 0)
+        {
+          mp_limb_t *ptr = pow5_ptr;
+          mp_twolimb_t accu = 0;
+          size_t count;
+          for (count = pow5_len; count > 0; count--)
+            {
+              accu += (mp_twolimb_t) *ptr << s_bits;
+              *ptr++ = (mp_limb_t) accu;
+              accu = accu >> GMP_LIMB_BITS;
+            }
+          if (accu > 0)
+            {
+              *ptr = (mp_limb_t) accu;
+              pow5_len++;
+            }
+        }
+      if (s_limbs > 0)
+        {
+          size_t count;
+          for (count = pow5_len; count > 0;)
+            {
+              count--;
+              pow5_ptr[s_limbs + count] = pow5_ptr[count];
+            }
+          for (count = s_limbs; count > 0;)
+            {
+              count--;
+              pow5_ptr[count] = 0;
+            }
+          pow5_len += s_limbs;
+        }
+      pow5.limbs = pow5_ptr;
+      pow5.nlimbs = pow5_len;
+      if (n >= 0)
+        {
+          /* Multiply m with pow5.  No division needed.  */
+          z_memory = multiply (m, pow5, &z);
+        }
+      else
+        {
+          /* Divide m by pow5 and round.  */
+          z_memory = divide (m, pow5, &z);
+        }
+    }
+  else
+    {
+      pow5.limbs = pow5_ptr;
+      pow5.nlimbs = pow5_len;
+      if (n >= 0)
+        {
+          /* n >= 0, s < 0.
+             Multiply m with pow5, then divide by 2^|s|.  */
+          mpn_t numerator;
+          mpn_t denominator;
+          void *tmp_memory;
+          tmp_memory = multiply (m, pow5, &numerator);
+          if (tmp_memory == NULL)
+            {
+              free (pow5_ptr);
+              free (memory);
+              return NULL;
+            }
+          /* Construct 2^|s|.  */
+          {
+            mp_limb_t *ptr = pow5_ptr + pow5_len;
+            size_t i;
+            for (i = 0; i < s_limbs; i++)
+              ptr[i] = 0;
+            ptr[s_limbs] = (mp_limb_t) 1 << s_bits;
+            denominator.limbs = ptr;
+            denominator.nlimbs = s_limbs + 1;
+          }
+          z_memory = divide (numerator, denominator, &z);
+          free (tmp_memory);
+        }
+      else
+        {
+          /* n < 0, s > 0.
+             Multiply m with 2^s, then divide by pow5.  */
+          mpn_t numerator;
+          mp_limb_t *num_ptr;
+          num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1)
+                                          * sizeof (mp_limb_t));
+          if (num_ptr == NULL)
+            {
+              free (pow5_ptr);
+              free (memory);
+              return NULL;
+            }
+          {
+            mp_limb_t *destptr = num_ptr;
+            {
+              size_t i;
+              for (i = 0; i < s_limbs; i++)
+                *destptr++ = 0;
+            }
+            if (s_bits > 0)
+              {
+                const mp_limb_t *sourceptr = m.limbs;
+                mp_twolimb_t accu = 0;
+                size_t count;
+                for (count = m.nlimbs; count > 0; count--)
+                  {
+                    accu += (mp_twolimb_t) *sourceptr++ << s_bits;
+                    *destptr++ = (mp_limb_t) accu;
+                    accu = accu >> GMP_LIMB_BITS;
+                  }
+                if (accu > 0)
+                  *destptr++ = (mp_limb_t) accu;
+              }
+            else
+              {
+                const mp_limb_t *sourceptr = m.limbs;
+                size_t count;
+                for (count = m.nlimbs; count > 0; count--)
+                  *destptr++ = *sourceptr++;
+              }
+            numerator.limbs = num_ptr;
+            numerator.nlimbs = destptr - num_ptr;
+          }
+          z_memory = divide (numerator, pow5, &z);
+          free (num_ptr);
+        }
+    }
+  free (pow5_ptr);
+  free (memory);
+
+  /* Here y = round (x * 10^n) = z * 10^extra_zeroes.  */
+
+  if (z_memory == NULL)
+    return NULL;
+  digits = convert_to_decimal (z, extra_zeroes);
+  free (z_memory);
+  return digits;
+}
+
+# if NEED_PRINTF_LONG_DOUBLE
+
+/* Assuming x is finite and >= 0, and n is an integer:
+   Returns the decimal representation of round (x * 10^n).
+   Return the allocated memory - containing the decimal digits in low-to-high
+   order, terminated with a NUL character - in case of success, NULL in case
+   of memory allocation failure.  */
+static char *
+scale10_round_decimal_long_double (long double x, int n)
+{
+  int e IF_LINT(= 0);
+  mpn_t m;
+  void *memory = decode_long_double (x, &e, &m);
+  return scale10_round_decimal_decoded (e, m, memory, n);
+}
+
+# endif
+
+# if NEED_PRINTF_DOUBLE
+
+/* Assuming x is finite and >= 0, and n is an integer:
+   Returns the decimal representation of round (x * 10^n).
+   Return the allocated memory - containing the decimal digits in low-to-high
+   order, terminated with a NUL character - in case of success, NULL in case
+   of memory allocation failure.  */
+static char *
+scale10_round_decimal_double (double x, int n)
+{
+  int e IF_LINT(= 0);
+  mpn_t m;
+  void *memory = decode_double (x, &e, &m);
+  return scale10_round_decimal_decoded (e, m, memory, n);
+}
+
+# endif
+
+# if NEED_PRINTF_LONG_DOUBLE
+
+/* Assuming x is finite and > 0:
+   Return an approximation for n with 10^n <= x < 10^(n+1).
+   The approximation is usually the right n, but may be off by 1 sometimes.  */
+static int
+floorlog10l (long double x)
+{
+  int exp;
+  long double y;
+  double z;
+  double l;
+
+  /* Split into exponential part and mantissa.  */
+  y = frexpl (x, &exp);
+  if (!(y >= 0.0L && y < 1.0L))
+    abort ();
+  if (y == 0.0L)
+    return INT_MIN;
+  if (y < 0.5L)
+    {
+      while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2))))
+        {
+          y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2));
+          exp -= GMP_LIMB_BITS;
+        }
+      if (y < (1.0L / (1 << 16)))
+        {
+          y *= 1.0L * (1 << 16);
+          exp -= 16;
+        }
+      if (y < (1.0L / (1 << 8)))
+        {
+          y *= 1.0L * (1 << 8);
+          exp -= 8;
+        }
+      if (y < (1.0L / (1 << 4)))
+        {
+          y *= 1.0L * (1 << 4);
+          exp -= 4;
+        }
+      if (y < (1.0L / (1 << 2)))
+        {
+          y *= 1.0L * (1 << 2);
+          exp -= 2;
+        }
+      if (y < (1.0L / (1 << 1)))
+        {
+          y *= 1.0L * (1 << 1);
+          exp -= 1;
+        }
+    }
+  if (!(y >= 0.5L && y < 1.0L))
+    abort ();
+  /* Compute an approximation for l = log2(x) = exp + log2(y).  */
+  l = exp;
+  z = y;
+  if (z < 0.70710678118654752444)
+    {
+      z *= 1.4142135623730950488;
+      l -= 0.5;
+    }
+  if (z < 0.8408964152537145431)
+    {
+      z *= 1.1892071150027210667;
+      l -= 0.25;
+    }
+  if (z < 0.91700404320467123175)
+    {
+      z *= 1.0905077326652576592;
+      l -= 0.125;
+    }
+  if (z < 0.9576032806985736469)
+    {
+      z *= 1.0442737824274138403;
+      l -= 0.0625;
+    }
+  /* Now 0.95 <= z <= 1.01.  */
+  z = 1 - z;
+  /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...)
+     Four terms are enough to get an approximation with error < 10^-7.  */
+  l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25)));
+  /* Finally multiply with log(2)/log(10), yields an approximation for
+     log10(x).  */
+  l *= 0.30102999566398119523;
+  /* Round down to the next integer.  */
+  return (int) l + (l < 0 ? -1 : 0);
+}
+
+# endif
+
+# if NEED_PRINTF_DOUBLE
+
+/* Assuming x is finite and > 0:
+   Return an approximation for n with 10^n <= x < 10^(n+1).
+   The approximation is usually the right n, but may be off by 1 sometimes.  */
+static int
+floorlog10 (double x)
+{
+  int exp;
+  double y;
+  double z;
+  double l;
+
+  /* Split into exponential part and mantissa.  */
+  y = frexp (x, &exp);
+  if (!(y >= 0.0 && y < 1.0))
+    abort ();
+  if (y == 0.0)
+    return INT_MIN;
+  if (y < 0.5)
+    {
+      while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2))))
+        {
+          y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2));
+          exp -= GMP_LIMB_BITS;
+        }
+      if (y < (1.0 / (1 << 16)))
+        {
+          y *= 1.0 * (1 << 16);
+          exp -= 16;
+        }
+      if (y < (1.0 / (1 << 8)))
+        {
+          y *= 1.0 * (1 << 8);
+          exp -= 8;
+        }
+      if (y < (1.0 / (1 << 4)))
+        {
+          y *= 1.0 * (1 << 4);
+          exp -= 4;
+        }
+      if (y < (1.0 / (1 << 2)))
+        {
+          y *= 1.0 * (1 << 2);
+          exp -= 2;
+        }
+      if (y < (1.0 / (1 << 1)))
+        {
+          y *= 1.0 * (1 << 1);
+          exp -= 1;
+        }
+    }
+  if (!(y >= 0.5 && y < 1.0))
+    abort ();
+  /* Compute an approximation for l = log2(x) = exp + log2(y).  */
+  l = exp;
+  z = y;
+  if (z < 0.70710678118654752444)
+    {
+      z *= 1.4142135623730950488;
+      l -= 0.5;
+    }
+  if (z < 0.8408964152537145431)
+    {
+      z *= 1.1892071150027210667;
+      l -= 0.25;
+    }
+  if (z < 0.91700404320467123175)
+    {
+      z *= 1.0905077326652576592;
+      l -= 0.125;
+    }
+  if (z < 0.9576032806985736469)
+    {
+      z *= 1.0442737824274138403;
+      l -= 0.0625;
+    }
+  /* Now 0.95 <= z <= 1.01.  */
+  z = 1 - z;
+  /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...)
+     Four terms are enough to get an approximation with error < 10^-7.  */
+  l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25)));
+  /* Finally multiply with log(2)/log(10), yields an approximation for
+     log10(x).  */
+  l *= 0.30102999566398119523;
+  /* Round down to the next integer.  */
+  return (int) l + (l < 0 ? -1 : 0);
+}
+
+# endif
+
+/* Tests whether a string of digits consists of exactly PRECISION zeroes and
+   a single '1' digit.  */
+static int
+is_borderline (const char *digits, size_t precision)
+{
+  for (; precision > 0; precision--, digits++)
+    if (*digits != '0')
+      return 0;
+  if (*digits != '1')
+    return 0;
+  digits++;
+  return *digits == '\0';
+}
+
+#endif
+
+DCHAR_T *
+VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
+            const FCHAR_T *format, va_list args)
+{
+  DIRECTIVES d;
+  arguments a;
+
+  if (PRINTF_PARSE (format, &d, &a) < 0)
+    /* errno is already set.  */
+    return NULL;
+
+#define CLEANUP() \
+  free (d.dir);                                                         \
+  if (a.arg)                                                            \
+    free (a.arg);
+
+  if (PRINTF_FETCHARGS (args, &a) < 0)
+    {
+      CLEANUP ();
+      errno = EINVAL;
+      return NULL;
+    }
+
+  {
+    size_t buf_neededlength;
+    TCHAR_T *buf;
+    TCHAR_T *buf_malloced;
+    const FCHAR_T *cp;
+    size_t i;
+    DIRECTIVE *dp;
+    /* Output string accumulator.  */
+    DCHAR_T *result;
+    size_t allocated;
+    size_t length;
+
+    /* Allocate a small buffer that will hold a directive passed to
+       sprintf or snprintf.  */
+    buf_neededlength =
+      xsum4 (7, d.max_width_length, d.max_precision_length, 6);
+#if HAVE_ALLOCA
+    if (buf_neededlength < 4000 / sizeof (TCHAR_T))
+      {
+        buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T));
+        buf_malloced = NULL;
+      }
+    else
+#endif
+      {
+        size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T));
+        if (size_overflow_p (buf_memsize))
+          goto out_of_memory_1;
+        buf = (TCHAR_T *) malloc (buf_memsize);
+        if (buf == NULL)
+          goto out_of_memory_1;
+        buf_malloced = buf;
+      }
+
+    if (resultbuf != NULL)
+      {
+        result = resultbuf;
+        allocated = *lengthp;
+      }
+    else
+      {
+        result = NULL;
+        allocated = 0;
+      }
+    length = 0;
+    /* Invariants:
+       result is either == resultbuf or == NULL or malloc-allocated.
+       If length > 0, then result != NULL.  */
+
+    /* Ensures that allocated >= needed.  Aborts through a jump to
+       out_of_memory if needed is SIZE_MAX or otherwise too big.  */
+#define ENSURE_ALLOCATION(needed) \
+    if ((needed) > allocated)                                                \
+      {                                                                      \
+        size_t memory_size;                                                  \
+        DCHAR_T *memory;                                                     \
+                                                                             \
+        allocated = (allocated > 0 ? xtimes (allocated, 2) : 12);            \
+        if ((needed) > allocated)                                            \
+          allocated = (needed);                                              \
+        memory_size = xtimes (allocated, sizeof (DCHAR_T));                  \
+        if (size_overflow_p (memory_size))                                   \
+          goto out_of_memory;                                                \
+        if (result == resultbuf || result == NULL)                           \
+          memory = (DCHAR_T *) malloc (memory_size);                         \
+        else                                                                 \
+          memory = (DCHAR_T *) realloc (result, memory_size);                \
+        if (memory == NULL)                                                  \
+          goto out_of_memory;                                                \
+        if (result == resultbuf && length > 0)                               \
+          DCHAR_CPY (memory, result, length);                                \
+        result = memory;                                                     \
+      }
+
+    for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++)
+      {
+        if (cp != dp->dir_start)
+          {
+            size_t n = dp->dir_start - cp;
+            size_t augmented_length = xsum (length, n);
+
+            ENSURE_ALLOCATION (augmented_length);
+            /* This copies a piece of FCHAR_T[] into a DCHAR_T[].  Here we
+               need that the format string contains only ASCII characters
+               if FCHAR_T and DCHAR_T are not the same type.  */
+            if (sizeof (FCHAR_T) == sizeof (DCHAR_T))
+              {
+                DCHAR_CPY (result + length, (const DCHAR_T *) cp, n);
+                length = augmented_length;
+              }
+            else
+              {
+                do
+                  result[length++] = (unsigned char) *cp++;
+                while (--n > 0);
+              }
+          }
+        if (i == d.count)
+          break;
+
+        /* Execute a single directive.  */
+        if (dp->conversion == '%')
+          {
+            size_t augmented_length;
+
+            if (!(dp->arg_index == ARG_NONE))
+              abort ();
+            augmented_length = xsum (length, 1);
+            ENSURE_ALLOCATION (augmented_length);
+            result[length] = '%';
+            length = augmented_length;
+          }
+        else
+          {
+            if (!(dp->arg_index != ARG_NONE))
+              abort ();
+
+            if (dp->conversion == 'n')
+              {
+                switch (a.arg[dp->arg_index].type)
+                  {
+                  case TYPE_COUNT_SCHAR_POINTER:
+                    *a.arg[dp->arg_index].a.a_count_schar_pointer = length;
+                    break;
+                  case TYPE_COUNT_SHORT_POINTER:
+                    *a.arg[dp->arg_index].a.a_count_short_pointer = length;
+                    break;
+                  case TYPE_COUNT_INT_POINTER:
+                    *a.arg[dp->arg_index].a.a_count_int_pointer = length;
+                    break;
+                  case TYPE_COUNT_LONGINT_POINTER:
+                    *a.arg[dp->arg_index].a.a_count_longint_pointer = length;
+                    break;
+#if HAVE_LONG_LONG_INT
+                  case TYPE_COUNT_LONGLONGINT_POINTER:
+                    *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length;
+                    break;
+#endif
+                  default:
+                    abort ();
+                  }
+              }
+#if ENABLE_UNISTDIO
+            /* The unistdio extensions.  */
+            else if (dp->conversion == 'U')
+              {
+                arg_type type = a.arg[dp->arg_index].type;
+                int flags = dp->flags;
+                int has_width;
+                size_t width;
+                int has_precision;
+                size_t precision;
+
+                has_width = 0;
+                width = 0;
+                if (dp->width_start != dp->width_end)
+                  {
+                    if (dp->width_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->width_arg_index].a.a_int;
+                        if (arg < 0)
+                          {
+                            /* "A negative field width is taken as a '-' flag
+                                followed by a positive field width."  */
+                            flags |= FLAG_LEFT;
+                            width = (unsigned int) (-arg);
+                          }
+                        else
+                          width = arg;
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->width_start;
+
+                        do
+                          width = xsum (xtimes (width, 10), *digitp++ - '0');
+                        while (digitp != dp->width_end);
+                      }
+                    has_width = 1;
+                  }
+
+                has_precision = 0;
+                precision = 0;
+                if (dp->precision_start != dp->precision_end)
+                  {
+                    if (dp->precision_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->precision_arg_index].a.a_int;
+                        /* "A negative precision is taken as if the precision
+                            were omitted."  */
+                        if (arg >= 0)
+                          {
+                            precision = arg;
+                            has_precision = 1;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->precision_start + 1;
+
+                        precision = 0;
+                        while (digitp != dp->precision_end)
+                          precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+                        has_precision = 1;
+                      }
+                  }
+
+                switch (type)
+                  {
+                  case TYPE_U8_STRING:
+                    {
+                      const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string;
+                      const uint8_t *arg_end;
+                      size_t characters;
+
+                      if (has_precision)
+                        {
+                          /* Use only PRECISION characters, from the left.  */
+                          arg_end = arg;
+                          characters = 0;
+                          for (; precision > 0; precision--)
+                            {
+                              int count = u8_strmblen (arg_end);
+                              if (count == 0)
+                                break;
+                              if (count < 0)
+                                {
+                                  if (!(result == resultbuf || result == NULL))
+                                    free (result);
+                                  if (buf_malloced != NULL)
+                                    free (buf_malloced);
+                                  CLEANUP ();
+                                  errno = EILSEQ;
+                                  return NULL;
+                                }
+                              arg_end += count;
+                              characters++;
+                            }
+                        }
+                      else if (has_width)
+                        {
+                          /* Use the entire string, and count the number of
+                             characters.  */
+                          arg_end = arg;
+                          characters = 0;
+                          for (;;)
+                            {
+                              int count = u8_strmblen (arg_end);
+                              if (count == 0)
+                                break;
+                              if (count < 0)
+                                {
+                                  if (!(result == resultbuf || result == NULL))
+                                    free (result);
+                                  if (buf_malloced != NULL)
+                                    free (buf_malloced);
+                                  CLEANUP ();
+                                  errno = EILSEQ;
+                                  return NULL;
+                                }
+                              arg_end += count;
+                              characters++;
+                            }
+                        }
+                      else
+                        {
+                          /* Use the entire string.  */
+                          arg_end = arg + u8_strlen (arg);
+                          /* The number of characters doesn't matter.  */
+                          characters = 0;
+                        }
+
+                      if (has_width && width > characters
+                          && !(dp->flags & FLAG_LEFT))
+                        {
+                          size_t n = width - characters;
+                          ENSURE_ALLOCATION (xsum (length, n));
+                          DCHAR_SET (result + length, ' ', n);
+                          length += n;
+                        }
+
+# if DCHAR_IS_UINT8_T
+                      {
+                        size_t n = arg_end - arg;
+                        ENSURE_ALLOCATION (xsum (length, n));
+                        DCHAR_CPY (result + length, arg, n);
+                        length += n;
+                      }
+# else
+                      { /* Convert.  */
+                        DCHAR_T *converted = result + length;
+                        size_t converted_len = allocated - length;
+#  if DCHAR_IS_TCHAR
+                        /* Convert from UTF-8 to locale encoding.  */
+                        converted =
+                          u8_conv_to_encoding (locale_charset (),
+                                               iconveh_question_mark,
+                                               arg, arg_end - arg, NULL,
+                                               converted, &converted_len);
+#  else
+                        /* Convert from UTF-8 to UTF-16/UTF-32.  */
+                        converted =
+                          U8_TO_DCHAR (arg, arg_end - arg,
+                                       converted, &converted_len);
+#  endif
+                        if (converted == NULL)
+                          {
+                            int saved_errno = errno;
+                            if (!(result == resultbuf || result == NULL))
+                              free (result);
+                            if (buf_malloced != NULL)
+                              free (buf_malloced);
+                            CLEANUP ();
+                            errno = saved_errno;
+                            return NULL;
+                          }
+                        if (converted != result + length)
+                          {
+                            ENSURE_ALLOCATION (xsum (length, converted_len));
+                            DCHAR_CPY (result + length, converted, converted_len);
+                            free (converted);
+                          }
+                        length += converted_len;
+                      }
+# endif
+
+                      if (has_width && width > characters
+                          && (dp->flags & FLAG_LEFT))
+                        {
+                          size_t n = width - characters;
+                          ENSURE_ALLOCATION (xsum (length, n));
+                          DCHAR_SET (result + length, ' ', n);
+                          length += n;
+                        }
+                    }
+                    break;
+
+                  case TYPE_U16_STRING:
+                    {
+                      const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string;
+                      const uint16_t *arg_end;
+                      size_t characters;
+
+                      if (has_precision)
+                        {
+                          /* Use only PRECISION characters, from the left.  */
+                          arg_end = arg;
+                          characters = 0;
+                          for (; precision > 0; precision--)
+                            {
+                              int count = u16_strmblen (arg_end);
+                              if (count == 0)
+                                break;
+                              if (count < 0)
+                                {
+                                  if (!(result == resultbuf || result == NULL))
+                                    free (result);
+                                  if (buf_malloced != NULL)
+                                    free (buf_malloced);
+                                  CLEANUP ();
+                                  errno = EILSEQ;
+                                  return NULL;
+                                }
+                              arg_end += count;
+                              characters++;
+                            }
+                        }
+                      else if (has_width)
+                        {
+                          /* Use the entire string, and count the number of
+                             characters.  */
+                          arg_end = arg;
+                          characters = 0;
+                          for (;;)
+                            {
+                              int count = u16_strmblen (arg_end);
+                              if (count == 0)
+                                break;
+                              if (count < 0)
+                                {
+                                  if (!(result == resultbuf || result == NULL))
+                                    free (result);
+                                  if (buf_malloced != NULL)
+                                    free (buf_malloced);
+                                  CLEANUP ();
+                                  errno = EILSEQ;
+                                  return NULL;
+                                }
+                              arg_end += count;
+                              characters++;
+                            }
+                        }
+                      else
+                        {
+                          /* Use the entire string.  */
+                          arg_end = arg + u16_strlen (arg);
+                          /* The number of characters doesn't matter.  */
+                          characters = 0;
+                        }
+
+                      if (has_width && width > characters
+                          && !(dp->flags & FLAG_LEFT))
+                        {
+                          size_t n = width - characters;
+                          ENSURE_ALLOCATION (xsum (length, n));
+                          DCHAR_SET (result + length, ' ', n);
+                          length += n;
+                        }
+
+# if DCHAR_IS_UINT16_T
+                      {
+                        size_t n = arg_end - arg;
+                        ENSURE_ALLOCATION (xsum (length, n));
+                        DCHAR_CPY (result + length, arg, n);
+                        length += n;
+                      }
+# else
+                      { /* Convert.  */
+                        DCHAR_T *converted = result + length;
+                        size_t converted_len = allocated - length;
+#  if DCHAR_IS_TCHAR
+                        /* Convert from UTF-16 to locale encoding.  */
+                        converted =
+                          u16_conv_to_encoding (locale_charset (),
+                                                iconveh_question_mark,
+                                                arg, arg_end - arg, NULL,
+                                                converted, &converted_len);
+#  else
+                        /* Convert from UTF-16 to UTF-8/UTF-32.  */
+                        converted =
+                          U16_TO_DCHAR (arg, arg_end - arg,
+                                        converted, &converted_len);
+#  endif
+                        if (converted == NULL)
+                          {
+                            int saved_errno = errno;
+                            if (!(result == resultbuf || result == NULL))
+                              free (result);
+                            if (buf_malloced != NULL)
+                              free (buf_malloced);
+                            CLEANUP ();
+                            errno = saved_errno;
+                            return NULL;
+                          }
+                        if (converted != result + length)
+                          {
+                            ENSURE_ALLOCATION (xsum (length, converted_len));
+                            DCHAR_CPY (result + length, converted, converted_len);
+                            free (converted);
+                          }
+                        length += converted_len;
+                      }
+# endif
+
+                      if (has_width && width > characters
+                          && (dp->flags & FLAG_LEFT))
+                        {
+                          size_t n = width - characters;
+                          ENSURE_ALLOCATION (xsum (length, n));
+                          DCHAR_SET (result + length, ' ', n);
+                          length += n;
+                        }
+                    }
+                    break;
+
+                  case TYPE_U32_STRING:
+                    {
+                      const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string;
+                      const uint32_t *arg_end;
+                      size_t characters;
+
+                      if (has_precision)
+                        {
+                          /* Use only PRECISION characters, from the left.  */
+                          arg_end = arg;
+                          characters = 0;
+                          for (; precision > 0; precision--)
+                            {
+                              int count = u32_strmblen (arg_end);
+                              if (count == 0)
+                                break;
+                              if (count < 0)
+                                {
+                                  if (!(result == resultbuf || result == NULL))
+                                    free (result);
+                                  if (buf_malloced != NULL)
+                                    free (buf_malloced);
+                                  CLEANUP ();
+                                  errno = EILSEQ;
+                                  return NULL;
+                                }
+                              arg_end += count;
+                              characters++;
+                            }
+                        }
+                      else if (has_width)
+                        {
+                          /* Use the entire string, and count the number of
+                             characters.  */
+                          arg_end = arg;
+                          characters = 0;
+                          for (;;)
+                            {
+                              int count = u32_strmblen (arg_end);
+                              if (count == 0)
+                                break;
+                              if (count < 0)
+                                {
+                                  if (!(result == resultbuf || result == NULL))
+                                    free (result);
+                                  if (buf_malloced != NULL)
+                                    free (buf_malloced);
+                                  CLEANUP ();
+                                  errno = EILSEQ;
+                                  return NULL;
+                                }
+                              arg_end += count;
+                              characters++;
+                            }
+                        }
+                      else
+                        {
+                          /* Use the entire string.  */
+                          arg_end = arg + u32_strlen (arg);
+                          /* The number of characters doesn't matter.  */
+                          characters = 0;
+                        }
+
+                      if (has_width && width > characters
+                          && !(dp->flags & FLAG_LEFT))
+                        {
+                          size_t n = width - characters;
+                          ENSURE_ALLOCATION (xsum (length, n));
+                          DCHAR_SET (result + length, ' ', n);
+                          length += n;
+                        }
+
+# if DCHAR_IS_UINT32_T
+                      {
+                        size_t n = arg_end - arg;
+                        ENSURE_ALLOCATION (xsum (length, n));
+                        DCHAR_CPY (result + length, arg, n);
+                        length += n;
+                      }
+# else
+                      { /* Convert.  */
+                        DCHAR_T *converted = result + length;
+                        size_t converted_len = allocated - length;
+#  if DCHAR_IS_TCHAR
+                        /* Convert from UTF-32 to locale encoding.  */
+                        converted =
+                          u32_conv_to_encoding (locale_charset (),
+                                                iconveh_question_mark,
+                                                arg, arg_end - arg, NULL,
+                                                converted, &converted_len);
+#  else
+                        /* Convert from UTF-32 to UTF-8/UTF-16.  */
+                        converted =
+                          U32_TO_DCHAR (arg, arg_end - arg,
+                                        converted, &converted_len);
+#  endif
+                        if (converted == NULL)
+                          {
+                            int saved_errno = errno;
+                            if (!(result == resultbuf || result == NULL))
+                              free (result);
+                            if (buf_malloced != NULL)
+                              free (buf_malloced);
+                            CLEANUP ();
+                            errno = saved_errno;
+                            return NULL;
+                          }
+                        if (converted != result + length)
+                          {
+                            ENSURE_ALLOCATION (xsum (length, converted_len));
+                            DCHAR_CPY (result + length, converted, converted_len);
+                            free (converted);
+                          }
+                        length += converted_len;
+                      }
+# endif
+
+                      if (has_width && width > characters
+                          && (dp->flags & FLAG_LEFT))
+                        {
+                          size_t n = width - characters;
+                          ENSURE_ALLOCATION (xsum (length, n));
+                          DCHAR_SET (result + length, ' ', n);
+                          length += n;
+                        }
+                    }
+                    break;
+
+                  default:
+                    abort ();
+                  }
+              }
+#endif
+#if (!USE_SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T
+            else if (dp->conversion == 's'
+# if WIDE_CHAR_VERSION
+                     && a.arg[dp->arg_index].type != TYPE_WIDE_STRING
+# else
+                     && a.arg[dp->arg_index].type == TYPE_WIDE_STRING
+# endif
+                    )
+              {
+                /* The normal handling of the 's' directive below requires
+                   allocating a temporary buffer.  The determination of its
+                   length (tmp_length), in the case when a precision is
+                   specified, below requires a conversion between a char[]
+                   string and a wchar_t[] wide string.  It could be done, but
+                   we have no guarantee that the implementation of sprintf will
+                   use the exactly same algorithm.  Without this guarantee, it
+                   is possible to have buffer overrun bugs.  In order to avoid
+                   such bugs, we implement the entire processing of the 's'
+                   directive ourselves.  */
+                int flags = dp->flags;
+                int has_width;
+                size_t width;
+                int has_precision;
+                size_t precision;
+
+                has_width = 0;
+                width = 0;
+                if (dp->width_start != dp->width_end)
+                  {
+                    if (dp->width_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->width_arg_index].a.a_int;
+                        if (arg < 0)
+                          {
+                            /* "A negative field width is taken as a '-' flag
+                                followed by a positive field width."  */
+                            flags |= FLAG_LEFT;
+                            width = (unsigned int) (-arg);
+                          }
+                        else
+                          width = arg;
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->width_start;
+
+                        do
+                          width = xsum (xtimes (width, 10), *digitp++ - '0');
+                        while (digitp != dp->width_end);
+                      }
+                    has_width = 1;
+                  }
+
+                has_precision = 0;
+                precision = 6;
+                if (dp->precision_start != dp->precision_end)
+                  {
+                    if (dp->precision_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->precision_arg_index].a.a_int;
+                        /* "A negative precision is taken as if the precision
+                            were omitted."  */
+                        if (arg >= 0)
+                          {
+                            precision = arg;
+                            has_precision = 1;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->precision_start + 1;
+
+                        precision = 0;
+                        while (digitp != dp->precision_end)
+                          precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+                        has_precision = 1;
+                      }
+                  }
+
+# if WIDE_CHAR_VERSION
+                /* %s in vasnwprintf.  See the specification of fwprintf.  */
+                {
+                  const char *arg = a.arg[dp->arg_index].a.a_string;
+                  const char *arg_end;
+                  size_t characters;
+
+                  if (has_precision)
+                    {
+                      /* Use only as many bytes as needed to produce PRECISION
+                         wide characters, from the left.  */
+#  if HAVE_MBRTOWC
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#  endif
+                      arg_end = arg;
+                      characters = 0;
+                      for (; precision > 0; precision--)
+                        {
+                          int count;
+#  if HAVE_MBRTOWC
+                          count = mbrlen (arg_end, MB_CUR_MAX, &state);
+#  else
+                          count = mblen (arg_end, MB_CUR_MAX);
+#  endif
+                          if (count == 0)
+                            /* Found the terminating NUL.  */
+                            break;
+                          if (count < 0)
+                            {
+                              /* Invalid or incomplete multibyte character.  */
+                              if (!(result == resultbuf || result == NULL))
+                                free (result);
+                              if (buf_malloced != NULL)
+                                free (buf_malloced);
+                              CLEANUP ();
+                              errno = EILSEQ;
+                              return NULL;
+                            }
+                          arg_end += count;
+                          characters++;
+                        }
+                    }
+                  else if (has_width)
+                    {
+                      /* Use the entire string, and count the number of wide
+                         characters.  */
+#  if HAVE_MBRTOWC
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#  endif
+                      arg_end = arg;
+                      characters = 0;
+                      for (;;)
+                        {
+                          int count;
+#  if HAVE_MBRTOWC
+                          count = mbrlen (arg_end, MB_CUR_MAX, &state);
+#  else
+                          count = mblen (arg_end, MB_CUR_MAX);
+#  endif
+                          if (count == 0)
+                            /* Found the terminating NUL.  */
+                            break;
+                          if (count < 0)
+                            {
+                              /* Invalid or incomplete multibyte character.  */
+                              if (!(result == resultbuf || result == NULL))
+                                free (result);
+                              if (buf_malloced != NULL)
+                                free (buf_malloced);
+                              CLEANUP ();
+                              errno = EILSEQ;
+                              return NULL;
+                            }
+                          arg_end += count;
+                          characters++;
+                        }
+                    }
+                  else
+                    {
+                      /* Use the entire string.  */
+                      arg_end = arg + strlen (arg);
+                      /* The number of characters doesn't matter.  */
+                      characters = 0;
+                    }
+
+                  if (has_width && width > characters
+                      && !(dp->flags & FLAG_LEFT))
+                    {
+                      size_t n = width - characters;
+                      ENSURE_ALLOCATION (xsum (length, n));
+                      DCHAR_SET (result + length, ' ', n);
+                      length += n;
+                    }
+
+                  if (has_precision || has_width)
+                    {
+                      /* We know the number of wide characters in advance.  */
+                      size_t remaining;
+#  if HAVE_MBRTOWC
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#  endif
+                      ENSURE_ALLOCATION (xsum (length, characters));
+                      for (remaining = characters; remaining > 0; remaining--)
+                        {
+                          wchar_t wc;
+                          int count;
+#  if HAVE_MBRTOWC
+                          count = mbrtowc (&wc, arg, arg_end - arg, &state);
+#  else
+                          count = mbtowc (&wc, arg, arg_end - arg);
+#  endif
+                          if (count <= 0)
+                            /* mbrtowc not consistent with mbrlen, or mbtowc
+                               not consistent with mblen.  */
+                            abort ();
+                          result[length++] = wc;
+                          arg += count;
+                        }
+                      if (!(arg == arg_end))
+                        abort ();
+                    }
+                  else
+                    {
+#  if HAVE_MBRTOWC
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#  endif
+                      while (arg < arg_end)
+                        {
+                          wchar_t wc;
+                          int count;
+#  if HAVE_MBRTOWC
+                          count = mbrtowc (&wc, arg, arg_end - arg, &state);
+#  else
+                          count = mbtowc (&wc, arg, arg_end - arg);
+#  endif
+                          if (count <= 0)
+                            /* mbrtowc not consistent with mbrlen, or mbtowc
+                               not consistent with mblen.  */
+                            abort ();
+                          ENSURE_ALLOCATION (xsum (length, 1));
+                          result[length++] = wc;
+                          arg += count;
+                        }
+                    }
+
+                  if (has_width && width > characters
+                      && (dp->flags & FLAG_LEFT))
+                    {
+                      size_t n = width - characters;
+                      ENSURE_ALLOCATION (xsum (length, n));
+                      DCHAR_SET (result + length, ' ', n);
+                      length += n;
+                    }
+                }
+# else
+                /* %ls in vasnprintf.  See the specification of fprintf.  */
+                {
+                  const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string;
+                  const wchar_t *arg_end;
+                  size_t characters;
+#  if !DCHAR_IS_TCHAR
+                  /* This code assumes that TCHAR_T is 'char'.  */
+                  typedef int TCHAR_T_verify[2 * (sizeof (TCHAR_T) == 1) - 1];
+                  TCHAR_T *tmpsrc;
+                  DCHAR_T *tmpdst;
+                  size_t tmpdst_len;
+#  endif
+                  size_t w;
+
+                  if (has_precision)
+                    {
+                      /* Use only as many wide characters as needed to produce
+                         at most PRECISION bytes, from the left.  */
+#  if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#  endif
+                      arg_end = arg;
+                      characters = 0;
+                      while (precision > 0)
+                        {
+                          char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                          int count;
+
+                          if (*arg_end == 0)
+                            /* Found the terminating null wide character.  */
+                            break;
+#  if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                          count = wcrtomb (cbuf, *arg_end, &state);
+#  else
+                          count = wctomb (cbuf, *arg_end);
+#  endif
+                          if (count < 0)
+                            {
+                              /* Cannot convert.  */
+                              if (!(result == resultbuf || result == NULL))
+                                free (result);
+                              if (buf_malloced != NULL)
+                                free (buf_malloced);
+                              CLEANUP ();
+                              errno = EILSEQ;
+                              return NULL;
+                            }
+                          if (precision < count)
+                            break;
+                          arg_end++;
+                          characters += count;
+                          precision -= count;
+                        }
+                    }
+#  if DCHAR_IS_TCHAR
+                  else if (has_width)
+#  else
+                  else
+#  endif
+                    {
+                      /* Use the entire string, and count the number of
+                         bytes.  */
+#  if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#  endif
+                      arg_end = arg;
+                      characters = 0;
+                      for (;;)
+                        {
+                          char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                          int count;
+
+                          if (*arg_end == 0)
+                            /* Found the terminating null wide character.  */
+                            break;
+#  if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                          count = wcrtomb (cbuf, *arg_end, &state);
+#  else
+                          count = wctomb (cbuf, *arg_end);
+#  endif
+                          if (count < 0)
+                            {
+                              /* Cannot convert.  */
+                              if (!(result == resultbuf || result == NULL))
+                                free (result);
+                              if (buf_malloced != NULL)
+                                free (buf_malloced);
+                              CLEANUP ();
+                              errno = EILSEQ;
+                              return NULL;
+                            }
+                          arg_end++;
+                          characters += count;
+                        }
+                    }
+#  if DCHAR_IS_TCHAR
+                  else
+                    {
+                      /* Use the entire string.  */
+                      arg_end = arg + local_wcslen (arg);
+                      /* The number of bytes doesn't matter.  */
+                      characters = 0;
+                    }
+#  endif
+
+#  if !DCHAR_IS_TCHAR
+                  /* Convert the string into a piece of temporary memory.  */
+                  tmpsrc = (TCHAR_T *) malloc (characters * sizeof (TCHAR_T));
+                  if (tmpsrc == NULL)
+                    goto out_of_memory;
+                  {
+                    TCHAR_T *tmpptr = tmpsrc;
+                    size_t remaining;
+#   if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                    mbstate_t state;
+                    memset (&state, '\0', sizeof (mbstate_t));
+#   endif
+                    for (remaining = characters; remaining > 0; )
+                      {
+                        char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                        int count;
+
+                        if (*arg == 0)
+                          abort ();
+#   if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                        count = wcrtomb (cbuf, *arg, &state);
+#   else
+                        count = wctomb (cbuf, *arg);
+#   endif
+                        if (count <= 0)
+                          /* Inconsistency.  */
+                          abort ();
+                        memcpy (tmpptr, cbuf, count);
+                        tmpptr += count;
+                        arg++;
+                        remaining -= count;
+                      }
+                    if (!(arg == arg_end))
+                      abort ();
+                  }
+
+                  /* Convert from TCHAR_T[] to DCHAR_T[].  */
+                  tmpdst =
+                    DCHAR_CONV_FROM_ENCODING (locale_charset (),
+                                              iconveh_question_mark,
+                                              tmpsrc, characters,
+                                              NULL,
+                                              NULL, &tmpdst_len);
+                  if (tmpdst == NULL)
+                    {
+                      int saved_errno = errno;
+                      free (tmpsrc);
+                      if (!(result == resultbuf || result == NULL))
+                        free (result);
+                      if (buf_malloced != NULL)
+                        free (buf_malloced);
+                      CLEANUP ();
+                      errno = saved_errno;
+                      return NULL;
+                    }
+                  free (tmpsrc);
+#  endif
+
+                  if (has_width)
+                    {
+#  if ENABLE_UNISTDIO
+                      /* Outside POSIX, it's preferrable to compare the width
+                         against the number of _characters_ of the converted
+                         value.  */
+                      w = DCHAR_MBSNLEN (result + length, characters);
+#  else
+                      /* The width is compared against the number of _bytes_
+                         of the converted value, says POSIX.  */
+                      w = characters;
+#  endif
+                    }
+                  else
+                    /* w doesn't matter.  */
+                    w = 0;
+
+                  if (has_width && width > w
+                      && !(dp->flags & FLAG_LEFT))
+                    {
+                      size_t n = width - w;
+                      ENSURE_ALLOCATION (xsum (length, n));
+                      DCHAR_SET (result + length, ' ', n);
+                      length += n;
+                    }
+
+#  if DCHAR_IS_TCHAR
+                  if (has_precision || has_width)
+                    {
+                      /* We know the number of bytes in advance.  */
+                      size_t remaining;
+#   if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#   endif
+                      ENSURE_ALLOCATION (xsum (length, characters));
+                      for (remaining = characters; remaining > 0; )
+                        {
+                          char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                          int count;
+
+                          if (*arg == 0)
+                            abort ();
+#   if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                          count = wcrtomb (cbuf, *arg, &state);
+#   else
+                          count = wctomb (cbuf, *arg);
+#   endif
+                          if (count <= 0)
+                            /* Inconsistency.  */
+                            abort ();
+                          memcpy (result + length, cbuf, count);
+                          length += count;
+                          arg++;
+                          remaining -= count;
+                        }
+                      if (!(arg == arg_end))
+                        abort ();
+                    }
+                  else
+                    {
+#   if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#   endif
+                      while (arg < arg_end)
+                        {
+                          char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                          int count;
+
+                          if (*arg == 0)
+                            abort ();
+#   if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                          count = wcrtomb (cbuf, *arg, &state);
+#   else
+                          count = wctomb (cbuf, *arg);
+#   endif
+                          if (count <= 0)
+                            /* Inconsistency.  */
+                            abort ();
+                          ENSURE_ALLOCATION (xsum (length, count));
+                          memcpy (result + length, cbuf, count);
+                          length += count;
+                          arg++;
+                        }
+                    }
+#  else
+                  ENSURE_ALLOCATION (xsum (length, tmpdst_len));
+                  DCHAR_CPY (result + length, tmpdst, tmpdst_len);
+                  free (tmpdst);
+                  length += tmpdst_len;
+#  endif
+
+                  if (has_width && width > w
+                      && (dp->flags & FLAG_LEFT))
+                    {
+                      size_t n = width - w;
+                      ENSURE_ALLOCATION (xsum (length, n));
+                      DCHAR_SET (result + length, ' ', n);
+                      length += n;
+                    }
+                }
+              }
+# endif
+#endif
+#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL
+            else if ((dp->conversion == 'a' || dp->conversion == 'A')
+# if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE))
+                     && (0
+#  if NEED_PRINTF_DOUBLE
+                         || a.arg[dp->arg_index].type == TYPE_DOUBLE
+#  endif
+#  if NEED_PRINTF_LONG_DOUBLE
+                         || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
+#  endif
+                        )
+# endif
+                    )
+              {
+                arg_type type = a.arg[dp->arg_index].type;
+                int flags = dp->flags;
+                int has_width;
+                size_t width;
+                int has_precision;
+                size_t precision;
+                size_t tmp_length;
+                DCHAR_T tmpbuf[700];
+                DCHAR_T *tmp;
+                DCHAR_T *pad_ptr;
+                DCHAR_T *p;
+
+                has_width = 0;
+                width = 0;
+                if (dp->width_start != dp->width_end)
+                  {
+                    if (dp->width_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->width_arg_index].a.a_int;
+                        if (arg < 0)
+                          {
+                            /* "A negative field width is taken as a '-' flag
+                                followed by a positive field width."  */
+                            flags |= FLAG_LEFT;
+                            width = (unsigned int) (-arg);
+                          }
+                        else
+                          width = arg;
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->width_start;
+
+                        do
+                          width = xsum (xtimes (width, 10), *digitp++ - '0');
+                        while (digitp != dp->width_end);
+                      }
+                    has_width = 1;
+                  }
+
+                has_precision = 0;
+                precision = 0;
+                if (dp->precision_start != dp->precision_end)
+                  {
+                    if (dp->precision_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->precision_arg_index].a.a_int;
+                        /* "A negative precision is taken as if the precision
+                            were omitted."  */
+                        if (arg >= 0)
+                          {
+                            precision = arg;
+                            has_precision = 1;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->precision_start + 1;
+
+                        precision = 0;
+                        while (digitp != dp->precision_end)
+                          precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+                        has_precision = 1;
+                      }
+                  }
+
+                /* Allocate a temporary buffer of sufficient size.  */
+                if (type == TYPE_LONGDOUBLE)
+                  tmp_length =
+                    (unsigned int) ((LDBL_DIG + 1)
+                                    * 0.831 /* decimal -> hexadecimal */
+                                   )
+                    + 1; /* turn floor into ceil */
+                else
+                  tmp_length =
+                    (unsigned int) ((DBL_DIG + 1)
+                                    * 0.831 /* decimal -> hexadecimal */
+                                   )
+                    + 1; /* turn floor into ceil */
+                if (tmp_length < precision)
+                  tmp_length = precision;
+                /* Account for sign, decimal point etc. */
+                tmp_length = xsum (tmp_length, 12);
+
+                if (tmp_length < width)
+                  tmp_length = width;
+
+                tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
+
+                if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T))
+                  tmp = tmpbuf;
+                else
+                  {
+                    size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T));
+
+                    if (size_overflow_p (tmp_memsize))
+                      /* Overflow, would lead to out of memory.  */
+                      goto out_of_memory;
+                    tmp = (DCHAR_T *) malloc (tmp_memsize);
+                    if (tmp == NULL)
+                      /* Out of memory.  */
+                      goto out_of_memory;
+                  }
+
+                pad_ptr = NULL;
+                p = tmp;
+                if (type == TYPE_LONGDOUBLE)
+                  {
+# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE
+                    long double arg = a.arg[dp->arg_index].a.a_longdouble;
+
+                    if (isnanl (arg))
+                      {
+                        if (dp->conversion == 'A')
+                          {
+                            *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
+                          }
+                        else
+                          {
+                            *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
+                          }
+                      }
+                    else
+                      {
+                        int sign = 0;
+                        DECL_LONG_DOUBLE_ROUNDING
+
+                        BEGIN_LONG_DOUBLE_ROUNDING ();
+
+                        if (signbit (arg)) /* arg < 0.0L or negative zero */
+                          {
+                            sign = -1;
+                            arg = -arg;
+                          }
+
+                        if (sign < 0)
+                          *p++ = '-';
+                        else if (flags & FLAG_SHOWSIGN)
+                          *p++ = '+';
+                        else if (flags & FLAG_SPACE)
+                          *p++ = ' ';
+
+                        if (arg > 0.0L && arg + arg == arg)
+                          {
+                            if (dp->conversion == 'A')
+                              {
+                                *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
+                              }
+                            else
+                              {
+                                *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
+                              }
+                          }
+                        else
+                          {
+                            int exponent;
+                            long double mantissa;
+
+                            if (arg > 0.0L)
+                              mantissa = printf_frexpl (arg, &exponent);
+                            else
+                              {
+                                exponent = 0;
+                                mantissa = 0.0L;
+                              }
+
+                            if (has_precision
+                                && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1)
+                              {
+                                /* Round the mantissa.  */
+                                long double tail = mantissa;
+                                size_t q;
+
+                                for (q = precision; ; q--)
+                                  {
+                                    int digit = (int) tail;
+                                    tail -= digit;
+                                    if (q == 0)
+                                      {
+                                        if (digit & 1 ? tail >= 0.5L : tail > 0.5L)
+                                          tail = 1 - tail;
+                                        else
+                                          tail = - tail;
+                                        break;
+                                      }
+                                    tail *= 16.0L;
+                                  }
+                                if (tail != 0.0L)
+                                  for (q = precision; q > 0; q--)
+                                    tail *= 0.0625L;
+                                mantissa += tail;
+                              }
+
+                            *p++ = '0';
+                            *p++ = dp->conversion - 'A' + 'X';
+                            pad_ptr = p;
+                            {
+                              int digit;
+
+                              digit = (int) mantissa;
+                              mantissa -= digit;
+                              *p++ = '0' + digit;
+                              if ((flags & FLAG_ALT)
+                                  || mantissa > 0.0L || precision > 0)
+                                {
+                                  *p++ = decimal_point_char ();
+                                  /* This loop terminates because we assume
+                                     that FLT_RADIX is a power of 2.  */
+                                  while (mantissa > 0.0L)
+                                    {
+                                      mantissa *= 16.0L;
+                                      digit = (int) mantissa;
+                                      mantissa -= digit;
+                                      *p++ = digit
+                                             + (digit < 10
+                                                ? '0'
+                                                : dp->conversion - 10);
+                                      if (precision > 0)
+                                        precision--;
+                                    }
+                                  while (precision > 0)
+                                    {
+                                      *p++ = '0';
+                                      precision--;
+                                    }
+                                }
+                              }
+                              *p++ = dp->conversion - 'A' + 'P';
+#  if WIDE_CHAR_VERSION
+                              {
+                                static const wchar_t decimal_format[] =
+                                  { '%', '+', 'd', '\0' };
+                                SNPRINTF (p, 6 + 1, decimal_format, exponent);
+                              }
+                              while (*p != '\0')
+                                p++;
+#  else
+                              if (sizeof (DCHAR_T) == 1)
+                                {
+                                  sprintf ((char *) p, "%+d", exponent);
+                                  while (*p != '\0')
+                                    p++;
+                                }
+                              else
+                                {
+                                  char expbuf[6 + 1];
+                                  const char *ep;
+                                  sprintf (expbuf, "%+d", exponent);
+                                  for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+                                    p++;
+                                }
+#  endif
+                          }
+
+                        END_LONG_DOUBLE_ROUNDING ();
+                      }
+# else
+                    abort ();
+# endif
+                  }
+                else
+                  {
+# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE
+                    double arg = a.arg[dp->arg_index].a.a_double;
+
+                    if (isnand (arg))
+                      {
+                        if (dp->conversion == 'A')
+                          {
+                            *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
+                          }
+                        else
+                          {
+                            *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
+                          }
+                      }
+                    else
+                      {
+                        int sign = 0;
+
+                        if (signbit (arg)) /* arg < 0.0 or negative zero */
+                          {
+                            sign = -1;
+                            arg = -arg;
+                          }
+
+                        if (sign < 0)
+                          *p++ = '-';
+                        else if (flags & FLAG_SHOWSIGN)
+                          *p++ = '+';
+                        else if (flags & FLAG_SPACE)
+                          *p++ = ' ';
+
+                        if (arg > 0.0 && arg + arg == arg)
+                          {
+                            if (dp->conversion == 'A')
+                              {
+                                *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
+                              }
+                            else
+                              {
+                                *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
+                              }
+                          }
+                        else
+                          {
+                            int exponent;
+                            double mantissa;
+
+                            if (arg > 0.0)
+                              mantissa = printf_frexp (arg, &exponent);
+                            else
+                              {
+                                exponent = 0;
+                                mantissa = 0.0;
+                              }
+
+                            if (has_precision
+                                && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1)
+                              {
+                                /* Round the mantissa.  */
+                                double tail = mantissa;
+                                size_t q;
+
+                                for (q = precision; ; q--)
+                                  {
+                                    int digit = (int) tail;
+                                    tail -= digit;
+                                    if (q == 0)
+                                      {
+                                        if (digit & 1 ? tail >= 0.5 : tail > 0.5)
+                                          tail = 1 - tail;
+                                        else
+                                          tail = - tail;
+                                        break;
+                                      }
+                                    tail *= 16.0;
+                                  }
+                                if (tail != 0.0)
+                                  for (q = precision; q > 0; q--)
+                                    tail *= 0.0625;
+                                mantissa += tail;
+                              }
+
+                            *p++ = '0';
+                            *p++ = dp->conversion - 'A' + 'X';
+                            pad_ptr = p;
+                            {
+                              int digit;
+
+                              digit = (int) mantissa;
+                              mantissa -= digit;
+                              *p++ = '0' + digit;
+                              if ((flags & FLAG_ALT)
+                                  || mantissa > 0.0 || precision > 0)
+                                {
+                                  *p++ = decimal_point_char ();
+                                  /* This loop terminates because we assume
+                                     that FLT_RADIX is a power of 2.  */
+                                  while (mantissa > 0.0)
+                                    {
+                                      mantissa *= 16.0;
+                                      digit = (int) mantissa;
+                                      mantissa -= digit;
+                                      *p++ = digit
+                                             + (digit < 10
+                                                ? '0'
+                                                : dp->conversion - 10);
+                                      if (precision > 0)
+                                        precision--;
+                                    }
+                                  while (precision > 0)
+                                    {
+                                      *p++ = '0';
+                                      precision--;
+                                    }
+                                }
+                              }
+                              *p++ = dp->conversion - 'A' + 'P';
+#  if WIDE_CHAR_VERSION
+                              {
+                                static const wchar_t decimal_format[] =
+                                  { '%', '+', 'd', '\0' };
+                                SNPRINTF (p, 6 + 1, decimal_format, exponent);
+                              }
+                              while (*p != '\0')
+                                p++;
+#  else
+                              if (sizeof (DCHAR_T) == 1)
+                                {
+                                  sprintf ((char *) p, "%+d", exponent);
+                                  while (*p != '\0')
+                                    p++;
+                                }
+                              else
+                                {
+                                  char expbuf[6 + 1];
+                                  const char *ep;
+                                  sprintf (expbuf, "%+d", exponent);
+                                  for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+                                    p++;
+                                }
+#  endif
+                          }
+                      }
+# else
+                    abort ();
+# endif
+                  }
+                /* The generated string now extends from tmp to p, with the
+                   zero padding insertion point being at pad_ptr.  */
+                if (has_width && p - tmp < width)
+                  {
+                    size_t pad = width - (p - tmp);
+                    DCHAR_T *end = p + pad;
+
+                    if (flags & FLAG_LEFT)
+                      {
+                        /* Pad with spaces on the right.  */
+                        for (; pad > 0; pad--)
+                          *p++ = ' ';
+                      }
+                    else if ((flags & FLAG_ZERO) && pad_ptr != NULL)
+                      {
+                        /* Pad with zeroes.  */
+                        DCHAR_T *q = end;
+
+                        while (p > pad_ptr)
+                          *--q = *--p;
+                        for (; pad > 0; pad--)
+                          *p++ = '0';
+                      }
+                    else
+                      {
+                        /* Pad with spaces on the left.  */
+                        DCHAR_T *q = end;
+
+                        while (p > tmp)
+                          *--q = *--p;
+                        for (; pad > 0; pad--)
+                          *p++ = ' ';
+                      }
+
+                    p = end;
+                  }
+
+                {
+                  size_t count = p - tmp;
+
+                  if (count >= tmp_length)
+                    /* tmp_length was incorrectly calculated - fix the
+                       code above!  */
+                    abort ();
+
+                  /* Make room for the result.  */
+                  if (count >= allocated - length)
+                    {
+                      size_t n = xsum (length, count);
+
+                      ENSURE_ALLOCATION (n);
+                    }
+
+                  /* Append the result.  */
+                  memcpy (result + length, tmp, count * sizeof (DCHAR_T));
+                  if (tmp != tmpbuf)
+                    free (tmp);
+                  length += count;
+                }
+              }
+#endif
+#if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL
+            else if ((dp->conversion == 'f' || dp->conversion == 'F'
+                      || dp->conversion == 'e' || dp->conversion == 'E'
+                      || dp->conversion == 'g' || dp->conversion == 'G'
+                      || dp->conversion == 'a' || dp->conversion == 'A')
+                     && (0
+# if NEED_PRINTF_DOUBLE
+                         || a.arg[dp->arg_index].type == TYPE_DOUBLE
+# elif NEED_PRINTF_INFINITE_DOUBLE
+                         || (a.arg[dp->arg_index].type == TYPE_DOUBLE
+                             /* The systems (mingw) which produce wrong output
+                                for Inf, -Inf, and NaN also do so for -0.0.
+                                Therefore we treat this case here as well.  */
+                             && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double))
+# endif
+# if NEED_PRINTF_LONG_DOUBLE
+                         || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
+# elif NEED_PRINTF_INFINITE_LONG_DOUBLE
+                         || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
+                             /* Some systems produce wrong output for Inf,
+                                -Inf, and NaN.  Some systems in this category
+                                (IRIX 5.3) also do so for -0.0.  Therefore we
+                                treat this case here as well.  */
+                             && is_infinite_or_zerol (a.arg[dp->arg_index].a.a_longdouble))
+# endif
+                        ))
+              {
+# if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE)
+                arg_type type = a.arg[dp->arg_index].type;
+# endif
+                int flags = dp->flags;
+                int has_width;
+                size_t width;
+                int has_precision;
+                size_t precision;
+                size_t tmp_length;
+                DCHAR_T tmpbuf[700];
+                DCHAR_T *tmp;
+                DCHAR_T *pad_ptr;
+                DCHAR_T *p;
+
+                has_width = 0;
+                width = 0;
+                if (dp->width_start != dp->width_end)
+                  {
+                    if (dp->width_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->width_arg_index].a.a_int;
+                        if (arg < 0)
+                          {
+                            /* "A negative field width is taken as a '-' flag
+                                followed by a positive field width."  */
+                            flags |= FLAG_LEFT;
+                            width = (unsigned int) (-arg);
+                          }
+                        else
+                          width = arg;
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->width_start;
+
+                        do
+                          width = xsum (xtimes (width, 10), *digitp++ - '0');
+                        while (digitp != dp->width_end);
+                      }
+                    has_width = 1;
+                  }
+
+                has_precision = 0;
+                precision = 0;
+                if (dp->precision_start != dp->precision_end)
+                  {
+                    if (dp->precision_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->precision_arg_index].a.a_int;
+                        /* "A negative precision is taken as if the precision
+                            were omitted."  */
+                        if (arg >= 0)
+                          {
+                            precision = arg;
+                            has_precision = 1;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->precision_start + 1;
+
+                        precision = 0;
+                        while (digitp != dp->precision_end)
+                          precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+                        has_precision = 1;
+                      }
+                  }
+
+                /* POSIX specifies the default precision to be 6 for %f, %F,
+                   %e, %E, but not for %g, %G.  Implementations appear to use
+                   the same default precision also for %g, %G.  But for %a, %A,
+                   the default precision is 0.  */
+                if (!has_precision)
+                  if (!(dp->conversion == 'a' || dp->conversion == 'A'))
+                    precision = 6;
+
+                /* Allocate a temporary buffer of sufficient size.  */
+# if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE
+                tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1);
+# elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE
+                tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0);
+# elif NEED_PRINTF_LONG_DOUBLE
+                tmp_length = LDBL_DIG + 1;
+# elif NEED_PRINTF_DOUBLE
+                tmp_length = DBL_DIG + 1;
+# else
+                tmp_length = 0;
+# endif
+                if (tmp_length < precision)
+                  tmp_length = precision;
+# if NEED_PRINTF_LONG_DOUBLE
+#  if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
+                if (type == TYPE_LONGDOUBLE)
+#  endif
+                  if (dp->conversion == 'f' || dp->conversion == 'F')
+                    {
+                      long double arg = a.arg[dp->arg_index].a.a_longdouble;
+                      if (!(isnanl (arg) || arg + arg == arg))
+                        {
+                          /* arg is finite and nonzero.  */
+                          int exponent = floorlog10l (arg < 0 ? -arg : arg);
+                          if (exponent >= 0 && tmp_length < exponent + precision)
+                            tmp_length = exponent + precision;
+                        }
+                    }
+# endif
+# if NEED_PRINTF_DOUBLE
+#  if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE
+                if (type == TYPE_DOUBLE)
+#  endif
+                  if (dp->conversion == 'f' || dp->conversion == 'F')
+                    {
+                      double arg = a.arg[dp->arg_index].a.a_double;
+                      if (!(isnand (arg) || arg + arg == arg))
+                        {
+                          /* arg is finite and nonzero.  */
+                          int exponent = floorlog10 (arg < 0 ? -arg : arg);
+                          if (exponent >= 0 && tmp_length < exponent + precision)
+                            tmp_length = exponent + precision;
+                        }
+                    }
+# endif
+                /* Account for sign, decimal point etc. */
+                tmp_length = xsum (tmp_length, 12);
+
+                if (tmp_length < width)
+                  tmp_length = width;
+
+                tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
+
+                if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T))
+                  tmp = tmpbuf;
+                else
+                  {
+                    size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T));
+
+                    if (size_overflow_p (tmp_memsize))
+                      /* Overflow, would lead to out of memory.  */
+                      goto out_of_memory;
+                    tmp = (DCHAR_T *) malloc (tmp_memsize);
+                    if (tmp == NULL)
+                      /* Out of memory.  */
+                      goto out_of_memory;
+                  }
+
+                pad_ptr = NULL;
+                p = tmp;
+
+# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE
+#  if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
+                if (type == TYPE_LONGDOUBLE)
+#  endif
+                  {
+                    long double arg = a.arg[dp->arg_index].a.a_longdouble;
+
+                    if (isnanl (arg))
+                      {
+                        if (dp->conversion >= 'A' && dp->conversion <= 'Z')
+                          {
+                            *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
+                          }
+                        else
+                          {
+                            *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
+                          }
+                      }
+                    else
+                      {
+                        int sign = 0;
+                        DECL_LONG_DOUBLE_ROUNDING
+
+                        BEGIN_LONG_DOUBLE_ROUNDING ();
+
+                        if (signbit (arg)) /* arg < 0.0L or negative zero */
+                          {
+                            sign = -1;
+                            arg = -arg;
+                          }
+
+                        if (sign < 0)
+                          *p++ = '-';
+                        else if (flags & FLAG_SHOWSIGN)
+                          *p++ = '+';
+                        else if (flags & FLAG_SPACE)
+                          *p++ = ' ';
+
+                        if (arg > 0.0L && arg + arg == arg)
+                          {
+                            if (dp->conversion >= 'A' && dp->conversion <= 'Z')
+                              {
+                                *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
+                              }
+                            else
+                              {
+                                *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
+                              }
+                          }
+                        else
+                          {
+#  if NEED_PRINTF_LONG_DOUBLE
+                            pad_ptr = p;
+
+                            if (dp->conversion == 'f' || dp->conversion == 'F')
+                              {
+                                char *digits;
+                                size_t ndigits;
+
+                                digits =
+                                  scale10_round_decimal_long_double (arg, precision);
+                                if (digits == NULL)
+                                  {
+                                    END_LONG_DOUBLE_ROUNDING ();
+                                    goto out_of_memory;
+                                  }
+                                ndigits = strlen (digits);
+
+                                if (ndigits > precision)
+                                  do
+                                    {
+                                      --ndigits;
+                                      *p++ = digits[ndigits];
+                                    }
+                                  while (ndigits > precision);
+                                else
+                                  *p++ = '0';
+                                /* Here ndigits <= precision.  */
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > ndigits; precision--)
+                                      *p++ = '0';
+                                    while (ndigits > 0)
+                                      {
+                                        --ndigits;
+                                        *p++ = digits[ndigits];
+                                      }
+                                  }
+
+                                free (digits);
+                              }
+                            else if (dp->conversion == 'e' || dp->conversion == 'E')
+                              {
+                                int exponent;
+
+                                if (arg == 0.0L)
+                                  {
+                                    exponent = 0;
+                                    *p++ = '0';
+                                    if ((flags & FLAG_ALT) || precision > 0)
+                                      {
+                                        *p++ = decimal_point_char ();
+                                        for (; precision > 0; precision--)
+                                          *p++ = '0';
+                                      }
+                                  }
+                                else
+                                  {
+                                    /* arg > 0.0L.  */
+                                    int adjusted;
+                                    char *digits;
+                                    size_t ndigits;
+
+                                    exponent = floorlog10l (arg);
+                                    adjusted = 0;
+                                    for (;;)
+                                      {
+                                        digits =
+                                          scale10_round_decimal_long_double (arg,
+                                                                             (int)precision - exponent);
+                                        if (digits == NULL)
+                                          {
+                                            END_LONG_DOUBLE_ROUNDING ();
+                                            goto out_of_memory;
+                                          }
+                                        ndigits = strlen (digits);
+
+                                        if (ndigits == precision + 1)
+                                          break;
+                                        if (ndigits < precision
+                                            || ndigits > precision + 2)
+                                          /* The exponent was not guessed
+                                             precisely enough.  */
+                                          abort ();
+                                        if (adjusted)
+                                          /* None of two values of exponent is
+                                             the right one.  Prevent an endless
+                                             loop.  */
+                                          abort ();
+                                        free (digits);
+                                        if (ndigits == precision)
+                                          exponent -= 1;
+                                        else
+                                          exponent += 1;
+                                        adjusted = 1;
+                                      }
+                                    /* Here ndigits = precision+1.  */
+                                    if (is_borderline (digits, precision))
+                                      {
+                                        /* Maybe the exponent guess was too high
+                                           and a smaller exponent can be reached
+                                           by turning a 10...0 into 9...9x.  */
+                                        char *digits2 =
+                                          scale10_round_decimal_long_double (arg,
+                                                                             (int)precision - exponent + 1);
+                                        if (digits2 == NULL)
+                                          {
+                                            free (digits);
+                                            END_LONG_DOUBLE_ROUNDING ();
+                                            goto out_of_memory;
+                                          }
+                                        if (strlen (digits2) == precision + 1)
+                                          {
+                                            free (digits);
+                                            digits = digits2;
+                                            exponent -= 1;
+                                          }
+                                        else
+                                          free (digits2);
+                                      }
+                                    /* Here ndigits = precision+1.  */
+
+                                    *p++ = digits[--ndigits];
+                                    if ((flags & FLAG_ALT) || precision > 0)
+                                      {
+                                        *p++ = decimal_point_char ();
+                                        while (ndigits > 0)
+                                          {
+                                            --ndigits;
+                                            *p++ = digits[ndigits];
+                                          }
+                                      }
+
+                                    free (digits);
+                                  }
+
+                                *p++ = dp->conversion; /* 'e' or 'E' */
+#   if WIDE_CHAR_VERSION
+                                {
+                                  static const wchar_t decimal_format[] =
+                                    { '%', '+', '.', '2', 'd', '\0' };
+                                  SNPRINTF (p, 6 + 1, decimal_format, exponent);
+                                }
+                                while (*p != '\0')
+                                  p++;
+#   else
+                                if (sizeof (DCHAR_T) == 1)
+                                  {
+                                    sprintf ((char *) p, "%+.2d", exponent);
+                                    while (*p != '\0')
+                                      p++;
+                                  }
+                                else
+                                  {
+                                    char expbuf[6 + 1];
+                                    const char *ep;
+                                    sprintf (expbuf, "%+.2d", exponent);
+                                    for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+                                      p++;
+                                  }
+#   endif
+                              }
+                            else if (dp->conversion == 'g' || dp->conversion == 'G')
+                              {
+                                if (precision == 0)
+                                  precision = 1;
+                                /* precision >= 1.  */
+
+                                if (arg == 0.0L)
+                                  /* The exponent is 0, >= -4, < precision.
+                                     Use fixed-point notation.  */
+                                  {
+                                    size_t ndigits = precision;
+                                    /* Number of trailing zeroes that have to be
+                                       dropped.  */
+                                    size_t nzeroes =
+                                      (flags & FLAG_ALT ? 0 : precision - 1);
+
+                                    --ndigits;
+                                    *p++ = '0';
+                                    if ((flags & FLAG_ALT) || ndigits > nzeroes)
+                                      {
+                                        *p++ = decimal_point_char ();
+                                        while (ndigits > nzeroes)
+                                          {
+                                            --ndigits;
+                                            *p++ = '0';
+                                          }
+                                      }
+                                  }
+                                else
+                                  {
+                                    /* arg > 0.0L.  */
+                                    int exponent;
+                                    int adjusted;
+                                    char *digits;
+                                    size_t ndigits;
+                                    size_t nzeroes;
+
+                                    exponent = floorlog10l (arg);
+                                    adjusted = 0;
+                                    for (;;)
+                                      {
+                                        digits =
+                                          scale10_round_decimal_long_double (arg,
+                                                                             (int)(precision - 1) - exponent);
+                                        if (digits == NULL)
+                                          {
+                                            END_LONG_DOUBLE_ROUNDING ();
+                                            goto out_of_memory;
+                                          }
+                                        ndigits = strlen (digits);
+
+                                        if (ndigits == precision)
+                                          break;
+                                        if (ndigits < precision - 1
+                                            || ndigits > precision + 1)
+                                          /* The exponent was not guessed
+                                             precisely enough.  */
+                                          abort ();
+                                        if (adjusted)
+                                          /* None of two values of exponent is
+                                             the right one.  Prevent an endless
+                                             loop.  */
+                                          abort ();
+                                        free (digits);
+                                        if (ndigits < precision)
+                                          exponent -= 1;
+                                        else
+                                          exponent += 1;
+                                        adjusted = 1;
+                                      }
+                                    /* Here ndigits = precision.  */
+                                    if (is_borderline (digits, precision - 1))
+                                      {
+                                        /* Maybe the exponent guess was too high
+                                           and a smaller exponent can be reached
+                                           by turning a 10...0 into 9...9x.  */
+                                        char *digits2 =
+                                          scale10_round_decimal_long_double (arg,
+                                                                             (int)(precision - 1) - exponent + 1);
+                                        if (digits2 == NULL)
+                                          {
+                                            free (digits);
+                                            END_LONG_DOUBLE_ROUNDING ();
+                                            goto out_of_memory;
+                                          }
+                                        if (strlen (digits2) == precision)
+                                          {
+                                            free (digits);
+                                            digits = digits2;
+                                            exponent -= 1;
+                                          }
+                                        else
+                                          free (digits2);
+                                      }
+                                    /* Here ndigits = precision.  */
+
+                                    /* Determine the number of trailing zeroes
+                                       that have to be dropped.  */
+                                    nzeroes = 0;
+                                    if ((flags & FLAG_ALT) == 0)
+                                      while (nzeroes < ndigits
+                                             && digits[nzeroes] == '0')
+                                        nzeroes++;
+
+                                    /* The exponent is now determined.  */
+                                    if (exponent >= -4
+                                        && exponent < (long)precision)
+                                      {
+                                        /* Fixed-point notation:
+                                           max(exponent,0)+1 digits, then the
+                                           decimal point, then the remaining
+                                           digits without trailing zeroes.  */
+                                        if (exponent >= 0)
+                                          {
+                                            size_t count = exponent + 1;
+                                            /* Note: count <= precision = ndigits.  */
+                                            for (; count > 0; count--)
+                                              *p++ = digits[--ndigits];
+                                            if ((flags & FLAG_ALT) || ndigits > nzeroes)
+                                              {
+                                                *p++ = decimal_point_char ();
+                                                while (ndigits > nzeroes)
+                                                  {
+                                                    --ndigits;
+                                                    *p++ = digits[ndigits];
+                                                  }
+                                              }
+                                          }
+                                        else
+                                          {
+                                            size_t count = -exponent - 1;
+                                            *p++ = '0';
+                                            *p++ = decimal_point_char ();
+                                            for (; count > 0; count--)
+                                              *p++ = '0';
+                                            while (ndigits > nzeroes)
+                                              {
+                                                --ndigits;
+                                                *p++ = digits[ndigits];
+                                              }
+                                          }
+                                      }
+                                    else
+                                      {
+                                        /* Exponential notation.  */
+                                        *p++ = digits[--ndigits];
+                                        if ((flags & FLAG_ALT) || ndigits > nzeroes)
+                                          {
+                                            *p++ = decimal_point_char ();
+                                            while (ndigits > nzeroes)
+                                              {
+                                                --ndigits;
+                                                *p++ = digits[ndigits];
+                                              }
+                                          }
+                                        *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */
+#   if WIDE_CHAR_VERSION
+                                        {
+                                          static const wchar_t decimal_format[] =
+                                            { '%', '+', '.', '2', 'd', '\0' };
+                                          SNPRINTF (p, 6 + 1, decimal_format, exponent);
+                                        }
+                                        while (*p != '\0')
+                                          p++;
+#   else
+                                        if (sizeof (DCHAR_T) == 1)
+                                          {
+                                            sprintf ((char *) p, "%+.2d", exponent);
+                                            while (*p != '\0')
+                                              p++;
+                                          }
+                                        else
+                                          {
+                                            char expbuf[6 + 1];
+                                            const char *ep;
+                                            sprintf (expbuf, "%+.2d", exponent);
+                                            for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+                                              p++;
+                                          }
+#   endif
+                                      }
+
+                                    free (digits);
+                                  }
+                              }
+                            else
+                              abort ();
+#  else
+                            /* arg is finite.  */
+                            if (!(arg == 0.0L))
+                              abort ();
+
+                            pad_ptr = p;
+
+                            if (dp->conversion == 'f' || dp->conversion == 'F')
+                              {
+                                *p++ = '0';
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > 0; precision--)
+                                      *p++ = '0';
+                                  }
+                              }
+                            else if (dp->conversion == 'e' || dp->conversion == 'E')
+                              {
+                                *p++ = '0';
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > 0; precision--)
+                                      *p++ = '0';
+                                  }
+                                *p++ = dp->conversion; /* 'e' or 'E' */
+                                *p++ = '+';
+                                *p++ = '0';
+                                *p++ = '0';
+                              }
+                            else if (dp->conversion == 'g' || dp->conversion == 'G')
+                              {
+                                *p++ = '0';
+                                if (flags & FLAG_ALT)
+                                  {
+                                    size_t ndigits =
+                                      (precision > 0 ? precision - 1 : 0);
+                                    *p++ = decimal_point_char ();
+                                    for (; ndigits > 0; --ndigits)
+                                      *p++ = '0';
+                                  }
+                              }
+                            else if (dp->conversion == 'a' || dp->conversion == 'A')
+                              {
+                                *p++ = '0';
+                                *p++ = dp->conversion - 'A' + 'X';
+                                pad_ptr = p;
+                                *p++ = '0';
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > 0; precision--)
+                                      *p++ = '0';
+                                  }
+                                *p++ = dp->conversion - 'A' + 'P';
+                                *p++ = '+';
+                                *p++ = '0';
+                              }
+                            else
+                              abort ();
+#  endif
+                          }
+
+                        END_LONG_DOUBLE_ROUNDING ();
+                      }
+                  }
+#  if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
+                else
+#  endif
+# endif
+# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
+                  {
+                    double arg = a.arg[dp->arg_index].a.a_double;
+
+                    if (isnand (arg))
+                      {
+                        if (dp->conversion >= 'A' && dp->conversion <= 'Z')
+                          {
+                            *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
+                          }
+                        else
+                          {
+                            *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
+                          }
+                      }
+                    else
+                      {
+                        int sign = 0;
+
+                        if (signbit (arg)) /* arg < 0.0 or negative zero */
+                          {
+                            sign = -1;
+                            arg = -arg;
+                          }
+
+                        if (sign < 0)
+                          *p++ = '-';
+                        else if (flags & FLAG_SHOWSIGN)
+                          *p++ = '+';
+                        else if (flags & FLAG_SPACE)
+                          *p++ = ' ';
+
+                        if (arg > 0.0 && arg + arg == arg)
+                          {
+                            if (dp->conversion >= 'A' && dp->conversion <= 'Z')
+                              {
+                                *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
+                              }
+                            else
+                              {
+                                *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
+                              }
+                          }
+                        else
+                          {
+#  if NEED_PRINTF_DOUBLE
+                            pad_ptr = p;
+
+                            if (dp->conversion == 'f' || dp->conversion == 'F')
+                              {
+                                char *digits;
+                                size_t ndigits;
+
+                                digits =
+                                  scale10_round_decimal_double (arg, precision);
+                                if (digits == NULL)
+                                  goto out_of_memory;
+                                ndigits = strlen (digits);
+
+                                if (ndigits > precision)
+                                  do
+                                    {
+                                      --ndigits;
+                                      *p++ = digits[ndigits];
+                                    }
+                                  while (ndigits > precision);
+                                else
+                                  *p++ = '0';
+                                /* Here ndigits <= precision.  */
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > ndigits; precision--)
+                                      *p++ = '0';
+                                    while (ndigits > 0)
+                                      {
+                                        --ndigits;
+                                        *p++ = digits[ndigits];
+                                      }
+                                  }
+
+                                free (digits);
+                              }
+                            else if (dp->conversion == 'e' || dp->conversion == 'E')
+                              {
+                                int exponent;
+
+                                if (arg == 0.0)
+                                  {
+                                    exponent = 0;
+                                    *p++ = '0';
+                                    if ((flags & FLAG_ALT) || precision > 0)
+                                      {
+                                        *p++ = decimal_point_char ();
+                                        for (; precision > 0; precision--)
+                                          *p++ = '0';
+                                      }
+                                  }
+                                else
+                                  {
+                                    /* arg > 0.0.  */
+                                    int adjusted;
+                                    char *digits;
+                                    size_t ndigits;
+
+                                    exponent = floorlog10 (arg);
+                                    adjusted = 0;
+                                    for (;;)
+                                      {
+                                        digits =
+                                          scale10_round_decimal_double (arg,
+                                                                        (int)precision - exponent);
+                                        if (digits == NULL)
+                                          goto out_of_memory;
+                                        ndigits = strlen (digits);
+
+                                        if (ndigits == precision + 1)
+                                          break;
+                                        if (ndigits < precision
+                                            || ndigits > precision + 2)
+                                          /* The exponent was not guessed
+                                             precisely enough.  */
+                                          abort ();
+                                        if (adjusted)
+                                          /* None of two values of exponent is
+                                             the right one.  Prevent an endless
+                                             loop.  */
+                                          abort ();
+                                        free (digits);
+                                        if (ndigits == precision)
+                                          exponent -= 1;
+                                        else
+                                          exponent += 1;
+                                        adjusted = 1;
+                                      }
+                                    /* Here ndigits = precision+1.  */
+                                    if (is_borderline (digits, precision))
+                                      {
+                                        /* Maybe the exponent guess was too high
+                                           and a smaller exponent can be reached
+                                           by turning a 10...0 into 9...9x.  */
+                                        char *digits2 =
+                                          scale10_round_decimal_double (arg,
+                                                                        (int)precision - exponent + 1);
+                                        if (digits2 == NULL)
+                                          {
+                                            free (digits);
+                                            goto out_of_memory;
+                                          }
+                                        if (strlen (digits2) == precision + 1)
+                                          {
+                                            free (digits);
+                                            digits = digits2;
+                                            exponent -= 1;
+                                          }
+                                        else
+                                          free (digits2);
+                                      }
+                                    /* Here ndigits = precision+1.  */
+
+                                    *p++ = digits[--ndigits];
+                                    if ((flags & FLAG_ALT) || precision > 0)
+                                      {
+                                        *p++ = decimal_point_char ();
+                                        while (ndigits > 0)
+                                          {
+                                            --ndigits;
+                                            *p++ = digits[ndigits];
+                                          }
+                                      }
+
+                                    free (digits);
+                                  }
+
+                                *p++ = dp->conversion; /* 'e' or 'E' */
+#   if WIDE_CHAR_VERSION
+                                {
+                                  static const wchar_t decimal_format[] =
+                                    /* Produce the same number of exponent digits
+                                       as the native printf implementation.  */
+#    if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+                                    { '%', '+', '.', '3', 'd', '\0' };
+#    else
+                                    { '%', '+', '.', '2', 'd', '\0' };
+#    endif
+                                  SNPRINTF (p, 6 + 1, decimal_format, exponent);
+                                }
+                                while (*p != '\0')
+                                  p++;
+#   else
+                                {
+                                  static const char decimal_format[] =
+                                    /* Produce the same number of exponent digits
+                                       as the native printf implementation.  */
+#    if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+                                    "%+.3d";
+#    else
+                                    "%+.2d";
+#    endif
+                                  if (sizeof (DCHAR_T) == 1)
+                                    {
+                                      sprintf ((char *) p, decimal_format, exponent);
+                                      while (*p != '\0')
+                                        p++;
+                                    }
+                                  else
+                                    {
+                                      char expbuf[6 + 1];
+                                      const char *ep;
+                                      sprintf (expbuf, decimal_format, exponent);
+                                      for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+                                        p++;
+                                    }
+                                }
+#   endif
+                              }
+                            else if (dp->conversion == 'g' || dp->conversion == 'G')
+                              {
+                                if (precision == 0)
+                                  precision = 1;
+                                /* precision >= 1.  */
+
+                                if (arg == 0.0)
+                                  /* The exponent is 0, >= -4, < precision.
+                                     Use fixed-point notation.  */
+                                  {
+                                    size_t ndigits = precision;
+                                    /* Number of trailing zeroes that have to be
+                                       dropped.  */
+                                    size_t nzeroes =
+                                      (flags & FLAG_ALT ? 0 : precision - 1);
+
+                                    --ndigits;
+                                    *p++ = '0';
+                                    if ((flags & FLAG_ALT) || ndigits > nzeroes)
+                                      {
+                                        *p++ = decimal_point_char ();
+                                        while (ndigits > nzeroes)
+                                          {
+                                            --ndigits;
+                                            *p++ = '0';
+                                          }
+                                      }
+                                  }
+                                else
+                                  {
+                                    /* arg > 0.0.  */
+                                    int exponent;
+                                    int adjusted;
+                                    char *digits;
+                                    size_t ndigits;
+                                    size_t nzeroes;
+
+                                    exponent = floorlog10 (arg);
+                                    adjusted = 0;
+                                    for (;;)
+                                      {
+                                        digits =
+                                          scale10_round_decimal_double (arg,
+                                                                        (int)(precision - 1) - exponent);
+                                        if (digits == NULL)
+                                          goto out_of_memory;
+                                        ndigits = strlen (digits);
+
+                                        if (ndigits == precision)
+                                          break;
+                                        if (ndigits < precision - 1
+                                            || ndigits > precision + 1)
+                                          /* The exponent was not guessed
+                                             precisely enough.  */
+                                          abort ();
+                                        if (adjusted)
+                                          /* None of two values of exponent is
+                                             the right one.  Prevent an endless
+                                             loop.  */
+                                          abort ();
+                                        free (digits);
+                                        if (ndigits < precision)
+                                          exponent -= 1;
+                                        else
+                                          exponent += 1;
+                                        adjusted = 1;
+                                      }
+                                    /* Here ndigits = precision.  */
+                                    if (is_borderline (digits, precision - 1))
+                                      {
+                                        /* Maybe the exponent guess was too high
+                                           and a smaller exponent can be reached
+                                           by turning a 10...0 into 9...9x.  */
+                                        char *digits2 =
+                                          scale10_round_decimal_double (arg,
+                                                                        (int)(precision - 1) - exponent + 1);
+                                        if (digits2 == NULL)
+                                          {
+                                            free (digits);
+                                            goto out_of_memory;
+                                          }
+                                        if (strlen (digits2) == precision)
+                                          {
+                                            free (digits);
+                                            digits = digits2;
+                                            exponent -= 1;
+                                          }
+                                        else
+                                          free (digits2);
+                                      }
+                                    /* Here ndigits = precision.  */
+
+                                    /* Determine the number of trailing zeroes
+                                       that have to be dropped.  */
+                                    nzeroes = 0;
+                                    if ((flags & FLAG_ALT) == 0)
+                                      while (nzeroes < ndigits
+                                             && digits[nzeroes] == '0')
+                                        nzeroes++;
+
+                                    /* The exponent is now determined.  */
+                                    if (exponent >= -4
+                                        && exponent < (long)precision)
+                                      {
+                                        /* Fixed-point notation:
+                                           max(exponent,0)+1 digits, then the
+                                           decimal point, then the remaining
+                                           digits without trailing zeroes.  */
+                                        if (exponent >= 0)
+                                          {
+                                            size_t count = exponent + 1;
+                                            /* Note: count <= precision = ndigits.  */
+                                            for (; count > 0; count--)
+                                              *p++ = digits[--ndigits];
+                                            if ((flags & FLAG_ALT) || ndigits > nzeroes)
+                                              {
+                                                *p++ = decimal_point_char ();
+                                                while (ndigits > nzeroes)
+                                                  {
+                                                    --ndigits;
+                                                    *p++ = digits[ndigits];
+                                                  }
+                                              }
+                                          }
+                                        else
+                                          {
+                                            size_t count = -exponent - 1;
+                                            *p++ = '0';
+                                            *p++ = decimal_point_char ();
+                                            for (; count > 0; count--)
+                                              *p++ = '0';
+                                            while (ndigits > nzeroes)
+                                              {
+                                                --ndigits;
+                                                *p++ = digits[ndigits];
+                                              }
+                                          }
+                                      }
+                                    else
+                                      {
+                                        /* Exponential notation.  */
+                                        *p++ = digits[--ndigits];
+                                        if ((flags & FLAG_ALT) || ndigits > nzeroes)
+                                          {
+                                            *p++ = decimal_point_char ();
+                                            while (ndigits > nzeroes)
+                                              {
+                                                --ndigits;
+                                                *p++ = digits[ndigits];
+                                              }
+                                          }
+                                        *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */
+#   if WIDE_CHAR_VERSION
+                                        {
+                                          static const wchar_t decimal_format[] =
+                                            /* Produce the same number of exponent digits
+                                               as the native printf implementation.  */
+#    if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+                                            { '%', '+', '.', '3', 'd', '\0' };
+#    else
+                                            { '%', '+', '.', '2', 'd', '\0' };
+#    endif
+                                          SNPRINTF (p, 6 + 1, decimal_format, exponent);
+                                        }
+                                        while (*p != '\0')
+                                          p++;
+#   else
+                                        {
+                                          static const char decimal_format[] =
+                                            /* Produce the same number of exponent digits
+                                               as the native printf implementation.  */
+#    if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+                                            "%+.3d";
+#    else
+                                            "%+.2d";
+#    endif
+                                          if (sizeof (DCHAR_T) == 1)
+                                            {
+                                              sprintf ((char *) p, decimal_format, exponent);
+                                              while (*p != '\0')
+                                                p++;
+                                            }
+                                          else
+                                            {
+                                              char expbuf[6 + 1];
+                                              const char *ep;
+                                              sprintf (expbuf, decimal_format, exponent);
+                                              for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+                                                p++;
+                                            }
+                                        }
+#   endif
+                                      }
+
+                                    free (digits);
+                                  }
+                              }
+                            else
+                              abort ();
+#  else
+                            /* arg is finite.  */
+                            if (!(arg == 0.0))
+                              abort ();
+
+                            pad_ptr = p;
+
+                            if (dp->conversion == 'f' || dp->conversion == 'F')
+                              {
+                                *p++ = '0';
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > 0; precision--)
+                                      *p++ = '0';
+                                  }
+                              }
+                            else if (dp->conversion == 'e' || dp->conversion == 'E')
+                              {
+                                *p++ = '0';
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > 0; precision--)
+                                      *p++ = '0';
+                                  }
+                                *p++ = dp->conversion; /* 'e' or 'E' */
+                                *p++ = '+';
+                                /* Produce the same number of exponent digits as
+                                   the native printf implementation.  */
+#   if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+                                *p++ = '0';
+#   endif
+                                *p++ = '0';
+                                *p++ = '0';
+                              }
+                            else if (dp->conversion == 'g' || dp->conversion == 'G')
+                              {
+                                *p++ = '0';
+                                if (flags & FLAG_ALT)
+                                  {
+                                    size_t ndigits =
+                                      (precision > 0 ? precision - 1 : 0);
+                                    *p++ = decimal_point_char ();
+                                    for (; ndigits > 0; --ndigits)
+                                      *p++ = '0';
+                                  }
+                              }
+                            else
+                              abort ();
+#  endif
+                          }
+                      }
+                  }
+# endif
+
+                /* The generated string now extends from tmp to p, with the
+                   zero padding insertion point being at pad_ptr.  */
+                if (has_width && p - tmp < width)
+                  {
+                    size_t pad = width - (p - tmp);
+                    DCHAR_T *end = p + pad;
+
+                    if (flags & FLAG_LEFT)
+                      {
+                        /* Pad with spaces on the right.  */
+                        for (; pad > 0; pad--)
+                          *p++ = ' ';
+                      }
+                    else if ((flags & FLAG_ZERO) && pad_ptr != NULL)
+                      {
+                        /* Pad with zeroes.  */
+                        DCHAR_T *q = end;
+
+                        while (p > pad_ptr)
+                          *--q = *--p;
+                        for (; pad > 0; pad--)
+                          *p++ = '0';
+                      }
+                    else
+                      {
+                        /* Pad with spaces on the left.  */
+                        DCHAR_T *q = end;
+
+                        while (p > tmp)
+                          *--q = *--p;
+                        for (; pad > 0; pad--)
+                          *p++ = ' ';
+                      }
+
+                    p = end;
+                  }
+
+                {
+                  size_t count = p - tmp;
+
+                  if (count >= tmp_length)
+                    /* tmp_length was incorrectly calculated - fix the
+                       code above!  */
+                    abort ();
+
+                  /* Make room for the result.  */
+                  if (count >= allocated - length)
+                    {
+                      size_t n = xsum (length, count);
+
+                      ENSURE_ALLOCATION (n);
+                    }
+
+                  /* Append the result.  */
+                  memcpy (result + length, tmp, count * sizeof (DCHAR_T));
+                  if (tmp != tmpbuf)
+                    free (tmp);
+                  length += count;
+                }
+              }
+#endif
+            else
+              {
+                arg_type type = a.arg[dp->arg_index].type;
+                int flags = dp->flags;
+#if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+                int has_width;
+                size_t width;
+#endif
+#if !USE_SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION
+                int has_precision;
+                size_t precision;
+#endif
+#if NEED_PRINTF_UNBOUNDED_PRECISION
+                int prec_ourselves;
+#else
+#               define prec_ourselves 0
+#endif
+#if NEED_PRINTF_FLAG_LEFTADJUST
+#               define pad_ourselves 1
+#elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+                int pad_ourselves;
+#else
+#               define pad_ourselves 0
+#endif
+                TCHAR_T *fbp;
+                unsigned int prefix_count;
+                int prefixes[2] IF_LINT (= { 0 });
+#if !USE_SNPRINTF
+                size_t tmp_length;
+                TCHAR_T tmpbuf[700];
+                TCHAR_T *tmp;
+#endif
+
+#if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+                has_width = 0;
+                width = 0;
+                if (dp->width_start != dp->width_end)
+                  {
+                    if (dp->width_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->width_arg_index].a.a_int;
+                        if (arg < 0)
+                          {
+                            /* "A negative field width is taken as a '-' flag
+                                followed by a positive field width."  */
+                            flags |= FLAG_LEFT;
+                            width = (unsigned int) (-arg);
+                          }
+                        else
+                          width = arg;
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->width_start;
+
+                        do
+                          width = xsum (xtimes (width, 10), *digitp++ - '0');
+                        while (digitp != dp->width_end);
+                      }
+                    has_width = 1;
+                  }
+#endif
+
+#if !USE_SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION
+                has_precision = 0;
+                precision = 6;
+                if (dp->precision_start != dp->precision_end)
+                  {
+                    if (dp->precision_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->precision_arg_index].a.a_int;
+                        /* "A negative precision is taken as if the precision
+                            were omitted."  */
+                        if (arg >= 0)
+                          {
+                            precision = arg;
+                            has_precision = 1;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->precision_start + 1;
+
+                        precision = 0;
+                        while (digitp != dp->precision_end)
+                          precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+                        has_precision = 1;
+                      }
+                  }
+#endif
+
+                /* Decide whether to handle the precision ourselves.  */
+#if NEED_PRINTF_UNBOUNDED_PRECISION
+                switch (dp->conversion)
+                  {
+                  case 'd': case 'i': case 'u':
+                  case 'o':
+                  case 'x': case 'X': case 'p':
+                    prec_ourselves = has_precision && (precision > 0);
+                    break;
+                  default:
+                    prec_ourselves = 0;
+                    break;
+                  }
+#endif
+
+                /* Decide whether to perform the padding ourselves.  */
+#if !NEED_PRINTF_FLAG_LEFTADJUST && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION)
+                switch (dp->conversion)
+                  {
+# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO
+                  /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need
+                     to perform the padding after this conversion.  Functions
+                     with unistdio extensions perform the padding based on
+                     character count rather than element count.  */
+                  case 'c': case 's':
+# endif
+# if NEED_PRINTF_FLAG_ZERO
+                  case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
+                  case 'a': case 'A':
+# endif
+                    pad_ourselves = 1;
+                    break;
+                  default:
+                    pad_ourselves = prec_ourselves;
+                    break;
+                  }
+#endif
+
+#if !USE_SNPRINTF
+                /* Allocate a temporary buffer of sufficient size for calling
+                   sprintf.  */
+                {
+                  switch (dp->conversion)
+                    {
+
+                    case 'd': case 'i': case 'u':
+# if HAVE_LONG_LONG_INT
+                      if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+                        tmp_length =
+                          (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+                                          * 0.30103 /* binary -> decimal */
+                                         )
+                          + 1; /* turn floor into ceil */
+                      else
+# endif
+                      if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+                        tmp_length =
+                          (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+                                          * 0.30103 /* binary -> decimal */
+                                         )
+                          + 1; /* turn floor into ceil */
+                      else
+                        tmp_length =
+                          (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+                                          * 0.30103 /* binary -> decimal */
+                                         )
+                          + 1; /* turn floor into ceil */
+                      if (tmp_length < precision)
+                        tmp_length = precision;
+                      /* Multiply by 2, as an estimate for FLAG_GROUP.  */
+                      tmp_length = xsum (tmp_length, tmp_length);
+                      /* Add 1, to account for a leading sign.  */
+                      tmp_length = xsum (tmp_length, 1);
+                      break;
+
+                    case 'o':
+# if HAVE_LONG_LONG_INT
+                      if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+                        tmp_length =
+                          (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+                                          * 0.333334 /* binary -> octal */
+                                         )
+                          + 1; /* turn floor into ceil */
+                      else
+# endif
+                      if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+                        tmp_length =
+                          (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+                                          * 0.333334 /* binary -> octal */
+                                         )
+                          + 1; /* turn floor into ceil */
+                      else
+                        tmp_length =
+                          (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+                                          * 0.333334 /* binary -> octal */
+                                         )
+                          + 1; /* turn floor into ceil */
+                      if (tmp_length < precision)
+                        tmp_length = precision;
+                      /* Add 1, to account for a leading sign.  */
+                      tmp_length = xsum (tmp_length, 1);
+                      break;
+
+                    case 'x': case 'X':
+# if HAVE_LONG_LONG_INT
+                      if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+                        tmp_length =
+                          (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+                                          * 0.25 /* binary -> hexadecimal */
+                                         )
+                          + 1; /* turn floor into ceil */
+                      else
+# endif
+                      if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+                        tmp_length =
+                          (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+                                          * 0.25 /* binary -> hexadecimal */
+                                         )
+                          + 1; /* turn floor into ceil */
+                      else
+                        tmp_length =
+                          (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+                                          * 0.25 /* binary -> hexadecimal */
+                                         )
+                          + 1; /* turn floor into ceil */
+                      if (tmp_length < precision)
+                        tmp_length = precision;
+                      /* Add 2, to account for a leading sign or alternate form.  */
+                      tmp_length = xsum (tmp_length, 2);
+                      break;
+
+                    case 'f': case 'F':
+                      if (type == TYPE_LONGDOUBLE)
+                        tmp_length =
+                          (unsigned int) (LDBL_MAX_EXP
+                                          * 0.30103 /* binary -> decimal */
+                                          * 2 /* estimate for FLAG_GROUP */
+                                         )
+                          + 1 /* turn floor into ceil */
+                          + 10; /* sign, decimal point etc. */
+                      else
+                        tmp_length =
+                          (unsigned int) (DBL_MAX_EXP
+                                          * 0.30103 /* binary -> decimal */
+                                          * 2 /* estimate for FLAG_GROUP */
+                                         )
+                          + 1 /* turn floor into ceil */
+                          + 10; /* sign, decimal point etc. */
+                      tmp_length = xsum (tmp_length, precision);
+                      break;
+
+                    case 'e': case 'E': case 'g': case 'G':
+                      tmp_length =
+                        12; /* sign, decimal point, exponent etc. */
+                      tmp_length = xsum (tmp_length, precision);
+                      break;
+
+                    case 'a': case 'A':
+                      if (type == TYPE_LONGDOUBLE)
+                        tmp_length =
+                          (unsigned int) (LDBL_DIG
+                                          * 0.831 /* decimal -> hexadecimal */
+                                         )
+                          + 1; /* turn floor into ceil */
+                      else
+                        tmp_length =
+                          (unsigned int) (DBL_DIG
+                                          * 0.831 /* decimal -> hexadecimal */
+                                         )
+                          + 1; /* turn floor into ceil */
+                      if (tmp_length < precision)
+                        tmp_length = precision;
+                      /* Account for sign, decimal point etc. */
+                      tmp_length = xsum (tmp_length, 12);
+                      break;
+
+                    case 'c':
+# if HAVE_WINT_T && !WIDE_CHAR_VERSION
+                      if (type == TYPE_WIDE_CHAR)
+                        tmp_length = MB_CUR_MAX;
+                      else
+# endif
+                        tmp_length = 1;
+                      break;
+
+                    case 's':
+# if HAVE_WCHAR_T
+                      if (type == TYPE_WIDE_STRING)
+                        {
+#  if WIDE_CHAR_VERSION
+                          /* ISO C says about %ls in fwprintf:
+                               "If the precision is not specified or is greater
+                                than the size of the array, the array shall
+                                contain a null wide character."
+                             So if there is a precision, we must not use
+                             wcslen.  */
+                          const wchar_t *arg =
+                            a.arg[dp->arg_index].a.a_wide_string;
+
+                          if (has_precision)
+                            tmp_length = local_wcsnlen (arg, precision);
+                          else
+                            tmp_length = local_wcslen (arg);
+#  else
+                          /* ISO C says about %ls in fprintf:
+                               "If a precision is specified, no more than that
+                                many bytes are written (including shift
+                                sequences, if any), and the array shall contain
+                                a null wide character if, to equal the
+                                multibyte character sequence length given by
+                                the precision, the function would need to
+                                access a wide character one past the end of the
+                                array."
+                             So if there is a precision, we must not use
+                             wcslen.  */
+                          /* This case has already been handled above.  */
+                          abort ();
+#  endif
+                        }
+                      else
+# endif
+                        {
+# if WIDE_CHAR_VERSION
+                          /* ISO C says about %s in fwprintf:
+                               "If the precision is not specified or is greater
+                                than the size of the converted array, the
+                                converted array shall contain a null wide
+                                character."
+                             So if there is a precision, we must not use
+                             strlen.  */
+                          /* This case has already been handled above.  */
+                          abort ();
+# else
+                          /* ISO C says about %s in fprintf:
+                               "If the precision is not specified or greater
+                                than the size of the array, the array shall
+                                contain a null character."
+                             So if there is a precision, we must not use
+                             strlen.  */
+                          const char *arg = a.arg[dp->arg_index].a.a_string;
+
+                          if (has_precision)
+                            tmp_length = local_strnlen (arg, precision);
+                          else
+                            tmp_length = strlen (arg);
+# endif
+                        }
+                      break;
+
+                    case 'p':
+                      tmp_length =
+                        (unsigned int) (sizeof (void *) * CHAR_BIT
+                                        * 0.25 /* binary -> hexadecimal */
+                                       )
+                          + 1 /* turn floor into ceil */
+                          + 2; /* account for leading 0x */
+                      break;
+
+                    default:
+                      abort ();
+                    }
+
+                  if (!pad_ourselves)
+                    {
+# if ENABLE_UNISTDIO
+                      /* Padding considers the number of characters, therefore
+                         the number of elements after padding may be
+                           > max (tmp_length, width)
+                         but is certainly
+                           <= tmp_length + width.  */
+                      tmp_length = xsum (tmp_length, width);
+# else
+                      /* Padding considers the number of elements,
+                         says POSIX.  */
+                      if (tmp_length < width)
+                        tmp_length = width;
+# endif
+                    }
+
+                  tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
+                }
+
+                if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T))
+                  tmp = tmpbuf;
+                else
+                  {
+                    size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T));
+
+                    if (size_overflow_p (tmp_memsize))
+                      /* Overflow, would lead to out of memory.  */
+                      goto out_of_memory;
+                    tmp = (TCHAR_T *) malloc (tmp_memsize);
+                    if (tmp == NULL)
+                      /* Out of memory.  */
+                      goto out_of_memory;
+                  }
+#endif
+
+                /* Construct the format string for calling snprintf or
+                   sprintf.  */
+                fbp = buf;
+                *fbp++ = '%';
+#if NEED_PRINTF_FLAG_GROUPING
+                /* The underlying implementation doesn't support the ' flag.
+                   Produce no grouping characters in this case; this is
+                   acceptable because the grouping is locale dependent.  */
+#else
+                if (flags & FLAG_GROUP)
+                  *fbp++ = '\'';
+#endif
+                if (flags & FLAG_LEFT)
+                  *fbp++ = '-';
+                if (flags & FLAG_SHOWSIGN)
+                  *fbp++ = '+';
+                if (flags & FLAG_SPACE)
+                  *fbp++ = ' ';
+                if (flags & FLAG_ALT)
+                  *fbp++ = '#';
+                if (!pad_ourselves)
+                  {
+                    if (flags & FLAG_ZERO)
+                      *fbp++ = '0';
+                    if (dp->width_start != dp->width_end)
+                      {
+                        size_t n = dp->width_end - dp->width_start;
+                        /* The width specification is known to consist only
+                           of standard ASCII characters.  */
+                        if (sizeof (FCHAR_T) == sizeof (TCHAR_T))
+                          {
+                            memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T));
+                            fbp += n;
+                          }
+                        else
+                          {
+                            const FCHAR_T *mp = dp->width_start;
+                            do
+                              *fbp++ = (unsigned char) *mp++;
+                            while (--n > 0);
+                          }
+                      }
+                  }
+                if (!prec_ourselves)
+                  {
+                    if (dp->precision_start != dp->precision_end)
+                      {
+                        size_t n = dp->precision_end - dp->precision_start;
+                        /* The precision specification is known to consist only
+                           of standard ASCII characters.  */
+                        if (sizeof (FCHAR_T) == sizeof (TCHAR_T))
+                          {
+                            memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T));
+                            fbp += n;
+                          }
+                        else
+                          {
+                            const FCHAR_T *mp = dp->precision_start;
+                            do
+                              *fbp++ = (unsigned char) *mp++;
+                            while (--n > 0);
+                          }
+                      }
+                  }
+
+                switch (type)
+                  {
+#if HAVE_LONG_LONG_INT
+                  case TYPE_LONGLONGINT:
+                  case TYPE_ULONGLONGINT:
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+                    *fbp++ = 'I';
+                    *fbp++ = '6';
+                    *fbp++ = '4';
+                    break;
+# else
+                    *fbp++ = 'l';
+                    /*FALLTHROUGH*/
+# endif
+#endif
+                  case TYPE_LONGINT:
+                  case TYPE_ULONGINT:
+#if HAVE_WINT_T
+                  case TYPE_WIDE_CHAR:
+#endif
+#if HAVE_WCHAR_T
+                  case TYPE_WIDE_STRING:
+#endif
+                    *fbp++ = 'l';
+                    break;
+                  case TYPE_LONGDOUBLE:
+                    *fbp++ = 'L';
+                    break;
+                  default:
+                    break;
+                  }
+#if NEED_PRINTF_DIRECTIVE_F
+                if (dp->conversion == 'F')
+                  *fbp = 'f';
+                else
+#endif
+                  *fbp = dp->conversion;
+#if USE_SNPRINTF
+# if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
+                fbp[1] = '%';
+                fbp[2] = 'n';
+                fbp[3] = '\0';
+# else
+                /* On glibc2 systems from glibc >= 2.3 - probably also older
+                   ones - we know that snprintf's returns value conforms to
+                   ISO C 99: the gl_SNPRINTF_DIRECTIVE_N test passes.
+                   Therefore we can avoid using %n in this situation.
+                   On glibc2 systems from 2004-10-18 or newer, the use of %n
+                   in format strings in writable memory may crash the program
+                   (if compiled with _FORTIFY_SOURCE=2), so we should avoid it
+                   in this situation.  */
+                /* On native Win32 systems (such as mingw), we can avoid using
+                   %n because:
+                     - Although the gl_SNPRINTF_TRUNCATION_C99 test fails,
+                       snprintf does not write more than the specified number
+                       of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes
+                       '4', '5', '6' into buf, not '4', '5', '\0'.)
+                     - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf
+                       allows us to recognize the case of an insufficient
+                       buffer size: it returns -1 in this case.
+                   On native Win32 systems (such as mingw) where the OS is
+                   Windows Vista, the use of %n in format strings by default
+                   crashes the program. See
+                     <http://gcc.gnu.org/ml/gcc/2007-06/msg00122.html> and
+                     <http://msdn2.microsoft.com/en-us/library/ms175782(VS.80).aspx>
+                   So we should avoid %n in this situation.  */
+                fbp[1] = '\0';
+# endif
+#else
+                fbp[1] = '\0';
+#endif
+
+                /* Construct the arguments for calling snprintf or sprintf.  */
+                prefix_count = 0;
+                if (!pad_ourselves && dp->width_arg_index != ARG_NONE)
+                  {
+                    if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+                      abort ();
+                    prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int;
+                  }
+                if (!prec_ourselves && dp->precision_arg_index != ARG_NONE)
+                  {
+                    if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+                      abort ();
+                    prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int;
+                  }
+
+#if USE_SNPRINTF
+                /* The SNPRINTF result is appended after result[0..length].
+                   The latter is an array of DCHAR_T; SNPRINTF appends an
+                   array of TCHAR_T to it.  This is possible because
+                   sizeof (TCHAR_T) divides sizeof (DCHAR_T) and
+                   alignof (TCHAR_T) <= alignof (DCHAR_T).  */
+# define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T))
+                /* Ensure that maxlen below will be >= 2.  Needed on BeOS,
+                   where an snprintf() with maxlen==1 acts like sprintf().  */
+                ENSURE_ALLOCATION (xsum (length,
+                                         (2 + TCHARS_PER_DCHAR - 1)
+                                         / TCHARS_PER_DCHAR));
+                /* Prepare checking whether snprintf returns the count
+                   via %n.  */
+                *(TCHAR_T *) (result + length) = '\0';
+#endif
+
+                for (;;)
+                  {
+                    int count = -1;
+
+#if USE_SNPRINTF
+                    int retcount = 0;
+                    size_t maxlen = allocated - length;
+                    /* SNPRINTF can fail if its second argument is
+                       > INT_MAX.  */
+                    if (maxlen > INT_MAX / TCHARS_PER_DCHAR)
+                      maxlen = INT_MAX / TCHARS_PER_DCHAR;
+                    maxlen = maxlen * TCHARS_PER_DCHAR;
+# define SNPRINTF_BUF(arg) \
+                    switch (prefix_count)                                   \
+                      {                                                     \
+                      case 0:                                               \
+                        retcount = SNPRINTF ((TCHAR_T *) (result + length), \
+                                             maxlen, buf,                   \
+                                             arg, &count);                  \
+                        break;                                              \
+                      case 1:                                               \
+                        retcount = SNPRINTF ((TCHAR_T *) (result + length), \
+                                             maxlen, buf,                   \
+                                             prefixes[0], arg, &count);     \
+                        break;                                              \
+                      case 2:                                               \
+                        retcount = SNPRINTF ((TCHAR_T *) (result + length), \
+                                             maxlen, buf,                   \
+                                             prefixes[0], prefixes[1], arg, \
+                                             &count);                       \
+                        break;                                              \
+                      default:                                              \
+                        abort ();                                           \
+                      }
+#else
+# define SNPRINTF_BUF(arg) \
+                    switch (prefix_count)                                   \
+                      {                                                     \
+                      case 0:                                               \
+                        count = sprintf (tmp, buf, arg);                    \
+                        break;                                              \
+                      case 1:                                               \
+                        count = sprintf (tmp, buf, prefixes[0], arg);       \
+                        break;                                              \
+                      case 2:                                               \
+                        count = sprintf (tmp, buf, prefixes[0], prefixes[1],\
+                                         arg);                              \
+                        break;                                              \
+                      default:                                              \
+                        abort ();                                           \
+                      }
+#endif
+
+                    switch (type)
+                      {
+                      case TYPE_SCHAR:
+                        {
+                          int arg = a.arg[dp->arg_index].a.a_schar;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_UCHAR:
+                        {
+                          unsigned int arg = a.arg[dp->arg_index].a.a_uchar;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_SHORT:
+                        {
+                          int arg = a.arg[dp->arg_index].a.a_short;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_USHORT:
+                        {
+                          unsigned int arg = a.arg[dp->arg_index].a.a_ushort;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_INT:
+                        {
+                          int arg = a.arg[dp->arg_index].a.a_int;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_UINT:
+                        {
+                          unsigned int arg = a.arg[dp->arg_index].a.a_uint;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_LONGINT:
+                        {
+                          long int arg = a.arg[dp->arg_index].a.a_longint;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_ULONGINT:
+                        {
+                          unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+#if HAVE_LONG_LONG_INT
+                      case TYPE_LONGLONGINT:
+                        {
+                          long long int arg = a.arg[dp->arg_index].a.a_longlongint;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_ULONGLONGINT:
+                        {
+                          unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+#endif
+                      case TYPE_DOUBLE:
+                        {
+                          double arg = a.arg[dp->arg_index].a.a_double;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_LONGDOUBLE:
+                        {
+                          long double arg = a.arg[dp->arg_index].a.a_longdouble;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_CHAR:
+                        {
+                          int arg = a.arg[dp->arg_index].a.a_char;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+#if HAVE_WINT_T
+                      case TYPE_WIDE_CHAR:
+                        {
+                          wint_t arg = a.arg[dp->arg_index].a.a_wide_char;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+#endif
+                      case TYPE_STRING:
+                        {
+                          const char *arg = a.arg[dp->arg_index].a.a_string;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+#if HAVE_WCHAR_T
+                      case TYPE_WIDE_STRING:
+                        {
+                          const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+#endif
+                      case TYPE_POINTER:
+                        {
+                          void *arg = a.arg[dp->arg_index].a.a_pointer;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      default:
+                        abort ();
+                      }
+
+#if USE_SNPRINTF
+                    /* Portability: Not all implementations of snprintf()
+                       are ISO C 99 compliant.  Determine the number of
+                       bytes that snprintf() has produced or would have
+                       produced.  */
+                    if (count >= 0)
+                      {
+                        /* Verify that snprintf() has NUL-terminated its
+                           result.  */
+                        if (count < maxlen
+                            && ((TCHAR_T *) (result + length)) [count] != '\0')
+                          abort ();
+                        /* Portability hack.  */
+                        if (retcount > count)
+                          count = retcount;
+                      }
+                    else
+                      {
+                        /* snprintf() doesn't understand the '%n'
+                           directive.  */
+                        if (fbp[1] != '\0')
+                          {
+                            /* Don't use the '%n' directive; instead, look
+                               at the snprintf() return value.  */
+                            fbp[1] = '\0';
+                            continue;
+                          }
+                        else
+                          {
+                            /* Look at the snprintf() return value.  */
+                            if (retcount < 0)
+                              {
+                                /* HP-UX 10.20 snprintf() is doubly deficient:
+                                   It doesn't understand the '%n' directive,
+                                   *and* it returns -1 (rather than the length
+                                   that would have been required) when the
+                                   buffer is too small.  */
+                                size_t bigger_need =
+                                  xsum (xtimes (allocated, 2), 12);
+                                ENSURE_ALLOCATION (bigger_need);
+                                continue;
+                              }
+                            else
+                              count = retcount;
+                          }
+                      }
+#endif
+
+                    /* Attempt to handle failure.  */
+                    if (count < 0)
+                      {
+                        if (!(result == resultbuf || result == NULL))
+                          free (result);
+                        if (buf_malloced != NULL)
+                          free (buf_malloced);
+                        CLEANUP ();
+                        errno = EINVAL;
+                        return NULL;
+                      }
+
+#if USE_SNPRINTF
+                    /* Handle overflow of the allocated buffer.
+                       If such an overflow occurs, a C99 compliant snprintf()
+                       returns a count >= maxlen.  However, a non-compliant
+                       snprintf() function returns only count = maxlen - 1.  To
+                       cover both cases, test whether count >= maxlen - 1.  */
+                    if ((unsigned int) count + 1 >= maxlen)
+                      {
+                        /* If maxlen already has attained its allowed maximum,
+                           allocating more memory will not increase maxlen.
+                           Instead of looping, bail out.  */
+                        if (maxlen == INT_MAX / TCHARS_PER_DCHAR)
+                          goto overflow;
+                        else
+                          {
+                            /* Need at least (count + 1) * sizeof (TCHAR_T)
+                               bytes.  (The +1 is for the trailing NUL.)
+                               But ask for (count + 2) * sizeof (TCHAR_T)
+                               bytes, so that in the next round, we likely get
+                                 maxlen > (unsigned int) count + 1
+                               and so we don't get here again.
+                               And allocate proportionally, to avoid looping
+                               eternally if snprintf() reports a too small
+                               count.  */
+                            size_t n =
+                              xmax (xsum (length,
+                                          ((unsigned int) count + 2
+                                           + TCHARS_PER_DCHAR - 1)
+                                          / TCHARS_PER_DCHAR),
+                                    xtimes (allocated, 2));
+
+                            ENSURE_ALLOCATION (n);
+                            continue;
+                          }
+                      }
+#endif
+
+#if NEED_PRINTF_UNBOUNDED_PRECISION
+                    if (prec_ourselves)
+                      {
+                        /* Handle the precision.  */
+                        TCHAR_T *prec_ptr =
+# if USE_SNPRINTF
+                          (TCHAR_T *) (result + length);
+# else
+                          tmp;
+# endif
+                        size_t prefix_count;
+                        size_t move;
+
+                        prefix_count = 0;
+                        /* Put the additional zeroes after the sign.  */
+                        if (count >= 1
+                            && (*prec_ptr == '-' || *prec_ptr == '+'
+                                || *prec_ptr == ' '))
+                          prefix_count = 1;
+                        /* Put the additional zeroes after the 0x prefix if
+                           (flags & FLAG_ALT) || (dp->conversion == 'p').  */
+                        else if (count >= 2
+                                 && prec_ptr[0] == '0'
+                                 && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X'))
+                          prefix_count = 2;
+
+                        move = count - prefix_count;
+                        if (precision > move)
+                          {
+                            /* Insert zeroes.  */
+                            size_t insert = precision - move;
+                            TCHAR_T *prec_end;
+
+# if USE_SNPRINTF
+                            size_t n =
+                              xsum (length,
+                                    (count + insert + TCHARS_PER_DCHAR - 1)
+                                    / TCHARS_PER_DCHAR);
+                            length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR;
+                            ENSURE_ALLOCATION (n);
+                            length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR;
+                            prec_ptr = (TCHAR_T *) (result + length);
+# endif
+
+                            prec_end = prec_ptr + count;
+                            prec_ptr += prefix_count;
+
+                            while (prec_end > prec_ptr)
+                              {
+                                prec_end--;
+                                prec_end[insert] = prec_end[0];
+                              }
+
+                            prec_end += insert;
+                            do
+                              *--prec_end = '0';
+                            while (prec_end > prec_ptr);
+
+                            count += insert;
+                          }
+                      }
+#endif
+
+#if !USE_SNPRINTF
+                    if (count >= tmp_length)
+                      /* tmp_length was incorrectly calculated - fix the
+                         code above!  */
+                      abort ();
+#endif
+
+#if !DCHAR_IS_TCHAR
+                    /* Convert from TCHAR_T[] to DCHAR_T[].  */
+                    if (dp->conversion == 'c' || dp->conversion == 's')
+                      {
+                        /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING
+                           TYPE_WIDE_STRING.
+                           The result string is not certainly ASCII.  */
+                        const TCHAR_T *tmpsrc;
+                        DCHAR_T *tmpdst;
+                        size_t tmpdst_len;
+                        /* This code assumes that TCHAR_T is 'char'.  */
+                        typedef int TCHAR_T_verify
+                                    [2 * (sizeof (TCHAR_T) == 1) - 1];
+# if USE_SNPRINTF
+                        tmpsrc = (TCHAR_T *) (result + length);
+# else
+                        tmpsrc = tmp;
+# endif
+                        tmpdst =
+                          DCHAR_CONV_FROM_ENCODING (locale_charset (),
+                                                    iconveh_question_mark,
+                                                    tmpsrc, count,
+                                                    NULL,
+                                                    NULL, &tmpdst_len);
+                        if (tmpdst == NULL)
+                          {
+                            int saved_errno = errno;
+                            if (!(result == resultbuf || result == NULL))
+                              free (result);
+                            if (buf_malloced != NULL)
+                              free (buf_malloced);
+                            CLEANUP ();
+                            errno = saved_errno;
+                            return NULL;
+                          }
+                        ENSURE_ALLOCATION (xsum (length, tmpdst_len));
+                        DCHAR_CPY (result + length, tmpdst, tmpdst_len);
+                        free (tmpdst);
+                        count = tmpdst_len;
+                      }
+                    else
+                      {
+                        /* The result string is ASCII.
+                           Simple 1:1 conversion.  */
+# if USE_SNPRINTF
+                        /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a
+                           no-op conversion, in-place on the array starting
+                           at (result + length).  */
+                        if (sizeof (DCHAR_T) != sizeof (TCHAR_T))
+# endif
+                          {
+                            const TCHAR_T *tmpsrc;
+                            DCHAR_T *tmpdst;
+                            size_t n;
+
+# if USE_SNPRINTF
+                            if (result == resultbuf)
+                              {
+                                tmpsrc = (TCHAR_T *) (result + length);
+                                /* ENSURE_ALLOCATION will not move tmpsrc
+                                   (because it's part of resultbuf).  */
+                                ENSURE_ALLOCATION (xsum (length, count));
+                              }
+                            else
+                              {
+                                /* ENSURE_ALLOCATION will move the array
+                                   (because it uses realloc().  */
+                                ENSURE_ALLOCATION (xsum (length, count));
+                                tmpsrc = (TCHAR_T *) (result + length);
+                              }
+# else
+                            tmpsrc = tmp;
+                            ENSURE_ALLOCATION (xsum (length, count));
+# endif
+                            tmpdst = result + length;
+                            /* Copy backwards, because of overlapping.  */
+                            tmpsrc += count;
+                            tmpdst += count;
+                            for (n = count; n > 0; n--)
+                              *--tmpdst = (unsigned char) *--tmpsrc;
+                          }
+                      }
+#endif
+
+#if DCHAR_IS_TCHAR && !USE_SNPRINTF
+                    /* Make room for the result.  */
+                    if (count > allocated - length)
+                      {
+                        /* Need at least count elements.  But allocate
+                           proportionally.  */
+                        size_t n =
+                          xmax (xsum (length, count), xtimes (allocated, 2));
+
+                        ENSURE_ALLOCATION (n);
+                      }
+#endif
+
+                    /* Here count <= allocated - length.  */
+
+                    /* Perform padding.  */
+#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+                    if (pad_ourselves && has_width)
+                      {
+                        size_t w;
+# if ENABLE_UNISTDIO
+                        /* Outside POSIX, it's preferrable to compare the width
+                           against the number of _characters_ of the converted
+                           value.  */
+                        w = DCHAR_MBSNLEN (result + length, count);
+# else
+                        /* The width is compared against the number of _bytes_
+                           of the converted value, says POSIX.  */
+                        w = count;
+# endif
+                        if (w < width)
+                          {
+                            size_t pad = width - w;
+
+                            /* Make room for the result.  */
+                            if (xsum (count, pad) > allocated - length)
+                              {
+                                /* Need at least count + pad elements.  But
+                                   allocate proportionally.  */
+                                size_t n =
+                                  xmax (xsum3 (length, count, pad),
+                                        xtimes (allocated, 2));
+
+# if USE_SNPRINTF
+                                length += count;
+                                ENSURE_ALLOCATION (n);
+                                length -= count;
+# else
+                                ENSURE_ALLOCATION (n);
+# endif
+                              }
+                            /* Here count + pad <= allocated - length.  */
+
+                            {
+# if !DCHAR_IS_TCHAR || USE_SNPRINTF
+                              DCHAR_T * const rp = result + length;
+# else
+                              DCHAR_T * const rp = tmp;
+# endif
+                              DCHAR_T *p = rp + count;
+                              DCHAR_T *end = p + pad;
+                              DCHAR_T *pad_ptr;
+# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO
+                              if (dp->conversion == 'c'
+                                  || dp->conversion == 's')
+                                /* No zero-padding for string directives.  */
+                                pad_ptr = NULL;
+                              else
+# endif
+                                {
+                                  pad_ptr = (*rp == '-' ? rp + 1 : rp);
+                                  /* No zero-padding of "inf" and "nan".  */
+                                  if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z')
+                                      || (*pad_ptr >= 'a' && *pad_ptr <= 'z'))
+                                    pad_ptr = NULL;
+                                }
+                              /* The generated string now extends from rp to p,
+                                 with the zero padding insertion point being at
+                                 pad_ptr.  */
+
+                              count = count + pad; /* = end - rp */
+
+                              if (flags & FLAG_LEFT)
+                                {
+                                  /* Pad with spaces on the right.  */
+                                  for (; pad > 0; pad--)
+                                    *p++ = ' ';
+                                }
+                              else if ((flags & FLAG_ZERO) && pad_ptr != NULL)
+                                {
+                                  /* Pad with zeroes.  */
+                                  DCHAR_T *q = end;
+
+                                  while (p > pad_ptr)
+                                    *--q = *--p;
+                                  for (; pad > 0; pad--)
+                                    *p++ = '0';
+                                }
+                              else
+                                {
+                                  /* Pad with spaces on the left.  */
+                                  DCHAR_T *q = end;
+
+                                  while (p > rp)
+                                    *--q = *--p;
+                                  for (; pad > 0; pad--)
+                                    *p++ = ' ';
+                                }
+                            }
+                          }
+                      }
+#endif
+
+                    /* Here still count <= allocated - length.  */
+
+#if !DCHAR_IS_TCHAR || USE_SNPRINTF
+                    /* The snprintf() result did fit.  */
+#else
+                    /* Append the sprintf() result.  */
+                    memcpy (result + length, tmp, count * sizeof (DCHAR_T));
+#endif
+#if !USE_SNPRINTF
+                    if (tmp != tmpbuf)
+                      free (tmp);
+#endif
+
+#if NEED_PRINTF_DIRECTIVE_F
+                    if (dp->conversion == 'F')
+                      {
+                        /* Convert the %f result to upper case for %F.  */
+                        DCHAR_T *rp = result + length;
+                        size_t rc;
+                        for (rc = count; rc > 0; rc--, rp++)
+                          if (*rp >= 'a' && *rp <= 'z')
+                            *rp = *rp - 'a' + 'A';
+                      }
+#endif
+
+                    length += count;
+                    break;
+                  }
+              }
+          }
+      }
+
+    /* Add the final NUL.  */
+    ENSURE_ALLOCATION (xsum (length, 1));
+    result[length] = '\0';
+
+    if (result != resultbuf && length + 1 < allocated)
+      {
+        /* Shrink the allocated memory if possible.  */
+        DCHAR_T *memory;
+
+        memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T));
+        if (memory != NULL)
+          result = memory;
+      }
+
+    if (buf_malloced != NULL)
+      free (buf_malloced);
+    CLEANUP ();
+    *lengthp = length;
+    /* Note that we can produce a big string of a length > INT_MAX.  POSIX
+       says that snprintf() fails with errno = EOVERFLOW in this case, but
+       that's only because snprintf() returns an 'int'.  This function does
+       not have this limitation.  */
+    return result;
+
+#if USE_SNPRINTF
+  overflow:
+    if (!(result == resultbuf || result == NULL))
+      free (result);
+    if (buf_malloced != NULL)
+      free (buf_malloced);
+    CLEANUP ();
+    errno = EOVERFLOW;
+    return NULL;
+#endif
+
+  out_of_memory:
+    if (!(result == resultbuf || result == NULL))
+      free (result);
+    if (buf_malloced != NULL)
+      free (buf_malloced);
+  out_of_memory_1:
+    CLEANUP ();
+    errno = ENOMEM;
+    return NULL;
+  }
+}
+
+#undef TCHARS_PER_DCHAR
+#undef SNPRINTF
+#undef USE_SNPRINTF
+#undef DCHAR_SET
+#undef DCHAR_CPY
+#undef PRINTF_PARSE
+#undef DIRECTIVES
+#undef DIRECTIVE
+#undef DCHAR_IS_TCHAR
+#undef TCHAR_T
+#undef DCHAR_T
+#undef FCHAR_T
+#undef VASNPRINTF
diff --git a/gnu/vasnprintf.h b/gnu/vasnprintf.h
new file mode 100644 (file)
index 0000000..701678c
--- /dev/null
@@ -0,0 +1,82 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* vsprintf with automatic memory allocation.
+   Copyright (C) 2002-2004, 2007-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _VASNPRINTF_H
+#define _VASNPRINTF_H
+
+/* Get va_list.  */
+#include <stdarg.h>
+
+/* Get size_t.  */
+#include <stddef.h>
+
+#ifndef __attribute__
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The __-protected variants of the attributes 'format' and 'printf' are
+   accepted by gcc versions 2.6.4 (effectively 2.7) and later.
+   We enable __attribute__ only if these are supported too, because
+   gnulib and libintl do '#define printf __printf__' when they override
+   the 'printf' function.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+#  define __attribute__(Spec)   /* empty */
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Write formatted output to a string dynamically allocated with malloc().
+   You can pass a preallocated buffer for the result in RESULTBUF and its
+   size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
+   If successful, return the address of the string (this may be = RESULTBUF
+   if no dynamic memory allocation was necessary) and set *LENGTHP to the
+   number of resulting bytes, excluding the trailing NUL.  Upon error, set
+   errno and return NULL.
+
+   When dynamic memory allocation occurs, the preallocated buffer is left
+   alone (with possibly modified contents).  This makes it possible to use
+   a statically allocated or stack-allocated buffer, like this:
+
+          char buf[100];
+          size_t len = sizeof (buf);
+          char *output = vasnprintf (buf, &len, format, args);
+          if (output == NULL)
+            ... error handling ...;
+          else
+            {
+              ... use the output string ...;
+              if (output != buf)
+                free (output);
+            }
+  */
+#if REPLACE_VASNPRINTF
+# define asnprintf rpl_asnprintf
+# define vasnprintf rpl_vasnprintf
+#endif
+extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
+       __attribute__ ((__format__ (__printf__, 3, 4)));
+extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
+       __attribute__ ((__format__ (__printf__, 3, 0)));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _VASNPRINTF_H */
diff --git a/gnu/vasprintf.c b/gnu/vasprintf.c
new file mode 100644 (file)
index 0000000..3692b0d
--- /dev/null
@@ -0,0 +1,53 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Formatted output to strings.
+   Copyright (C) 1999, 2002, 2006-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include <config.h>
+
+/* Specification.  */
+#ifdef IN_LIBASPRINTF
+# include "vasprintf.h"
+#else
+# include <stdio.h>
+#endif
+
+#include <errno.h>
+#include <limits.h>
+#include <stdlib.h>
+
+#include "vasnprintf.h"
+
+int
+vasprintf (char **resultp, const char *format, va_list args)
+{
+  size_t length;
+  char *result = vasnprintf (NULL, &length, format, args);
+  if (result == NULL)
+    return -1;
+
+  if (length > INT_MAX)
+    {
+      free (result);
+      errno = EOVERFLOW;
+      return -1;
+    }
+
+  *resultp = result;
+  /* Return the number of resulting bytes, excluding the trailing NUL.  */
+  return length;
+}
diff --git a/gnu/verify.h b/gnu/verify.h
new file mode 100644 (file)
index 0000000..adda5d9
--- /dev/null
@@ -0,0 +1,142 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Compile-time assert-like macros.
+
+   Copyright (C) 2005-2006, 2009-2010 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 VERIFY_H
+# define VERIFY_H 1
+
+/* Each of these macros verifies that its argument R is nonzero.  To
+   be portable, R should be an integer constant expression.  Unlike
+   assert (R), there is no run-time overhead.
+
+   There are two macros, since no single macro can be used in all
+   contexts in C.  verify_true (R) is for scalar contexts, including
+   integer constant expression contexts.  verify (R) is for declaration
+   contexts, e.g., the top level.
+
+   Symbols ending in "__" are private to this header.
+
+   The code below uses several ideas.
+
+   * The first step is ((R) ? 1 : -1).  Given an expression R, of
+     integral or boolean or floating-point type, this yields an
+     expression of integral type, whose value is later verified to be
+     constant and nonnegative.
+
+   * Next this expression W is wrapped in a type
+     struct verify_type__ { unsigned int verify_error_if_negative_size__: W; }.
+     If W is negative, this yields a compile-time error.  No compiler can
+     deal with a bit-field of negative size.
+
+     One might think that an array size check would have the same
+     effect, that is, that the type struct { unsigned int dummy[W]; }
+     would work as well.  However, inside a function, some compilers
+     (such as C++ compilers and GNU C) allow local parameters and
+     variables inside array size expressions.  With these compilers,
+     an array size check would not properly diagnose this misuse of
+     the verify macro:
+
+       void function (int n) { verify (n < 0); }
+
+   * For the verify macro, the struct verify_type__ will need to
+     somehow be embedded into a declaration.  To be portable, this
+     declaration must declare an object, a constant, a function, or a
+     typedef name.  If the declared entity uses the type directly,
+     such as in
+
+       struct dummy {...};
+       typedef struct {...} dummy;
+       extern struct {...} *dummy;
+       extern void dummy (struct {...} *);
+       extern struct {...} *dummy (void);
+
+     two uses of the verify macro would yield colliding declarations
+     if the entity names are not disambiguated.  A workaround is to
+     attach the current line number to the entity name:
+
+       #define GL_CONCAT0(x, y) x##y
+       #define GL_CONCAT(x, y) GL_CONCAT0 (x, y)
+       extern struct {...} * GL_CONCAT(dummy,__LINE__);
+
+     But this has the problem that two invocations of verify from
+     within the same macro would collide, since the __LINE__ value
+     would be the same for both invocations.
+
+     A solution is to use the sizeof operator.  It yields a number,
+     getting rid of the identity of the type.  Declarations like
+
+       extern int dummy [sizeof (struct {...})];
+       extern void dummy (int [sizeof (struct {...})]);
+       extern int (*dummy (void)) [sizeof (struct {...})];
+
+     can be repeated.
+
+   * Should the implementation use a named struct or an unnamed struct?
+     Which of the following alternatives can be used?
+
+       extern int dummy [sizeof (struct {...})];
+       extern int dummy [sizeof (struct verify_type__ {...})];
+       extern void dummy (int [sizeof (struct {...})]);
+       extern void dummy (int [sizeof (struct verify_type__ {...})]);
+       extern int (*dummy (void)) [sizeof (struct {...})];
+       extern int (*dummy (void)) [sizeof (struct verify_type__ {...})];
+
+     In the second and sixth case, the struct type is exported to the
+     outer scope; two such declarations therefore collide.  GCC warns
+     about the first, third, and fourth cases.  So the only remaining
+     possibility is the fifth case:
+
+       extern int (*dummy (void)) [sizeof (struct {...})];
+
+   * This implementation exploits the fact that GCC does not warn about
+     the last declaration mentioned above.  If a future version of GCC
+     introduces a warning for this, the problem could be worked around
+     by using code specialized to GCC, e.g.,:
+
+       #if 4 <= __GNUC__
+       # define verify(R) \
+           extern int (* verify_function__ (void)) \
+                      [__builtin_constant_p (R) && (R) ? 1 : -1]
+       #endif
+
+   * In C++, any struct definition inside sizeof is invalid.
+     Use a template type to work around the problem.  */
+
+
+/* Verify requirement R at compile-time, as an integer constant expression.
+   Return 1.  */
+
+# ifdef __cplusplus
+template <int w>
+  struct verify_type__ { unsigned int verify_error_if_negative_size__: w; };
+#  define verify_true(R) \
+     (!!sizeof (verify_type__<(R) ? 1 : -1>))
+# else
+#  define verify_true(R) \
+     (!!sizeof \
+      (struct { unsigned int verify_error_if_negative_size__: (R) ? 1 : -1; }))
+# endif
+
+/* Verify requirement R at compile-time, as a declaration without a
+   trailing ';'.  */
+
+# define verify(R) extern int (* verify_function__ (void)) [verify_true (R)]
+
+#endif
diff --git a/gnu/version-etc-fsf.c b/gnu/version-etc-fsf.c
new file mode 100644 (file)
index 0000000..9989543
--- /dev/null
@@ -0,0 +1,32 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Variable with FSF copyright information, for version-etc.
+   Copyright (C) 1999-2006, 2009-2010 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. */
+
+#include <config.h>
+
+/* Specification.  */
+#include "version-etc.h"
+
+/* Default copyright goes to the FSF. */
+
+const char version_etc_copyright[] =
+  /* Do *not* mark this string for translation.  %s is a copyright
+     symbol suitable for this locale, and %d is the copyright
+     year.  */
+  "Copyright %s %d Free Software Foundation, Inc.";
diff --git a/gnu/version-etc.c b/gnu/version-etc.c
new file mode 100644 (file)
index 0000000..175e2ce
--- /dev/null
@@ -0,0 +1,260 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Print --version and bug-reporting information in a consistent format.
+   Copyright (C) 1999-2010 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. */
+
+#include <config.h>
+
+/* Specification.  */
+#include "version-etc.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#if USE_UNLOCKED_IO
+# include "unlocked-io.h"
+#endif
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
+/* If you use AM_INIT_AUTOMAKE's no-define option,
+   PACKAGE is not defined.  Use PACKAGE_TARNAME instead.  */
+#if ! defined PACKAGE && defined PACKAGE_TARNAME
+# define PACKAGE PACKAGE_TARNAME
+#endif
+
+enum { COPYRIGHT_YEAR = 2010 };
+
+/* The three functions below display the --version information the
+   standard way.
+
+   If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of
+   the program.  The formats are therefore:
+
+   PACKAGE VERSION
+
+   or
+
+   COMMAND_NAME (PACKAGE) VERSION.
+
+   The functions differ in the way they are passed author names. */
+
+/* Display the --version information the standard way.
+
+   Author names are given in the array AUTHORS. N_AUTHORS is the
+   number of elements in the array. */
+void
+version_etc_arn (FILE *stream,
+                 const char *command_name, const char *package,
+                 const char *version,
+                 const char * const * authors, size_t n_authors)
+{
+  if (command_name)
+    fprintf (stream, "%s (%s) %s\n", command_name, package, version);
+  else
+    fprintf (stream, "%s %s\n", package, version);
+
+#ifdef PACKAGE_PACKAGER
+# ifdef PACKAGE_PACKAGER_VERSION
+  fprintf (stream, _("Packaged by %s (%s)\n"), PACKAGE_PACKAGER,
+           PACKAGE_PACKAGER_VERSION);
+# else
+  fprintf (stream, _("Packaged by %s\n"), PACKAGE_PACKAGER);
+# endif
+#endif
+
+  /* TRANSLATORS: Translate "(C)" to the copyright symbol
+     (C-in-a-circle), if this symbol is available in the user's
+     locale.  Otherwise, do not translate "(C)"; leave it as-is.  */
+  fprintf (stream, version_etc_copyright, _("(C)"), COPYRIGHT_YEAR);
+
+  fputs (_("\
+\n\
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n\
+This is free software: you are free to change and redistribute it.\n\
+There is NO WARRANTY, to the extent permitted by law.\n\
+\n\
+"),
+         stream);
+
+  switch (n_authors)
+    {
+    case 0:
+      /* The caller must provide at least one author name.  */
+      abort ();
+    case 1:
+      /* TRANSLATORS: %s denotes an author name.  */
+      fprintf (stream, _("Written by %s.\n"), authors[0]);
+      break;
+    case 2:
+      /* TRANSLATORS: Each %s denotes an author name.  */
+      fprintf (stream, _("Written by %s and %s.\n"), authors[0], authors[1]);
+      break;
+    case 3:
+      /* TRANSLATORS: Each %s denotes an author name.  */
+      fprintf (stream, _("Written by %s, %s, and %s.\n"),
+               authors[0], authors[1], authors[2]);
+      break;
+    case 4:
+      /* TRANSLATORS: Each %s denotes an author name.
+         You can use line breaks, estimating that each author name occupies
+         ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("Written by %s, %s, %s,\nand %s.\n"),
+               authors[0], authors[1], authors[2], authors[3]);
+      break;
+    case 5:
+      /* TRANSLATORS: Each %s denotes an author name.
+         You can use line breaks, estimating that each author name occupies
+         ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("Written by %s, %s, %s,\n%s, and %s.\n"),
+               authors[0], authors[1], authors[2], authors[3], authors[4]);
+      break;
+    case 6:
+      /* TRANSLATORS: Each %s denotes an author name.
+         You can use line breaks, estimating that each author name occupies
+         ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, and %s.\n"),
+               authors[0], authors[1], authors[2], authors[3], authors[4],
+               authors[5]);
+      break;
+    case 7:
+      /* TRANSLATORS: Each %s denotes an author name.
+         You can use line breaks, estimating that each author name occupies
+         ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, %s, and %s.\n"),
+               authors[0], authors[1], authors[2], authors[3], authors[4],
+               authors[5], authors[6]);
+      break;
+    case 8:
+      /* TRANSLATORS: Each %s denotes an author name.
+         You can use line breaks, estimating that each author name occupies
+         ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("\
+Written by %s, %s, %s,\n%s, %s, %s, %s,\nand %s.\n"),
+                authors[0], authors[1], authors[2], authors[3], authors[4],
+                authors[5], authors[6], authors[7]);
+      break;
+    case 9:
+      /* TRANSLATORS: Each %s denotes an author name.
+         You can use line breaks, estimating that each author name occupies
+         ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("\
+Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, and %s.\n"),
+               authors[0], authors[1], authors[2], authors[3], authors[4],
+               authors[5], authors[6], authors[7], authors[8]);
+      break;
+    default:
+      /* 10 or more authors.  Use an abbreviation, since the human reader
+         will probably not want to read the entire list anyway.  */
+      /* TRANSLATORS: Each %s denotes an author name.
+         You can use line breaks, estimating that each author name occupies
+         ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("\
+Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, %s, and others.\n"),
+                authors[0], authors[1], authors[2], authors[3], authors[4],
+                authors[5], authors[6], authors[7], authors[8]);
+      break;
+    }
+}
+
+/* Display the --version information the standard way.  See the initial
+   comment to this module, for more information.
+
+   Author names are given in the NULL-terminated array AUTHORS. */
+void
+version_etc_ar (FILE *stream,
+                const char *command_name, const char *package,
+                const char *version, const char * const * authors)
+{
+  size_t n_authors;
+
+  for (n_authors = 0; authors[n_authors]; n_authors++)
+    ;
+  version_etc_arn (stream, command_name, package, version, authors, n_authors);
+}
+
+/* Display the --version information the standard way.  See the initial
+   comment to this module, for more information.
+
+   Author names are given in the NULL-terminated va_list AUTHORS. */
+void
+version_etc_va (FILE *stream,
+                const char *command_name, const char *package,
+                const char *version, va_list authors)
+{
+  size_t n_authors;
+  const char *authtab[10];
+
+  for (n_authors = 0;
+       n_authors < 10
+         && (authtab[n_authors] = va_arg (authors, const char *)) != NULL;
+       n_authors++)
+    ;
+  version_etc_arn (stream, command_name, package, version,
+                   authtab, n_authors);
+}
+
+
+/* Display the --version information the standard way.
+
+   If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of
+   the program.  The formats are therefore:
+
+   PACKAGE VERSION
+
+   or
+
+   COMMAND_NAME (PACKAGE) VERSION.
+
+   The authors names are passed as separate arguments, with an additional
+   NULL argument at the end.  */
+void
+version_etc (FILE *stream,
+             const char *command_name, const char *package,
+             const char *version, /* const char *author1, ...*/ ...)
+{
+  va_list authors;
+
+  va_start (authors, version);
+  version_etc_va (stream, command_name, package, version, authors);
+  va_end (authors);
+}
+
+void
+emit_bug_reporting_address (void)
+{
+  /* TRANSLATORS: The placeholder indicates the bug-reporting address
+     for this package.  Please add _another line_ saying
+     "Report translation bugs to <...>\n" with the address for translation
+     bugs (typically your translation team's web or email address).  */
+  printf (_("\nReport bugs to: %s\n"), PACKAGE_BUGREPORT);
+#ifdef PACKAGE_PACKAGER_BUG_REPORTS
+  printf (_("Report %s bugs to: %s\n"), PACKAGE_PACKAGER,
+          PACKAGE_PACKAGER_BUG_REPORTS);
+#endif
+#ifdef PACKAGE_URL
+  printf (_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
+#else
+  printf (_("%s home page: <http://www.gnu.org/software/%s/>\n"),
+          PACKAGE_NAME, PACKAGE);
+#endif
+  fputs (_("General help using GNU software: <http://www.gnu.org/gethelp/>\n"),
+         stdout);
+}
diff --git a/gnu/version-etc.h b/gnu/version-etc.h
new file mode 100644 (file)
index 0000000..86b203f
--- /dev/null
@@ -0,0 +1,80 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Print --version and bug-reporting information in a consistent format.
+   Copyright (C) 1999, 2003, 2005, 2009-2010 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. */
+
+#ifndef VERSION_ETC_H
+# define VERSION_ETC_H 1
+
+# include <stdarg.h>
+# include <stdio.h>
+
+/* The `sentinel' attribute was added in gcc 4.0.  */
+#ifndef ATTRIBUTE_SENTINEL
+# if 4 <= __GNUC__
+#  define ATTRIBUTE_SENTINEL __attribute__ ((__sentinel__))
+# else
+#  define ATTRIBUTE_SENTINEL /* empty */
+# endif
+#endif
+
+extern const char version_etc_copyright[];
+
+/* The three functions below display the --version information in the
+   standard way: command and package names, package version, followed
+   by a short GPLv3+ notice and a list of up to 10 author names.
+
+   If COMMAND_NAME is NULL, the PACKAGE is asumed to be the name of
+   the program.  The formats are therefore:
+
+   PACKAGE VERSION
+
+   or
+
+   COMMAND_NAME (PACKAGE) VERSION.
+
+   The functions differ in the way they are passed author names: */
+
+/* N_AUTHORS names are supplied in array AUTHORS.  */
+extern void version_etc_arn (FILE *stream,
+                             const char *command_name, const char *package,
+                             const char *version,
+                             const char * const * authors, size_t n_authors);
+
+/* Names are passed in the NULL-terminated array AUTHORS.  */
+extern void version_etc_ar (FILE *stream,
+                            const char *command_name, const char *package,
+                            const char *version, const char * const * authors);
+
+/* Names are passed in the NULL-terminated va_list.  */
+extern void version_etc_va (FILE *stream,
+                            const char *command_name, const char *package,
+                            const char *version, va_list authors);
+
+/* Names are passed as separate arguments, with an additional
+   NULL argument at the end.  */
+extern void version_etc (FILE *stream,
+                         const char *command_name, const char *package,
+                         const char *version,
+                         /* const char *author1, ..., NULL */ ...)
+  ATTRIBUTE_SENTINEL;
+
+/* Display the usual `Report bugs to' stanza */
+extern void emit_bug_reporting_address (void);
+
+#endif /* VERSION_ETC_H */
diff --git a/gnu/vsnprintf.c b/gnu/vsnprintf.c
new file mode 100644 (file)
index 0000000..996ecbf
--- /dev/null
@@ -0,0 +1,73 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Formatted output to strings.
+   Copyright (C) 2004, 2006-2010 Free Software Foundation, Inc.
+   Written by Simon Josefsson and Yoann Vandoorselaere <yoann@prelude-ids.org>.
+
+   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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Specification.  */
+#include <stdio.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "vasnprintf.h"
+
+/* Print formatted output to string STR.  Similar to vsprintf, but
+   additional length SIZE limit how much is written into STR.  Returns
+   string length of formatted string (which may be larger than SIZE).
+   STR may be NULL, in which case nothing will be written.  On error,
+   return a negative value.  */
+int
+vsnprintf (char *str, size_t size, const char *format, va_list args)
+{
+  char *output;
+  size_t len;
+  size_t lenbuf = size;
+
+  output = vasnprintf (str, &lenbuf, format, args);
+  len = lenbuf;
+
+  if (!output)
+    return -1;
+
+  if (output != str)
+    {
+      if (size)
+        {
+          size_t pruned_len = (len < size ? len : size - 1);
+          memcpy (str, output, pruned_len);
+          str[pruned_len] = '\0';
+        }
+
+      free (output);
+    }
+
+  if (len > INT_MAX)
+    {
+      errno = EOVERFLOW;
+      return -1;
+    }
+
+  return len;
+}
diff --git a/gnu/wchar.in.h b/gnu/wchar.in.h
new file mode 100644 (file)
index 0000000..cc464ae
--- /dev/null
@@ -0,0 +1,426 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
+
+   Copyright (C) 2007-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* Written by Eric Blake.  */
+
+/*
+ * ISO C 99 <wchar.h> for platforms that have issues.
+ * <http://www.opengroup.org/susv3xbd/wchar.h.html>
+ *
+ * For now, this just ensures proper prerequisite inclusion order and
+ * the declaration of wcwidth().
+ */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+#if defined __need_mbstate_t || defined __need_wint_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H
+/* Special invocation convention:
+   - Inside glibc and uClibc header files.
+   - On HP-UX 11.00 we have a sequence of nested includes
+     <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
+     once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
+     and once directly.  In both situations 'wint_t' is not yet defined,
+     therefore we cannot provide the function overrides; instead include only
+     the system's <wchar.h>.
+   - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
+     the latter includes <wchar.h>.  But here, we have no way to detect whether
+     <wctype.h> is completely included or is still being included.  */
+
+#@INCLUDE_NEXT@ @NEXT_WCHAR_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_WCHAR_H
+
+#define _GL_ALREADY_INCLUDING_WCHAR_H
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.
+   But avoid namespace pollution on glibc systems.  */
+#ifndef __GLIBC__
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+#endif
+
+/* Include the original <wchar.h> if it exists.
+   Some builds of uClibc lack it.  */
+/* The include_next requires a split double-inclusion guard.  */
+#if @HAVE_WCHAR_H@
+# @INCLUDE_NEXT@ @NEXT_WCHAR_H@
+#endif
+
+#undef _GL_ALREADY_INCLUDING_WCHAR_H
+
+#ifndef _GL_WCHAR_H
+#define _GL_WCHAR_H
+
+/* 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.  */
+
+
+/* Define wint_t.  (Also done in wctype.in.h.)  */
+#if !@HAVE_WINT_T@ && !defined wint_t
+# define wint_t int
+# ifndef WEOF
+#  define WEOF -1
+# endif
+#endif
+
+
+/* Override mbstate_t if it is too small.
+   On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
+   implementing mbrtowc for encodings like UTF-8.  */
+#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@
+typedef int rpl_mbstate_t;
+# undef mbstate_t
+# define mbstate_t rpl_mbstate_t
+# define GNULIB_defined_mbstate_t 1
+#endif
+
+
+/* Convert a single-byte character to a wide character.  */
+#if @GNULIB_BTOWC@
+# if @REPLACE_BTOWC@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef btowc
+#   define btowc rpl_btowc
+#  endif
+_GL_FUNCDECL_RPL (btowc, wint_t, (int c));
+_GL_CXXALIAS_RPL (btowc, wint_t, (int c));
+# else
+#  if !@HAVE_BTOWC@
+_GL_FUNCDECL_SYS (btowc, wint_t, (int c));
+#  endif
+_GL_CXXALIAS_SYS (btowc, wint_t, (int c));
+# endif
+_GL_CXXALIASWARN (btowc);
+#elif defined GNULIB_POSIXCHECK
+# undef btowc
+# if HAVE_RAW_DECL_BTOWC
+_GL_WARN_ON_USE (btowc, "btowc is unportable - "
+                 "use gnulib module btowc for portability");
+# endif
+#endif
+
+
+/* Convert a wide character to a single-byte character.  */
+#if @GNULIB_WCTOB@
+# if @REPLACE_WCTOB@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wctob
+#   define wctob rpl_wctob
+#  endif
+_GL_FUNCDECL_RPL (wctob, int, (wint_t wc));
+_GL_CXXALIAS_RPL (wctob, int, (wint_t wc));
+# else
+#  if !defined wctob && !@HAVE_DECL_WCTOB@
+/* wctob is provided by gnulib, or wctob exists but is not declared.  */
+_GL_FUNCDECL_SYS (wctob, int, (wint_t wc));
+#  endif
+_GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
+# endif
+_GL_CXXALIASWARN (wctob);
+#elif defined GNULIB_POSIXCHECK
+# undef wctob
+# if HAVE_RAW_DECL_WCTOB
+_GL_WARN_ON_USE (wctob, "wctob is unportable - "
+                 "use gnulib module wctob for portability");
+# endif
+#endif
+
+
+/* Test whether *PS is in the initial state.  */
+#if @GNULIB_MBSINIT@
+# if @REPLACE_MBSINIT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsinit
+#   define mbsinit rpl_mbsinit
+#  endif
+_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps));
+# else
+#  if !@HAVE_MBSINIT@
+_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsinit);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsinit
+# if HAVE_RAW_DECL_MBSINIT
+_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
+                 "use gnulib module mbsinit for portability");
+# endif
+#endif
+
+
+/* Convert a multibyte character to a wide character.  */
+#if @GNULIB_MBRTOWC@
+# if @REPLACE_MBRTOWC@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbrtowc
+#   define mbrtowc rpl_mbrtowc
+#  endif
+_GL_FUNCDECL_RPL (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+# else
+#  if !@HAVE_MBRTOWC@
+_GL_FUNCDECL_SYS (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbrtowc);
+#elif defined GNULIB_POSIXCHECK
+# undef mbrtowc
+# if HAVE_RAW_DECL_MBRTOWC
+_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "
+                 "use gnulib module mbrtowc for portability");
+# endif
+#endif
+
+
+/* Recognize a multibyte character.  */
+#if @GNULIB_MBRLEN@
+# if @REPLACE_MBRLEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbrlen
+#   define mbrlen rpl_mbrlen
+#  endif
+_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+# else
+#  if !@HAVE_MBRLEN@
+_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbrlen);
+#elif defined GNULIB_POSIXCHECK
+# undef mbrlen
+# if HAVE_RAW_DECL_MBRLEN
+_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "
+                 "use gnulib module mbrlen for portability");
+# endif
+#endif
+
+
+/* Convert a string to a wide string.  */
+#if @GNULIB_MBSRTOWCS@
+# if @REPLACE_MBSRTOWCS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsrtowcs
+#   define mbsrtowcs rpl_mbsrtowcs
+#  endif
+_GL_FUNCDECL_RPL (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_MBSRTOWCS@
+_GL_FUNCDECL_SYS (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsrtowcs);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsrtowcs
+# if HAVE_RAW_DECL_MBSRTOWCS
+_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "
+                 "use gnulib module mbsrtowcs for portability");
+# endif
+#endif
+
+
+/* Convert a string to a wide string.  */
+#if @GNULIB_MBSNRTOWCS@
+# if @REPLACE_MBSNRTOWCS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsnrtowcs
+#   define mbsnrtowcs rpl_mbsnrtowcs
+#  endif
+_GL_FUNCDECL_RPL (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_MBSNRTOWCS@
+_GL_FUNCDECL_SYS (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsnrtowcs);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsnrtowcs
+# if HAVE_RAW_DECL_MBSNRTOWCS
+_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "
+                 "use gnulib module mbsnrtowcs for portability");
+# endif
+#endif
+
+
+/* Convert a wide character to a multibyte character.  */
+#if @GNULIB_WCRTOMB@
+# if @REPLACE_WCRTOMB@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcrtomb
+#   define wcrtomb rpl_wcrtomb
+#  endif
+_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+# else
+#  if !@HAVE_WCRTOMB@
+_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcrtomb);
+#elif defined GNULIB_POSIXCHECK
+# undef wcrtomb
+# if HAVE_RAW_DECL_WCRTOMB
+_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "
+                 "use gnulib module wcrtomb for portability");
+# endif
+#endif
+
+
+/* Convert a wide string to a string.  */
+#if @GNULIB_WCSRTOMBS@
+# if @REPLACE_WCSRTOMBS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcsrtombs
+#   define wcsrtombs rpl_wcsrtombs
+#  endif
+_GL_FUNCDECL_RPL (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_WCSRTOMBS@
+_GL_FUNCDECL_SYS (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcsrtombs);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsrtombs
+# if HAVE_RAW_DECL_WCSRTOMBS
+_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "
+                 "use gnulib module wcsrtombs for portability");
+# endif
+#endif
+
+
+/* Convert a wide string to a string.  */
+#if @GNULIB_WCSNRTOMBS@
+# if @REPLACE_WCSNRTOMBS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcsnrtombs
+#   define wcsnrtombs rpl_wcsnrtombs
+#  endif
+_GL_FUNCDECL_RPL (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_WCSNRTOMBS@
+_GL_FUNCDECL_SYS (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcsnrtombs);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsnrtombs
+# if HAVE_RAW_DECL_WCSNRTOMBS
+_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - "
+                 "use gnulib module wcsnrtombs for portability");
+# endif
+#endif
+
+
+/* Return the number of screen columns needed for WC.  */
+#if @GNULIB_WCWIDTH@
+# if @REPLACE_WCWIDTH@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcwidth
+#   define wcwidth rpl_wcwidth
+#  endif
+_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t));
+_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t));
+# else
+#  if !defined wcwidth && !@HAVE_DECL_WCWIDTH@
+/* wcwidth exists but is not declared.  */
+_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t));
+#  endif
+_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
+# endif
+_GL_CXXALIASWARN (wcwidth);
+#elif defined GNULIB_POSIXCHECK
+# undef wcwidth
+# if HAVE_RAW_DECL_WCWIDTH
+_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - "
+                 "use gnulib module wcwidth for portability");
+# endif
+#endif
+
+
+#endif /* _GL_WCHAR_H */
+#endif /* _GL_WCHAR_H */
+#endif
diff --git a/gnu/wcrtomb.c b/gnu/wcrtomb.c
new file mode 100644 (file)
index 0000000..7dd8676
--- /dev/null
@@ -0,0 +1,55 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Convert wide character to multibyte character.
+   Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+   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 <wchar.h>
+
+#include <errno.h>
+#include <stdlib.h>
+
+
+size_t
+wcrtomb (char *s, wchar_t wc, mbstate_t *ps)
+{
+  /* This implementation of wcrtomb on top of wctomb() supports only
+     stateless encodings.  ps must be in the initial state.  */
+  if (ps != NULL && !mbsinit (ps))
+    {
+      errno = EINVAL;
+      return (size_t)(-1);
+    }
+
+  if (s == NULL)
+    /* We know the NUL wide character corresponds to the NUL character.  */
+    return 1;
+  else
+    {
+      int ret = wctomb (s, wc);
+
+      if (ret >= 0)
+        return ret;
+      else
+        {
+          errno = EILSEQ;
+          return (size_t)(-1);
+        }
+    }
+}
diff --git a/gnu/wctype.in.h b/gnu/wctype.in.h
new file mode 100644 (file)
index 0000000..099351b
--- /dev/null
@@ -0,0 +1,365 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
+
+   Copyright (C) 2006-2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* Written by Bruno Haible and Paul Eggert.  */
+
+/*
+ * ISO C 99 <wctype.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/wctype.h.html>
+ *
+ * iswctype, towctrans, towlower, towupper, wctrans, wctype,
+ * wctrans_t, and wctype_t are not yet implemented.
+ */
+
+#ifndef _GL_WCTYPE_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+#if @HAVE_WINT_T@
+/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.
+   Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+# include <wchar.h>
+#endif
+
+/* Include the original <wctype.h> if it exists.
+   BeOS 5 has the functions but no <wctype.h>.  */
+/* The include_next requires a split double-inclusion guard.  */
+#if @HAVE_WCTYPE_H@
+# @INCLUDE_NEXT@ @NEXT_WCTYPE_H@
+#endif
+
+#ifndef _GL_WCTYPE_H
+#define _GL_WCTYPE_H
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+/* Define wint_t.  (Also done in wchar.in.h.)  */
+#if !@HAVE_WINT_T@ && !defined wint_t
+# define wint_t int
+# ifndef WEOF
+#  define WEOF -1
+# endif
+#endif
+
+
+/* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
+   Linux libc5 has <wctype.h> and the functions but they are broken.
+   Assume all 12 functions are implemented the same way, or not at all.  */
+#if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@
+
+/* IRIX 5.3 has macros but no functions, its isw* macros refer to an
+   undefined variable _ctmp_ and to <ctype.h> macros like _P, and they
+   refer to system functions like _iswctype that are not in the
+   standard C library.  Rather than try to get ancient buggy
+   implementations like this to work, just disable them.  */
+# undef iswalnum
+# undef iswalpha
+# undef iswblank
+# undef iswcntrl
+# undef iswdigit
+# undef iswgraph
+# undef iswlower
+# undef iswprint
+# undef iswpunct
+# undef iswspace
+# undef iswupper
+# undef iswxdigit
+# undef towlower
+# undef towupper
+
+/* Linux libc5 has <wctype.h> and the functions but they are broken.  */
+# if @REPLACE_ISWCNTRL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define iswalnum rpl_iswalnum
+#   define iswalpha rpl_iswalpha
+#   define iswblank rpl_iswblank
+#   define iswcntrl rpl_iswcntrl
+#   define iswdigit rpl_iswdigit
+#   define iswgraph rpl_iswgraph
+#   define iswlower rpl_iswlower
+#   define iswprint rpl_iswprint
+#   define iswpunct rpl_iswpunct
+#   define iswspace rpl_iswspace
+#   define iswupper rpl_iswupper
+#   define iswxdigit rpl_iswxdigit
+#   define towlower rpl_towlower
+#   define towupper rpl_towupper
+#  endif
+# endif
+
+static inline int
+# if @REPLACE_ISWCNTRL@
+rpl_iswalnum
+# else
+iswalnum
+# endif
+         (wint_t wc)
+{
+  return ((wc >= '0' && wc <= '9')
+          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
+}
+
+static inline int
+# if @REPLACE_ISWCNTRL@
+rpl_iswalpha
+# else
+iswalpha
+# endif
+         (wint_t wc)
+{
+  return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
+}
+
+static inline int
+# if @REPLACE_ISWCNTRL@
+rpl_iswblank
+# else
+iswblank
+# endif
+         (wint_t wc)
+{
+  return wc == ' ' || wc == '\t';
+}
+
+static inline int
+# if @REPLACE_ISWCNTRL@
+rpl_iswcntrl
+# else
+iswcntrl
+# endif
+        (wint_t wc)
+{
+  return (wc & ~0x1f) == 0 || wc == 0x7f;
+}
+
+static inline int
+# if @REPLACE_ISWCNTRL@
+rpl_iswdigit
+# else
+iswdigit
+# endif
+         (wint_t wc)
+{
+  return wc >= '0' && wc <= '9';
+}
+
+static inline int
+# if @REPLACE_ISWCNTRL@
+rpl_iswgraph
+# else
+iswgraph
+# endif
+         (wint_t wc)
+{
+  return wc >= '!' && wc <= '~';
+}
+
+static inline int
+# if @REPLACE_ISWCNTRL@
+rpl_iswlower
+# else
+iswlower
+# endif
+         (wint_t wc)
+{
+  return wc >= 'a' && wc <= 'z';
+}
+
+static inline int
+# if @REPLACE_ISWCNTRL@
+rpl_iswprint
+# else
+iswprint
+# endif
+         (wint_t wc)
+{
+  return wc >= ' ' && wc <= '~';
+}
+
+static inline int
+# if @REPLACE_ISWCNTRL@
+rpl_iswpunct
+# else
+iswpunct
+# endif
+         (wint_t wc)
+{
+  return (wc >= '!' && wc <= '~'
+          && !((wc >= '0' && wc <= '9')
+               || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')));
+}
+
+static inline int
+# if @REPLACE_ISWCNTRL@
+rpl_iswspace
+# else
+iswspace
+# endif
+         (wint_t wc)
+{
+  return (wc == ' ' || wc == '\t'
+          || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
+}
+
+static inline int
+# if @REPLACE_ISWCNTRL@
+rpl_iswupper
+# else
+iswupper
+# endif
+         (wint_t wc)
+{
+  return wc >= 'A' && wc <= 'Z';
+}
+
+static inline int
+# if @REPLACE_ISWCNTRL@
+rpl_iswxdigit
+# else
+iswxdigit
+# endif
+          (wint_t wc)
+{
+  return ((wc >= '0' && wc <= '9')
+          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
+}
+
+static inline wint_t
+# if @REPLACE_ISWCNTRL@
+rpl_towlower
+# else
+towlower
+# endif
+         (wint_t wc)
+{
+  return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc);
+}
+
+static inline wint_t
+# if @REPLACE_ISWCNTRL@
+rpl_towupper
+# else
+towupper
+# endif
+         (wint_t wc)
+{
+  return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc);
+}
+
+#endif /* ! HAVE_ISWCNTRL || REPLACE_ISWCNTRL */
+
+#if defined __MINGW32__
+
+/* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t.
+   The functions towlower and towupper are implemented in the MSVCRT library
+   to take a wchar_t argument and return a wchar_t result.  mingw declares
+   these functions to take a wint_t argument and return a wint_t result.
+   This means that:
+   1. When the user passes an argument outside the range 0x0000..0xFFFF, the
+      function will look only at the lower 16 bits.  This is allowed according
+      to POSIX.
+   2. The return value is returned in the lower 16 bits of the result register.
+      The upper 16 bits are random: whatever happened to be in that part of the
+      result register.  We need to fix this by adding a zero-extend from
+      wchar_t to wint_t after the call.  */
+
+static inline wint_t
+rpl_towlower (wint_t wc)
+{
+  return (wint_t) (wchar_t) towlower (wc);
+}
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  define towlower rpl_towlower
+# endif
+
+static inline wint_t
+rpl_towupper (wint_t wc)
+{
+  return (wint_t) (wchar_t) towupper (wc);
+}
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  define towupper rpl_towupper
+# endif
+
+#endif /* __MINGW32__ */
+
+#if @REPLACE_ISWCNTRL@
+_GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswblank, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswlower, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswprint, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswspace, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswupper, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswblank, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswlower, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswprint, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswspace, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswupper, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc));
+#endif
+_GL_CXXALIASWARN (iswalnum);
+_GL_CXXALIASWARN (iswalpha);
+_GL_CXXALIASWARN (iswblank);
+_GL_CXXALIASWARN (iswcntrl);
+_GL_CXXALIASWARN (iswdigit);
+_GL_CXXALIASWARN (iswgraph);
+_GL_CXXALIASWARN (iswlower);
+_GL_CXXALIASWARN (iswprint);
+_GL_CXXALIASWARN (iswpunct);
+_GL_CXXALIASWARN (iswspace);
+_GL_CXXALIASWARN (iswupper);
+_GL_CXXALIASWARN (iswxdigit);
+
+#if @REPLACE_ISWCNTRL@ || defined __MINGW32__
+_GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc));
+_GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc));
+_GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc));
+#endif
+_GL_CXXALIASWARN (towlower);
+_GL_CXXALIASWARN (towupper);
+
+
+#endif /* _GL_WCTYPE_H */
+#endif /* _GL_WCTYPE_H */
diff --git a/gnu/wcwidth.c b/gnu/wcwidth.c
new file mode 100644 (file)
index 0000000..a102744
--- /dev/null
@@ -0,0 +1,53 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Determine the number of screen columns needed for a character.
+   Copyright (C) 2006, 2007, 2009, 2010 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 <wchar.h>
+
+/* Get iswprint.  */
+#include <wctype.h>
+
+#include "localcharset.h"
+#include "streq.h"
+#include "uniwidth.h"
+
+#undef wcwidth
+
+int
+rpl_wcwidth (wchar_t wc)
+{
+  /* In UTF-8 locales, use a Unicode aware width function.  */
+  const char *encoding = locale_charset ();
+  if (STREQ (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0 ,0))
+    {
+      /* We assume that in a UTF-8 locale, a wide character is the same as a
+         Unicode character.  */
+      return uc_width (wc, encoding);
+    }
+  else
+    {
+      /* Otherwise, fall back to the system's wcwidth function.  */
+#if HAVE_WCWIDTH
+      return wcwidth (wc);
+#else
+      return wc == 0 ? 0 : iswprint (wc) ? 1 : -1;
+#endif
+    }
+}
diff --git a/gnu/write.c b/gnu/write.c
new file mode 100644 (file)
index 0000000..702c8e6
--- /dev/null
@@ -0,0 +1,64 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* POSIX compatible write() function.
+   Copyright (C) 2008-2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+   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>
+
+/* Replace this function only if module 'sigpipe' is requested.  */
+#if GNULIB_SIGPIPE
+
+/* On native Windows platforms, SIGPIPE does not exist.  When write() is
+   called on a pipe with no readers, WriteFile() fails with error
+   GetLastError() = ERROR_NO_DATA, and write() in consequence fails with
+   error EINVAL.  */
+
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+
+#  include <errno.h>
+#  include <signal.h>
+#  include <io.h>
+
+#  define WIN32_LEAN_AND_MEAN  /* avoid including junk */
+#  include <windows.h>
+
+ssize_t
+rpl_write (int fd, const void *buf, size_t count)
+#undef write
+{
+  ssize_t ret = write (fd, buf, count);
+
+  if (ret < 0)
+    {
+      if (GetLastError () == ERROR_NO_DATA
+          && GetFileType ((HANDLE) _get_osfhandle (fd)) == FILE_TYPE_PIPE)
+        {
+          /* Try to raise signal SIGPIPE.  */
+          raise (SIGPIPE);
+          /* If it is currently blocked or ignored, change errno from EINVAL
+             to EPIPE.  */
+          errno = EPIPE;
+        }
+    }
+  return ret;
+}
+
+# endif
+#endif
diff --git a/gnu/xalloc-die.c b/gnu/xalloc-die.c
new file mode 100644 (file)
index 0000000..4760bab
--- /dev/null
@@ -0,0 +1,43 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Report a memory allocation failure and exit.
+
+   Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2006, 2009, 2010
+   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>
+
+#include "xalloc.h"
+
+#include <stdlib.h>
+
+#include "error.h"
+#include "exitfail.h"
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
+void
+xalloc_die (void)
+{
+  error (exit_failure, 0, "%s", _("memory exhausted"));
+
+  /* The `noreturn' cannot be given to error, since it may return if
+     its first argument is 0.  To help compilers understand the
+     xalloc_die does not return, call abort.  Also, the abort is a
+     safety feature if exit_failure is 0 (which shouldn't happen).  */
+  abort ();
+}
diff --git a/gnu/xalloc.h b/gnu/xalloc.h
new file mode 100644 (file)
index 0000000..37500ed
--- /dev/null
@@ -0,0 +1,283 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* xalloc.h -- malloc with out-of-memory checking
+
+   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+   2000, 2003, 2004, 2006, 2007, 2008, 2009, 2010 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 XALLOC_H_
+# define XALLOC_H_
+
+# include <stddef.h>
+
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+
+# ifndef __attribute__
+#  if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
+#   define __attribute__(x)
+#  endif
+# endif
+
+# ifndef ATTRIBUTE_NORETURN
+#  define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+# endif
+
+# ifndef ATTRIBUTE_MALLOC
+#  if __GNUC__ >= 3
+#   define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+#  else
+#   define ATTRIBUTE_MALLOC
+#  endif
+# endif
+
+/* This function is always triggered when memory is exhausted.
+   It must be defined by the application, either explicitly
+   or by using gnulib's xalloc-die module.  This is the
+   function to call when one wants the program to die because of a
+   memory allocation failure.  */
+extern void xalloc_die (void) ATTRIBUTE_NORETURN;
+
+void *xmalloc (size_t s) ATTRIBUTE_MALLOC;
+void *xzalloc (size_t s) ATTRIBUTE_MALLOC;
+void *xcalloc (size_t n, size_t s) ATTRIBUTE_MALLOC;
+void *xrealloc (void *p, size_t s);
+void *x2realloc (void *p, size_t *pn);
+void *xmemdup (void const *p, size_t s) ATTRIBUTE_MALLOC;
+char *xstrdup (char const *str) ATTRIBUTE_MALLOC;
+
+/* Return 1 if an array of N objects, each of size S, cannot exist due
+   to size arithmetic overflow.  S must be positive and N must be
+   nonnegative.  This is a macro, not an inline function, so that it
+   works correctly even when SIZE_MAX < N.
+
+   By gnulib convention, SIZE_MAX represents overflow in size
+   calculations, so the conservative dividend to use here is
+   SIZE_MAX - 1, since SIZE_MAX might represent an overflowed value.
+   However, malloc (SIZE_MAX) fails on all known hosts where
+   sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for
+   exactly-SIZE_MAX allocations on such hosts; this avoids a test and
+   branch when S is known to be 1.  */
+# define xalloc_oversized(n, s) \
+    ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n))
+
+
+/* In the following macros, T must be an elementary or structure/union or
+   typedef'ed type, or a pointer to such a type.  To apply one of the
+   following macros to a function pointer or array type, you need to typedef
+   it first and use the typedef name.  */
+
+/* Allocate an object of type T dynamically, with error checking.  */
+/* extern t *XMALLOC (typename t); */
+# define XMALLOC(t) ((t *) xmalloc (sizeof (t)))
+
+/* Allocate memory for N elements of type T, with error checking.  */
+/* extern t *XNMALLOC (size_t n, typename t); */
+# define XNMALLOC(n, t) \
+    ((t *) (sizeof (t) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (t))))
+
+/* Allocate an object of type T dynamically, with error checking,
+   and zero it.  */
+/* extern t *XZALLOC (typename t); */
+# define XZALLOC(t) ((t *) xzalloc (sizeof (t)))
+
+/* Allocate memory for N elements of type T, with error checking,
+   and zero it.  */
+/* extern t *XCALLOC (size_t n, typename t); */
+# define XCALLOC(n, t) \
+    ((t *) (sizeof (t) == 1 ? xzalloc (n) : xcalloc (n, sizeof (t))))
+
+
+# if HAVE_INLINE
+#  define static_inline static inline
+# else
+void *xnmalloc (size_t n, size_t s) ATTRIBUTE_MALLOC;
+void *xnrealloc (void *p, size_t n, size_t s);
+void *x2nrealloc (void *p, size_t *pn, size_t s);
+char *xcharalloc (size_t n) ATTRIBUTE_MALLOC;
+# endif
+
+# ifdef static_inline
+
+/* Allocate an array of N objects, each with S bytes of memory,
+   dynamically, with error checking.  S must be nonzero.  */
+
+static_inline void *xnmalloc (size_t n, size_t s) ATTRIBUTE_MALLOC;
+static_inline void *
+xnmalloc (size_t n, size_t s)
+{
+  if (xalloc_oversized (n, s))
+    xalloc_die ();
+  return xmalloc (n * s);
+}
+
+/* Change the size of an allocated block of memory P to an array of N
+   objects each of S bytes, with error checking.  S must be nonzero.  */
+
+static_inline void *
+xnrealloc (void *p, size_t n, size_t s)
+{
+  if (xalloc_oversized (n, s))
+    xalloc_die ();
+  return xrealloc (p, n * s);
+}
+
+/* If P is null, allocate a block of at least *PN such objects;
+   otherwise, reallocate P so that it contains more than *PN objects
+   each of S bytes.  *PN must be nonzero unless P is null, and S must
+   be nonzero.  Set *PN to the new number of objects, and return the
+   pointer to the new block.  *PN is never set to zero, and the
+   returned pointer is never null.
+
+   Repeated reallocations are guaranteed to make progress, either by
+   allocating an initial block with a nonzero size, or by allocating a
+   larger block.
+
+   In the following implementation, nonzero sizes are increased by a
+   factor of approximately 1.5 so that repeated reallocations have
+   O(N) overall cost rather than O(N**2) cost, but the
+   specification for this function does not guarantee that rate.
+
+   Here is an example of use:
+
+     int *p = NULL;
+     size_t used = 0;
+     size_t allocated = 0;
+
+     void
+     append_int (int value)
+       {
+         if (used == allocated)
+           p = x2nrealloc (p, &allocated, sizeof *p);
+         p[used++] = value;
+       }
+
+   This causes x2nrealloc to allocate a block of some nonzero size the
+   first time it is called.
+
+   To have finer-grained control over the initial size, set *PN to a
+   nonzero value before calling this function with P == NULL.  For
+   example:
+
+     int *p = NULL;
+     size_t used = 0;
+     size_t allocated = 0;
+     size_t allocated1 = 1000;
+
+     void
+     append_int (int value)
+       {
+         if (used == allocated)
+           {
+             p = x2nrealloc (p, &allocated1, sizeof *p);
+             allocated = allocated1;
+           }
+         p[used++] = value;
+       }
+
+   */
+
+static_inline void *
+x2nrealloc (void *p, size_t *pn, size_t s)
+{
+  size_t n = *pn;
+
+  if (! p)
+    {
+      if (! n)
+        {
+          /* The approximate size to use for initial small allocation
+             requests, when the invoking code specifies an old size of
+             zero.  64 bytes is the largest "small" request for the
+             GNU C library malloc.  */
+          enum { DEFAULT_MXFAST = 64 };
+
+          n = DEFAULT_MXFAST / s;
+          n += !n;
+        }
+    }
+  else
+    {
+      /* Set N = ceil (1.5 * N) so that progress is made if N == 1.
+         Check for overflow, so that N * S stays in size_t range.
+         The check is slightly conservative, but an exact check isn't
+         worth the trouble.  */
+      if ((size_t) -1 / 3 * 2 / s <= n)
+        xalloc_die ();
+      n += (n + 1) / 2;
+    }
+
+  *pn = n;
+  return xrealloc (p, n * s);
+}
+
+/* Return a pointer to a new buffer of N bytes.  This is like xmalloc,
+   except it returns char *.  */
+
+static_inline char *xcharalloc (size_t n) ATTRIBUTE_MALLOC;
+static_inline char *
+xcharalloc (size_t n)
+{
+  return XNMALLOC (n, char);
+}
+
+# endif
+
+# ifdef __cplusplus
+}
+
+/* C++ does not allow conversions from void * to other pointer types
+   without a cast.  Use templates to work around the problem when
+   possible.  */
+
+template <typename T> inline T *
+xrealloc (T *p, size_t s)
+{
+  return (T *) xrealloc ((void *) p, s);
+}
+
+template <typename T> inline T *
+xnrealloc (T *p, size_t n, size_t s)
+{
+  return (T *) xnrealloc ((void *) p, n, s);
+}
+
+template <typename T> inline T *
+x2realloc (T *p, size_t *pn)
+{
+  return (T *) x2realloc ((void *) p, pn);
+}
+
+template <typename T> inline T *
+x2nrealloc (T *p, size_t *pn, size_t s)
+{
+  return (T *) x2nrealloc ((void *) p, pn, s);
+}
+
+template <typename T> inline T *
+xmemdup (T const *p, size_t s)
+{
+  return (T *) xmemdup ((void const *) p, s);
+}
+
+# endif
+
+
+#endif /* !XALLOC_H_ */
diff --git a/gnu/xasprintf.c b/gnu/xasprintf.c
new file mode 100644 (file)
index 0000000..198589d
--- /dev/null
@@ -0,0 +1,36 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* vasprintf and asprintf with out-of-memory checking.
+   Copyright (C) 1999, 2002-2004, 2006, 2009-2010 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 "xvasprintf.h"
+
+char *
+xasprintf (const char *format, ...)
+{
+  va_list args;
+  char *result;
+
+  va_start (args, format);
+  result = xvasprintf (format, args);
+  va_end (args);
+
+  return result;
+}
diff --git a/gnu/xgetcwd.c b/gnu/xgetcwd.c
new file mode 100644 (file)
index 0000000..f70011b
--- /dev/null
@@ -0,0 +1,43 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* xgetcwd.c -- return current directory with unlimited length
+
+   Copyright (C) 2001, 2003-2004, 2006-2007, 2009-2010 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.  */
+
+#include <config.h>
+
+#include "xgetcwd.h"
+
+#include <errno.h>
+#include <unistd.h>
+
+#include "xalloc.h"
+
+/* Return the current directory, newly allocated.
+   Upon an out-of-memory error, call xalloc_die.
+   Upon any other type of error, return NULL.  */
+
+char *
+xgetcwd (void)
+{
+  char *cwd = getcwd (NULL, 0);
+  if (! cwd && errno == ENOMEM)
+    xalloc_die ();
+  return cwd;
+}
diff --git a/gnu/xgetcwd.h b/gnu/xgetcwd.h
new file mode 100644 (file)
index 0000000..8f2f4ab
--- /dev/null
@@ -0,0 +1,19 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* prototype for xgetcwd
+   Copyright (C) 1995, 2001, 2003, 2009-2010 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/>.  */
+
+extern char *xgetcwd (void);
diff --git a/gnu/xmalloc.c b/gnu/xmalloc.c
new file mode 100644 (file)
index 0000000..99d5bf4
--- /dev/null
@@ -0,0 +1,120 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* xmalloc.c -- malloc with out of memory checking
+
+   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+   2000, 2002, 2003, 2004, 2005, 2006, 2008, 2009, 2010 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>
+
+#if ! HAVE_INLINE
+# define static_inline
+#endif
+#include "xalloc.h"
+#undef static_inline
+
+#include <stdlib.h>
+#include <string.h>
+
+/* 1 if calloc is known to be compatible with GNU calloc.  This
+   matters if we are not also using the calloc module, which defines
+   HAVE_CALLOC and supports the GNU API even on non-GNU platforms.  */
+#if defined HAVE_CALLOC || defined __GLIBC__
+enum { HAVE_GNU_CALLOC = 1 };
+#else
+enum { HAVE_GNU_CALLOC = 0 };
+#endif
+
+/* Allocate N bytes of memory dynamically, with error checking.  */
+
+void *
+xmalloc (size_t n)
+{
+  void *p = malloc (n);
+  if (!p && n != 0)
+    xalloc_die ();
+  return p;
+}
+
+/* Change the size of an allocated block of memory P to N bytes,
+   with error checking.  */
+
+void *
+xrealloc (void *p, size_t n)
+{
+  p = realloc (p, n);
+  if (!p && n != 0)
+    xalloc_die ();
+  return p;
+}
+
+/* If P is null, allocate a block of at least *PN bytes; otherwise,
+   reallocate P so that it contains more than *PN bytes.  *PN must be
+   nonzero unless P is null.  Set *PN to the new block's size, and
+   return the pointer to the new block.  *PN is never set to zero, and
+   the returned pointer is never null.  */
+
+void *
+x2realloc (void *p, size_t *pn)
+{
+  return x2nrealloc (p, pn, 1);
+}
+
+/* Allocate S bytes of zeroed memory dynamically, with error checking.
+   There's no need for xnzalloc (N, S), since it would be equivalent
+   to xcalloc (N, S).  */
+
+void *
+xzalloc (size_t s)
+{
+  return memset (xmalloc (s), 0, s);
+}
+
+/* Allocate zeroed memory for N elements of S bytes, with error
+   checking.  S must be nonzero.  */
+
+void *
+xcalloc (size_t n, size_t s)
+{
+  void *p;
+  /* Test for overflow, since some calloc implementations don't have
+     proper overflow checks.  But omit overflow and size-zero tests if
+     HAVE_GNU_CALLOC, since GNU calloc catches overflow and never
+     returns NULL if successful.  */
+  if ((! HAVE_GNU_CALLOC && xalloc_oversized (n, s))
+      || (! (p = calloc (n, s)) && (HAVE_GNU_CALLOC || n != 0)))
+    xalloc_die ();
+  return p;
+}
+
+/* Clone an object P of size S, with error checking.  There's no need
+   for xnmemdup (P, N, S), since xmemdup (P, N * S) works without any
+   need for an arithmetic overflow check.  */
+
+void *
+xmemdup (void const *p, size_t s)
+{
+  return memcpy (xmalloc (s), p, s);
+}
+
+/* Clone STRING.  */
+
+char *
+xstrdup (char const *string)
+{
+  return xmemdup (string, strlen (string) + 1);
+}
diff --git a/gnu/xsize.h b/gnu/xsize.h
new file mode 100644 (file)
index 0000000..e238635
--- /dev/null
@@ -0,0 +1,110 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* xsize.h -- Checked size_t computations.
+
+   Copyright (C) 2003, 2008, 2009, 2010 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _XSIZE_H
+#define _XSIZE_H
+
+/* Get size_t.  */
+#include <stddef.h>
+
+/* Get SIZE_MAX.  */
+#include <limits.h>
+#if HAVE_STDINT_H
+# include <stdint.h>
+#endif
+
+/* The size of memory objects is often computed through expressions of
+   type size_t. Example:
+      void* p = malloc (header_size + n * element_size).
+   These computations can lead to overflow.  When this happens, malloc()
+   returns a piece of memory that is way too small, and the program then
+   crashes while attempting to fill the memory.
+   To avoid this, the functions and macros in this file check for overflow.
+   The convention is that SIZE_MAX represents overflow.
+   malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc
+   implementation that uses mmap --, it's recommended to use size_overflow_p()
+   or size_in_bounds_p() before invoking malloc().
+   The example thus becomes:
+      size_t size = xsum (header_size, xtimes (n, element_size));
+      void *p = (size_in_bounds_p (size) ? malloc (size) : NULL);
+*/
+
+/* Convert an arbitrary value >= 0 to type size_t.  */
+#define xcast_size_t(N) \
+  ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX)
+
+/* Sum of two sizes, with overflow check.  */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum (size_t size1, size_t size2)
+{
+  size_t sum = size1 + size2;
+  return (sum >= size1 ? sum : SIZE_MAX);
+}
+
+/* Sum of three sizes, with overflow check.  */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum3 (size_t size1, size_t size2, size_t size3)
+{
+  return xsum (xsum (size1, size2), size3);
+}
+
+/* Sum of four sizes, with overflow check.  */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum4 (size_t size1, size_t size2, size_t size3, size_t size4)
+{
+  return xsum (xsum (xsum (size1, size2), size3), size4);
+}
+
+/* Maximum of two sizes, with overflow check.  */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xmax (size_t size1, size_t size2)
+{
+  /* No explicit check is needed here, because for any n:
+     max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX.  */
+  return (size1 >= size2 ? size1 : size2);
+}
+
+/* Multiplication of a count with an element size, with overflow check.
+   The count must be >= 0 and the element size must be > 0.
+   This is a macro, not an inline function, so that it works correctly even
+   when N is of a wider type and N > SIZE_MAX.  */
+#define xtimes(N, ELSIZE) \
+  ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX)
+
+/* Check for overflow.  */
+#define size_overflow_p(SIZE) \
+  ((SIZE) == SIZE_MAX)
+/* Check against overflow.  */
+#define size_in_bounds_p(SIZE) \
+  ((SIZE) != SIZE_MAX)
+
+#endif /* _XSIZE_H */
diff --git a/gnu/xstrndup.c b/gnu/xstrndup.c
new file mode 100644 (file)
index 0000000..3fa3e31
--- /dev/null
@@ -0,0 +1,38 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Duplicate a bounded initial segment of a string, with out-of-memory
+   checking.
+   Copyright (C) 2003, 2006, 2007, 2009, 2010 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 "xstrndup.h"
+
+#include <string.h>
+#include "xalloc.h"
+
+/* Return a newly allocated copy of at most N bytes of STRING.
+   In other words, return a copy of the initial segment of length N of
+   STRING.  */
+char *
+xstrndup (const char *string, size_t n)
+{
+  char *s = strndup (string, n);
+  if (! s)
+    xalloc_die ();
+  return s;
+}
diff --git a/gnu/xstrndup.h b/gnu/xstrndup.h
new file mode 100644 (file)
index 0000000..1d7ec80
--- /dev/null
@@ -0,0 +1,25 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* Duplicate a bounded initial segment of a string, with out-of-memory
+   checking.
+   Copyright (C) 2003, 2009, 2010 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 <stddef.h>
+
+/* Return a newly allocated copy of at most N bytes of STRING.
+   In other words, return a copy of the initial segment of length N of
+   STRING.  */
+extern char *xstrndup (const char *string, size_t n);
diff --git a/gnu/xstrtol-error.c b/gnu/xstrtol-error.c
new file mode 100644 (file)
index 0000000..f6b2e95
--- /dev/null
@@ -0,0 +1,100 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A more useful interface to strtol.
+
+   Copyright (C) 1995-1996, 1998-1999, 2001-2004, 2006-2010 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>
+#include "xstrtol.h"
+
+#include <stdlib.h>
+
+#include "error.h"
+#include "exitfail.h"
+#include "gettext.h"
+
+#define N_(msgid) msgid
+
+/* Report an error for an invalid integer in an option argument.
+
+   ERR is the error code returned by one of the xstrto* functions.
+
+   Use OPT_IDX to decide whether to print the short option string "C"
+   or "-C" or a long option string derived from LONG_OPTION.  OPT_IDX
+   is -2 if the short option "C" was used, without any leading "-"; it
+   is -1 if the short option "-C" was used; otherwise it is an index
+   into LONG_OPTIONS, which should have a name preceded by two '-'
+   characters.
+
+   ARG is the option-argument containing the integer.
+
+   After reporting an error, exit with status EXIT_STATUS if it is
+   nonzero.  */
+
+static void
+xstrtol_error (enum strtol_error err,
+               int opt_idx, char c, struct option const *long_options,
+               char const *arg,
+               int exit_status)
+{
+  char const *hyphens = "--";
+  char const *msgid;
+  char const *option;
+  char option_buffer[2];
+
+  switch (err)
+    {
+    default:
+      abort ();
+
+    case LONGINT_INVALID:
+      msgid = N_("invalid %s%s argument `%s'");
+      break;
+
+    case LONGINT_INVALID_SUFFIX_CHAR:
+    case LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW:
+      msgid = N_("invalid suffix in %s%s argument `%s'");
+      break;
+
+    case LONGINT_OVERFLOW:
+      msgid = N_("%s%s argument `%s' too large");
+      break;
+    }
+
+  if (opt_idx < 0)
+    {
+      hyphens -= opt_idx;
+      option_buffer[0] = c;
+      option_buffer[1] = '\0';
+      option = option_buffer;
+    }
+  else
+    option = long_options[opt_idx].name;
+
+  error (exit_status, 0, gettext (msgid), hyphens, option, arg);
+}
+
+/* Like xstrtol_error, except exit with a failure status.  */
+
+void
+xstrtol_fatal (enum strtol_error err,
+               int opt_idx, char c, struct option const *long_options,
+               char const *arg)
+{
+  xstrtol_error (err, opt_idx, c, long_options, arg, exit_failure);
+  abort ();
+}
diff --git a/gnu/xstrtol.c b/gnu/xstrtol.c
new file mode 100644 (file)
index 0000000..558e04d
--- /dev/null
@@ -0,0 +1,230 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A more useful interface to strtol.
+
+   Copyright (C) 1995-1996, 1998-2001, 2003-2007, 2009-2010 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. */
+
+#ifndef __strtol
+# define __strtol strtol
+# define __strtol_t long int
+# define __xstrtol xstrtol
+# define STRTOL_T_MINIMUM LONG_MIN
+# define STRTOL_T_MAXIMUM LONG_MAX
+#endif
+
+#include <config.h>
+
+#include "xstrtol.h"
+
+/* Some pre-ANSI implementations (e.g. SunOS 4)
+   need stderr defined if assertion checking is enabled.  */
+#include <stdio.h>
+
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "intprops.h"
+
+static strtol_error
+bkm_scale (__strtol_t *x, int scale_factor)
+{
+  if (TYPE_SIGNED (__strtol_t) && *x < STRTOL_T_MINIMUM / scale_factor)
+    {
+      *x = STRTOL_T_MINIMUM;
+      return LONGINT_OVERFLOW;
+    }
+  if (STRTOL_T_MAXIMUM / scale_factor < *x)
+    {
+      *x = STRTOL_T_MAXIMUM;
+      return LONGINT_OVERFLOW;
+    }
+  *x *= scale_factor;
+  return LONGINT_OK;
+}
+
+static strtol_error
+bkm_scale_by_power (__strtol_t *x, int base, int power)
+{
+  strtol_error err = LONGINT_OK;
+  while (power--)
+    err |= bkm_scale (x, base);
+  return err;
+}
+
+/* FIXME: comment.  */
+
+strtol_error
+__xstrtol (const char *s, char **ptr, int strtol_base,
+           __strtol_t *val, const char *valid_suffixes)
+{
+  char *t_ptr;
+  char **p;
+  __strtol_t tmp;
+  strtol_error err = LONGINT_OK;
+
+  assert (0 <= strtol_base && strtol_base <= 36);
+
+  p = (ptr ? ptr : &t_ptr);
+
+  if (! TYPE_SIGNED (__strtol_t))
+    {
+      const char *q = s;
+      unsigned char ch = *q;
+      while (isspace (ch))
+        ch = *++q;
+      if (ch == '-')
+        return LONGINT_INVALID;
+    }
+
+  errno = 0;
+  tmp = __strtol (s, p, strtol_base);
+
+  if (*p == s)
+    {
+      /* If there is no number but there is a valid suffix, assume the
+         number is 1.  The string is invalid otherwise.  */
+      if (valid_suffixes && **p && strchr (valid_suffixes, **p))
+        tmp = 1;
+      else
+        return LONGINT_INVALID;
+    }
+  else if (errno != 0)
+    {
+      if (errno != ERANGE)
+        return LONGINT_INVALID;
+      err = LONGINT_OVERFLOW;
+    }
+
+  /* Let valid_suffixes == NULL mean `allow any suffix'.  */
+  /* FIXME: update all callers except the ones that allow suffixes
+     after the number, changing last parameter NULL to `""'.  */
+  if (!valid_suffixes)
+    {
+      *val = tmp;
+      return err;
+    }
+
+  if (**p != '\0')
+    {
+      int base = 1024;
+      int suffixes = 1;
+      strtol_error overflow;
+
+      if (!strchr (valid_suffixes, **p))
+        {
+          *val = tmp;
+          return err | LONGINT_INVALID_SUFFIX_CHAR;
+        }
+
+      if (strchr (valid_suffixes, '0'))
+        {
+          /* The ``valid suffix'' '0' is a special flag meaning that
+             an optional second suffix is allowed, which can change
+             the base.  A suffix "B" (e.g. "100MB") stands for a power
+             of 1000, whereas a suffix "iB" (e.g. "100MiB") stands for
+             a power of 1024.  If no suffix (e.g. "100M"), assume
+             power-of-1024.  */
+
+          switch (p[0][1])
+            {
+            case 'i':
+              if (p[0][2] == 'B')
+                suffixes += 2;
+              break;
+
+            case 'B':
+            case 'D': /* 'D' is obsolescent */
+              base = 1000;
+              suffixes++;
+              break;
+            }
+        }
+
+      switch (**p)
+        {
+        case 'b':
+          overflow = bkm_scale (&tmp, 512);
+          break;
+
+        case 'B':
+          overflow = bkm_scale (&tmp, 1024);
+          break;
+
+        case 'c':
+          overflow = 0;
+          break;
+
+        case 'E': /* exa or exbi */
+          overflow = bkm_scale_by_power (&tmp, base, 6);
+          break;
+
+        case 'G': /* giga or gibi */
+        case 'g': /* 'g' is undocumented; for compatibility only */
+          overflow = bkm_scale_by_power (&tmp, base, 3);
+          break;
+
+        case 'k': /* kilo */
+        case 'K': /* kibi */
+          overflow = bkm_scale_by_power (&tmp, base, 1);
+          break;
+
+        case 'M': /* mega or mebi */
+        case 'm': /* 'm' is undocumented; for compatibility only */
+          overflow = bkm_scale_by_power (&tmp, base, 2);
+          break;
+
+        case 'P': /* peta or pebi */
+          overflow = bkm_scale_by_power (&tmp, base, 5);
+          break;
+
+        case 'T': /* tera or tebi */
+        case 't': /* 't' is undocumented; for compatibility only */
+          overflow = bkm_scale_by_power (&tmp, base, 4);
+          break;
+
+        case 'w':
+          overflow = bkm_scale (&tmp, 2);
+          break;
+
+        case 'Y': /* yotta or 2**80 */
+          overflow = bkm_scale_by_power (&tmp, base, 8);
+          break;
+
+        case 'Z': /* zetta or 2**70 */
+          overflow = bkm_scale_by_power (&tmp, base, 7);
+          break;
+
+        default:
+          *val = tmp;
+          return err | LONGINT_INVALID_SUFFIX_CHAR;
+        }
+
+      err |= overflow;
+      *p += suffixes;
+      if (**p)
+        err |= LONGINT_INVALID_SUFFIX_CHAR;
+    }
+
+  *val = tmp;
+  return err;
+}
diff --git a/gnu/xstrtol.h b/gnu/xstrtol.h
new file mode 100644 (file)
index 0000000..98d566c
--- /dev/null
@@ -0,0 +1,85 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* A more useful interface to strtol.
+
+   Copyright (C) 1995-1996, 1998-1999, 2001-2004, 2006-2010 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 XSTRTOL_H_
+# define XSTRTOL_H_ 1
+
+# include <getopt.h>
+# include <inttypes.h>
+
+# ifndef _STRTOL_ERROR
+enum strtol_error
+  {
+    LONGINT_OK = 0,
+
+    /* These two values can be ORed together, to indicate that both
+       errors occurred.  */
+    LONGINT_OVERFLOW = 1,
+    LONGINT_INVALID_SUFFIX_CHAR = 2,
+
+    LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW = (LONGINT_INVALID_SUFFIX_CHAR
+                                                 | LONGINT_OVERFLOW),
+    LONGINT_INVALID = 4
+  };
+typedef enum strtol_error strtol_error;
+# endif
+
+# define _DECLARE_XSTRTOL(name, type) \
+  strtol_error name (const char *, char **, int, type *, const char *);
+_DECLARE_XSTRTOL (xstrtol, long int)
+_DECLARE_XSTRTOL (xstrtoul, unsigned long int)
+_DECLARE_XSTRTOL (xstrtoimax, intmax_t)
+_DECLARE_XSTRTOL (xstrtoumax, uintmax_t)
+
+#if HAVE_LONG_LONG_INT
+_DECLARE_XSTRTOL (xstrtoll, long long int)
+_DECLARE_XSTRTOL (xstrtoull, unsigned long long int)
+#endif
+
+#ifndef __attribute__
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
+#  define __attribute__(x)
+# endif
+#endif
+
+#ifndef ATTRIBUTE_NORETURN
+# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+#endif
+
+/* Report an error for an invalid integer in an option argument.
+
+   ERR is the error code returned by one of the xstrto* functions.
+
+   Use OPT_IDX to decide whether to print the short option string "C"
+   or "-C" or a long option string derived from LONG_OPTION.  OPT_IDX
+   is -2 if the short option "C" was used, without any leading "-"; it
+   is -1 if the short option "-C" was used; otherwise it is an index
+   into LONG_OPTIONS, which should have a name preceded by two '-'
+   characters.
+
+   ARG is the option-argument containing the integer.
+
+   After reporting an error, exit with a failure status.  */
+
+void xstrtol_fatal (enum strtol_error,
+                    int, char, struct option const *,
+                    char const *) ATTRIBUTE_NORETURN;
+
+#endif /* not XSTRTOL_H_ */
diff --git a/gnu/xstrtoul.c b/gnu/xstrtoul.c
new file mode 100644 (file)
index 0000000..63968db
--- /dev/null
@@ -0,0 +1,8 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+#define __strtol strtoul
+#define __strtol_t unsigned long int
+#define __xstrtol xstrtoul
+#define STRTOL_T_MINIMUM 0
+#define STRTOL_T_MAXIMUM ULONG_MAX
+#include "xstrtol.c"
diff --git a/gnu/xstrtoumax.c b/gnu/xstrtoumax.c
new file mode 100644 (file)
index 0000000..fce8d5f
--- /dev/null
@@ -0,0 +1,8 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+#define __strtol strtoumax
+#define __strtol_t uintmax_t
+#define __xstrtol xstrtoumax
+#define STRTOL_T_MINIMUM 0
+#define STRTOL_T_MAXIMUM UINTMAX_MAX
+#include "xstrtol.c"
diff --git a/gnu/xvasprintf.c b/gnu/xvasprintf.c
new file mode 100644 (file)
index 0000000..448de07
--- /dev/null
@@ -0,0 +1,112 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* vasprintf and asprintf with out-of-memory checking.
+   Copyright (C) 1999, 2002-2004, 2006-2010 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 "xvasprintf.h"
+
+#include <errno.h>
+#include <limits.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "xalloc.h"
+
+/* Checked size_t computations.  */
+#include "xsize.h"
+
+static inline char *
+xstrcat (size_t argcount, va_list args)
+{
+  char *result;
+  va_list ap;
+  size_t totalsize;
+  size_t i;
+  char *p;
+
+  /* Determine the total size.  */
+  totalsize = 0;
+  va_copy (ap, args);
+  for (i = argcount; i > 0; i--)
+    {
+      const char *next = va_arg (ap, const char *);
+      totalsize = xsum (totalsize, strlen (next));
+    }
+  va_end (ap);
+
+  /* Test for overflow in the summing pass above or in (totalsize + 1) below.
+     Also, don't return a string longer than INT_MAX, for consistency with
+     vasprintf().  */
+  if (totalsize == SIZE_MAX || totalsize > INT_MAX)
+    {
+      errno = EOVERFLOW;
+      return NULL;
+    }
+
+  /* Allocate and fill the result string.  */
+  result = XNMALLOC (totalsize + 1, char);
+  p = result;
+  for (i = argcount; i > 0; i--)
+    {
+      const char *next = va_arg (args, const char *);
+      size_t len = strlen (next);
+      memcpy (p, next, len);
+      p += len;
+    }
+  *p = '\0';
+
+  return result;
+}
+
+char *
+xvasprintf (const char *format, va_list args)
+{
+  char *result;
+
+  /* Recognize the special case format = "%s...%s".  It is a frequently used
+     idiom for string concatenation and needs to be fast.  We don't want to
+     have a separate function xstrcat() for this purpose.  */
+  {
+    size_t argcount = 0;
+    const char *f;
+
+    for (f = format;;)
+      {
+        if (*f == '\0')
+          /* Recognized the special case of string concatenation.  */
+          return xstrcat (argcount, args);
+        if (*f != '%')
+          break;
+        f++;
+        if (*f != 's')
+          break;
+        f++;
+        argcount++;
+      }
+  }
+
+  if (vasprintf (&result, format, args) < 0)
+    {
+      if (errno == ENOMEM)
+        xalloc_die ();
+      return NULL;
+    }
+
+  return result;
+}
diff --git a/gnu/xvasprintf.h b/gnu/xvasprintf.h
new file mode 100644 (file)
index 0000000..835828a
--- /dev/null
@@ -0,0 +1,57 @@
+/* -*- buffer-read-only: t -*- vi: set ro: */
+/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
+/* vasprintf and asprintf with out-of-memory checking.
+   Copyright (C) 2002-2004, 2006-2010 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 _XVASPRINTF_H
+#define _XVASPRINTF_H
+
+/* Get va_list.  */
+#include <stdarg.h>
+
+#ifndef __attribute__
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The __-protected variants of the attributes 'format' and 'printf' are
+   accepted by gcc versions 2.6.4 (effectively 2.7) and later.
+   We enable __attribute__ only if these are supported too, because
+   gnulib and libintl do '#define printf __printf__' when they override
+   the 'printf' function.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+#  define __attribute__(Spec)   /* empty */
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Write formatted output to a string dynamically allocated with malloc(),
+   and return it.  Upon [ENOMEM] memory allocation error, call xalloc_die.
+   On some other error
+     - [EOVERFLOW] resulting string length is > INT_MAX,
+     - [EINVAL] invalid format string,
+     - [EILSEQ] error during conversion between wide and multibyte characters,
+   return NULL.  */
+extern char *xasprintf (const char *format, ...)
+       __attribute__ ((__format__ (__printf__, 1, 2)));
+extern char *xvasprintf (const char *format, va_list args)
+       __attribute__ ((__format__ (__printf__, 1, 0)));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _XVASPRINTF_H */
index 466a477a7fd8ee444af72fd8d5e15ed750d69f29..4bfee8bb06db082d3e83a3582a2952901f813f67 100644 (file)
@@ -1,7 +1,7 @@
 # Makefile for GNU tar library.                        -*- Makefile -*-
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2003, 2004,
-# 2005, 2006, 2007 Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2009, 2010 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
 # with this program; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-include gnulib.mk
-
+noinst_LIBRARIES=libtar.a
 rmt-command.h : Makefile
-       rm -f $@-t $@
-       echo "#ifndef DEFAULT_RMT_COMMAND" >> $@-t
-       echo "# define DEFAULT_RMT_COMMAND \"$(DEFAULT_RMT_DIR)/`echo rmt | sed '$(transform)'`$(EXEEXT)\"" >> $@-t
-       echo "#endif" >> $@-t
-       mv $@-t $@
-BUILT_SOURCES += rmt-command.h
-CLEANFILES += rmt-command.h rmt-command.h-t
-
-noinst_HEADERS += system.h system-ioctl.h rmt.h paxlib.h stdopen.h
-libtar_a_SOURCES += \
+       $(AM_V_GEN)rm -f $@-t $@
+       $(AM_V_at)echo "#ifndef DEFAULT_RMT_COMMAND" >> $@-t
+       $(AM_V_at)echo "# define DEFAULT_RMT_COMMAND \"$(DEFAULT_RMT_DIR)/`echo rmt | sed '$(transform)'`$(EXEEXT)\"" >> $@-t
+       $(AM_V_at)echo "#endif" >> $@-t
+       $(AM_V_at)mv $@-t $@
+BUILT_SOURCES = rmt-command.h
+CLEANFILES = rmt-command.h rmt-command.h-t
+INCLUDES = -I$(top_srcdir)/gnu -I../ -I../gnu 
+
+noinst_HEADERS = system.h system-ioctl.h rmt.h paxlib.h stdopen.h
+libtar_a_SOURCES = \
   paxerror.c paxexit.c paxlib.h paxnames.c \
   prepargs.c prepargs.h \
   rtapelib.c \
@@ -37,5 +37,3 @@ libtar_a_SOURCES += \
   stdopen.c stdopen.h \
   system.h system-ioctl.h
 
-libtar_a_LIBADD += $(LIBOBJS)
-libtar_a_DEPENDENCIES += $(LIBOBJS)
index 0c6adb2f695bd1163eb9f260e41cfe054672da23..4ac8db7f565a7a308e5cab40fbd81acafe854c86 100644 (file)
@@ -1,8 +1,9 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -17,7 +18,7 @@
 # Makefile for GNU tar library.                        -*- Makefile -*-
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2003, 2004,
-# 2005, 2006, 2007 Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2009, 2010 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
 # with this program; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-# Copyright (C) 2002-2009 Free Software Foundation, Inc.
-#
-# This file is free software, distributed under the terms of the GNU
-# General Public License.  As a special exception to the GNU General
-# Public License, this file may be distributed as part of a program
-# that contains a configuration script generated by Autoconf, under
-# the same distribution terms as the rest of that program.
-#
-# Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=. --local-dir=gl --lib=libtar --source-base=.#bootmp/lib --m4-base=.#bootmp/m4 --doc-base=.#bootmp/doc --tests-base=.#bootmp/tests --aux-dir=.#bootmp/build-aux --avoid=lock --no-libtool --macro-prefix=gl alloca argmatch argp backupfile closeout configmake dirname error exclude exitfail fileblocks fnmatch-gnu fseeko ftruncate full-write getdate getline getopt getpagesize gettext gettime hash human inttostr inttypes lchown localcharset mkdtemp modechange obstack quote quotearg rpmatch safe-read save-cwd savedir setenv snprintf stat-time stdbool stdint stpcpy strdup-posix strerror strtol strtoul timespec unlinkdir unlocked-io utime utimens version-etc-fsf xalloc xalloc-die xgetcwd xstrtoumax
-
-
 
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
@@ -64,72 +54,79 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
-       $(srcdir)/Makefile.in $(srcdir)/gnulib.mk alloca.c getdate.c \
-       waitpid.c
 subdir = lib
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
        $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argmatch.m4 \
        $(top_srcdir)/m4/argp.m4 $(top_srcdir)/m4/backupfile.m4 \
        $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \
-       $(top_srcdir)/m4/canonicalize-lgpl.m4 \
+       $(top_srcdir)/m4/canonicalize.m4 \
        $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/chown.m4 \
        $(top_srcdir)/m4/clock_time.m4 \
        $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \
        $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
-       $(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/dirent_h.m4 \
-       $(top_srcdir)/m4/dirfd.m4 $(top_srcdir)/m4/dirname.m4 \
-       $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \
-       $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eealloc.m4 \
-       $(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
-       $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exclude.m4 \
-       $(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
+       $(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/dirent-safer.m4 \
+       $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \
+       $(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dos.m4 \
+       $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+       $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+       $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+       $(top_srcdir)/m4/exclude.m4 $(top_srcdir)/m4/extensions.m4 \
        $(top_srcdir)/m4/fchdir.m4 $(top_srcdir)/m4/fclose.m4 \
-       $(top_srcdir)/m4/fcntl-safer.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+       $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \
+       $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \
        $(top_srcdir)/m4/fileblocks.m4 $(top_srcdir)/m4/float_h.m4 \
        $(top_srcdir)/m4/fnmatch.m4 $(top_srcdir)/m4/fpending.m4 \
        $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftruncate.m4 \
        $(top_srcdir)/m4/getcwd-abort-bug.m4 \
        $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \
        $(top_srcdir)/m4/getdate.m4 $(top_srcdir)/m4/getdelim.m4 \
-       $(top_srcdir)/m4/getline.m4 $(top_srcdir)/m4/getopt.m4 \
-       $(top_srcdir)/m4/getpagesize.m4 $(top_srcdir)/m4/gettext.m4 \
-       $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \
-       $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \
+       $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getline.m4 \
+       $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \
+       $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettime.m4 \
+       $(top_srcdir)/m4/gettimeofday.m4 $(top_srcdir)/m4/glibc21.m4 \
+       $(top_srcdir)/m4/gnulib-common.m4 \
        $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/hash.m4 \
        $(top_srcdir)/m4/human.m4 $(top_srcdir)/m4/iconv.m4 \
        $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \
        $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
        $(top_srcdir)/m4/inttostr.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
        $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
-       $(top_srcdir)/m4/lchown.m4 $(top_srcdir)/m4/lib-ld.m4 \
-       $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+       $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/lchown.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 \
        $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
        $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \
        $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \
        $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/malloc.m4 \
        $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/mbchar.m4 \
        $(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrtowc.m4 \
-       $(top_srcdir)/m4/mbscasecmp.m4 $(top_srcdir)/m4/mbsinit.m4 \
-       $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mempcpy.m4 \
-       $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/mkdtemp.m4 \
-       $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/modechange.m4 \
-       $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nls.m4 \
-       $(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/openat.m4 \
-       $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/paxutils.m4 \
-       $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf.m4 \
+       $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbsrtowcs.m4 \
+       $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/memchr.m4 \
+       $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/memrchr.m4 \
+       $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkdtemp.m4 \
+       $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \
+       $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/modechange.m4 \
+       $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nl_langinfo.m4 \
+       $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/open.m4 \
+       $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/pathmax.m4 \
+       $(top_srcdir)/m4/paxutils.m4 $(top_srcdir)/m4/po.m4 \
+       $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/priv-set.m4 \
        $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/quote.m4 \
        $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \
        $(top_srcdir)/m4/readlink.m4 $(top_srcdir)/m4/realloc.m4 \
-       $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rmt.m4 \
-       $(top_srcdir)/m4/rpmatch.m4 $(top_srcdir)/m4/rtapelib.m4 \
-       $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/safe-write.m4 \
+       $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rmdir.m4 \
+       $(top_srcdir)/m4/rmt.m4 $(top_srcdir)/m4/rpmatch.m4 \
+       $(top_srcdir)/m4/rtapelib.m4 $(top_srcdir)/m4/safe-read.m4 \
+       $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/same.m4 \
        $(top_srcdir)/m4/save-cwd.m4 $(top_srcdir)/m4/savedir.m4 \
        $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/size_max.m4 \
        $(top_srcdir)/m4/sleep.m4 $(top_srcdir)/m4/snprintf.m4 \
        $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
-       $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \
+       $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \
+       $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
        $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
        $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
        $(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strcase.m4 \
@@ -145,71 +142,68 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
        $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \
        $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \
        $(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-       $(top_srcdir)/m4/unlinkdir.m4 $(top_srcdir)/m4/unlocked-io.m4 \
-       $(top_srcdir)/m4/utimbuf.m4 $(top_srcdir)/m4/utime.m4 \
-       $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
-       $(top_srcdir)/m4/utimes.m4 $(top_srcdir)/m4/vasnprintf.m4 \
-       $(top_srcdir)/m4/vsnprintf.m4 $(top_srcdir)/m4/wchar.m4 \
+       $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+       $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utimbuf.m4 \
+       $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes.m4 \
+       $(top_srcdir)/m4/vasnprintf.m4 $(top_srcdir)/m4/vasprintf.m4 \
+       $(top_srcdir)/m4/version-etc.m4 $(top_srcdir)/m4/vsnprintf.m4 \
+       $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \
        $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
-       $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wcwidth.m4 \
+       $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
        $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/write.m4 \
        $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xgetcwd.m4 \
        $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrndup.m4 \
-       $(top_srcdir)/m4/xstrtol.m4 $(top_srcdir)/configure.ac
+       $(top_srcdir)/m4/xstrtol.m4 $(top_srcdir)/m4/xvasprintf.m4 \
+       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 LIBRARIES = $(noinst_LIBRARIES)
 AR = ar
 ARFLAGS = cru
+AM_V_AR = $(am__v_AR_$(V))
+am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY))
+am__v_AR_0 = @echo "  AR    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
 libtar_a_AR = $(AR) $(ARFLAGS)
-am__DEPENDENCIES_1 =
-am__dirstamp = $(am__leading_dot)dirstamp
-am_libtar_a_OBJECTS = argp-ba.$(OBJEXT) argp-eexst.$(OBJEXT) \
-       argp-fmtstream.$(OBJEXT) argp-fs-xinl.$(OBJEXT) \
-       argp-help.$(OBJEXT) argp-parse.$(OBJEXT) argp-pin.$(OBJEXT) \
-       argp-pv.$(OBJEXT) argp-pvh.$(OBJEXT) argp-xinl.$(OBJEXT) \
-       c-ctype.$(OBJEXT) full-write.$(OBJEXT) getdate.$(OBJEXT) \
-       localcharset.$(OBJEXT) malloca.$(OBJEXT) mbchar.$(OBJEXT) \
-       mbscasecmp.$(OBJEXT) openat-die.$(OBJEXT) strnlen1.$(OBJEXT) \
-       uniwidth/width.$(OBJEXT) version-etc.$(OBJEXT) \
-       version-etc-fsf.$(OBJEXT) xalloc-die.$(OBJEXT) \
-       xstrndup.$(OBJEXT) xstrtoumax.$(OBJEXT) paxerror.$(OBJEXT) \
-       paxexit.$(OBJEXT) paxnames.$(OBJEXT) prepargs.$(OBJEXT) \
-       rtapelib.$(OBJEXT) stdopen.$(OBJEXT)
+libtar_a_LIBADD =
+am_libtar_a_OBJECTS = paxerror.$(OBJEXT) paxexit.$(OBJEXT) \
+       paxnames.$(OBJEXT) prepargs.$(OBJEXT) rtapelib.$(OBJEXT) \
+       stdopen.$(OBJEXT)
 libtar_a_OBJECTS = $(am_libtar_a_OBJECTS)
-LTLIBRARIES = $(noinst_LTLIBRARIES)
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
 am__depfiles_maybe = depfiles
+am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
 CCLD = $(CC)
 LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
-YLWRAP = $(top_srcdir)/build-aux/ylwrap
-SOURCES = $(libtar_a_SOURCES) $(EXTRA_libtar_a_SOURCES)
-DIST_SOURCES = $(libtar_a_SOURCES) $(EXTRA_libtar_a_SOURCES)
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-       html-recursive info-recursive install-data-recursive \
-       install-dvi-recursive install-exec-recursive \
-       install-html-recursive install-info-recursive \
-       install-pdf-recursive install-ps-recursive install-recursive \
-       installcheck-recursive installdirs-recursive pdf-recursive \
-       ps-recursive uninstall-recursive
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+SOURCES = $(libtar_a_SOURCES)
+DIST_SOURCES = $(libtar_a_SOURCES)
 HEADERS = $(noinst_HEADERS)
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
-  distclean-recursive maintainer-clean-recursive
 ETAGS = etags
 CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
 ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -238,7 +232,6 @@ DEFAULT_RMT_COMMAND = @DEFAULT_RMT_COMMAND@
 DEFAULT_RMT_DIR = @DEFAULT_RMT_DIR@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
-DIRENT_H = @DIRENT_H@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
@@ -251,7 +244,6 @@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
 EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
 ERRNO_H = @ERRNO_H@
 EXEEXT = @EXEEXT@
-FCNTL_H = @FCNTL_H@
 FLOAT_H = @FLOAT_H@
 FNMATCH_H = @FNMATCH_H@
 GETOPT_H = @GETOPT_H@
@@ -263,45 +255,59 @@ GNULIB_ALPHASORT = @GNULIB_ALPHASORT@
 GNULIB_ATOLL = @GNULIB_ATOLL@
 GNULIB_BTOWC = @GNULIB_BTOWC@
 GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
 GNULIB_CHOWN = @GNULIB_CHOWN@
 GNULIB_CLOSE = @GNULIB_CLOSE@
 GNULIB_DIRFD = @GNULIB_DIRFD@
 GNULIB_DPRINTF = @GNULIB_DPRINTF@
 GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_DUP3 = @GNULIB_DUP3@
 GNULIB_ENVIRON = @GNULIB_ENVIRON@
 GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
+GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
 GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
+GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
 GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FCNTL = @GNULIB_FCNTL@
+GNULIB_FDOPENDIR = @GNULIB_FDOPENDIR@
 GNULIB_FFLUSH = @GNULIB_FFLUSH@
 GNULIB_FOPEN = @GNULIB_FOPEN@
 GNULIB_FPRINTF = @GNULIB_FPRINTF@
 GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
 GNULIB_FPUTC = @GNULIB_FPUTC@
 GNULIB_FPUTS = @GNULIB_FPUTS@
 GNULIB_FREOPEN = @GNULIB_FREOPEN@
 GNULIB_FSEEK = @GNULIB_FSEEK@
 GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FSTATAT = @GNULIB_FSTATAT@
 GNULIB_FSYNC = @GNULIB_FSYNC@
 GNULIB_FTELL = @GNULIB_FTELL@
 GNULIB_FTELLO = @GNULIB_FTELLO@
 GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
 GNULIB_FWRITE = @GNULIB_FWRITE@
 GNULIB_GETCWD = @GNULIB_GETCWD@
 GNULIB_GETDELIM = @GNULIB_GETDELIM@
 GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
 GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
 GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
 GNULIB_GETLINE = @GNULIB_GETLINE@
 GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
 GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
 GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
 GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
 GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
 GNULIB_IMAXABS = @GNULIB_IMAXABS@
 GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
 GNULIB_LCHMOD = @GNULIB_LCHMOD@
 GNULIB_LCHOWN = @GNULIB_LCHOWN@
 GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
 GNULIB_LSEEK = @GNULIB_LSEEK@
 GNULIB_LSTAT = @GNULIB_LSTAT@
 GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
@@ -324,15 +330,31 @@ GNULIB_MBSSEP = @GNULIB_MBSSEP@
 GNULIB_MBSSPN = @GNULIB_MBSSPN@
 GNULIB_MBSSTR = @GNULIB_MBSSTR@
 GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
 GNULIB_MEMMEM = @GNULIB_MEMMEM@
 GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
 GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
 GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKFIFO = @GNULIB_MKFIFO@
+GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
+GNULIB_MKNOD = @GNULIB_MKNOD@
+GNULIB_MKNODAT = @GNULIB_MKNODAT@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
 GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_MKTIME = @GNULIB_MKTIME@
+GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
+GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@
 GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
 GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
 GNULIB_OPEN = @GNULIB_OPEN@
+GNULIB_OPENAT = @GNULIB_OPENAT@
 GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_PREAD = @GNULIB_PREAD@
 GNULIB_PRINTF = @GNULIB_PRINTF@
 GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
 GNULIB_PUTC = @GNULIB_PUTC@
@@ -342,13 +364,20 @@ GNULIB_PUTS = @GNULIB_PUTS@
 GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
 GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
 GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
 GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_RMDIR = @GNULIB_RMDIR@
 GNULIB_RPMATCH = @GNULIB_RPMATCH@
 GNULIB_SCANDIR = @GNULIB_SCANDIR@
 GNULIB_SETENV = @GNULIB_SETENV@
 GNULIB_SLEEP = @GNULIB_SLEEP@
 GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
 GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_STAT = @GNULIB_STAT@
 GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
 GNULIB_STPCPY = @GNULIB_STPCPY@
 GNULIB_STPNCPY = @GNULIB_STPNCPY@
@@ -359,6 +388,7 @@ GNULIB_STRERROR = @GNULIB_STRERROR@
 GNULIB_STRNDUP = @GNULIB_STRNDUP@
 GNULIB_STRNLEN = @GNULIB_STRNLEN@
 GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRPTIME = @GNULIB_STRPTIME@
 GNULIB_STRSEP = @GNULIB_STRSEP@
 GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
 GNULIB_STRSTR = @GNULIB_STRSTR@
@@ -369,8 +399,16 @@ GNULIB_STRTOLL = @GNULIB_STRTOLL@
 GNULIB_STRTOULL = @GNULIB_STRTOULL@
 GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
 GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_SYMLINK = @GNULIB_SYMLINK@
+GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
+GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
 GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
+GNULIB_UNLINK = @GNULIB_UNLINK@
+GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
 GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_USLEEP = @GNULIB_USLEEP@
+GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
 GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
 GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
 GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
@@ -390,8 +428,11 @@ HAVE_ALPHASORT = @HAVE_ALPHASORT@
 HAVE_ATOLL = @HAVE_ATOLL@
 HAVE_BTOWC = @HAVE_BTOWC@
 HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
 HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@
 HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
 HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
 HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
 HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
@@ -416,37 +457,68 @@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
 HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
 HAVE_DPRINTF = @HAVE_DPRINTF@
 HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
 HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
-HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDOPENDIR = @HAVE_FDOPENDIR@
+HAVE_FSTATAT = @HAVE_FSTATAT@
 HAVE_FSYNC = @HAVE_FSYNC@
-HAVE_FTELLO = @HAVE_FTELLO@
 HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
 HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@
 HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
 HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
 HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
 HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
 HAVE_GETUSERSHELL = @HAVE_GETUSERSHELL@
 HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
 HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
 HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
 HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
 HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
 HAVE_LSTAT = @HAVE_LSTAT@
 HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
 HAVE_MBRLEN = @HAVE_MBRLEN@
 HAVE_MBRTOWC = @HAVE_MBRTOWC@
 HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
 HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
 HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
 HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
 HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
 HAVE_OS_H = @HAVE_OS_H@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_PREAD = @HAVE_PREAD@
 HAVE_RANDOM_H = @HAVE_RANDOM_H@
 HAVE_RANDOM_R = @HAVE_RANDOM_R@
 HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
 HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
 HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
 HAVE_RPMATCH = @HAVE_RPMATCH@
 HAVE_SCANDIR = @HAVE_SCANDIR@
 HAVE_SETENV = @HAVE_SETENV@
@@ -460,7 +532,6 @@ HAVE_STPNCPY = @HAVE_STPNCPY@
 HAVE_STRCASECMP = @HAVE_STRCASECMP@
 HAVE_STRCASESTR = @HAVE_STRCASESTR@
 HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
-HAVE_STRNDUP = @HAVE_STRNDUP@
 HAVE_STRPBRK = @HAVE_STRPBRK@
 HAVE_STRSEP = @HAVE_STRSEP@
 HAVE_STRTOD = @HAVE_STRTOD@
@@ -469,6 +540,8 @@ HAVE_STRTOULL = @HAVE_STRTOULL@
 HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
 HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
 HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
 HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@
 HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
 HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
@@ -477,11 +550,15 @@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
 HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
 HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
 HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
 HAVE_UNSETENV = @HAVE_UNSETENV@
 HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
 HAVE_VASPRINTF = @HAVE_VASPRINTF@
 HAVE_VDPRINTF = @HAVE_VDPRINTF@
 HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
 HAVE_WCRTOMB = @HAVE_WCRTOMB@
 HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
 HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
@@ -499,16 +576,14 @@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
 INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
 INTLLIBS = @INTLLIBS@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
-INTTYPES_H = @INTTYPES_H@
 LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
-LIBTAR_LIBDEPS = @LIBTAR_LIBDEPS@
-LIBTAR_LTLIBDEPS = @LIBTAR_LTLIBDEPS@
 LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
-LIB_CLOSE = @LIB_CLOSE@
 LIB_SETSOCKOPT = @LIB_SETSOCKOPT@
 LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
 LOCALE_FR = @LOCALE_FR@
@@ -523,12 +598,36 @@ MKDIR_P = @MKDIR_P@
 MSGFMT = @MSGFMT@
 MSGFMT_015 = @MSGFMT_015@
 MSGMERGE = @MSGMERGE@
+NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
 NEXT_DIRENT_H = @NEXT_DIRENT_H@
 NEXT_ERRNO_H = @NEXT_ERRNO_H@
 NEXT_FCNTL_H = @NEXT_FCNTL_H@
 NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
 NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
 NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
 NEXT_STDINT_H = @NEXT_STDINT_H@
 NEXT_STDIO_H = @NEXT_STDIO_H@
 NEXT_STDLIB_H = @NEXT_STDLIB_H@
@@ -557,25 +656,40 @@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
 PU_RMT_PROG = @PU_RMT_PROG@
 RANLIB = @RANLIB@
 REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
 REPLACE_CHOWN = @REPLACE_CHOWN@
 REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@
 REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
 REPLACE_FCHDIR = @REPLACE_FCHDIR@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
 REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@
 REPLACE_FFLUSH = @REPLACE_FFLUSH@
 REPLACE_FOPEN = @REPLACE_FOPEN@
 REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
 REPLACE_FREOPEN = @REPLACE_FREOPEN@
 REPLACE_FSEEK = @REPLACE_FSEEK@
 REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
 REPLACE_FTELL = @REPLACE_FTELL@
 REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
 REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
 REPLACE_GETLINE = @REPLACE_GETLINE@
 REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
 REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
 REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
 REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
 REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
 REPLACE_LSEEK = @REPLACE_LSEEK@
 REPLACE_LSTAT = @REPLACE_LSTAT@
@@ -585,26 +699,53 @@ REPLACE_MBSINIT = @REPLACE_MBSINIT@
 REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
 REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
 REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
 REPLACE_MEMMEM = @REPLACE_MEMMEM@
 REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKNOD = @REPLACE_MKNOD@
 REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
 REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
 REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
 REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_OPENDIR = @REPLACE_OPENDIR@
 REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_PREAD = @REPLACE_PREAD@
 REPLACE_PRINTF = @REPLACE_PRINTF@
 REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SLEEP = @REPLACE_SLEEP@
 REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
 REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
 REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
 REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
 REPLACE_STRDUP = @REPLACE_STRDUP@
 REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
 REPLACE_STRPTIME = @REPLACE_STRPTIME@
 REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
 REPLACE_STRSTR = @REPLACE_STRSTR@
 REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
 REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
 REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
 REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
 REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
@@ -612,6 +753,7 @@ REPLACE_VPRINTF = @REPLACE_VPRINTF@
 REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
 REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
 REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
 REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
 REPLACE_WCTOB = @REPLACE_WCTOB@
 REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
@@ -622,22 +764,20 @@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
 SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
 STDARG_H = @STDARG_H@
 STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
 STDINT_H = @STDINT_H@
 STRIP = @STRIP@
 SYSEXITS_H = @SYSEXITS_H@
-SYS_STAT_H = @SYS_STAT_H@
-SYS_TIME_H = @SYS_TIME_H@
 SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
 TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
 UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
 UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
 UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
 USE_NLS = @USE_NLS@
 VERSION = @VERSION@
-VOID_UNSETENV = @VOID_UNSETENV@
-WCHAR_H = @WCHAR_H@
 WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
-WCTYPE_H = @WCTYPE_H@
 WINT_T_SUFFIX = @WINT_T_SUFFIX@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
@@ -695,144 +835,39 @@ sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects
-SUBDIRS = 
-noinst_HEADERS = system.h system-ioctl.h rmt.h paxlib.h stdopen.h
 noinst_LIBRARIES = libtar.a
-noinst_LTLIBRARIES = 
-
-# This is for those projects which use "gettextize --intl" to put a source-code
-# copy of libintl into their package. In such projects, every Makefile.am needs
-# -I$(top_builddir)/intl, so that <libintl.h> can be found in this directory.
-# For the Makefile.ams in other directories it is the maintainer's
-# responsibility; for the one from gnulib we do it here.
-# This option has no effect when the user disables NLS (because then the intl
-# directory contains no libintl.h file) or when the project does not use
-# "gettextize --intl".
-#AM_CPPFLAGS += -I$(top_builddir)/intl
-EXTRA_DIST = alloca.c alloca.in.h argmatch.c argmatch.h backupfile.c \
-       backupfile.h btowc.c canonicalize-lgpl.c canonicalize.h \
-       chdir-long.c chdir-long.h chown.c fchown-stub.c close.c \
-       w32sock.h close-stream.c close-stream.h closeout.c closeout.h \
-       dirent.in.h dirfd.c basename.c dirname.c dirname.h \
-       stripslash.c dup2.c errno.in.h error.c error.h exclude.c \
-       exclude.h exitfail.c exitfail.h fchdir.c fclose.c fcntl.in.h \
-       creat-safer.c fcntl--.h fcntl-safer.h open-safer.c \
-       fileblocks.c float.in.h fnmatch.c fnmatch.in.h fnmatch_loop.c \
-       fpending.c fpending.h fseeko.c stdio-impl.h ftruncate.c \
-       getcwd.c getdate.c getdate.h getdelim.c getline.c getopt.c \
-       getopt.in.h getopt1.c getopt_int.h getpagesize.c \
-       $(top_srcdir)/build-aux/config.rpath gettime.c gettimeofday.c \
-       hash.c hash.h $(top_srcdir)/build-aux/config.rpath human.c \
-       human.h intprops.h imaxtostr.c inttostr.c inttostr.h \
-       offtostr.c uinttostr.c umaxtostr.c inttypes.in.h lchown.c \
-       $(top_srcdir)/build-aux/link-warning.h config.charset \
-       ref-add.sin ref-del.sin lseek.c lstat.c malloc.c malloc.c \
-       malloca.h malloca.valgrind mbchar.h mbrtowc.c mbsinit.c \
-       mempcpy.c memrchr.c mkdtemp.c mktime.c modechange.c \
-       modechange.h obstack.c obstack.h open.c at-func.c fchmodat.c \
-       fchownat.c fstatat.c mkdirat.c openat-priv.h openat-proc.c \
-       openat.c openat.h pathmax.h quote.c quote.h quotearg.c \
-       quotearg.h rawmemchr.c rawmemchr.valgrind readlink.c realloc.c \
-       regcomp.c regex.c regex.h regex_internal.c regex_internal.h \
-       regexec.c rpmatch.c safe-read.c safe-read.h safe-write.c \
-       safe-write.h same-inode.h save-cwd.c save-cwd.h savedir.c \
-       savedir.h setenv.c sleep.c snprintf.c stat-macros.h \
-       stat-time.h stdarg.in.h stdbool.in.h stdint.in.h stdio-write.c \
-       stdio.in.h stdlib.in.h stpcpy.c strcasecmp.c strncasecmp.c \
-       strchrnul.c strchrnul.valgrind strdup.c streq.h strerror.c \
-       string.in.h strings.in.h strndup.c strnlen.c strtoimax.c \
-       strtol.c strtoll.c strtoul.c strtoull.c strtoumax.c \
-       sys_stat.in.h sys_time.in.h sysexits.in.h tempname.c \
-       tempname.h time.in.h time_r.c timespec.h unistd.in.h \
-       dup-safer.c fd-safer.c pipe-safer.c unistd--.h unistd-safer.h \
-       unitypes.h localcharset.h uniwidth.h uniwidth/cjk.h \
-       unlinkdir.c unlinkdir.h unlocked-io.h unsetenv.c utime.c \
-       utimens.c utimens.h asnprintf.c float+.h printf-args.c \
-       printf-args.h printf-parse.c printf-parse.h vasnprintf.c \
-       vasnprintf.h vsnprintf.c wchar.in.h wcrtomb.c wctype.in.h \
-       wcwidth.c write.c xalloc.h xmalloc.c xgetcwd.c xgetcwd.h \
-       xstrtol-error.c xstrtol.c xstrtol.h xstrtoul.c
-BUILT_SOURCES = $(ALLOCA_H) configmake.h $(DIRENT_H) $(ERRNO_H) \
-       $(FCNTL_H) $(FLOAT_H) $(FNMATCH_H) getdate.c $(GETOPT_H) \
-       $(INTTYPES_H) $(STDARG_H) $(STDBOOL_H) $(STDINT_H) stdio.h \
-       stdlib.h string.h strings.h $(SYS_STAT_H) $(SYS_TIME_H) \
-       $(SYSEXITS_H) time.h unistd.h $(WCHAR_H) $(WCTYPE_H) \
-       rmt-command.h
-SUFFIXES = .sed .sin
-MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t dirent.h \
-       dirent.h-t errno.h errno.h-t fcntl.h fcntl.h-t float.h \
-       float.h-t fnmatch.h fnmatch.h-t getopt.h getopt.h-t inttypes.h \
-       inttypes.h-t stdarg.h stdarg.h-t stdbool.h stdbool.h-t \
-       stdint.h stdint.h-t stdio.h stdio.h-t stdlib.h stdlib.h-t \
-       string.h string.h-t strings.h strings.h-t sys/stat.h \
-       sys/stat.h-t sys/time.h sys/time.h-t sysexits.h sysexits.h-t \
-       time.h time.h-t unistd.h unistd.h-t wchar.h wchar.h-t wctype.h \
-       wctype.h-t
-MOSTLYCLEANDIRS = sys
-CLEANFILES = configmake.h configmake.h-t charset.alias ref-add.sed \
-       ref-del.sed rmt-command.h rmt-command.h-t
-DISTCLEANFILES = 
-MAINTAINERCLEANFILES = getdate.c
-AM_CPPFLAGS = 
-libtar_a_SOURCES = argp.h argp-ba.c argp-eexst.c argp-fmtstream.c \
-       argp-fmtstream.h argp-fs-xinl.c argp-help.c argp-namefrob.h \
-       argp-parse.c argp-pin.c argp-pv.c argp-pvh.c argp-xinl.c \
-       c-ctype.h c-ctype.c full-write.h full-write.c getdate.y \
-       gettext.h localcharset.h localcharset.c malloca.c mbchar.c \
-       mbscasecmp.c mbuiter.h openat-die.c size_max.h strnlen1.h \
-       strnlen1.c uniwidth/width.c verify.h version-etc.h \
-       version-etc.c version-etc-fsf.c xalloc-die.c xsize.h \
-       xstrndup.h xstrndup.c xstrtoumax.c paxerror.c paxexit.c \
-       paxlib.h paxnames.c prepargs.c prepargs.h rtapelib.c rmt.h \
-       stdopen.c stdopen.h system.h system-ioctl.h
-libtar_a_LIBADD = $(gl_LIBOBJS) @ALLOCA@ $(LIBOBJS)
-libtar_a_DEPENDENCIES = $(gl_LIBOBJS) @ALLOCA@ $(LIBOBJS)
-EXTRA_libtar_a_SOURCES = alloca.c argmatch.c backupfile.c btowc.c \
-       canonicalize-lgpl.c chdir-long.c chown.c fchown-stub.c close.c \
-       close-stream.c closeout.c dirfd.c basename.c dirname.c \
-       stripslash.c dup2.c error.c exclude.c exitfail.c fchdir.c \
-       fclose.c creat-safer.c open-safer.c fileblocks.c fnmatch.c \
-       fnmatch_loop.c fpending.c fseeko.c ftruncate.c getcwd.c \
-       getdelim.c getline.c getopt.c getopt1.c getpagesize.c \
-       gettime.c gettimeofday.c hash.c human.c imaxtostr.c inttostr.c \
-       offtostr.c uinttostr.c umaxtostr.c lchown.c lseek.c lstat.c \
-       malloc.c malloc.c mbrtowc.c mbsinit.c mempcpy.c memrchr.c \
-       mkdtemp.c mktime.c modechange.c obstack.c open.c at-func.c \
-       fchmodat.c fchownat.c fstatat.c mkdirat.c openat-proc.c \
-       openat.c quote.c quotearg.c rawmemchr.c readlink.c realloc.c \
-       regcomp.c regex.c regex_internal.c regexec.c rpmatch.c \
-       safe-read.c safe-write.c save-cwd.c savedir.c setenv.c sleep.c \
-       snprintf.c stdio-write.c stpcpy.c strcasecmp.c strncasecmp.c \
-       strchrnul.c strdup.c strerror.c strndup.c strnlen.c \
-       strtoimax.c strtol.c strtoll.c strtoul.c strtoull.c \
-       strtoumax.c tempname.c time_r.c dup-safer.c fd-safer.c \
-       pipe-safer.c unlinkdir.c unsetenv.c utime.c utimens.c \
-       asnprintf.c printf-args.c printf-parse.c vasnprintf.c \
-       vsnprintf.c wcrtomb.c wcwidth.c write.c xmalloc.c xgetcwd.c \
-       xstrtol-error.c xstrtol.c xstrtoul.c
-LINK_WARNING_H = $(top_srcdir)/build-aux/link-warning.h
-charset_alias = $(DESTDIR)$(libdir)/charset.alias
-charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
+BUILT_SOURCES = rmt-command.h
+CLEANFILES = rmt-command.h rmt-command.h-t
+INCLUDES = -I$(top_srcdir)/gnu -I../ -I../gnu 
+noinst_HEADERS = system.h system-ioctl.h rmt.h paxlib.h stdopen.h
+libtar_a_SOURCES = \
+  paxerror.c paxexit.c paxlib.h paxnames.c \
+  prepargs.c prepargs.h \
+  rtapelib.c \
+  rmt.h \
+  stdopen.c stdopen.h \
+  system.h system-ioctl.h
+
 all: $(BUILT_SOURCES)
-       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+       $(MAKE) $(AM_MAKEFLAGS) all-am
 
 .SUFFIXES:
-.SUFFIXES: .sed .sin .c .o .obj .y
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/gnulib.mk $(am__configure_deps)
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
-             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-               && exit 0; \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  lib/Makefile'; \
-       cd $(top_srcdir) && \
-         $(AUTOMAKE) --gnits  lib/Makefile
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnits lib/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
@@ -850,335 +885,92 @@ $(top_srcdir)/configure:  $(am__configure_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
 
 clean-noinstLIBRARIES:
        -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-uniwidth/$(am__dirstamp):
-       @$(MKDIR_P) uniwidth
-       @: > uniwidth/$(am__dirstamp)
-uniwidth/$(DEPDIR)/$(am__dirstamp):
-       @$(MKDIR_P) uniwidth/$(DEPDIR)
-       @: > uniwidth/$(DEPDIR)/$(am__dirstamp)
-uniwidth/width.$(OBJEXT): uniwidth/$(am__dirstamp) \
-       uniwidth/$(DEPDIR)/$(am__dirstamp)
 libtar.a: $(libtar_a_OBJECTS) $(libtar_a_DEPENDENCIES) 
-       -rm -f libtar.a
-       $(libtar_a_AR) libtar.a $(libtar_a_OBJECTS) $(libtar_a_LIBADD)
-       $(RANLIB) libtar.a
-
-clean-noinstLTLIBRARIES:
-       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
-         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-         test "$$dir" != "$$p" || dir=.; \
-         echo "rm -f \"$${dir}/so_locations\""; \
-         rm -f "$${dir}/so_locations"; \
-       done
+       $(AM_V_at)-rm -f libtar.a
+       $(AM_V_AR)$(libtar_a_AR) libtar.a $(libtar_a_OBJECTS) $(libtar_a_LIBADD)
+       $(AM_V_at)$(RANLIB) libtar.a
 
 mostlyclean-compile:
        -rm -f *.$(OBJEXT)
-       -rm -f uniwidth/width.$(OBJEXT)
 
 distclean-compile:
        -rm -f *.tab.c
 
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/alloca.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/waitpid.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloca.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argmatch.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-ba.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-eexst.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-fmtstream.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-fs-xinl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-help.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-parse.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-pin.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-pv.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-pvh.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argp-xinl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asnprintf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/at-func.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/backupfile.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btowc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-ctype.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/canonicalize-lgpl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chdir-long.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chown.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close-stream.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/closeout.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/creat-safer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirfd.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirname.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup-safer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup2.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exclude.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exitfail.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchdir.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchmodat.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchown-stub.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fchownat.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fclose.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fd-safer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileblocks.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnmatch.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fnmatch_loop.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fpending.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fseeko.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstatat.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftruncate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/full-write.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getcwd.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdelim.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getline.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpagesize.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettime.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettimeofday.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/human.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imaxtostr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inttostr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lchown.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localcharset.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lseek.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lstat.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloca.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbchar.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbrtowc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbscasecmp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsinit.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mempcpy.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memrchr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkdirat.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkdtemp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mktime.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/modechange.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obstack.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/offtostr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/open-safer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/open.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openat-die.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openat-proc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openat.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paxerror.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paxexit.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paxnames.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipe-safer.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prepargs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-args.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-parse.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quote.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotearg.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rawmemchr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readlink.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/realloc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regcomp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex_internal.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regexec.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpmatch.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtapelib.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/safe-read.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/safe-write.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/save-cwd.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/savedir.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setenv.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sleep.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snprintf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdio-write.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdopen.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stpcpy.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strcasecmp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strchrnul.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strdup.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stripslash.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strncasecmp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strndup.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen1.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoimax.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtol.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoll.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoul.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoull.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtoumax.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tempname.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/time_r.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uinttostr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/umaxtostr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlinkdir.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unsetenv.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utime.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utimens.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vasnprintf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version-etc-fsf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version-etc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vsnprintf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcrtomb.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcwidth.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/write.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xalloc-die.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xgetcwd.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrndup.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrtol-error.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrtol.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrtoul.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrtoumax.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/width.Po@am__quote@
 
 .c.o:
-@am__fastdepCC_TRUE@   depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
-@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCC_TRUE@   mv -f $$depbase.Tpo $$depbase.Po
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
 
 .c.obj:
-@am__fastdepCC_TRUE@   depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
-@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
-@am__fastdepCC_TRUE@   mv -f $$depbase.Tpo $$depbase.Po
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.y.c:
-       $(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-       @failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
-       dot_seen=no; \
-       target=`echo $@ | sed s/-recursive//`; \
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         echo "Making $$target in $$subdir"; \
-         if test "$$subdir" = "."; then \
-           dot_seen=yes; \
-           local_target="$$target-am"; \
-         else \
-           local_target="$$target"; \
-         fi; \
-         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-         || eval $$failcom; \
-       done; \
-       if test "$$dot_seen" = "no"; then \
-         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-       fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-       @failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
-       dot_seen=no; \
-       case "$@" in \
-         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-         *) list='$(SUBDIRS)' ;; \
-       esac; \
-       rev=''; for subdir in $$list; do \
-         if test "$$subdir" = "."; then :; else \
-           rev="$$subdir $$rev"; \
-         fi; \
-       done; \
-       rev="$$rev ."; \
-       target=`echo $@ | sed s/-recursive//`; \
-       for subdir in $$rev; do \
-         echo "Making $$target in $$subdir"; \
-         if test "$$subdir" = "."; then \
-           local_target="$$target-am"; \
-         else \
-           local_target="$$target"; \
-         fi; \
-         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-         || eval $$failcom; \
-       done && test -z "$$fail"
-tags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-       done
-ctags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-       done
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
        list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
        unique=`for i in $$list; do \
            if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
          done | \
-         $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
              END { if (nonempty) { for (i in files) print i; }; }'`; \
        mkid -fID $$unique
 tags: TAGS
 
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
                $(TAGS_FILES) $(LISP)
-       tags=; \
+       set x; \
        here=`pwd`; \
-       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-         include_option=--etags-include; \
-         empty_fix=.; \
-       else \
-         include_option=--include; \
-         empty_fix=; \
-       fi; \
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
-           test ! -f $$subdir/TAGS || \
-             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
-         fi; \
-       done; \
        list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
        unique=`for i in $$list; do \
            if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
          done | \
          $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
              END { if (nonempty) { for (i in files) print i; }; }'`; \
-       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
-         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-           $$tags $$unique; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
        fi
 ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
                $(TAGS_FILES) $(LISP)
-       tags=; \
        list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
        unique=`for i in $$list; do \
            if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
          done | \
          $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
              END { if (nonempty) { for (i in files) print i; }; }'`; \
-       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+       test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-            $$tags $$unique
+            $$unique
 
 GTAGS:
        here=`$(am__cd) $(top_builddir) && pwd` \
-         && cd $(top_srcdir) \
-         && gtags -i $(GTAGS_ARGS) $$here
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -1199,848 +991,144 @@ distdir: $(DISTFILES)
          if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
          if test -d $$d/$$file; then \
            dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
            if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
            fi; \
-           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
          else \
-           test -f $(distdir)/$$file \
-           || cp -p $$d/$$file $(distdir)/$$file \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
            || exit 1; \
          fi; \
        done
-       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
-           test -d "$(distdir)/$$subdir" \
-           || $(MKDIR_P) "$(distdir)/$$subdir" \
-           || exit 1; \
-           distdir=`$(am__cd) $(distdir) && pwd`; \
-           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
-           (cd $$subdir && \
-             $(MAKE) $(AM_MAKEFLAGS) \
-               top_distdir="$$top_distdir" \
-               distdir="$$distdir/$$subdir" \
-               am__remove_distdir=: \
-               am__skip_length_check=: \
-               distdir) \
-             || exit 1; \
-         fi; \
-       done
 check-am: all-am
 check: $(BUILT_SOURCES)
-       $(MAKE) $(AM_MAKEFLAGS) check-recursive
-all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) all-local
-installdirs: installdirs-recursive
-installdirs-am:
+       $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LIBRARIES) $(HEADERS)
+installdirs:
 install: $(BUILT_SOURCES)
-       $(MAKE) $(AM_MAKEFLAGS) install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
+       $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
 
 install-am: all-am
        @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 
-installcheck: installcheck-recursive
+installcheck: installcheck-am
 install-strip:
        $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
          install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
          `test -z '$(STRIP)' || \
            echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
-       -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
 
 clean-generic:
        -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-       -rm -f uniwidth/$(DEPDIR)/$(am__dirstamp)
-       -rm -f uniwidth/$(am__dirstamp)
-       -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
        @echo "it deletes files that may require special tools to rebuild."
-       -rm -f getdate.c
        -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-       -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-recursive
+clean: clean-am
 
-clean-am: clean-generic clean-noinstLIBRARIES clean-noinstLTLIBRARIES \
-       mostlyclean-am
+clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
 
-distclean: distclean-recursive
-       -rm -rf $(DEPDIR) ./$(DEPDIR) uniwidth/$(DEPDIR)
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
        -rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
        distclean-tags
 
-dvi: dvi-recursive
+dvi: dvi-am
 
 dvi-am:
 
-html: html-recursive
+html: html-am
 
-info: info-recursive
+html-am:
+
+info: info-am
 
 info-am:
 
 install-data-am:
 
-install-dvi: install-dvi-recursive
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
 
-install-exec-am: install-exec-local
+install-html: install-html-am
 
-install-html: install-html-recursive
+install-html-am:
 
-install-info: install-info-recursive
+install-info: install-info-am
+
+install-info-am:
 
 install-man:
 
-install-pdf: install-pdf-recursive
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
 
-install-ps: install-ps-recursive
+install-ps-am:
 
 installcheck-am:
 
-maintainer-clean: maintainer-clean-recursive
-       -rm -rf $(DEPDIR) ./$(DEPDIR) uniwidth/$(DEPDIR)
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
        -rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
-mostlyclean: mostlyclean-recursive
+mostlyclean: mostlyclean-am
 
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-       mostlyclean-local
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
 
-pdf: pdf-recursive
+pdf: pdf-am
 
 pdf-am:
 
-ps: ps-recursive
+ps: ps-am
 
 ps-am:
 
-uninstall-am: uninstall-local
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
-       install-strip
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-       all all-am all-local check check-am clean clean-generic \
-       clean-noinstLIBRARIES clean-noinstLTLIBRARIES ctags \
-       ctags-recursive distclean distclean-compile distclean-generic \
-       distclean-tags distdir dvi dvi-am html html-am info info-am \
-       install install-am install-data install-data-am install-dvi \
-       install-dvi-am install-exec install-exec-am install-exec-local \
-       install-html install-html-am install-info install-info-am \
-       install-man install-pdf install-pdf-am install-ps \
-       install-ps-am install-strip installcheck installcheck-am \
-       installdirs installdirs-am maintainer-clean \
-       maintainer-clean-generic mostlyclean mostlyclean-compile \
-       mostlyclean-generic mostlyclean-local pdf pdf-am ps ps-am tags \
-       tags-recursive uninstall uninstall-am uninstall-local
-
-
-# We need the following in order to create <alloca.h> when the system
-# doesn't have one that works with the given compiler.
-alloca.h: alloca.in.h
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         cat $(srcdir)/alloca.in.h; \
-       } > $@-t
-       mv -f $@-t $@
-
-# Retrieve values of the variables through 'configure' followed by
-# 'make', not directly through 'configure', so that a user who
-# sets some of these variables consistently on the 'make' command
-# line gets correct results.
-#
-# One advantage of this approach, compared to the classical
-# approach of adding -DLIBDIR=\"$(libdir)\" etc. to AM_CPPFLAGS,
-# is that it protects against the use of undefined variables.
-# If, say, $(libdir) is not set in the Makefile, LIBDIR is not
-# defined by this module, and code using LIBDIR gives a
-# compilation error.
-#
-# Another advantage is that 'make' output is shorter.
-#
-# Listed in the same order as the GNU makefile conventions.
-# The Automake-defined pkg* macros are appended, in the order
-# listed in the Automake 1.10a+ documentation.
-configmake.h: Makefile
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         echo '#define PREFIX "$(prefix)"'; \
-         echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
-         echo '#define BINDIR "$(bindir)"'; \
-         echo '#define SBINDIR "$(sbindir)"'; \
-         echo '#define LIBEXECDIR "$(libexecdir)"'; \
-         echo '#define DATAROOTDIR "$(datarootdir)"'; \
-         echo '#define DATADIR "$(datadir)"'; \
-         echo '#define SYSCONFDIR "$(sysconfdir)"'; \
-         echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \
-         echo '#define LOCALSTATEDIR "$(localstatedir)"'; \
-         echo '#define INCLUDEDIR "$(includedir)"'; \
-         echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \
-         echo '#define DOCDIR "$(docdir)"'; \
-         echo '#define INFODIR "$(infodir)"'; \
-         echo '#define HTMLDIR "$(htmldir)"'; \
-         echo '#define DVIDIR "$(dvidir)"'; \
-         echo '#define PDFDIR "$(pdfdir)"'; \
-         echo '#define PSDIR "$(psdir)"'; \
-         echo '#define LIBDIR "$(libdir)"'; \
-         echo '#define LISPDIR "$(lispdir)"'; \
-         echo '#define LOCALEDIR "$(localedir)"'; \
-         echo '#define MANDIR "$(mandir)"'; \
-         echo '#define MANEXT "$(manext)"'; \
-         echo '#define PKGDATADIR "$(pkgdatadir)"'; \
-         echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \
-         echo '#define PKGLIBDIR "$(pkglibdir)"'; \
-         echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \
-       } | sed '/""/d' > $@-t
-       mv $@-t $@
-
-# We need the following in order to create <dirent.h> when the system
-# doesn't have one that works with the given compiler.
-dirent.h: dirent.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_DIRENT_H''@|$(NEXT_DIRENT_H)|g' \
-             -e 's|@''GNULIB_DIRFD''@|$(GNULIB_DIRFD)|g' \
-             -e 's|@''GNULIB_SCANDIR''@|$(GNULIB_SCANDIR)|g' \
-             -e 's|@''GNULIB_ALPHASORT''@|$(GNULIB_ALPHASORT)|g' \
-             -e 's|@''HAVE_DECL_DIRFD''@|$(HAVE_DECL_DIRFD)|g' \
-             -e 's|@''HAVE_SCANDIR''@|$(HAVE_SCANDIR)|g' \
-             -e 's|@''HAVE_ALPHASORT''@|$(HAVE_ALPHASORT)|g' \
-             -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \
-             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
-             < $(srcdir)/dirent.in.h; \
-       } > $@-t
-       mv $@-t $@
-
-# We need the following in order to create <errno.h> when the system
-# doesn't have one that is POSIX compliant.
-errno.h: errno.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \
-             -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \
-             -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \
-             -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \
-             -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \
-             -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \
-             -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \
-             < $(srcdir)/errno.in.h; \
-       } > $@-t
-       mv $@-t $@
-
-# We need the following in order to create <fcntl.h> when the system
-# doesn't have one that works with the given compiler.
-fcntl.h: fcntl.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \
-             -e 's|@''GNULIB_OPEN''@|$(GNULIB_OPEN)|g' \
-             -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \
-             < $(srcdir)/fcntl.in.h; \
-       } > $@-t
-       mv $@-t $@
-
-# We need the following in order to create <float.h> when the system
-# doesn't have one that works with the given compiler.
-float.h: float.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \
-             < $(srcdir)/float.in.h; \
-       } > $@-t
-       mv $@-t $@
-
-# We need the following in order to create <fnmatch.h> when the system
-# doesn't have one that supports the required API.
-fnmatch.h: fnmatch.in.h
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         cat $(srcdir)/fnmatch.in.h; \
-       } > $@-t
-       mv -f $@-t $@
-
-# We need the following in order to create <getopt.h> when the system
-# doesn't have one that works with the given compiler.
-getopt.h: getopt.in.h
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         cat $(srcdir)/getopt.in.h; \
-       } > $@-t
-       mv -f $@-t $@
-
-# We need the following in order to create <inttypes.h> when the system
-# doesn't have one that works with the given compiler.
-inttypes.h: inttypes.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
-             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \
-             -e 's/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \
-             -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
-             -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
-             -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
-             -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \
-             -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \
-             -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \
-             -e 's/@''GNULIB_STRTOIMAX''@/$(GNULIB_STRTOIMAX)/g' \
-             -e 's/@''GNULIB_STRTOUMAX''@/$(GNULIB_STRTOUMAX)/g' \
-             -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \
-             -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \
-             -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \
-             -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \
-             -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \
-             -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \
-             -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \
-             -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \
-             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
-             < $(srcdir)/inttypes.in.h; \
-       } > $@-t
-       mv $@-t $@
-
-# We need the following in order to install a simple file in $(libdir)
-# which is shared with other installed packages. We use a list of referencing
-# packages so that "make uninstall" will remove the file if and only if it
-# is not used by another installed package.
-# On systems with glibc-2.1 or newer, the file is redundant, therefore we
-# avoid installing it.
-
-all-local: charset.alias ref-add.sed ref-del.sed
-install-exec-local: all-local
-       if test $(GLIBC21) = no; then \
-         case '$(host_os)' in \
-           darwin[56]*) \
-             need_charset_alias=true ;; \
-           darwin* | cygwin* | mingw* | pw32* | cegcc*) \
-             need_charset_alias=false ;; \
-           *) \
-             need_charset_alias=true ;; \
-         esac ; \
-       else \
-         need_charset_alias=false ; \
-       fi ; \
-       if $$need_charset_alias; then \
-         $(mkinstalldirs) $(DESTDIR)$(libdir) ; \
-       fi ; \
-       if test -f $(charset_alias); then \
-         sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \
-         $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
-         rm -f $(charset_tmp) ; \
-       else \
-         if $$need_charset_alias; then \
-           sed -f ref-add.sed charset.alias > $(charset_tmp) ; \
-           $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
-           rm -f $(charset_tmp) ; \
-         fi ; \
-       fi
+uninstall-am:
 
-uninstall-local: all-local
-       if test -f $(charset_alias); then \
-         sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \
-         if grep '^# Packages using this file: $$' $(charset_tmp) \
-             > /dev/null; then \
-           rm -f $(charset_alias); \
-         else \
-           $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \
-         fi; \
-         rm -f $(charset_tmp); \
-       fi
+.MAKE: all check install install-am install-strip
 
-charset.alias: config.charset
-       rm -f t-$@ $@
-       $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@
-       mv t-$@ $@
-.sin.sed:
-       rm -f t-$@ $@
-       sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@
-       mv t-$@ $@
-
-# We need the following in order to create <stdarg.h> when the system
-# doesn't have one that works with the given compiler.
-stdarg.h: stdarg.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \
-             < $(srcdir)/stdarg.in.h; \
-       } > $@-t
-       mv $@-t $@
-
-# We need the following in order to create <stdbool.h> when the system
-# doesn't have one that works.
-stdbool.h: stdbool.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
-       } > $@-t
-       mv $@-t $@
-
-# We need the following in order to create <stdint.h> when the system
-# doesn't have one that works with the given compiler.
-stdint.h: stdint.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
-             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
-             -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
-             -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
-             -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
-             -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
-             -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
-             -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
-             -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
-             -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
-             -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
-             -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
-             -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
-             -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
-             -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
-             -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
-             -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
-             -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
-             -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
-             -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
-             -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
-             -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
-             < $(srcdir)/stdint.in.h; \
-       } > $@-t
-       mv $@-t $@
-
-# We need the following in order to create <stdio.h> when the system
-# doesn't have one that works with the given compiler.
-stdio.h: stdio.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \
-             -e 's|@''GNULIB_FPRINTF''@|$(GNULIB_FPRINTF)|g' \
-             -e 's|@''GNULIB_FPRINTF_POSIX''@|$(GNULIB_FPRINTF_POSIX)|g' \
-             -e 's|@''GNULIB_PRINTF''@|$(GNULIB_PRINTF)|g' \
-             -e 's|@''GNULIB_PRINTF_POSIX''@|$(GNULIB_PRINTF_POSIX)|g' \
-             -e 's|@''GNULIB_SNPRINTF''@|$(GNULIB_SNPRINTF)|g' \
-             -e 's|@''GNULIB_SPRINTF_POSIX''@|$(GNULIB_SPRINTF_POSIX)|g' \
-             -e 's|@''GNULIB_VFPRINTF''@|$(GNULIB_VFPRINTF)|g' \
-             -e 's|@''GNULIB_VFPRINTF_POSIX''@|$(GNULIB_VFPRINTF_POSIX)|g' \
-             -e 's|@''GNULIB_VPRINTF''@|$(GNULIB_VPRINTF)|g' \
-             -e 's|@''GNULIB_VPRINTF_POSIX''@|$(GNULIB_VPRINTF_POSIX)|g' \
-             -e 's|@''GNULIB_VSNPRINTF''@|$(GNULIB_VSNPRINTF)|g' \
-             -e 's|@''GNULIB_VSPRINTF_POSIX''@|$(GNULIB_VSPRINTF_POSIX)|g' \
-             -e 's|@''GNULIB_DPRINTF''@|$(GNULIB_DPRINTF)|g' \
-             -e 's|@''GNULIB_VDPRINTF''@|$(GNULIB_VDPRINTF)|g' \
-             -e 's|@''GNULIB_VASPRINTF''@|$(GNULIB_VASPRINTF)|g' \
-             -e 's|@''GNULIB_OBSTACK_PRINTF''@|$(GNULIB_OBSTACK_PRINTF)|g' \
-             -e 's|@''GNULIB_OBSTACK_PRINTF_POSIX''@|$(GNULIB_OBSTACK_PRINTF_POSIX)|g' \
-             -e 's|@''GNULIB_FOPEN''@|$(GNULIB_FOPEN)|g' \
-             -e 's|@''GNULIB_FREOPEN''@|$(GNULIB_FREOPEN)|g' \
-             -e 's|@''GNULIB_FSEEK''@|$(GNULIB_FSEEK)|g' \
-             -e 's|@''GNULIB_FSEEKO''@|$(GNULIB_FSEEKO)|g' \
-             -e 's|@''GNULIB_FTELL''@|$(GNULIB_FTELL)|g' \
-             -e 's|@''GNULIB_FTELLO''@|$(GNULIB_FTELLO)|g' \
-             -e 's|@''GNULIB_FFLUSH''@|$(GNULIB_FFLUSH)|g' \
-             -e 's|@''GNULIB_FCLOSE''@|$(GNULIB_FCLOSE)|g' \
-             -e 's|@''GNULIB_FPUTC''@|$(GNULIB_FPUTC)|g' \
-             -e 's|@''GNULIB_PUTC''@|$(GNULIB_PUTC)|g' \
-             -e 's|@''GNULIB_PUTCHAR''@|$(GNULIB_PUTCHAR)|g' \
-             -e 's|@''GNULIB_FPUTS''@|$(GNULIB_FPUTS)|g' \
-             -e 's|@''GNULIB_PUTS''@|$(GNULIB_PUTS)|g' \
-             -e 's|@''GNULIB_FWRITE''@|$(GNULIB_FWRITE)|g' \
-             -e 's|@''GNULIB_GETDELIM''@|$(GNULIB_GETDELIM)|g' \
-             -e 's|@''GNULIB_GETLINE''@|$(GNULIB_GETLINE)|g' \
-             -e 's|@''GNULIB_PERROR''@|$(GNULIB_PERROR)|g' \
-             -e 's|@''GNULIB_STDIO_H_SIGPIPE''@|$(GNULIB_STDIO_H_SIGPIPE)|g' \
-             -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \
-             -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \
-             -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \
-             -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \
-             -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \
-             -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \
-             -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \
-             -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \
-             -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \
-             -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \
-             -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \
-             -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \
-             -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \
-             -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \
-             -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \
-             -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \
-             -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \
-             -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \
-             -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \
-             -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \
-             -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \
-             -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \
-             -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \
-             -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \
-             -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \
-             -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \
-             -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \
-             -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \
-             -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \
-             -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \
-             -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \
-             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
-             < $(srcdir)/stdio.in.h; \
-       } > $@-t
-       mv $@-t $@
-
-# We need the following in order to create <stdlib.h> when the system
-# doesn't have one that works with the given compiler.
-stdlib.h: stdlib.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \
-             -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \
-             -e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \
-             -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \
-             -e 's|@''GNULIB_CALLOC_POSIX''@|$(GNULIB_CALLOC_POSIX)|g' \
-             -e 's|@''GNULIB_ATOLL''@|$(GNULIB_ATOLL)|g' \
-             -e 's|@''GNULIB_GETLOADAVG''@|$(GNULIB_GETLOADAVG)|g' \
-             -e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \
-             -e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \
-             -e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \
-             -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \
-             -e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \
-             -e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|g' \
-             -e 's|@''GNULIB_SETENV''@|$(GNULIB_SETENV)|g' \
-             -e 's|@''GNULIB_STRTOD''@|$(GNULIB_STRTOD)|g' \
-             -e 's|@''GNULIB_STRTOLL''@|$(GNULIB_STRTOLL)|g' \
-             -e 's|@''GNULIB_STRTOULL''@|$(GNULIB_STRTOULL)|g' \
-             -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \
-             -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \
-             -e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|g' \
-             -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \
-             -e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \
-             -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
-             -e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \
-             -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \
-             -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
-             -e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|g' \
-             -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
-             -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \
-             -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \
-             -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \
-             -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \
-             -e 's|@''HAVE_UNSETENV''@|$(HAVE_UNSETENV)|g' \
-             -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \
-             -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
-             -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
-             -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
-             -e 's|@''VOID_UNSETENV''@|$(VOID_UNSETENV)|g' \
-             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
-             < $(srcdir)/stdlib.in.h; \
-       } > $@-t
-       mv $@-t $@
-
-# We need the following in order to create <string.h> when the system
-# doesn't have one that works with the given compiler.
-string.h: string.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
-             -e 's|@''GNULIB_MBSLEN''@|$(GNULIB_MBSLEN)|g' \
-             -e 's|@''GNULIB_MBSNLEN''@|$(GNULIB_MBSNLEN)|g' \
-             -e 's|@''GNULIB_MBSCHR''@|$(GNULIB_MBSCHR)|g' \
-             -e 's|@''GNULIB_MBSRCHR''@|$(GNULIB_MBSRCHR)|g' \
-             -e 's|@''GNULIB_MBSSTR''@|$(GNULIB_MBSSTR)|g' \
-             -e 's|@''GNULIB_MBSCASECMP''@|$(GNULIB_MBSCASECMP)|g' \
-             -e 's|@''GNULIB_MBSNCASECMP''@|$(GNULIB_MBSNCASECMP)|g' \
-             -e 's|@''GNULIB_MBSPCASECMP''@|$(GNULIB_MBSPCASECMP)|g' \
-             -e 's|@''GNULIB_MBSCASESTR''@|$(GNULIB_MBSCASESTR)|g' \
-             -e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \
-             -e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \
-             -e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \
-             -e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \
-             -e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \
-             -e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \
-             -e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \
-             -e 's|@''GNULIB_MEMRCHR''@|$(GNULIB_MEMRCHR)|g' \
-             -e 's|@''GNULIB_RAWMEMCHR''@|$(GNULIB_RAWMEMCHR)|g' \
-             -e 's|@''GNULIB_STPCPY''@|$(GNULIB_STPCPY)|g' \
-             -e 's|@''GNULIB_STPNCPY''@|$(GNULIB_STPNCPY)|g' \
-             -e 's|@''GNULIB_STRCHRNUL''@|$(GNULIB_STRCHRNUL)|g' \
-             -e 's|@''GNULIB_STRDUP''@|$(GNULIB_STRDUP)|g' \
-             -e 's|@''GNULIB_STRNDUP''@|$(GNULIB_STRNDUP)|g' \
-             -e 's|@''GNULIB_STRNLEN''@|$(GNULIB_STRNLEN)|g' \
-             -e 's|@''GNULIB_STRPBRK''@|$(GNULIB_STRPBRK)|g' \
-             -e 's|@''GNULIB_STRSEP''@|$(GNULIB_STRSEP)|g' \
-             -e 's|@''GNULIB_STRSTR''@|$(GNULIB_STRSTR)|g' \
-             -e 's|@''GNULIB_STRCASESTR''@|$(GNULIB_STRCASESTR)|g' \
-             -e 's|@''GNULIB_STRTOK_R''@|$(GNULIB_STRTOK_R)|g' \
-             -e 's|@''GNULIB_STRERROR''@|$(GNULIB_STRERROR)|g' \
-             -e 's|@''GNULIB_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \
-             -e 's|@''GNULIB_STRVERSCMP''@|$(GNULIB_STRVERSCMP)|g' \
-             -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
-             -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
-             -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
-             -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \
-             -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
-             -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
-             -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
-             -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
-             -e 's|@''HAVE_STRNDUP''@|$(HAVE_STRNDUP)|g' \
-             -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
-             -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
-             -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
-             -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
-             -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
-             -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
-             -e 's|@''HAVE_DECL_STRERROR''@|$(HAVE_DECL_STRERROR)|g' \
-             -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
-             -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
-             -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
-             -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
-             -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
-             -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
-             -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
-             -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
-             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
-             < $(srcdir)/string.in.h; \
-       } > $@-t
-       mv $@-t $@
-
-# We need the following in order to create <strings.h> when the system
-# doesn't have one that works with the given compiler.
-strings.h: strings.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \
-             -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \
-             -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \
-             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
-             < $(srcdir)/strings.in.h; \
-       } > $@-t
-       mv $@-t $@
-
-# We need the following in order to create <sys/stat.h> when the system
-# has one that is incomplete.
-sys/stat.h: sys_stat.in.h
-       @MKDIR_P@ sys
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
-             -e 's|@''GNULIB_LCHMOD''@|$(GNULIB_LCHMOD)|g' \
-             -e 's|@''GNULIB_LSTAT''@|$(GNULIB_LSTAT)|g' \
-             -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \
-             -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \
-             -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \
-             -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \
-             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
-             < $(srcdir)/sys_stat.in.h; \
-       } > $@-t
-       mv $@-t $@
-
-# We need the following in order to create <sys/time.h> when the system
-# doesn't have one that works with the given compiler.
-sys/time.h: sys_time.in.h
-       @MKDIR_P@ sys
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \
-             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \
-             -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \
-             -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \
-             < $(srcdir)/sys_time.in.h; \
-       } > $@-t
-       mv $@-t $@
-
-# We need the following in order to create <sysexits.h> when the system
-# doesn't have one that works with the given compiler.
-sysexits.h: sysexits.in.h
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''HAVE_SYSEXITS_H''@|$(HAVE_SYSEXITS_H)|g' \
-             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_SYSEXITS_H''@|$(NEXT_SYSEXITS_H)|g' \
-             < $(srcdir)/sysexits.in.h; \
-       } > $@-t
-       mv -f $@-t $@
-
-# We need the following in order to create <time.h> when the system
-# doesn't have one that works with the given compiler.
-time.h: time.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \
-             -e 's|@REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \
-             -e 's|@REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \
-             -e 's|@REPLACE_STRPTIME''@|$(REPLACE_STRPTIME)|g' \
-             -e 's|@REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \
-             -e 's|@SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
-             -e 's|@TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
-             < $(srcdir)/time.in.h; \
-       } > $@-t
-       mv $@-t $@
-
-# We need the following in order to create an empty placeholder for
-# <unistd.h> when the system doesn't have one.
-unistd.h: unistd.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
-             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
-             -e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \
-             -e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|g' \
-             -e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \
-             -e 's|@''GNULIB_ENVIRON''@|$(GNULIB_ENVIRON)|g' \
-             -e 's|@''GNULIB_EUIDACCESS''@|$(GNULIB_EUIDACCESS)|g' \
-             -e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \
-             -e 's|@''GNULIB_FSYNC''@|$(GNULIB_FSYNC)|g' \
-             -e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \
-             -e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \
-             -e 's|@''GNULIB_GETDOMAINNAME''@|$(GNULIB_GETDOMAINNAME)|g' \
-             -e 's|@''GNULIB_GETDTABLESIZE''@|$(GNULIB_GETDTABLESIZE)|g' \
-             -e 's|@''GNULIB_GETHOSTNAME''@|$(GNULIB_GETHOSTNAME)|g' \
-             -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \
-             -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \
-             -e 's|@''GNULIB_GETUSERSHELL''@|$(GNULIB_GETUSERSHELL)|g' \
-             -e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \
-             -e 's|@''GNULIB_LINK''@|$(GNULIB_LINK)|g' \
-             -e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \
-             -e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \
-             -e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \
-             -e 's|@''GNULIB_UNISTD_H_SIGPIPE''@|$(GNULIB_UNISTD_H_SIGPIPE)|g' \
-             -e 's|@''GNULIB_WRITE''@|$(GNULIB_WRITE)|g' \
-             -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
-             -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \
-             -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \
-             -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
-             -e 's|@''HAVE_GETDOMAINNAME''@|$(HAVE_GETDOMAINNAME)|g' \
-             -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \
-             -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \
-             -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
-             -e 's|@''HAVE_GETUSERSHELL''@|$(HAVE_GETUSERSHELL)|g' \
-             -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
-             -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
-             -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
-             -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
-             -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
-             -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
-             -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
-             -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
-             -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
-             -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \
-             -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
-             -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
-             -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
-             -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
-             -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \
-             -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \
-             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
-             < $(srcdir)/unistd.in.h; \
-       } > $@-t
-       mv $@-t $@
-
-# We need the following in order to create <wchar.h> when the system
-# version does not work standalone.
-wchar.h: wchar.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
-             -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
-             -e 's|@''GNULIB_BTOWC''@|$(GNULIB_BTOWC)|g' \
-             -e 's|@''GNULIB_WCTOB''@|$(GNULIB_WCTOB)|g' \
-             -e 's|@''GNULIB_MBSINIT''@|$(GNULIB_MBSINIT)|g' \
-             -e 's|@''GNULIB_MBRTOWC''@|$(GNULIB_MBRTOWC)|g' \
-             -e 's|@''GNULIB_MBRLEN''@|$(GNULIB_MBRLEN)|g' \
-             -e 's|@''GNULIB_MBSRTOWCS''@|$(GNULIB_MBSRTOWCS)|g' \
-             -e 's|@''GNULIB_MBSNRTOWCS''@|$(GNULIB_MBSNRTOWCS)|g' \
-             -e 's|@''GNULIB_WCRTOMB''@|$(GNULIB_WCRTOMB)|g' \
-             -e 's|@''GNULIB_WCSRTOMBS''@|$(GNULIB_WCSRTOMBS)|g' \
-             -e 's|@''GNULIB_WCSNRTOMBS''@|$(GNULIB_WCSNRTOMBS)|g' \
-             -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \
-             -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
-             -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
-             -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
-             -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
-             -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
-             -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
-             -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
-             -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
-             -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
-             -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
-             -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
-             -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
-             -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
-             -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
-             -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
-             -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
-             -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
-             -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
-             -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
-             -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
-             -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
-             -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
-             -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
-             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
-           < $(srcdir)/wchar.in.h; \
-       } > $@-t
-       mv $@-t $@
-
-# We need the following in order to create <wctype.h> when the system
-# doesn't have one that works with the given compiler.
-wctype.h: wctype.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
-             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
-             -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
-             -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
-             -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
-             < $(srcdir)/wctype.in.h; \
-       } > $@-t
-       mv $@-t $@
-
-mostlyclean-local: mostlyclean-generic
-       @for dir in '' $(MOSTLYCLEANDIRS); do \
-         if test -n "$$dir" && test -d $$dir; then \
-           echo "rmdir $$dir"; rmdir $$dir; \
-         fi; \
-       done; \
-       :
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-noinstLIBRARIES ctags distclean distclean-compile \
+       distclean-generic distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+       uninstall-am
 
 rmt-command.h : Makefile
-       rm -f $@-t $@
-       echo "#ifndef DEFAULT_RMT_COMMAND" >> $@-t
-       echo "# define DEFAULT_RMT_COMMAND \"$(DEFAULT_RMT_DIR)/`echo rmt | sed '$(transform)'`$(EXEEXT)\"" >> $@-t
-       echo "#endif" >> $@-t
-       mv $@-t $@
+       $(AM_V_GEN)rm -f $@-t $@
+       $(AM_V_at)echo "#ifndef DEFAULT_RMT_COMMAND" >> $@-t
+       $(AM_V_at)echo "# define DEFAULT_RMT_COMMAND \"$(DEFAULT_RMT_DIR)/`echo rmt | sed '$(transform)'`$(EXEEXT)\"" >> $@-t
+       $(AM_V_at)echo "#endif" >> $@-t
+       $(AM_V_at)mv $@-t $@
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/lib/alloca.c b/lib/alloca.c
deleted file mode 100644 (file)
index 0af8467..0000000
+++ /dev/null
@@ -1,491 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* alloca.c -- allocate automatically reclaimed memory
-   (Mostly) portable public-domain implementation -- D A Gwyn
-
-   This implementation of the PWB library alloca function,
-   which is used to allocate space off the run-time stack so
-   that it is automatically reclaimed upon procedure exit,
-   was inspired by discussions with J. Q. Johnson of Cornell.
-   J.Otto Tennant <jot@cray.com> contributed the Cray support.
-
-   There are some preprocessor constants that can
-   be defined when compiling for your specific system, for
-   improved efficiency; however, the defaults should be okay.
-
-   The general concept of this implementation is to keep
-   track of all alloca-allocated blocks, and reclaim any
-   that are found to be deeper in the stack than the current
-   invocation.  This heuristic does not reclaim storage as
-   soon as it becomes invalid, but it will do so eventually.
-
-   As a special case, alloca(0) reclaims storage without
-   allocating any.  It is a good idea to use alloca(0) in
-   your main control loop, etc. to force garbage collection.  */
-
-#include <config.h>
-
-#include <alloca.h>
-
-#include <string.h>
-#include <stdlib.h>
-
-#ifdef emacs
-# include "lisp.h"
-# include "blockinput.h"
-# ifdef EMACS_FREE
-#  undef free
-#  define free EMACS_FREE
-# endif
-#else
-# define memory_full() abort ()
-#endif
-
-/* If compiling with GCC 2, this file's not needed.  */
-#if !defined (__GNUC__) || __GNUC__ < 2
-
-/* If someone has defined alloca as a macro,
-   there must be some other way alloca is supposed to work.  */
-# ifndef alloca
-
-#  ifdef emacs
-#   ifdef static
-/* actually, only want this if static is defined as ""
-   -- this is for usg, in which emacs must undefine static
-   in order to make unexec workable
-   */
-#    ifndef STACK_DIRECTION
-you
-lose
--- must know STACK_DIRECTION at compile-time
-/* Using #error here is not wise since this file should work for
-   old and obscure compilers.  */
-#    endif /* STACK_DIRECTION undefined */
-#   endif /* static */
-#  endif /* emacs */
-
-/* If your stack is a linked list of frames, you have to
-   provide an "address metric" ADDRESS_FUNCTION macro.  */
-
-#  if defined (CRAY) && defined (CRAY_STACKSEG_END)
-long i00afunc ();
-#   define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg))
-#  else
-#   define ADDRESS_FUNCTION(arg) &(arg)
-#  endif
-
-/* Define STACK_DIRECTION if you know the direction of stack
-   growth for your system; otherwise it will be automatically
-   deduced at run-time.
-
-   STACK_DIRECTION > 0 => grows toward higher addresses
-   STACK_DIRECTION < 0 => grows toward lower addresses
-   STACK_DIRECTION = 0 => direction of growth unknown  */
-
-#  ifndef STACK_DIRECTION
-#   define STACK_DIRECTION     0       /* Direction unknown.  */
-#  endif
-
-#  if STACK_DIRECTION != 0
-
-#   define STACK_DIR   STACK_DIRECTION /* Known at compile-time.  */
-
-#  else /* STACK_DIRECTION == 0; need run-time code.  */
-
-static int stack_dir;          /* 1 or -1 once known.  */
-#   define STACK_DIR   stack_dir
-
-static void
-find_stack_direction (void)
-{
-  static char *addr = NULL;    /* Address of first `dummy', once known.  */
-  auto char dummy;             /* To get stack address.  */
-
-  if (addr == NULL)
-    {                          /* Initial entry.  */
-      addr = ADDRESS_FUNCTION (dummy);
-
-      find_stack_direction (); /* Recurse once.  */
-    }
-  else
-    {
-      /* Second entry.  */
-      if (ADDRESS_FUNCTION (dummy) > addr)
-       stack_dir = 1;          /* Stack grew upward.  */
-      else
-       stack_dir = -1;         /* Stack grew downward.  */
-    }
-}
-
-#  endif /* STACK_DIRECTION == 0 */
-
-/* An "alloca header" is used to:
-   (a) chain together all alloca'ed blocks;
-   (b) keep track of stack depth.
-
-   It is very important that sizeof(header) agree with malloc
-   alignment chunk size.  The following default should work okay.  */
-
-#  ifndef      ALIGN_SIZE
-#   define ALIGN_SIZE  sizeof(double)
-#  endif
-
-typedef union hdr
-{
-  char align[ALIGN_SIZE];      /* To force sizeof(header).  */
-  struct
-    {
-      union hdr *next;         /* For chaining headers.  */
-      char *deep;              /* For stack depth measure.  */
-    } h;
-} header;
-
-static header *last_alloca_header = NULL;      /* -> last alloca header.  */
-
-/* Return a pointer to at least SIZE bytes of storage,
-   which will be automatically reclaimed upon exit from
-   the procedure that called alloca.  Originally, this space
-   was supposed to be taken from the current stack frame of the
-   caller, but that method cannot be made to work for some
-   implementations of C, for example under Gould's UTX/32.  */
-
-void *
-alloca (size_t size)
-{
-  auto char probe;             /* Probes stack depth: */
-  register char *depth = ADDRESS_FUNCTION (probe);
-
-#  if STACK_DIRECTION == 0
-  if (STACK_DIR == 0)          /* Unknown growth direction.  */
-    find_stack_direction ();
-#  endif
-
-  /* Reclaim garbage, defined as all alloca'd storage that
-     was allocated from deeper in the stack than currently.  */
-
-  {
-    register header *hp;       /* Traverses linked list.  */
-
-#  ifdef emacs
-    BLOCK_INPUT;
-#  endif
-
-    for (hp = last_alloca_header; hp != NULL;)
-      if ((STACK_DIR > 0 && hp->h.deep > depth)
-         || (STACK_DIR < 0 && hp->h.deep < depth))
-       {
-         register header *np = hp->h.next;
-
-         free (hp);            /* Collect garbage.  */
-
-         hp = np;              /* -> next header.  */
-       }
-      else
-       break;                  /* Rest are not deeper.  */
-
-    last_alloca_header = hp;   /* -> last valid storage.  */
-
-#  ifdef emacs
-    UNBLOCK_INPUT;
-#  endif
-  }
-
-  if (size == 0)
-    return NULL;               /* No allocation required.  */
-
-  /* Allocate combined header + user data storage.  */
-
-  {
-    /* Address of header.  */
-    register header *new;
-
-    size_t combined_size = sizeof (header) + size;
-    if (combined_size < sizeof (header))
-      memory_full ();
-
-    new = malloc (combined_size);
-
-    if (! new)
-      memory_full ();
-
-    new->h.next = last_alloca_header;
-    new->h.deep = depth;
-
-    last_alloca_header = new;
-
-    /* User storage begins just after header.  */
-
-    return (void *) (new + 1);
-  }
-}
-
-#  if defined (CRAY) && defined (CRAY_STACKSEG_END)
-
-#   ifdef DEBUG_I00AFUNC
-#    include <stdio.h>
-#   endif
-
-#   ifndef CRAY_STACK
-#    define CRAY_STACK
-#    ifndef CRAY2
-/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */
-struct stack_control_header
-  {
-    long shgrow:32;            /* Number of times stack has grown.  */
-    long shaseg:32;            /* Size of increments to stack.  */
-    long shhwm:32;             /* High water mark of stack.  */
-    long shsize:32;            /* Current size of stack (all segments).  */
-  };
-
-/* The stack segment linkage control information occurs at
-   the high-address end of a stack segment.  (The stack
-   grows from low addresses to high addresses.)  The initial
-   part of the stack segment linkage control information is
-   0200 (octal) words.  This provides for register storage
-   for the routine which overflows the stack.  */
-
-struct stack_segment_linkage
-  {
-    long ss[0200];             /* 0200 overflow words.  */
-    long sssize:32;            /* Number of words in this segment.  */
-    long ssbase:32;            /* Offset to stack base.  */
-    long:32;
-    long sspseg:32;            /* Offset to linkage control of previous
-                                  segment of stack.  */
-    long:32;
-    long sstcpt:32;            /* Pointer to task common address block.  */
-    long sscsnm;               /* Private control structure number for
-                                  microtasking.  */
-    long ssusr1;               /* Reserved for user.  */
-    long ssusr2;               /* Reserved for user.  */
-    long sstpid;               /* Process ID for pid based multi-tasking.  */
-    long ssgvup;               /* Pointer to multitasking thread giveup.  */
-    long sscray[7];            /* Reserved for Cray Research.  */
-    long ssa0;
-    long ssa1;
-    long ssa2;
-    long ssa3;
-    long ssa4;
-    long ssa5;
-    long ssa6;
-    long ssa7;
-    long sss0;
-    long sss1;
-    long sss2;
-    long sss3;
-    long sss4;
-    long sss5;
-    long sss6;
-    long sss7;
-  };
-
-#    else /* CRAY2 */
-/* The following structure defines the vector of words
-   returned by the STKSTAT library routine.  */
-struct stk_stat
-  {
-    long now;                  /* Current total stack size.  */
-    long maxc;                 /* Amount of contiguous space which would
-                                  be required to satisfy the maximum
-                                  stack demand to date.  */
-    long high_water;           /* Stack high-water mark.  */
-    long overflows;            /* Number of stack overflow ($STKOFEN) calls.  */
-    long hits;                 /* Number of internal buffer hits.  */
-    long extends;              /* Number of block extensions.  */
-    long stko_mallocs;         /* Block allocations by $STKOFEN.  */
-    long underflows;           /* Number of stack underflow calls ($STKRETN).  */
-    long stko_free;            /* Number of deallocations by $STKRETN.  */
-    long stkm_free;            /* Number of deallocations by $STKMRET.  */
-    long segments;             /* Current number of stack segments.  */
-    long maxs;                 /* Maximum number of stack segments so far.  */
-    long pad_size;             /* Stack pad size.  */
-    long current_address;      /* Current stack segment address.  */
-    long current_size;         /* Current stack segment size.  This
-                                  number is actually corrupted by STKSTAT to
-                                  include the fifteen word trailer area.  */
-    long initial_address;      /* Address of initial segment.  */
-    long initial_size;         /* Size of initial segment.  */
-  };
-
-/* The following structure describes the data structure which trails
-   any stack segment.  I think that the description in 'asdef' is
-   out of date.  I only describe the parts that I am sure about.  */
-
-struct stk_trailer
-  {
-    long this_address;         /* Address of this block.  */
-    long this_size;            /* Size of this block (does not include
-                                  this trailer).  */
-    long unknown2;
-    long unknown3;
-    long link;                 /* Address of trailer block of previous
-                                  segment.  */
-    long unknown5;
-    long unknown6;
-    long unknown7;
-    long unknown8;
-    long unknown9;
-    long unknown10;
-    long unknown11;
-    long unknown12;
-    long unknown13;
-    long unknown14;
-  };
-
-#    endif /* CRAY2 */
-#   endif /* not CRAY_STACK */
-
-#   ifdef CRAY2
-/* Determine a "stack measure" for an arbitrary ADDRESS.
-   I doubt that "lint" will like this much.  */
-
-static long
-i00afunc (long *address)
-{
-  struct stk_stat status;
-  struct stk_trailer *trailer;
-  long *block, size;
-  long result = 0;
-
-  /* We want to iterate through all of the segments.  The first
-     step is to get the stack status structure.  We could do this
-     more quickly and more directly, perhaps, by referencing the
-     $LM00 common block, but I know that this works.  */
-
-  STKSTAT (&status);
-
-  /* Set up the iteration.  */
-
-  trailer = (struct stk_trailer *) (status.current_address
-                                   + status.current_size
-                                   - 15);
-
-  /* There must be at least one stack segment.  Therefore it is
-     a fatal error if "trailer" is null.  */
-
-  if (trailer == 0)
-    abort ();
-
-  /* Discard segments that do not contain our argument address.  */
-
-  while (trailer != 0)
-    {
-      block = (long *) trailer->this_address;
-      size = trailer->this_size;
-      if (block == 0 || size == 0)
-       abort ();
-      trailer = (struct stk_trailer *) trailer->link;
-      if ((block <= address) && (address < (block + size)))
-       break;
-    }
-
-  /* Set the result to the offset in this segment and add the sizes
-     of all predecessor segments.  */
-
-  result = address - block;
-
-  if (trailer == 0)
-    {
-      return result;
-    }
-
-  do
-    {
-      if (trailer->this_size <= 0)
-       abort ();
-      result += trailer->this_size;
-      trailer = (struct stk_trailer *) trailer->link;
-    }
-  while (trailer != 0);
-
-  /* We are done.  Note that if you present a bogus address (one
-     not in any segment), you will get a different number back, formed
-     from subtracting the address of the first block.  This is probably
-     not what you want.  */
-
-  return (result);
-}
-
-#   else /* not CRAY2 */
-/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP.
-   Determine the number of the cell within the stack,
-   given the address of the cell.  The purpose of this
-   routine is to linearize, in some sense, stack addresses
-   for alloca.  */
-
-static long
-i00afunc (long address)
-{
-  long stkl = 0;
-
-  long size, pseg, this_segment, stack;
-  long result = 0;
-
-  struct stack_segment_linkage *ssptr;
-
-  /* Register B67 contains the address of the end of the
-     current stack segment.  If you (as a subprogram) store
-     your registers on the stack and find that you are past
-     the contents of B67, you have overflowed the segment.
-
-     B67 also points to the stack segment linkage control
-     area, which is what we are really interested in.  */
-
-  stkl = CRAY_STACKSEG_END ();
-  ssptr = (struct stack_segment_linkage *) stkl;
-
-  /* If one subtracts 'size' from the end of the segment,
-     one has the address of the first word of the segment.
-
-     If this is not the first segment, 'pseg' will be
-     nonzero.  */
-
-  pseg = ssptr->sspseg;
-  size = ssptr->sssize;
-
-  this_segment = stkl - size;
-
-  /* It is possible that calling this routine itself caused
-     a stack overflow.  Discard stack segments which do not
-     contain the target address.  */
-
-  while (!(this_segment <= address && address <= stkl))
-    {
-#    ifdef DEBUG_I00AFUNC
-      fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl);
-#    endif
-      if (pseg == 0)
-       break;
-      stkl = stkl - pseg;
-      ssptr = (struct stack_segment_linkage *) stkl;
-      size = ssptr->sssize;
-      pseg = ssptr->sspseg;
-      this_segment = stkl - size;
-    }
-
-  result = address - this_segment;
-
-  /* If you subtract pseg from the current end of the stack,
-     you get the address of the previous stack segment's end.
-     This seems a little convoluted to me, but I'll bet you save
-     a cycle somewhere.  */
-
-  while (pseg != 0)
-    {
-#    ifdef DEBUG_I00AFUNC
-      fprintf (stderr, "%011o %011o\n", pseg, size);
-#    endif
-      stkl = stkl - pseg;
-      ssptr = (struct stack_segment_linkage *) stkl;
-      size = ssptr->sssize;
-      pseg = ssptr->sspseg;
-      result += size;
-    }
-  return (result);
-}
-
-#   endif /* not CRAY2 */
-#  endif /* CRAY */
-
-# endif /* no alloca */
-#endif /* not GCC version 3 */
diff --git a/lib/alloca.in.h b/lib/alloca.in.h
deleted file mode 100644 (file)
index c65b4de..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Memory allocation on the stack.
-
-   Copyright (C) 1995, 1999, 2001-2004, 2006-2008 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, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-   USA.  */
-
-/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H
-   means there is a real alloca function.  */
-#ifndef _GL_ALLOCA_H
-#define _GL_ALLOCA_H
-
-/* alloca (N) returns a pointer to N bytes of memory
-   allocated on the stack, which will last until the function returns.
-   Use of alloca should be avoided:
-     - inside arguments of function calls - undefined behaviour,
-     - in inline functions - the allocation may actually last until the
-       calling function returns,
-     - for huge N (say, N >= 65536) - you never know how large (or small)
-       the stack is, and when the stack cannot fulfill the memory allocation
-       request, the program just crashes.
- */
-
-#ifndef alloca
-# ifdef __GNUC__
-#  define alloca __builtin_alloca
-# elif defined _AIX
-#  define alloca __alloca
-# elif defined _MSC_VER
-#  include <malloc.h>
-#  define alloca _alloca
-# elif defined __DECC && defined __VMS
-#  define alloca __ALLOCA
-# else
-#  include <stddef.h>
-#  ifdef  __cplusplus
-extern "C"
-#  endif
-void *alloca (size_t);
-# endif
-#endif
-
-#endif /* _GL_ALLOCA_H */
diff --git a/lib/argmatch.c b/lib/argmatch.c
deleted file mode 100644 (file)
index 925449b..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-/* argmatch.c -- find a match for a string in an array
-
-   Copyright (C) 1990, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007
-   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 David MacKenzie <djm@ai.mit.edu>
-   Modified by Akim Demaille <demaille@inf.enst.fr> */
-
-#include <config.h>
-
-/* Specification.  */
-#include "argmatch.h"
-
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "gettext.h"
-#define _(msgid) gettext (msgid)
-
-#include "error.h"
-#include "quotearg.h"
-#include "quote.h"
-
-#if USE_UNLOCKED_IO
-# include "unlocked-io.h"
-#endif
-
-/* When reporting an invalid argument, show nonprinting characters
-   by using the quoting style ARGMATCH_QUOTING_STYLE.  Do not use
-   literal_quoting_style.  */
-#ifndef ARGMATCH_QUOTING_STYLE
-# define ARGMATCH_QUOTING_STYLE locale_quoting_style
-#endif
-
-/* Non failing version of argmatch call this function after failing. */
-#ifndef ARGMATCH_DIE
-# include "exitfail.h"
-# define ARGMATCH_DIE exit (exit_failure)
-#endif
-
-#ifdef ARGMATCH_DIE_DECL
-ARGMATCH_DIE_DECL;
-#endif
-
-static void
-__argmatch_die (void)
-{
-  ARGMATCH_DIE;
-}
-
-/* Used by XARGMATCH and XARGCASEMATCH.  See description in argmatch.h.
-   Default to __argmatch_die, but allow caller to change this at run-time. */
-argmatch_exit_fn argmatch_die = __argmatch_die;
-
-\f
-/* If ARG is an unambiguous match for an element of the
-   NULL-terminated array ARGLIST, return the index in ARGLIST
-   of the matched element, else -1 if it does not match any element
-   or -2 if it is ambiguous (is a prefix of more than one element).
-
-   If VALLIST is none null, use it to resolve ambiguities limited to
-   synonyms, i.e., for
-     "yes", "yop" -> 0
-     "no", "nope" -> 1
-   "y" is a valid argument, for `0', and "n" for `1'.  */
-
-ptrdiff_t
-argmatch (const char *arg, const char *const *arglist,
-         const char *vallist, size_t valsize)
-{
-  size_t i;                    /* Temporary index in ARGLIST.  */
-  size_t arglen;               /* Length of ARG.  */
-  ptrdiff_t matchind = -1;     /* Index of first nonexact match.  */
-  bool ambiguous = false;      /* If true, multiple nonexact match(es).  */
-
-  arglen = strlen (arg);
-
-  /* Test all elements for either exact match or abbreviated matches.  */
-  for (i = 0; arglist[i]; i++)
-    {
-      if (!strncmp (arglist[i], arg, arglen))
-       {
-         if (strlen (arglist[i]) == arglen)
-           /* Exact match found.  */
-           return i;
-         else if (matchind == -1)
-           /* First nonexact match found.  */
-           matchind = i;
-         else
-           {
-             /* Second nonexact match found.  */
-             if (vallist == NULL
-                 || memcmp (vallist + valsize * matchind,
-                            vallist + valsize * i, valsize))
-               {
-                 /* There is a real ambiguity, or we could not
-                    disambiguate. */
-                 ambiguous = true;
-               }
-           }
-       }
-    }
-  if (ambiguous)
-    return -2;
-  else
-    return matchind;
-}
-
-/* Error reporting for argmatch.
-   CONTEXT is a description of the type of entity that was being matched.
-   VALUE is the invalid value that was given.
-   PROBLEM is the return value from argmatch.  */
-
-void
-argmatch_invalid (const char *context, const char *value, ptrdiff_t problem)
-{
-  char const *format = (problem == -1
-                       ? _("invalid argument %s for %s")
-                       : _("ambiguous argument %s for %s"));
-
-  error (0, 0, format, quotearg_n_style (0, ARGMATCH_QUOTING_STYLE, value),
-        quote_n (1, context));
-}
-
-/* List the valid arguments for argmatch.
-   ARGLIST is the same as in argmatch.
-   VALLIST is a pointer to an array of values.
-   VALSIZE is the size of the elements of VALLIST */
-void
-argmatch_valid (const char *const *arglist,
-               const char *vallist, size_t valsize)
-{
-  size_t i;
-  const char *last_val = NULL;
-
-  /* We try to put synonyms on the same line.  The assumption is that
-     synonyms follow each other */
-  fprintf (stderr, _("Valid arguments are:"));
-  for (i = 0; arglist[i]; i++)
-    if ((i == 0)
-       || memcmp (last_val, vallist + valsize * i, valsize))
-      {
-       fprintf (stderr, "\n  - `%s'", arglist[i]);
-       last_val = vallist + valsize * i;
-      }
-    else
-      {
-       fprintf (stderr, ", `%s'", arglist[i]);
-      }
-  putc ('\n', stderr);
-}
-
-/* Never failing versions of the previous functions.
-
-   CONTEXT is the context for which argmatch is called (e.g.,
-   "--version-control", or "$VERSION_CONTROL" etc.).  Upon failure,
-   calls the (supposed never to return) function EXIT_FN. */
-
-ptrdiff_t
-__xargmatch_internal (const char *context,
-                     const char *arg, const char *const *arglist,
-                     const char *vallist, size_t valsize,
-                     argmatch_exit_fn exit_fn)
-{
-  ptrdiff_t res = argmatch (arg, arglist, vallist, valsize);
-  if (res >= 0)
-    /* Success. */
-    return res;
-
-  /* We failed.  Explain why. */
-  argmatch_invalid (context, arg, res);
-  argmatch_valid (arglist, vallist, valsize);
-  (*exit_fn) ();
-
-  return -1; /* To please the compilers. */
-}
-
-/* Look for VALUE in VALLIST, an array of objects of size VALSIZE and
-   return the first corresponding argument in ARGLIST */
-const char *
-argmatch_to_argument (const char *value,
-                     const char *const *arglist,
-                     const char *vallist, size_t valsize)
-{
-  size_t i;
-
-  for (i = 0; arglist[i]; i++)
-    if (!memcmp (value, vallist + valsize * i, valsize))
-      return arglist[i];
-  return NULL;
-}
-
-#ifdef TEST
-/*
- * Based on "getversion.c" by David MacKenzie <djm@gnu.ai.mit.edu>
- */
-char *program_name;
-
-/* When to make backup files.  */
-enum backup_type
-{
-  /* Never make backups.  */
-  no_backups,
-
-  /* Make simple backups of every file.  */
-  simple_backups,
-
-  /* Make numbered backups of files that already have numbered backups,
-     and simple backups of the others.  */
-  numbered_existing_backups,
-
-  /* Make numbered backups of every file.  */
-  numbered_backups
-};
-
-/* Two tables describing arguments (keys) and their corresponding
-   values */
-static const char *const backup_args[] =
-{
-  "no", "none", "off",
-  "simple", "never",
-  "existing", "nil",
-  "numbered", "t",
-  0
-};
-
-static const enum backup_type backup_vals[] =
-{
-  no_backups, no_backups, no_backups,
-  simple_backups, simple_backups,
-  numbered_existing_backups, numbered_existing_backups,
-  numbered_backups, numbered_backups
-};
-
-int
-main (int argc, const char *const *argv)
-{
-  const char *cp;
-  enum backup_type backup_type = no_backups;
-
-  program_name = (char *) argv[0];
-
-  if (argc > 2)
-    {
-      fprintf (stderr, "Usage: %s [VERSION_CONTROL]\n", program_name);
-      exit (1);
-    }
-
-  if ((cp = getenv ("VERSION_CONTROL")))
-    backup_type = XARGMATCH ("$VERSION_CONTROL", cp,
-                            backup_args, backup_vals);
-
-  if (argc == 2)
-    backup_type = XARGMATCH (program_name, argv[1],
-                            backup_args, backup_vals);
-
-  printf ("The version control is `%s'\n",
-         ARGMATCH_TO_ARGUMENT (backup_type, backup_args, backup_vals));
-
-  return 0;
-}
-#endif
diff --git a/lib/argmatch.h b/lib/argmatch.h
deleted file mode 100644 (file)
index cc40314..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/* argmatch.h -- definitions and prototypes for argmatch.c
-
-   Copyright (C) 1990, 1998, 1999, 2001, 2002, 2004, 2005 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 David MacKenzie <djm@ai.mit.edu>
-   Modified by Akim Demaille <demaille@inf.enst.fr> */
-
-#ifndef ARGMATCH_H_
-# define ARGMATCH_H_ 1
-
-# include <stddef.h>
-
-# include "verify.h"
-
-# define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array))
-
-/* Assert there are as many real arguments as there are values
-   (argument list ends with a NULL guard).  */
-
-# define ARGMATCH_VERIFY(Arglist, Vallist) \
-    verify (ARRAY_CARDINALITY (Arglist) == ARRAY_CARDINALITY (Vallist) + 1)
-
-/* Return the index of the element of ARGLIST (NULL terminated) that
-   matches with ARG.  If VALLIST is not NULL, then use it to resolve
-   false ambiguities (i.e., different matches of ARG but corresponding
-   to the same values in VALLIST).  */
-
-ptrdiff_t argmatch (char const *arg, char const *const *arglist,
-                   char const *vallist, size_t valsize);
-
-# define ARGMATCH(Arg, Arglist, Vallist) \
-  argmatch (Arg, Arglist, (char const *) (Vallist), sizeof *(Vallist))
-
-/* xargmatch calls this function when it fails.  This function should not
-   return.  By default, this is a function that calls ARGMATCH_DIE which
-   in turn defaults to `exit (exit_failure)'.  */
-typedef void (*argmatch_exit_fn) (void);
-extern argmatch_exit_fn argmatch_die;
-
-/* Report on stderr why argmatch failed.  Report correct values. */
-
-void argmatch_invalid (char const *context, char const *value,
-                      ptrdiff_t problem);
-
-/* Left for compatibility with the old name invalid_arg */
-
-# define invalid_arg(Context, Value, Problem) \
-  argmatch_invalid (Context, Value, Problem)
-
-
-
-/* Report on stderr the list of possible arguments.  */
-
-void argmatch_valid (char const *const *arglist,
-                    char const *vallist, size_t valsize);
-
-# define ARGMATCH_VALID(Arglist, Vallist) \
-  argmatch_valid (Arglist, (char const *) (Vallist), sizeof *(Vallist))
-
-
-
-/* Same as argmatch, but upon failure, reports a explanation on the
-   failure, and exits using the function EXIT_FN. */
-
-ptrdiff_t __xargmatch_internal (char const *context,
-                               char const *arg, char const *const *arglist,
-                               char const *vallist, size_t valsize,
-                               argmatch_exit_fn exit_fn);
-
-/* Programmer friendly interface to __xargmatch_internal. */
-
-# define XARGMATCH(Context, Arg, Arglist, Vallist)             \
-  ((Vallist) [__xargmatch_internal (Context, Arg, Arglist,     \
-                                   (char const *) (Vallist),   \
-                                   sizeof *(Vallist),          \
-                                   argmatch_die)])
-
-/* Convert a value into a corresponding argument. */
-
-char const *argmatch_to_argument (char const *value,
-                                 char const *const *arglist,
-                                 char const *vallist, size_t valsize);
-
-# define ARGMATCH_TO_ARGUMENT(Value, Arglist, Vallist)                 \
-  argmatch_to_argument (Value, Arglist,                                        \
-                       (char const *) (Vallist), sizeof *(Vallist))
-
-#endif /* ARGMATCH_H_ */
diff --git a/lib/argp-ba.c b/lib/argp-ba.c
deleted file mode 100644 (file)
index 3e8bb96..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Default definition for ARGP_PROGRAM_BUG_ADDRESS.
-   Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Written by Miles Bader <miles@gnu.ai.mit.edu>.
-
-   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 set by the user program, it should point to string that is the
-   bug-reporting address for the program.  It will be printed by argp_help if
-   the ARGP_HELP_BUG_ADDR flag is set (as it is by various standard help
-   messages), embedded in a sentence that says something like `Report bugs to
-   ADDR.'.  */
-const char *argp_program_bug_address;
diff --git a/lib/argp-eexst.c b/lib/argp-eexst.c
deleted file mode 100644 (file)
index 0a81c27..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Default definition for ARGP_ERR_EXIT_STATUS
-   Copyright (C) 1997 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Written by Miles Bader <miles@gnu.ai.mit.edu>.
-
-   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/>.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <sysexits.h>
-
-#include "argp.h"
-
-/* The exit status that argp will use when exiting due to a parsing error.
-   If not defined or set by the user program, this defaults to EX_USAGE from
-   <sysexits.h>.  */
-error_t argp_err_exit_status = EX_USAGE;
diff --git a/lib/argp-fmtstream.c b/lib/argp-fmtstream.c
deleted file mode 100644 (file)
index c89a99c..0000000
+++ /dev/null
@@ -1,434 +0,0 @@
-/* Word-wrapping and line-truncating streams
-   Copyright (C) 1997-1999,2001,2002,2003,2005 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Written by Miles Bader <miles@gnu.ai.mit.edu>.
-
-   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/>.  */
-
-/* This package emulates glibc `line_wrap_stream' semantics for systems that
-   don't have that.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <stdarg.h>
-#include <ctype.h>
-
-#include "argp-fmtstream.h"
-#include "argp-namefrob.h"
-
-#ifndef ARGP_FMTSTREAM_USE_LINEWRAP
-
-#ifndef isblank
-#define isblank(ch) ((ch)==' ' || (ch)=='\t')
-#endif
-
-#if defined _LIBC && defined USE_IN_LIBIO
-# include <wchar.h>
-# include <libio/libioP.h>
-# define __vsnprintf(s, l, f, a) _IO_vsnprintf (s, l, f, a)
-#endif
-
-#define INIT_BUF_SIZE 200
-#define PRINTF_SIZE_GUESS 150
-\f
-/* Return an argp_fmtstream that outputs to STREAM, and which prefixes lines
-   written on it with LMARGIN spaces and limits them to RMARGIN columns
-   total.  If WMARGIN >= 0, words that extend past RMARGIN are wrapped by
-   replacing the whitespace before them with a newline and WMARGIN spaces.
-   Otherwise, chars beyond RMARGIN are simply dropped until a newline.
-   Returns NULL if there was an error.  */
-argp_fmtstream_t
-__argp_make_fmtstream (FILE *stream,
-                      size_t lmargin, size_t rmargin, ssize_t wmargin)
-{
-  argp_fmtstream_t fs;
-
-  fs = (struct argp_fmtstream *) malloc (sizeof (struct argp_fmtstream));
-  if (fs != NULL)
-    {
-      fs->stream = stream;
-
-      fs->lmargin = lmargin;
-      fs->rmargin = rmargin;
-      fs->wmargin = wmargin;
-      fs->point_col = 0;
-      fs->point_offs = 0;
-
-      fs->buf = (char *) malloc (INIT_BUF_SIZE);
-      if (! fs->buf)
-       {
-         free (fs);
-         fs = 0;
-       }
-      else
-       {
-         fs->p = fs->buf;
-         fs->end = fs->buf + INIT_BUF_SIZE;
-       }
-    }
-
-  return fs;
-}
-#if 0
-/* Not exported.  */
-#ifdef weak_alias
-weak_alias (__argp_make_fmtstream, argp_make_fmtstream)
-#endif
-#endif
-
-/* Flush FS to its stream, and free it (but don't close the stream).  */
-void
-__argp_fmtstream_free (argp_fmtstream_t fs)
-{
-  __argp_fmtstream_update (fs);
-  if (fs->p > fs->buf)
-    {
-#ifdef USE_IN_LIBIO
-      __fxprintf (fs->stream, "%.*s", (int) (fs->p - fs->buf), fs->buf);
-#else
-      fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream);
-#endif
-    }
-  free (fs->buf);
-  free (fs);
-}
-#if 0
-/* Not exported.  */
-#ifdef weak_alias
-weak_alias (__argp_fmtstream_free, argp_fmtstream_free)
-#endif
-#endif
-\f
-/* Process FS's buffer so that line wrapping is done from POINT_OFFS to the
-   end of its buffer.  This code is mostly from glibc stdio/linewrap.c.  */
-void
-__argp_fmtstream_update (argp_fmtstream_t fs)
-{
-  char *buf, *nl;
-  size_t len;
-
-  /* Scan the buffer for newlines.  */
-  buf = fs->buf + fs->point_offs;
-  while (buf < fs->p)
-    {
-      size_t r;
-
-      if (fs->point_col == 0 && fs->lmargin != 0)
-       {
-         /* We are starting a new line.  Print spaces to the left margin.  */
-         const size_t pad = fs->lmargin;
-         if (fs->p + pad < fs->end)
-           {
-             /* We can fit in them in the buffer by moving the
-                buffer text up and filling in the beginning.  */
-             memmove (buf + pad, buf, fs->p - buf);
-             fs->p += pad; /* Compensate for bigger buffer. */
-             memset (buf, ' ', pad); /* Fill in the spaces.  */
-             buf += pad; /* Don't bother searching them.  */
-           }
-         else
-           {
-             /* No buffer space for spaces.  Must flush.  */
-             size_t i;
-             for (i = 0; i < pad; i++)
-               {
-#ifdef USE_IN_LIBIO
-                 if (_IO_fwide (fs->stream, 0) > 0)
-                   putwc_unlocked (L' ', fs->stream);
-                 else
-#endif
-                   putc_unlocked (' ', fs->stream);
-               }
-           }
-         fs->point_col = pad;
-       }
-
-      len = fs->p - buf;
-      nl = memchr (buf, '\n', len);
-
-      if (fs->point_col < 0)
-       fs->point_col = 0;
-
-      if (!nl)
-       {
-         /* The buffer ends in a partial line.  */
-
-         if (fs->point_col + len < fs->rmargin)
-           {
-             /* The remaining buffer text is a partial line and fits
-                within the maximum line width.  Advance point for the
-                characters to be written and stop scanning.  */
-             fs->point_col += len;
-             break;
-           }
-         else
-           /* Set the end-of-line pointer for the code below to
-              the end of the buffer.  */
-           nl = fs->p;
-       }
-      else if (fs->point_col + (nl - buf) < (ssize_t) fs->rmargin)
-       {
-         /* The buffer contains a full line that fits within the maximum
-            line width.  Reset point and scan the next line.  */
-         fs->point_col = 0;
-         buf = nl + 1;
-         continue;
-       }
-
-      /* This line is too long.  */
-      r = fs->rmargin - 1;
-
-      if (fs->wmargin < 0)
-       {
-         /* Truncate the line by overwriting the excess with the
-            newline and anything after it in the buffer.  */
-         if (nl < fs->p)
-           {
-             memmove (buf + (r - fs->point_col), nl, fs->p - nl);
-             fs->p -= buf + (r - fs->point_col) - nl;
-             /* Reset point for the next line and start scanning it.  */
-             fs->point_col = 0;
-             buf += r + 1; /* Skip full line plus \n. */
-           }
-         else
-           {
-             /* The buffer ends with a partial line that is beyond the
-                maximum line width.  Advance point for the characters
-                written, and discard those past the max from the buffer.  */
-             fs->point_col += len;
-             fs->p -= fs->point_col - r;
-             break;
-           }
-       }
-      else
-       {
-         /* Do word wrap.  Go to the column just past the maximum line
-            width and scan back for the beginning of the word there.
-            Then insert a line break.  */
-
-         char *p, *nextline;
-         int i;
-
-         p = buf + (r + 1 - fs->point_col);
-         while (p >= buf && !isblank (*p))
-           --p;
-         nextline = p + 1;     /* This will begin the next line.  */
-
-         if (nextline > buf)
-           {
-             /* Swallow separating blanks.  */
-             if (p >= buf)
-               do
-                 --p;
-               while (p >= buf && isblank (*p));
-             nl = p + 1;       /* The newline will replace the first blank. */
-           }
-         else
-           {
-             /* A single word that is greater than the maximum line width.
-                Oh well.  Put it on an overlong line by itself.  */
-             p = buf + (r + 1 - fs->point_col);
-             /* Find the end of the long word.  */
-             if (p < nl)
-               do
-                 ++p;
-               while (p < nl && !isblank (*p));
-             if (p == nl)
-               {
-                 /* It already ends a line.  No fussing required.  */
-                 fs->point_col = 0;
-                 buf = nl + 1;
-                 continue;
-               }
-             /* We will move the newline to replace the first blank.  */
-             nl = p;
-             /* Swallow separating blanks.  */
-             do
-               ++p;
-             while (isblank (*p));
-             /* The next line will start here.  */
-             nextline = p;
-           }
-
-         /* Note: There are a bunch of tests below for
-            NEXTLINE == BUF + LEN + 1; this case is where NL happens to fall
-            at the end of the buffer, and NEXTLINE is in fact empty (and so
-            we need not be careful to maintain its contents).  */
-
-         if ((nextline == buf + len + 1
-              ? fs->end - nl < fs->wmargin + 1
-              : nextline - (nl + 1) < fs->wmargin)
-             && fs->p > nextline)
-           {
-             /* The margin needs more blanks than we removed.  */
-             if (fs->end - fs->p > fs->wmargin + 1)
-               /* Make some space for them.  */
-               {
-                 size_t mv = fs->p - nextline;
-                 memmove (nl + 1 + fs->wmargin, nextline, mv);
-                 nextline = nl + 1 + fs->wmargin;
-                 len = nextline + mv - buf;
-                 *nl++ = '\n';
-               }
-             else
-               /* Output the first line so we can use the space.  */
-               {
-#ifdef _LIBC
-                 __fxprintf (fs->stream, "%.*s\n",
-                             (int) (nl - fs->buf), fs->buf);
-#else
-                 if (nl > fs->buf)
-                   fwrite_unlocked (fs->buf, 1, nl - fs->buf, fs->stream);
-                 putc_unlocked ('\n', fs->stream);
-#endif
-
-                 len += buf - fs->buf;
-                 nl = buf = fs->buf;
-               }
-           }
-         else
-           /* We can fit the newline and blanks in before
-              the next word.  */
-           *nl++ = '\n';
-
-         if (nextline - nl >= fs->wmargin
-             || (nextline == buf + len + 1 && fs->end - nextline >= fs->wmargin))
-           /* Add blanks up to the wrap margin column.  */
-           for (i = 0; i < fs->wmargin; ++i)
-             *nl++ = ' ';
-         else
-           for (i = 0; i < fs->wmargin; ++i)
-#ifdef USE_IN_LIBIO
-             if (_IO_fwide (fs->stream, 0) > 0)
-               putwc_unlocked (L' ', fs->stream);
-             else
-#endif
-               putc_unlocked (' ', fs->stream);
-
-         /* Copy the tail of the original buffer into the current buffer
-            position.  */
-         if (nl < nextline)
-           memmove (nl, nextline, buf + len - nextline);
-         len -= nextline - buf;
-
-         /* Continue the scan on the remaining lines in the buffer.  */
-         buf = nl;
-
-         /* Restore bufp to include all the remaining text.  */
-         fs->p = nl + len;
-
-         /* Reset the counter of what has been output this line.  If wmargin
-            is 0, we want to avoid the lmargin getting added, so we set
-            point_col to a magic value of -1 in that case.  */
-         fs->point_col = fs->wmargin ? fs->wmargin : -1;
-       }
-    }
-
-  /* Remember that we've scanned as far as the end of the buffer.  */
-  fs->point_offs = fs->p - fs->buf;
-}
-\f
-/* Ensure that FS has space for AMOUNT more bytes in its buffer, either by
-   growing the buffer, or by flushing it.  True is returned iff we succeed. */
-int
-__argp_fmtstream_ensure (struct argp_fmtstream *fs, size_t amount)
-{
-  if ((size_t) (fs->end - fs->p) < amount)
-    {
-      ssize_t wrote;
-
-      /* Flush FS's buffer.  */
-      __argp_fmtstream_update (fs);
-
-#ifdef _LIBC
-      __fxprintf (fs->stream, "%.*s", (int) (fs->p - fs->buf), fs->buf);
-      wrote = fs->p - fs->buf;
-#else
-      wrote = fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream);
-#endif
-      if (wrote == fs->p - fs->buf)
-       {
-         fs->p = fs->buf;
-         fs->point_offs = 0;
-       }
-      else
-       {
-         fs->p -= wrote;
-         fs->point_offs -= wrote;
-         memmove (fs->buf, fs->buf + wrote, fs->p - fs->buf);
-         return 0;
-       }
-
-      if ((size_t) (fs->end - fs->buf) < amount)
-       /* Gotta grow the buffer.  */
-       {
-         size_t old_size = fs->end - fs->buf;
-         size_t new_size = old_size + amount;
-         char *new_buf;
-
-         if (new_size < old_size || ! (new_buf = realloc (fs->buf, new_size)))
-           {
-             __set_errno (ENOMEM);
-             return 0;
-           }
-
-         fs->buf = new_buf;
-         fs->end = new_buf + new_size;
-         fs->p = fs->buf;
-       }
-    }
-
-  return 1;
-}
-\f
-ssize_t
-__argp_fmtstream_printf (struct argp_fmtstream *fs, const char *fmt, ...)
-{
-  int out;
-  size_t avail;
-  size_t size_guess = PRINTF_SIZE_GUESS; /* How much space to reserve. */
-
-  do
-    {
-      va_list args;
-
-      if (! __argp_fmtstream_ensure (fs, size_guess))
-       return -1;
-
-      va_start (args, fmt);
-      avail = fs->end - fs->p;
-      out = __vsnprintf (fs->p, avail, fmt, args);
-      va_end (args);
-      if ((size_t) out >= avail)
-       size_guess = out + 1;
-    }
-  while ((size_t) out >= avail);
-
-  fs->p += out;
-
-  return out;
-}
-#if 0
-/* Not exported.  */
-#ifdef weak_alias
-weak_alias (__argp_fmtstream_printf, argp_fmtstream_printf)
-#endif
-#endif
-
-#endif /* !ARGP_FMTSTREAM_USE_LINEWRAP */
diff --git a/lib/argp-fmtstream.h b/lib/argp-fmtstream.h
deleted file mode 100644 (file)
index 73157e0..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-/* Word-wrapping and line-truncating streams.
-   Copyright (C) 1997, 2006-2008 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Written by Miles Bader <miles@gnu.ai.mit.edu>.
-
-   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/>.  */
-
-/* This package emulates glibc `line_wrap_stream' semantics for systems that
-   don't have that.  If the system does have it, it is just a wrapper for
-   that.  This header file is only used internally while compiling argp, and
-   shouldn't be installed.  */
-
-#ifndef _ARGP_FMTSTREAM_H
-#define _ARGP_FMTSTREAM_H
-
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-#ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
-#  define __attribute__(Spec) /* empty */
-# endif
-/* The __-protected variants of `format' and `printf' attributes
-   are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) || __STRICT_ANSI__
-#  define __format__ format
-#  define __printf__ printf
-# endif
-#endif
-
-#if    (_LIBC - 0 && !defined (USE_IN_LIBIO)) \
-    || (defined (__GNU_LIBRARY__) && defined (HAVE_LINEWRAP_H))
-/* line_wrap_stream is available, so use that.  */
-#define ARGP_FMTSTREAM_USE_LINEWRAP
-#endif
-
-#ifdef ARGP_FMTSTREAM_USE_LINEWRAP
-/* Just be a simple wrapper for line_wrap_stream; the semantics are
-   *slightly* different, as line_wrap_stream doesn't actually make a new
-   object, it just modifies the given stream (reversibly) to do
-   line-wrapping.  Since we control who uses this code, it doesn't matter.  */
-
-#include <linewrap.h>
-
-typedef FILE *argp_fmtstream_t;
-
-#define argp_make_fmtstream line_wrap_stream
-#define __argp_make_fmtstream line_wrap_stream
-#define argp_fmtstream_free line_unwrap_stream
-#define __argp_fmtstream_free line_unwrap_stream
-
-#define __argp_fmtstream_putc(fs,ch) putc(ch,fs)
-#define argp_fmtstream_putc(fs,ch) putc(ch,fs)
-#define __argp_fmtstream_puts(fs,str) fputs(str,fs)
-#define argp_fmtstream_puts(fs,str) fputs(str,fs)
-#define __argp_fmtstream_write(fs,str,len) fwrite(str,1,len,fs)
-#define argp_fmtstream_write(fs,str,len) fwrite(str,1,len,fs)
-#define __argp_fmtstream_printf fprintf
-#define argp_fmtstream_printf fprintf
-
-#define __argp_fmtstream_lmargin line_wrap_lmargin
-#define argp_fmtstream_lmargin line_wrap_lmargin
-#define __argp_fmtstream_set_lmargin line_wrap_set_lmargin
-#define argp_fmtstream_set_lmargin line_wrap_set_lmargin
-#define __argp_fmtstream_rmargin line_wrap_rmargin
-#define argp_fmtstream_rmargin line_wrap_rmargin
-#define __argp_fmtstream_set_rmargin line_wrap_set_rmargin
-#define argp_fmtstream_set_rmargin line_wrap_set_rmargin
-#define __argp_fmtstream_wmargin line_wrap_wmargin
-#define argp_fmtstream_wmargin line_wrap_wmargin
-#define __argp_fmtstream_set_wmargin line_wrap_set_wmargin
-#define argp_fmtstream_set_wmargin line_wrap_set_wmargin
-#define __argp_fmtstream_point line_wrap_point
-#define argp_fmtstream_point line_wrap_point
-
-#else /* !ARGP_FMTSTREAM_USE_LINEWRAP */
-/* Guess we have to define our own version.  */
-\f
-struct argp_fmtstream
-{
-  FILE *stream;                        /* The stream we're outputting to.  */
-
-  size_t lmargin, rmargin;     /* Left and right margins.  */
-  ssize_t wmargin;             /* Margin to wrap to, or -1 to truncate.  */
-
-  /* Point in buffer to which we've processed for wrapping, but not output.  */
-  size_t point_offs;
-  /* Output column at POINT_OFFS, or -1 meaning 0 but don't add lmargin.  */
-  ssize_t point_col;
-
-  char *buf;                   /* Output buffer.  */
-  char *p;                     /* Current end of text in BUF. */
-  char *end;                   /* Absolute end of BUF.  */
-};
-
-typedef struct argp_fmtstream *argp_fmtstream_t;
-
-/* Return an argp_fmtstream that outputs to STREAM, and which prefixes lines
-   written on it with LMARGIN spaces and limits them to RMARGIN columns
-   total.  If WMARGIN >= 0, words that extend past RMARGIN are wrapped by
-   replacing the whitespace before them with a newline and WMARGIN spaces.
-   Otherwise, chars beyond RMARGIN are simply dropped until a newline.
-   Returns NULL if there was an error.  */
-extern argp_fmtstream_t __argp_make_fmtstream (FILE *__stream,
-                                              size_t __lmargin,
-                                              size_t __rmargin,
-                                              ssize_t __wmargin);
-extern argp_fmtstream_t argp_make_fmtstream (FILE *__stream,
-                                            size_t __lmargin,
-                                            size_t __rmargin,
-                                            ssize_t __wmargin);
-
-/* Flush __FS to its stream, and free it (but don't close the stream).  */
-extern void __argp_fmtstream_free (argp_fmtstream_t __fs);
-extern void argp_fmtstream_free (argp_fmtstream_t __fs);
-
-extern ssize_t __argp_fmtstream_printf (argp_fmtstream_t __fs,
-                                       const char *__fmt, ...)
-     __attribute__ ((__format__ (printf, 2, 3)));
-extern ssize_t argp_fmtstream_printf (argp_fmtstream_t __fs,
-                                     const char *__fmt, ...)
-     __attribute__ ((__format__ (printf, 2, 3)));
-
-#if _LIBC || !defined __OPTIMIZE__
-extern int __argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch);
-extern int argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch);
-
-extern int __argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str);
-extern int argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str);
-
-extern size_t __argp_fmtstream_write (argp_fmtstream_t __fs,
-                                     const char *__str, size_t __len);
-extern size_t argp_fmtstream_write (argp_fmtstream_t __fs,
-                                   const char *__str, size_t __len);
-#endif
-\f
-/* Access macros for various bits of state.  */
-#define argp_fmtstream_lmargin(__fs) ((__fs)->lmargin)
-#define argp_fmtstream_rmargin(__fs) ((__fs)->rmargin)
-#define argp_fmtstream_wmargin(__fs) ((__fs)->wmargin)
-#define __argp_fmtstream_lmargin argp_fmtstream_lmargin
-#define __argp_fmtstream_rmargin argp_fmtstream_rmargin
-#define __argp_fmtstream_wmargin argp_fmtstream_wmargin
-
-#if _LIBC || !defined __OPTIMIZE__
-/* Set __FS's left margin to LMARGIN and return the old value.  */
-extern size_t argp_fmtstream_set_lmargin (argp_fmtstream_t __fs,
-                                         size_t __lmargin);
-extern size_t __argp_fmtstream_set_lmargin (argp_fmtstream_t __fs,
-                                           size_t __lmargin);
-
-/* Set __FS's right margin to __RMARGIN and return the old value.  */
-extern size_t argp_fmtstream_set_rmargin (argp_fmtstream_t __fs,
-                                         size_t __rmargin);
-extern size_t __argp_fmtstream_set_rmargin (argp_fmtstream_t __fs,
-                                           size_t __rmargin);
-
-/* Set __FS's wrap margin to __WMARGIN and return the old value.  */
-extern size_t argp_fmtstream_set_wmargin (argp_fmtstream_t __fs,
-                                         size_t __wmargin);
-extern size_t __argp_fmtstream_set_wmargin (argp_fmtstream_t __fs,
-                                           size_t __wmargin);
-
-/* Return the column number of the current output point in __FS.  */
-extern size_t argp_fmtstream_point (argp_fmtstream_t __fs);
-extern size_t __argp_fmtstream_point (argp_fmtstream_t __fs);
-#endif
-
-/* Internal routines.  */
-extern void _argp_fmtstream_update (argp_fmtstream_t __fs);
-extern void __argp_fmtstream_update (argp_fmtstream_t __fs);
-extern int _argp_fmtstream_ensure (argp_fmtstream_t __fs, size_t __amount);
-extern int __argp_fmtstream_ensure (argp_fmtstream_t __fs, size_t __amount);
-\f
-#ifdef __OPTIMIZE__
-/* Inline versions of above routines.  */
-
-#if !_LIBC
-#define __argp_fmtstream_putc argp_fmtstream_putc
-#define __argp_fmtstream_puts argp_fmtstream_puts
-#define __argp_fmtstream_write argp_fmtstream_write
-#define __argp_fmtstream_set_lmargin argp_fmtstream_set_lmargin
-#define __argp_fmtstream_set_rmargin argp_fmtstream_set_rmargin
-#define __argp_fmtstream_set_wmargin argp_fmtstream_set_wmargin
-#define __argp_fmtstream_point argp_fmtstream_point
-#define __argp_fmtstream_update _argp_fmtstream_update
-#define __argp_fmtstream_ensure _argp_fmtstream_ensure
-#endif
-
-#ifndef ARGP_FS_EI
-# ifdef __GNUC__
-   /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
-      inline semantics, unless -fgnu89-inline is used.  It defines a macro
-      __GNUC_STDC_INLINE__ to indicate this situation or a macro
-      __GNUC_GNU_INLINE__ to indicate the opposite situation.
-
-      GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline
-      semantics but warns, unless -fgnu89-inline is used:
-        warning: C99 inline functions are not supported; using GNU89
-        warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute
-      It defines a macro __GNUC_GNU_INLINE__ to indicate this situation.
-
-      Whereas Apple GCC 4.0.1 build 5479 without -std=c99 or -std=gnu99
-      implements the GNU C inline semantics and defines the macro
-      __GNUC_GNU_INLINE__, but it does not warn and does not support
-      __attribute__ ((__gnu_inline__)).
-
-      All in all, these are the possible combinations.  For every compiler,
-      we need to choose ARGP_FS_EI so that the corresponding table cell
-      contains an "ok".
-
-        \    ARGP_FS_EI                      inline   extern    extern
-          \                                           inline    inline
-      CC    \                                                   __attribute__
-                                                                ((gnu_inline))
-
-      gcc 4.3.0                              error    ok        ok
-      gcc 4.3.0 -std=gnu99 -fgnu89-inline    error    ok        ok
-      gcc 4.3.0 -std=gnu99                   ok       error     ok
-
-      gcc 4.2.2                              error    ok        ok
-      gcc 4.2.2 -std=gnu99 -fgnu89-inline    error    ok        ok
-      gcc 4.2.2 -std=gnu99                   error    warning   ok
-
-      gcc 4.1.2                              error    ok        warning
-      gcc 4.1.2 -std=gnu99                   error    ok        warning
-
-      Apple gcc 4.0.1                        error    ok        warning
-      Apple gcc 4.0.1 -std=gnu99             ok       error     warning
-    */
-#  if defined __GNUC_STDC_INLINE__
-#   define ARGP_FS_EI inline
-#  elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
-#   define ARGP_FS_EI extern inline __attribute__ ((__gnu_inline__))
-#  else
-#   define ARGP_FS_EI extern inline
-#  endif
-# else
-   /* With other compilers, assume the ISO C99 meaning of 'inline', if
-      the compiler supports 'inline' at all.  */
-#  define ARGP_FS_EI inline
-# endif
-#endif
-
-ARGP_FS_EI size_t
-__argp_fmtstream_write (argp_fmtstream_t __fs,
-                       const char *__str, size_t __len)
-{
-  if (__fs->p + __len <= __fs->end || __argp_fmtstream_ensure (__fs, __len))
-    {
-      memcpy (__fs->p, __str, __len);
-      __fs->p += __len;
-      return __len;
-    }
-  else
-    return 0;
-}
-
-ARGP_FS_EI int
-__argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str)
-{
-  size_t __len = strlen (__str);
-  if (__len)
-    {
-      size_t __wrote = __argp_fmtstream_write (__fs, __str, __len);
-      return __wrote == __len ? 0 : -1;
-    }
-  else
-    return 0;
-}
-
-ARGP_FS_EI int
-__argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch)
-{
-  if (__fs->p < __fs->end || __argp_fmtstream_ensure (__fs, 1))
-    return *__fs->p++ = __ch;
-  else
-    return EOF;
-}
-
-/* Set __FS's left margin to __LMARGIN and return the old value.  */
-ARGP_FS_EI size_t
-__argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, size_t __lmargin)
-{
-  size_t __old;
-  if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs)
-    __argp_fmtstream_update (__fs);
-  __old = __fs->lmargin;
-  __fs->lmargin = __lmargin;
-  return __old;
-}
-
-/* Set __FS's right margin to __RMARGIN and return the old value.  */
-ARGP_FS_EI size_t
-__argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, size_t __rmargin)
-{
-  size_t __old;
-  if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs)
-    __argp_fmtstream_update (__fs);
-  __old = __fs->rmargin;
-  __fs->rmargin = __rmargin;
-  return __old;
-}
-
-/* Set FS's wrap margin to __WMARGIN and return the old value.  */
-ARGP_FS_EI size_t
-__argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, size_t __wmargin)
-{
-  size_t __old;
-  if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs)
-    __argp_fmtstream_update (__fs);
-  __old = __fs->wmargin;
-  __fs->wmargin = __wmargin;
-  return __old;
-}
-
-/* Return the column number of the current output point in __FS.  */
-ARGP_FS_EI size_t
-__argp_fmtstream_point (argp_fmtstream_t __fs)
-{
-  if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs)
-    __argp_fmtstream_update (__fs);
-  return __fs->point_col >= 0 ? __fs->point_col : 0;
-}
-
-#if !_LIBC
-#undef __argp_fmtstream_putc
-#undef __argp_fmtstream_puts
-#undef __argp_fmtstream_write
-#undef __argp_fmtstream_set_lmargin
-#undef __argp_fmtstream_set_rmargin
-#undef __argp_fmtstream_set_wmargin
-#undef __argp_fmtstream_point
-#undef __argp_fmtstream_update
-#undef __argp_fmtstream_ensure
-#endif
-
-#endif /* __OPTIMIZE__ */
-
-#endif /* ARGP_FMTSTREAM_USE_LINEWRAP */
-
-#endif /* argp-fmtstream.h */
diff --git a/lib/argp-fs-xinl.c b/lib/argp-fs-xinl.c
deleted file mode 100644 (file)
index af4f085..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Real definitions for extern inline functions in argp-fmtstream.h
-   Copyright (C) 1997, 2003, 2004 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Written by Miles Bader <miles@gnu.ai.mit.edu>.
-
-   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/>.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define ARGP_FS_EI
-#undef __OPTIMIZE__
-#define __OPTIMIZE__ 1
-#include "argp-fmtstream.h"
-
-#if 0
-/* Not exported.  */
-/* Add weak aliases.  */
-#if _LIBC - 0 && !defined (ARGP_FMTSTREAM_USE_LINEWRAP) && defined (weak_alias)
-
-weak_alias (__argp_fmtstream_putc, argp_fmtstream_putc)
-weak_alias (__argp_fmtstream_puts, argp_fmtstream_puts)
-weak_alias (__argp_fmtstream_write, argp_fmtstream_write)
-weak_alias (__argp_fmtstream_set_lmargin, argp_fmtstream_set_lmargin)
-weak_alias (__argp_fmtstream_set_rmargin, argp_fmtstream_set_rmargin)
-weak_alias (__argp_fmtstream_set_wmargin, argp_fmtstream_set_wmargin)
-weak_alias (__argp_fmtstream_point, argp_fmtstream_point)
-
-#endif
-#endif
diff --git a/lib/argp-help.c b/lib/argp-help.c
deleted file mode 100644 (file)
index a9843c0..0000000
+++ /dev/null
@@ -1,1953 +0,0 @@
-/* Hierarchial argument parsing help output
-   Copyright (C) 1995-2005, 2007 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Written by Miles Bader <miles@gnu.ai.mit.edu>.
-
-   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 _GNU_SOURCE
-# define _GNU_SOURCE   1
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <alloca.h>
-#include <errno.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <stdarg.h>
-#include <ctype.h>
-#include <limits.h>
-#ifdef USE_IN_LIBIO
-# include <wchar.h>
-#endif
-
-#ifdef _LIBC
-# include <libintl.h>
-# undef dgettext
-# define dgettext(domain, msgid) \
-   INTUSE(__dcgettext) (domain, msgid, LC_MESSAGES)
-#else
-# include "gettext.h"
-#endif
-
-#include "argp.h"
-#include "argp-fmtstream.h"
-#include "argp-namefrob.h"
-
-#ifndef SIZE_MAX
-# define SIZE_MAX ((size_t) -1)
-#endif
-\f
-/* User-selectable (using an environment variable) formatting parameters.
-
-   These may be specified in an environment variable called `ARGP_HELP_FMT',
-   with a contents like:  VAR1=VAL1,VAR2=VAL2,BOOLVAR2,no-BOOLVAR2
-   Where VALn must be a positive integer.  The list of variables is in the
-   UPARAM_NAMES vector, below.  */
-
-/* Default parameters.  */
-#define DUP_ARGS      0                /* True if option argument can be duplicated. */
-#define DUP_ARGS_NOTE 1                /* True to print a note about duplicate args. */
-#define SHORT_OPT_COL 2                /* column in which short options start */
-#define LONG_OPT_COL  6                /* column in which long options start */
-#define DOC_OPT_COL   2                /* column in which doc options start */
-#define OPT_DOC_COL  29                /* column in which option text starts */
-#define HEADER_COL    1                /* column in which group headers are printed */
-#define USAGE_INDENT 12                /* indentation of wrapped usage lines */
-#define RMARGIN      79                /* right margin used for wrapping */
-
-/* User-selectable (using an environment variable) formatting parameters.
-   They must all be of type `int' for the parsing code to work.  */
-struct uparams
-{
-  /* If true, arguments for an option are shown with both short and long
-     options, even when a given option has both, e.g. `-x ARG, --longx=ARG'.
-     If false, then if an option has both, the argument is only shown with
-     the long one, e.g., `-x, --longx=ARG', and a message indicating that
-     this really means both is printed below the options.  */
-  int dup_args;
-
-  /* This is true if when DUP_ARGS is false, and some duplicate arguments have
-     been suppressed, an explanatory message should be printed.  */
-  int dup_args_note;
-
-  /* Various output columns.  */
-  int short_opt_col;      /* column in which short options start */
-  int long_opt_col;       /* column in which long options start */
-  int doc_opt_col;        /* column in which doc options start */
-  int opt_doc_col;        /* column in which option text starts */
-  int header_col;         /* column in which group headers are printed */
-  int usage_indent;       /* indentation of wrapped usage lines */
-  int rmargin;            /* right margin used for wrapping */
-
-  int valid;             /* True when the values in here are valid.  */
-};
-
-/* This is a global variable, as user options are only ever read once.  */
-static struct uparams uparams = {
-  DUP_ARGS, DUP_ARGS_NOTE,
-  SHORT_OPT_COL, LONG_OPT_COL, DOC_OPT_COL, OPT_DOC_COL, HEADER_COL,
-  USAGE_INDENT, RMARGIN,
-  0
-};
-
-/* A particular uparam, and what the user name is.  */
-struct uparam_name
-{
-  const char *name;            /* User name.  */
-  int is_bool;                 /* Whether it's `boolean'.  */
-  size_t uparams_offs;         /* Location of the (int) field in UPARAMS.  */
-};
-
-/* The name-field mappings we know about.  */
-static const struct uparam_name uparam_names[] =
-{
-  { "dup-args",       1, offsetof (struct uparams, dup_args) },
-  { "dup-args-note",  1, offsetof (struct uparams, dup_args_note) },
-  { "short-opt-col",  0, offsetof (struct uparams, short_opt_col) },
-  { "long-opt-col",   0, offsetof (struct uparams, long_opt_col) },
-  { "doc-opt-col",    0, offsetof (struct uparams, doc_opt_col) },
-  { "opt-doc-col",    0, offsetof (struct uparams, opt_doc_col) },
-  { "header-col",     0, offsetof (struct uparams, header_col) },
-  { "usage-indent",   0, offsetof (struct uparams, usage_indent) },
-  { "rmargin",        0, offsetof (struct uparams, rmargin) },
-  { 0 }
-};
-
-static void
-validate_uparams (const struct argp_state *state, struct uparams *upptr)
-{
-  const struct uparam_name *up;
-
-  for (up = uparam_names; up->name; up++)
-    {
-      if (up->is_bool
-         || up->uparams_offs == offsetof (struct uparams, rmargin))
-       continue;
-      if (*(int *)((char *)upptr + up->uparams_offs) >= upptr->rmargin)
-       {
-         __argp_failure (state, 0, 0,
-                         dgettext (state->root_argp->argp_domain,
-                                   "\
-ARGP_HELP_FMT: %s value is less than or equal to %s"),
-                         "rmargin", up->name);
-         return;
-       }
-    }
-  uparams = *upptr;
-  uparams.valid = 1;
-}
-
-/* Read user options from the environment, and fill in UPARAMS appropiately. */
-static void
-fill_in_uparams (const struct argp_state *state)
-{
-  const char *var = getenv ("ARGP_HELP_FMT");
-  struct uparams new_params = uparams;
-
-#define SKIPWS(p) do { while (isspace ((unsigned char) *p)) p++; } while (0);
-
-  if (var)
-    {
-      /* Parse var. */
-      while (*var)
-       {
-         SKIPWS (var);
-
-         if (isalpha ((unsigned char) *var))
-           {
-             size_t var_len;
-             const struct uparam_name *un;
-             int unspec = 0, val = 0;
-             const char *arg = var;
-
-             while (isalnum ((unsigned char) *arg) || *arg == '-' || *arg == '_')
-               arg++;
-             var_len = arg - var;
-
-             SKIPWS (arg);
-
-             if (*arg == '\0' || *arg == ',')
-               unspec = 1;
-             else if (*arg == '=')
-               {
-                 arg++;
-                 SKIPWS (arg);
-               }
-
-             if (unspec)
-               {
-                 if (var[0] == 'n' && var[1] == 'o' && var[2] == '-')
-                   {
-                     val = 0;
-                     var += 3;
-                     var_len -= 3;
-                   }
-                 else
-                   val = 1;
-               }
-             else if (isdigit ((unsigned char) *arg))
-               {
-                 val = atoi (arg);
-                 while (isdigit ((unsigned char) *arg))
-                   arg++;
-                 SKIPWS (arg);
-               }
-
-             for (un = uparam_names; un->name; un++)
-               if (strlen (un->name) == var_len
-                   && strncmp (var, un->name, var_len) == 0)
-                 {
-                   if (unspec && !un->is_bool)
-                     __argp_failure (state, 0, 0,
-                                     dgettext (state->root_argp->argp_domain,
-                                               "\
-%.*s: ARGP_HELP_FMT parameter requires a value"),
-                                     (int) var_len, var);
-                   else if (val < 0)
-                     __argp_failure (state, 0, 0,
-                                     dgettext (state->root_argp->argp_domain,
-                                               "\
-%.*s: ARGP_HELP_FMT parameter must be positive"),
-                                     (int) var_len, var);
-                   else
-                     *(int *)((char *)&new_params + un->uparams_offs) = val;
-                   break;
-                 }
-             if (! un->name)
-               __argp_failure (state, 0, 0,
-                               dgettext (state->root_argp->argp_domain, "\
-%.*s: Unknown ARGP_HELP_FMT parameter"),
-                               (int) var_len, var);
-
-             var = arg;
-             if (*var == ',')
-               var++;
-           }
-         else if (*var)
-           {
-             __argp_failure (state, 0, 0,
-                             dgettext (state->root_argp->argp_domain,
-                                       "Garbage in ARGP_HELP_FMT: %s"), var);
-             break;
-           }
-       }
-      validate_uparams (state, &new_params);
-    }
-}
-\f
-/* Returns true if OPT hasn't been marked invisible.  Visibility only affects
-   whether OPT is displayed or used in sorting, not option shadowing.  */
-#define ovisible(opt) (! ((opt)->flags & OPTION_HIDDEN))
-
-/* Returns true if OPT is an alias for an earlier option.  */
-#define oalias(opt) ((opt)->flags & OPTION_ALIAS)
-
-/* Returns true if OPT is an documentation-only entry.  */
-#define odoc(opt) ((opt)->flags & OPTION_DOC)
-
-/* Returns true if OPT should not be translated */
-#define onotrans(opt) ((opt)->flags & OPTION_NO_TRANS)
-
-/* Returns true if OPT is the end-of-list marker for a list of options.  */
-#define oend(opt) __option_is_end (opt)
-
-/* Returns true if OPT has a short option.  */
-#define oshort(opt) __option_is_short (opt)
-\f
-/*
-   The help format for a particular option is like:
-
-     -xARG, -yARG, --long1=ARG, --long2=ARG        Documentation...
-
-   Where ARG will be omitted if there's no argument, for this option, or
-   will be surrounded by "[" and "]" appropiately if the argument is
-   optional.  The documentation string is word-wrapped appropiately, and if
-   the list of options is long enough, it will be started on a separate line.
-   If there are no short options for a given option, the first long option is
-   indented slighly in a way that's supposed to make most long options appear
-   to be in a separate column.
-
-   For example, the following output (from ps):
-
-     -p PID, --pid=PID          List the process PID
-        --pgrp=PGRP            List processes in the process group PGRP
-     -P, -x, --no-parent        Include processes without parents
-     -Q, --all-fields           Don't elide unusable fields (normally if there's
-                               some reason ps can't print a field for any
-                               process, it's removed from the output entirely)
-     -r, --reverse, --gratuitously-long-reverse-option
-                               Reverse the order of any sort
-        --session[=SID]        Add the processes from the session SID (which
-                               defaults to the sid of the current process)
-
-    Here are some more options:
-     -f ZOT, --foonly=ZOT       Glork a foonly
-     -z, --zaza                 Snit a zar
-
-     -?, --help                 Give this help list
-        --usage                Give a short usage message
-     -V, --version              Print program version
-
-   The struct argp_option array for the above could look like:
-
-   {
-     {"pid",       'p',      "PID",  0, "List the process PID"},
-     {"pgrp",      OPT_PGRP, "PGRP", 0, "List processes in the process group PGRP"},
-     {"no-parent", 'P',              0,     0, "Include processes without parents"},
-     {0,           'x',       0,     OPTION_ALIAS},
-     {"all-fields",'Q',       0,     0, "Don't elide unusable fields (normally"
-                                        " if there's some reason ps can't"
-                                       " print a field for any process, it's"
-                                        " removed from the output entirely)" },
-     {"reverse",   'r',       0,     0, "Reverse the order of any sort"},
-     {"gratuitously-long-reverse-option", 0, 0, OPTION_ALIAS},
-     {"session",   OPT_SESS,  "SID", OPTION_ARG_OPTIONAL,
-                                        "Add the processes from the session"
-                                       " SID (which defaults to the sid of"
-                                       " the current process)" },
-
-     {0,0,0,0, "Here are some more options:"},
-     {"foonly", 'f', "ZOT", 0, "Glork a foonly"},
-     {"zaza", 'z', 0, 0, "Snit a zar"},
-
-     {0}
-   }
-
-   Note that the last three options are automatically supplied by argp_parse,
-   unless you tell it not to with ARGP_NO_HELP.
-
-*/
-\f
-/* Returns true if CH occurs between BEG and END.  */
-static int
-find_char (char ch, char *beg, char *end)
-{
-  while (beg < end)
-    if (*beg == ch)
-      return 1;
-    else
-      beg++;
-  return 0;
-}
-\f
-struct hol_cluster;            /* fwd decl */
-
-struct hol_entry
-{
-  /* First option.  */
-  const struct argp_option *opt;
-  /* Number of options (including aliases).  */
-  unsigned num;
-
-  /* A pointers into the HOL's short_options field, to the first short option
-     letter for this entry.  The order of the characters following this point
-     corresponds to the order of options pointed to by OPT, and there are at
-     most NUM.  A short option recorded in a option following OPT is only
-     valid if it occurs in the right place in SHORT_OPTIONS (otherwise it's
-     probably been shadowed by some other entry).  */
-  char *short_options;
-
-  /* Entries are sorted by their group first, in the order:
-       1, 2, ..., n, 0, -m, ..., -2, -1
-     and then alphabetically within each group.  The default is 0.  */
-  int group;
-
-  /* The cluster of options this entry belongs to, or 0 if none.  */
-  struct hol_cluster *cluster;
-
-  /* The argp from which this option came.  */
-  const struct argp *argp;
-
-  /* Position in the array */
-  unsigned ord;
-};
-
-/* A cluster of entries to reflect the argp tree structure.  */
-struct hol_cluster
-{
-  /* A descriptive header printed before options in this cluster.  */
-  const char *header;
-
-  /* Used to order clusters within the same group with the same parent,
-     according to the order in which they occurred in the parent argp's child
-     list.  */
-  int index;
-
-  /* How to sort this cluster with respect to options and other clusters at the
-     same depth (clusters always follow options in the same group).  */
-  int group;
-
-  /* The cluster to which this cluster belongs, or 0 if it's at the base
-     level.  */
-  struct hol_cluster *parent;
-
-  /* The argp from which this cluster is (eventually) derived.  */
-  const struct argp *argp;
-
-  /* The distance this cluster is from the root.  */
-  int depth;
-
-  /* Clusters in a given hol are kept in a linked list, to make freeing them
-     possible.  */
-  struct hol_cluster *next;
-};
-
-/* A list of options for help.  */
-struct hol
-{
-  /* An array of hol_entry's.  */
-  struct hol_entry *entries;
-  /* The number of entries in this hol.  If this field is zero, the others
-     are undefined.  */
-  unsigned num_entries;
-
-  /* A string containing all short options in this HOL.  Each entry contains
-     pointers into this string, so the order can't be messed with blindly.  */
-  char *short_options;
-
-  /* Clusters of entries in this hol.  */
-  struct hol_cluster *clusters;
-};
-\f
-/* Create a struct hol from the options in ARGP.  CLUSTER is the
-   hol_cluster in which these entries occur, or 0, if at the root.  */
-static struct hol *
-make_hol (const struct argp *argp, struct hol_cluster *cluster)
-{
-  char *so;
-  const struct argp_option *o;
-  const struct argp_option *opts = argp->options;
-  struct hol_entry *entry;
-  unsigned num_short_options = 0;
-  struct hol *hol = malloc (sizeof (struct hol));
-
-  assert (hol);
-
-  hol->num_entries = 0;
-  hol->clusters = 0;
-
-  if (opts)
-    {
-      int cur_group = 0;
-
-      /* The first option must not be an alias.  */
-      assert (! oalias (opts));
-
-      /* Calculate the space needed.  */
-      for (o = opts; ! oend (o); o++)
-       {
-         if (! oalias (o))
-           hol->num_entries++;
-         if (oshort (o))
-           num_short_options++;        /* This is an upper bound.  */
-       }
-
-      hol->entries = malloc (sizeof (struct hol_entry) * hol->num_entries);
-      hol->short_options = malloc (num_short_options + 1);
-
-      assert (hol->entries && hol->short_options);
-      if (SIZE_MAX <= UINT_MAX)
-       assert (hol->num_entries <= SIZE_MAX / sizeof (struct hol_entry));
-
-      /* Fill in the entries.  */
-      so = hol->short_options;
-      for (o = opts, entry = hol->entries; ! oend (o); entry++)
-       {
-         entry->opt = o;
-         entry->num = 0;
-         entry->short_options = so;
-         entry->group = cur_group =
-           o->group
-           ? o->group
-           : ((!o->name && !o->key)
-              ? cur_group + 1
-              : cur_group);
-         entry->cluster = cluster;
-         entry->argp = argp;
-
-         do
-           {
-             entry->num++;
-             if (oshort (o) && ! find_char (o->key, hol->short_options, so))
-               /* O has a valid short option which hasn't already been used.*/
-               *so++ = o->key;
-             o++;
-           }
-         while (! oend (o) && oalias (o));
-       }
-      *so = '\0';              /* null terminated so we can find the length */
-    }
-
-  return hol;
-}
-\f
-/* Add a new cluster to HOL, with the given GROUP and HEADER (taken from the
-   associated argp child list entry), INDEX, and PARENT, and return a pointer
-   to it.  ARGP is the argp that this cluster results from.  */
-static struct hol_cluster *
-hol_add_cluster (struct hol *hol, int group, const char *header, int index,
-                struct hol_cluster *parent, const struct argp *argp)
-{
-  struct hol_cluster *cl = malloc (sizeof (struct hol_cluster));
-  if (cl)
-    {
-      cl->group = group;
-      cl->header = header;
-
-      cl->index = index;
-      cl->parent = parent;
-      cl->argp = argp;
-      cl->depth = parent ? parent->depth + 1 : 0;
-
-      cl->next = hol->clusters;
-      hol->clusters = cl;
-    }
-  return cl;
-}
-\f
-/* Free HOL and any resources it uses.  */
-static void
-hol_free (struct hol *hol)
-{
-  struct hol_cluster *cl = hol->clusters;
-
-  while (cl)
-    {
-      struct hol_cluster *next = cl->next;
-      free (cl);
-      cl = next;
-    }
-
-  if (hol->num_entries > 0)
-    {
-      free (hol->entries);
-      free (hol->short_options);
-    }
-
-  free (hol);
-}
-\f
-static int
-hol_entry_short_iterate (const struct hol_entry *entry,
-                        int (*func)(const struct argp_option *opt,
-                                    const struct argp_option *real,
-                                    const char *domain, void *cookie),
-                        const char *domain, void *cookie)
-{
-  unsigned nopts;
-  int val = 0;
-  const struct argp_option *opt, *real = entry->opt;
-  char *so = entry->short_options;
-
-  for (opt = real, nopts = entry->num; nopts > 0 && !val; opt++, nopts--)
-    if (oshort (opt) && *so == opt->key)
-      {
-       if (!oalias (opt))
-         real = opt;
-       if (ovisible (opt))
-         val = (*func)(opt, real, domain, cookie);
-       so++;
-      }
-
-  return val;
-}
-
-static inline int
-__attribute__ ((always_inline))
-hol_entry_long_iterate (const struct hol_entry *entry,
-                       int (*func)(const struct argp_option *opt,
-                                   const struct argp_option *real,
-                                   const char *domain, void *cookie),
-                       const char *domain, void *cookie)
-{
-  unsigned nopts;
-  int val = 0;
-  const struct argp_option *opt, *real = entry->opt;
-
-  for (opt = real, nopts = entry->num; nopts > 0 && !val; opt++, nopts--)
-    if (opt->name)
-      {
-       if (!oalias (opt))
-         real = opt;
-       if (ovisible (opt))
-         val = (*func)(opt, real, domain, cookie);
-      }
-
-  return val;
-}
-\f
-/* Iterator that returns true for the first short option.  */
-static int
-until_short (const struct argp_option *opt, const struct argp_option *real,
-            const char *domain, void *cookie)
-{
-  return oshort (opt) ? opt->key : 0;
-}
-
-/* Returns the first valid short option in ENTRY, or 0 if there is none.  */
-static char
-hol_entry_first_short (const struct hol_entry *entry)
-{
-  return hol_entry_short_iterate (entry, until_short,
-                                 entry->argp->argp_domain, 0);
-}
-
-/* Returns the first valid long option in ENTRY, or 0 if there is none.  */
-static const char *
-hol_entry_first_long (const struct hol_entry *entry)
-{
-  const struct argp_option *opt;
-  unsigned num;
-  for (opt = entry->opt, num = entry->num; num > 0; opt++, num--)
-    if (opt->name && ovisible (opt))
-      return opt->name;
-  return 0;
-}
-
-/* Returns the entry in HOL with the long option name NAME, or 0 if there is
-   none.  */
-static struct hol_entry *
-hol_find_entry (struct hol *hol, const char *name)
-{
-  struct hol_entry *entry = hol->entries;
-  unsigned num_entries = hol->num_entries;
-
-  while (num_entries-- > 0)
-    {
-      const struct argp_option *opt = entry->opt;
-      unsigned num_opts = entry->num;
-
-      while (num_opts-- > 0)
-       if (opt->name && ovisible (opt) && strcmp (opt->name, name) == 0)
-         return entry;
-       else
-         opt++;
-
-      entry++;
-    }
-
-  return 0;
-}
-\f
-/* If an entry with the long option NAME occurs in HOL, set it's special
-   sort position to GROUP.  */
-static void
-hol_set_group (struct hol *hol, const char *name, int group)
-{
-  struct hol_entry *entry = hol_find_entry (hol, name);
-  if (entry)
-    entry->group = group;
-}
-\f
-/* Order by group:  0, 1, 2, ..., n, -m, ..., -2, -1.
-   EQ is what to return if GROUP1 and GROUP2 are the same.  */
-static int
-group_cmp (int group1, int group2, int eq)
-{
-  if (group1 == group2)
-    return eq;
-  else if ((group1 < 0 && group2 < 0) || (group1 >= 0 && group2 >= 0))
-    return group1 - group2;
-  else
-    return group2 - group1;
-}
-
-/* Compare clusters CL1 & CL2 by the order that they should appear in
-   output.  */
-static int
-hol_cluster_cmp (const struct hol_cluster *cl1, const struct hol_cluster *cl2)
-{
-  /* If one cluster is deeper than the other, use its ancestor at the same
-     level, so that finding the common ancestor is straightforward.
-
-     clN->depth > 0 means that clN->parent != NULL (see hol_add_cluster) */
-  while (cl1->depth > cl2->depth)
-    cl1 = cl1->parent;
-  while (cl2->depth > cl1->depth)
-    cl2 = cl2->parent;
-
-  /* Now reduce both clusters to their ancestors at the point where both have
-     a common parent; these can be directly compared.  */
-  while (cl1->parent != cl2->parent)
-    cl1 = cl1->parent, cl2 = cl2->parent;
-
-  return group_cmp (cl1->group, cl2->group, cl2->index - cl1->index);
-}
-
-/* Return the ancestor of CL that's just below the root (i.e., has a parent
-   of 0).  */
-static struct hol_cluster *
-hol_cluster_base (struct hol_cluster *cl)
-{
-  while (cl->parent)
-    cl = cl->parent;
-  return cl;
-}
-
-/* Return true if CL1 is a child of CL2.  */
-static int
-hol_cluster_is_child (const struct hol_cluster *cl1,
-                     const struct hol_cluster *cl2)
-{
-  while (cl1 && cl1 != cl2)
-    cl1 = cl1->parent;
-  return cl1 == cl2;
-}
-\f
-/* Given the name of a OPTION_DOC option, modifies NAME to start at the tail
-   that should be used for comparisons, and returns true iff it should be
-   treated as a non-option.  */
-static int
-canon_doc_option (const char **name)
-{
-  int non_opt;
-
-  if (!*name)
-    non_opt = 1;
-  else
-    {
-      /* Skip initial whitespace.  */
-      while (isspace ((unsigned char) **name))
-       (*name)++;
-      /* Decide whether this looks like an option (leading `-') or not.  */
-      non_opt = (**name != '-');
-      /* Skip until part of name used for sorting.  */
-      while (**name && !isalnum ((unsigned char) **name))
-       (*name)++;
-    }
-  return non_opt;
-}
-
-#define HOL_ENTRY_PTRCMP(a,b) ((a)->ord < (b)->ord ? -1 : 1)
-
-/* Order ENTRY1 & ENTRY2 by the order which they should appear in a help
-   listing.  */
-static int
-hol_entry_cmp (const struct hol_entry *entry1,
-              const struct hol_entry *entry2)
-{
-  /* The group numbers by which the entries should be ordered; if either is
-     in a cluster, then this is just the group within the cluster.  */
-  int group1 = entry1->group, group2 = entry2->group;
-  int rc;
-
-  if (entry1->cluster != entry2->cluster)
-    {
-      /* The entries are not within the same cluster, so we can't compare them
-        directly, we have to use the appropiate clustering level too.  */
-      if (! entry1->cluster)
-       /* ENTRY1 is at the `base level', not in a cluster, so we have to
-          compare it's group number with that of the base cluster in which
-          ENTRY2 resides.  Note that if they're in the same group, the
-          clustered option always comes laster.  */
-       return group_cmp (group1, hol_cluster_base (entry2->cluster)->group, -1);
-      else if (! entry2->cluster)
-       /* Likewise, but ENTRY2's not in a cluster.  */
-       return group_cmp (hol_cluster_base (entry1->cluster)->group, group2, 1);
-      else
-       /* Both entries are in clusters, we can just compare the clusters.  */
-       return (rc = hol_cluster_cmp (entry1->cluster, entry2->cluster)) ?
-               rc : HOL_ENTRY_PTRCMP(entry1, entry2);
-    }
-  else if (group1 == group2)
-    /* The entries are both in the same cluster and group, so compare them
-       alphabetically.  */
-    {
-      int short1 = hol_entry_first_short (entry1);
-      int short2 = hol_entry_first_short (entry2);
-      int doc1 = odoc (entry1->opt);
-      int doc2 = odoc (entry2->opt);
-      const char *long1 = hol_entry_first_long (entry1);
-      const char *long2 = hol_entry_first_long (entry2);
-
-      if (doc1)
-       doc1 = canon_doc_option (&long1);
-      if (doc2)
-       doc2 = canon_doc_option (&long2);
-
-      if (doc1 != doc2)
-       /* `documentation' options always follow normal options (or
-          documentation options that *look* like normal options).  */
-       return doc1 - doc2;
-      else if (!short1 && !short2 && long1 && long2)
-       /* Only long options.  */
-       return (rc = __strcasecmp (long1, long2)) ?
-                 rc : HOL_ENTRY_PTRCMP(entry1, entry2);
-      else
-       /* Compare short/short, long/short, short/long, using the first
-          character of long options.  Entries without *any* valid
-          options (such as options with OPTION_HIDDEN set) will be put
-          first, but as they're not displayed, it doesn't matter where
-          they are.  */
-       {
-         char first1 = short1 ? short1 : long1 ? *long1 : 0;
-         char first2 = short2 ? short2 : long2 ? *long2 : 0;
-#ifdef _tolower
-         int lower_cmp = _tolower (first1) - _tolower (first2);
-#else
-         int lower_cmp = tolower (first1) - tolower (first2);
-#endif
-         /* Compare ignoring case, except when the options are both the
-            same letter, in which case lower-case always comes first.  */
-         return lower_cmp ? lower_cmp :
-                    (rc = first2 - first1) ?
-                    rc : HOL_ENTRY_PTRCMP(entry1, entry2);
-       }
-    }
-  else
-    /* Within the same cluster, but not the same group, so just compare
-       groups.  */
-    return group_cmp (group1, group2, HOL_ENTRY_PTRCMP(entry1, entry2));
-}
-
-/* Version of hol_entry_cmp with correct signature for qsort.  */
-static int
-hol_entry_qcmp (const void *entry1_v, const void *entry2_v)
-{
-  return hol_entry_cmp (entry1_v, entry2_v);
-}
-
-/* Sort HOL by group and alphabetically by option name (with short options
-   taking precedence over long).  Since the sorting is for display purposes
-   only, the shadowing of options isn't effected.  */
-static void
-hol_sort (struct hol *hol)
-{
-  if (hol->num_entries > 0)
-    {
-      unsigned i;
-      struct hol_entry *e;
-      for (i = 0, e = hol->entries; i < hol->num_entries; i++, e++)
-       e->ord = i;
-      qsort (hol->entries, hol->num_entries, sizeof (struct hol_entry),
-            hol_entry_qcmp);
-    }
-}
-\f
-/* Append MORE to HOL, destroying MORE in the process.  Options in HOL shadow
-   any in MORE with the same name.  */
-static void
-hol_append (struct hol *hol, struct hol *more)
-{
-  struct hol_cluster **cl_end = &hol->clusters;
-
-  /* Steal MORE's cluster list, and add it to the end of HOL's.  */
-  while (*cl_end)
-    cl_end = &(*cl_end)->next;
-  *cl_end = more->clusters;
-  more->clusters = 0;
-
-  /* Merge entries.  */
-  if (more->num_entries > 0)
-    {
-      if (hol->num_entries == 0)
-       {
-         hol->num_entries = more->num_entries;
-         hol->entries = more->entries;
-         hol->short_options = more->short_options;
-         more->num_entries = 0;        /* Mark MORE's fields as invalid.  */
-       }
-      else
-       /* Append the entries in MORE to those in HOL, taking care to only add
-          non-shadowed SHORT_OPTIONS values.  */
-       {
-         unsigned left;
-         char *so, *more_so;
-         struct hol_entry *e;
-         unsigned num_entries = hol->num_entries + more->num_entries;
-         struct hol_entry *entries =
-           malloc (num_entries * sizeof (struct hol_entry));
-         unsigned hol_so_len = strlen (hol->short_options);
-         char *short_options =
-           malloc (hol_so_len + strlen (more->short_options) + 1);
-
-         assert (entries && short_options);
-         if (SIZE_MAX <= UINT_MAX)
-           assert (num_entries <= SIZE_MAX / sizeof (struct hol_entry));
-
-         __mempcpy (__mempcpy (entries, hol->entries,
-                               hol->num_entries * sizeof (struct hol_entry)),
-                    more->entries,
-                    more->num_entries * sizeof (struct hol_entry));
-
-         __mempcpy (short_options, hol->short_options, hol_so_len);
-
-         /* Fix up the short options pointers from HOL.  */
-         for (e = entries, left = hol->num_entries; left > 0; e++, left--)
-           e->short_options += (short_options - hol->short_options);
-
-         /* Now add the short options from MORE, fixing up its entries
-            too.  */
-         so = short_options + hol_so_len;
-         more_so = more->short_options;
-         for (left = more->num_entries; left > 0; e++, left--)
-           {
-             int opts_left;
-             const struct argp_option *opt;
-
-             e->short_options = so;
-
-             for (opts_left = e->num, opt = e->opt; opts_left; opt++, opts_left--)
-               {
-                 int ch = *more_so;
-                 if (oshort (opt) && ch == opt->key)
-                   /* The next short option in MORE_SO, CH, is from OPT.  */
-                   {
-                     if (! find_char (ch, short_options,
-                                      short_options + hol_so_len))
-                       /* The short option CH isn't shadowed by HOL's options,
-                          so add it to the sum.  */
-                       *so++ = ch;
-                     more_so++;
-                   }
-               }
-           }
-
-         *so = '\0';
-
-         free (hol->entries);
-         free (hol->short_options);
-
-         hol->entries = entries;
-         hol->num_entries = num_entries;
-         hol->short_options = short_options;
-       }
-    }
-
-  hol_free (more);
-}
-\f
-/* Inserts enough spaces to make sure STREAM is at column COL.  */
-static void
-indent_to (argp_fmtstream_t stream, unsigned col)
-{
-  int needed = col - __argp_fmtstream_point (stream);
-  while (needed-- > 0)
-    __argp_fmtstream_putc (stream, ' ');
-}
-
-/* Output to STREAM either a space, or a newline if there isn't room for at
-   least ENSURE characters before the right margin.  */
-static void
-space (argp_fmtstream_t stream, size_t ensure)
-{
-  if (__argp_fmtstream_point (stream) + ensure
-      >= __argp_fmtstream_rmargin (stream))
-    __argp_fmtstream_putc (stream, '\n');
-  else
-    __argp_fmtstream_putc (stream, ' ');
-}
-
-/* If the option REAL has an argument, we print it in using the printf
-   format REQ_FMT or OPT_FMT depending on whether it's a required or
-   optional argument.  */
-static void
-arg (const struct argp_option *real, const char *req_fmt, const char *opt_fmt,
-     const char *domain, argp_fmtstream_t stream)
-{
-  if (real->arg)
-    {
-      if (real->flags & OPTION_ARG_OPTIONAL)
-       __argp_fmtstream_printf (stream, opt_fmt,
-                                dgettext (domain, real->arg));
-      else
-       __argp_fmtstream_printf (stream, req_fmt,
-                                dgettext (domain, real->arg));
-    }
-}
-\f
-/* Helper functions for hol_entry_help.  */
-
-/* State used during the execution of hol_help.  */
-struct hol_help_state
-{
-  /* PREV_ENTRY should contain the previous entry printed, or 0.  */
-  struct hol_entry *prev_entry;
-
-  /* If an entry is in a different group from the previous one, and SEP_GROUPS
-     is true, then a blank line will be printed before any output. */
-  int sep_groups;
-
-  /* True if a duplicate option argument was suppressed (only ever set if
-     UPARAMS.dup_args is false).  */
-  int suppressed_dup_arg;
-};
-
-/* Some state used while printing a help entry (used to communicate with
-   helper functions).  See the doc for hol_entry_help for more info, as most
-   of the fields are copied from its arguments.  */
-struct pentry_state
-{
-  const struct hol_entry *entry;
-  argp_fmtstream_t stream;
-  struct hol_help_state *hhstate;
-
-  /* True if nothing's been printed so far.  */
-  int first;
-
-  /* If non-zero, the state that was used to print this help.  */
-  const struct argp_state *state;
-};
-
-/* If a user doc filter should be applied to DOC, do so.  */
-static const char *
-filter_doc (const char *doc, int key, const struct argp *argp,
-           const struct argp_state *state)
-{
-  if (argp->help_filter)
-    /* We must apply a user filter to this output.  */
-    {
-      void *input = __argp_input (argp, state);
-      return (*argp->help_filter) (key, doc, input);
-    }
-  else
-    /* No filter.  */
-    return doc;
-}
-
-/* Prints STR as a header line, with the margin lines set appropiately, and
-   notes the fact that groups should be separated with a blank line.  ARGP is
-   the argp that should dictate any user doc filtering to take place.  Note
-   that the previous wrap margin isn't restored, but the left margin is reset
-   to 0.  */
-static void
-print_header (const char *str, const struct argp *argp,
-             struct pentry_state *pest)
-{
-  const char *tstr = dgettext (argp->argp_domain, str);
-  const char *fstr = filter_doc (tstr, ARGP_KEY_HELP_HEADER, argp, pest->state);
-
-  if (fstr)
-    {
-      if (*fstr)
-       {
-         if (pest->hhstate->prev_entry)
-           /* Precede with a blank line.  */
-           __argp_fmtstream_putc (pest->stream, '\n');
-         indent_to (pest->stream, uparams.header_col);
-         __argp_fmtstream_set_lmargin (pest->stream, uparams.header_col);
-         __argp_fmtstream_set_wmargin (pest->stream, uparams.header_col);
-         __argp_fmtstream_puts (pest->stream, fstr);
-         __argp_fmtstream_set_lmargin (pest->stream, 0);
-         __argp_fmtstream_putc (pest->stream, '\n');
-       }
-
-      pest->hhstate->sep_groups = 1; /* Separate subsequent groups. */
-    }
-
-  if (fstr != tstr)
-    free ((char *) fstr);
-}
-
-/* Inserts a comma if this isn't the first item on the line, and then makes
-   sure we're at least to column COL.  If this *is* the first item on a line,
-   prints any pending whitespace/headers that should precede this line. Also
-   clears FIRST.  */
-static void
-comma (unsigned col, struct pentry_state *pest)
-{
-  if (pest->first)
-    {
-      const struct hol_entry *pe = pest->hhstate->prev_entry;
-      const struct hol_cluster *cl = pest->entry->cluster;
-
-      if (pest->hhstate->sep_groups && pe && pest->entry->group != pe->group)
-       __argp_fmtstream_putc (pest->stream, '\n');
-
-      if (cl && cl->header && *cl->header
-         && (!pe
-             || (pe->cluster != cl
-                 && !hol_cluster_is_child (pe->cluster, cl))))
-       /* If we're changing clusters, then this must be the start of the
-          ENTRY's cluster unless that is an ancestor of the previous one
-          (in which case we had just popped into a sub-cluster for a bit).
-          If so, then print the cluster's header line.  */
-       {
-         int old_wm = __argp_fmtstream_wmargin (pest->stream);
-         print_header (cl->header, cl->argp, pest);
-         __argp_fmtstream_set_wmargin (pest->stream, old_wm);
-       }
-
-      pest->first = 0;
-    }
-  else
-    __argp_fmtstream_puts (pest->stream, ", ");
-
-  indent_to (pest->stream, col);
-}
-\f
-/* Print help for ENTRY to STREAM.  */
-static void
-hol_entry_help (struct hol_entry *entry, const struct argp_state *state,
-               argp_fmtstream_t stream, struct hol_help_state *hhstate)
-{
-  unsigned num;
-  const struct argp_option *real = entry->opt, *opt;
-  char *so = entry->short_options;
-  int have_long_opt = 0;       /* We have any long options.  */
-  /* Saved margins.  */
-  int old_lm = __argp_fmtstream_set_lmargin (stream, 0);
-  int old_wm = __argp_fmtstream_wmargin (stream);
-  /* PEST is a state block holding some of our variables that we'd like to
-     share with helper functions.  */
-  struct pentry_state pest;
-
-  pest.entry = entry;
-  pest.stream = stream;
-  pest.hhstate = hhstate;
-  pest.first = 1;
-  pest.state = state;
-
-  if (! odoc (real))
-    for (opt = real, num = entry->num; num > 0; opt++, num--)
-      if (opt->name && ovisible (opt))
-       {
-         have_long_opt = 1;
-         break;
-       }
-
-  /* First emit short options.  */
-  __argp_fmtstream_set_wmargin (stream, uparams.short_opt_col); /* For truly bizarre cases. */
-  for (opt = real, num = entry->num; num > 0; opt++, num--)
-    if (oshort (opt) && opt->key == *so)
-      /* OPT has a valid (non shadowed) short option.  */
-      {
-       if (ovisible (opt))
-         {
-           comma (uparams.short_opt_col, &pest);
-           __argp_fmtstream_putc (stream, '-');
-           __argp_fmtstream_putc (stream, *so);
-           if (!have_long_opt || uparams.dup_args)
-             arg (real, " %s", "[%s]", state->root_argp->argp_domain, stream);
-           else if (real->arg)
-             hhstate->suppressed_dup_arg = 1;
-         }
-       so++;
-      }
-
-  /* Now, long options.  */
-  if (odoc (real))
-    /* A `documentation' option.  */
-    {
-      __argp_fmtstream_set_wmargin (stream, uparams.doc_opt_col);
-      for (opt = real, num = entry->num; num > 0; opt++, num--)
-       if (opt->name && *opt->name && ovisible (opt))
-         {
-           comma (uparams.doc_opt_col, &pest);
-           /* Calling dgettext here isn't quite right, since sorting will
-              have been done on the original; but documentation options
-              should be pretty rare anyway...  */
-           __argp_fmtstream_puts (stream,
-                                  onotrans (opt) ?
-                                            opt->name :
-                                  dgettext (state->root_argp->argp_domain,
-                                            opt->name));
-         }
-    }
-  else
-    /* A real long option.  */
-    {
-      int first_long_opt = 1;
-
-      __argp_fmtstream_set_wmargin (stream, uparams.long_opt_col);
-      for (opt = real, num = entry->num; num > 0; opt++, num--)
-       if (opt->name && ovisible (opt))
-         {
-           comma (uparams.long_opt_col, &pest);
-           __argp_fmtstream_printf (stream, "--%s", opt->name);
-           if (first_long_opt || uparams.dup_args)
-             arg (real, "=%s", "[=%s]", state->root_argp->argp_domain,
-                  stream);
-           else if (real->arg)
-             hhstate->suppressed_dup_arg = 1;
-         }
-    }
-
-  /* Next, documentation strings.  */
-  __argp_fmtstream_set_lmargin (stream, 0);
-
-  if (pest.first)
-    {
-      /* Didn't print any switches, what's up?  */
-      if (!oshort (real) && !real->name)
-       /* This is a group header, print it nicely.  */
-       print_header (real->doc, entry->argp, &pest);
-      else
-       /* Just a totally shadowed option or null header; print nothing.  */
-       goto cleanup;           /* Just return, after cleaning up.  */
-    }
-  else
-    {
-      const char *tstr = real->doc ? dgettext (state->root_argp->argp_domain,
-                                              real->doc) : 0;
-      const char *fstr = filter_doc (tstr, real->key, entry->argp, state);
-      if (fstr && *fstr)
-       {
-         unsigned int col = __argp_fmtstream_point (stream);
-
-         __argp_fmtstream_set_lmargin (stream, uparams.opt_doc_col);
-         __argp_fmtstream_set_wmargin (stream, uparams.opt_doc_col);
-
-         if (col > (unsigned int) (uparams.opt_doc_col + 3))
-           __argp_fmtstream_putc (stream, '\n');
-         else if (col >= (unsigned int) uparams.opt_doc_col)
-           __argp_fmtstream_puts (stream, "   ");
-         else
-           indent_to (stream, uparams.opt_doc_col);
-
-         __argp_fmtstream_puts (stream, fstr);
-       }
-      if (fstr && fstr != tstr)
-       free ((char *) fstr);
-
-      /* Reset the left margin.  */
-      __argp_fmtstream_set_lmargin (stream, 0);
-      __argp_fmtstream_putc (stream, '\n');
-    }
-
-  hhstate->prev_entry = entry;
-
-cleanup:
-  __argp_fmtstream_set_lmargin (stream, old_lm);
-  __argp_fmtstream_set_wmargin (stream, old_wm);
-}
-\f
-/* Output a long help message about the options in HOL to STREAM.  */
-static void
-hol_help (struct hol *hol, const struct argp_state *state,
-         argp_fmtstream_t stream)
-{
-  unsigned num;
-  struct hol_entry *entry;
-  struct hol_help_state hhstate = { 0, 0, 0 };
-
-  for (entry = hol->entries, num = hol->num_entries; num > 0; entry++, num--)
-    hol_entry_help (entry, state, stream, &hhstate);
-
-  if (hhstate.suppressed_dup_arg && uparams.dup_args_note)
-    {
-      const char *tstr = dgettext (state->root_argp->argp_domain, "\
-Mandatory or optional arguments to long options are also mandatory or \
-optional for any corresponding short options.");
-      const char *fstr = filter_doc (tstr, ARGP_KEY_HELP_DUP_ARGS_NOTE,
-                                    state ? state->root_argp : 0, state);
-      if (fstr && *fstr)
-       {
-         __argp_fmtstream_putc (stream, '\n');
-         __argp_fmtstream_puts (stream, fstr);
-         __argp_fmtstream_putc (stream, '\n');
-       }
-      if (fstr && fstr != tstr)
-       free ((char *) fstr);
-    }
-}
-\f
-/* Helper functions for hol_usage.  */
-
-/* If OPT is a short option without an arg, append its key to the string
-   pointer pointer to by COOKIE, and advance the pointer.  */
-static int
-add_argless_short_opt (const struct argp_option *opt,
-                      const struct argp_option *real,
-                      const char *domain, void *cookie)
-{
-  char **snao_end = cookie;
-  if (!(opt->arg || real->arg)
-      && !((opt->flags | real->flags) & OPTION_NO_USAGE))
-    *(*snao_end)++ = opt->key;
-  return 0;
-}
-
-/* If OPT is a short option with an arg, output a usage entry for it to the
-   stream pointed at by COOKIE.  */
-static int
-usage_argful_short_opt (const struct argp_option *opt,
-                       const struct argp_option *real,
-                       const char *domain, void *cookie)
-{
-  argp_fmtstream_t stream = cookie;
-  const char *arg = opt->arg;
-  int flags = opt->flags | real->flags;
-
-  if (! arg)
-    arg = real->arg;
-
-  if (arg && !(flags & OPTION_NO_USAGE))
-    {
-      arg = dgettext (domain, arg);
-
-      if (flags & OPTION_ARG_OPTIONAL)
-       __argp_fmtstream_printf (stream, " [-%c[%s]]", opt->key, arg);
-      else
-       {
-         /* Manually do line wrapping so that it (probably) won't
-            get wrapped at the embedded space.  */
-         space (stream, 6 + strlen (arg));
-         __argp_fmtstream_printf (stream, "[-%c %s]", opt->key, arg);
-       }
-    }
-
-  return 0;
-}
-
-/* Output a usage entry for the long option opt to the stream pointed at by
-   COOKIE.  */
-static int
-usage_long_opt (const struct argp_option *opt,
-               const struct argp_option *real,
-               const char *domain, void *cookie)
-{
-  argp_fmtstream_t stream = cookie;
-  const char *arg = opt->arg;
-  int flags = opt->flags | real->flags;
-
-  if (! arg)
-    arg = real->arg;
-
-  if (! (flags & OPTION_NO_USAGE) && !odoc (opt))
-    {
-      if (arg)
-       {
-         arg = dgettext (domain, arg);
-         if (flags & OPTION_ARG_OPTIONAL)
-           __argp_fmtstream_printf (stream, " [--%s[=%s]]", opt->name, arg);
-         else
-           __argp_fmtstream_printf (stream, " [--%s=%s]", opt->name, arg);
-       }
-      else
-       __argp_fmtstream_printf (stream, " [--%s]", opt->name);
-    }
-
-  return 0;
-}
-\f
-/* Print a short usage description for the arguments in HOL to STREAM.  */
-static void
-hol_usage (struct hol *hol, argp_fmtstream_t stream)
-{
-  if (hol->num_entries > 0)
-    {
-      unsigned nentries;
-      struct hol_entry *entry;
-      char *short_no_arg_opts = alloca (strlen (hol->short_options) + 1);
-      char *snao_end = short_no_arg_opts;
-
-      /* First we put a list of short options without arguments.  */
-      for (entry = hol->entries, nentries = hol->num_entries
-          ; nentries > 0
-          ; entry++, nentries--)
-       hol_entry_short_iterate (entry, add_argless_short_opt,
-                                entry->argp->argp_domain, &snao_end);
-      if (snao_end > short_no_arg_opts)
-       {
-         *snao_end++ = 0;
-         __argp_fmtstream_printf (stream, " [-%s]", short_no_arg_opts);
-       }
-
-      /* Now a list of short options *with* arguments.  */
-      for (entry = hol->entries, nentries = hol->num_entries
-          ; nentries > 0
-          ; entry++, nentries--)
-       hol_entry_short_iterate (entry, usage_argful_short_opt,
-                                entry->argp->argp_domain, stream);
-
-      /* Finally, a list of long options (whew!).  */
-      for (entry = hol->entries, nentries = hol->num_entries
-          ; nentries > 0
-          ; entry++, nentries--)
-       hol_entry_long_iterate (entry, usage_long_opt,
-                               entry->argp->argp_domain, stream);
-    }
-}
-\f
-/* Make a HOL containing all levels of options in ARGP.  CLUSTER is the
-   cluster in which ARGP's entries should be clustered, or 0.  */
-static struct hol *
-argp_hol (const struct argp *argp, struct hol_cluster *cluster)
-{
-  const struct argp_child *child = argp->children;
-  struct hol *hol = make_hol (argp, cluster);
-  if (child)
-    while (child->argp)
-      {
-       struct hol_cluster *child_cluster =
-         ((child->group || child->header)
-          /* Put CHILD->argp within its own cluster.  */
-          ? hol_add_cluster (hol, child->group, child->header,
-                             child - argp->children, cluster, argp)
-          /* Just merge it into the parent's cluster.  */
-          : cluster);
-       hol_append (hol, argp_hol (child->argp, child_cluster)) ;
-       child++;
-      }
-  return hol;
-}
-\f
-/* Calculate how many different levels with alternative args strings exist in
-   ARGP.  */
-static size_t
-argp_args_levels (const struct argp *argp)
-{
-  size_t levels = 0;
-  const struct argp_child *child = argp->children;
-
-  if (argp->args_doc && strchr (argp->args_doc, '\n'))
-    levels++;
-
-  if (child)
-    while (child->argp)
-      levels += argp_args_levels ((child++)->argp);
-
-  return levels;
-}
-
-/* Print all the non-option args documented in ARGP to STREAM.  Any output is
-   preceded by a space.  LEVELS is a pointer to a byte vector the length
-   returned by argp_args_levels; it should be initialized to zero, and
-   updated by this routine for the next call if ADVANCE is true.  True is
-   returned as long as there are more patterns to output.  */
-static int
-argp_args_usage (const struct argp *argp, const struct argp_state *state,
-                char **levels, int advance, argp_fmtstream_t stream)
-{
-  char *our_level = *levels;
-  int multiple = 0;
-  const struct argp_child *child = argp->children;
-  const char *tdoc = dgettext (argp->argp_domain, argp->args_doc), *nl = 0;
-  const char *fdoc = filter_doc (tdoc, ARGP_KEY_HELP_ARGS_DOC, argp, state);
-
-  if (fdoc)
-    {
-      const char *cp = fdoc;
-      nl = __strchrnul (cp, '\n');
-      if (*nl != '\0')
-       /* This is a `multi-level' args doc; advance to the correct position
-          as determined by our state in LEVELS, and update LEVELS.  */
-       {
-         int i;
-         multiple = 1;
-         for (i = 0; i < *our_level; i++)
-           cp = nl + 1, nl = __strchrnul (cp, '\n');
-         (*levels)++;
-       }
-
-      /* Manually do line wrapping so that it (probably) won't get wrapped at
-        any embedded spaces.  */
-      space (stream, 1 + nl - cp);
-
-      __argp_fmtstream_write (stream, cp, nl - cp);
-    }
-  if (fdoc && fdoc != tdoc)
-    free ((char *)fdoc);       /* Free user's modified doc string.  */
-
-  if (child)
-    while (child->argp)
-      advance = !argp_args_usage ((child++)->argp, state, levels, advance, stream);
-
-  if (advance && multiple)
-    {
-      /* Need to increment our level.  */
-      if (*nl)
-       /* There's more we can do here.  */
-       {
-         (*our_level)++;
-         advance = 0;          /* Our parent shouldn't advance also. */
-       }
-      else if (*our_level > 0)
-       /* We had multiple levels, but used them up; reset to zero.  */
-       *our_level = 0;
-    }
-
-  return !advance;
-}
-\f
-/* Print the documentation for ARGP to STREAM; if POST is false, then
-   everything preceeding a `\v' character in the documentation strings (or
-   the whole string, for those with none) is printed, otherwise, everything
-   following the `\v' character (nothing for strings without).  Each separate
-   bit of documentation is separated a blank line, and if PRE_BLANK is true,
-   then the first is as well.  If FIRST_ONLY is true, only the first
-   occurrence is output.  Returns true if anything was output.  */
-static int
-argp_doc (const struct argp *argp, const struct argp_state *state,
-         int post, int pre_blank, int first_only,
-         argp_fmtstream_t stream)
-{
-  const char *text;
-  const char *inp_text;
-  size_t inp_text_len = 0;
-  const char *trans_text;
-  void *input = 0;
-  int anything = 0;
-  const struct argp_child *child = argp->children;
-
-  if (argp->doc)
-    {
-      char *vt = strchr (argp->doc, '\v');
-      if (vt)
-       {
-         if (post)
-           inp_text = vt + 1;
-         else
-           {
-             inp_text_len = vt - argp->doc;
-             inp_text = __strndup (argp->doc, inp_text_len);
-           }
-       }
-      else
-       inp_text = post ? 0 : argp->doc;
-      trans_text = inp_text ? dgettext (argp->argp_domain, inp_text) : NULL;
-    }
-  else
-    trans_text = inp_text = 0;
-
-  if (argp->help_filter)
-    /* We have to filter the doc strings.  */
-    {
-      input = __argp_input (argp, state);
-      text =
-       (*argp->help_filter) (post
-                             ? ARGP_KEY_HELP_POST_DOC
-                             : ARGP_KEY_HELP_PRE_DOC,
-                             trans_text, input);
-    }
-  else
-    text = (const char *) trans_text;
-
-  if (text)
-    {
-      if (pre_blank)
-       __argp_fmtstream_putc (stream, '\n');
-
-      __argp_fmtstream_puts (stream, text);
-
-      if (__argp_fmtstream_point (stream) > __argp_fmtstream_lmargin (stream))
-       __argp_fmtstream_putc (stream, '\n');
-
-      anything = 1;
-    }
-
-  if (text && text != trans_text)
-    free ((char *) text);      /* Free TEXT returned from the help filter.  */
-
-  if (inp_text && inp_text_len)
-    free ((char *) inp_text);  /* We copied INP_TEXT, so free it now.  */
-
-  if (post && argp->help_filter)
-    /* Now see if we have to output a ARGP_KEY_HELP_EXTRA text.  */
-    {
-      text = (*argp->help_filter) (ARGP_KEY_HELP_EXTRA, 0, input);
-      if (text)
-       {
-         if (anything || pre_blank)
-           __argp_fmtstream_putc (stream, '\n');
-         __argp_fmtstream_puts (stream, text);
-         free ((char *) text);
-         if (__argp_fmtstream_point (stream)
-             > __argp_fmtstream_lmargin (stream))
-           __argp_fmtstream_putc (stream, '\n');
-         anything = 1;
-       }
-    }
-
-  if (child)
-    while (child->argp && !(first_only && anything))
-      anything |=
-       argp_doc ((child++)->argp, state,
-                 post, anything || pre_blank, first_only,
-                 stream);
-
-  return anything;
-}
-\f
-/* Output a usage message for ARGP to STREAM.  If called from
-   argp_state_help, STATE is the relevent parsing state.  FLAGS are from the
-   set ARGP_HELP_*.  NAME is what to use wherever a `program name' is
-   needed. */
-static void
-_help (const struct argp *argp, const struct argp_state *state, FILE *stream,
-       unsigned flags, char *name)
-{
-  int anything = 0;            /* Whether we've output anything.  */
-  struct hol *hol = 0;
-  argp_fmtstream_t fs;
-
-  if (! stream)
-    return;
-
-#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE)
-  __flockfile (stream);
-#endif
-
-  if (! uparams.valid)
-    fill_in_uparams (state);
-
-  fs = __argp_make_fmtstream (stream, 0, uparams.rmargin, 0);
-  if (! fs)
-    {
-#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE)
-      __funlockfile (stream);
-#endif
-      return;
-    }
-
-  if (flags & (ARGP_HELP_USAGE | ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG))
-    {
-      hol = argp_hol (argp, 0);
-
-      /* If present, these options always come last.  */
-      hol_set_group (hol, "help", -1);
-      hol_set_group (hol, "version", -1);
-
-      hol_sort (hol);
-    }
-
-  if (flags & (ARGP_HELP_USAGE | ARGP_HELP_SHORT_USAGE))
-    /* Print a short `Usage:' message.  */
-    {
-      int first_pattern = 1, more_patterns;
-      size_t num_pattern_levels = argp_args_levels (argp);
-      char *pattern_levels = alloca (num_pattern_levels);
-
-      memset (pattern_levels, 0, num_pattern_levels);
-
-      do
-       {
-         int old_lm;
-         int old_wm = __argp_fmtstream_set_wmargin (fs, uparams.usage_indent);
-         char *levels = pattern_levels;
-
-         if (first_pattern)
-           __argp_fmtstream_printf (fs, "%s %s",
-                                    dgettext (argp->argp_domain, "Usage:"),
-                                    name);
-         else
-           __argp_fmtstream_printf (fs, "%s %s",
-                                    dgettext (argp->argp_domain, "  or: "),
-                                    name);
-
-         /* We set the lmargin as well as the wmargin, because hol_usage
-            manually wraps options with newline to avoid annoying breaks.  */
-         old_lm = __argp_fmtstream_set_lmargin (fs, uparams.usage_indent);
-
-         if (flags & ARGP_HELP_SHORT_USAGE)
-           /* Just show where the options go.  */
-           {
-             if (hol->num_entries > 0)
-               __argp_fmtstream_puts (fs, dgettext (argp->argp_domain,
-                                                    " [OPTION...]"));
-           }
-         else
-           /* Actually print the options.  */
-           {
-             hol_usage (hol, fs);
-             flags |= ARGP_HELP_SHORT_USAGE; /* But only do so once.  */
-           }
-
-         more_patterns = argp_args_usage (argp, state, &levels, 1, fs);
-
-         __argp_fmtstream_set_wmargin (fs, old_wm);
-         __argp_fmtstream_set_lmargin (fs, old_lm);
-
-         __argp_fmtstream_putc (fs, '\n');
-         anything = 1;
-
-         first_pattern = 0;
-       }
-      while (more_patterns);
-    }
-
-  if (flags & ARGP_HELP_PRE_DOC)
-    anything |= argp_doc (argp, state, 0, 0, 1, fs);
-
-  if (flags & ARGP_HELP_SEE)
-    {
-      __argp_fmtstream_printf (fs, dgettext (argp->argp_domain, "\
-Try `%s --help' or `%s --usage' for more information.\n"),
-                              name, name);
-      anything = 1;
-    }
-
-  if (flags & ARGP_HELP_LONG)
-    /* Print a long, detailed help message.  */
-    {
-      /* Print info about all the options.  */
-      if (hol->num_entries > 0)
-       {
-         if (anything)
-           __argp_fmtstream_putc (fs, '\n');
-         hol_help (hol, state, fs);
-         anything = 1;
-       }
-    }
-
-  if (flags & ARGP_HELP_POST_DOC)
-    /* Print any documentation strings at the end.  */
-    anything |= argp_doc (argp, state, 1, anything, 0, fs);
-
-  if ((flags & ARGP_HELP_BUG_ADDR) && argp_program_bug_address)
-    {
-      if (anything)
-       __argp_fmtstream_putc (fs, '\n');
-      __argp_fmtstream_printf (fs, dgettext (argp->argp_domain,
-                                            "Report bugs to %s.\n"),
-                              argp_program_bug_address);
-      anything = 1;
-    }
-
-#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE)
-  __funlockfile (stream);
-#endif
-
-  if (hol)
-    hol_free (hol);
-
-  __argp_fmtstream_free (fs);
-}
-\f
-/* Output a usage message for ARGP to STREAM.  FLAGS are from the set
-   ARGP_HELP_*.  NAME is what to use wherever a `program name' is needed. */
-void __argp_help (const struct argp *argp, FILE *stream,
-                 unsigned flags, char *name)
-{
-  struct argp_state state;
-  memset (&state, 0, sizeof state);
-  state.root_argp = argp;
-  _help (argp, &state, stream, flags, name);
-}
-#ifdef weak_alias
-weak_alias (__argp_help, argp_help)
-#endif
-
-#if ! (defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME)
-char *
-__argp_short_program_name (void)
-{
-# if HAVE_DECL_PROGRAM_INVOCATION_NAME
-  return __argp_base_name (program_invocation_name);
-# else
-  /* FIXME: What now? Miles suggests that it is better to use NULL,
-     but currently the value is passed on directly to fputs_unlocked,
-     so that requires more changes. */
-# if __GNUC__
-#  warning No reasonable value to return
-# endif /* __GNUC__ */
-  return "";
-# endif
-}
-#endif
-
-/* Output, if appropriate, a usage message for STATE to STREAM.  FLAGS are
-   from the set ARGP_HELP_*.  */
-void
-__argp_state_help (const struct argp_state *state, FILE *stream, unsigned flags)
-{
-  if ((!state || ! (state->flags & ARGP_NO_ERRS)) && stream)
-    {
-      if (state && (state->flags & ARGP_LONG_ONLY))
-       flags |= ARGP_HELP_LONG_ONLY;
-
-      _help (state ? state->root_argp : 0, state, stream, flags,
-            state ? state->name : __argp_short_program_name ());
-
-      if (!state || ! (state->flags & ARGP_NO_EXIT))
-       {
-         if (flags & ARGP_HELP_EXIT_ERR)
-           exit (argp_err_exit_status);
-         if (flags & ARGP_HELP_EXIT_OK)
-           exit (0);
-       }
-  }
-}
-#ifdef weak_alias
-weak_alias (__argp_state_help, argp_state_help)
-#endif
-\f
-/* If appropriate, print the printf string FMT and following args, preceded
-   by the program name and `:', to stderr, and followed by a `Try ... --help'
-   message, then exit (1).  */
-void
-__argp_error (const struct argp_state *state, const char *fmt, ...)
-{
-  if (!state || !(state->flags & ARGP_NO_ERRS))
-    {
-      FILE *stream = state ? state->err_stream : stderr;
-
-      if (stream)
-       {
-         va_list ap;
-
-#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE)
-         __flockfile (stream);
-#endif
-
-         va_start (ap, fmt);
-
-#ifdef USE_IN_LIBIO
-         if (_IO_fwide (stream, 0) > 0)
-           {
-             char *buf;
-
-             if (__asprintf (&buf, fmt, ap) < 0)
-               buf = NULL;
-
-             __fwprintf (stream, L"%s: %s\n",
-                         state ? state->name : __argp_short_program_name (),
-                         buf);
-
-             free (buf);
-           }
-         else
-#endif
-           {
-             fputs_unlocked (state
-                             ? state->name : __argp_short_program_name (),
-                             stream);
-             putc_unlocked (':', stream);
-             putc_unlocked (' ', stream);
-
-             vfprintf (stream, fmt, ap);
-
-             putc_unlocked ('\n', stream);
-           }
-
-         __argp_state_help (state, stream, ARGP_HELP_STD_ERR);
-
-         va_end (ap);
-
-#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE)
-         __funlockfile (stream);
-#endif
-       }
-    }
-}
-#ifdef weak_alias
-weak_alias (__argp_error, argp_error)
-#endif
-\f
-/* Similar to the standard gnu error-reporting function error(), but will
-   respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print
-   to STATE->err_stream.  This is useful for argument parsing code that is
-   shared between program startup (when exiting is desired) and runtime
-   option parsing (when typically an error code is returned instead).  The
-   difference between this function and argp_error is that the latter is for
-   *parsing errors*, and the former is for other problems that occur during
-   parsing but don't reflect a (syntactic) problem with the input.  */
-void
-__argp_failure (const struct argp_state *state, int status, int errnum,
-               const char *fmt, ...)
-{
-  if (!state || !(state->flags & ARGP_NO_ERRS))
-    {
-      FILE *stream = state ? state->err_stream : stderr;
-
-      if (stream)
-       {
-#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE)
-         __flockfile (stream);
-#endif
-
-#ifdef USE_IN_LIBIO
-         if (_IO_fwide (stream, 0) > 0)
-           __fwprintf (stream, L"%s",
-                       state ? state->name : __argp_short_program_name ());
-         else
-#endif
-           fputs_unlocked (state
-                           ? state->name : __argp_short_program_name (),
-                           stream);
-
-         if (fmt)
-           {
-             va_list ap;
-
-             va_start (ap, fmt);
-#ifdef USE_IN_LIBIO
-             if (_IO_fwide (stream, 0) > 0)
-               {
-                 char *buf;
-
-                 if (__asprintf (&buf, fmt, ap) < 0)
-                   buf = NULL;
-
-                 __fwprintf (stream, L": %s", buf);
-
-                 free (buf);
-               }
-             else
-#endif
-               {
-                 putc_unlocked (':', stream);
-                 putc_unlocked (' ', stream);
-
-                 vfprintf (stream, fmt, ap);
-               }
-
-             va_end (ap);
-           }
-
-         if (errnum)
-           {
-             char buf[200];
-
-#ifdef USE_IN_LIBIO
-             if (_IO_fwide (stream, 0) > 0)
-               __fwprintf (stream, L": %s",
-                           __strerror_r (errnum, buf, sizeof (buf)));
-             else
-#endif
-               {
-                 char const *s = NULL;
-                 putc_unlocked (':', stream);
-                 putc_unlocked (' ', stream);
-#if _LIBC || (HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P)
-                 s = __strerror_r (errnum, buf, sizeof buf);
-#elif HAVE_DECL_STRERROR_R
-                 if (__strerror_r (errnum, buf, sizeof buf) == 0)
-                   s = buf;
-#endif
-#if !_LIBC
-                 if (! s && ! (s = strerror (errnum)))
-                   s = dgettext (state->root_argp->argp_domain,
-                                 "Unknown system error");
-#endif
-                 fputs (s, stream);
-               }
-           }
-
-#ifdef USE_IN_LIBIO
-         if (_IO_fwide (stream, 0) > 0)
-           putwc_unlocked (L'\n', stream);
-         else
-#endif
-           putc_unlocked ('\n', stream);
-
-#if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE)
-         __funlockfile (stream);
-#endif
-
-         if (status && (!state || !(state->flags & ARGP_NO_EXIT)))
-           exit (status);
-       }
-    }
-}
-#ifdef weak_alias
-weak_alias (__argp_failure, argp_failure)
-#endif
diff --git a/lib/argp-namefrob.h b/lib/argp-namefrob.h
deleted file mode 100644 (file)
index fcb082a..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/* Name frobnication for compiling argp outside of glibc
-   Copyright (C) 1997, 2003, 2007 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Written by Miles Bader <miles@gnu.ai.mit.edu>.
-
-   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 !_LIBC
-/* This code is written for inclusion in gnu-libc, and uses names in the
-   namespace reserved for libc.  If we're not compiling in libc, define those
-   names to be the normal ones instead.  */
-
-/* argp-parse functions */
-#undef __argp_parse
-#define __argp_parse argp_parse
-#undef __option_is_end
-#define __option_is_end _option_is_end
-#undef __option_is_short
-#define __option_is_short _option_is_short
-#undef __argp_input
-#define __argp_input _argp_input
-
-/* argp-help functions */
-#undef __argp_help
-#define __argp_help argp_help
-#undef __argp_error
-#define __argp_error argp_error
-#undef __argp_failure
-#define __argp_failure argp_failure
-#undef __argp_state_help
-#define __argp_state_help argp_state_help
-#undef __argp_usage
-#define __argp_usage argp_usage
-
-/* argp-fmtstream functions */
-#undef __argp_make_fmtstream
-#define __argp_make_fmtstream argp_make_fmtstream
-#undef __argp_fmtstream_free
-#define __argp_fmtstream_free argp_fmtstream_free
-#undef __argp_fmtstream_putc
-#define __argp_fmtstream_putc argp_fmtstream_putc
-#undef __argp_fmtstream_puts
-#define __argp_fmtstream_puts argp_fmtstream_puts
-#undef __argp_fmtstream_write
-#define __argp_fmtstream_write argp_fmtstream_write
-#undef __argp_fmtstream_printf
-#define __argp_fmtstream_printf argp_fmtstream_printf
-#undef __argp_fmtstream_set_lmargin
-#define __argp_fmtstream_set_lmargin argp_fmtstream_set_lmargin
-#undef __argp_fmtstream_set_rmargin
-#define __argp_fmtstream_set_rmargin argp_fmtstream_set_rmargin
-#undef __argp_fmtstream_set_wmargin
-#define __argp_fmtstream_set_wmargin argp_fmtstream_set_wmargin
-#undef __argp_fmtstream_point
-#define __argp_fmtstream_point argp_fmtstream_point
-#undef __argp_fmtstream_update
-#define __argp_fmtstream_update _argp_fmtstream_update
-#undef __argp_fmtstream_ensure
-#define __argp_fmtstream_ensure _argp_fmtstream_ensure
-#undef __argp_fmtstream_lmargin
-#define __argp_fmtstream_lmargin argp_fmtstream_lmargin
-#undef __argp_fmtstream_rmargin
-#define __argp_fmtstream_rmargin argp_fmtstream_rmargin
-#undef __argp_fmtstream_wmargin
-#define __argp_fmtstream_wmargin argp_fmtstream_wmargin
-
-/* normal libc functions we call */
-#undef __flockfile
-#define __flockfile flockfile
-#undef __funlockfile
-#define __funlockfile funlockfile
-#undef __mempcpy
-#define __mempcpy mempcpy
-#undef __sleep
-#define __sleep sleep
-#undef __strcasecmp
-#define __strcasecmp strcasecmp
-#undef __strchrnul
-#define __strchrnul strchrnul
-#undef __strerror_r
-#define __strerror_r strerror_r
-#undef __strndup
-#define __strndup strndup
-#undef __vsnprintf
-#define __vsnprintf vsnprintf
-
-#if defined(HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKED
-# define clearerr_unlocked(x) clearerr (x)
-#endif
-#if defined(HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKED
-# define feof_unlocked(x) feof (x)
-# endif
-#if defined(HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKED
-# define ferror_unlocked(x) ferror (x)
-# endif
-#if defined(HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKED
-# define fflush_unlocked(x) fflush (x)
-# endif
-#if defined(HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKED
-# define fgets_unlocked(x,y,z) fgets (x,y,z)
-# endif
-#if defined(HAVE_DECL_FPUTC_UNLOCKED) && !HAVE_DECL_FPUTC_UNLOCKED
-# define fputc_unlocked(x,y) fputc (x,y)
-# endif
-#if defined(HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED
-# define fputs_unlocked(x,y) fputs (x,y)
-# endif
-#if defined(HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_FREAD_UNLOCKED
-# define fread_unlocked(w,x,y,z) fread (w,x,y,z)
-# endif
-#if defined(HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED
-# define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z)
-# endif
-#if defined(HAVE_DECL_GETC_UNLOCKED) && !HAVE_DECL_GETC_UNLOCKED
-# define getc_unlocked(x) getc (x)
-# endif
-#if defined(HAVE_DECL_GETCHAR_UNLOCKED) && !HAVE_DECL_GETCHAR_UNLOCKED
-#  define getchar_unlocked() getchar ()
-# endif
-#if defined(HAVE_DECL_PUTC_UNLOCKED) && !HAVE_DECL_PUTC_UNLOCKED
-# define putc_unlocked(x,y) putc (x,y)
-# endif
-#if defined(HAVE_DECL_PUTCHAR_UNLOCKED) && !HAVE_DECL_PUTCHAR_UNLOCKED
-# define putchar_unlocked(x) putchar (x)
-# endif
-
-#endif /* !_LIBC */
-
-#ifndef __set_errno
-#define __set_errno(e) (errno = (e))
-#endif
-
-#if defined GNULIB_ARGP_DISABLE_DIRNAME
-# define __argp_base_name(arg) arg
-#elif defined GNULIB_ARGP_EXTERN_BASENAME
-extern char *__argp_base_name(const char *arg);
-#else
-# include "dirname.h"
-# define __argp_base_name base_name
-#endif
-
-#if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
-# define __argp_short_program_name()   (program_invocation_short_name)
-#else
-extern char *__argp_short_program_name (void);
-#endif
diff --git a/lib/argp-parse.c b/lib/argp-parse.c
deleted file mode 100644 (file)
index 317ce21..0000000
+++ /dev/null
@@ -1,952 +0,0 @@
-/* Hierarchial argument parsing, layered over getopt
-   Copyright (C) 1995-2000, 2002, 2003, 2004 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Written by Miles Bader <miles@gnu.ai.mit.edu>.
-
-   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/>.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <alloca.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <limits.h>
-#include <getopt.h>
-#include <getopt_int.h>
-
-#ifdef _LIBC
-# include <libintl.h>
-# undef dgettext
-# define dgettext(domain, msgid) \
-   INTUSE(__dcgettext) (domain, msgid, LC_MESSAGES)
-#else
-# include "gettext.h"
-#endif
-#define N_(msgid) msgid
-
-#include "argp.h"
-#include "argp-namefrob.h"
-
-#define alignof(type) offsetof (struct { char c; type x; }, x)
-#define alignto(n, d) ((((n) + (d) - 1) / (d)) * (d))
-
-/* Getopt return values.  */
-#define KEY_END (-1)           /* The end of the options.  */
-#define KEY_ARG 1              /* A non-option argument.  */
-#define KEY_ERR '?'            /* An error parsing the options.  */
-
-/* The meta-argument used to prevent any further arguments being interpreted
-   as options.  */
-#define QUOTE "--"
-
-/* The number of bits we steal in a long-option value for our own use.  */
-#define GROUP_BITS CHAR_BIT
-
-/* The number of bits available for the user value.  */
-#define USER_BITS ((sizeof ((struct option *)0)->val * CHAR_BIT) - GROUP_BITS)
-#define USER_MASK ((1 << USER_BITS) - 1)
-
-/* EZ alias for ARGP_ERR_UNKNOWN.  */
-#define EBADKEY ARGP_ERR_UNKNOWN
-\f
-/* Default options.  */
-
-/* When argp is given the --HANG switch, _ARGP_HANG is set and argp will sleep
-   for one second intervals, decrementing _ARGP_HANG until it's zero.  Thus
-   you can force the program to continue by attaching a debugger and setting
-   it to 0 yourself.  */
-static volatile int _argp_hang;
-
-#define OPT_PROGNAME   -2
-#define OPT_USAGE      -3
-#define OPT_HANG       -4
-
-static const struct argp_option argp_default_options[] =
-{
-  {"help",       '?',          0, 0,  N_("give this help list"), -1},
-  {"usage",      OPT_USAGE,    0, 0,  N_("give a short usage message"), 0},
-  {"program-name",OPT_PROGNAME,N_("NAME"), OPTION_HIDDEN, N_("set the program name"), 0},
-  {"HANG",       OPT_HANG,    N_("SECS"), OPTION_ARG_OPTIONAL | OPTION_HIDDEN,
-     N_("hang for SECS seconds (default 3600)"), 0},
-  {NULL, 0, 0, 0, NULL, 0}
-};
-
-static error_t
-argp_default_parser (int key, char *arg, struct argp_state *state)
-{
-  switch (key)
-    {
-    case '?':
-      __argp_state_help (state, state->out_stream, ARGP_HELP_STD_HELP);
-      break;
-    case OPT_USAGE:
-      __argp_state_help (state, state->out_stream,
-                        ARGP_HELP_USAGE | ARGP_HELP_EXIT_OK);
-      break;
-
-    case OPT_PROGNAME:         /* Set the program name.  */
-#if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_NAME
-      program_invocation_name = arg;
-#endif
-      /* [Note that some systems only have PROGRAM_INVOCATION_SHORT_NAME (aka
-        __PROGNAME), in which case, PROGRAM_INVOCATION_NAME is just defined
-        to be that, so we have to be a bit careful here.]  */
-
-      /* Update what we use for messages.  */
-      state->name = __argp_base_name (arg);
-
-#if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
-      program_invocation_short_name = state->name;
-#endif
-
-      if ((state->flags & (ARGP_PARSE_ARGV0 | ARGP_NO_ERRS))
-         == ARGP_PARSE_ARGV0)
-       /* Update what getopt uses too.  */
-       state->argv[0] = arg;
-
-      break;
-
-    case OPT_HANG:
-      _argp_hang = atoi (arg ? arg : "3600");
-      while (_argp_hang-- > 0)
-       __sleep (1);
-      break;
-
-    default:
-      return EBADKEY;
-    }
-  return 0;
-}
-
-static const struct argp argp_default_argp =
-  {argp_default_options, &argp_default_parser, NULL, NULL, NULL, NULL, "libc"};
-
-\f
-static const struct argp_option argp_version_options[] =
-{
-  {"version",    'V',          0, 0,  N_("print program version"), -1},
-  {NULL, 0, 0, 0, NULL, 0}
-};
-
-static error_t
-argp_version_parser (int key, char *arg, struct argp_state *state)
-{
-  switch (key)
-    {
-    case 'V':
-      if (argp_program_version_hook)
-       (*argp_program_version_hook) (state->out_stream, state);
-      else if (argp_program_version)
-       fprintf (state->out_stream, "%s\n", argp_program_version);
-      else
-       __argp_error (state, dgettext (state->root_argp->argp_domain,
-                                      "(PROGRAM ERROR) No version known!?"));
-      if (! (state->flags & ARGP_NO_EXIT))
-       exit (0);
-      break;
-    default:
-      return EBADKEY;
-    }
-  return 0;
-}
-
-static const struct argp argp_version_argp =
-  {argp_version_options, &argp_version_parser, NULL, NULL, NULL, NULL, "libc"};
-\f
-/* Returns the offset into the getopt long options array LONG_OPTIONS of a
-   long option with called NAME, or -1 if none is found.  Passing NULL as
-   NAME will return the number of options.  */
-static int
-find_long_option (struct option *long_options, const char *name)
-{
-  struct option *l = long_options;
-  while (l->name != NULL)
-    if (name != NULL && strcmp (l->name, name) == 0)
-      return l - long_options;
-    else
-      l++;
-  if (name == NULL)
-    return l - long_options;
-  else
-    return -1;
-}
-
-\f
-/* The state of a `group' during parsing.  Each group corresponds to a
-   particular argp structure from the tree of such descending from the top
-   level argp passed to argp_parse.  */
-struct group
-{
-  /* This group's parsing function.  */
-  argp_parser_t parser;
-
-  /* Which argp this group is from.  */
-  const struct argp *argp;
-
-  /* Points to the point in SHORT_OPTS corresponding to the end of the short
-     options for this group.  We use it to determine from which group a
-     particular short options is from.  */
-  char *short_end;
-
-  /* The number of non-option args sucessfully handled by this parser.  */
-  unsigned args_processed;
-
-  /* This group's parser's parent's group.  */
-  struct group *parent;
-  unsigned parent_index;       /* And the our position in the parent.   */
-
-  /* These fields are swapped into and out of the state structure when
-     calling this group's parser.  */
-  void *input, **child_inputs;
-  void *hook;
-};
-
-/* Call GROUP's parser with KEY and ARG, swapping any group-specific info
-   from STATE before calling, and back into state afterwards.  If GROUP has
-   no parser, EBADKEY is returned.  */
-static error_t
-group_parse (struct group *group, struct argp_state *state, int key, char *arg)
-{
-  if (group->parser)
-    {
-      error_t err;
-      state->hook = group->hook;
-      state->input = group->input;
-      state->child_inputs = group->child_inputs;
-      state->arg_num = group->args_processed;
-      err = (*group->parser)(key, arg, state);
-      group->hook = state->hook;
-      return err;
-    }
-  else
-    return EBADKEY;
-}
-\f
-struct parser
-{
-  const struct argp *argp;
-
-  /* SHORT_OPTS is the getopt short options string for the union of all the
-     groups of options.  */
-  char *short_opts;
-  /* LONG_OPTS is the array of getop long option structures for the union of
-     all the groups of options.  */
-  struct option *long_opts;
-  /* OPT_DATA is the getopt data used for the re-entrant getopt.  */
-  struct _getopt_data opt_data;
-
-  /* States of the various parsing groups.  */
-  struct group *groups;
-  /* The end of the GROUPS array.  */
-  struct group *egroup;
-  /* An vector containing storage for the CHILD_INPUTS field in all groups.  */
-  void **child_inputs;
-
-  /* True if we think using getopt is still useful; if false, then
-     remaining arguments are just passed verbatim with ARGP_KEY_ARG.  This is
-     cleared whenever getopt returns KEY_END, but may be set again if the user
-     moves the next argument pointer backwards.  */
-  int try_getopt;
-
-  /* State block supplied to parsing routines.  */
-  struct argp_state state;
-
-  /* Memory used by this parser.  */
-  void *storage;
-};
-\f
-/* The next usable entries in the various parser tables being filled in by
-   convert_options.  */
-struct parser_convert_state
-{
-  struct parser *parser;
-  char *short_end;
-  struct option *long_end;
-  void **child_inputs_end;
-};
-
-/* Converts all options in ARGP (which is put in GROUP) and ancestors
-   into getopt options stored in SHORT_OPTS and LONG_OPTS; SHORT_END and
-   CVT->LONG_END are the points at which new options are added.  Returns the
-   next unused group entry.  CVT holds state used during the conversion.  */
-static struct group *
-convert_options (const struct argp *argp,
-                struct group *parent, unsigned parent_index,
-                struct group *group, struct parser_convert_state *cvt)
-{
-  /* REAL is the most recent non-alias value of OPT.  */
-  const struct argp_option *real = argp->options;
-  const struct argp_child *children = argp->children;
-
-  if (real || argp->parser)
-    {
-      const struct argp_option *opt;
-
-      if (real)
-       for (opt = real; !__option_is_end (opt); opt++)
-         {
-           if (! (opt->flags & OPTION_ALIAS))
-             /* OPT isn't an alias, so we can use values from it.  */
-             real = opt;
-
-           if (! (real->flags & OPTION_DOC))
-             /* A real option (not just documentation).  */
-             {
-               if (__option_is_short (opt))
-                 /* OPT can be used as a short option.  */
-                 {
-                   *cvt->short_end++ = opt->key;
-                   if (real->arg)
-                     {
-                       *cvt->short_end++ = ':';
-                       if (real->flags & OPTION_ARG_OPTIONAL)
-                         *cvt->short_end++ = ':';
-                     }
-                   *cvt->short_end = '\0'; /* keep 0 terminated */
-                 }
-
-               if (opt->name
-                   && find_long_option (cvt->parser->long_opts, opt->name) < 0)
-                 /* OPT can be used as a long option.  */
-                 {
-                   cvt->long_end->name = opt->name;
-                   cvt->long_end->has_arg =
-                     (real->arg
-                      ? (real->flags & OPTION_ARG_OPTIONAL
-                         ? optional_argument
-                         : required_argument)
-                      : no_argument);
-                   cvt->long_end->flag = 0;
-                   /* we add a disambiguating code to all the user's
-                      values (which is removed before we actually call
-                      the function to parse the value); this means that
-                      the user loses use of the high 8 bits in all his
-                      values (the sign of the lower bits is preserved
-                      however)...  */
-                   cvt->long_end->val =
-                     ((opt->key | real->key) & USER_MASK)
-                     + (((group - cvt->parser->groups) + 1) << USER_BITS);
-
-                   /* Keep the LONG_OPTS list terminated.  */
-                   (++cvt->long_end)->name = NULL;
-                 }
-             }
-           }
-
-      group->parser = argp->parser;
-      group->argp = argp;
-      group->short_end = cvt->short_end;
-      group->args_processed = 0;
-      group->parent = parent;
-      group->parent_index = parent_index;
-      group->input = 0;
-      group->hook = 0;
-      group->child_inputs = 0;
-
-      if (children)
-       /* Assign GROUP's CHILD_INPUTS field some space from
-           CVT->child_inputs_end.*/
-       {
-         unsigned num_children = 0;
-         while (children[num_children].argp)
-           num_children++;
-         group->child_inputs = cvt->child_inputs_end;
-         cvt->child_inputs_end += num_children;
-       }
-
-      parent = group++;
-    }
-  else
-    parent = 0;
-
-  if (children)
-    {
-      unsigned index = 0;
-      while (children->argp)
-       group =
-         convert_options (children++->argp, parent, index++, group, cvt);
-    }
-
-  return group;
-}
-
-/* Find the merged set of getopt options, with keys appropiately prefixed. */
-static void
-parser_convert (struct parser *parser, const struct argp *argp, int flags)
-{
-  struct parser_convert_state cvt;
-
-  cvt.parser = parser;
-  cvt.short_end = parser->short_opts;
-  cvt.long_end = parser->long_opts;
-  cvt.child_inputs_end = parser->child_inputs;
-
-  if (flags & ARGP_IN_ORDER)
-    *cvt.short_end++ = '-';
-  else if (flags & ARGP_NO_ARGS)
-    *cvt.short_end++ = '+';
-  *cvt.short_end = '\0';
-
-  cvt.long_end->name = NULL;
-
-  parser->argp = argp;
-
-  if (argp)
-    parser->egroup = convert_options (argp, 0, 0, parser->groups, &cvt);
-  else
-    parser->egroup = parser->groups; /* No parsers at all! */
-}
-\f
-/* Lengths of various parser fields which we will allocated.  */
-struct parser_sizes
-{
-  size_t short_len;            /* Getopt short options string.  */
-  size_t long_len;             /* Getopt long options vector.  */
-  size_t num_groups;           /* Group structures we allocate.  */
-  size_t num_child_inputs;     /* Child input slots.  */
-};
-
-/* For ARGP, increments the NUM_GROUPS field in SZS by the total number of
- argp structures descended from it, and the SHORT_LEN & LONG_LEN fields by
- the maximum lengths of the resulting merged getopt short options string and
- long-options array, respectively.  */
-static void
-calc_sizes (const struct argp *argp,  struct parser_sizes *szs)
-{
-  const struct argp_child *child = argp->children;
-  const struct argp_option *opt = argp->options;
-
-  if (opt || argp->parser)
-    {
-      szs->num_groups++;
-      if (opt)
-       {
-         int num_opts = 0;
-         while (!__option_is_end (opt++))
-           num_opts++;
-         szs->short_len += num_opts * 3; /* opt + up to 2 `:'s */
-         szs->long_len += num_opts;
-       }
-    }
-
-  if (child)
-    while (child->argp)
-      {
-       calc_sizes ((child++)->argp, szs);
-       szs->num_child_inputs++;
-      }
-}
-
-/* Initializes PARSER to parse ARGP in a manner described by FLAGS.  */
-static error_t
-parser_init (struct parser *parser, const struct argp *argp,
-            int argc, char **argv, int flags, void *input)
-{
-  error_t err = 0;
-  struct group *group;
-  struct parser_sizes szs;
-  struct _getopt_data opt_data = _GETOPT_DATA_INITIALIZER;
-  char *storage;
-  size_t glen, gsum;
-  size_t clen, csum;
-  size_t llen, lsum;
-  size_t slen, ssum;
-
-  szs.short_len = (flags & ARGP_NO_ARGS) ? 0 : 1;
-  szs.long_len = 0;
-  szs.num_groups = 0;
-  szs.num_child_inputs = 0;
-
-  if (argp)
-    calc_sizes (argp, &szs);
-
-  /* Lengths of the various bits of storage used by PARSER.  */
-  glen = (szs.num_groups + 1) * sizeof (struct group);
-  clen = szs.num_child_inputs * sizeof (void *);
-  llen = (szs.long_len + 1) * sizeof (struct option);
-  slen = szs.short_len + 1;
-
-  /* Sums of previous lengths, properly aligned.  There's no need to
-     align gsum, since struct group is aligned at least as strictly as
-     void * (since it contains a void * member).  And there's no need
-     to align lsum, since struct option is aligned at least as
-     strictly as char.  */
-  gsum = glen;
-  csum = alignto (gsum + clen, alignof (struct option));
-  lsum = csum + llen;
-  ssum = lsum + slen;
-
-  parser->storage = malloc (ssum);
-  if (! parser->storage)
-    return ENOMEM;
-
-  storage = parser->storage;
-  parser->groups = parser->storage;
-  parser->child_inputs = (void **) (storage + gsum);
-  parser->long_opts = (struct option *) (storage + csum);
-  parser->short_opts = storage + lsum;
-  parser->opt_data = opt_data;
-
-  memset (parser->child_inputs, 0, clen);
-  parser_convert (parser, argp, flags);
-
-  memset (&parser->state, 0, sizeof (struct argp_state));
-  parser->state.root_argp = parser->argp;
-  parser->state.argc = argc;
-  parser->state.argv = argv;
-  parser->state.flags = flags;
-  parser->state.err_stream = stderr;
-  parser->state.out_stream = stdout;
-  parser->state.next = 0;      /* Tell getopt to initialize.  */
-  parser->state.pstate = parser;
-
-  parser->try_getopt = 1;
-
-  /* Call each parser for the first time, giving it a chance to propagate
-     values to child parsers.  */
-  if (parser->groups < parser->egroup)
-    parser->groups->input = input;
-  for (group = parser->groups;
-       group < parser->egroup && (!err || err == EBADKEY);
-       group++)
-    {
-      if (group->parent)
-       /* If a child parser, get the initial input value from the parent. */
-       group->input = group->parent->child_inputs[group->parent_index];
-
-      if (!group->parser
-         && group->argp->children && group->argp->children->argp)
-       /* For the special case where no parsing function is supplied for an
-          argp, propagate its input to its first child, if any (this just
-          makes very simple wrapper argps more convenient).  */
-       group->child_inputs[0] = group->input;
-
-      err = group_parse (group, &parser->state, ARGP_KEY_INIT, 0);
-    }
-  if (err == EBADKEY)
-    err = 0;                   /* Some parser didn't understand.  */
-
-  if (err)
-    return err;
-
-  if (parser->state.flags & ARGP_NO_ERRS)
-    {
-      parser->opt_data.opterr = 0;
-      if (parser->state.flags & ARGP_PARSE_ARGV0)
-       /* getopt always skips ARGV[0], so we have to fake it out.  As long
-          as OPTERR is 0, then it shouldn't actually try to access it.  */
-       parser->state.argv--, parser->state.argc++;
-    }
-  else
-    parser->opt_data.opterr = 1;       /* Print error messages.  */
-
-  if (parser->state.argv == argv && argv[0])
-    /* There's an argv[0]; use it for messages.  */
-    parser->state.name = __argp_base_name (argv[0]);
-  else
-    parser->state.name = __argp_short_program_name ();
-
-  return 0;
-}
-\f
-/* Free any storage consumed by PARSER (but not PARSER itself).  */
-static error_t
-parser_finalize (struct parser *parser,
-                error_t err, int arg_ebadkey, int *end_index)
-{
-  struct group *group;
-
-  if (err == EBADKEY && arg_ebadkey)
-    /* Suppress errors generated by unparsed arguments.  */
-    err = 0;
-
-  if (! err)
-    {
-      if (parser->state.next == parser->state.argc)
-       /* We successfully parsed all arguments!  Call all the parsers again,
-          just a few more times... */
-       {
-         for (group = parser->groups;
-              group < parser->egroup && (!err || err==EBADKEY);
-              group++)
-           if (group->args_processed == 0)
-             err = group_parse (group, &parser->state, ARGP_KEY_NO_ARGS, 0);
-         for (group = parser->egroup - 1;
-              group >= parser->groups && (!err || err==EBADKEY);
-              group--)
-           err = group_parse (group, &parser->state, ARGP_KEY_END, 0);
-
-         if (err == EBADKEY)
-           err = 0;            /* Some parser didn't understand.  */
-
-         /* Tell the user that all arguments are parsed.  */
-         if (end_index)
-           *end_index = parser->state.next;
-       }
-      else if (end_index)
-       /* Return any remaining arguments to the user.  */
-       *end_index = parser->state.next;
-      else
-       /* No way to return the remaining arguments, they must be bogus. */
-       {
-         if (!(parser->state.flags & ARGP_NO_ERRS)
-             && parser->state.err_stream)
-           fprintf (parser->state.err_stream,
-                    dgettext (parser->argp->argp_domain,
-                              "%s: Too many arguments\n"),
-                    parser->state.name);
-         err = EBADKEY;
-       }
-    }
-
-  /* Okay, we're all done, with either an error or success; call the parsers
-     to indicate which one.  */
-
-  if (err)
-    {
-      /* Maybe print an error message.  */
-      if (err == EBADKEY)
-       /* An appropriate message describing what the error was should have
-          been printed earlier.  */
-       __argp_state_help (&parser->state, parser->state.err_stream,
-                          ARGP_HELP_STD_ERR);
-
-      /* Since we didn't exit, give each parser an error indication.  */
-      for (group = parser->groups; group < parser->egroup; group++)
-       group_parse (group, &parser->state, ARGP_KEY_ERROR, 0);
-    }
-  else
-    /* Notify parsers of success, and propagate back values from parsers.  */
-    {
-      /* We pass over the groups in reverse order so that child groups are
-        given a chance to do there processing before passing back a value to
-        the parent.  */
-      for (group = parser->egroup - 1
-          ; group >= parser->groups && (!err || err == EBADKEY)
-          ; group--)
-       err = group_parse (group, &parser->state, ARGP_KEY_SUCCESS, 0);
-      if (err == EBADKEY)
-       err = 0;                /* Some parser didn't understand.  */
-    }
-
-  /* Call parsers once more, to do any final cleanup.  Errors are ignored.  */
-  for (group = parser->egroup - 1; group >= parser->groups; group--)
-    group_parse (group, &parser->state, ARGP_KEY_FINI, 0);
-
-  if (err == EBADKEY)
-    err = EINVAL;
-
-  free (parser->storage);
-
-  return err;
-}
-\f
-/* Call the user parsers to parse the non-option argument VAL, at the current
-   position, returning any error.  The state NEXT pointer is assumed to have
-   been adjusted (by getopt) to point after this argument; this function will
-   adjust it correctly to reflect however many args actually end up being
-   consumed.  */
-static error_t
-parser_parse_arg (struct parser *parser, char *val)
-{
-  /* Save the starting value of NEXT, first adjusting it so that the arg
-     we're parsing is again the front of the arg vector.  */
-  int index = --parser->state.next;
-  error_t err = EBADKEY;
-  struct group *group;
-  int key = 0;                 /* Which of ARGP_KEY_ARG[S] we used.  */
-
-  /* Try to parse the argument in each parser.  */
-  for (group = parser->groups
-       ; group < parser->egroup && err == EBADKEY
-       ; group++)
-    {
-      parser->state.next++;    /* For ARGP_KEY_ARG, consume the arg.  */
-      key = ARGP_KEY_ARG;
-      err = group_parse (group, &parser->state, key, val);
-
-      if (err == EBADKEY)
-       /* This parser doesn't like ARGP_KEY_ARG; try ARGP_KEY_ARGS instead. */
-       {
-         parser->state.next--; /* For ARGP_KEY_ARGS, put back the arg.  */
-         key = ARGP_KEY_ARGS;
-         err = group_parse (group, &parser->state, key, 0);
-       }
-    }
-
-  if (! err)
-    {
-      if (key == ARGP_KEY_ARGS)
-       /* The default for ARGP_KEY_ARGS is to assume that if NEXT isn't
-          changed by the user, *all* arguments should be considered
-          consumed.  */
-       parser->state.next = parser->state.argc;
-
-      if (parser->state.next > index)
-       /* Remember that we successfully processed a non-option
-          argument -- but only if the user hasn't gotten tricky and set
-          the clock back.  */
-       (--group)->args_processed += (parser->state.next - index);
-      else
-       /* The user wants to reparse some args, give getopt another try.  */
-       parser->try_getopt = 1;
-    }
-
-  return err;
-}
-\f
-/* Call the user parsers to parse the option OPT, with argument VAL, at the
-   current position, returning any error.  */
-static error_t
-parser_parse_opt (struct parser *parser, int opt, char *val)
-{
-  /* The group key encoded in the high bits; 0 for short opts or
-     group_number + 1 for long opts.  */
-  int group_key = opt >> USER_BITS;
-  error_t err = EBADKEY;
-
-  if (group_key == 0)
-    /* A short option.  By comparing OPT's position in SHORT_OPTS to the
-       various starting positions in each group's SHORT_END field, we can
-       determine which group OPT came from.  */
-    {
-      struct group *group;
-      char *short_index = strchr (parser->short_opts, opt);
-
-      if (short_index)
-       for (group = parser->groups; group < parser->egroup; group++)
-         if (group->short_end > short_index)
-           {
-             err = group_parse (group, &parser->state, opt,
-                                parser->opt_data.optarg);
-             break;
-           }
-    }
-  else
-    /* A long option.  We use shifts instead of masking for extracting
-       the user value in order to preserve the sign.  */
-    err =
-      group_parse (&parser->groups[group_key - 1], &parser->state,
-                  (opt << GROUP_BITS) >> GROUP_BITS,
-                  parser->opt_data.optarg);
-
-  if (err == EBADKEY)
-    /* At least currently, an option not recognized is an error in the
-       parser, because we pre-compute which parser is supposed to deal
-       with each option.  */
-    {
-      static const char bad_key_err[] =
-       N_("(PROGRAM ERROR) Option should have been recognized!?");
-      if (group_key == 0)
-       __argp_error (&parser->state, "-%c: %s", opt,
-                     dgettext (parser->argp->argp_domain, bad_key_err));
-      else
-       {
-         struct option *long_opt = parser->long_opts;
-         while (long_opt->val != opt && long_opt->name)
-           long_opt++;
-         __argp_error (&parser->state, "--%s: %s",
-                       long_opt->name ? long_opt->name : "???",
-                       dgettext (parser->argp->argp_domain, bad_key_err));
-       }
-    }
-
-  return err;
-}
-\f
-/* Parse the next argument in PARSER (as indicated by PARSER->state.next).
-   Any error from the parsers is returned, and *ARGP_EBADKEY indicates
-   whether a value of EBADKEY is due to an unrecognized argument (which is
-   generally not fatal).  */
-static error_t
-parser_parse_next (struct parser *parser, int *arg_ebadkey)
-{
-  int opt;
-  error_t err = 0;
-
-  if (parser->state.quoted && parser->state.next < parser->state.quoted)
-    /* The next argument pointer has been moved to before the quoted
-       region, so pretend we never saw the quoting `--', and give getopt
-       another chance.  If the user hasn't removed it, getopt will just
-       process it again.  */
-    parser->state.quoted = 0;
-
-  if (parser->try_getopt && !parser->state.quoted)
-    /* Give getopt a chance to parse this.  */
-    {
-      /* Put it back in OPTIND for getopt.  */
-      parser->opt_data.optind = parser->state.next;
-      /* Distinguish KEY_ERR from a real option.  */
-      parser->opt_data.optopt = KEY_END;
-      if (parser->state.flags & ARGP_LONG_ONLY)
-       opt = _getopt_long_only_r (parser->state.argc, parser->state.argv,
-                                  parser->short_opts, parser->long_opts, 0,
-                                  &parser->opt_data);
-      else
-       opt = _getopt_long_r (parser->state.argc, parser->state.argv,
-                             parser->short_opts, parser->long_opts, 0,
-                             &parser->opt_data);
-      /* And see what getopt did.  */
-      parser->state.next = parser->opt_data.optind;
-
-      if (opt == KEY_END)
-       /* Getopt says there are no more options, so stop using
-          getopt; we'll continue if necessary on our own.  */
-       {
-         parser->try_getopt = 0;
-         if (parser->state.next > 1
-             && strcmp (parser->state.argv[parser->state.next - 1], QUOTE)
-                  == 0)
-           /* Not only is this the end of the options, but it's a
-              `quoted' region, which may have args that *look* like
-              options, so we definitely shouldn't try to use getopt past
-              here, whatever happens.  */
-           parser->state.quoted = parser->state.next;
-       }
-      else if (opt == KEY_ERR && parser->opt_data.optopt != KEY_END)
-       /* KEY_ERR can have the same value as a valid user short
-          option, but in the case of a real error, getopt sets OPTOPT
-          to the offending character, which can never be KEY_END.  */
-       {
-         *arg_ebadkey = 0;
-         return EBADKEY;
-       }
-    }
-  else
-    opt = KEY_END;
-
-  if (opt == KEY_END)
-    {
-      /* We're past what getopt considers the options.  */
-      if (parser->state.next >= parser->state.argc
-         || (parser->state.flags & ARGP_NO_ARGS))
-       /* Indicate that we're done.  */
-       {
-         *arg_ebadkey = 1;
-         return EBADKEY;
-       }
-      else
-       /* A non-option arg; simulate what getopt might have done.  */
-       {
-         opt = KEY_ARG;
-         parser->opt_data.optarg = parser->state.argv[parser->state.next++];
-       }
-    }
-
-  if (opt == KEY_ARG)
-    /* A non-option argument; try each parser in turn.  */
-    err = parser_parse_arg (parser, parser->opt_data.optarg);
-  else
-    err = parser_parse_opt (parser, opt, parser->opt_data.optarg);
-
-  if (err == EBADKEY)
-    *arg_ebadkey = (opt == KEY_END || opt == KEY_ARG);
-
-  return err;
-}
-\f
-/* Parse the options strings in ARGC & ARGV according to the argp in ARGP.
-   FLAGS is one of the ARGP_ flags above.  If END_INDEX is non-NULL, the
-   index in ARGV of the first unparsed option is returned in it.  If an
-   unknown option is present, EINVAL is returned; if some parser routine
-   returned a non-zero value, it is returned; otherwise 0 is returned.  */
-error_t
-__argp_parse (const struct argp *argp, int argc, char **argv, unsigned flags,
-             int *end_index, void *input)
-{
-  error_t err;
-  struct parser parser;
-
-  /* If true, then err == EBADKEY is a result of a non-option argument failing
-     to be parsed (which in some cases isn't actually an error).  */
-  int arg_ebadkey = 0;
-
-#ifndef _LIBC
-  if (!(flags & ARGP_PARSE_ARGV0))
-    {
-#ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME
-      if (!program_invocation_name)
-       program_invocation_name = argv[0];
-#endif
-#ifdef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
-      if (!program_invocation_short_name)
-       program_invocation_short_name = __argp_base_name (argv[0]);
-#endif
-    }
-#endif
-
-  if (! (flags & ARGP_NO_HELP))
-    /* Add our own options.  */
-    {
-      struct argp_child *child = alloca (4 * sizeof (struct argp_child));
-      struct argp *top_argp = alloca (sizeof (struct argp));
-
-      /* TOP_ARGP has no options, it just serves to group the user & default
-        argps.  */
-      memset (top_argp, 0, sizeof (*top_argp));
-      top_argp->children = child;
-
-      memset (child, 0, 4 * sizeof (struct argp_child));
-
-      if (argp)
-       (child++)->argp = argp;
-      (child++)->argp = &argp_default_argp;
-      if (argp_program_version || argp_program_version_hook)
-       (child++)->argp = &argp_version_argp;
-      child->argp = 0;
-
-      argp = top_argp;
-    }
-
-  /* Construct a parser for these arguments.  */
-  err = parser_init (&parser, argp, argc, argv, flags, input);
-
-  if (! err)
-    /* Parse! */
-    {
-      while (! err)
-       err = parser_parse_next (&parser, &arg_ebadkey);
-      err = parser_finalize (&parser, err, arg_ebadkey, end_index);
-    }
-
-  return err;
-}
-#ifdef weak_alias
-weak_alias (__argp_parse, argp_parse)
-#endif
-\f
-/* Return the input field for ARGP in the parser corresponding to STATE; used
-   by the help routines.  */
-void *
-__argp_input (const struct argp *argp, const struct argp_state *state)
-{
-  if (state)
-    {
-      struct group *group;
-      struct parser *parser = state->pstate;
-
-      for (group = parser->groups; group < parser->egroup; group++)
-       if (group->argp == argp)
-         return group->input;
-    }
-
-  return 0;
-}
-#ifdef weak_alias
-weak_alias (__argp_input, _argp_input)
-#endif
diff --git a/lib/argp-pin.c b/lib/argp-pin.c
deleted file mode 100644 (file)
index 6707b0d..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Full and short program names for argp module
-   Copyright (C) 2005 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/>.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#ifndef HAVE_PROGRAM_INVOCATION_SHORT_NAME
-char *program_invocation_short_name = 0;
-#endif
-#ifndef HAVE_PROGRAM_INVOCATION_NAME
-char *program_invocation_name = 0;
-#endif
-
diff --git a/lib/argp-pv.c b/lib/argp-pv.c
deleted file mode 100644 (file)
index 411f6ed..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Default definition for ARGP_PROGRAM_VERSION.
-   Copyright (C) 1996, 1997, 1999, 2006 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Written by Miles Bader <miles@gnu.ai.mit.edu>.
-
-   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 set by the user program to a non-zero value, then a default option
-   --version is added (unless the ARGP_NO_HELP flag is used), which will
-   print this string followed by a newline and exit (unless the
-   ARGP_NO_EXIT flag is used).  Overridden by ARGP_PROGRAM_VERSION_HOOK.  */
-const char *argp_program_version;
diff --git a/lib/argp-pvh.c b/lib/argp-pvh.c
deleted file mode 100644 (file)
index 2ba037b..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Default definition for ARGP_PROGRAM_VERSION_HOOK.
-   Copyright (C) 1996, 1997, 1999, 2004 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Written by Miles Bader <miles@gnu.ai.mit.edu>.
-
-   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/>.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "argp.h"
-
-/* If set by the user program to a non-zero value, then a default option
-   --version is added (unless the ARGP_NO_HELP flag is used), which calls
-   this function with a stream to print the version to and a pointer to the
-   current parsing state, and then exits (unless the ARGP_NO_EXIT flag is
-   used).  This variable takes precedent over ARGP_PROGRAM_VERSION.  */
-void (*argp_program_version_hook) (FILE *stream, struct argp_state *state) = NULL;
diff --git a/lib/argp-xinl.c b/lib/argp-xinl.c
deleted file mode 100644 (file)
index 0904e9d..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Real definitions for extern inline functions in argp.h
-   Copyright (C) 1997, 1998, 2004 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Written by Miles Bader <miles@gnu.ai.mit.edu>.
-
-   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/>.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#if defined _LIBC || defined HAVE_FEATURES_H
-# include <features.h>
-#endif
-
-#ifndef __USE_EXTERN_INLINES
-# define __USE_EXTERN_INLINES  1
-#endif
-#define ARGP_EI
-#undef __OPTIMIZE__
-#define __OPTIMIZE__ 1
-#include "argp.h"
-
-/* Add weak aliases.  */
-#if _LIBC - 0 && defined (weak_alias)
-
-weak_alias (__argp_usage, argp_usage)
-weak_alias (__option_is_short, _option_is_short)
-weak_alias (__option_is_end, _option_is_end)
-
-#endif
diff --git a/lib/argp.h b/lib/argp.h
deleted file mode 100644 (file)
index 90c4528..0000000
+++ /dev/null
@@ -1,646 +0,0 @@
-/* Hierarchial argument parsing, layered over getopt.
-   Copyright (C) 1995-1999,2003-2008 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Written by Miles Bader <miles@gnu.ai.mit.edu>.
-
-   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 _ARGP_H
-#define _ARGP_H
-
-#include <stdio.h>
-#include <ctype.h>
-#include <getopt.h>
-#include <limits.h>
-
-#define __need_error_t
-#include <errno.h>
-
-#ifndef __THROW
-# define __THROW
-#endif
-#ifndef __NTH
-# define __NTH(fct) fct __THROW
-#endif
-
-#ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
-#  define __attribute__(Spec) /* empty */
-# endif
-/* The __-protected variants of `format' and `printf' attributes
-   are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) || __STRICT_ANSI__
-#  define __format__ format
-#  define __printf__ printf
-# endif
-#endif
-
-/* GCC 2.95 and later have "__restrict"; C99 compilers have
-   "restrict", and "configure" may have defined "restrict".
-   Other compilers use __restrict, __restrict__, and _Restrict, and
-   'configure' might #define 'restrict' to those words.  */
-#ifndef __restrict
-# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
-#  if 199901L <= __STDC_VERSION__
-#   define __restrict restrict
-#  else
-#   define __restrict
-#  endif
-# endif
-#endif
-
-#ifndef __error_t_defined
-typedef int error_t;
-# define __error_t_defined
-#endif
-\f
-#ifdef  __cplusplus
-extern "C" {
-#endif
-
-/* A description of a particular option.  A pointer to an array of
-   these is passed in the OPTIONS field of an argp structure.  Each option
-   entry can correspond to one long option and/or one short option; more
-   names for the same option can be added by following an entry in an option
-   array with options having the OPTION_ALIAS flag set.  */
-struct argp_option
-{
-  /* The long option name.  For more than one name for the same option, you
-     can use following options with the OPTION_ALIAS flag set.  */
-  const char *name;
-
-  /* What key is returned for this option.  If > 0 and printable, then it's
-     also accepted as a short option.  */
-  int key;
-
-  /* If non-NULL, this is the name of the argument associated with this
-     option, which is required unless the OPTION_ARG_OPTIONAL flag is set. */
-  const char *arg;
-
-  /* OPTION_ flags.  */
-  int flags;
-
-  /* The doc string for this option.  If both NAME and KEY are 0, This string
-     will be printed outdented from the normal option column, making it
-     useful as a group header (it will be the first thing printed in its
-     group); in this usage, it's conventional to end the string with a `:'.
-
-     Write the initial value as N_("TEXT") if you want xgettext to collect
-     it into a POT file.  */
-  const char *doc;
-
-  /* The group this option is in.  In a long help message, options are sorted
-     alphabetically within each group, and the groups presented in the order
-     0, 1, 2, ..., n, -m, ..., -2, -1.  Every entry in an options array with
-     if this field 0 will inherit the group number of the previous entry, or
-     zero if it's the first one, unless its a group header (NAME and KEY both
-     0), in which case, the previous entry + 1 is the default.  Automagic
-     options such as --help are put into group -1.  */
-  int group;
-};
-
-/* The argument associated with this option is optional.  */
-#define OPTION_ARG_OPTIONAL    0x1
-
-/* This option isn't displayed in any help messages.  */
-#define OPTION_HIDDEN          0x2
-
-/* This option is an alias for the closest previous non-alias option.  This
-   means that it will be displayed in the same help entry, and will inherit
-   fields other than NAME and KEY from the aliased option.  */
-#define OPTION_ALIAS           0x4
-
-/* This option isn't actually an option (and so should be ignored by the
-   actual option parser), but rather an arbitrary piece of documentation that
-   should be displayed in much the same manner as the options.  If this flag
-   is set, then the option NAME field is displayed unmodified (e.g., no `--'
-   prefix is added) at the left-margin (where a *short* option would normally
-   be displayed), and the documentation string in the normal place. The NAME
-   field will be translated using gettext, unless OPTION_NO_TRANS is set (see
-   below). For purposes of sorting, any leading whitespace and punctuation is
-   ignored, except that if the first non-whitespace character is not `-', this
-   entry is displayed after all options (and OPTION_DOC entries with a leading
-   `-') in the same group.  */
-#define OPTION_DOC             0x8
-
-/* This option shouldn't be included in `long' usage messages (but is still
-   included in help messages).  This is mainly intended for options that are
-   completely documented in an argp's ARGS_DOC field, in which case including
-   the option in the generic usage list would be redundant.  For instance,
-   if ARGS_DOC is "FOO BAR\n-x BLAH", and the `-x' option's purpose is to
-   distinguish these two cases, -x should probably be marked
-   OPTION_NO_USAGE.  */
-#define OPTION_NO_USAGE                0x10
-
-/* Valid only in conjunction with OPTION_DOC. This option disables translation
-   of option name. */
-#define OPTION_NO_TRANS         0x20
-
-\f
-struct argp;                   /* fwd declare this type */
-struct argp_state;             /* " */
-struct argp_child;             /* " */
-
-/* The type of a pointer to an argp parsing function.  */
-typedef error_t (*argp_parser_t) (int key, char *arg,
-                                 struct argp_state *state);
-
-/* What to return for unrecognized keys.  For special ARGP_KEY_ keys, such
-   returns will simply be ignored.  For user keys, this error will be turned
-   into EINVAL (if the call to argp_parse is such that errors are propagated
-   back to the user instead of exiting); returning EINVAL itself would result
-   in an immediate stop to parsing in *all* cases.  */
-#define ARGP_ERR_UNKNOWN       E2BIG /* Hurd should never need E2BIG.  XXX */
-
-/* Special values for the KEY argument to an argument parsing function.
-   ARGP_ERR_UNKNOWN should be returned if they aren't understood.
-
-   The sequence of keys to a parsing function is either (where each
-   uppercased word should be prefixed by `ARGP_KEY_' and opt is a user key):
-
-       INIT opt... NO_ARGS END SUCCESS  -- No non-option arguments at all
-   or  INIT (opt | ARG)... END SUCCESS  -- All non-option args parsed
-   or  INIT (opt | ARG)... SUCCESS      -- Some non-option arg unrecognized
-
-   The third case is where every parser returned ARGP_KEY_UNKNOWN for an
-   argument, in which case parsing stops at that argument (returning the
-   unparsed arguments to the caller of argp_parse if requested, or stopping
-   with an error message if not).
-
-   If an error occurs (either detected by argp, or because the parsing
-   function returned an error value), then the parser is called with
-   ARGP_KEY_ERROR, and no further calls are made.  */
-
-/* This is not an option at all, but rather a command line argument.  If a
-   parser receiving this key returns success, the fact is recorded, and the
-   ARGP_KEY_NO_ARGS case won't be used.  HOWEVER, if while processing the
-   argument, a parser function decrements the NEXT field of the state it's
-   passed, the option won't be considered processed; this is to allow you to
-   actually modify the argument (perhaps into an option), and have it
-   processed again.  */
-#define ARGP_KEY_ARG           0
-/* There are remaining arguments not parsed by any parser, which may be found
-   starting at (STATE->argv + STATE->next).  If success is returned, but
-   STATE->next left untouched, it's assumed that all arguments were consume,
-   otherwise, the parser should adjust STATE->next to reflect any arguments
-   consumed.  */
-#define ARGP_KEY_ARGS          0x1000006
-/* There are no more command line arguments at all.  */
-#define ARGP_KEY_END           0x1000001
-/* Because it's common to want to do some special processing if there aren't
-   any non-option args, user parsers are called with this key if they didn't
-   successfully process any non-option arguments.  Called just before
-   ARGP_KEY_END (where more general validity checks on previously parsed
-   arguments can take place).  */
-#define ARGP_KEY_NO_ARGS       0x1000002
-/* Passed in before any parsing is done.  Afterwards, the values of each
-   element of the CHILD_INPUT field, if any, in the state structure is
-   copied to each child's state to be the initial value of the INPUT field.  */
-#define ARGP_KEY_INIT          0x1000003
-/* Use after all other keys, including SUCCESS & END.  */
-#define ARGP_KEY_FINI          0x1000007
-/* Passed in when parsing has successfully been completed (even if there are
-   still arguments remaining).  */
-#define ARGP_KEY_SUCCESS       0x1000004
-/* Passed in if an error occurs.  */
-#define ARGP_KEY_ERROR         0x1000005
-
-/* An argp structure contains a set of options declarations, a function to
-   deal with parsing one, documentation string, a possible vector of child
-   argp's, and perhaps a function to filter help output.  When actually
-   parsing options, getopt is called with the union of all the argp
-   structures chained together through their CHILD pointers, with conflicts
-   being resolved in favor of the first occurrence in the chain.  */
-struct argp
-{
-  /* An array of argp_option structures, terminated by an entry with both
-     NAME and KEY having a value of 0.  */
-  const struct argp_option *options;
-
-  /* What to do with an option from this structure.  KEY is the key
-     associated with the option, and ARG is any associated argument (NULL if
-     none was supplied).  If KEY isn't understood, ARGP_ERR_UNKNOWN should be
-     returned.  If a non-zero, non-ARGP_ERR_UNKNOWN value is returned, then
-     parsing is stopped immediately, and that value is returned from
-     argp_parse().  For special (non-user-supplied) values of KEY, see the
-     ARGP_KEY_ definitions below.  */
-  argp_parser_t parser;
-
-  /* A string describing what other arguments are wanted by this program.  It
-     is only used by argp_usage to print the `Usage:' message.  If it
-     contains newlines, the strings separated by them are considered
-     alternative usage patterns, and printed on separate lines (lines after
-     the first are prefix by `  or: ' instead of `Usage:').  */
-  const char *args_doc;
-
-  /* If non-NULL, a string containing extra text to be printed before and
-     after the options in a long help message (separated by a vertical tab
-     `\v' character).
-     Write the initial value as N_("BEFORE-TEXT") "\v" N_("AFTER-TEXT") if
-     you want xgettext to collect the two pieces of text into a POT file.  */
-  const char *doc;
-
-  /* A vector of argp_children structures, terminated by a member with a 0
-     argp field, pointing to child argps should be parsed with this one.  Any
-     conflicts are resolved in favor of this argp, or early argps in the
-     CHILDREN list.  This field is useful if you use libraries that supply
-     their own argp structure, which you want to use in conjunction with your
-     own.  */
-  const struct argp_child *children;
-
-  /* If non-zero, this should be a function to filter the output of help
-     messages.  KEY is either a key from an option, in which case TEXT is
-     that option's help text, or a special key from the ARGP_KEY_HELP_
-     defines, below, describing which other help text TEXT is.  The function
-     should return either TEXT, if it should be used as-is, a replacement
-     string, which should be malloced, and will be freed by argp, or NULL,
-     meaning `print nothing'.  The value for TEXT is *after* any translation
-     has been done, so if any of the replacement text also needs translation,
-     that should be done by the filter function.  INPUT is either the input
-     supplied to argp_parse, or NULL, if argp_help was called directly.  */
-  char *(*help_filter) (int __key, const char *__text, void *__input);
-
-  /* If non-zero the strings used in the argp library are translated using
-     the domain described by this string.  Otherwise the currently installed
-     default domain is used.  */
-  const char *argp_domain;
-};
-
-/* Possible KEY arguments to a help filter function.  */
-#define ARGP_KEY_HELP_PRE_DOC  0x2000001 /* Help text preceeding options. */
-#define ARGP_KEY_HELP_POST_DOC 0x2000002 /* Help text following options. */
-#define ARGP_KEY_HELP_HEADER   0x2000003 /* Option header string. */
-#define ARGP_KEY_HELP_EXTRA    0x2000004 /* After all other documentation;
-                                            TEXT is NULL for this key.  */
-/* Explanatory note emitted when duplicate option arguments have been
-   suppressed.  */
-#define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005
-#define ARGP_KEY_HELP_ARGS_DOC 0x2000006 /* Argument doc string.  */
-\f
-/* When an argp has a non-zero CHILDREN field, it should point to a vector of
-   argp_child structures, each of which describes a subsidiary argp.  */
-struct argp_child
-{
-  /* The child parser.  */
-  const struct argp *argp;
-
-  /* Flags for this child.  */
-  int flags;
-
-  /* If non-zero, an optional header to be printed in help output before the
-     child options.  As a side-effect, a non-zero value forces the child
-     options to be grouped together; to achieve this effect without actually
-     printing a header string, use a value of "".  */
-  const char *header;
-
-  /* Where to group the child options relative to the other (`consolidated')
-     options in the parent argp; the values are the same as the GROUP field
-     in argp_option structs, but all child-groupings follow parent options at
-     a particular group level.  If both this field and HEADER are zero, then
-     they aren't grouped at all, but rather merged with the parent options
-     (merging the child's grouping levels with the parents).  */
-  int group;
-};
-\f
-/* Parsing state.  This is provided to parsing functions called by argp,
-   which may examine and, as noted, modify fields.  */
-struct argp_state
-{
-  /* The top level ARGP being parsed.  */
-  const struct argp *root_argp;
-
-  /* The argument vector being parsed.  May be modified.  */
-  int argc;
-  char **argv;
-
-  /* The index in ARGV of the next arg that to be parsed.  May be modified. */
-  int next;
-
-  /* The flags supplied to argp_parse.  May be modified.  */
-  unsigned flags;
-
-  /* While calling a parsing function with a key of ARGP_KEY_ARG, this is the
-     number of the current arg, starting at zero, and incremented after each
-     such call returns.  At all other times, this is the number of such
-     arguments that have been processed.  */
-  unsigned arg_num;
-
-  /* If non-zero, the index in ARGV of the first argument following a special
-     `--' argument (which prevents anything following being interpreted as an
-     option).  Only set once argument parsing has proceeded past this point. */
-  int quoted;
-
-  /* An arbitrary pointer passed in from the user.  */
-  void *input;
-  /* Values to pass to child parsers.  This vector will be the same length as
-     the number of children for the current parser.  */
-  void **child_inputs;
-
-  /* For the parser's use.  Initialized to 0.  */
-  void *hook;
-
-  /* The name used when printing messages.  This is initialized to ARGV[0],
-     or PROGRAM_INVOCATION_NAME if that is unavailable.  */
-  char *name;
-
-  /* Streams used when argp prints something.  */
-  FILE *err_stream;            /* For errors; initialized to stderr. */
-  FILE *out_stream;            /* For information; initialized to stdout. */
-
-  void *pstate;                        /* Private, for use by argp.  */
-};
-\f
-/* Flags for argp_parse (note that the defaults are those that are
-   convenient for program command line parsing): */
-
-/* Don't ignore the first element of ARGV.  Normally (and always unless
-   ARGP_NO_ERRS is set) the first element of the argument vector is
-   skipped for option parsing purposes, as it corresponds to the program name
-   in a command line.  */
-#define ARGP_PARSE_ARGV0  0x01
-
-/* Don't print error messages for unknown options to stderr; unless this flag
-   is set, ARGP_PARSE_ARGV0 is ignored, as ARGV[0] is used as the program
-   name in the error messages.  This flag implies ARGP_NO_EXIT (on the
-   assumption that silent exiting upon errors is bad behaviour).  */
-#define ARGP_NO_ERRS   0x02
-
-/* Don't parse any non-option args.  Normally non-option args are parsed by
-   calling the parse functions with a key of ARGP_KEY_ARG, and the actual arg
-   as the value.  Since it's impossible to know which parse function wants to
-   handle it, each one is called in turn, until one returns 0 or an error
-   other than ARGP_ERR_UNKNOWN; if an argument is handled by no one, the
-   argp_parse returns prematurely (but with a return value of 0).  If all
-   args have been parsed without error, all parsing functions are called one
-   last time with a key of ARGP_KEY_END.  This flag needn't normally be set,
-   as the normal behavior is to stop parsing as soon as some argument can't
-   be handled.  */
-#define ARGP_NO_ARGS   0x04
-
-/* Parse options and arguments in the same order they occur on the command
-   line -- normally they're rearranged so that all options come first. */
-#define ARGP_IN_ORDER  0x08
-
-/* Don't provide the standard long option --help, which causes usage and
-      option help information to be output to stdout, and exit (0) called. */
-#define ARGP_NO_HELP   0x10
-
-/* Don't exit on errors (they may still result in error messages).  */
-#define ARGP_NO_EXIT   0x20
-
-/* Use the gnu getopt `long-only' rules for parsing arguments.  */
-#define ARGP_LONG_ONLY 0x40
-
-/* Turns off any message-printing/exiting options.  */
-#define ARGP_SILENT    (ARGP_NO_EXIT | ARGP_NO_ERRS | ARGP_NO_HELP)
-
-/* Parse the options strings in ARGC & ARGV according to the options in ARGP.
-   FLAGS is one of the ARGP_ flags above.  If ARG_INDEX is non-NULL, the
-   index in ARGV of the first unparsed option is returned in it.  If an
-   unknown option is present, ARGP_ERR_UNKNOWN is returned; if some parser
-   routine returned a non-zero value, it is returned; otherwise 0 is
-   returned.  This function may also call exit unless the ARGP_NO_HELP flag
-   is set.  INPUT is a pointer to a value to be passed in to the parser.  */
-extern error_t argp_parse (const struct argp *__restrict __argp,
-                          int /*argc*/, char **__restrict /*argv*/,
-                          unsigned __flags, int *__restrict __arg_index,
-                          void *__restrict __input);
-extern error_t __argp_parse (const struct argp *__restrict __argp,
-                            int /*argc*/, char **__restrict /*argv*/,
-                            unsigned __flags, int *__restrict __arg_index,
-                            void *__restrict __input);
-\f
-/* Global variables.  */
-
-/* GNULIB makes sure both program_invocation_name and
-   program_invocation_short_name are available */
-#ifdef GNULIB_PROGRAM_INVOCATION_NAME
-extern char *program_invocation_name;
-# undef HAVE_DECL_PROGRAM_INVOCATION_NAME
-# define HAVE_DECL_PROGRAM_INVOCATION_NAME 1
-#endif
-
-#ifdef GNULIB_PROGRAM_INVOCATION_SHORT_NAME
-extern char *program_invocation_short_name;
-# undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
-# define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1
-#endif
-
-/* If defined or set by the user program to a non-zero value, then a default
-   option --version is added (unless the ARGP_NO_HELP flag is used), which
-   will print this string followed by a newline and exit (unless the
-   ARGP_NO_EXIT flag is used).  Overridden by ARGP_PROGRAM_VERSION_HOOK.  */
-extern const char *argp_program_version;
-
-/* If defined or set by the user program to a non-zero value, then a default
-   option --version is added (unless the ARGP_NO_HELP flag is used), which
-   calls this function with a stream to print the version to and a pointer to
-   the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is
-   used).  This variable takes precedent over ARGP_PROGRAM_VERSION.  */
-extern void (*argp_program_version_hook) (FILE *__restrict __stream,
-                                         struct argp_state *__restrict
-                                         __state);
-
-/* If defined or set by the user program, it should point to string that is
-   the bug-reporting address for the program.  It will be printed by
-   argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various
-   standard help messages), embedded in a sentence that says something like
-   `Report bugs to ADDR.'.  */
-extern const char *argp_program_bug_address;
-
-/* The exit status that argp will use when exiting due to a parsing error.
-   If not defined or set by the user program, this defaults to EX_USAGE from
-   <sysexits.h>.  */
-extern error_t argp_err_exit_status;
-\f
-/* Flags for argp_help.  */
-#define ARGP_HELP_USAGE                0x01 /* a Usage: message. */
-#define ARGP_HELP_SHORT_USAGE  0x02 /*  " but don't actually print options. */
-#define ARGP_HELP_SEE          0x04 /* a `Try ... for more help' message. */
-#define ARGP_HELP_LONG         0x08 /* a long help message. */
-#define ARGP_HELP_PRE_DOC      0x10 /* doc string preceding long help.  */
-#define ARGP_HELP_POST_DOC     0x20 /* doc string following long help.  */
-#define ARGP_HELP_DOC          (ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC)
-#define ARGP_HELP_BUG_ADDR     0x40 /* bug report address */
-#define ARGP_HELP_LONG_ONLY    0x80 /* modify output appropriately to
-                                       reflect ARGP_LONG_ONLY mode.  */
-
-/* These ARGP_HELP flags are only understood by argp_state_help.  */
-#define ARGP_HELP_EXIT_ERR     0x100 /* Call exit(1) instead of returning.  */
-#define ARGP_HELP_EXIT_OK      0x200 /* Call exit(0) instead of returning.  */
-
-/* The standard thing to do after a program command line parsing error, if an
-   error message has already been printed.  */
-#define ARGP_HELP_STD_ERR \
-  (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
-/* The standard thing to do after a program command line parsing error, if no
-   more specific error message has been printed.  */
-#define ARGP_HELP_STD_USAGE \
-  (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR)
-/* The standard thing to do in response to a --help option.  */
-#define ARGP_HELP_STD_HELP \
-  (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \
-   | ARGP_HELP_DOC | ARGP_HELP_BUG_ADDR)
-
-/* Output a usage message for ARGP to STREAM.  FLAGS are from the set
-   ARGP_HELP_*.  */
-extern void argp_help (const struct argp *__restrict __argp,
-                      FILE *__restrict __stream,
-                      unsigned __flags, char *__restrict __name);
-extern void __argp_help (const struct argp *__restrict __argp,
-                        FILE *__restrict __stream, unsigned __flags,
-                        char *__name);
-\f
-/* The following routines are intended to be called from within an argp
-   parsing routine (thus taking an argp_state structure as the first
-   argument).  They may or may not print an error message and exit, depending
-   on the flags in STATE -- in any case, the caller should be prepared for
-   them *not* to exit, and should return an appropiate error after calling
-   them.  [argp_usage & argp_error should probably be called argp_state_...,
-   but they're used often enough that they should be short]  */
-
-/* Output, if appropriate, a usage message for STATE to STREAM.  FLAGS are
-   from the set ARGP_HELP_*.  */
-extern void argp_state_help (const struct argp_state *__restrict __state,
-                            FILE *__restrict __stream,
-                            unsigned int __flags);
-extern void __argp_state_help (const struct argp_state *__restrict __state,
-                              FILE *__restrict __stream,
-                              unsigned int __flags);
-
-#if _LIBC || !defined __USE_EXTERN_INLINES
-/* Possibly output the standard usage message for ARGP to stderr and exit.  */
-extern void argp_usage (const struct argp_state *__state);
-extern void __argp_usage (const struct argp_state *__state);
-#endif
-
-/* If appropriate, print the printf string FMT and following args, preceded
-   by the program name and `:', to stderr, and followed by a `Try ... --help'
-   message, then exit (1).  */
-extern void argp_error (const struct argp_state *__restrict __state,
-                       const char *__restrict __fmt, ...)
-     __attribute__ ((__format__ (__printf__, 2, 3)));
-extern void __argp_error (const struct argp_state *__restrict __state,
-                         const char *__restrict __fmt, ...)
-     __attribute__ ((__format__ (__printf__, 2, 3)));
-
-/* Similar to the standard gnu error-reporting function error(), but will
-   respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print
-   to STATE->err_stream.  This is useful for argument parsing code that is
-   shared between program startup (when exiting is desired) and runtime
-   option parsing (when typically an error code is returned instead).  The
-   difference between this function and argp_error is that the latter is for
-   *parsing errors*, and the former is for other problems that occur during
-   parsing but don't reflect a (syntactic) problem with the input.  */
-extern void argp_failure (const struct argp_state *__restrict __state,
-                         int __status, int __errnum,
-                         const char *__restrict __fmt, ...)
-     __attribute__ ((__format__ (__printf__, 4, 5)));
-extern void __argp_failure (const struct argp_state *__restrict __state,
-                           int __status, int __errnum,
-                           const char *__restrict __fmt, ...)
-     __attribute__ ((__format__ (__printf__, 4, 5)));
-
-#if _LIBC || !defined __USE_EXTERN_INLINES
-/* Returns true if the option OPT is a valid short option.  */
-extern int _option_is_short (const struct argp_option *__opt) __THROW;
-extern int __option_is_short (const struct argp_option *__opt) __THROW;
-
-/* Returns true if the option OPT is in fact the last (unused) entry in an
-   options array.  */
-extern int _option_is_end (const struct argp_option *__opt) __THROW;
-extern int __option_is_end (const struct argp_option *__opt) __THROW;
-#endif
-
-/* Return the input field for ARGP in the parser corresponding to STATE; used
-   by the help routines.  */
-extern void *_argp_input (const struct argp *__restrict __argp,
-                         const struct argp_state *__restrict __state)
-     __THROW;
-extern void *__argp_input (const struct argp *__restrict __argp,
-                          const struct argp_state *__restrict __state)
-     __THROW;
-\f
-#ifdef __USE_EXTERN_INLINES
-
-# if !_LIBC
-#  define __argp_usage argp_usage
-#  define __argp_state_help argp_state_help
-#  define __option_is_short _option_is_short
-#  define __option_is_end _option_is_end
-# endif
-
-# ifndef ARGP_EI
-#  ifdef __GNUC__
-    /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
-       inline semantics, unless -fgnu89-inline is used.  It defines a macro
-       __GNUC_STDC_INLINE__ to indicate this situation or a macro
-       __GNUC_GNU_INLINE__ to indicate the opposite situation.
-       GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline
-       semantics but warns, unless -fgnu89-inline is used:
-         warning: C99 inline functions are not supported; using GNU89
-         warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute
-       It defines a macro __GNUC_GNU_INLINE__ to indicate this situation.  */
-#   if defined __GNUC_STDC_INLINE__
-#    define ARGP_EI __inline__
-#   elif defined __GNUC_GNU_INLINE__
-#    define ARGP_EI extern __inline__ __attribute__ ((__gnu_inline__))
-#   else
-#    define ARGP_EI extern __inline__
-#   endif
-#  else
-    /* With other compilers, assume the ISO C99 meaning of 'inline', if
-       the compiler supports 'inline' at all.  */
-#   define ARGP_EI inline
-#  endif
-# endif
-
-ARGP_EI void
-__argp_usage (const struct argp_state *__state)
-{
-  __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE);
-}
-
-ARGP_EI int
-__NTH (__option_is_short (const struct argp_option *__opt))
-{
-  if (__opt->flags & OPTION_DOC)
-    return 0;
-  else
-    {
-      int __key = __opt->key;
-      return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
-    }
-}
-
-ARGP_EI int
-__NTH (__option_is_end (const struct argp_option *__opt))
-{
-  return !__opt->key && !__opt->name && !__opt->doc && !__opt->group;
-}
-
-# if !_LIBC
-#  undef __argp_usage
-#  undef __argp_state_help
-#  undef __option_is_short
-#  undef __option_is_end
-# endif
-#endif /* Use extern inlines.  */
-
-#ifdef  __cplusplus
-}
-#endif
-
-#endif /* argp.h */
diff --git a/lib/asnprintf.c b/lib/asnprintf.c
deleted file mode 100644 (file)
index 754a271..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Formatted output to strings.
-   Copyright (C) 1999, 2002, 2006 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#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/lib/at-func.c b/lib/at-func.c
deleted file mode 100644 (file)
index c7963fe..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Define an at-style functions like fstatat, unlinkat, fchownat, etc.
-   Copyright (C) 2006 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 */
-
-#define CALL_FUNC(F)                           \
-  (AT_FUNC_USE_F1_COND                         \
-    ? AT_FUNC_F1 (F AT_FUNC_POST_FILE_ARGS)    \
-    : AT_FUNC_F2 (F AT_FUNC_POST_FILE_ARGS))
-
-/* Call AT_FUNC_F1 or AT_FUNC_F2 (testing AT_FUNC_USE_F1_COND to
-   determine which) to operate on FILE, which is in the directory
-   open on descriptor FD.  If possible, do it without changing the
-   working directory.  Otherwise, resort to using save_cwd/fchdir,
-   then AT_FUNC_F?/restore_cwd.  If either the save_cwd or the restore_cwd
-   fails, then give a diagnostic and exit nonzero.  */
-int
-AT_FUNC_NAME (int fd, char const *file AT_FUNC_POST_FILE_PARAM_DECLS)
-{
-  struct saved_cwd saved_cwd;
-  int saved_errno;
-  int err;
-
-  if (fd == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file))
-    return CALL_FUNC (file);
-
-  {
-    char buf[OPENAT_BUFFER_SIZE];
-    char *proc_file = openat_proc_name (buf, fd, file);
-    if (proc_file)
-      {
-       int proc_result = CALL_FUNC (proc_file);
-       int proc_errno = errno;
-       if (proc_file != buf)
-         free (proc_file);
-       /* If the syscall succeeds, or if it fails with an unexpected
-          errno value, then return right away.  Otherwise, fall through
-          and resort to using save_cwd/restore_cwd.  */
-       if (0 <= proc_result)
-         return proc_result;
-       if (! EXPECTED_ERRNO (proc_errno))
-         {
-           errno = proc_errno;
-           return proc_result;
-         }
-      }
-  }
-
-  if (save_cwd (&saved_cwd) != 0)
-    openat_save_fail (errno);
-
-  if (fchdir (fd) != 0)
-    {
-      saved_errno = errno;
-      free_cwd (&saved_cwd);
-      errno = saved_errno;
-      return -1;
-    }
-
-  err = CALL_FUNC (file);
-  saved_errno = (err < 0 ? errno : 0);
-
-  if (restore_cwd (&saved_cwd) != 0)
-    openat_restore_fail (errno);
-
-  free_cwd (&saved_cwd);
-
-  if (saved_errno)
-    errno = saved_errno;
-  return err;
-}
-#undef CALL_FUNC
diff --git a/lib/backupfile.c b/lib/backupfile.c
deleted file mode 100644 (file)
index 1420edd..0000000
+++ /dev/null
@@ -1,362 +0,0 @@
-/* backupfile.c -- make Emacs style backup file names
-
-   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 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 and David MacKenzie.
-   Some algorithms adapted from GNU Emacs.  */
-
-#include <config.h>
-
-#include "backupfile.h"
-
-#include "argmatch.h"
-#include "dirname.h"
-#include "xalloc.h"
-
-#include <errno.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <limits.h>
-
-#include <unistd.h>
-
-#include <dirent.h>
-#ifndef _D_EXACT_NAMLEN
-# define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name)
-#endif
-#if D_INO_IN_DIRENT
-# define REAL_DIR_ENTRY(dp) ((dp)->d_ino != 0)
-#else
-# define REAL_DIR_ENTRY(dp) 1
-#endif
-
-#if ! (HAVE_PATHCONF && defined _PC_NAME_MAX)
-# define pathconf(file, option) (errno = -1)
-#endif
-
-#ifndef _POSIX_NAME_MAX
-# define _POSIX_NAME_MAX 14
-#endif
-#ifndef SIZE_MAX
-# define SIZE_MAX ((size_t) -1)
-#endif
-
-#if defined _XOPEN_NAME_MAX
-# define NAME_MAX_MINIMUM _XOPEN_NAME_MAX
-#else
-# define NAME_MAX_MINIMUM _POSIX_NAME_MAX
-#endif
-
-#ifndef HAVE_DOS_FILE_NAMES
-# define HAVE_DOS_FILE_NAMES 0
-#endif
-#ifndef HAVE_LONG_FILE_NAMES
-# define HAVE_LONG_FILE_NAMES 0
-#endif
-
-/* ISDIGIT differs from isdigit, as follows:
-   - Its arg may be any int or unsigned int; it need not be an unsigned char
-     or EOF.
-   - It's typically faster.
-   POSIX says that only '0' through '9' are digits.  Prefer ISDIGIT to
-   ISDIGIT unless it's important to use the locale's definition
-   of `digit' even when the host does not conform to POSIX.  */
-#define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
-
-/* The results of opendir() in this file are not used with dirfd and fchdir,
-   therefore save some unnecessary work in fchdir.c.  */
-#undef opendir
-#undef closedir
-
-/* The extension added to file names to produce a simple (as opposed
-   to numbered) backup file name. */
-char const *simple_backup_suffix = "~";
-
-
-/* If FILE (which was of length FILELEN before an extension was
-   appended to it) is too long, replace the extension with the single
-   char E.  If the result is still too long, remove the char just
-   before E.  */
-
-static void
-check_extension (char *file, size_t filelen, char e)
-{
-  char *base = last_component (file);
-  size_t baselen = base_len (base);
-  size_t baselen_max = HAVE_LONG_FILE_NAMES ? 255 : NAME_MAX_MINIMUM;
-
-  if (HAVE_DOS_FILE_NAMES || NAME_MAX_MINIMUM < baselen)
-    {
-      /* The new base name is long enough to require a pathconf check.  */
-      long name_max;
-
-      /* Temporarily modify the buffer into its parent directory name,
-        invoke pathconf on the directory, and then restore the buffer.  */
-      char tmp[sizeof "."];
-      memcpy (tmp, base, sizeof ".");
-      strcpy (base, ".");
-      errno = 0;
-      name_max = pathconf (file, _PC_NAME_MAX);
-      if (0 <= name_max || errno == 0)
-       {
-         long size = baselen_max = name_max;
-         if (name_max != size)
-           baselen_max = SIZE_MAX;
-       }
-      memcpy (base, tmp, sizeof ".");
-    }
-
-  if (HAVE_DOS_FILE_NAMES && baselen_max <= 12)
-    {
-      /* Live within DOS's 8.3 limit.  */
-      char *dot = strchr (base, '.');
-      if (!dot)
-       baselen_max = 8;
-      else
-       {
-         char const *second_dot = strchr (dot + 1, '.');
-         baselen_max = (second_dot
-                        ? second_dot - base
-                        : dot + 1 - base + 3);
-       }
-    }
-
-  if (baselen_max < baselen)
-    {
-      baselen = file + filelen - base;
-      if (baselen_max <= baselen)
-       baselen = baselen_max - 1;
-      base[baselen] = e;
-      base[baselen + 1] = '\0';
-    }
-}
-
-/* Returned values for NUMBERED_BACKUP.  */
-
-enum numbered_backup_result
-  {
-    /* The new backup name is the same length as an existing backup
-       name, so it's valid for that directory.  */
-    BACKUP_IS_SAME_LENGTH,
-
-    /* Some backup names already exist, but the returned name is longer
-       than any of them, and its length should be checked.  */
-    BACKUP_IS_LONGER,
-
-    /* There are no existing backup names.  The new name's length
-       should be checked.  */
-    BACKUP_IS_NEW
-  };
-
-/* *BUFFER contains a file name.  Store into *BUFFER the next backup
-   name for the named file, with a version number greater than all the
-   existing numbered backups.  Reallocate *BUFFER as necessary; its
-   initial allocated size is BUFFER_SIZE, which must be at least 4
-   bytes longer than the file name to make room for the initially
-   appended ".~1".  FILELEN is the length of the original file name.
-   The returned value indicates what kind of backup was found.  If an
-   I/O or other read error occurs, use the highest backup number that
-   was found.  */
-
-static enum numbered_backup_result
-numbered_backup (char **buffer, size_t buffer_size, size_t filelen)
-{
-  enum numbered_backup_result result = BACKUP_IS_NEW;
-  DIR *dirp;
-  struct dirent *dp;
-  char *buf = *buffer;
-  size_t versionlenmax = 1;
-  char *base = last_component (buf);
-  size_t base_offset = base - buf;
-  size_t baselen = base_len (base);
-
-  /* Temporarily modify the buffer into its parent directory name,
-     open the directory, and then restore the buffer.  */
-  char tmp[sizeof "."];
-  memcpy (tmp, base, sizeof ".");
-  strcpy (base, ".");
-  dirp = opendir (buf);
-  memcpy (base, tmp, sizeof ".");
-  strcpy (base + baselen, ".~1~");
-
-  if (!dirp)
-    return result;
-
-  while ((dp = readdir (dirp)) != NULL)
-    {
-      char const *p;
-      char *q;
-      bool all_9s;
-      size_t versionlen;
-      size_t new_buflen;
-
-      if (! REAL_DIR_ENTRY (dp) || _D_EXACT_NAMLEN (dp) < baselen + 4)
-       continue;
-
-      if (memcmp (buf + base_offset, dp->d_name, baselen + 2) != 0)
-       continue;
-
-      p = dp->d_name + baselen + 2;
-
-      /* Check whether this file has a version number and if so,
-        whether it is larger.  Use string operations rather than
-        integer arithmetic, to avoid problems with integer overflow.  */
-
-      if (! ('1' <= *p && *p <= '9'))
-       continue;
-      all_9s = (*p == '9');
-      for (versionlen = 1; ISDIGIT (p[versionlen]); versionlen++)
-       all_9s &= (p[versionlen] == '9');
-
-      if (! (p[versionlen] == '~' && !p[versionlen + 1]
-            && (versionlenmax < versionlen
-                || (versionlenmax == versionlen
-                    && memcmp (buf + filelen + 2, p, versionlen) <= 0))))
-       continue;
-
-      /* This directory has the largest version number seen so far.
-        Append this highest numbered extension to the file name,
-        prepending '0' to the number if it is all 9s.  */
-
-      versionlenmax = all_9s + versionlen;
-      result = (all_9s ? BACKUP_IS_LONGER : BACKUP_IS_SAME_LENGTH);
-      new_buflen = filelen + 2 + versionlenmax + 1;
-      if (buffer_size <= new_buflen)
-       {
-         buf = xnrealloc (buf, 2, new_buflen);
-         buffer_size = new_buflen * 2;
-       }
-      q = buf + filelen;
-      *q++ = '.';
-      *q++ = '~';
-      *q = '0';
-      q += all_9s;
-      memcpy (q, p, versionlen + 2);
-
-      /* Add 1 to the version number.  */
-
-      q += versionlen;
-      while (*--q == '9')
-       *q = '0';
-      ++*q;
-    }
-
-  closedir (dirp);
-  *buffer = buf;
-  return result;
-}
-
-/* Return the name of the new backup file for the existing file FILE,
-   allocated with malloc.  Report an error and fail if out of memory.
-   Do not call this function if backup_type == no_backups.  */
-
-char *
-find_backup_file_name (char const *file, enum backup_type backup_type)
-{
-  size_t filelen = strlen (file);
-  char *s;
-  size_t ssize;
-  bool simple = true;
-
-  /* Allow room for simple or ".~N~" backups.  The guess must be at
-     least sizeof ".~1~", but otherwise will be adjusted as needed.  */
-  size_t simple_backup_suffix_size = strlen (simple_backup_suffix) + 1;
-  size_t backup_suffix_size_guess = simple_backup_suffix_size;
-  enum { GUESS = sizeof ".~12345~" };
-  if (backup_suffix_size_guess < GUESS)
-    backup_suffix_size_guess = GUESS;
-
-  ssize = filelen + backup_suffix_size_guess + 1;
-  s = xmalloc (ssize);
-  memcpy (s, file, filelen + 1);
-
-  if (backup_type != simple_backups)
-    switch (numbered_backup (&s, ssize, filelen))
-      {
-      case BACKUP_IS_SAME_LENGTH:
-       return s;
-
-      case BACKUP_IS_LONGER:
-       simple = false;
-       break;
-
-      case BACKUP_IS_NEW:
-       simple = (backup_type == numbered_existing_backups);
-       break;
-      }
-
-  if (simple)
-    memcpy (s + filelen, simple_backup_suffix, simple_backup_suffix_size);
-  check_extension (s, filelen, '~');
-  return s;
-}
-
-static char const * const backup_args[] =
-{
-  /* In a series of synonyms, present the most meaningful first, so
-     that argmatch_valid be more readable. */
-  "none", "off",
-  "simple", "never",
-  "existing", "nil",
-  "numbered", "t",
-  NULL
-};
-
-static const enum backup_type backup_types[] =
-{
-  no_backups, no_backups,
-  simple_backups, simple_backups,
-  numbered_existing_backups, numbered_existing_backups,
-  numbered_backups, numbered_backups
-};
-
-/* Ensure that these two vectors have the same number of elements,
-   not counting the final NULL in the first one.  */
-ARGMATCH_VERIFY (backup_args, backup_types);
-
-/* Return the type of backup specified by VERSION.
-   If VERSION is NULL or the empty string, return numbered_existing_backups.
-   If VERSION is invalid or ambiguous, fail with a diagnostic appropriate
-   for the specified CONTEXT.  Unambiguous abbreviations are accepted.  */
-
-enum backup_type
-get_version (char const *context, char const *version)
-{
-  if (version == 0 || *version == 0)
-    return numbered_existing_backups;
-  else
-    return XARGMATCH (context, version, backup_args, backup_types);
-}
-
-
-/* Return the type of backup specified by VERSION.
-   If VERSION is NULL, use the value of the envvar VERSION_CONTROL.
-   If the specified string is invalid or ambiguous, fail with a diagnostic
-   appropriate for the specified CONTEXT.
-   Unambiguous abbreviations are accepted.  */
-
-enum backup_type
-xget_version (char const *context, char const *version)
-{
-  if (version && *version)
-    return get_version (context, version);
-  else
-    return get_version ("$VERSION_CONTROL", getenv ("VERSION_CONTROL"));
-}
diff --git a/lib/backupfile.h b/lib/backupfile.h
deleted file mode 100644 (file)
index 3cfdd8c..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/* backupfile.h -- declarations for making Emacs style backup file names
-
-   Copyright (C) 1990, 1991, 1992, 1997, 1998, 1999, 2003, 2004 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 BACKUPFILE_H_
-# define BACKUPFILE_H_
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-
-/* When to make backup files. */
-enum backup_type
-{
-  /* Never make backups. */
-  no_backups,
-
-  /* Make simple backups of every file. */
-  simple_backups,
-
-  /* Make numbered backups of files that already have numbered backups,
-     and simple backups of the others. */
-  numbered_existing_backups,
-
-  /* Make numbered backups of every file. */
-  numbered_backups
-};
-
-# define VALID_BACKUP_TYPE(Type)       \
-  ((unsigned int) (Type) <= numbered_backups)
-
-extern char const *simple_backup_suffix;
-
-char *find_backup_file_name (char const *, enum backup_type);
-enum backup_type get_version (char const *context, char const *arg);
-enum backup_type xget_version (char const *context, char const *arg);
-void addext (char *, char const *, int);
-
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif /* ! BACKUPFILE_H_ */
diff --git a/lib/basename.c b/lib/basename.c
deleted file mode 100644 (file)
index 426ed40..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/* basename.c -- return the last element in a file name
-
-   Copyright (C) 1990, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006 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>
-
-#include "dirname.h"
-
-#include <string.h>
-#include "xalloc.h"
-#include "xstrndup.h"
-
-/* Return the address of the last file name component of NAME.  If
-   NAME has no relative file name components because it is a file
-   system root, return the empty string.  */
-
-char *
-last_component (char const *name)
-{
-  char const *base = name + FILE_SYSTEM_PREFIX_LEN (name);
-  char const *p;
-  bool saw_slash = false;
-
-  while (ISSLASH (*base))
-    base++;
-
-  for (p = base; *p; p++)
-    {
-      if (ISSLASH (*p))
-       saw_slash = true;
-      else if (saw_slash)
-       {
-         base = p;
-         saw_slash = false;
-       }
-    }
-
-  return (char *) base;
-}
-
-
-/* In general, we can't use the builtin `basename' function if available,
-   since it has different meanings in different environments.
-   In some environments the builtin `basename' modifies its argument.
-
-   Return the last file name component of NAME, allocated with
-   xmalloc.  On systems with drive letters, a leading "./"
-   distinguishes relative names that would otherwise look like a drive
-   letter.  Unlike POSIX basename(), NAME cannot be NULL,
-   base_name("") returns "", and the first trailing slash is not
-   stripped.
-
-   If lstat (NAME) would succeed, then { chdir (dir_name (NAME));
-   lstat (base_name (NAME)); } will access the same file.  Likewise,
-   if the sequence { chdir (dir_name (NAME));
-   rename (base_name (NAME), "foo"); } succeeds, you have renamed NAME
-   to "foo" in the same directory NAME was in.  */
-
-char *
-base_name (char const *name)
-{
-  char const *base = last_component (name);
-  size_t length;
-
-  /* If there is no last component, then name is a file system root or the
-     empty string.  */
-  if (! *base)
-    return xstrndup (name, base_len (name));
-
-  /* Collapse a sequence of trailing slashes into one.  */
-  length = base_len (base);
-  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
-     with pure POSIX semantics, this is not an issue.  */
-  if (FILE_SYSTEM_PREFIX_LEN (base))
-    {
-      char *p = xmalloc (length + 3);
-      p[0] = '.';
-      p[1] = '/';
-      memcpy (p + 2, base, length);
-      p[length + 2] = '\0';
-      return p;
-    }
-
-  /* Finally, copy the basename.  */
-  return xstrndup (base, length);
-}
-
-/* Return the length of the basename NAME.  Typically NAME is the
-   value returned by base_name or last_component.  Act like strlen
-   (NAME), except omit all trailing slashes.  */
-
-size_t
-base_len (char const *name)
-{
-  size_t len;
-  size_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name);
-
-  for (len = strlen (name);  1 < len && ISSLASH (name[len - 1]);  len--)
-    continue;
-
-  if (DOUBLE_SLASH_IS_DISTINCT_ROOT && len == 1
-      && ISSLASH (name[0]) && ISSLASH (name[1]) && ! name[2])
-    return 2;
-
-  if (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && prefix_len
-      && len == prefix_len && ISSLASH (name[prefix_len]))
-    return prefix_len + 1;
-
-  return len;
-}
diff --git a/lib/btowc.c b/lib/btowc.c
deleted file mode 100644 (file)
index 7f3b966..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Convert unibyte character to wide character.
-   Copyright (C) 2008 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2008.
-
-   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 <wchar.h>
-
-#include <stdio.h>
-
-wint_t
-btowc (int c)
-{
-  if (c != EOF)
-    {
-      char buf[1];
-      wchar_t wc;
-
-      buf[0] = c;
-      if (mbtowc (&wc, buf, 1) >= 0)
-       return wc;
-    }
-  return WEOF;
-}
diff --git a/lib/c-ctype.c b/lib/c-ctype.c
deleted file mode 100644 (file)
index a669d7a..0000000
+++ /dev/null
@@ -1,398 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Character handling in C locale.
-
-   Copyright 2000-2003, 2006 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, write to the Free Software Foundation,
-Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#include <config.h>
-
-/* Specification.  */
-#define NO_C_CTYPE_MACROS
-#include "c-ctype.h"
-
-/* The function isascii is not locale dependent. Its use in EBCDIC is
-   questionable. */
-bool
-c_isascii (int c)
-{
-  return (c >= 0x00 && c <= 0x7f);
-}
-
-bool
-c_isalnum (int c)
-{
-#if C_CTYPE_CONSECUTIVE_DIGITS \
-    && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
-#if C_CTYPE_ASCII
-  return ((c >= '0' && c <= '9')
-          || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z'));
-#else
-  return ((c >= '0' && c <= '9')
-          || (c >= 'A' && c <= 'Z')
-          || (c >= 'a' && c <= 'z'));
-#endif
-#else
-  switch (c)
-    {
-    case '0': case '1': case '2': case '3': case '4': case '5':
-    case '6': case '7': case '8': case '9':
-    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
-    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
-    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
-    case 'Y': case 'Z':
-    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
-    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
-    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
-    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
-    case 'y': case 'z':
-      return 1;
-    default:
-      return 0;
-    }
-#endif
-}
-
-bool
-c_isalpha (int c)
-{
-#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
-#if C_CTYPE_ASCII
-  return ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z');
-#else
-  return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'));
-#endif
-#else
-  switch (c)
-    {
-    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
-    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
-    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
-    case 'Y': case 'Z':
-    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
-    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
-    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
-    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
-    case 'y': case 'z':
-      return 1;
-    default:
-      return 0;
-    }
-#endif
-}
-
-bool
-c_isblank (int c)
-{
-  return (c == ' ' || c == '\t');
-}
-
-bool
-c_iscntrl (int c)
-{
-#if C_CTYPE_ASCII
-  return ((c & ~0x1f) == 0 || c == 0x7f);
-#else
-  switch (c)
-    {
-    case ' ': case '!': case '"': case '#': case '$': case '%':
-    case '&': case '\'': case '(': case ')': case '*': case '+':
-    case ',': case '-': case '.': case '/':
-    case '0': case '1': case '2': case '3': case '4': case '5':
-    case '6': case '7': case '8': case '9':
-    case ':': case ';': case '<': case '=': case '>': case '?':
-    case '@':
-    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
-    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
-    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
-    case 'Y': case 'Z':
-    case '[': case '\\': case ']': case '^': case '_': case '`':
-    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
-    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
-    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
-    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
-    case 'y': case 'z':
-    case '{': case '|': case '}': case '~':
-      return 0;
-    default:
-      return 1;
-    }
-#endif
-}
-
-bool
-c_isdigit (int c)
-{
-#if C_CTYPE_CONSECUTIVE_DIGITS
-  return (c >= '0' && c <= '9');
-#else
-  switch (c)
-    {
-    case '0': case '1': case '2': case '3': case '4': case '5':
-    case '6': case '7': case '8': case '9':
-      return 1;
-    default:
-      return 0;
-    }
-#endif
-}
-
-bool
-c_islower (int c)
-{
-#if C_CTYPE_CONSECUTIVE_LOWERCASE
-  return (c >= 'a' && c <= 'z');
-#else
-  switch (c)
-    {
-    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
-    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
-    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
-    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
-    case 'y': case 'z':
-      return 1;
-    default:
-      return 0;
-    }
-#endif
-}
-
-bool
-c_isgraph (int c)
-{
-#if C_CTYPE_ASCII
-  return (c >= '!' && c <= '~');
-#else
-  switch (c)
-    {
-    case '!': case '"': case '#': case '$': case '%': case '&':
-    case '\'': case '(': case ')': case '*': case '+': case ',':
-    case '-': case '.': case '/':
-    case '0': case '1': case '2': case '3': case '4': case '5':
-    case '6': case '7': case '8': case '9':
-    case ':': case ';': case '<': case '=': case '>': case '?':
-    case '@':
-    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
-    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
-    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
-    case 'Y': case 'Z':
-    case '[': case '\\': case ']': case '^': case '_': case '`':
-    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
-    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
-    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
-    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
-    case 'y': case 'z':
-    case '{': case '|': case '}': case '~':
-      return 1;
-    default:
-      return 0;
-    }
-#endif
-}
-
-bool
-c_isprint (int c)
-{
-#if C_CTYPE_ASCII
-  return (c >= ' ' && c <= '~');
-#else
-  switch (c)
-    {
-    case ' ': case '!': case '"': case '#': case '$': case '%':
-    case '&': case '\'': case '(': case ')': case '*': case '+':
-    case ',': case '-': case '.': case '/':
-    case '0': case '1': case '2': case '3': case '4': case '5':
-    case '6': case '7': case '8': case '9':
-    case ':': case ';': case '<': case '=': case '>': case '?':
-    case '@':
-    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
-    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
-    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
-    case 'Y': case 'Z':
-    case '[': case '\\': case ']': case '^': case '_': case '`':
-    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
-    case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
-    case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
-    case 's': case 't': case 'u': case 'v': case 'w': case 'x':
-    case 'y': case 'z':
-    case '{': case '|': case '}': case '~':
-      return 1;
-    default:
-      return 0;
-    }
-#endif
-}
-
-bool
-c_ispunct (int c)
-{
-#if C_CTYPE_ASCII
-  return ((c >= '!' && c <= '~')
-          && !((c >= '0' && c <= '9')
-               || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z')));
-#else
-  switch (c)
-    {
-    case '!': case '"': case '#': case '$': case '%': case '&':
-    case '\'': case '(': case ')': case '*': case '+': case ',':
-    case '-': case '.': case '/':
-    case ':': case ';': case '<': case '=': case '>': case '?':
-    case '@':
-    case '[': case '\\': case ']': case '^': case '_': case '`':
-    case '{': case '|': case '}': case '~':
-      return 1;
-    default:
-      return 0;
-    }
-#endif
-}
-
-bool
-c_isspace (int c)
-{
-  return (c == ' ' || c == '\t'
-          || c == '\n' || c == '\v' || c == '\f' || c == '\r');
-}
-
-bool
-c_isupper (int c)
-{
-#if C_CTYPE_CONSECUTIVE_UPPERCASE
-  return (c >= 'A' && c <= 'Z');
-#else
-  switch (c)
-    {
-    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-    case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
-    case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
-    case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
-    case 'Y': case 'Z':
-      return 1;
-    default:
-      return 0;
-    }
-#endif
-}
-
-bool
-c_isxdigit (int c)
-{
-#if C_CTYPE_CONSECUTIVE_DIGITS \
-    && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
-#if C_CTYPE_ASCII
-  return ((c >= '0' && c <= '9')
-          || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'F'));
-#else
-  return ((c >= '0' && c <= '9')
-          || (c >= 'A' && c <= 'F')
-          || (c >= 'a' && c <= 'f'));
-#endif
-#else
-  switch (c)
-    {
-    case '0': case '1': case '2': case '3': case '4': case '5':
-    case '6': case '7': case '8': case '9':
-    case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
-      return 1;
-    default:
-      return 0;
-    }
-#endif
-}
-
-int
-c_tolower (int c)
-{
-#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
-  return (c >= 'A' && c <= 'Z' ? c - 'A' + 'a' : c);
-#else
-  switch (c)
-    {
-    case 'A': return 'a';
-    case 'B': return 'b';
-    case 'C': return 'c';
-    case 'D': return 'd';
-    case 'E': return 'e';
-    case 'F': return 'f';
-    case 'G': return 'g';
-    case 'H': return 'h';
-    case 'I': return 'i';
-    case 'J': return 'j';
-    case 'K': return 'k';
-    case 'L': return 'l';
-    case 'M': return 'm';
-    case 'N': return 'n';
-    case 'O': return 'o';
-    case 'P': return 'p';
-    case 'Q': return 'q';
-    case 'R': return 'r';
-    case 'S': return 's';
-    case 'T': return 't';
-    case 'U': return 'u';
-    case 'V': return 'v';
-    case 'W': return 'w';
-    case 'X': return 'x';
-    case 'Y': return 'y';
-    case 'Z': return 'z';
-    default: return c;
-    }
-#endif
-}
-
-int
-c_toupper (int c)
-{
-#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
-  return (c >= 'a' && c <= 'z' ? c - 'a' + 'A' : c);
-#else
-  switch (c)
-    {
-    case 'a': return 'A';
-    case 'b': return 'B';
-    case 'c': return 'C';
-    case 'd': return 'D';
-    case 'e': return 'E';
-    case 'f': return 'F';
-    case 'g': return 'G';
-    case 'h': return 'H';
-    case 'i': return 'I';
-    case 'j': return 'J';
-    case 'k': return 'K';
-    case 'l': return 'L';
-    case 'm': return 'M';
-    case 'n': return 'N';
-    case 'o': return 'O';
-    case 'p': return 'P';
-    case 'q': return 'Q';
-    case 'r': return 'R';
-    case 's': return 'S';
-    case 't': return 'T';
-    case 'u': return 'U';
-    case 'v': return 'V';
-    case 'w': return 'W';
-    case 'x': return 'X';
-    case 'y': return 'Y';
-    case 'z': return 'Z';
-    default: return c;
-    }
-#endif
-}
diff --git a/lib/c-ctype.h b/lib/c-ctype.h
deleted file mode 100644 (file)
index a0ab083..0000000
+++ /dev/null
@@ -1,297 +0,0 @@
-/* -*- 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>,
-   except that they have the C (POSIX) locale hardwired, whereas the
-   <ctype.h> functions' behaviour depends on the current locale set via
-   setlocale.
-
-   Copyright (C) 2000-2003, 2006, 2008 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, write to the Free Software Foundation,
-Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef C_CTYPE_H
-#define C_CTYPE_H
-
-#include <stdbool.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* The functions defined in this file assume the "C" locale and a character
-   set without diacritics (ASCII-US or EBCDIC-US or something like that).
-   Even if the "C" locale on a particular system is an extension of the ASCII
-   character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it
-   is ISO-8859-1), the functions in this file recognize only the ASCII
-   characters.  */
-
-
-/* Check whether the ASCII optimizations apply. */
-
-/* ANSI C89 (and ISO C99 5.2.1.3 too) already guarantees that
-   '0', '1', ..., '9' have consecutive integer values.  */
-#define C_CTYPE_CONSECUTIVE_DIGITS 1
-
-#if ('A' <= 'Z') \
-    && ('A' + 1 == 'B') && ('B' + 1 == 'C') && ('C' + 1 == 'D') \
-    && ('D' + 1 == 'E') && ('E' + 1 == 'F') && ('F' + 1 == 'G') \
-    && ('G' + 1 == 'H') && ('H' + 1 == 'I') && ('I' + 1 == 'J') \
-    && ('J' + 1 == 'K') && ('K' + 1 == 'L') && ('L' + 1 == 'M') \
-    && ('M' + 1 == 'N') && ('N' + 1 == 'O') && ('O' + 1 == 'P') \
-    && ('P' + 1 == 'Q') && ('Q' + 1 == 'R') && ('R' + 1 == 'S') \
-    && ('S' + 1 == 'T') && ('T' + 1 == 'U') && ('U' + 1 == 'V') \
-    && ('V' + 1 == 'W') && ('W' + 1 == 'X') && ('X' + 1 == 'Y') \
-    && ('Y' + 1 == 'Z')
-#define C_CTYPE_CONSECUTIVE_UPPERCASE 1
-#endif
-
-#if ('a' <= 'z') \
-    && ('a' + 1 == 'b') && ('b' + 1 == 'c') && ('c' + 1 == 'd') \
-    && ('d' + 1 == 'e') && ('e' + 1 == 'f') && ('f' + 1 == 'g') \
-    && ('g' + 1 == 'h') && ('h' + 1 == 'i') && ('i' + 1 == 'j') \
-    && ('j' + 1 == 'k') && ('k' + 1 == 'l') && ('l' + 1 == 'm') \
-    && ('m' + 1 == 'n') && ('n' + 1 == 'o') && ('o' + 1 == 'p') \
-    && ('p' + 1 == 'q') && ('q' + 1 == 'r') && ('r' + 1 == 's') \
-    && ('s' + 1 == 't') && ('t' + 1 == 'u') && ('u' + 1 == 'v') \
-    && ('v' + 1 == 'w') && ('w' + 1 == 'x') && ('x' + 1 == 'y') \
-    && ('y' + 1 == 'z')
-#define C_CTYPE_CONSECUTIVE_LOWERCASE 1
-#endif
-
-#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
-    && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
-    && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
-    && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
-    && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
-    && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
-    && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
-    && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
-    && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
-    && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
-    && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
-    && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
-    && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
-    && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
-    && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
-    && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
-    && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
-    && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
-    && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
-    && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
-    && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
-    && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
-    && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)
-/* The character set is ASCII or one of its variants or extensions, not EBCDIC.
-   Testing the value of '\n' and '\r' is not relevant.  */
-#define C_CTYPE_ASCII 1
-#endif
-
-
-/* Function declarations. */
-
-/* Unlike the functions in <ctype.h>, which require an argument in the range
-   of the 'unsigned char' type, the functions here operate on values that are
-   in the 'unsigned char' range or in the 'char' range.  In other words,
-   when you have a 'char' value, you need to cast it before using it as
-   argument to a <ctype.h> function:
-
-         const char *s = ...;
-         if (isalpha ((unsigned char) *s)) ...
-
-   but you don't need to cast it for the functions defined in this file:
-
-         const char *s = ...;
-         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);
-
-
-#if defined __GNUC__ && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ && !defined NO_C_CTYPE_MACROS
-
-/* ASCII optimizations. */
-
-#undef c_isascii
-#define c_isascii(c) \
-  ({ int __c = (c); \
-     (__c >= 0x00 && __c <= 0x7f); \
-   })
-
-#if C_CTYPE_CONSECUTIVE_DIGITS \
-    && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
-#if C_CTYPE_ASCII
-#undef c_isalnum
-#define c_isalnum(c) \
-  ({ int __c = (c); \
-     ((__c >= '0' && __c <= '9') \
-      || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z')); \
-   })
-#else
-#undef c_isalnum
-#define c_isalnum(c) \
-  ({ int __c = (c); \
-     ((__c >= '0' && __c <= '9') \
-      || (__c >= 'A' && __c <= 'Z') \
-      || (__c >= 'a' && __c <= 'z')); \
-   })
-#endif
-#endif
-
-#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
-#if C_CTYPE_ASCII
-#undef c_isalpha
-#define c_isalpha(c) \
-  ({ int __c = (c); \
-     ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z'); \
-   })
-#else
-#undef c_isalpha
-#define c_isalpha(c) \
-  ({ int __c = (c); \
-     ((__c >= 'A' && __c <= 'Z') || (__c >= 'a' && __c <= 'z')); \
-   })
-#endif
-#endif
-
-#undef c_isblank
-#define c_isblank(c) \
-  ({ int __c = (c); \
-     (__c == ' ' || __c == '\t'); \
-   })
-
-#if C_CTYPE_ASCII
-#undef c_iscntrl
-#define c_iscntrl(c) \
-  ({ int __c = (c); \
-     ((__c & ~0x1f) == 0 || __c == 0x7f); \
-   })
-#endif
-
-#if C_CTYPE_CONSECUTIVE_DIGITS
-#undef c_isdigit
-#define c_isdigit(c) \
-  ({ int __c = (c); \
-     (__c >= '0' && __c <= '9'); \
-   })
-#endif
-
-#if C_CTYPE_CONSECUTIVE_LOWERCASE
-#undef c_islower
-#define c_islower(c) \
-  ({ int __c = (c); \
-     (__c >= 'a' && __c <= 'z'); \
-   })
-#endif
-
-#if C_CTYPE_ASCII
-#undef c_isgraph
-#define c_isgraph(c) \
-  ({ int __c = (c); \
-     (__c >= '!' && __c <= '~'); \
-   })
-#endif
-
-#if C_CTYPE_ASCII
-#undef c_isprint
-#define c_isprint(c) \
-  ({ int __c = (c); \
-     (__c >= ' ' && __c <= '~'); \
-   })
-#endif
-
-#if C_CTYPE_ASCII
-#undef c_ispunct
-#define c_ispunct(c) \
-  ({ int _c = (c); \
-     (c_isgraph (_c) && ! c_isalnum (_c)); \
-   })
-#endif
-
-#undef c_isspace
-#define c_isspace(c) \
-  ({ int __c = (c); \
-     (__c == ' ' || __c == '\t' \
-      || __c == '\n' || __c == '\v' || __c == '\f' || __c == '\r'); \
-   })
-
-#if C_CTYPE_CONSECUTIVE_UPPERCASE
-#undef c_isupper
-#define c_isupper(c) \
-  ({ int __c = (c); \
-     (__c >= 'A' && __c <= 'Z'); \
-   })
-#endif
-
-#if C_CTYPE_CONSECUTIVE_DIGITS \
-    && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
-#if C_CTYPE_ASCII
-#undef c_isxdigit
-#define c_isxdigit(c) \
-  ({ int __c = (c); \
-     ((__c >= '0' && __c <= '9') \
-      || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'F')); \
-   })
-#else
-#undef c_isxdigit
-#define c_isxdigit(c) \
-  ({ int __c = (c); \
-     ((__c >= '0' && __c <= '9') \
-      || (__c >= 'A' && __c <= 'F') \
-      || (__c >= 'a' && __c <= 'f')); \
-   })
-#endif
-#endif
-
-#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
-#undef c_tolower
-#define c_tolower(c) \
-  ({ int __c = (c); \
-     (__c >= 'A' && __c <= 'Z' ? __c - 'A' + 'a' : __c); \
-   })
-#undef c_toupper
-#define c_toupper(c) \
-  ({ int __c = (c); \
-     (__c >= 'a' && __c <= 'z' ? __c - 'a' + 'A' : __c); \
-   })
-#endif
-
-#endif /* optimizing for speed */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* C_CTYPE_H */
diff --git a/lib/canonicalize-lgpl.c b/lib/canonicalize-lgpl.c
deleted file mode 100644 (file)
index 3aaa310..0000000
+++ /dev/null
@@ -1,362 +0,0 @@
-/* Return the canonical absolute name of a given file.
-   Copyright (C) 1996-2003, 2005-2008 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
-   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>
-
-/* Avoid a clash of our rpl_realpath() function with the prototype in
-   <stdlib.h> on Solaris 2.5.1.  */
-#undef realpath
-
-#if !HAVE_CANONICALIZE_FILE_NAME || defined _LIBC
-
-#include <alloca.h>
-
-/* Specification.  */
-#include "canonicalize.h"
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H || defined _LIBC
-# include <unistd.h>
-#endif
-
-#include <limits.h>
-
-#if HAVE_SYS_PARAM_H || defined _LIBC
-# include <sys/param.h>
-#endif
-#ifndef MAXSYMLINKS
-# define MAXSYMLINKS 20
-#endif
-
-#include <sys/stat.h>
-
-#include <errno.h>
-#ifndef _LIBC
-# define __set_errno(e) errno = (e)
-# ifndef ENAMETOOLONG
-#  define ENAMETOOLONG EINVAL
-# endif
-#endif
-
-#ifdef _LIBC
-# include <shlib-compat.h>
-#else
-# define SHLIB_COMPAT(lib, introduced, obsoleted) 0
-# define versioned_symbol(lib, local, symbol, version)
-# define compat_symbol(lib, local, symbol, version)
-# define weak_alias(local, symbol)
-# define __canonicalize_file_name canonicalize_file_name
-# define __realpath rpl_realpath
-# include "pathmax.h"
-# include "malloca.h"
-# if HAVE_GETCWD
-#  ifdef VMS
-    /* We want the directory in Unix syntax, not in VMS syntax.  */
-#   define __getcwd(buf, max) getcwd (buf, max, 0)
-#  else
-#   define __getcwd getcwd
-#  endif
-# else
-#  define __getcwd(buf, max) getwd (buf)
-# endif
-# define __readlink readlink
-  /* On systems without symbolic links, call stat() instead of lstat().  */
-# if !defined S_ISLNK && !HAVE_READLINK
-#  define lstat stat
-# endif
-#endif
-
-/* Return the canonical absolute name of file NAME.  A canonical name
-   does not contain any `.', `..' components nor any repeated path
-   separators ('/') or symlinks.  All path components must exist.  If
-   RESOLVED is null, the result is malloc'd; otherwise, if the
-   canonical name is PATH_MAX chars or more, returns null with `errno'
-   set to ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
-   returns the name in RESOLVED.  If the name cannot be resolved and
-   RESOLVED is non-NULL, it contains the path of the first component
-   that cannot be resolved.  If the path can be resolved, RESOLVED
-   holds the same value as the value returned.  */
-
-char *
-__realpath (const char *name, char *resolved)
-{
-  char *rpath, *dest, *extra_buf = NULL;
-  const char *start, *end, *rpath_limit;
-  long int path_max;
-#if HAVE_READLINK
-  int num_links = 0;
-#endif
-
-  if (name == NULL)
-    {
-      /* As per Single Unix Specification V2 we must return an error if
-        either parameter is a null pointer.  We extend this to allow
-        the RESOLVED parameter to be NULL in case the we are expected to
-        allocate the room for the return value.  */
-      __set_errno (EINVAL);
-      return NULL;
-    }
-
-  if (name[0] == '\0')
-    {
-      /* As per Single Unix Specification V2 we must return an error if
-        the name argument points to an empty string.  */
-      __set_errno (ENOENT);
-      return NULL;
-    }
-
-#ifdef PATH_MAX
-  path_max = PATH_MAX;
-#else
-  path_max = pathconf (name, _PC_PATH_MAX);
-  if (path_max <= 0)
-    path_max = 1024;
-#endif
-
-  if (resolved == NULL)
-    {
-      rpath = malloc (path_max);
-      if (rpath == NULL)
-       {
-         /* It's easier to set errno to ENOMEM than to rely on the
-            'malloc-posix' gnulib module.  */
-         errno = ENOMEM;
-         return NULL;
-       }
-    }
-  else
-    rpath = resolved;
-  rpath_limit = rpath + path_max;
-
-  if (name[0] != '/')
-    {
-      if (!__getcwd (rpath, path_max))
-       {
-         rpath[0] = '\0';
-         goto error;
-       }
-      dest = strchr (rpath, '\0');
-    }
-  else
-    {
-      rpath[0] = '/';
-      dest = rpath + 1;
-    }
-
-  for (start = end = name; *start; start = end)
-    {
-#ifdef _LIBC
-      struct stat64 st;
-#else
-      struct stat st;
-#endif
-
-      /* Skip sequence of multiple path-separators.  */
-      while (*start == '/')
-       ++start;
-
-      /* Find end of path component.  */
-      for (end = start; *end && *end != '/'; ++end)
-       /* Nothing.  */;
-
-      if (end - start == 0)
-       break;
-      else if (end - start == 1 && start[0] == '.')
-       /* nothing */;
-      else if (end - start == 2 && start[0] == '.' && start[1] == '.')
-       {
-         /* Back up to previous component, ignore if at root already.  */
-         if (dest > rpath + 1)
-           while ((--dest)[-1] != '/');
-       }
-      else
-       {
-         size_t new_size;
-
-         if (dest[-1] != '/')
-           *dest++ = '/';
-
-         if (dest + (end - start) >= rpath_limit)
-           {
-             ptrdiff_t dest_offset = dest - rpath;
-             char *new_rpath;
-
-             if (resolved)
-               {
-                 __set_errno (ENAMETOOLONG);
-                 if (dest > rpath + 1)
-                   dest--;
-                 *dest = '\0';
-                 goto error;
-               }
-             new_size = rpath_limit - rpath;
-             if (end - start + 1 > path_max)
-               new_size += end - start + 1;
-             else
-               new_size += path_max;
-             new_rpath = (char *) realloc (rpath, new_size);
-             if (new_rpath == NULL)
-               {
-                 /* It's easier to set errno to ENOMEM than to rely on the
-                    'realloc-posix' gnulib module.  */
-                 errno = ENOMEM;
-                 goto error;
-               }
-             rpath = new_rpath;
-             rpath_limit = rpath + new_size;
-
-             dest = rpath + dest_offset;
-           }
-
-#ifdef _LIBC
-         dest = __mempcpy (dest, start, end - start);
-#else
-         memcpy (dest, start, end - start);
-         dest += end - start;
-#endif
-         *dest = '\0';
-
-#ifdef _LIBC
-         if (__lxstat64 (_STAT_VER, rpath, &st) < 0)
-#else
-         if (lstat (rpath, &st) < 0)
-#endif
-           goto error;
-
-#if HAVE_READLINK
-         if (S_ISLNK (st.st_mode))
-           {
-             char *buf;
-             size_t len;
-             int n;
-
-             if (++num_links > MAXSYMLINKS)
-               {
-                 __set_errno (ELOOP);
-                 goto error;
-               }
-
-             buf = malloca (path_max);
-             if (!buf)
-               {
-                 errno = ENOMEM;
-                 goto error;
-               }
-
-             n = __readlink (rpath, buf, path_max - 1);
-             if (n < 0)
-               {
-                 int saved_errno = errno;
-                 freea (buf);
-                 errno = saved_errno;
-                 goto error;
-               }
-             buf[n] = '\0';
-
-             if (!extra_buf)
-               {
-                 extra_buf = malloca (path_max);
-                 if (!extra_buf)
-                   {
-                     freea (buf);
-                     errno = ENOMEM;
-                     goto error;
-                   }
-               }
-
-             len = strlen (end);
-             if ((long int) (n + len) >= path_max)
-               {
-                 freea (buf);
-                 __set_errno (ENAMETOOLONG);
-                 goto error;
-               }
-
-             /* Careful here, end may be a pointer into extra_buf... */
-             memmove (&extra_buf[n], end, len + 1);
-             name = end = memcpy (extra_buf, buf, n);
-
-             if (buf[0] == '/')
-               dest = rpath + 1;       /* It's an absolute symlink */
-             else
-               /* Back up to previous component, ignore if at root already: */
-               if (dest > rpath + 1)
-                 while ((--dest)[-1] != '/');
-           }
-#endif
-       }
-    }
-  if (dest > rpath + 1 && dest[-1] == '/')
-    --dest;
-  *dest = '\0';
-
-  if (extra_buf)
-    freea (extra_buf);
-
-  return resolved ? memcpy (resolved, rpath, dest - rpath + 1) : rpath;
-
-error:
-  {
-    int saved_errno = errno;
-    if (extra_buf)
-      freea (extra_buf);
-    if (resolved)
-      strcpy (resolved, rpath);
-    else
-      free (rpath);
-    errno = saved_errno;
-  }
-  return NULL;
-}
-#ifdef _LIBC
-versioned_symbol (libc, __realpath, realpath, GLIBC_2_3);
-#endif
-
-
-#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3)
-char *
-__old_realpath (const char *name, char *resolved)
-{
-  if (resolved == NULL)
-    {
-      __set_errno (EINVAL);
-      return NULL;
-    }
-
-  return __realpath (name, resolved);
-}
-compat_symbol (libc, __old_realpath, realpath, GLIBC_2_0);
-#endif
-
-
-char *
-__canonicalize_file_name (const char *name)
-{
-  return __realpath (name, NULL);
-}
-weak_alias (__canonicalize_file_name, canonicalize_file_name)
-
-#else
-
-/* This declaration is solely to ensure that after preprocessing
-   this file is never empty.  */
-typedef int dummy;
-
-#endif
diff --git a/lib/canonicalize.h b/lib/canonicalize.h
deleted file mode 100644 (file)
index 8ca4fb4..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Return the canonical absolute name of a given file.
-   Copyright (C) 1996-2007 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 CANONICALIZE_H_
-# define CANONICALIZE_H_
-
-# if GNULIB_CANONICALIZE
-enum canonicalize_mode_t
-  {
-    /* All components must exist.  */
-    CAN_EXISTING = 0,
-
-    /* All components excluding last one must exist.  */
-    CAN_ALL_BUT_LAST = 1,
-
-    /* No requirements on components existence.  */
-    CAN_MISSING = 2
-  };
-typedef enum canonicalize_mode_t canonicalize_mode_t;
-
-/* Return a malloc'd string containing the canonical absolute name of
-   the named file.  This acts like canonicalize_file_name, except that
-   whether components must exist depends on the canonicalize_mode_t
-   argument.  */
-char *canonicalize_filename_mode (const char *, canonicalize_mode_t);
-# endif
-
-# if HAVE_DECL_CANONICALIZE_FILE_NAME
-#  include <stdlib.h>
-# else
-/* Return a malloc'd string containing the canonical absolute name of
-   the named file.  If any file name component does not exist or is a
-   symlink to a nonexistent file, return NULL.  A canonical name does
-   not contain any `.', `..' components nor any repeated file name
-   separators ('/') or symlinks.  */
-char *canonicalize_file_name (const char *);
-# endif
-
-#endif /* !CANONICALIZE_H_ */
diff --git a/lib/chdir-long.c b/lib/chdir-long.c
deleted file mode 100644 (file)
index 291b58c..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-/* provide a chdir function that tries not to fail due to ENAMETOOLONG
-   Copyright (C) 2004, 2005, 2006, 2007, 2008 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 */
-
-#include <config.h>
-
-#include "chdir-long.h"
-
-#include <fcntl.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <string.h>
-#include <errno.h>
-#include <stdio.h>
-#include <assert.h>
-
-#include "openat.h"
-
-#ifndef PATH_MAX
-# error "compile this file only if your system defines PATH_MAX"
-#endif
-
-struct cd_buf
-{
-  int fd;
-};
-
-static inline void
-cdb_init (struct cd_buf *cdb)
-{
-  cdb->fd = AT_FDCWD;
-}
-
-static inline int
-cdb_fchdir (struct cd_buf const *cdb)
-{
-  return fchdir (cdb->fd);
-}
-
-static inline void
-cdb_free (struct cd_buf const *cdb)
-{
-  if (0 <= cdb->fd)
-    {
-      bool close_fail = close (cdb->fd);
-      assert (! close_fail);
-    }
-}
-
-/* Given a file descriptor of an open directory (or AT_FDCWD), CDB->fd,
-   try to open the CDB->fd-relative directory, DIR.  If the open succeeds,
-   update CDB->fd with the resulting descriptor, close the incoming file
-   descriptor, and return zero.  Upon failure, return -1 and set errno.  */
-static int
-cdb_advance_fd (struct cd_buf *cdb, char const *dir)
-{
-  int new_fd = openat (cdb->fd, dir,
-                      O_RDONLY | O_DIRECTORY | O_NOCTTY | O_NONBLOCK);
-  if (new_fd < 0)
-    return -1;
-
-  cdb_free (cdb);
-  cdb->fd = new_fd;
-
-  return 0;
-}
-
-/* Return a pointer to the first non-slash in S.  */
-static inline char *
-find_non_slash (char const *s)
-{
-  size_t n_slash = strspn (s, "/");
-  return (char *) s + n_slash;
-}
-
-/* This is a function much like chdir, but without the PATH_MAX limitation
-   on the length of the directory name.  A significant difference is that
-   it must be able to modify (albeit only temporarily) the directory
-   name.  It handles an arbitrarily long directory name by operating
-   on manageable portions of the name.  On systems without the openat
-   syscall, this means changing the working directory to more and more
-   `distant' points along the long directory name and then restoring
-   the working directory.  If any of those attempts to save or restore
-   the working directory fails, this function exits nonzero.
-
-   Note that this function may still fail with errno == ENAMETOOLONG, but
-   only if the specified directory name contains a component that is long
-   enough to provoke such a failure all by itself (e.g. if the component
-   has length PATH_MAX or greater on systems that define PATH_MAX).  */
-
-int
-chdir_long (char *dir)
-{
-  int e = chdir (dir);
-  if (e == 0 || errno != ENAMETOOLONG)
-    return e;
-
-  {
-    size_t len = strlen (dir);
-    char *dir_end = dir + len;
-    struct cd_buf cdb;
-    size_t n_leading_slash;
-
-    cdb_init (&cdb);
-
-    /* If DIR is the empty string, then the chdir above
-       must have failed and set errno to ENOENT.  */
-    assert (0 < len);
-    assert (PATH_MAX <= len);
-
-    /* Count leading slashes.  */
-    n_leading_slash = strspn (dir, "/");
-
-    /* Handle any leading slashes as well as any name that matches
-       the regular expression, m!^//hostname[/]*! .  Handling this
-       prefix separately usually results in a single additional
-       cdb_advance_fd call, but it's worthwhile, since it makes the
-       code in the following loop cleaner.  */
-    if (n_leading_slash == 2)
-      {
-       int err;
-       /* Find next slash.
-          We already know that dir[2] is neither a slash nor '\0'.  */
-       char *slash = memchr (dir + 3, '/', dir_end - (dir + 3));
-       if (slash == NULL)
-         {
-           errno = ENAMETOOLONG;
-           return -1;
-         }
-       *slash = '\0';
-       err = cdb_advance_fd (&cdb, dir);
-       *slash = '/';
-       if (err != 0)
-         goto Fail;
-       dir = find_non_slash (slash + 1);
-      }
-    else if (n_leading_slash)
-      {
-       if (cdb_advance_fd (&cdb, "/") != 0)
-         goto Fail;
-       dir += n_leading_slash;
-      }
-
-    assert (*dir != '/');
-    assert (dir <= dir_end);
-
-    while (PATH_MAX <= dir_end - dir)
-      {
-       int err;
-       /* Find a slash that is PATH_MAX or fewer bytes away from dir.
-          I.e. see if there is a slash that will give us a name of
-          length PATH_MAX-1 or less.  */
-       char *slash = memrchr (dir, '/', PATH_MAX);
-       if (slash == NULL)
-         {
-           errno = ENAMETOOLONG;
-           return -1;
-         }
-
-       *slash = '\0';
-       assert (slash - dir < PATH_MAX);
-       err = cdb_advance_fd (&cdb, dir);
-       *slash = '/';
-       if (err != 0)
-         goto Fail;
-
-       dir = find_non_slash (slash + 1);
-      }
-
-    if (dir < dir_end)
-      {
-       if (cdb_advance_fd (&cdb, dir) != 0)
-         goto Fail;
-      }
-
-    if (cdb_fchdir (&cdb) != 0)
-      goto Fail;
-
-    cdb_free (&cdb);
-    return 0;
-
-   Fail:
-    {
-      int saved_errno = errno;
-      cdb_free (&cdb);
-      errno = saved_errno;
-      return -1;
-    }
-  }
-}
-
-#if TEST_CHDIR
-
-# include "closeout.h"
-# include "error.h"
-
-char *program_name;
-
-int
-main (int argc, char *argv[])
-{
-  char *line = NULL;
-  size_t n = 0;
-  int len;
-
-  program_name = argv[0];
-  atexit (close_stdout);
-
-  len = getline (&line, &n, stdin);
-  if (len < 0)
-    {
-      int saved_errno = errno;
-      if (feof (stdin))
-       exit (0);
-
-      error (EXIT_FAILURE, saved_errno,
-            "reading standard input");
-    }
-  else if (len == 0)
-    exit (0);
-
-  if (line[len-1] == '\n')
-    line[len-1] = '\0';
-
-  if (chdir_long (line) != 0)
-    error (EXIT_FAILURE, errno,
-          "chdir_long failed: %s", line);
-
-  if (argc <= 1)
-    {
-      /* Using `pwd' here makes sense only if it is a robust implementation,
-        like the one in coreutils after the 2004-04-19 changes.  */
-      char const *cmd = "pwd";
-      execlp (cmd, (char *) NULL);
-      error (EXIT_FAILURE, errno, "%s", cmd);
-    }
-
-  fclose (stdin);
-  fclose (stderr);
-
-  exit (EXIT_SUCCESS);
-}
-#endif
-
-/*
-Local Variables:
-compile-command: "gcc -DTEST_CHDIR=1 -g -O -W -Wall chdir-long.c libcoreutils.a"
-End:
-*/
diff --git a/lib/chdir-long.h b/lib/chdir-long.h
deleted file mode 100644 (file)
index 5bf0bbc..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* provide a chdir function that tries not to fail due to ENAMETOOLONG
-   Copyright (C) 2004, 2005 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.  */
-
-#include <unistd.h>
-#include <limits.h>
-
-#ifndef PATH_MAX
-# ifdef        MAXPATHLEN
-#  define PATH_MAX MAXPATHLEN
-# endif
-#endif
-
-/* On systems without PATH_MAX, presume that chdir accepts
-   arbitrarily long directory names.  */
-#ifndef PATH_MAX
-# define chdir_long(Dir) chdir (Dir)
-#else
-int chdir_long (char *dir);
-#endif
diff --git a/lib/chown.c b/lib/chown.c
deleted file mode 100644 (file)
index 3582b04..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/* provide consistent interface to chown for systems that don't interpret
-   an ID of -1 as meaning `don't change the corresponding ID'.
-
-   Copyright (C) 1997, 2004, 2005, 2006, 2007 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 */
-
-#include <config.h>
-
-/* Specification.  */
-#include <unistd.h>
-
-#include <stdbool.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
-
-/* Below we refer to the system's chown().  */
-#undef chown
-
-/* The results of open() in this file are not used with fchdir,
-   therefore save some unnecessary work in fchdir.c.  */
-#undef open
-#undef close
-
-/* Provide a more-closely POSIX-conforming version of chown on
-   systems with one or both of the following problems:
-   - chown doesn't treat an ID of -1 as meaning
-   `don't change the corresponding ID'.
-   - chown doesn't dereference symlinks.  */
-
-int
-rpl_chown (const char *file, uid_t uid, gid_t gid)
-{
-#if CHOWN_FAILS_TO_HONOR_ID_OF_NEGATIVE_ONE
-  if (gid == (gid_t) -1 || uid == (uid_t) -1)
-    {
-      struct stat file_stats;
-
-      /* Stat file to get id(s) that should remain unchanged.  */
-      if (stat (file, &file_stats))
-       return -1;
-
-      if (gid == (gid_t) -1)
-       gid = file_stats.st_gid;
-
-      if (uid == (uid_t) -1)
-       uid = file_stats.st_uid;
-    }
-#endif
-
-#if CHOWN_MODIFIES_SYMLINK
-  {
-    /* Handle the case in which the system-supplied chown function
-       does *not* follow symlinks.  Instead, it changes permissions
-       on the symlink itself.  To work around that, we open the
-       file (but this can fail due to lack of read or write permission) and
-       use fchown on the resulting descriptor.  */
-    int open_flags = O_NONBLOCK | O_NOCTTY;
-    int fd = open (file, O_RDONLY | open_flags);
-    if (0 <= fd
-       || (errno == EACCES
-           && 0 <= (fd = open (file, O_WRONLY | open_flags))))
-      {
-       int result = fchown (fd, uid, gid);
-       int saved_errno = errno;
-
-       /* POSIX says fchown can fail with errno == EINVAL on sockets,
-          so fall back on chown in that case.  */
-       struct stat sb;
-       bool fchown_socket_failure =
-         (result != 0 && saved_errno == EINVAL
-          && fstat (fd, &sb) == 0 && S_ISFIFO (sb.st_mode));
-
-       close (fd);
-
-       if (! fchown_socket_failure)
-         {
-           errno = saved_errno;
-           return result;
-         }
-      }
-    else if (errno != EACCES)
-      return -1;
-  }
-#endif
-
-  return chown (file, uid, gid);
-}
diff --git a/lib/close-stream.c b/lib/close-stream.c
deleted file mode 100644 (file)
index 59ab616..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Close a stream, with nicer error checking than fclose's.
-
-   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2006, 2007, 2008 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>
-
-#include "close-stream.h"
-
-#include <errno.h>
-#include <stdbool.h>
-
-#include "fpending.h"
-
-#if USE_UNLOCKED_IO
-# include "unlocked-io.h"
-#endif
-
-/* Close STREAM.  Return 0 if successful, EOF (setting errno)
-   otherwise.  A failure might set errno to 0 if the error number
-   cannot be determined.
-
-   A failure with errno set to EPIPE may or may not indicate an error
-   situation worth signaling to the user.  See the documentation of the
-   close_stdout_set_ignore_EPIPE function for details.
-
-   If a program writes *anything* to STREAM, that program should close
-   STREAM and make sure that it succeeds before exiting.  Otherwise,
-   suppose that you go to the extreme of checking the return status
-   of every function that does an explicit write to STREAM.  The last
-   printf can succeed in writing to the internal stream buffer, and yet
-   the fclose(STREAM) could still fail (due e.g., to a disk full error)
-   when it tries to write out that buffered data.  Thus, you would be
-   left with an incomplete output file and the offending program would
-   exit successfully.  Even calling fflush is not always sufficient,
-   since some file systems (NFS and CODA) buffer written/flushed data
-   until an actual close call.
-
-   Besides, it's wasteful to check the return value from every call
-   that writes to STREAM -- just let the internal stream state record
-   the failure.  That's what the ferror test is checking below.  */
-
-int
-close_stream (FILE *stream)
-{
-  bool some_pending = (__fpending (stream) != 0);
-  bool prev_fail = (ferror (stream) != 0);
-  bool fclose_fail = (fclose (stream) != 0);
-
-  /* Return an error indication if there was a previous failure or if
-     fclose failed, with one exception: ignore an fclose failure if
-     there was no previous error, no data remains to be flushed, and
-     fclose failed with EBADF.  That can happen when a program like cp
-     is invoked like this `cp a b >&-' (i.e., with standard output
-     closed) and doesn't generate any output (hence no previous error
-     and nothing to be flushed).  */
-
-  if (prev_fail || (fclose_fail && (some_pending || errno != EBADF)))
-    {
-      if (! fclose_fail)
-       errno = 0;
-      return EOF;
-    }
-
-  return 0;
-}
diff --git a/lib/close-stream.h b/lib/close-stream.h
deleted file mode 100644 (file)
index be3d419..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#include <stdio.h>
-int close_stream (FILE *stream);
diff --git a/lib/close.c b/lib/close.c
deleted file mode 100644 (file)
index 74a7adf..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/* close replacement.
-   Copyright (C) 2008 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>
-
-#if GNULIB_SYS_SOCKET
-# define WIN32_LEAN_AND_MEAN
-# include <sys/socket.h>
-#endif
-
-#if HAVE__GL_CLOSE_FD_MAYBE_SOCKET
-
-/* Get set_winsock_errno, FD_TO_SOCKET etc. */
-#include "w32sock.h"
-
-static int
-_gl_close_fd_maybe_socket (int fd)
-{
-  SOCKET sock = FD_TO_SOCKET (fd);
-  WSANETWORKEVENTS ev;
-
-  ev.lNetworkEvents = 0xDEADBEEF;
-  WSAEnumNetworkEvents (sock, NULL, &ev);
-  if (ev.lNetworkEvents != 0xDEADBEEF)
-    {
-      /* FIXME: other applications, like squid, use an undocumented
-        _free_osfhnd free function.  But this is not enough: The 'osfile'
-        flags for fd also needs to be cleared, but it is hard to access it.
-        Instead, here we just close twice the file descriptor.  */
-      if (closesocket (sock))
-       {
-         set_winsock_errno ();
-         return -1;
-       }
-      else
-       {
-         /* This call frees the file descriptor and does a
-            CloseHandle ((HANDLE) _get_osfhandle (fd)), which fails.  */
-         _close (fd);
-         return 0;
-       }
-    }
-  else
-    return _close (fd);
-}
-#endif
-
-/* Override close() to call into other gnulib modules.  */
-
-int
-rpl_close (int fd)
-#undef close
-{
-#if HAVE__GL_CLOSE_FD_MAYBE_SOCKET
-  int retval = _gl_close_fd_maybe_socket (fd);
-#else
-  int retval = close (fd);
-#endif
-
-#ifdef FCHDIR_REPLACEMENT
-  if (retval >= 0)
-    _gl_unregister_fd (fd);
-#endif
-
-  return retval;
-}
diff --git a/lib/closeout.c b/lib/closeout.c
deleted file mode 100644 (file)
index 6a0b82f..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/* Close standard output and standard error, exiting with a diagnostic on error.
-
-   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2006, 2008 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>
-
-#include "closeout.h"
-
-#include <errno.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include "gettext.h"
-#define _(msgid) gettext (msgid)
-
-#include "close-stream.h"
-#include "error.h"
-#include "exitfail.h"
-#include "quotearg.h"
-
-static const char *file_name;
-
-/* Set the file name to be reported in the event an error is detected
-   by close_stdout.  */
-void
-close_stdout_set_file_name (const char *file)
-{
-  file_name = file;
-}
-
-static bool ignore_EPIPE /* = false */;
-
-/* Specify the reaction to an EPIPE error during the closing of stdout:
-     - If ignore = true, it shall be ignored.
-     - If ignore = false, it shall evoke a diagnostic, along with a nonzero
-       exit status.
-   The default is ignore = false.
-
-   This setting matters only if the SIGPIPE signal is ignored (i.e. its
-   handler set to SIG_IGN) or blocked.  Only particular programs need to
-   temporarily ignore SIGPIPE.  If SIGPIPE is ignored or blocked because
-   it was ignored or blocked in the parent process when it created the
-   child process, it usually is a bug in the parent process: It is bad
-   practice to have SIGPIPE ignored or blocked while creating a child
-   process.
-
-   EPIPE occurs when writing to a pipe or socket that has no readers now,
-   when SIGPIPE is ignored or blocked.
-
-   The ignore = false setting is suitable for a scenario where it is normally
-   guaranteed that the pipe writer terminates before the pipe reader.  In
-   this case, an EPIPE is an indication of a premature termination of the
-   pipe reader and should lead to a diagnostic and a nonzero exit status.
-
-   The ignore = true setting is suitable for a scenario where you don't know
-   ahead of time whether the pipe writer or the pipe reader will terminate
-   first.  In this case, an EPIPE is an indication that the pipe writer can
-   stop doing useless write() calls; this is what close_stdout does anyway.
-   EPIPE is part of the normal pipe/socket shutdown protocol in this case,
-   and should not lead to a diagnostic message.  */
-
-void
-close_stdout_set_ignore_EPIPE (bool ignore)
-{
-  ignore_EPIPE = ignore;
-}
-
-/* Close standard output.  On error, issue a diagnostic and _exit
-   with status 'exit_failure'.
-
-   Also close standard error.  On error, _exit with status 'exit_failure'.
-
-   Since close_stdout is commonly registered via 'atexit', POSIX
-   and the C standard both say that it should not call 'exit',
-   because the behavior is undefined if 'exit' is called more than
-   once.  So it calls '_exit' instead of 'exit'.  If close_stdout
-   is registered via atexit before other functions are registered,
-   the other functions can act before this _exit is invoked.
-
-   Applications that use close_stdout should flush any streams
-   other than stdout and stderr before exiting, since the call to
-   _exit will bypass other buffer flushing.  Applications should
-   be flushing and closing other streams anyway, to check for I/O
-   errors.  Also, applications should not use tmpfile, since _exit
-   can bypass the removal of these files.
-
-   It's important to detect such failures and exit nonzero because many
-   tools (most notably `make' and other build-management systems) depend
-   on being able to detect failure in other tools via their exit status.  */
-
-void
-close_stdout (void)
-{
-  if (close_stream (stdout) != 0
-      && !(ignore_EPIPE && errno == EPIPE))
-    {
-      char const *write_error = _("write error");
-      if (file_name)
-       error (0, errno, "%s: %s", quotearg_colon (file_name),
-              write_error);
-      else
-       error (0, errno, "%s", write_error);
-
-      _exit (exit_failure);
-    }
-
-   if (close_stream (stderr) != 0)
-     _exit (exit_failure);
-}
diff --git a/lib/closeout.h b/lib/closeout.h
deleted file mode 100644 (file)
index 34e61ef..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Close standard output and standard error.
-
-   Copyright (C) 1998, 2000, 2003, 2004, 2006, 2008 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 CLOSEOUT_H
-# define CLOSEOUT_H 1
-
-# include <stdbool.h>
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-void close_stdout_set_file_name (const char *file);
-void close_stdout_set_ignore_EPIPE (bool ignore);
-void close_stdout (void);
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif
diff --git a/lib/config.charset b/lib/config.charset
deleted file mode 100755 (executable)
index 7f91212..0000000
+++ /dev/null
@@ -1,683 +0,0 @@
-#! /bin/sh
-# Output a system dependent table of character encoding aliases.
-#
-#   Copyright (C) 2000-2004, 2006-2009 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, write to the Free Software Foundation,
-#   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# The table consists of lines of the form
-#    ALIAS  CANONICAL
-#
-# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
-# ALIAS is compared in a case sensitive way.
-#
-# CANONICAL is the GNU canonical name for this character encoding.
-# It must be an encoding supported by libiconv. Support by GNU libc is
-# also desirable. CANONICAL is case insensitive. Usually an upper case
-# MIME charset name is preferred.
-# The current list of GNU canonical charset names is as follows.
-#
-#       name              MIME?             used by which systems
-#   ASCII, ANSI_X3.4-1968       glibc solaris freebsd netbsd darwin
-#   ISO-8859-1              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin
-#   ISO-8859-2              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin
-#   ISO-8859-3              Y   glibc solaris
-#   ISO-8859-4              Y   osf solaris freebsd netbsd openbsd darwin
-#   ISO-8859-5              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin
-#   ISO-8859-6              Y   glibc aix hpux solaris
-#   ISO-8859-7              Y   glibc aix hpux irix osf solaris netbsd openbsd darwin
-#   ISO-8859-8              Y   glibc aix hpux osf solaris
-#   ISO-8859-9              Y   glibc aix hpux irix osf solaris darwin
-#   ISO-8859-13                 glibc netbsd openbsd darwin
-#   ISO-8859-14                 glibc
-#   ISO-8859-15                 glibc aix osf solaris freebsd netbsd openbsd darwin
-#   KOI8-R                  Y   glibc solaris freebsd netbsd openbsd darwin
-#   KOI8-U                  Y   glibc freebsd netbsd openbsd darwin
-#   KOI8-T                      glibc
-#   CP437                       dos
-#   CP775                       dos
-#   CP850                       aix osf dos
-#   CP852                       dos
-#   CP855                       dos
-#   CP856                       aix
-#   CP857                       dos
-#   CP861                       dos
-#   CP862                       dos
-#   CP864                       dos
-#   CP865                       dos
-#   CP866                       freebsd netbsd openbsd darwin dos
-#   CP869                       dos
-#   CP874                       woe32 dos
-#   CP922                       aix
-#   CP932                       aix woe32 dos
-#   CP943                       aix
-#   CP949                       osf darwin woe32 dos
-#   CP950                       woe32 dos
-#   CP1046                      aix
-#   CP1124                      aix
-#   CP1125                      dos
-#   CP1129                      aix
-#   CP1131                      darwin
-#   CP1250                      woe32
-#   CP1251                      glibc solaris netbsd openbsd darwin woe32
-#   CP1252                      aix woe32
-#   CP1253                      woe32
-#   CP1254                      woe32
-#   CP1255                      glibc woe32
-#   CP1256                      woe32
-#   CP1257                      woe32
-#   GB2312                  Y   glibc aix hpux irix solaris freebsd netbsd darwin
-#   EUC-JP                  Y   glibc aix hpux irix osf solaris freebsd netbsd darwin
-#   EUC-KR                  Y   glibc aix hpux irix osf solaris freebsd netbsd darwin
-#   EUC-TW                      glibc aix hpux irix osf solaris netbsd
-#   BIG5                    Y   glibc aix hpux osf solaris freebsd netbsd darwin
-#   BIG5-HKSCS                  glibc solaris darwin
-#   GBK                         glibc aix osf solaris darwin woe32 dos
-#   GB18030                     glibc solaris netbsd darwin
-#   SHIFT_JIS               Y   hpux osf solaris freebsd netbsd darwin
-#   JOHAB                       glibc solaris woe32
-#   TIS-620                     glibc aix hpux osf solaris
-#   VISCII                  Y   glibc
-#   TCVN5712-1                  glibc
-#   ARMSCII-8                   glibc darwin
-#   GEORGIAN-PS                 glibc
-#   PT154                       glibc
-#   HP-ROMAN8                   hpux
-#   HP-ARABIC8                  hpux
-#   HP-GREEK8                   hpux
-#   HP-HEBREW8                  hpux
-#   HP-TURKISH8                 hpux
-#   HP-KANA8                    hpux
-#   DEC-KANJI                   osf
-#   DEC-HANYU                   osf
-#   UTF-8                   Y   glibc aix hpux osf solaris netbsd darwin
-#
-# Note: Names which are not marked as being a MIME name should not be used in
-# Internet protocols for information interchange (mail, news, etc.).
-#
-# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
-# must understand both names and treat them as equivalent.
-#
-# The first argument passed to this file is the canonical host specification,
-#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or
-#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-
-host="$1"
-os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
-echo "# This file contains a table of character encoding aliases,"
-echo "# suitable for operating system '${os}'."
-echo "# It was automatically generated from config.charset."
-# List of references, updated during installation:
-echo "# Packages using this file: "
-case "$os" in
-    linux-gnulibc1*)
-       # Linux libc5 doesn't have nl_langinfo(CODESET); therefore
-       # localcharset.c falls back to using the full locale name
-       # from the environment variables.
-       echo "C ASCII"
-       echo "POSIX ASCII"
-       for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \
-                en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \
-                en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \
-                es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \
-                et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \
-                fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \
-                it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \
-                sv_FI sv_SE; do
-         echo "$l ISO-8859-1"
-         echo "$l.iso-8859-1 ISO-8859-1"
-         echo "$l.iso-8859-15 ISO-8859-15"
-         echo "$l.iso-8859-15@euro ISO-8859-15"
-         echo "$l@euro ISO-8859-15"
-         echo "$l.cp-437 CP437"
-         echo "$l.cp-850 CP850"
-         echo "$l.cp-1252 CP1252"
-         echo "$l.cp-1252@euro CP1252"
-         #echo "$l.atari-st ATARI-ST" # not a commonly used encoding
-         echo "$l.utf-8 UTF-8"
-         echo "$l.utf-8@euro UTF-8"
-       done
-       for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \
-                sl_SI sr sr_CS sr_YU; do
-         echo "$l ISO-8859-2"
-         echo "$l.iso-8859-2 ISO-8859-2"
-         echo "$l.cp-852 CP852"
-         echo "$l.cp-1250 CP1250"
-         echo "$l.utf-8 UTF-8"
-       done
-       for l in mk mk_MK ru ru_RU; do
-         echo "$l ISO-8859-5"
-         echo "$l.iso-8859-5 ISO-8859-5"
-         echo "$l.koi8-r KOI8-R"
-         echo "$l.cp-866 CP866"
-         echo "$l.cp-1251 CP1251"
-         echo "$l.utf-8 UTF-8"
-       done
-       for l in ar ar_SA; do
-         echo "$l ISO-8859-6"
-         echo "$l.iso-8859-6 ISO-8859-6"
-         echo "$l.cp-864 CP864"
-         #echo "$l.cp-868 CP868" # not a commonly used encoding
-         echo "$l.cp-1256 CP1256"
-         echo "$l.utf-8 UTF-8"
-       done
-       for l in el el_GR gr gr_GR; do
-         echo "$l ISO-8859-7"
-         echo "$l.iso-8859-7 ISO-8859-7"
-         echo "$l.cp-869 CP869"
-         echo "$l.cp-1253 CP1253"
-         echo "$l.cp-1253@euro CP1253"
-         echo "$l.utf-8 UTF-8"
-         echo "$l.utf-8@euro UTF-8"
-       done
-       for l in he he_IL iw iw_IL; do
-         echo "$l ISO-8859-8"
-         echo "$l.iso-8859-8 ISO-8859-8"
-         echo "$l.cp-862 CP862"
-         echo "$l.cp-1255 CP1255"
-         echo "$l.utf-8 UTF-8"
-       done
-       for l in tr tr_TR; do
-         echo "$l ISO-8859-9"
-         echo "$l.iso-8859-9 ISO-8859-9"
-         echo "$l.cp-857 CP857"
-         echo "$l.cp-1254 CP1254"
-         echo "$l.utf-8 UTF-8"
-       done
-       for l in lt lt_LT lv lv_LV; do
-         #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name
-         echo "$l ISO-8859-13"
-       done
-       for l in ru_UA uk uk_UA; do
-         echo "$l KOI8-U"
-       done
-       for l in zh zh_CN; do
-         #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name
-         echo "$l GB2312"
-       done
-       for l in ja ja_JP ja_JP.EUC; do
-         echo "$l EUC-JP"
-       done
-       for l in ko ko_KR; do
-         echo "$l EUC-KR"
-       done
-       for l in th th_TH; do
-         echo "$l TIS-620"
-       done
-       for l in fa fa_IR; do
-         #echo "$l ISIRI-3342" # a broken encoding
-         echo "$l.utf-8 UTF-8"
-       done
-       ;;
-    linux* | *-gnu*)
-       # With glibc-2.1 or newer, we don't need any canonicalization,
-       # because glibc has iconv and both glibc and libiconv support all
-       # GNU canonical names directly. Therefore, the Makefile does not
-       # need to install the alias file at all.
-       # The following applies only to glibc-2.0.x and older libcs.
-       echo "ISO_646.IRV:1983 ASCII"
-       ;;
-    aix*)
-       echo "ISO8859-1 ISO-8859-1"
-       echo "ISO8859-2 ISO-8859-2"
-       echo "ISO8859-5 ISO-8859-5"
-       echo "ISO8859-6 ISO-8859-6"
-       echo "ISO8859-7 ISO-8859-7"
-       echo "ISO8859-8 ISO-8859-8"
-       echo "ISO8859-9 ISO-8859-9"
-       echo "ISO8859-15 ISO-8859-15"
-       echo "IBM-850 CP850"
-       echo "IBM-856 CP856"
-       echo "IBM-921 ISO-8859-13"
-       echo "IBM-922 CP922"
-       echo "IBM-932 CP932"
-       echo "IBM-943 CP943"
-       echo "IBM-1046 CP1046"
-       echo "IBM-1124 CP1124"
-       echo "IBM-1129 CP1129"
-       echo "IBM-1252 CP1252"
-       echo "IBM-eucCN GB2312"
-       echo "IBM-eucJP EUC-JP"
-       echo "IBM-eucKR EUC-KR"
-       echo "IBM-eucTW EUC-TW"
-       echo "big5 BIG5"
-       echo "GBK GBK"
-       echo "TIS-620 TIS-620"
-       echo "UTF-8 UTF-8"
-       ;;
-    hpux*)
-       echo "iso88591 ISO-8859-1"
-       echo "iso88592 ISO-8859-2"
-       echo "iso88595 ISO-8859-5"
-       echo "iso88596 ISO-8859-6"
-       echo "iso88597 ISO-8859-7"
-       echo "iso88598 ISO-8859-8"
-       echo "iso88599 ISO-8859-9"
-       echo "iso885915 ISO-8859-15"
-       echo "roman8 HP-ROMAN8"
-       echo "arabic8 HP-ARABIC8"
-       echo "greek8 HP-GREEK8"
-       echo "hebrew8 HP-HEBREW8"
-       echo "turkish8 HP-TURKISH8"
-       echo "kana8 HP-KANA8"
-       echo "tis620 TIS-620"
-       echo "big5 BIG5"
-       echo "eucJP EUC-JP"
-       echo "eucKR EUC-KR"
-       echo "eucTW EUC-TW"
-       echo "hp15CN GB2312"
-       #echo "ccdc ?" # what is this?
-       echo "SJIS SHIFT_JIS"
-       echo "utf8 UTF-8"
-       ;;
-    irix*)
-       echo "ISO8859-1 ISO-8859-1"
-       echo "ISO8859-2 ISO-8859-2"
-       echo "ISO8859-5 ISO-8859-5"
-       echo "ISO8859-7 ISO-8859-7"
-       echo "ISO8859-9 ISO-8859-9"
-       echo "eucCN GB2312"
-       echo "eucJP EUC-JP"
-       echo "eucKR EUC-KR"
-       echo "eucTW EUC-TW"
-       ;;
-    osf*)
-       echo "ISO8859-1 ISO-8859-1"
-       echo "ISO8859-2 ISO-8859-2"
-       echo "ISO8859-4 ISO-8859-4"
-       echo "ISO8859-5 ISO-8859-5"
-       echo "ISO8859-7 ISO-8859-7"
-       echo "ISO8859-8 ISO-8859-8"
-       echo "ISO8859-9 ISO-8859-9"
-       echo "ISO8859-15 ISO-8859-15"
-       echo "cp850 CP850"
-       echo "big5 BIG5"
-       echo "dechanyu DEC-HANYU"
-       echo "dechanzi GB2312"
-       echo "deckanji DEC-KANJI"
-       echo "deckorean EUC-KR"
-       echo "eucJP EUC-JP"
-       echo "eucKR EUC-KR"
-       echo "eucTW EUC-TW"
-       echo "GBK GBK"
-       echo "KSC5601 CP949"
-       echo "sdeckanji EUC-JP"
-       echo "SJIS SHIFT_JIS"
-       echo "TACTIS TIS-620"
-       echo "UTF-8 UTF-8"
-       ;;
-    solaris*)
-       echo "646 ASCII"
-       echo "ISO8859-1 ISO-8859-1"
-       echo "ISO8859-2 ISO-8859-2"
-       echo "ISO8859-3 ISO-8859-3"
-       echo "ISO8859-4 ISO-8859-4"
-       echo "ISO8859-5 ISO-8859-5"
-       echo "ISO8859-6 ISO-8859-6"
-       echo "ISO8859-7 ISO-8859-7"
-       echo "ISO8859-8 ISO-8859-8"
-       echo "ISO8859-9 ISO-8859-9"
-       echo "ISO8859-15 ISO-8859-15"
-       echo "koi8-r KOI8-R"
-       echo "ansi-1251 CP1251"
-       echo "BIG5 BIG5"
-       echo "Big5-HKSCS BIG5-HKSCS"
-       echo "gb2312 GB2312"
-       echo "GBK GBK"
-       echo "GB18030 GB18030"
-       echo "cns11643 EUC-TW"
-       echo "5601 EUC-KR"
-       echo "ko_KR.johap92 JOHAB"
-       echo "eucJP EUC-JP"
-       echo "PCK SHIFT_JIS"
-       echo "TIS620.2533 TIS-620"
-       #echo "sun_eu_greek ?" # what is this?
-       echo "UTF-8 UTF-8"
-       ;;
-    freebsd* | os2*)
-       # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
-       # localcharset.c falls back to using the full locale name
-       # from the environment variables.
-       # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
-       # reuse FreeBSD's locale data for OS/2.
-       echo "C ASCII"
-       echo "US-ASCII ASCII"
-       for l in la_LN lt_LN; do
-         echo "$l.ASCII ASCII"
-       done
-       for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
-                fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
-                lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
-         echo "$l.ISO_8859-1 ISO-8859-1"
-         echo "$l.DIS_8859-15 ISO-8859-15"
-       done
-       for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
-         echo "$l.ISO_8859-2 ISO-8859-2"
-       done
-       for l in la_LN lt_LT; do
-         echo "$l.ISO_8859-4 ISO-8859-4"
-       done
-       for l in ru_RU ru_SU; do
-         echo "$l.KOI8-R KOI8-R"
-         echo "$l.ISO_8859-5 ISO-8859-5"
-         echo "$l.CP866 CP866"
-       done
-       echo "uk_UA.KOI8-U KOI8-U"
-       echo "zh_TW.BIG5 BIG5"
-       echo "zh_TW.Big5 BIG5"
-       echo "zh_CN.EUC GB2312"
-       echo "ja_JP.EUC EUC-JP"
-       echo "ja_JP.SJIS SHIFT_JIS"
-       echo "ja_JP.Shift_JIS SHIFT_JIS"
-       echo "ko_KR.EUC EUC-KR"
-       ;;
-    netbsd*)
-       echo "646 ASCII"
-       echo "ISO8859-1 ISO-8859-1"
-       echo "ISO8859-2 ISO-8859-2"
-       echo "ISO8859-4 ISO-8859-4"
-       echo "ISO8859-5 ISO-8859-5"
-       echo "ISO8859-7 ISO-8859-7"
-       echo "ISO8859-13 ISO-8859-13"
-       echo "ISO8859-15 ISO-8859-15"
-       echo "eucCN GB2312"
-       echo "eucJP EUC-JP"
-       echo "eucKR EUC-KR"
-       echo "eucTW EUC-TW"
-       echo "BIG5 BIG5"
-       echo "SJIS SHIFT_JIS"
-       ;;
-    openbsd*)
-       echo "646 ASCII"
-       echo "ISO8859-1 ISO-8859-1"
-       echo "ISO8859-2 ISO-8859-2"
-       echo "ISO8859-4 ISO-8859-4"
-       echo "ISO8859-5 ISO-8859-5"
-       echo "ISO8859-7 ISO-8859-7"
-       echo "ISO8859-13 ISO-8859-13"
-       echo "ISO8859-15 ISO-8859-15"
-       ;;
-    darwin[56]*)
-       # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore
-       # localcharset.c falls back to using the full locale name
-       # from the environment variables.
-       echo "C ASCII"
-       for l in en_AU en_CA en_GB en_US la_LN; do
-         echo "$l.US-ASCII ASCII"
-       done
-       for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
-                fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \
-                nl_NL no_NO pt_PT sv_SE; do
-         echo "$l ISO-8859-1"
-         echo "$l.ISO8859-1 ISO-8859-1"
-         echo "$l.ISO8859-15 ISO-8859-15"
-       done
-       for l in la_LN; do
-         echo "$l.ISO8859-1 ISO-8859-1"
-         echo "$l.ISO8859-15 ISO-8859-15"
-       done
-       for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do
-         echo "$l.ISO8859-2 ISO-8859-2"
-       done
-       for l in la_LN lt_LT; do
-         echo "$l.ISO8859-4 ISO-8859-4"
-       done
-       for l in ru_RU; do
-         echo "$l.KOI8-R KOI8-R"
-         echo "$l.ISO8859-5 ISO-8859-5"
-         echo "$l.CP866 CP866"
-       done
-       for l in bg_BG; do
-         echo "$l.CP1251 CP1251"
-       done
-       echo "uk_UA.KOI8-U KOI8-U"
-       echo "zh_TW.BIG5 BIG5"
-       echo "zh_TW.Big5 BIG5"
-       echo "zh_CN.EUC GB2312"
-       echo "ja_JP.EUC EUC-JP"
-       echo "ja_JP.SJIS SHIFT_JIS"
-       echo "ko_KR.EUC EUC-KR"
-       ;;
-    darwin*)
-       # Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is
-       # useless:
-       # - It returns the empty string when LANG is set to a locale of the
-       #   form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8
-       #   LC_CTYPE file.
-       # - The environment variables LANG, LC_CTYPE, LC_ALL are not set by
-       #   the system; nl_langinfo(CODESET) returns "US-ASCII" in this case.
-       # - The documentation says:
-       #     "... all code that calls BSD system routines should ensure
-       #      that the const *char parameters of these routines are in UTF-8
-       #      encoding. All BSD system functions expect their string
-       #      parameters to be in UTF-8 encoding and nothing else."
-       #   It also says
-       #     "An additional caveat is that string parameters for files,
-       #      paths, and other file-system entities must be in canonical
-       #      UTF-8. In a canonical UTF-8 Unicode string, all decomposable
-       #      characters are decomposed ..."
-       #   but this is not true: You can pass non-decomposed UTF-8 strings
-       #   to file system functions, and it is the OS which will convert
-       #   them to decomposed UTF-8 before accessing the file system.
-       # - The Apple Terminal application displays UTF-8 by default.
-       # - However, other applications are free to use different encodings:
-       #   - xterm uses ISO-8859-1 by default.
-       #   - TextEdit uses MacRoman by default.
-       # We prefer UTF-8 over decomposed UTF-8-MAC because one should
-       # minimize the use of decomposed Unicode. Unfortunately, through the
-       # Darwin file system, decomposed UTF-8 strings are leaked into user
-       # space nevertheless.
-       # Then there are also the locales with encodings other than US-ASCII
-       # and UTF-8. These locales can be occasionally useful to users (e.g.
-       # when grepping through ISO-8859-1 encoded text files), when all their
-       # file names are in US-ASCII.
-       echo "ISO8859-1 ISO-8859-1"
-       echo "ISO8859-2 ISO-8859-2"
-       echo "ISO8859-4 ISO-8859-4"
-       echo "ISO8859-5 ISO-8859-5"
-       echo "ISO8859-7 ISO-8859-7"
-       echo "ISO8859-9 ISO-8859-9"
-       echo "ISO8859-13 ISO-8859-13"
-       echo "ISO8859-15 ISO-8859-15"
-       echo "KOI8-R KOI8-R"
-       echo "KOI8-U KOI8-U"
-       echo "CP866 CP866"
-       echo "CP949 CP949"
-       echo "CP1131 CP1131"
-       echo "CP1251 CP1251"
-       echo "eucCN GB2312"
-       echo "GB2312 GB2312"
-       echo "eucJP EUC-JP"
-       echo "eucKR EUC-KR"
-       echo "Big5 BIG5"
-       echo "Big5HKSCS BIG5-HKSCS"
-       echo "GBK GBK"
-       echo "GB18030 GB18030"
-       echo "SJIS SHIFT_JIS"
-       echo "ARMSCII-8 ARMSCII-8"
-       echo "PT154 PT154"
-       #echo "ISCII-DEV ?"
-       echo "* UTF-8"
-       ;;
-    beos* | haiku*)
-       # BeOS and Haiku have a single locale, and it has UTF-8 encoding.
-       echo "* UTF-8"
-       ;;
-    msdosdjgpp*)
-       # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
-       # localcharset.c falls back to using the full locale name
-       # from the environment variables.
-       echo "#"
-       echo "# The encodings given here may not all be correct."
-       echo "# If you find that the encoding given for your language and"
-       echo "# country is not the one your DOS machine actually uses, just"
-       echo "# correct it in this file, and send a mail to"
-       echo "# Juan Manuel Guerrero <juan.guerrero@gmx.de>"
-       echo "# and Bruno Haible <bruno@clisp.org>."
-       echo "#"
-       echo "C ASCII"
-       # ISO-8859-1 languages
-       echo "ca CP850"
-       echo "ca_ES CP850"
-       echo "da CP865"    # not CP850 ??
-       echo "da_DK CP865" # not CP850 ??
-       echo "de CP850"
-       echo "de_AT CP850"
-       echo "de_CH CP850"
-       echo "de_DE CP850"
-       echo "en CP850"
-       echo "en_AU CP850" # not CP437 ??
-       echo "en_CA CP850"
-       echo "en_GB CP850"
-       echo "en_NZ CP437"
-       echo "en_US CP437"
-       echo "en_ZA CP850" # not CP437 ??
-       echo "es CP850"
-       echo "es_AR CP850"
-       echo "es_BO CP850"
-       echo "es_CL CP850"
-       echo "es_CO CP850"
-       echo "es_CR CP850"
-       echo "es_CU CP850"
-       echo "es_DO CP850"
-       echo "es_EC CP850"
-       echo "es_ES CP850"
-       echo "es_GT CP850"
-       echo "es_HN CP850"
-       echo "es_MX CP850"
-       echo "es_NI CP850"
-       echo "es_PA CP850"
-       echo "es_PY CP850"
-       echo "es_PE CP850"
-       echo "es_SV CP850"
-       echo "es_UY CP850"
-       echo "es_VE CP850"
-       echo "et CP850"
-       echo "et_EE CP850"
-       echo "eu CP850"
-       echo "eu_ES CP850"
-       echo "fi CP850"
-       echo "fi_FI CP850"
-       echo "fr CP850"
-       echo "fr_BE CP850"
-       echo "fr_CA CP850"
-       echo "fr_CH CP850"
-       echo "fr_FR CP850"
-       echo "ga CP850"
-       echo "ga_IE CP850"
-       echo "gd CP850"
-       echo "gd_GB CP850"
-       echo "gl CP850"
-       echo "gl_ES CP850"
-       echo "id CP850"    # not CP437 ??
-       echo "id_ID CP850" # not CP437 ??
-       echo "is CP861"    # not CP850 ??
-       echo "is_IS CP861" # not CP850 ??
-       echo "it CP850"
-       echo "it_CH CP850"
-       echo "it_IT CP850"
-       echo "lt CP775"
-       echo "lt_LT CP775"
-       echo "lv CP775"
-       echo "lv_LV CP775"
-       echo "nb CP865"    # not CP850 ??
-       echo "nb_NO CP865" # not CP850 ??
-       echo "nl CP850"
-       echo "nl_BE CP850"
-       echo "nl_NL CP850"
-       echo "nn CP865"    # not CP850 ??
-       echo "nn_NO CP865" # not CP850 ??
-       echo "no CP865"    # not CP850 ??
-       echo "no_NO CP865" # not CP850 ??
-       echo "pt CP850"
-       echo "pt_BR CP850"
-       echo "pt_PT CP850"
-       echo "sv CP850"
-       echo "sv_SE CP850"
-       # ISO-8859-2 languages
-       echo "cs CP852"
-       echo "cs_CZ CP852"
-       echo "hr CP852"
-       echo "hr_HR CP852"
-       echo "hu CP852"
-       echo "hu_HU CP852"
-       echo "pl CP852"
-       echo "pl_PL CP852"
-       echo "ro CP852"
-       echo "ro_RO CP852"
-       echo "sk CP852"
-       echo "sk_SK CP852"
-       echo "sl CP852"
-       echo "sl_SI CP852"
-       echo "sq CP852"
-       echo "sq_AL CP852"
-       echo "sr CP852"    # CP852 or CP866 or CP855 ??
-       echo "sr_CS CP852" # CP852 or CP866 or CP855 ??
-       echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
-       # ISO-8859-3 languages
-       echo "mt CP850"
-       echo "mt_MT CP850"
-       # ISO-8859-5 languages
-       echo "be CP866"
-       echo "be_BE CP866"
-       echo "bg CP866"    # not CP855 ??
-       echo "bg_BG CP866" # not CP855 ??
-       echo "mk CP866"    # not CP855 ??
-       echo "mk_MK CP866" # not CP855 ??
-       echo "ru CP866"
-       echo "ru_RU CP866"
-       echo "uk CP1125"
-       echo "uk_UA CP1125"
-       # ISO-8859-6 languages
-       echo "ar CP864"
-       echo "ar_AE CP864"
-       echo "ar_DZ CP864"
-       echo "ar_EG CP864"
-       echo "ar_IQ CP864"
-       echo "ar_IR CP864"
-       echo "ar_JO CP864"
-       echo "ar_KW CP864"
-       echo "ar_MA CP864"
-       echo "ar_OM CP864"
-       echo "ar_QA CP864"
-       echo "ar_SA CP864"
-       echo "ar_SY CP864"
-       # ISO-8859-7 languages
-       echo "el CP869"
-       echo "el_GR CP869"
-       # ISO-8859-8 languages
-       echo "he CP862"
-       echo "he_IL CP862"
-       # ISO-8859-9 languages
-       echo "tr CP857"
-       echo "tr_TR CP857"
-       # Japanese
-       echo "ja CP932"
-       echo "ja_JP CP932"
-       # Chinese
-       echo "zh_CN GBK"
-       echo "zh_TW CP950" # not CP938 ??
-       # Korean
-       echo "kr CP949"    # not CP934 ??
-       echo "kr_KR CP949" # not CP934 ??
-       # Thai
-       echo "th CP874"
-       echo "th_TH CP874"
-       # Other
-       echo "eo CP850"
-       echo "eo_EO CP850"
-       ;;
-esac
diff --git a/lib/creat-safer.c b/lib/creat-safer.c
deleted file mode 100644 (file)
index fc314ba..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Invoke creat, but avoid some glitches.
-
-   Copyright (C) 2005, 2006 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.  */
-
-#include <config.h>
-
-#include "fcntl-safer.h"
-
-#include <fcntl.h>
-#include "unistd-safer.h"
-
-int
-creat_safer (char const *file, mode_t mode)
-{
-  return fd_safer (creat (file, mode));
-}
diff --git a/lib/dirent.in.h b/lib/dirent.in.h
deleted file mode 100644 (file)
index 15f0245..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/* A GNU-like <dirent.h>.
-   Copyright (C) 2006-2009 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 _GL_DIRENT_H
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-
-/* The include_next requires a split double-inclusion guard.  */
-#@INCLUDE_NEXT@ @NEXT_DIRENT_H@
-
-#ifndef _GL_DIRENT_H
-#define _GL_DIRENT_H
-
-/* The definition of GL_LINK_WARNING is copied here.  */
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Declare overridden functions.  */
-
-#if @REPLACE_FCHDIR@
-# define opendir rpl_opendir
-extern DIR * opendir (const char *);
-# define closedir rpl_closedir
-extern int closedir (DIR *);
-#endif
-
-/* Declare other POSIX functions.  */
-
-#if @GNULIB_DIRFD@
-# if !@HAVE_DECL_DIRFD@ && !defined dirfd
-/* Return the file descriptor associated with the given directory stream,
-   or -1 if none exists.  */
-extern int dirfd (DIR const *dir);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef dirfd
-# define dirfd(d) \
-    (GL_LINK_WARNING ("dirfd is unportable - " \
-                      "use gnulib module dirfd for portability"), \
-     dirfd (d))
-#endif
-
-#if @GNULIB_SCANDIR@
-/* Scan the directory DIR, calling FILTER on each directory entry.
-   Entries for which FILTER returns nonzero are individually malloc'd,
-   sorted using qsort with CMP, and collected in a malloc'd array in
-   *NAMELIST.  Returns the number of entries selected, or -1 on error.  */
-# if !@HAVE_SCANDIR@
-extern int scandir (const char *dir, struct dirent ***namelist,
-                   int (*filter) (const struct dirent *),
-                   int (*cmp) (const struct dirent **, const struct dirent **));
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef scandir
-# define scandir(d,n,f,c) \
-    (GL_LINK_WARNING ("scandir is unportable - " \
-                      "use gnulib module scandir for portability"), \
-     scandir (d, n, f, c))
-#endif
-
-#if @GNULIB_ALPHASORT@
-/* Compare two 'struct dirent' entries alphabetically.  */
-# if !@HAVE_ALPHASORT@
-extern int alphasort (const struct dirent **, const struct dirent **);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef alphasort
-# define alphasort(a,b) \
-    (GL_LINK_WARNING ("alphasort is unportable - " \
-                      "use gnulib module alphasort for portability"), \
-     alphasort (a, b))
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _GL_DIRENT_H */
-#endif /* _GL_DIRENT_H */
diff --git a/lib/dirfd.c b/lib/dirfd.c
deleted file mode 100644 (file)
index 81993c5..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/* dirfd.c -- return the file descriptor associated with an open DIR*
-
-   Copyright (C) 2001, 2006, 2008-2009 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. */
-
-#include <config.h>
-
-#include <dirent.h>
-#include <errno.h>
-
-int
-dirfd (DIR const *dir_p)
-{
-  int fd = DIR_TO_FD (dir_p);
-  if (fd == -1)
-    errno = ENOTSUP;
-  return fd;
-}
diff --git a/lib/dirname.c b/lib/dirname.c
deleted file mode 100644 (file)
index c27e5b5..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/* dirname.c -- return all but the last element in a file name
-
-   Copyright (C) 1990, 1998, 2000, 2001, 2003, 2004, 2005, 2006 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>
-
-#include "dirname.h"
-
-#include <string.h>
-#include "xalloc.h"
-
-/* 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
-   if there are trailing slashes (by effectively ignoring them).  */
-
-size_t
-dir_len (char const *file)
-{
-  size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (file);
-  size_t length;
-
-  /* Advance prefix_length beyond important leading slashes.  */
-  prefix_length += (prefix_length != 0
-                   ? (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
-                      && ISSLASH (file[prefix_length]))
-                   : (ISSLASH (file[0])
-                      ? ((DOUBLE_SLASH_IS_DISTINCT_ROOT
-                          && ISSLASH (file[1]) && ! ISSLASH (file[2])
-                          ? 2 : 1))
-                      : 0));
-
-  /* Strip the basename and any redundant slashes before it.  */
-  for (length = last_component (file) - file;
-       prefix_length < length; length--)
-    if (! ISSLASH (file[length - 1]))
-      break;
-  return length;
-}
-
-
-/* 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.
-
-   Return the leading directories part of FILE, allocated with xmalloc.
-   Works properly even if there are trailing slashes (by effectively
-   ignoring them).  Unlike POSIX dirname(), FILE cannot be NULL.
-
-   If lstat (FILE) would succeed, then { chdir (dir_name (FILE));
-   lstat (base_name (FILE)); } will access the same file.  Likewise,
-   if the sequence { chdir (dir_name (FILE));
-   rename (base_name (FILE), "foo"); } succeeds, you have renamed FILE
-   to "foo" in the same directory FILE was in.  */
-
-char *
-dir_name (char const *file)
-{
-  size_t length = dir_len (file);
-  bool append_dot = (length == 0
-                    || (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
-                        && length == FILE_SYSTEM_PREFIX_LEN (file)
-                        && file[2] != '\0' && ! ISSLASH (file[2])));
-  char *dir = xmalloc (length + append_dot + 1);
-  memcpy (dir, file, length);
-  if (append_dot)
-    dir[length++] = '.';
-  dir[length] = '\0';
-  return dir;
-}
diff --git a/lib/dirname.h b/lib/dirname.h
deleted file mode 100644 (file)
index f592350..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*  Take file names apart into directory and base names.
-
-    Copyright (C) 1998, 2001, 2003-2006 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 DIRNAME_H_
-# define DIRNAME_H_ 1
-
-# include <stdbool.h>
-# include <stddef.h>
-
-# ifndef DIRECTORY_SEPARATOR
-#  define DIRECTORY_SEPARATOR '/'
-# endif
-
-# ifndef ISSLASH
-#  define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
-# endif
-
-# ifndef FILE_SYSTEM_PREFIX_LEN
-#  if FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX
-    /* This internal macro assumes ASCII, but all hosts that support drive
-       letters use ASCII.  */
-#   define _IS_DRIVE_LETTER(c) (((unsigned int) (c) | ('a' - 'A')) - 'a' \
-                               <= 'z' - 'a')
-#   define FILE_SYSTEM_PREFIX_LEN(Filename) \
-          (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':' ? 2 : 0)
-#  else
-#   define FILE_SYSTEM_PREFIX_LEN(Filename) 0
-#  endif
-# endif
-
-# ifndef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
-#  define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0
-# endif
-
-# ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT
-#  define DOUBLE_SLASH_IS_DISTINCT_ROOT 0
-# endif
-
-# if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
-#  define IS_ABSOLUTE_FILE_NAME(F) ISSLASH ((F)[FILE_SYSTEM_PREFIX_LEN (F)])
-# else
-#  define IS_ABSOLUTE_FILE_NAME(F) \
-         (ISSLASH ((F)[0]) || 0 < FILE_SYSTEM_PREFIX_LEN (F))
-# endif
-# define IS_RELATIVE_FILE_NAME(F) (! IS_ABSOLUTE_FILE_NAME (F))
-
-char *base_name (char const *file);
-char *dir_name (char const *file);
-size_t base_len (char const *file);
-size_t dir_len (char const *file);
-char *last_component (char const *file);
-
-bool strip_trailing_slashes (char *file);
-
-#endif /* not DIRNAME_H_ */
diff --git a/lib/dup-safer.c b/lib/dup-safer.c
deleted file mode 100644 (file)
index 7d9b2be..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Invoke dup, but avoid some glitches.
-
-   Copyright (C) 2001, 2004, 2005, 2006, 2009 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.  */
-
-#include <config.h>
-
-#include "unistd-safer.h"
-
-#include <fcntl.h>
-
-#include <unistd.h>
-
-/* Like dup, but do not return STDIN_FILENO, STDOUT_FILENO, or
-   STDERR_FILENO.  */
-
-int
-dup_safer (int fd)
-{
-#if defined F_DUPFD && !defined FCHDIR_REPLACEMENT
-  return fcntl (fd, F_DUPFD, STDERR_FILENO + 1);
-#else
-  /* fd_safer calls us back, but eventually the recursion unwinds and
-     does the right thing.  */
-  return fd_safer (dup (fd));
-#endif
-}
diff --git a/lib/dup2.c b/lib/dup2.c
deleted file mode 100644 (file)
index 0999082..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Duplicate an open file descriptor to a specified file descriptor.
-
-   Copyright (C) 1999, 2004, 2005, 2006, 2007 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 */
-
-#include <config.h>
-
-/* Specification.  */
-#include <unistd.h>
-
-#include <errno.h>
-#include <fcntl.h>
-
-#ifndef F_DUPFD
-static int
-dupfd (int fd, int desired_fd)
-{
-  int duplicated_fd = dup (fd);
-  if (duplicated_fd < 0 || duplicated_fd == desired_fd)
-    return duplicated_fd;
-  else
-    {
-      int r = dupfd (fd, desired_fd);
-      int e = errno;
-      close (duplicated_fd);
-      errno = e;
-      return r;
-    }
-}
-#endif
-
-int
-dup2 (int fd, int desired_fd)
-{
-  if (fd == desired_fd)
-    return fd;
-  close (desired_fd);
-#ifdef F_DUPFD
-  return fcntl (fd, F_DUPFD, desired_fd);
-#else
-  return dupfd (fd, desired_fd);
-#endif
-}
diff --git a/lib/errno.in.h b/lib/errno.in.h
deleted file mode 100644 (file)
index f873039..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* A POSIX-like <errno.h>.
-
-   Copyright (C) 2008 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _GL_ERRNO_H
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-
-/* The include_next requires a split double-inclusion guard.  */
-#@INCLUDE_NEXT@ @NEXT_ERRNO_H@
-
-#ifndef _GL_ERRNO_H
-#define _GL_ERRNO_H
-
-
-/* On native Windows platforms, many macros are not defined.  */
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-
-/* POSIX says that EAGAIN and EWOULDBLOCK may have the same value.  */
-#  define EWOULDBLOCK     EAGAIN
-
-/* Values >= 100 seem safe to use.  */
-#  define ETXTBSY   100
-#  define GNULIB_defined_ETXTBSY 1
-
-/* These are intentionally the same values as the WSA* error numbers, defined
-   in <winsock2.h>.  */
-#  define EINPROGRESS     10036
-#  define EALREADY        10037
-#  define ENOTSOCK        10038
-#  define EDESTADDRREQ    10039
-#  define EMSGSIZE        10040
-#  define EPROTOTYPE      10041
-#  define ENOPROTOOPT     10042
-#  define EPROTONOSUPPORT 10043
-#  define ESOCKTNOSUPPORT 10044  /* not required by POSIX */
-#  define EOPNOTSUPP      10045
-#  define EPFNOSUPPORT    10046  /* not required by POSIX */
-#  define EAFNOSUPPORT    10047
-#  define EADDRINUSE      10048
-#  define EADDRNOTAVAIL   10049
-#  define ENETDOWN        10050
-#  define ENETUNREACH     10051
-#  define ENETRESET       10052
-#  define ECONNABORTED    10053
-#  define ECONNRESET      10054
-#  define ENOBUFS         10055
-#  define EISCONN         10056
-#  define ENOTCONN        10057
-#  define ESHUTDOWN       10058  /* not required by POSIX */
-#  define ETOOMANYREFS    10059  /* not required by POSIX */
-#  define ETIMEDOUT       10060
-#  define ECONNREFUSED    10061
-#  define ELOOP           10062
-#  define EHOSTDOWN       10064  /* not required by POSIX */
-#  define EHOSTUNREACH    10065
-#  define EPROCLIM        10067  /* not required by POSIX */
-#  define EUSERS          10068  /* not required by POSIX */
-#  define EDQUOT          10069
-#  define ESTALE          10070
-#  define EREMOTE         10071  /* not required by POSIX */
-#  define GNULIB_defined_ESOCK 1
-
-# endif
-
-
-/* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros
-   EMULTIHOP, ENOLINK, EOVERFLOW are not defined.  */
-# if @EMULTIHOP_HIDDEN@
-#  define EMULTIHOP @EMULTIHOP_VALUE@
-#  define GNULIB_defined_EMULTIHOP 1
-# endif
-# if @ENOLINK_HIDDEN@
-#  define ENOLINK   @ENOLINK_VALUE@
-#  define GNULIB_defined_ENOLINK 1
-# endif
-# if @EOVERFLOW_HIDDEN@
-#  define EOVERFLOW @EOVERFLOW_VALUE@
-#  define GNULIB_defined_EOVERFLOW 1
-# endif
-
-
-/* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK,
-   EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined.
-   Define them here.  Values >= 2000 seem safe to use: Solaris ESTALE = 151,
-   HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133.
-
-   Note: When one of these systems defines some of these macros some day,
-   binaries will have to be recompiled so that they recognizes the new
-   errno values from the system.  */
-
-# ifndef ENOMSG
-#  define ENOMSG    2000
-#  define GNULIB_defined_ENOMSG 1
-# endif
-
-# ifndef EIDRM
-#  define EIDRM     2001
-#  define GNULIB_defined_EIDRM 1
-# endif
-
-# ifndef ENOLINK
-#  define ENOLINK   2002
-#  define GNULIB_defined_ENOLINK 1
-# endif
-
-# ifndef EPROTO
-#  define EPROTO    2003
-#  define GNULIB_defined_EPROTO 1
-# endif
-
-# ifndef EMULTIHOP
-#  define EMULTIHOP 2004
-#  define GNULIB_defined_EMULTIHOP 1
-# endif
-
-# ifndef EBADMSG
-#  define EBADMSG   2005
-#  define GNULIB_defined_EBADMSG 1
-# endif
-
-# ifndef EOVERFLOW
-#  define EOVERFLOW 2006
-#  define GNULIB_defined_EOVERFLOW 1
-# endif
-
-# ifndef ENOTSUP
-#  define ENOTSUP   2007
-#  define GNULIB_defined_ENOTSUP 1
-# endif
-
-# ifndef ECANCELED
-#  define ECANCELED 2008
-#  define GNULIB_defined_ECANCELED 1
-# endif
-
-
-#endif /* _GL_ERRNO_H */
-#endif /* _GL_ERRNO_H */
diff --git a/lib/error.c b/lib/error.c
deleted file mode 100644 (file)
index 3177bd5..0000000
+++ /dev/null
@@ -1,338 +0,0 @@
-/* Error handler for noninteractive utilities
-   Copyright (C) 1990-1998, 2000-2007 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
-   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 David MacKenzie <djm@gnu.ai.mit.edu>.  */
-
-#if !_LIBC
-# include <config.h>
-#endif
-
-#include "error.h"
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if !_LIBC && ENABLE_NLS
-# include "gettext.h"
-# define _(msgid) gettext (msgid)
-#endif
-
-#ifdef _LIBC
-# include <libintl.h>
-# include <stdbool.h>
-# include <stdint.h>
-# include <wchar.h>
-# define mbsrtowcs __mbsrtowcs
-#endif
-
-#if USE_UNLOCKED_IO
-# include "unlocked-io.h"
-#endif
-
-#ifndef _
-# define _(String) String
-#endif
-
-/* If NULL, error will flush stdout, then print on stderr the program
-   name, a colon and a space.  Otherwise, error will call this
-   function without parameters instead.  */
-void (*error_print_progname) (void);
-
-/* This variable is incremented each time `error' is called.  */
-unsigned int error_message_count;
-
-#ifdef _LIBC
-/* In the GNU C library, there is a predefined variable for this.  */
-
-# define program_name program_invocation_name
-# include <errno.h>
-# include <limits.h>
-# include <libio/libioP.h>
-
-/* 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)));
-extern void __error_at_line (int status, int errnum, const char *file_name,
-                            unsigned int line_number, const char *message,
-                            ...)
-     __attribute__ ((__format__ (__printf__, 5, 6)));;
-# define error __error
-# define error_at_line __error_at_line
-
-# include <libio/iolibio.h>
-# define fflush(s) INTUSE(_IO_fflush) (s)
-# undef putc
-# define putc(c, fp) INTUSE(_IO_putc) (c, fp)
-
-# include <bits/libc-lock.h>
-
-#else /* not _LIBC */
-
-# if !HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P
-#  ifndef HAVE_DECL_STRERROR_R
-"this configure-time declaration test was not run"
-#  endif
-char *strerror_r ();
-# endif
-
-/* The calling program should define program_name and set it to the
-   name of the executing program.  */
-extern char *program_name;
-
-# if HAVE_STRERROR_R || defined strerror_r
-#  define __strerror_r strerror_r
-# endif        /* HAVE_STRERROR_R || defined strerror_r */
-#endif /* not _LIBC */
-
-static void
-print_errno_message (int errnum)
-{
-  char const *s;
-
-#if defined HAVE_STRERROR_R || _LIBC
-  char errbuf[1024];
-# if STRERROR_R_CHAR_P || _LIBC
-  s = __strerror_r (errnum, errbuf, sizeof errbuf);
-# else
-  if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0)
-    s = errbuf;
-  else
-    s = 0;
-# endif
-#else
-  s = strerror (errnum);
-#endif
-
-#if !_LIBC
-  if (! s)
-    s = _("Unknown system error");
-#endif
-
-#if _LIBC
-  __fxprintf (NULL, ": %s", s);
-#else
-  fprintf (stderr, ": %s", s);
-#endif
-}
-
-static void
-error_tail (int status, int errnum, const char *message, va_list args)
-{
-#if _LIBC
-  if (_IO_fwide (stderr, 0) > 0)
-    {
-# define ALLOCA_LIMIT 2000
-      size_t len = strlen (message) + 1;
-      wchar_t *wmessage = NULL;
-      mbstate_t st;
-      size_t res;
-      const char *tmp;
-      bool use_malloc = false;
-
-      while (1)
-       {
-         if (__libc_use_alloca (len * sizeof (wchar_t)))
-           wmessage = (wchar_t *) alloca (len * sizeof (wchar_t));
-         else
-           {
-             if (!use_malloc)
-               wmessage = NULL;
-
-             wchar_t *p = (wchar_t *) realloc (wmessage,
-                                               len * sizeof (wchar_t));
-             if (p == NULL)
-               {
-                 free (wmessage);
-                 fputws_unlocked (L"out of memory\n", stderr);
-                 return;
-               }
-             wmessage = p;
-             use_malloc = true;
-           }
-
-         memset (&st, '\0', sizeof (st));
-         tmp = message;
-
-         res = mbsrtowcs (wmessage, &tmp, len, &st);
-         if (res != len)
-           break;
-
-         if (__builtin_expect (len >= SIZE_MAX / 2, 0))
-           {
-             /* This really should not happen if everything is fine.  */
-             res = (size_t) -1;
-             break;
-           }
-
-         len *= 2;
-       }
-
-      if (res == (size_t) -1)
-       {
-         /* The string cannot be converted.  */
-         if (use_malloc)
-           {
-             free (wmessage);
-             use_malloc = false;
-           }
-         wmessage = (wchar_t *) L"???";
-       }
-
-      __vfwprintf (stderr, wmessage, args);
-
-      if (use_malloc)
-       free (wmessage);
-    }
-  else
-#endif
-    vfprintf (stderr, message, args);
-  va_end (args);
-
-  ++error_message_count;
-  if (errnum)
-    print_errno_message (errnum);
-#if _LIBC
-  __fxprintf (NULL, "\n");
-#else
-  putc ('\n', stderr);
-#endif
-  fflush (stderr);
-  if (status)
-    exit (status);
-}
-
-
-/* Print the program name and error message MESSAGE, which is a printf-style
-   format string with optional args.
-   If ERRNUM is nonzero, print its corresponding system error message.
-   Exit with status STATUS if it is nonzero.  */
-void
-error (int status, int errnum, const char *message, ...)
-{
-  va_list args;
-
-#if defined _LIBC && defined __libc_ptf_call
-  /* We do not want this call to be cut short by a thread
-     cancellation.  Therefore disable cancellation for now.  */
-  int state = PTHREAD_CANCEL_ENABLE;
-  __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state),
-                  0);
-#endif
-
-  fflush (stdout);
-#ifdef _LIBC
-  _IO_flockfile (stderr);
-#endif
-  if (error_print_progname)
-    (*error_print_progname) ();
-  else
-    {
-#if _LIBC
-      __fxprintf (NULL, "%s: ", program_name);
-#else
-      fprintf (stderr, "%s: ", program_name);
-#endif
-    }
-
-  va_start (args, message);
-  error_tail (status, errnum, message, args);
-
-#ifdef _LIBC
-  _IO_funlockfile (stderr);
-# ifdef __libc_ptf_call
-  __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0);
-# endif
-#endif
-}
-\f
-/* Sometimes we want to have at most one error per line.  This
-   variable controls whether this mode is selected or not.  */
-int error_one_per_line;
-
-void
-error_at_line (int status, int errnum, const char *file_name,
-              unsigned int line_number, const char *message, ...)
-{
-  va_list args;
-
-  if (error_one_per_line)
-    {
-      static const char *old_file_name;
-      static unsigned int old_line_number;
-
-      if (old_line_number == line_number
-         && (file_name == old_file_name
-             || strcmp (old_file_name, file_name) == 0))
-       /* Simply return and print nothing.  */
-       return;
-
-      old_file_name = file_name;
-      old_line_number = line_number;
-    }
-
-#if defined _LIBC && defined __libc_ptf_call
-  /* We do not want this call to be cut short by a thread
-     cancellation.  Therefore disable cancellation for now.  */
-  int state = PTHREAD_CANCEL_ENABLE;
-  __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state),
-                  0);
-#endif
-
-  fflush (stdout);
-#ifdef _LIBC
-  _IO_flockfile (stderr);
-#endif
-  if (error_print_progname)
-    (*error_print_progname) ();
-  else
-    {
-#if _LIBC
-      __fxprintf (NULL, "%s:", program_name);
-#else
-      fprintf (stderr, "%s:", program_name);
-#endif
-    }
-
-#if _LIBC
-  __fxprintf (NULL, file_name != NULL ? "%s:%d: " : " ",
-             file_name, line_number);
-#else
-  fprintf (stderr, file_name != NULL ? "%s:%d: " : " ",
-          file_name, line_number);
-#endif
-
-  va_start (args, message);
-  error_tail (status, errnum, message, args);
-
-#ifdef _LIBC
-  _IO_funlockfile (stderr);
-# ifdef __libc_ptf_call
-  __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0);
-# endif
-#endif
-}
-
-#ifdef _LIBC
-/* Make the weak alias.  */
-# undef error
-# undef error_at_line
-weak_alias (__error, error)
-weak_alias (__error_at_line, error_at_line)
-#endif
diff --git a/lib/error.h b/lib/error.h
deleted file mode 100644 (file)
index 6d49681..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Declaration for error-reporting function
-   Copyright (C) 1995, 1996, 1997, 2003, 2006, 2008 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
-   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 _ERROR_H
-#define _ERROR_H 1
-
-#ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
-#  define __attribute__(Spec) /* empty */
-# endif
-/* The __-protected variants of `format' and `printf' attributes
-   are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-#  define __format__ format
-#  define __printf__ printf
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* 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)'.  */
-
-extern void error (int __status, int __errnum, const char *__format, ...)
-     __attribute__ ((__format__ (__printf__, 3, 4)));
-
-extern void error_at_line (int __status, int __errnum, const char *__fname,
-                          unsigned int __lineno, const char *__format, ...)
-     __attribute__ ((__format__ (__printf__, 5, 6)));
-
-/* If NULL, error will flush stdout, then print on stderr the program
-   name, a colon and a space.  Otherwise, error will call this
-   function without parameters instead.  */
-extern void (*error_print_progname) (void);
-
-/* 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
-   variable controls whether this mode is selected or not.  */
-extern int error_one_per_line;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* error.h */
diff --git a/lib/exclude.c b/lib/exclude.c
deleted file mode 100644 (file)
index f38abf2..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-/* exclude.c -- exclude file names
-
-   Copyright (C) 1992, 1993, 1994, 1997, 1999, 2000, 2001, 2002, 2003,
-   2004, 2005, 2006, 2007 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 <eggert@twinsun.com>  */
-
-#include <config.h>
-
-#include <stdbool.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "exclude.h"
-#include "fnmatch.h"
-#include "xalloc.h"
-#include "verify.h"
-
-#if USE_UNLOCKED_IO
-# include "unlocked-io.h"
-#endif
-
-/* Non-GNU systems lack these options, so we don't need to check them.  */
-#ifndef FNM_CASEFOLD
-# define FNM_CASEFOLD 0
-#endif
-#ifndef FNM_EXTMATCH
-# define FNM_EXTMATCH 0
-#endif
-#ifndef FNM_LEADING_DIR
-# define FNM_LEADING_DIR 0
-#endif
-
-verify (((EXCLUDE_ANCHORED | EXCLUDE_INCLUDE | EXCLUDE_WILDCARDS)
-        & (FNM_PATHNAME | FNM_NOESCAPE | FNM_PERIOD | FNM_LEADING_DIR
-           | FNM_CASEFOLD | FNM_EXTMATCH))
-       == 0);
-
-/* An exclude pattern-options pair.  The options are fnmatch options
-   ORed with EXCLUDE_* options.  */
-
-struct patopts
-  {
-    char const *pattern;
-    int options;
-  };
-
-/* An exclude list, of pattern-options pairs.  */
-
-struct exclude
-  {
-    struct patopts *exclude;
-    size_t exclude_alloc;
-    size_t exclude_count;
-  };
-
-/* Return a newly allocated and empty exclude list.  */
-
-struct exclude *
-new_exclude (void)
-{
-  return xzalloc (sizeof *new_exclude ());
-}
-
-/* Free the storage associated with an exclude list.  */
-
-void
-free_exclude (struct exclude *ex)
-{
-  free (ex->exclude);
-  free (ex);
-}
-
-/* Return zero if PATTERN matches F, obeying OPTIONS, except that
-   (unlike fnmatch) wildcards are disabled in PATTERN.  */
-
-static int
-fnmatch_no_wildcards (char const *pattern, char const *f, int options)
-{
-  if (! (options & FNM_LEADING_DIR))
-    return ((options & FNM_CASEFOLD)
-           ? mbscasecmp (pattern, f)
-           : strcmp (pattern, f));
-  else if (! (options & FNM_CASEFOLD))
-    {
-      size_t patlen = strlen (pattern);
-      int r = strncmp (pattern, f, patlen);
-      if (! r)
-       {
-         r = f[patlen];
-         if (r == '/')
-           r = 0;
-       }
-      return r;
-    }
-  else
-    {
-      /* Walk through a copy of F, seeing whether P matches any prefix
-        of F.
-
-        FIXME: This is an O(N**2) algorithm; it should be O(N).
-        Also, the copy should not be necessary.  However, fixing this
-        will probably involve a change to the mbs* API.  */
-
-      char *fcopy = xstrdup (f);
-      char *p;
-      int r;
-      for (p = fcopy; ; *p++ = '/')
-       {
-         p = strchr (p, '/');
-         if (p)
-           *p = '\0';
-         r = mbscasecmp (pattern, fcopy);
-         if (!p || r <= 0)
-           break;
-       }
-      free (fcopy);
-      return r;
-    }
-}
-
-bool
-exclude_fnmatch (char const *pattern, char const *f, int options)
-{
-  int (*matcher) (char const *, char const *, int) =
-    (options & EXCLUDE_WILDCARDS
-     ? fnmatch
-     : fnmatch_no_wildcards);
-  bool matched = ((*matcher) (pattern, f, options) == 0);
-  char const *p;
-
-  if (! (options & EXCLUDE_ANCHORED))
-    for (p = f; *p && ! matched; p++)
-      if (*p == '/' && p[1] != '/')
-       matched = ((*matcher) (pattern, p + 1, options) == 0);
-
-  return matched;
-}
-
-/* Return true if EX excludes F.  */
-
-bool
-excluded_file_name (struct exclude const *ex, char const *f)
-{
-  size_t exclude_count = ex->exclude_count;
-
-  /* If no options are given, the default is to include.  */
-  if (exclude_count == 0)
-    return false;
-  else
-    {
-      struct patopts const *exclude = ex->exclude;
-      size_t i;
-
-      /* Otherwise, the default is the opposite of the first option.  */
-      bool excluded = !! (exclude[0].options & EXCLUDE_INCLUDE);
-
-      /* Scan through the options, seeing whether they change F from
-        excluded to included or vice versa.  */
-      for (i = 0;  i < exclude_count;  i++)
-       {
-         char const *pattern = exclude[i].pattern;
-         int options = exclude[i].options;
-         if (excluded == !! (options & EXCLUDE_INCLUDE))
-           excluded ^= exclude_fnmatch (pattern, f, options);
-       }
-
-      return excluded;
-    }
-}
-
-/* Append to EX the exclusion PATTERN with OPTIONS.  */
-
-void
-add_exclude (struct exclude *ex, char const *pattern, int options)
-{
-  struct patopts *patopts;
-
-  if (ex->exclude_count == ex->exclude_alloc)
-    ex->exclude = x2nrealloc (ex->exclude, &ex->exclude_alloc,
-                             sizeof *ex->exclude);
-
-  patopts = &ex->exclude[ex->exclude_count++];
-  patopts->pattern = pattern;
-  patopts->options = options;
-}
-
-/* Use ADD_FUNC to append to EX the patterns in FILE_NAME, each with
-   OPTIONS.  LINE_END terminates each pattern in the file.  If
-   LINE_END is a space character, ignore trailing spaces and empty
-   lines in FILE.  Return -1 on failure, 0 on success.  */
-
-int
-add_exclude_file (void (*add_func) (struct exclude *, char const *, int),
-                 struct exclude *ex, char const *file_name, int options,
-                 char line_end)
-{
-  bool use_stdin = file_name[0] == '-' && !file_name[1];
-  FILE *in;
-  char *buf = NULL;
-  char *p;
-  char const *pattern;
-  char const *lim;
-  size_t buf_alloc = 0;
-  size_t buf_count = 0;
-  int c;
-  int e = 0;
-
-  if (use_stdin)
-    in = stdin;
-  else if (! (in = fopen (file_name, "r")))
-    return -1;
-
-  while ((c = getc (in)) != EOF)
-    {
-      if (buf_count == buf_alloc)
-       buf = x2realloc (buf, &buf_alloc);
-      buf[buf_count++] = c;
-    }
-
-  if (ferror (in))
-    e = errno;
-
-  if (!use_stdin && fclose (in) != 0)
-    e = errno;
-
-  buf = xrealloc (buf, buf_count + 1);
-  buf[buf_count] = line_end;
-  lim = buf + buf_count + ! (buf_count == 0 || buf[buf_count - 1] == line_end);
-  pattern = buf;
-
-  for (p = buf; p < lim; p++)
-    if (*p == line_end)
-      {
-       char *pattern_end = p;
-
-       if (isspace ((unsigned char) line_end))
-         {
-           for (; ; pattern_end--)
-             if (pattern_end == pattern)
-               goto next_pattern;
-             else if (! isspace ((unsigned char) pattern_end[-1]))
-               break;
-         }
-
-       *pattern_end = '\0';
-       (*add_func) (ex, pattern, options);
-
-      next_pattern:
-       pattern = p + 1;
-      }
-
-  errno = e;
-  return e ? -1 : 0;
-}
diff --git a/lib/exclude.h b/lib/exclude.h
deleted file mode 100644 (file)
index 7d03bc1..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/* exclude.h -- declarations for excluding file names
-
-   Copyright (C) 1992, 1993, 1994, 1997, 1999, 2001, 2002, 2003, 2005,
-   2006 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 <eggert@twinsun.com>  */
-
-/* Exclude options, which can be ORed with fnmatch options.  */
-
-/* Patterns must match the start of file names, instead of matching
-   anywhere after a '/'.  */
-#define EXCLUDE_ANCHORED (1 << 30)
-
-/* Include instead of exclude.  */
-#define EXCLUDE_INCLUDE (1 << 29)
-
-/* '?', '*', '[', and '\\' are special in patterns.  Without this
-   option, these characters are ordinary and fnmatch is not used.  */
-#define EXCLUDE_WILDCARDS (1 << 28)
-
-struct exclude;
-
-struct exclude *new_exclude (void);
-void free_exclude (struct exclude *);
-void add_exclude (struct exclude *, char const *, int);
-int add_exclude_file (void (*) (struct exclude *, char const *, int),
-                     struct exclude *, char const *, int, char);
-bool excluded_file_name (struct exclude const *, char const *);
-bool exclude_fnmatch (char const *pattern, char const *f, int options);
diff --git a/lib/exitfail.c b/lib/exitfail.c
deleted file mode 100644 (file)
index 6d1fe4a..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Failure exit status
-
-   Copyright (C) 2002, 2003, 2005, 2006, 2007 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>
-
-#include "exitfail.h"
-
-#include <stdlib.h>
-
-int volatile exit_failure = EXIT_FAILURE;
diff --git a/lib/exitfail.h b/lib/exitfail.h
deleted file mode 100644 (file)
index 713f259..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Failure exit status
-
-   Copyright (C) 2002 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/>.  */
-
-extern int volatile exit_failure;
diff --git a/lib/fchdir.c b/lib/fchdir.c
deleted file mode 100644 (file)
index 969e984..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-/* fchdir replacement.
-   Copyright (C) 2006-2008 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 <dirent.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "canonicalize.h"
-
-/* This replacement assumes that a directory is not renamed while opened
-   through a file descriptor.  */
-
-/* Array of file descriptors opened.  If it points to a directory, it stores
-   info about this directory; otherwise it stores an errno value of ENOTDIR.  */
-typedef struct
-{
-  char *name;       /* Absolute name of the directory, or NULL.  */
-  int saved_errno;  /* If name == NULL: The error code describing the failure
-                      reason.  */
-} dir_info_t;
-static dir_info_t *dirs;
-static size_t dirs_allocated;
-
-/* Try to ensure dirs has enough room for a slot at index fd.  */
-static void
-ensure_dirs_slot (size_t fd)
-{
-  if (fd >= dirs_allocated)
-    {
-      size_t new_allocated;
-      dir_info_t *new_dirs;
-      size_t i;
-
-      new_allocated = 2 * dirs_allocated + 1;
-      if (new_allocated <= fd)
-       new_allocated = fd + 1;
-      new_dirs =
-       (dirs != NULL
-        ? (dir_info_t *) realloc (dirs, new_allocated * sizeof (dir_info_t))
-        : (dir_info_t *) malloc (new_allocated * sizeof (dir_info_t)));
-      if (new_dirs != NULL)
-       {
-         for (i = dirs_allocated; i < new_allocated; i++)
-           {
-             new_dirs[i].name = NULL;
-             new_dirs[i].saved_errno = ENOTDIR;
-           }
-         dirs = new_dirs;
-         dirs_allocated = new_allocated;
-       }
-    }
-}
-
-/* Hook into the gnulib replacements for open() and close() to keep track
-   of the open file descriptors.  */
-
-void
-_gl_unregister_fd (int fd)
-{
-  if (fd >= 0 && fd < dirs_allocated)
-    {
-      if (dirs[fd].name != NULL)
-       free (dirs[fd].name);
-      dirs[fd].name = NULL;
-      dirs[fd].saved_errno = ENOTDIR;
-    }
-}
-
-void
-_gl_register_fd (int fd, const char *filename)
-{
-  struct stat statbuf;
-
-  ensure_dirs_slot (fd);
-  if (fd < dirs_allocated
-      && fstat (fd, &statbuf) >= 0 && S_ISDIR (statbuf.st_mode))
-    {
-      dirs[fd].name = canonicalize_file_name (filename);
-      if (dirs[fd].name == NULL)
-       dirs[fd].saved_errno = errno;
-    }
-}
-
-/* Override opendir() and closedir(), to keep track of the open file
-   descriptors.  Needed because there is a function dirfd().  */
-
-int
-rpl_closedir (DIR *dp)
-#undef closedir
-{
-  int fd = dirfd (dp);
-  int retval = closedir (dp);
-
-  if (retval >= 0)
-    _gl_unregister_fd (fd);
-  return retval;
-}
-
-DIR *
-rpl_opendir (const char *filename)
-#undef opendir
-{
-  DIR *dp;
-
-  dp = opendir (filename);
-  if (dp != NULL)
-    {
-      int fd = dirfd (dp);
-      if (fd >= 0)
-       _gl_register_fd (fd, filename);
-    }
-  return dp;
-}
-
-/* Override dup() and dup2(), to keep track of open file descriptors.  */
-
-int
-rpl_dup (int oldfd)
-#undef dup
-{
-  int newfd = dup (oldfd);
-
-  if (oldfd >= 0 && newfd >= 0)
-    {
-      ensure_dirs_slot (newfd);
-      if (newfd < dirs_allocated)
-       {
-         if (oldfd < dirs_allocated)
-           {
-             if (dirs[oldfd].name != NULL)
-               {
-                 dirs[newfd].name = strdup (dirs[oldfd].name);
-                 if (dirs[newfd].name == NULL)
-                   dirs[newfd].saved_errno = ENOMEM;
-               }
-             else
-               {
-                 dirs[newfd].name = NULL;
-                 dirs[newfd].saved_errno = dirs[oldfd].saved_errno;
-               }
-           }
-         else
-           {
-             dirs[newfd].name = NULL;
-             dirs[newfd].saved_errno = ENOMEM;
-           }
-       }
-    }
-  return newfd;
-}
-
-int
-rpl_dup2 (int oldfd, int newfd)
-#undef dup2
-{
-  int retval = dup2 (oldfd, newfd);
-
-  if (retval >= 0 && oldfd >= 0 && newfd >= 0 && newfd != oldfd)
-    {
-      ensure_dirs_slot (newfd);
-      if (newfd < dirs_allocated)
-       {
-         if (oldfd < dirs_allocated)
-           {
-             if (dirs[oldfd].name != NULL)
-               {
-                 dirs[newfd].name = strdup (dirs[oldfd].name);
-                 if (dirs[newfd].name == NULL)
-                   dirs[newfd].saved_errno = ENOMEM;
-               }
-             else
-               {
-                 dirs[newfd].name = NULL;
-                 dirs[newfd].saved_errno = dirs[oldfd].saved_errno;
-               }
-           }
-         else
-           {
-             dirs[newfd].name = NULL;
-             dirs[newfd].saved_errno = ENOMEM;
-           }
-       }
-    }
-  return retval;
-}
-
-/* Implement fchdir() in terms of chdir().  */
-
-int
-fchdir (int fd)
-{
-  if (fd >= 0)
-    {
-      if (fd < dirs_allocated)
-       {
-         if (dirs[fd].name != NULL)
-           return chdir (dirs[fd].name);
-         else
-           {
-             errno = dirs[fd].saved_errno;
-             return -1;
-           }
-       }
-      else
-       {
-         errno = ENOMEM;
-         return -1;
-       }
-    }
-  else
-    {
-      errno = EBADF;
-      return -1;
-    }
-}
diff --git a/lib/fchmodat.c b/lib/fchmodat.c
deleted file mode 100644 (file)
index 935bdcb..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Change the protections of file relative to an open directory.
-   Copyright (C) 2006 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 */
-
-#include <config.h>
-
-#include "openat.h"
-#include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */
-#include "save-cwd.h"
-#include "openat-priv.h"
-
-#ifndef HAVE_LCHMOD
-/* Use a different name, to avoid conflicting with any
-   system-supplied declaration.  */
-# undef lchmod
-# define lchmod lchmod_rpl
-static int lchmod (char const *f, mode_t m) { errno = ENOSYS; return -1; }
-#endif
-
-/* Solaris 10 has no function like this.
-   Invoke chmod or lchmod on file, FILE, using mode MODE, in the directory
-   open on descriptor FD.  If possible, do it without changing the
-   working directory.  Otherwise, resort to using save_cwd/fchdir,
-   then mkdir/restore_cwd.  If either the save_cwd or the restore_cwd
-   fails, then give a diagnostic and exit nonzero.
-   Note that an attempt to use a FLAG value of AT_SYMLINK_NOFOLLOW
-   on a system without lchmod support causes this function to fail.  */
-
-#define AT_FUNC_NAME fchmodat
-#define AT_FUNC_F1 lchmod
-#define AT_FUNC_F2 chmod
-#define AT_FUNC_USE_F1_COND flag == AT_SYMLINK_NOFOLLOW
-#define AT_FUNC_POST_FILE_PARAM_DECLS , mode_t mode, int flag
-#define AT_FUNC_POST_FILE_ARGS        , mode
-#include "at-func.c"
diff --git a/lib/fchown-stub.c b/lib/fchown-stub.c
deleted file mode 100644 (file)
index 6be750b..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <config.h>
-
-#include <sys/types.h>
-#include <errno.h>
-
-/* A trivial substitute for `fchown'.
-
-   DJGPP 2.03 and earlier (and perhaps later) don't have `fchown',
-   so we pretend no-one has permission for this operation. */
-
-int
-fchown (int fd, uid_t uid, gid_t gid)
-{
-  errno = EPERM;
-  return -1;
-}
diff --git a/lib/fchownat.c b/lib/fchownat.c
deleted file mode 100644 (file)
index a1d5e60..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/* This function serves as replacement for a missing fchownat function,
-   as well as a work around for the fchownat bug in glibc-2.4:
-    <http://lists.ubuntu.com/archives/ubuntu-users/2006-September/093218.html>
-   when the buggy fchownat-with-AT_SYMLINK_NOFOLLOW operates on a symlink, it
-   mistakenly affects the symlink referent, rather than the symlink itself.
-
-   Copyright (C) 2006-2007 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 */
-
-#include <config.h>
-
-#include "openat.h"
-
-#include <unistd.h>
-
-#include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */
-#include "save-cwd.h"
-#include "openat-priv.h"
-
-/* Replacement for Solaris' function by the same name.
-   Invoke chown or lchown on file, FILE, using OWNER and GROUP, in the
-   directory open on descriptor FD.  If FLAG is AT_SYMLINK_NOFOLLOW, then
-   use lchown, otherwise, use chown.  If possible, do it without changing
-   the working directory.  Otherwise, resort to using save_cwd/fchdir,
-   then mkdir/restore_cwd.  If either the save_cwd or the restore_cwd
-   fails, then give a diagnostic and exit nonzero.  */
-
-#define AT_FUNC_NAME fchownat
-#define AT_FUNC_F1 lchown
-#define AT_FUNC_F2 chown
-#define AT_FUNC_USE_F1_COND flag == AT_SYMLINK_NOFOLLOW
-#define AT_FUNC_POST_FILE_PARAM_DECLS , uid_t owner, gid_t group, int flag
-#define AT_FUNC_POST_FILE_ARGS        , owner, group
-#include "at-func.c"
diff --git a/lib/fclose.c b/lib/fclose.c
deleted file mode 100644 (file)
index a0074b7..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/* fclose replacement.
-   Copyright (C) 2008 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 <stdio.h>
-
-#include <errno.h>
-#include <unistd.h>
-
-/* Override fclose() to call the overridden close().  */
-
-int
-rpl_fclose (FILE *fp)
-#undef fclose
-{
-  int saved_errno = 0;
-
-  if (fflush (fp))
-    saved_errno = errno;
-
-  if (close (fileno (fp)) < 0 && saved_errno == 0)
-    saved_errno = errno;
-
-  fclose (fp); /* will fail with errno = EBADF */
-
-  if (saved_errno != 0)
-    {
-      errno = saved_errno;
-      return EOF;
-    }
-  return 0;
-}
diff --git a/lib/fcntl--.h b/lib/fcntl--.h
deleted file mode 100644 (file)
index 5a6a879..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Like fcntl.h, but redefine some names to avoid glitches.
-
-   Copyright (C) 2005 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.  */
-
-#include <fcntl.h>
-#include "fcntl-safer.h"
-
-#undef open
-#define open open_safer
-
-#undef creat
-#define creat creat_safer
diff --git a/lib/fcntl-safer.h b/lib/fcntl-safer.h
deleted file mode 100644 (file)
index 99f3865..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Invoke fcntl-like functions, but avoid some glitches.
-
-   Copyright (C) 2005 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.  */
-
-#include <sys/types.h>
-
-int open_safer (char const *, int, ...);
-int creat_safer (char const *, mode_t);
diff --git a/lib/fcntl.in.h b/lib/fcntl.in.h
deleted file mode 100644 (file)
index fd7520e..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Like <fcntl.h>, but with non-working flags defined to 0.
-
-   Copyright (C) 2006-2008 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 */
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-
-#if defined __need_system_fcntl_h
-/* Special invocation convention.  */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#@INCLUDE_NEXT@ @NEXT_FCNTL_H@
-
-#else
-/* Normal invocation convention.  */
-
-#ifndef _GL_FCNTL_H
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-/* The include_next requires a split double-inclusion guard.  */
-#@INCLUDE_NEXT@ @NEXT_FCNTL_H@
-
-#ifndef _GL_FCNTL_H
-#define _GL_FCNTL_H
-
-
-/* Declare overridden functions.  */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if @GNULIB_OPEN@
-# if @REPLACE_OPEN@
-#  undef open
-#  define open rpl_open
-extern int open (const char *filename, int flags, ...);
-# endif
-#endif
-
-#ifdef FCHDIR_REPLACEMENT
-/* gnulib internal function.  */
-extern void _gl_register_fd (int fd, const char *filename);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-
-/* Fix up the O_* macros.  */
-
-#if !defined O_DIRECT && defined O_DIRECTIO
-/* Tru64 spells it `O_DIRECTIO'.  */
-# define O_DIRECT O_DIRECTIO
-#endif
-
-#ifndef O_DIRECT
-# define O_DIRECT 0
-#endif
-
-#ifndef O_DIRECTORY
-# define O_DIRECTORY 0
-#endif
-
-#ifndef O_DSYNC
-# define O_DSYNC 0
-#endif
-
-#ifndef O_NDELAY
-# define O_NDELAY 0
-#endif
-
-#ifndef O_NOATIME
-# define O_NOATIME 0
-#endif
-
-#ifndef O_NONBLOCK
-# define O_NONBLOCK O_NDELAY
-#endif
-
-#ifndef O_NOCTTY
-# define O_NOCTTY 0
-#endif
-
-#ifndef O_NOFOLLOW
-# define O_NOFOLLOW 0
-#endif
-
-#ifndef O_NOLINKS
-# define O_NOLINKS 0
-#endif
-
-#ifndef O_RSYNC
-# define O_RSYNC 0
-#endif
-
-#ifndef O_SYNC
-# define O_SYNC 0
-#endif
-
-/* For systems that distinguish between text and binary I/O.
-   O_BINARY is usually declared in fcntl.h  */
-#if !defined O_BINARY && defined _O_BINARY
-  /* For MSC-compatible compilers.  */
-# define O_BINARY _O_BINARY
-# define O_TEXT _O_TEXT
-#endif
-
-#if defined __BEOS__ || defined __HAIKU__
-  /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect.  */
-# undef O_BINARY
-# undef O_TEXT
-#endif
-
-#ifndef O_BINARY
-# define O_BINARY 0
-# define O_TEXT 0
-#endif
-
-
-#endif /* _GL_FCNTL_H */
-#endif /* _GL_FCNTL_H */
-#endif
diff --git a/lib/fd-safer.c b/lib/fd-safer.c
deleted file mode 100644 (file)
index fb99001..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Return a safer copy of a file descriptor.
-
-   Copyright (C) 2005, 2006, 2009 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.  */
-
-#include <config.h>
-
-#include "unistd-safer.h"
-
-#include <errno.h>
-
-#include <unistd.h>
-
-/* Return FD, unless FD would be a copy of standard input, output, or
-   error; in that case, return a duplicate of FD, closing FD.  On
-   failure to duplicate, close FD, set errno, and return -1.  Preserve
-   errno if FD is negative, so that the caller can always inspect
-   errno when the returned value is negative.
-
-   This function is usefully wrapped around functions that return file
-   descriptors, e.g., fd_safer (open ("file", O_RDONLY)).  */
-
-int
-fd_safer (int fd)
-{
-  if (STDIN_FILENO <= fd && fd <= STDERR_FILENO)
-    {
-      int f = dup_safer (fd);
-      int e = errno;
-      close (fd);
-      errno = e;
-      fd = f;
-    }
-
-  return fd;
-}
diff --git a/lib/fileblocks.c b/lib/fileblocks.c
deleted file mode 100644 (file)
index 822935a..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Convert file size to number of blocks on System V-like machines.
-
-   Copyright (C) 1990, 1997, 1998, 1999, 2004, 2005, 2006 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 Brian L. Matthews, blm@6sceng.UUCP. */
-
-#include <config.h>
-
-#include <sys/types.h>
-
-#if HAVE_SYS_PARAM_H
-# include <sys/param.h>
-#endif
-
-#if !HAVE_STRUCT_STAT_ST_BLOCKS && !defined _POSIX_SOURCE && defined BSIZE
-
-# include <unistd.h>
-
-# ifndef NINDIR
-
-#  if defined __DJGPP__
-typedef long daddr_t; /* for disk address */
-#  endif
-
-/* Some SysV's, like Irix, seem to lack this.  Hope it's correct. */
-/* Number of inode pointers per indirect block. */
-#  define NINDIR (BSIZE / sizeof (daddr_t))
-# endif /* !NINDIR */
-
-/* Number of direct block addresses in an inode. */
-# define NDIR  10
-
-/* Return the number of 512-byte blocks in a file of SIZE bytes. */
-
-off_t
-st_blocks (off_t size)
-{
-  off_t datablks = size / 512 + (size % 512 != 0);
-  off_t indrblks = 0;
-
-  if (datablks > NDIR)
-    {
-      indrblks = (datablks - NDIR - 1) / NINDIR + 1;
-
-      if (datablks > NDIR + NINDIR)
-       {
-         indrblks += (datablks - NDIR - NINDIR - 1) / (NINDIR * NINDIR) + 1;
-
-         if (datablks > NDIR + NINDIR + NINDIR * NINDIR)
-           indrblks++;
-       }
-    }
-
-  return datablks + indrblks;
-}
-#else
-/* This declaration is solely to ensure that after preprocessing
-   this file is never empty.  */
-typedef int textutils_fileblocks_unused;
-#endif
diff --git a/lib/float+.h b/lib/float+.h
deleted file mode 100644 (file)
index e78f175..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Supplemental information about the floating-point formats.
-   Copyright (C) 2007 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#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[2 * (SIZEOF_FLT <= sizeof (float)) - 1];
-typedef int verify_sizeof_dbl[2 * (SIZEOF_DBL <= sizeof (double)) - 1];
-typedef int verify_sizeof_ldbl[2 * (SIZEOF_LDBL <= sizeof (long double)) - 1];
-
-#endif /* _FLOATPLUS_H */
diff --git a/lib/float.in.h b/lib/float.in.h
deleted file mode 100644 (file)
index 9ba2bce..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/* A correct <float.h>.
-
-   Copyright (C) 2007-2008 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 _GL_FLOAT_H
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-
-/* The include_next requires a split double-inclusion guard.  */
-#@INCLUDE_NEXT@ @NEXT_FLOAT_H@
-
-#ifndef _GL_FLOAT_H
-#define _GL_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
-
-#endif /* _GL_FLOAT_H */
-#endif /* _GL_FLOAT_H */
diff --git a/lib/fnmatch.c b/lib/fnmatch.c
deleted file mode 100644 (file)
index 9ae77ec..0000000
+++ /dev/null
@@ -1,356 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007
-       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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _LIBC
-# include <config.h>
-#endif
-
-/* Enable GNU extensions in fnmatch.h.  */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE   1
-#endif
-
-#if ! defined __builtin_expect && __GNUC__ < 3
-# define __builtin_expect(expr, expected) (expr)
-#endif
-
-#include <fnmatch.h>
-
-#include <alloca.h>
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <stddef.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-
-#define WIDE_CHAR_SUPPORT \
-  (HAVE_WCTYPE_H && HAVE_BTOWC && HAVE_ISWCTYPE \
-   && HAVE_WMEMCHR && (HAVE_WMEMCPY || HAVE_WMEMPCPY))
-
-/* For platform which support the ISO C amendement 1 functionality we
-   support user defined character classes.  */
-#if defined _LIBC || WIDE_CHAR_SUPPORT
-# include <wctype.h>
-# include <wchar.h>
-#endif
-
-/* We need some of the locale data (the collation sequence information)
-   but there is no interface to get this information in general.  Therefore
-   we support a correct implementation only in glibc.  */
-#ifdef _LIBC
-# include "../locale/localeinfo.h"
-# include "../locale/elem-hash.h"
-# include "../locale/coll-lookup.h"
-# include <shlib-compat.h>
-
-# define CONCAT(a,b) __CONCAT(a,b)
-# define mbsrtowcs __mbsrtowcs
-# define fnmatch __fnmatch
-extern int fnmatch (const char *pattern, const char *string, int flags);
-#endif
-
-#ifndef SIZE_MAX
-# define SIZE_MAX ((size_t) -1)
-#endif
-
-/* We often have to test for FNM_FILE_NAME and FNM_PERIOD being both set.  */
-#define NO_LEADING_PERIOD(flags) \
-  ((flags & (FNM_FILE_NAME | FNM_PERIOD)) == (FNM_FILE_NAME | FNM_PERIOD))
-
-/* Comment out all this code if we are using the GNU C Library, and are not
-   actually compiling the library itself, and have not detected a bug
-   in the library.  This code is part of the GNU C
-   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,
-   it is simpler to just do this in the source for each such file.  */
-
-#if defined _LIBC || !defined __GNU_LIBRARY__ || !HAVE_FNMATCH_GNU
-
-
-# if ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK))
-#  define isblank(c) ((c) == ' ' || (c) == '\t')
-# endif
-
-# define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
-
-# 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.  */
-#  ifdef CHARCLASS_NAME_MAX
-#   define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
-#  else
-/* This shouldn't happen but some implementation might still have this
-   problem.  Use a reasonable default value.  */
-#   define CHAR_CLASS_MAX_LENGTH 256
-#  endif
-
-#  ifdef _LIBC
-#   define IS_CHAR_CLASS(string) __wctype (string)
-#  else
-#   define IS_CHAR_CLASS(string) wctype (string)
-#  endif
-
-#  ifdef _LIBC
-#   define ISWCTYPE(WC, WT)    __iswctype (WC, WT)
-#  else
-#   define ISWCTYPE(WC, WT)    iswctype (WC, WT)
-#  endif
-
-#  if (HAVE_MBSTATE_T && HAVE_MBSRTOWCS) || _LIBC
-/* In this case we are implementing the multibyte character handling.  */
-#   define HANDLE_MULTIBYTE    1
-#  endif
-
-# else
-#  define CHAR_CLASS_MAX_LENGTH  6 /* Namely, `xdigit'.  */
-
-#  define IS_CHAR_CLASS(string)                                                      \
-   (STREQ (string, "alpha") || STREQ (string, "upper")                       \
-    || STREQ (string, "lower") || STREQ (string, "digit")                    \
-    || STREQ (string, "alnum") || STREQ (string, "xdigit")                   \
-    || STREQ (string, "space") || STREQ (string, "print")                    \
-    || STREQ (string, "punct") || STREQ (string, "graph")                    \
-    || STREQ (string, "cntrl") || STREQ (string, "blank"))
-# endif
-
-/* Avoid depending on library functions or files
-   whose names are inconsistent.  */
-
-/* Global variable.  */
-static int posixly_correct;
-
-# ifndef internal_function
-/* Inside GNU libc we mark some function in a special way.  In other
-   environments simply ignore the marking.  */
-#  define internal_function
-# endif
-
-/* Note that this evaluates C many times.  */
-# define FOLD(c) ((flags & FNM_CASEFOLD) ? tolower (c) : (c))
-# define CHAR  char
-# define UCHAR unsigned char
-# define INT   int
-# define FCT   internal_fnmatch
-# define EXT   ext_match
-# define END   end_pattern
-# define L_(CS)        CS
-# ifdef _LIBC
-#  define BTOWC(C)     __btowc (C)
-# else
-#  define BTOWC(C)     btowc (C)
-# endif
-# define STRLEN(S) strlen (S)
-# define STRCAT(D, S) strcat (D, S)
-# ifdef _LIBC
-#  define MEMPCPY(D, S, N) __mempcpy (D, S, N)
-# else
-#  if HAVE_MEMPCPY
-#   define MEMPCPY(D, S, N) mempcpy (D, S, N)
-#  else
-#   define MEMPCPY(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N)))
-#  endif
-# endif
-# define MEMCHR(S, C, N) memchr (S, C, N)
-# define STRCOLL(S1, S2) strcoll (S1, S2)
-# include "fnmatch_loop.c"
-
-
-# if HANDLE_MULTIBYTE
-#  define FOLD(c) ((flags & FNM_CASEFOLD) ? towlower (c) : (c))
-#  define CHAR wchar_t
-#  define UCHAR        wint_t
-#  define INT  wint_t
-#  define FCT  internal_fnwmatch
-#  define EXT  ext_wmatch
-#  define END  end_wpattern
-#  define L_(CS)       L##CS
-#  define BTOWC(C)     (C)
-#  ifdef _LIBC
-#   define STRLEN(S) __wcslen (S)
-#   define STRCAT(D, S) __wcscat (D, S)
-#   define MEMPCPY(D, S, N) __wmempcpy (D, S, N)
-#  else
-#   define STRLEN(S) wcslen (S)
-#   define STRCAT(D, S) wcscat (D, S)
-#   if HAVE_WMEMPCPY
-#    define MEMPCPY(D, S, N) wmempcpy (D, S, N)
-#   else
-#    define MEMPCPY(D, S, N) (wmemcpy (D, S, N) + (N))
-#   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
-/* We have to convert the wide character string in a multibyte string.  But
-   we know that the character class names consist of alphanumeric characters
-   from the portable character set, and since the wide character encoding
-   for a member of the portable character set is the same code point as
-   its single-byte encoding, we can use a simplified method to convert the
-   string to a multibyte character string.  */
-static wctype_t
-is_char_class (const wchar_t *wcs)
-{
-  char s[CHAR_CLASS_MAX_LENGTH + 1];
-  char *cp = s;
-
-  do
-    {
-      /* Test for a printable character from the portable character set.  */
-#  ifdef _LIBC
-      if (*wcs < 0x20 || *wcs > 0x7e
-         || *wcs == 0x24 || *wcs == 0x40 || *wcs == 0x60)
-       return (wctype_t) 0;
-#  else
-      switch (*wcs)
-       {
-       case L' ': case L'!': case L'"': case L'#': case L'%':
-       case L'&': case L'\'': case L'(': case L')': case L'*':
-       case L'+': case L',': case L'-': case L'.': case L'/':
-       case L'0': case L'1': case L'2': case L'3': case L'4':
-       case L'5': case L'6': case L'7': case L'8': case L'9':
-       case L':': case L';': case L'<': case L'=': case L'>':
-       case L'?':
-       case L'A': case L'B': case L'C': case L'D': case L'E':
-       case L'F': case L'G': case L'H': case L'I': case L'J':
-       case L'K': case L'L': case L'M': case L'N': case L'O':
-       case L'P': case L'Q': case L'R': case L'S': case L'T':
-       case L'U': case L'V': case L'W': case L'X': case L'Y':
-       case L'Z':
-       case L'[': case L'\\': case L']': case L'^': case L'_':
-       case L'a': case L'b': case L'c': case L'd': case L'e':
-       case L'f': case L'g': case L'h': case L'i': case L'j':
-       case L'k': case L'l': case L'm': case L'n': case L'o':
-       case L'p': case L'q': case L'r': case L's': case L't':
-       case L'u': case L'v': case L'w': case L'x': case L'y':
-       case L'z': case L'{': case L'|': case L'}': case L'~':
-         break;
-       default:
-         return (wctype_t) 0;
-       }
-#  endif
-
-      /* Avoid overrunning the buffer.  */
-      if (cp == s + CHAR_CLASS_MAX_LENGTH)
-       return (wctype_t) 0;
-
-      *cp++ = (char) *wcs++;
-    }
-  while (*wcs != L'\0');
-
-  *cp = '\0';
-
-#  ifdef _LIBC
-  return __wctype (s);
-#  else
-  return wctype (s);
-#  endif
-}
-#  define IS_CHAR_CLASS(string) is_char_class (string)
-
-#  include "fnmatch_loop.c"
-# endif
-
-
-int
-fnmatch (const char *pattern, const char *string, int flags)
-{
-# if HANDLE_MULTIBYTE
-#  define ALLOCA_LIMIT 2000
-  if (__builtin_expect (MB_CUR_MAX, 1) != 1)
-    {
-      mbstate_t ps;
-      size_t patsize;
-      size_t strsize;
-      size_t totsize;
-      wchar_t *wpattern;
-      wchar_t *wstring;
-      int res;
-
-      /* Calculate the size needed to convert the strings to
-        wide characters.  */
-      memset (&ps, '\0', sizeof (ps));
-      patsize = mbsrtowcs (NULL, &pattern, 0, &ps) + 1;
-      if (__builtin_expect (patsize != 0, 1))
-       {
-         assert (mbsinit (&ps));
-         strsize = mbsrtowcs (NULL, &string, 0, &ps) + 1;
-         if (__builtin_expect (strsize != 0, 1))
-           {
-             assert (mbsinit (&ps));
-             totsize = patsize + strsize;
-             if (__builtin_expect (! (patsize <= totsize
-                                      && totsize <= SIZE_MAX / sizeof (wchar_t)),
-                                   0))
-               {
-                 errno = ENOMEM;
-                 return -1;
-               }
-
-             /* Allocate room for the wide characters.  */
-             if (__builtin_expect (totsize < ALLOCA_LIMIT, 1))
-               wpattern = (wchar_t *) alloca (totsize * sizeof (wchar_t));
-             else
-               {
-                 wpattern = malloc (totsize * sizeof (wchar_t));
-                 if (__builtin_expect (! wpattern, 0))
-                   {
-                     errno = ENOMEM;
-                     return -1;
-                   }
-               }
-             wstring = wpattern + patsize;
-
-             /* Convert the strings into wide characters.  */
-             mbsrtowcs (wpattern, &pattern, patsize, &ps);
-             assert (mbsinit (&ps));
-             mbsrtowcs (wstring, &string, strsize, &ps);
-
-             res = internal_fnwmatch (wpattern, wstring, wstring + strsize - 1,
-                                      flags & FNM_PERIOD, flags);
-
-             if (__builtin_expect (! (totsize < ALLOCA_LIMIT), 0))
-               free (wpattern);
-             return res;
-           }
-       }
-    }
-
-# endif /* HANDLE_MULTIBYTE */
-
-  return internal_fnmatch (pattern, string, string + strlen (string),
-                          flags & FNM_PERIOD, flags);
-}
-
-# ifdef _LIBC
-#  undef fnmatch
-versioned_symbol (libc, __fnmatch, fnmatch, GLIBC_2_2_3);
-#  if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_3)
-strong_alias (__fnmatch, __fnmatch_old)
-compat_symbol (libc, __fnmatch_old, fnmatch, GLIBC_2_0);
-#  endif
-libc_hidden_ver (__fnmatch, fnmatch)
-# endif
-
-#endif /* _LIBC or not __GNU_LIBRARY__.  */
diff --git a/lib/fnmatch.in.h b/lib/fnmatch.in.h
deleted file mode 100644 (file)
index 1f9e447..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Copyright (C) 1991, 1992, 1993, 1996, 1997, 1998, 1999, 2001, 2002, 2003,
-   2005, 2007 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
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef        _FNMATCH_H
-#define        _FNMATCH_H      1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* We #undef these before defining them because some losing systems
-   (HP-UX A.08.07 for example) define these in <unistd.h>.  */
-#undef FNM_PATHNAME
-#undef FNM_NOESCAPE
-#undef FNM_PERIOD
-
-/* Bits set in the FLAGS argument to `fnmatch'.  */
-#define        FNM_PATHNAME    (1 << 0) /* No wildcard can ever match `/'.  */
-#define        FNM_NOESCAPE    (1 << 1) /* Backslashes don't quote special chars.  */
-#define        FNM_PERIOD      (1 << 2) /* Leading `.' is matched only explicitly.  */
-
-#if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _GNU_SOURCE
-# define FNM_FILE_NAME  FNM_PATHNAME   /* Preferred GNU name.  */
-# define FNM_LEADING_DIR (1 << 3)      /* Ignore `/...' after a match.  */
-# define FNM_CASEFOLD   (1 << 4)       /* Compare without regard to case.  */
-# define FNM_EXTMATCH   (1 << 5)       /* Use ksh-like extended matching. */
-#endif
-
-/* Value returned by `fnmatch' if STRING does not match PATTERN.  */
-#define        FNM_NOMATCH     1
-
-/* This value is returned if the implementation does not support
-   `fnmatch'.  Since this is not the case here it will never be
-   returned but the conformance test suites still require the symbol
-   to be defined.  */
-#ifdef _XOPEN_SOURCE
-# define FNM_NOSYS     (-1)
-#endif
-
-/* Match NAME against the file name pattern PATTERN,
-   returning zero if it matches, FNM_NOMATCH if not.  */
-extern int fnmatch (const char *__pattern, const char *__name,
-                   int __flags);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* fnmatch.h */
diff --git a/lib/fnmatch_loop.c b/lib/fnmatch_loop.c
deleted file mode 100644 (file)
index acdf5a6..0000000
+++ /dev/null
@@ -1,1212 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Copyright (C) 1991,1992,1993,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006
-   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
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* Match STRING against the file name pattern PATTERN, returning zero if
-   it matches, nonzero if not.  */
-static int EXT (INT opt, const CHAR *pattern, const CHAR *string,
-               const CHAR *string_end, bool no_leading_period, int flags)
-     internal_function;
-static const CHAR *END (const CHAR *patternp) internal_function;
-
-static int
-internal_function
-FCT (const CHAR *pattern, const CHAR *string, const CHAR *string_end,
-     bool no_leading_period, int flags)
-{
-  register const CHAR *p = pattern, *n = string;
-  register UCHAR c;
-#ifdef _LIBC
-# if WIDE_CHAR_VERSION
-  const char *collseq = (const char *)
-    _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQWC);
-# else
-  const UCHAR *collseq = (const UCHAR *)
-    _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQMB);
-# endif
-#endif
-
-  while ((c = *p++) != L_('\0'))
-    {
-      bool new_no_leading_period = false;
-      c = FOLD (c);
-
-      switch (c)
-       {
-       case L_('?'):
-         if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(')
-           {
-             int res;
-
-             res = EXT (c, p, n, string_end, no_leading_period,
-                        flags);
-             if (res != -1)
-               return res;
-           }
-
-         if (n == string_end)
-           return FNM_NOMATCH;
-         else if (*n == L_('/') && (flags & FNM_FILE_NAME))
-           return FNM_NOMATCH;
-         else if (*n == L_('.') && no_leading_period)
-           return FNM_NOMATCH;
-         break;
-
-       case L_('\\'):
-         if (!(flags & FNM_NOESCAPE))
-           {
-             c = *p++;
-             if (c == L_('\0'))
-               /* Trailing \ loses.  */
-               return FNM_NOMATCH;
-             c = FOLD (c);
-           }
-         if (n == string_end || FOLD ((UCHAR) *n) != c)
-           return FNM_NOMATCH;
-         break;
-
-       case L_('*'):
-         if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(')
-           {
-             int res;
-
-             res = EXT (c, p, n, string_end, no_leading_period,
-                        flags);
-             if (res != -1)
-               return res;
-           }
-
-         if (n != string_end && *n == L_('.') && no_leading_period)
-           return FNM_NOMATCH;
-
-         for (c = *p++; c == L_('?') || c == L_('*'); c = *p++)
-           {
-             if (*p == L_('(') && (flags & FNM_EXTMATCH) != 0)
-               {
-                 const CHAR *endp = END (p);
-                 if (endp != p)
-                   {
-                     /* This is a pattern.  Skip over it.  */
-                     p = endp;
-                     continue;
-                   }
-               }
-
-             if (c == L_('?'))
-               {
-                 /* A ? needs to match one character.  */
-                 if (n == string_end)
-                   /* There isn't another character; no match.  */
-                   return FNM_NOMATCH;
-                 else if (*n == L_('/')
-                          && __builtin_expect (flags & FNM_FILE_NAME, 0))
-                   /* A slash does not match a wildcard under
-                      FNM_FILE_NAME.  */
-                   return FNM_NOMATCH;
-                 else
-                   /* One character of the string is consumed in matching
-                      this ? wildcard, so *??? won't match if there are
-                      less than three characters.  */
-                   ++n;
-               }
-           }
-
-         if (c == L_('\0'))
-           /* The wildcard(s) is/are the last element of the pattern.
-              If the name is a file name and contains another slash
-              this means it cannot match, unless the FNM_LEADING_DIR
-              flag is set.  */
-           {
-             int result = (flags & FNM_FILE_NAME) == 0 ? 0 : FNM_NOMATCH;
-
-             if (flags & FNM_FILE_NAME)
-               {
-                 if (flags & FNM_LEADING_DIR)
-                   result = 0;
-                 else
-                   {
-                     if (MEMCHR (n, L_('/'), string_end - n) == NULL)
-                       result = 0;
-                   }
-               }
-
-             return result;
-           }
-         else
-           {
-             const CHAR *endp;
-
-             endp = MEMCHR (n, (flags & FNM_FILE_NAME) ? L_('/') : L_('\0'),
-                            string_end - n);
-             if (endp == NULL)
-               endp = string_end;
-
-             if (c == L_('[')
-                 || (__builtin_expect (flags & FNM_EXTMATCH, 0) != 0
-                     && (c == L_('@') || c == L_('+') || c == L_('!'))
-                     && *p == L_('(')))
-               {
-                 int flags2 = ((flags & FNM_FILE_NAME)
-                               ? flags : (flags & ~FNM_PERIOD));
-                 bool no_leading_period2 = no_leading_period;
-
-                 for (--p; n < endp; ++n, no_leading_period2 = false)
-                   if (FCT (p, n, string_end, no_leading_period2, flags2)
-                       == 0)
-                     return 0;
-               }
-             else if (c == L_('/') && (flags & FNM_FILE_NAME))
-               {
-                 while (n < string_end && *n != L_('/'))
-                   ++n;
-                 if (n < string_end && *n == L_('/')
-                     && (FCT (p, n + 1, string_end, flags & FNM_PERIOD, flags)
-                         == 0))
-                   return 0;
-               }
-             else
-               {
-                 int flags2 = ((flags & FNM_FILE_NAME)
-                               ? flags : (flags & ~FNM_PERIOD));
-                 int no_leading_period2 = no_leading_period;
-
-                 if (c == L_('\\') && !(flags & FNM_NOESCAPE))
-                   c = *p;
-                 c = FOLD (c);
-                 for (--p; n < endp; ++n, no_leading_period2 = false)
-                   if (FOLD ((UCHAR) *n) == c
-                       && (FCT (p, n, string_end, no_leading_period2, flags2)
-                           == 0))
-                     return 0;
-               }
-           }
-
-         /* If we come here no match is possible with the wildcard.  */
-         return FNM_NOMATCH;
-
-       case L_('['):
-         {
-           /* Nonzero if the sense of the character class is inverted.  */
-           register bool not;
-           CHAR cold;
-           UCHAR fn;
-
-           if (posixly_correct == 0)
-             posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1;
-
-           if (n == string_end)
-             return FNM_NOMATCH;
-
-           if (*n == L_('.') && no_leading_period)
-             return FNM_NOMATCH;
-
-           if (*n == L_('/') && (flags & FNM_FILE_NAME))
-             /* `/' cannot be matched.  */
-             return FNM_NOMATCH;
-
-           not = (*p == L_('!') || (posixly_correct < 0 && *p == L_('^')));
-           if (not)
-             ++p;
-
-           fn = FOLD ((UCHAR) *n);
-
-           c = *p++;
-           for (;;)
-             {
-               if (!(flags & FNM_NOESCAPE) && c == L_('\\'))
-                 {
-                   if (*p == L_('\0'))
-                     return FNM_NOMATCH;
-                   c = FOLD ((UCHAR) *p);
-                   ++p;
-
-                   goto normal_bracket;
-                 }
-               else if (c == L_('[') && *p == L_(':'))
-                 {
-                   /* Leave room for the null.  */
-                   CHAR str[CHAR_CLASS_MAX_LENGTH + 1];
-                   size_t c1 = 0;
-#if defined _LIBC || WIDE_CHAR_SUPPORT
-                   wctype_t wt;
-#endif
-                   const CHAR *startp = p;
-
-                   for (;;)
-                     {
-                       if (c1 == CHAR_CLASS_MAX_LENGTH)
-                         /* The name is too long and therefore the pattern
-                            is ill-formed.  */
-                         return FNM_NOMATCH;
-
-                       c = *++p;
-                       if (c == L_(':') && p[1] == L_(']'))
-                         {
-                           p += 2;
-                           break;
-                         }
-                       if (c < L_('a') || c >= L_('z'))
-                         {
-                           /* This cannot possibly be a character class name.
-                              Match it as a normal range.  */
-                           p = startp;
-                           c = L_('[');
-                           goto normal_bracket;
-                         }
-                       str[c1++] = c;
-                     }
-                   str[c1] = L_('\0');
-
-#if defined _LIBC || WIDE_CHAR_SUPPORT
-                   wt = IS_CHAR_CLASS (str);
-                   if (wt == 0)
-                     /* Invalid character class name.  */
-                     return FNM_NOMATCH;
-
-# if defined _LIBC && ! WIDE_CHAR_VERSION
-                   /* The following code is glibc specific but does
-                      there a good job in speeding up the code since
-                      we can avoid the btowc() call.  */
-                   if (_ISCTYPE ((UCHAR) *n, wt))
-                     goto matched;
-# else
-                   if (ISWCTYPE (BTOWC ((UCHAR) *n), wt))
-                     goto matched;
-# endif
-#else
-                   if ((STREQ (str, L_("alnum")) && isalnum ((UCHAR) *n))
-                       || (STREQ (str, L_("alpha")) && isalpha ((UCHAR) *n))
-                       || (STREQ (str, L_("blank")) && isblank ((UCHAR) *n))
-                       || (STREQ (str, L_("cntrl")) && iscntrl ((UCHAR) *n))
-                       || (STREQ (str, L_("digit")) && isdigit ((UCHAR) *n))
-                       || (STREQ (str, L_("graph")) && isgraph ((UCHAR) *n))
-                       || (STREQ (str, L_("lower")) && islower ((UCHAR) *n))
-                       || (STREQ (str, L_("print")) && isprint ((UCHAR) *n))
-                       || (STREQ (str, L_("punct")) && ispunct ((UCHAR) *n))
-                       || (STREQ (str, L_("space")) && isspace ((UCHAR) *n))
-                       || (STREQ (str, L_("upper")) && isupper ((UCHAR) *n))
-                       || (STREQ (str, L_("xdigit")) && isxdigit ((UCHAR) *n)))
-                     goto matched;
-#endif
-                   c = *p++;
-                 }
-#ifdef _LIBC
-               else if (c == L_('[') && *p == L_('='))
-                 {
-                   UCHAR str[1];
-                   uint32_t nrules =
-                     _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
-                   const CHAR *startp = p;
-
-                   c = *++p;
-                   if (c == L_('\0'))
-                     {
-                       p = startp;
-                       c = L_('[');
-                       goto normal_bracket;
-                     }
-                   str[0] = c;
-
-                   c = *++p;
-                   if (c != L_('=') || p[1] != L_(']'))
-                     {
-                       p = startp;
-                       c = L_('[');
-                       goto normal_bracket;
-                     }
-                   p += 2;
-
-                   if (nrules == 0)
-                     {
-                       if ((UCHAR) *n == str[0])
-                         goto matched;
-                     }
-                   else
-                     {
-                       const int32_t *table;
-# if WIDE_CHAR_VERSION
-                       const int32_t *weights;
-                       const int32_t *extra;
-# else
-                       const unsigned char *weights;
-                       const unsigned char *extra;
-# endif
-                       const int32_t *indirect;
-                       int32_t idx;
-                       const UCHAR *cp = (const UCHAR *) str;
-
-                       /* This #include defines a local function!  */
-# if WIDE_CHAR_VERSION
-#  include <locale/weightwc.h>
-# else
-#  include <locale/weight.h>
-# endif
-
-# if WIDE_CHAR_VERSION
-                       table = (const int32_t *)
-                         _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEWC);
-                       weights = (const int32_t *)
-                         _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTWC);
-                       extra = (const int32_t *)
-                         _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAWC);
-                       indirect = (const int32_t *)
-                         _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTWC);
-# else
-                       table = (const int32_t *)
-                         _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
-                       weights = (const unsigned char *)
-                         _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB);
-                       extra = (const unsigned char *)
-                         _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
-                       indirect = (const int32_t *)
-                         _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB);
-# endif
-
-                       idx = findidx (&cp);
-                       if (idx != 0)
-                         {
-                           /* We found a table entry.  Now see whether the
-                              character we are currently at has the same
-                              equivalance class value.  */
-                           int len = weights[idx];
-                           int32_t idx2;
-                           const UCHAR *np = (const UCHAR *) n;
-
-                           idx2 = findidx (&np);
-                           if (idx2 != 0 && len == weights[idx2])
-                             {
-                               int cnt = 0;
-
-                               while (cnt < len
-                                      && (weights[idx + 1 + cnt]
-                                          == weights[idx2 + 1 + cnt]))
-                                 ++cnt;
-
-                               if (cnt == len)
-                                 goto matched;
-                             }
-                         }
-                     }
-
-                   c = *p++;
-                 }
-#endif
-               else if (c == L_('\0'))
-                 /* [ (unterminated) loses.  */
-                 return FNM_NOMATCH;
-               else
-                 {
-                   bool is_range = false;
-
-#ifdef _LIBC
-                   bool is_seqval = false;
-
-                   if (c == L_('[') && *p == L_('.'))
-                     {
-                       uint32_t nrules =
-                         _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
-                       const CHAR *startp = p;
-                       size_t c1 = 0;
-
-                       while (1)
-                         {
-                           c = *++p;
-                           if (c == L_('.') && p[1] == L_(']'))
-                             {
-                               p += 2;
-                               break;
-                             }
-                           if (c == '\0')
-                             return FNM_NOMATCH;
-                           ++c1;
-                         }
-
-                       /* We have to handling the symbols differently in
-                          ranges since then the collation sequence is
-                          important.  */
-                       is_range = *p == L_('-') && p[1] != L_('\0');
-
-                       if (nrules == 0)
-                         {
-                           /* There are no names defined in the collation
-                              data.  Therefore we only accept the trivial
-                              names consisting of the character itself.  */
-                           if (c1 != 1)
-                             return FNM_NOMATCH;
-
-                           if (!is_range && *n == startp[1])
-                             goto matched;
-
-                           cold = startp[1];
-                           c = *p++;
-                         }
-                       else
-                         {
-                           int32_t table_size;
-                           const int32_t *symb_table;
-# ifdef WIDE_CHAR_VERSION
-                           char str[c1];
-                           size_t strcnt;
-# else
-#  define str (startp + 1)
-# endif
-                           const unsigned char *extra;
-                           int32_t idx;
-                           int32_t elem;
-                           int32_t second;
-                           int32_t hash;
-
-# ifdef WIDE_CHAR_VERSION
-                           /* We have to convert the name to a single-byte
-                              string.  This is possible since the names
-                              consist of ASCII characters and the internal
-                              representation is UCS4.  */
-                           for (strcnt = 0; strcnt < c1; ++strcnt)
-                             str[strcnt] = startp[1 + strcnt];
-# endif
-
-                           table_size =
-                             _NL_CURRENT_WORD (LC_COLLATE,
-                                               _NL_COLLATE_SYMB_HASH_SIZEMB);
-                           symb_table = (const int32_t *)
-                             _NL_CURRENT (LC_COLLATE,
-                                          _NL_COLLATE_SYMB_TABLEMB);
-                           extra = (const unsigned char *)
-                             _NL_CURRENT (LC_COLLATE,
-                                          _NL_COLLATE_SYMB_EXTRAMB);
-
-                           /* Locate the character in the hashing table.  */
-                           hash = elem_hash (str, c1);
-
-                           idx = 0;
-                           elem = hash % table_size;
-                           if (symb_table[2 * elem] != 0)
-                             {
-                               second = hash % (table_size - 2) + 1;
-
-                               do
-                                 {
-                                   /* First compare the hashing value.  */
-                                   if (symb_table[2 * elem] == hash
-                                       && (c1
-                                           == extra[symb_table[2 * elem + 1]])
-                                       && memcmp (str,
-                                                  &extra[symb_table[2 * elem
-                                                                    + 1]
-                                                         + 1], c1) == 0)
-                                     {
-                                       /* Yep, this is the entry.  */
-                                       idx = symb_table[2 * elem + 1];
-                                       idx += 1 + extra[idx];
-                                       break;
-                                     }
-
-                                   /* Next entry.  */
-                                   elem += second;
-                                 }
-                               while (symb_table[2 * elem] != 0);
-                             }
-
-                           if (symb_table[2 * elem] != 0)
-                             {
-                               /* Compare the byte sequence but only if
-                                  this is not part of a range.  */
-# ifdef WIDE_CHAR_VERSION
-                               int32_t *wextra;
-
-                               idx += 1 + extra[idx];
-                               /* Adjust for the alignment.  */
-                               idx = (idx + 3) & ~3;
-
-                               wextra = (int32_t *) &extra[idx + 4];
-# endif
-
-                               if (! is_range)
-                                 {
-# ifdef WIDE_CHAR_VERSION
-                                   for (c1 = 0;
-                                        (int32_t) c1 < wextra[idx];
-                                        ++c1)
-                                     if (n[c1] != wextra[1 + c1])
-                                       break;
-
-                                   if ((int32_t) c1 == wextra[idx])
-                                     goto matched;
-# else
-                                   for (c1 = 0; c1 < extra[idx]; ++c1)
-                                     if (n[c1] != extra[1 + c1])
-                                       break;
-
-                                   if (c1 == extra[idx])
-                                     goto matched;
-# endif
-                                 }
-
-                               /* Get the collation sequence value.  */
-                               is_seqval = true;
-# ifdef WIDE_CHAR_VERSION
-                               cold = wextra[1 + wextra[idx]];
-# else
-                               /* Adjust for the alignment.  */
-                               idx += 1 + extra[idx];
-                               idx = (idx + 3) & ~4;
-                               cold = *((int32_t *) &extra[idx]);
-# endif
-
-                               c = *p++;
-                             }
-                           else if (c1 == 1)
-                             {
-                               /* No valid character.  Match it as a
-                                  single byte.  */
-                               if (!is_range && *n == str[0])
-                                 goto matched;
-
-                               cold = str[0];
-                               c = *p++;
-                             }
-                           else
-                             return FNM_NOMATCH;
-                         }
-                     }
-                   else
-# undef str
-#endif
-                     {
-                       c = FOLD (c);
-                     normal_bracket:
-
-                       /* We have to handling the symbols differently in
-                          ranges since then the collation sequence is
-                          important.  */
-                       is_range = (*p == L_('-') && p[1] != L_('\0')
-                                   && p[1] != L_(']'));
-
-                       if (!is_range && c == fn)
-                         goto matched;
-
-#if _LIBC
-                       /* This is needed if we goto normal_bracket; from
-                          outside of is_seqval's scope.  */
-                       is_seqval = false;
-#endif
-
-                       cold = c;
-                       c = *p++;
-                     }
-
-                   if (c == L_('-') && *p != L_(']'))
-                     {
-#if _LIBC
-                       /* We have to find the collation sequence
-                          value for C.  Collation sequence is nothing
-                          we can regularly access.  The sequence
-                          value is defined by the order in which the
-                          definitions of the collation values for the
-                          various characters appear in the source
-                          file.  A strange concept, nowhere
-                          documented.  */
-                       uint32_t fcollseq;
-                       uint32_t lcollseq;
-                       UCHAR cend = *p++;
-
-# ifdef WIDE_CHAR_VERSION
-                       /* 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
-                            we are supposed to match.  This means we are
-                            failing.  */
-                         goto range_not_matched;
-
-                       if (is_seqval)
-                         lcollseq = cold;
-                       else
-                         lcollseq = __collseq_table_lookup (collseq, cold);
-# else
-                       fcollseq = collseq[fn];
-                       lcollseq = is_seqval ? cold : collseq[(UCHAR) cold];
-# endif
-
-                       is_seqval = false;
-                       if (cend == L_('[') && *p == L_('.'))
-                         {
-                           uint32_t nrules =
-                             _NL_CURRENT_WORD (LC_COLLATE,
-                                               _NL_COLLATE_NRULES);
-                           const CHAR *startp = p;
-                           size_t c1 = 0;
-
-                           while (1)
-                             {
-                               c = *++p;
-                               if (c == L_('.') && p[1] == L_(']'))
-                                 {
-                                   p += 2;
-                                   break;
-                                 }
-                               if (c == '\0')
-                                 return FNM_NOMATCH;
-                               ++c1;
-                             }
-
-                           if (nrules == 0)
-                             {
-                               /* There are no names defined in the
-                                  collation data.  Therefore we only
-                                  accept the trivial names consisting
-                                  of the character itself.  */
-                               if (c1 != 1)
-                                 return FNM_NOMATCH;
-
-                               cend = startp[1];
-                             }
-                           else
-                             {
-                               int32_t table_size;
-                               const int32_t *symb_table;
-# ifdef WIDE_CHAR_VERSION
-                               char str[c1];
-                               size_t strcnt;
-# else
-#  define str (startp + 1)
-# endif
-                               const unsigned char *extra;
-                               int32_t idx;
-                               int32_t elem;
-                               int32_t second;
-                               int32_t hash;
-
-# ifdef WIDE_CHAR_VERSION
-                               /* We have to convert the name to a single-byte
-                                  string.  This is possible since the names
-                                  consist of ASCII characters and the internal
-                                  representation is UCS4.  */
-                               for (strcnt = 0; strcnt < c1; ++strcnt)
-                                 str[strcnt] = startp[1 + strcnt];
-# endif
-
-                               table_size =
-                                 _NL_CURRENT_WORD (LC_COLLATE,
-                                                   _NL_COLLATE_SYMB_HASH_SIZEMB);
-                               symb_table = (const int32_t *)
-                                 _NL_CURRENT (LC_COLLATE,
-                                              _NL_COLLATE_SYMB_TABLEMB);
-                               extra = (const unsigned char *)
-                                 _NL_CURRENT (LC_COLLATE,
-                                              _NL_COLLATE_SYMB_EXTRAMB);
-
-                               /* Locate the character in the hashing
-                                   table.  */
-                               hash = elem_hash (str, c1);
-
-                               idx = 0;
-                               elem = hash % table_size;
-                               if (symb_table[2 * elem] != 0)
-                                 {
-                                   second = hash % (table_size - 2) + 1;
-
-                                   do
-                                     {
-                                       /* First compare the hashing value.  */
-                                       if (symb_table[2 * elem] == hash
-                                           && (c1
-                                               == extra[symb_table[2 * elem + 1]])
-                                           && memcmp (str,
-                                                      &extra[symb_table[2 * elem + 1]
-                                                             + 1], c1) == 0)
-                                         {
-                                           /* Yep, this is the entry.  */
-                                           idx = symb_table[2 * elem + 1];
-                                           idx += 1 + extra[idx];
-                                           break;
-                                         }
-
-                                       /* Next entry.  */
-                                       elem += second;
-                                     }
-                                   while (symb_table[2 * elem] != 0);
-                                 }
-
-                               if (symb_table[2 * elem] != 0)
-                                 {
-                                   /* Compare the byte sequence but only if
-                                      this is not part of a range.  */
-# ifdef WIDE_CHAR_VERSION
-                                   int32_t *wextra;
-
-                                   idx += 1 + extra[idx];
-                                   /* Adjust for the alignment.  */
-                                   idx = (idx + 3) & ~4;
-
-                                   wextra = (int32_t *) &extra[idx + 4];
-# endif
-                                   /* Get the collation sequence value.  */
-                                   is_seqval = true;
-# ifdef WIDE_CHAR_VERSION
-                                   cend = wextra[1 + wextra[idx]];
-# else
-                                   /* Adjust for the alignment.  */
-                                   idx += 1 + extra[idx];
-                                   idx = (idx + 3) & ~4;
-                                   cend = *((int32_t *) &extra[idx]);
-# endif
-                                 }
-                               else if (symb_table[2 * elem] != 0 && c1 == 1)
-                                 {
-                                   cend = str[0];
-                                   c = *p++;
-                                 }
-                               else
-                                 return FNM_NOMATCH;
-                             }
-# undef str
-                         }
-                       else
-                         {
-                           if (!(flags & FNM_NOESCAPE) && cend == L_('\\'))
-                             cend = *p++;
-                           if (cend == L_('\0'))
-                             return FNM_NOMATCH;
-                           cend = FOLD (cend);
-                         }
-
-                       /* XXX It is not entirely clear to me how to handle
-                          characters which are not mentioned in the
-                          collation specification.  */
-                       if (
-# ifdef WIDE_CHAR_VERSION
-                           lcollseq == 0xffffffff ||
-# endif
-                           lcollseq <= fcollseq)
-                         {
-                           /* We have to look at the upper bound.  */
-                           uint32_t hcollseq;
-
-                           if (is_seqval)
-                             hcollseq = cend;
-                           else
-                             {
-# ifdef WIDE_CHAR_VERSION
-                               hcollseq =
-                                 __collseq_table_lookup (collseq, cend);
-                               if (hcollseq == ~((uint32_t) 0))
-                                 {
-                                   /* Hum, no information about the upper
-                                      bound.  The matching succeeds if the
-                                      lower bound is matched exactly.  */
-                                   if (lcollseq != fcollseq)
-                                     goto range_not_matched;
-
-                                   goto matched;
-                                 }
-# else
-                               hcollseq = collseq[cend];
-# endif
-                             }
-
-                           if (lcollseq <= hcollseq && fcollseq <= hcollseq)
-                             goto matched;
-                         }
-# ifdef WIDE_CHAR_VERSION
-                     range_not_matched:
-# endif
-#else
-                       /* We use a boring value comparison of the character
-                          values.  This is better than comparing using
-                          `strcoll' since the latter would have surprising
-                          and sometimes fatal consequences.  */
-                       UCHAR cend = *p++;
-
-                       if (!(flags & FNM_NOESCAPE) && cend == L_('\\'))
-                         cend = *p++;
-                       if (cend == L_('\0'))
-                         return FNM_NOMATCH;
-
-                       /* It is a range.  */
-                       if (cold <= fn && fn <= cend)
-                         goto matched;
-#endif
-
-                       c = *p++;
-                     }
-                 }
-
-               if (c == L_(']'))
-                 break;
-             }
-
-           if (!not)
-             return FNM_NOMATCH;
-           break;
-
-         matched:
-           /* Skip the rest of the [...] that already matched.  */
-           do
-             {
-             ignore_next:
-               c = *p++;
-
-               if (c == L_('\0'))
-                 /* [... (unterminated) loses.  */
-                 return FNM_NOMATCH;
-
-               if (!(flags & FNM_NOESCAPE) && c == L_('\\'))
-                 {
-                   if (*p == L_('\0'))
-                     return FNM_NOMATCH;
-                   /* XXX 1003.2d11 is unclear if this is right.  */
-                   ++p;
-                 }
-               else if (c == L_('[') && *p == L_(':'))
-                 {
-                   int c1 = 0;
-                   const CHAR *startp = p;
-
-                   while (1)
-                     {
-                       c = *++p;
-                       if (++c1 == CHAR_CLASS_MAX_LENGTH)
-                         return FNM_NOMATCH;
-
-                       if (*p == L_(':') && p[1] == L_(']'))
-                         break;
-
-                       if (c < L_('a') || c >= L_('z'))
-                         {
-                           p = startp;
-                           goto ignore_next;
-                         }
-                     }
-                   p += 2;
-                   c = *p++;
-                 }
-               else if (c == L_('[') && *p == L_('='))
-                 {
-                   c = *++p;
-                   if (c == L_('\0'))
-                     return FNM_NOMATCH;
-                   c = *++p;
-                   if (c != L_('=') || p[1] != L_(']'))
-                     return FNM_NOMATCH;
-                   p += 2;
-                   c = *p++;
-                 }
-               else if (c == L_('[') && *p == L_('.'))
-                 {
-                   ++p;
-                   while (1)
-                     {
-                       c = *++p;
-                       if (c == '\0')
-                         return FNM_NOMATCH;
-
-                       if (*p == L_('.') && p[1] == L_(']'))
-                         break;
-                     }
-                   p += 2;
-                   c = *p++;
-                 }
-             }
-           while (c != L_(']'));
-           if (not)
-             return FNM_NOMATCH;
-         }
-         break;
-
-       case L_('+'):
-       case L_('@'):
-       case L_('!'):
-         if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(')
-           {
-             int res;
-
-             res = EXT (c, p, n, string_end, no_leading_period, flags);
-             if (res != -1)
-               return res;
-           }
-         goto normal_match;
-
-       case L_('/'):
-         if (NO_LEADING_PERIOD (flags))
-           {
-             if (n == string_end || c != (UCHAR) *n)
-               return FNM_NOMATCH;
-
-             new_no_leading_period = true;
-             break;
-           }
-         /* FALLTHROUGH */
-       default:
-       normal_match:
-         if (n == string_end || c != FOLD ((UCHAR) *n))
-           return FNM_NOMATCH;
-       }
-
-      no_leading_period = new_no_leading_period;
-      ++n;
-    }
-
-  if (n == string_end)
-    return 0;
-
-  if ((flags & FNM_LEADING_DIR) && n != string_end && *n == L_('/'))
-    /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz".  */
-    return 0;
-
-  return FNM_NOMATCH;
-}
-
-
-static const CHAR *
-internal_function
-END (const CHAR *pattern)
-{
-  const CHAR *p = pattern;
-
-  while (1)
-    if (*++p == L_('\0'))
-      /* This is an invalid pattern.  */
-      return pattern;
-    else if (*p == L_('['))
-      {
-       /* Handle brackets special.  */
-       if (posixly_correct == 0)
-         posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1;
-
-       /* Skip the not sign.  We have to recognize it because of a possibly
-          following ']'.  */
-       if (*++p == L_('!') || (posixly_correct < 0 && *p == L_('^')))
-         ++p;
-       /* A leading ']' is recognized as such.  */
-       if (*p == L_(']'))
-         ++p;
-       /* Skip over all characters of the list.  */
-       while (*p != L_(']'))
-         if (*p++ == L_('\0'))
-           /* This is no valid pattern.  */
-           return pattern;
-      }
-    else if ((*p == L_('?') || *p == L_('*') || *p == L_('+') || *p == L_('@')
-             || *p == L_('!')) && p[1] == L_('('))
-      p = END (p + 1);
-    else if (*p == L_(')'))
-      break;
-
-  return p + 1;
-}
-
-
-static int
-internal_function
-EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end,
-     bool no_leading_period, int flags)
-{
-  const CHAR *startp;
-  size_t level;
-  struct patternlist
-  {
-    struct patternlist *next;
-    CHAR str[1];
-  } *list = NULL;
-  struct patternlist **lastp = &list;
-  size_t pattern_len = STRLEN (pattern);
-  const CHAR *p;
-  const CHAR *rs;
-  enum { ALLOCA_LIMIT = 8000 };
-
-  /* Parse the pattern.  Store the individual parts in the list.  */
-  level = 0;
-  for (startp = p = pattern + 1; ; ++p)
-    if (*p == L_('\0'))
-      /* This is an invalid pattern.  */
-      return -1;
-    else if (*p == L_('['))
-      {
-       /* Handle brackets special.  */
-       if (posixly_correct == 0)
-         posixly_correct = getenv ("POSIXLY_CORRECT") != NULL ? 1 : -1;
-
-       /* Skip the not sign.  We have to recognize it because of a possibly
-          following ']'.  */
-       if (*++p == L_('!') || (posixly_correct < 0 && *p == L_('^')))
-         ++p;
-       /* A leading ']' is recognized as such.  */
-       if (*p == L_(']'))
-         ++p;
-       /* Skip over all characters of the list.  */
-       while (*p != L_(']'))
-         if (*p++ == L_('\0'))
-           /* This is no valid pattern.  */
-           return -1;
-      }
-    else if ((*p == L_('?') || *p == L_('*') || *p == L_('+') || *p == L_('@')
-             || *p == L_('!')) && p[1] == L_('('))
-      /* Remember the nesting level.  */
-      ++level;
-    else if (*p == L_(')'))
-      {
-       if (level-- == 0)
-         {
-           /* This means we found the end of the pattern.  */
-#define NEW_PATTERN \
-           struct patternlist *newp;                                         \
-           size_t plen;                                                      \
-           size_t plensize;                                                  \
-           size_t newpsize;                                                  \
-                                                                             \
-           plen = (opt == L_('?') || opt == L_('@')                          \
-                   ? pattern_len                                             \
-                   : p - startp + 1);                                        \
-           plensize = plen * sizeof (CHAR);                                  \
-           newpsize = offsetof (struct patternlist, str) + plensize;         \
-           if ((size_t) -1 / sizeof (CHAR) < plen                            \
-               || newpsize < offsetof (struct patternlist, str)              \
-               || ALLOCA_LIMIT <= newpsize)                                  \
-             return -1;                                                      \
-           newp = (struct patternlist *) alloca (newpsize);                  \
-           *((CHAR *) MEMPCPY (newp->str, startp, p - startp)) = L_('\0');    \
-           newp->next = NULL;                                                \
-           *lastp = newp;                                                    \
-           lastp = &newp->next
-           NEW_PATTERN;
-           break;
-         }
-      }
-    else if (*p == L_('|'))
-      {
-       if (level == 0)
-         {
-           NEW_PATTERN;
-           startp = p + 1;
-         }
-      }
-  assert (list != NULL);
-  assert (p[-1] == L_(')'));
-#undef NEW_PATTERN
-
-  switch (opt)
-    {
-    case L_('*'):
-      if (FCT (p, string, string_end, no_leading_period, flags) == 0)
-       return 0;
-      /* FALLTHROUGH */
-
-    case L_('+'):
-      do
-       {
-         for (rs = string; rs <= string_end; ++rs)
-           /* First match the prefix with the current pattern with the
-              current pattern.  */
-           if (FCT (list->str, string, rs, no_leading_period,
-                    flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0
-               /* This was successful.  Now match the rest with the rest
-                  of the pattern.  */
-               && (FCT (p, rs, string_end,
-                        rs == string
-                        ? no_leading_period
-                        : rs[-1] == '/' && NO_LEADING_PERIOD (flags),
-                        flags & FNM_FILE_NAME
-                        ? flags : flags & ~FNM_PERIOD) == 0
-                   /* This didn't work.  Try the whole pattern.  */
-                   || (rs != string
-                       && FCT (pattern - 1, rs, string_end,
-                               rs == string
-                               ? no_leading_period
-                               : rs[-1] == '/' && NO_LEADING_PERIOD (flags),
-                               flags & FNM_FILE_NAME
-                               ? flags : flags & ~FNM_PERIOD) == 0)))
-             /* It worked.  Signal success.  */
-             return 0;
-       }
-      while ((list = list->next) != NULL);
-
-      /* None of the patterns lead to a match.  */
-      return FNM_NOMATCH;
-
-    case L_('?'):
-      if (FCT (p, string, string_end, no_leading_period, flags) == 0)
-       return 0;
-      /* FALLTHROUGH */
-
-    case L_('@'):
-      do
-       /* 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.  */
-       if (FCT (STRCAT (list->str, p), string, string_end,
-                no_leading_period,
-                flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0)
-         /* It worked.  Signal success.  */
-         return 0;
-      while ((list = list->next) != NULL);
-
-      /* None of the patterns lead to a match.  */
-      return FNM_NOMATCH;
-
-    case L_('!'):
-      for (rs = string; rs <= string_end; ++rs)
-       {
-         struct patternlist *runp;
-
-         for (runp = list; runp != NULL; runp = runp->next)
-           if (FCT (runp->str, string, rs,  no_leading_period,
-                    flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD) == 0)
-             break;
-
-         /* If none of the patterns matched see whether the rest does.  */
-         if (runp == NULL
-             && (FCT (p, rs, string_end,
-                      rs == string
-                      ? no_leading_period
-                      : rs[-1] == '/' && NO_LEADING_PERIOD (flags),
-                      flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD)
-                 == 0))
-           /* This is successful.  */
-           return 0;
-       }
-
-      /* None of the patterns together with the rest of the pattern
-        lead to a match.  */
-      return FNM_NOMATCH;
-
-    default:
-      assert (! "Invalid extended matching operator");
-      break;
-    }
-
-  return -1;
-}
-
-
-#undef FOLD
-#undef CHAR
-#undef UCHAR
-#undef INT
-#undef FCT
-#undef EXT
-#undef END
-#undef MEMPCPY
-#undef MEMCHR
-#undef STRCOLL
-#undef STRLEN
-#undef STRCAT
-#undef L_
-#undef BTOWC
diff --git a/lib/fpending.c b/lib/fpending.c
deleted file mode 100644 (file)
index 9250d6a..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/* fpending.c -- return the number of pending output bytes on a stream
-   Copyright (C) 2000, 2004, 2006, 2007 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. */
-
-#include <config.h>
-
-#include "fpending.h"
-
-/* Return the number of pending (aka buffered, unflushed)
-   bytes on the stream, FP, that is open for writing.  */
-size_t
-__fpending (FILE *fp)
-{
-  return PENDING_OUTPUT_N_BYTES;
-}
diff --git a/lib/fpending.h b/lib/fpending.h
deleted file mode 100644 (file)
index c6a493d..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Declare __fpending.
-
-   Copyright (C) 2000, 2003, 2005, 2006 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.  */
-
-#include <stddef.h>
-#include <stdio.h>
-
-#ifndef HAVE_DECL___FPENDING
-"this configure-time declaration test was not run"
-#endif
-
-#if HAVE_DECL___FPENDING
-# if HAVE_STDIO_EXT_H
-#  include <stdio_ext.h>
-# endif
-#else
-size_t __fpending (FILE *);
-#endif
diff --git a/lib/fseeko.c b/lib/fseeko.c
deleted file mode 100644 (file)
index 1e34a5d..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* An fseeko() function that, together with fflush(), is POSIX compliant.
-   Copyright (C) 2007-2009 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include <stdio.h>
-
-/* Get off_t and lseek.  */
-#include <unistd.h>
-
-#include "stdio-impl.h"
-
-#undef fseeko
-#if !HAVE_FSEEKO
-# undef fseek
-# define fseeko fseek
-#endif
-
-int
-rpl_fseeko (FILE *fp, off_t offset, int whence)
-{
-#if LSEEK_PIPE_BROKEN
-  /* mingw gives bogus answers rather than failure on non-seekable files.  */
-  if (lseek (fileno (fp), 0, SEEK_CUR) == -1)
-    return EOF;
-#endif
-
-  /* These tests are based on fpurge.c.  */
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
-  if (fp->_IO_read_end == fp->_IO_read_ptr
-      && fp->_IO_write_ptr == fp->_IO_write_base
-      && fp->_IO_save_base == NULL)
-#elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */
-# if defined __SL64 && defined __SCLE /* Cygwin */
-  if ((fp->_flags & __SL64) == 0)
-    {
-      /* Cygwin 1.5.0 through 1.5.24 failed to open stdin in 64-bit
-        mode; but has an fseeko that requires 64-bit mode.  */
-      FILE *tmp = fopen ("/dev/null", "r");
-      if (!tmp)
-       return -1;
-      fp->_flags |= __SL64;
-      fp->_seek64 = tmp->_seek64;
-      fclose (tmp);
-    }
-# endif
-  if (fp_->_p == fp_->_bf._base
-      && fp_->_r == 0
-      && fp_->_w == ((fp_->_flags & (__SLBF | __SNBF | __SRD)) == 0 /* fully buffered and not currently reading? */
-                    ? fp_->_bf._size
-                    : 0)
-      && fp_ub._base == NULL)
-#elif defined __EMX__               /* emx+gcc */
-  if (fp->_ptr == fp->_buffer
-      && fp->_rcount == 0
-      && fp->_wcount == 0
-      && fp->_ungetc_count == 0)
-#elif defined _IOERR                /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */
-  if (fp_->_ptr == fp_->_base
-      && (fp_->_ptr == NULL || fp_->_cnt == 0))
-#elif defined __UCLIBC__            /* uClibc */
-  if (((fp->__modeflags & __FLAG_WRITING) == 0
-       || fp->__bufpos == fp->__bufstart)
-      && ((fp->__modeflags & (__FLAG_READONLY | __FLAG_READING)) == 0
-         || fp->__bufpos == fp->__bufread))
-#elif defined __QNX__               /* QNX */
-  if ((fp->_Mode & _MWRITE ? fp->_Next == fp->_Buf : fp->_Next == fp->_Rend)
-      && fp->_Rback == fp->_Back + sizeof (fp->_Back)
-      && fp->_Rsave == NULL)
-#else
-  #error "Please port gnulib fseeko.c to your platform! Look at the code in fpurge.c, then report this to bug-gnulib."
-#endif
-    {
-      /* We get here when an fflush() call immediately preceded this one.  We
-        know there are no buffers.
-        POSIX requires us to modify the file descriptor's position.
-        But we cannot position beyond end of file here.  */
-      off_t pos =
-       lseek (fileno (fp),
-              whence == SEEK_END && offset > 0 ? 0 : offset,
-              whence);
-      if (pos == -1)
-       {
-#if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */
-         fp_->_flags &= ~__SOFF;
-#endif
-         return -1;
-       }
-
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
-      fp->_flags &= ~_IO_EOF_SEEN;
-#elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */
-      fp_->_offset = pos;
-      fp_->_flags |= __SOFF;
-      fp_->_flags &= ~__SEOF;
-#elif defined __EMX__               /* emx+gcc */
-      fp->_flags &= ~_IOEOF;
-#elif defined _IOERR                /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */
-      fp->_flag &= ~_IOEOF;
-#endif
-      /* If we were not requested to position beyond end of file, we're
-        done.  */
-      if (!(whence == SEEK_END && offset > 0))
-       return 0;
-    }
-  return fseeko (fp, offset, whence);
-}
diff --git a/lib/fstatat.c b/lib/fstatat.c
deleted file mode 100644 (file)
index 8b62912..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Work around an fstatat bug on Solaris 9.
-
-   Copyright (C) 2006 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 and Jim Meyering.  */
-
-#include <config.h>
-
-#define COMPILING_FSTATAT 1
-#include "openat.h"
-
-#include <errno.h>
-#include <string.h>
-
-/* fstatat should always follow symbolic links that end in /, but on
-   Solaris 9 it doesn't if AT_SYMLINK_NOFOLLOW is specified.  This is
-   the same problem that lstat.c addresses, so solve it in a similar
-   way.  */
-
-int
-rpl_fstatat (int fd, char const *file, struct stat *st, int flag)
-{
-  int result = fstatat (fd, file, st, flag);
-
-  if (result == 0 && (flag & AT_SYMLINK_NOFOLLOW) && S_ISLNK (st->st_mode)
-      && file[strlen (file) - 1] == '/')
-    {
-      /* FILE refers to a symbolic link and the name ends with a slash.
-        Get info about the link's referent.  */
-      result = fstatat (fd, file, st, flag & ~AT_SYMLINK_NOFOLLOW);
-      if (result == 0 && ! S_ISDIR (st->st_mode))
-       {
-         /* fstatat succeeded and FILE references a non-directory.
-            But it was specified via a name including a trailing
-            slash.  Fail with errno set to ENOTDIR to indicate the
-            contradiction.  */
-         errno = ENOTDIR;
-         return -1;
-       }
-    }
-
-  return result;
-}
diff --git a/lib/ftruncate.c b/lib/ftruncate.c
deleted file mode 100644 (file)
index ff7d11b..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/* ftruncate emulations that work on some System V's.
-   This file is in the public domain.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include <unistd.h>
-
-#include <sys/types.h>
-#include <fcntl.h>
-
-#ifdef F_CHSIZE
-
-int
-ftruncate (int fd, off_t length)
-{
-  return fcntl (fd, F_CHSIZE, length);
-}
-
-#else /* not F_CHSIZE */
-# ifdef F_FREESP
-
-/* By William Kucharski <kucharsk@netcom.com>.  */
-
-#  include <sys/stat.h>
-#  include <errno.h>
-
-int
-ftruncate (int fd, off_t length)
-{
-  struct flock fl;
-  struct stat filebuf;
-
-  if (fstat (fd, &filebuf) < 0)
-    return -1;
-
-  if (filebuf.st_size < length)
-    {
-      /* Extend file length. */
-      if (lseek (fd, (length - 1), SEEK_SET) < 0)
-       return -1;
-
-      /* Write a "0" byte. */
-      if (write (fd, "", 1) != 1)
-       return -1;
-    }
-  else
-    {
-
-      /* Truncate length. */
-
-      fl.l_whence = 0;
-      fl.l_len = 0;
-      fl.l_start = length;
-      fl.l_type = F_WRLCK;     /* write lock on file space */
-
-      /* This relies on the *undocumented* F_FREESP argument to fcntl,
-        which truncates the file so that it ends at the position
-        indicated by fl.l_start.  Will minor miracles never cease?  */
-
-      if (fcntl (fd, F_FREESP, &fl) < 0)
-       return -1;
-    }
-
-  return 0;
-}
-
-# else /* not F_CHSIZE nor F_FREESP */
-#  if HAVE_CHSIZE                      /* native Windows, e.g. mingw */
-
-int
-ftruncate (int fd, off_t length)
-{
-  return chsize (fd, length);
-}
-
-#  else /* not F_CHSIZE nor F_FREESP nor HAVE_CHSIZE */
-
-#   include <errno.h>
-
-int
-ftruncate (int fd, off_t length)
-{
-  errno = EIO;
-  return -1;
-}
-
-#  endif /* not HAVE_CHSIZE */
-# endif /* not F_FREESP */
-#endif /* not F_CHSIZE */
diff --git a/lib/full-write.c b/lib/full-write.c
deleted file mode 100644 (file)
index 51f2d38..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/* An interface to read and write that retries (if necessary) until complete.
-
-   Copyright (C) 1993, 1994, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-   2004, 2005, 2006 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.  */
-#ifdef FULL_READ
-# include "full-read.h"
-#else
-# include "full-write.h"
-#endif
-
-#include <errno.h>
-
-#ifdef FULL_READ
-# include "safe-read.h"
-# define safe_rw safe_read
-# define full_rw full_read
-# undef const
-# define const /* empty */
-#else
-# include "safe-write.h"
-# define safe_rw safe_write
-# define full_rw full_write
-#endif
-
-#ifdef FULL_READ
-/* Set errno to zero upon EOF.  */
-# define ZERO_BYTE_TRANSFER_ERRNO 0
-#else
-/* Some buggy drivers return 0 when one tries to write beyond
-   a device's end.  (Example: Linux 1.2.13 on /dev/fd0.)
-   Set errno to ENOSPC so they get a sensible diagnostic.  */
-# define ZERO_BYTE_TRANSFER_ERRNO ENOSPC
-#endif
-
-/* Write(read) COUNT bytes at BUF to(from) descriptor FD, retrying if
-   interrupted or if a partial write(read) occurs.  Return the number
-   of bytes transferred.
-   When writing, set errno if fewer than COUNT bytes are written.
-   When reading, if fewer than COUNT bytes are read, you must examine
-   errno to distinguish failure from EOF (errno == 0).  */
-size_t
-full_rw (int fd, const void *buf, size_t count)
-{
-  size_t total = 0;
-  const char *ptr = (const char *) buf;
-
-  while (count > 0)
-    {
-      size_t n_rw = safe_rw (fd, ptr, count);
-      if (n_rw == (size_t) -1)
-       break;
-      if (n_rw == 0)
-       {
-         errno = ZERO_BYTE_TRANSFER_ERRNO;
-         break;
-       }
-      total += n_rw;
-      ptr += n_rw;
-      count -= n_rw;
-    }
-
-  return total;
-}
diff --git a/lib/full-write.h b/lib/full-write.h
deleted file mode 100644 (file)
index 9a80146..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* An interface to write() that writes all it is asked to write.
-
-   Copyright (C) 2002-2003 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 <stddef.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Write COUNT bytes at BUF to descriptor FD, retrying if interrupted
-   or if partial writes occur.  Return the number of bytes successfully
-   written, setting errno if that is less than COUNT.  */
-extern size_t full_write (int fd, const void *buf, size_t count);
-
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/lib/getcwd.c b/lib/getcwd.c
deleted file mode 100644 (file)
index b9e57d3..0000000
+++ /dev/null
@@ -1,433 +0,0 @@
-/* Copyright (C) 1991-1999, 2004-2008 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
-   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 !_LIBC
-# include <config.h>
-# include <unistd.h>
-#endif
-
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <stdbool.h>
-#include <stddef.h>
-
-#include <fcntl.h> /* For AT_FDCWD on Solaris 9.  */
-
-/* If this host provides the openat function, then enable
-   code below to make getcwd more efficient and robust.  */
-#ifdef HAVE_OPENAT
-# define HAVE_OPENAT_SUPPORT 1
-#else
-# define HAVE_OPENAT_SUPPORT 0
-#endif
-
-#ifndef __set_errno
-# define __set_errno(val) (errno = (val))
-#endif
-
-#include <dirent.h>
-#ifndef _D_EXACT_NAMLEN
-# define _D_EXACT_NAMLEN(d) strlen ((d)->d_name)
-#endif
-#ifndef _D_ALLOC_NAMLEN
-# define _D_ALLOC_NAMLEN(d) (_D_EXACT_NAMLEN (d) + 1)
-#endif
-
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if _LIBC
-# ifndef mempcpy
-#  define mempcpy __mempcpy
-# endif
-#endif
-
-#include <limits.h>
-
-/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive.  Its
-   value exceeds INT_MAX, so its use as an int doesn't conform to the
-   C standard, and GCC and Sun C complain in some cases.  */
-#if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553
-# undef AT_FDCWD
-# define AT_FDCWD (-3041965)
-#endif
-
-#ifdef ENAMETOOLONG
-# define is_ENAMETOOLONG(x) ((x) == ENAMETOOLONG)
-#else
-# define is_ENAMETOOLONG(x) 0
-#endif
-
-#ifndef MAX
-# define MAX(a, b) ((a) < (b) ? (b) : (a))
-#endif
-#ifndef MIN
-# define MIN(a, b) ((a) < (b) ? (a) : (b))
-#endif
-
-#ifndef PATH_MAX
-# ifdef        MAXPATHLEN
-#  define PATH_MAX MAXPATHLEN
-# else
-#  define PATH_MAX 1024
-# endif
-#endif
-
-#if D_INO_IN_DIRENT
-# define MATCHING_INO(dp, ino) ((dp)->d_ino == (ino))
-#else
-# define MATCHING_INO(dp, ino) true
-#endif
-
-#if !_LIBC
-# define __getcwd rpl_getcwd
-# define __lstat lstat
-# define __closedir closedir
-# define __opendir opendir
-# define __readdir readdir
-#endif
-
-/* The results of opendir() in this file are not used with dirfd and fchdir,
-   therefore save some unnecessary recursion in fchdir.c.  */
-#undef opendir
-#undef closedir
-\f
-/* Get the name of the current working directory, and put it in SIZE
-   bytes of BUF.  Returns NULL if the directory couldn't be determined or
-   SIZE was too small.  If successful, returns BUF.  In GNU, if BUF is
-   NULL, an array is allocated with `malloc'; the array is SIZE bytes long,
-   unless SIZE == 0, in which case it is as big as necessary.  */
-
-char *
-__getcwd (char *buf, size_t size)
-{
-  /* Lengths of big file name components and entire file names, and a
-     deep level of file name nesting.  These numbers are not upper
-     bounds; they are merely large values suitable for initial
-     allocations, designed to be large enough for most real-world
-     uses.  */
-  enum
-    {
-      BIG_FILE_NAME_COMPONENT_LENGTH = 255,
-      BIG_FILE_NAME_LENGTH = MIN (4095, PATH_MAX - 1),
-      DEEP_NESTING = 100
-    };
-
-#if HAVE_OPENAT_SUPPORT
-  int fd = AT_FDCWD;
-  bool fd_needs_closing = false;
-#else
-  char dots[DEEP_NESTING * sizeof ".." + BIG_FILE_NAME_COMPONENT_LENGTH + 1];
-  char *dotlist = dots;
-  size_t dotsize = sizeof dots;
-  size_t dotlen = 0;
-#endif
-  DIR *dirstream = NULL;
-  dev_t rootdev, thisdev;
-  ino_t rootino, thisino;
-  char *dir;
-  register char *dirp;
-  struct stat st;
-  size_t allocated = size;
-  size_t used;
-
-#if HAVE_PARTLY_WORKING_GETCWD
-  /* The system getcwd works, except it sometimes fails when it
-     shouldn't, setting errno to ERANGE, ENAMETOOLONG, or ENOENT.  If
-     AT_FDCWD is not defined, the algorithm below is O(N**2) and this
-     is much slower than the system getcwd (at least on GNU/Linux).
-     So trust the system getcwd's results unless they look
-     suspicious.
-
-     Use the system getcwd even if we have openat support, since the
-     system getcwd works even when a parent is unreadable, while the
-     openat-based approach does not.  */
-
-# undef getcwd
-  dir = getcwd (buf, size);
-  if (dir || (errno != ERANGE && !is_ENAMETOOLONG (errno) && errno != ENOENT))
-    return dir;
-#endif
-
-  if (size == 0)
-    {
-      if (buf != NULL)
-       {
-         __set_errno (EINVAL);
-         return NULL;
-       }
-
-      allocated = BIG_FILE_NAME_LENGTH + 1;
-    }
-
-  if (buf == NULL)
-    {
-      dir = malloc (allocated);
-      if (dir == NULL)
-       return NULL;
-    }
-  else
-    dir = buf;
-
-  dirp = dir + allocated;
-  *--dirp = '\0';
-
-  if (__lstat (".", &st) < 0)
-    goto lose;
-  thisdev = st.st_dev;
-  thisino = st.st_ino;
-
-  if (__lstat ("/", &st) < 0)
-    goto lose;
-  rootdev = st.st_dev;
-  rootino = st.st_ino;
-
-  while (!(thisdev == rootdev && thisino == rootino))
-    {
-      struct dirent *d;
-      dev_t dotdev;
-      ino_t dotino;
-      bool mount_point;
-      int parent_status;
-      size_t dirroom;
-      size_t namlen;
-      bool use_d_ino = true;
-
-      /* Look at the parent directory.  */
-#if HAVE_OPENAT_SUPPORT
-      fd = openat (fd, "..", O_RDONLY);
-      if (fd < 0)
-       goto lose;
-      fd_needs_closing = true;
-      parent_status = fstat (fd, &st);
-#else
-      dotlist[dotlen++] = '.';
-      dotlist[dotlen++] = '.';
-      dotlist[dotlen] = '\0';
-      parent_status = __lstat (dotlist, &st);
-#endif
-      if (parent_status != 0)
-       goto lose;
-
-      if (dirstream && __closedir (dirstream) != 0)
-       {
-         dirstream = NULL;
-         goto lose;
-       }
-
-      /* Figure out if this directory is a mount point.  */
-      dotdev = st.st_dev;
-      dotino = st.st_ino;
-      mount_point = dotdev != thisdev;
-
-      /* Search for the last directory.  */
-#if HAVE_OPENAT_SUPPORT
-      dirstream = fdopendir (fd);
-      if (dirstream == NULL)
-       goto lose;
-      /* Reset fd.  It may have been closed by fdopendir.  */
-      fd = dirfd (dirstream);
-      fd_needs_closing = false;
-#else
-      dirstream = __opendir (dotlist);
-      if (dirstream == NULL)
-       goto lose;
-      dotlist[dotlen++] = '/';
-#endif
-      for (;;)
-       {
-         /* Clear errno to distinguish EOF from error if readdir returns
-            NULL.  */
-         __set_errno (0);
-         d = __readdir (dirstream);
-
-         /* When we've iterated through all directory entries without finding
-            one with a matching d_ino, rewind the stream and consider each
-            name again, but this time, using lstat.  This is necessary in a
-            chroot on at least one system (glibc-2.3.6 + linux 2.6.12), where
-            .., ../.., ../../.., etc. all had the same device number, yet the
-            d_ino values for entries in / did not match those obtained
-            via lstat.  */
-         if (d == NULL && errno == 0 && use_d_ino)
-           {
-             use_d_ino = false;
-             rewinddir (dirstream);
-             d = __readdir (dirstream);
-           }
-
-         if (d == NULL)
-           {
-             if (errno == 0)
-               /* EOF on dirstream, which can mean e.g., that the current
-                  directory has been removed.  */
-               __set_errno (ENOENT);
-             goto lose;
-           }
-         if (d->d_name[0] == '.' &&
-             (d->d_name[1] == '\0' ||
-              (d->d_name[1] == '.' && d->d_name[2] == '\0')))
-           continue;
-
-         if (use_d_ino)
-           {
-             bool match = (MATCHING_INO (d, thisino) || mount_point);
-             if (! match)
-               continue;
-           }
-
-         {
-           int entry_status;
-#if HAVE_OPENAT_SUPPORT
-           entry_status = fstatat (fd, d->d_name, &st, AT_SYMLINK_NOFOLLOW);
-#else
-           /* Compute size needed for this file name, or for the file
-              name ".." in the same directory, whichever is larger.
-              Room for ".." might be needed the next time through
-              the outer loop.  */
-           size_t name_alloc = _D_ALLOC_NAMLEN (d);
-           size_t filesize = dotlen + MAX (sizeof "..", name_alloc);
-
-           if (filesize < dotlen)
-             goto memory_exhausted;
-
-           if (dotsize < filesize)
-             {
-               /* My, what a deep directory tree you have, Grandma.  */
-               size_t newsize = MAX (filesize, dotsize * 2);
-               size_t i;
-               if (newsize < dotsize)
-                 goto memory_exhausted;
-               if (dotlist != dots)
-                 free (dotlist);
-               dotlist = malloc (newsize);
-               if (dotlist == NULL)
-                 goto lose;
-               dotsize = newsize;
-
-               i = 0;
-               do
-                 {
-                   dotlist[i++] = '.';
-                   dotlist[i++] = '.';
-                   dotlist[i++] = '/';
-                 }
-               while (i < dotlen);
-             }
-
-           memcpy (dotlist + dotlen, d->d_name, _D_ALLOC_NAMLEN (d));
-           entry_status = __lstat (dotlist, &st);
-#endif
-           /* We don't fail here if we cannot stat() a directory entry.
-              This can happen when (network) file systems fail.  If this
-              entry is in fact the one we are looking for we will find
-              out soon as we reach the end of the directory without
-              having found anything.  */
-           if (entry_status == 0 && S_ISDIR (st.st_mode)
-               && st.st_dev == thisdev && st.st_ino == thisino)
-             break;
-         }
-       }
-
-      dirroom = dirp - dir;
-      namlen = _D_EXACT_NAMLEN (d);
-
-      if (dirroom <= namlen)
-       {
-         if (size != 0)
-           {
-             __set_errno (ERANGE);
-             goto lose;
-           }
-         else
-           {
-             char *tmp;
-             size_t oldsize = allocated;
-
-             allocated += MAX (allocated, namlen);
-             if (allocated < oldsize
-                 || ! (tmp = realloc (dir, allocated)))
-               goto memory_exhausted;
-
-             /* Move current contents up to the end of the buffer.
-                This is guaranteed to be non-overlapping.  */
-             dirp = memcpy (tmp + allocated - (oldsize - dirroom),
-                            tmp + dirroom,
-                            oldsize - dirroom);
-             dir = tmp;
-           }
-       }
-      dirp -= namlen;
-      memcpy (dirp, d->d_name, namlen);
-      *--dirp = '/';
-
-      thisdev = dotdev;
-      thisino = dotino;
-    }
-
-  if (dirstream && __closedir (dirstream) != 0)
-    {
-      dirstream = NULL;
-      goto lose;
-    }
-
-  if (dirp == &dir[allocated - 1])
-    *--dirp = '/';
-
-#if ! HAVE_OPENAT_SUPPORT
-  if (dotlist != dots)
-    free (dotlist);
-#endif
-
-  used = dir + allocated - dirp;
-  memmove (dir, dirp, used);
-
-  if (size == 0)
-    /* Ensure that the buffer is only as large as necessary.  */
-    buf = realloc (dir, used);
-
-  if (buf == NULL)
-    /* Either buf was NULL all along, or `realloc' failed but
-       we still have the original string.  */
-    buf = dir;
-
-  return buf;
-
- memory_exhausted:
-  __set_errno (ENOMEM);
- lose:
-  {
-    int save = errno;
-    if (dirstream)
-      __closedir (dirstream);
-#if HAVE_OPENAT_SUPPORT
-    if (fd_needs_closing)
-      close (fd);
-#else
-    if (dotlist != dots)
-      free (dotlist);
-#endif
-    if (buf == NULL)
-      free (dir);
-    __set_errno (save);
-  }
-  return NULL;
-}
-
-#ifdef weak_alias
-weak_alias (__getcwd, getcwd)
-#endif
diff --git a/lib/getdate.c b/lib/getdate.c
deleted file mode 100644 (file)
index 2e5f210..0000000
+++ /dev/null
@@ -1,3344 +0,0 @@
-/* A Bison parser, made by GNU Bison 2.3.  */
-
-/* Skeleton implementation for Bison's Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   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 2, 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, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* C LALR(1) parser skeleton written by Richard Stallman, by
-   simplifying the original so-called "semantic" parser.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-/* Identify Bison output.  */
-#define YYBISON 1
-
-/* Bison version.  */
-#define YYBISON_VERSION "2.3"
-
-/* Skeleton name.  */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers.  */
-#define YYPURE 1
-
-/* Using locations.  */
-#define YYLSP_NEEDED 0
-
-
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     tAGO = 258,
-     tDST = 259,
-     tYEAR_UNIT = 260,
-     tMONTH_UNIT = 261,
-     tHOUR_UNIT = 262,
-     tMINUTE_UNIT = 263,
-     tSEC_UNIT = 264,
-     tDAY_UNIT = 265,
-     tDAY_SHIFT = 266,
-     tDAY = 267,
-     tDAYZONE = 268,
-     tLOCAL_ZONE = 269,
-     tMERIDIAN = 270,
-     tMONTH = 271,
-     tORDINAL = 272,
-     tZONE = 273,
-     tSNUMBER = 274,
-     tUNUMBER = 275,
-     tSDECIMAL_NUMBER = 276,
-     tUDECIMAL_NUMBER = 277
-   };
-#endif
-/* Tokens.  */
-#define tAGO 258
-#define tDST 259
-#define tYEAR_UNIT 260
-#define tMONTH_UNIT 261
-#define tHOUR_UNIT 262
-#define tMINUTE_UNIT 263
-#define tSEC_UNIT 264
-#define tDAY_UNIT 265
-#define tDAY_SHIFT 266
-#define tDAY 267
-#define tDAYZONE 268
-#define tLOCAL_ZONE 269
-#define tMERIDIAN 270
-#define tMONTH 271
-#define tORDINAL 272
-#define tZONE 273
-#define tSNUMBER 274
-#define tUNUMBER 275
-#define tSDECIMAL_NUMBER 276
-#define tUDECIMAL_NUMBER 277
-
-
-
-
-/* Copy the first part of user declarations.  */
-#line 1 "getdate.y"
-
-/* Parse a string into an internal time stamp.
-
-   Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-   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/>.  */
-
-/* Originally written by Steven M. Bellovin <smb@research.att.com> while
-   at the University of North Carolina at Chapel Hill.  Later tweaked by
-   a couple of people on Usenet.  Completely overhauled by Rich $alz
-   <rsalz@bbn.com> and Jim Berets <jberets@bbn.com> in August, 1990.
-
-   Modified by Paul Eggert <eggert@twinsun.com> in August 1999 to do
-   the right thing about local DST.  Also modified by Paul Eggert
-   <eggert@cs.ucla.edu> in February 2004 to support
-   nanosecond-resolution time stamps, and in October 2004 to support
-   TZ strings in dates.  */
-
-/* FIXME: Check for arithmetic overflow in all cases, not just
-   some of them.  */
-
-#include <config.h>
-
-#include "getdate.h"
-
-#include "intprops.h"
-#include "timespec.h"
-#include "verify.h"
-
-/* There's no need to extend the stack, so there's no need to involve
-   alloca.  */
-#define YYSTACK_USE_ALLOCA 0
-
-/* Tell Bison how much stack space is needed.  20 should be plenty for
-   this grammar, which is not right recursive.  Beware setting it too
-   high, since that might cause problems on machines whose
-   implementations have lame stack-overflow checking.  */
-#define YYMAXDEPTH 20
-#define YYINITDEPTH YYMAXDEPTH
-
-/* Since the code of getdate.y is not included in the Emacs executable
-   itself, there is no need to #define static in this file.  Even if
-   the code were included in the Emacs executable, it probably
-   wouldn't do any harm to #undef it here; this will only cause
-   problems if we try to write to a static variable, which I don't
-   think this code needs to do.  */
-#ifdef emacs
-# undef static
-#endif
-
-#include <c-ctype.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "xalloc.h"
-
-
-/* ISDIGIT differs from isdigit, as follows:
-   - Its arg may be any int or unsigned int; it need not be an unsigned char
-     or EOF.
-   - It's typically faster.
-   POSIX says that only '0' through '9' are digits.  Prefer ISDIGIT to
-   isdigit unless it's important to use the locale's definition
-   of `digit' even when the host does not conform to POSIX.  */
-#define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
-
-#ifndef __attribute__
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
-#  define __attribute__(x)
-# endif
-#endif
-
-#ifndef ATTRIBUTE_UNUSED
-# define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
-#endif
-
-/* Shift A right by B bits portably, by dividing A by 2**B and
-   truncating towards minus infinity.  A and B should be free of side
-   effects, and B should be in the range 0 <= B <= INT_BITS - 2, where
-   INT_BITS is the number of useful bits in an int.  GNU code can
-   assume that INT_BITS is at least 32.
-
-   ISO C99 says that A >> B is implementation-defined if A < 0.  Some
-   implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift
-   right in the usual way when A < 0, so SHR falls back on division if
-   ordinary A >> B doesn't seem to be the usual signed shift.  */
-#define SHR(a, b)      \
-  (-1 >> 1 == -1       \
-   ? (a) >> (b)                \
-   : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0))
-
-#define EPOCH_YEAR 1970
-#define TM_YEAR_BASE 1900
-
-#define HOUR(x) ((x) * 60)
-
-/* Lots of this code assumes time_t and time_t-like values fit into
-   long int.  It also assumes that signed integer overflow silently
-   wraps around, but there's no portable way to check for that at
-   compile-time.  */
-verify (TYPE_IS_INTEGER (time_t));
-verify (LONG_MIN <= TYPE_MINIMUM (time_t) && TYPE_MAXIMUM (time_t) <= LONG_MAX);
-
-/* An integer value, and the number of digits in its textual
-   representation.  */
-typedef struct
-{
-  bool negative;
-  long int value;
-  size_t digits;
-} textint;
-
-/* An entry in the lexical lookup table.  */
-typedef struct
-{
-  char const *name;
-  int type;
-  int value;
-} table;
-
-/* Meridian: am, pm, or 24-hour style.  */
-enum { MERam, MERpm, MER24 };
-
-enum { BILLION = 1000000000, LOG10_BILLION = 9 };
-
-/* Relative times.  */
-typedef struct
-{
-  /* Relative year, month, day, hour, minutes, seconds, and nanoseconds.  */
-  long int year;
-  long int month;
-  long int day;
-  long int hour;
-  long int minutes;
-  long int seconds;
-  long int ns;
-} relative_time;
-
-#if HAVE_COMPOUND_LITERALS
-# define RELATIVE_TIME_0 ((relative_time) { 0, 0, 0, 0, 0, 0, 0 })
-#else
-static relative_time const RELATIVE_TIME_0;
-#endif
-
-/* Information passed to and from the parser.  */
-typedef struct
-{
-  /* The input string remaining to be parsed. */
-  const char *input;
-
-  /* N, if this is the Nth Tuesday.  */
-  long int day_ordinal;
-
-  /* Day of week; Sunday is 0.  */
-  int day_number;
-
-  /* tm_isdst flag for the local zone.  */
-  int local_isdst;
-
-  /* Time zone, in minutes east of UTC.  */
-  long int time_zone;
-
-  /* Style used for time.  */
-  int meridian;
-
-  /* Gregorian year, month, day, hour, minutes, seconds, and nanoseconds.  */
-  textint year;
-  long int month;
-  long int day;
-  long int hour;
-  long int minutes;
-  struct timespec seconds; /* includes nanoseconds */
-
-  /* Relative year, month, day, hour, minutes, seconds, and nanoseconds.  */
-  relative_time rel;
-
-  /* Presence or counts of nonterminals of various flavors parsed so far.  */
-  bool timespec_seen;
-  bool rels_seen;
-  size_t dates_seen;
-  size_t days_seen;
-  size_t local_zones_seen;
-  size_t dsts_seen;
-  size_t times_seen;
-  size_t zones_seen;
-
-  /* Table of local time zone abbrevations, terminated by a null entry.  */
-  table local_time_zone_table[3];
-} parser_control;
-
-union YYSTYPE;
-static int yylex (union YYSTYPE *, parser_control *);
-static int yyerror (parser_control const *, char const *);
-static long int time_zone_hhmm (parser_control *, textint, long int);
-
-/* Extract into *PC any date and time info from a string of digits
-   of the form e.g., YYYYMMDD, YYMMDD, HHMM, HH (and sometimes YYY,
-   YYYY, ...).  */
-static void
-digits_to_date_time (parser_control *pc, textint text_int)
-{
-  if (pc->dates_seen && ! pc->year.digits
-      && ! pc->rels_seen && (pc->times_seen || 2 < text_int.digits))
-    pc->year = text_int;
-  else
-    {
-      if (4 < text_int.digits)
-       {
-         pc->dates_seen++;
-         pc->day = text_int.value % 100;
-         pc->month = (text_int.value / 100) % 100;
-         pc->year.value = text_int.value / 10000;
-         pc->year.digits = text_int.digits - 4;
-       }
-      else
-       {
-         pc->times_seen++;
-         if (text_int.digits <= 2)
-           {
-             pc->hour = text_int.value;
-             pc->minutes = 0;
-           }
-         else
-           {
-             pc->hour = text_int.value / 100;
-             pc->minutes = text_int.value % 100;
-           }
-         pc->seconds.tv_sec = 0;
-         pc->seconds.tv_nsec = 0;
-         pc->meridian = MER24;
-       }
-    }
-}
-
-/* Increment PC->rel by FACTOR * REL (FACTOR is 1 or -1).  */
-static void
-apply_relative_time (parser_control *pc, relative_time rel, int factor)
-{
-  pc->rel.ns += factor * rel.ns;
-  pc->rel.seconds += factor * rel.seconds;
-  pc->rel.minutes += factor * rel.minutes;
-  pc->rel.hour += factor * rel.hour;
-  pc->rel.day += factor * rel.day;
-  pc->rel.month += factor * rel.month;
-  pc->rel.year += factor * rel.year;
-  pc->rels_seen = true;
-}
-
-/* Set PC-> hour, minutes, seconds and nanoseconds members from arguments.  */
-static void
-set_hhmmss (parser_control *pc, long int hour, long int minutes,
-           time_t sec, long int nsec)
-{
-  pc->hour = hour;
-  pc->minutes = minutes;
-  pc->seconds.tv_sec = sec;
-  pc->seconds.tv_nsec = nsec;
-}
-
-
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-#line 286 "getdate.y"
-{
-  long int intval;
-  textint textintval;
-  struct timespec timespec;
-  relative_time rel;
-}
-/* Line 187 of yacc.c.  */
-#line 422 "getdate.c"
-       YYSTYPE;
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
-
-
-/* Copy the second part of user declarations.  */
-
-
-/* Line 216 of yacc.c.  */
-#line 435 "getdate.c"
-
-#ifdef short
-# undef short
-#endif
-
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
-#endif
-
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
-#else
-typedef short int yytype_int8;
-#endif
-
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
-#endif
-
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
-#else
-typedef short int yytype_int16;
-#endif
-
-#ifndef YYSIZE_T
-# ifdef __SIZE_TYPE__
-#  define YYSIZE_T __SIZE_TYPE__
-# elif defined size_t
-#  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# else
-#  define YYSIZE_T unsigned int
-# endif
-#endif
-
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
-
-#ifndef YY_
-# if YYENABLE_NLS
-#  if ENABLE_NLS
-#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(msgid) dgettext ("bison-runtime", msgid)
-#  endif
-# endif
-# ifndef YY_
-#  define YY_(msgid) msgid
-# endif
-#endif
-
-/* Suppress unused-variable warnings by "using" E.  */
-#if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
-#else
-# define YYUSE(e) /* empty */
-#endif
-
-/* Identity function, used to suppress warnings about constant conditions.  */
-#ifndef lint
-# define YYID(n) (n)
-#else
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int i)
-#else
-static int
-YYID (i)
-    int i;
-#endif
-{
-  return i;
-}
-#endif
-
-#if ! defined yyoverflow || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# ifdef YYSTACK_USE_ALLOCA
-#  if YYSTACK_USE_ALLOCA
-#   ifdef __GNUC__
-#    define YYSTACK_ALLOC __builtin_alloca
-#   elif defined __BUILTIN_VA_ARG_INCR
-#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
-#   elif defined _AIX
-#    define YYSTACK_ALLOC __alloca
-#   elif defined _MSC_VER
-#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
-#    define alloca _alloca
-#   else
-#    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#     ifndef _STDLIB_H
-#      define _STDLIB_H 1
-#     endif
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-    /* The OS might guarantee only one guard page at the bottom of the stack,
-       and a page size can be as small as 4096 bytes.  So we cannot safely
-       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
-       to allow for a few compiler-allocated temporary stack slots.  */
-#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
-#  endif
-# else
-#  define YYSTACK_ALLOC YYMALLOC
-#  define YYSTACK_FREE YYFREE
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
-#  endif
-#  if (defined __cplusplus && ! defined _STDLIB_H \
-       && ! ((defined YYMALLOC || defined malloc) \
-            && (defined YYFREE || defined free)))
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef _STDLIB_H
-#    define _STDLIB_H 1
-#   endif
-#  endif
-#  ifndef YYMALLOC
-#   define YYMALLOC malloc
-#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-#  ifndef YYFREE
-#   define YYFREE free
-#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
-
-#if (! defined yyoverflow \
-     && (! defined __cplusplus \
-        || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  yytype_int16 yyss;
-  YYSTYPE yyvs;
-  };
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
-      + YYSTACK_GAP_MAXIMUM)
-
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)             \
-      do                                       \
-       {                                       \
-         YYSIZE_T yyi;                         \
-         for (yyi = 0; yyi < (Count); yyi++)   \
-           (To)[yyi] = (From)[yyi];            \
-       }                                       \
-      while (YYID (0))
-#  endif
-# endif
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack)                                       \
-    do                                                                 \
-      {                                                                        \
-       YYSIZE_T yynewbytes;                                            \
-       YYCOPY (&yyptr->Stack, Stack, yysize);                          \
-       Stack = &yyptr->Stack;                                          \
-       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-       yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                        \
-    while (YYID (0))
-
-#endif
-
-/* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  12
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   98
-
-/* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  27
-/* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  21
-/* YYNRULES -- Number of rules.  */
-#define YYNRULES  82
-/* YYNRULES -- Number of states.  */
-#define YYNSTATES  100
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   277
-
-#define YYTRANSLATE(YYX)                                               \
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const yytype_uint8 yytranslate[] =
-{
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,    25,     2,     2,    26,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    24,     2,
-       2,     2,     2,     2,    23,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const yytype_uint8 yyprhs[] =
-{
-       0,     0,     3,     5,     7,    10,    11,    14,    16,    18,
-      20,    22,    24,    26,    28,    30,    33,    38,    44,    51,
-      59,    61,    64,    66,    69,    73,    75,    78,    80,    83,
-      86,    89,    93,    99,   103,   107,   111,   114,   119,   122,
-     126,   129,   131,   133,   136,   139,   141,   144,   147,   149,
-     152,   155,   157,   160,   163,   165,   168,   171,   173,   176,
-     179,   182,   185,   187,   189,   192,   195,   198,   201,   204,
-     207,   209,   211,   213,   215,   217,   219,   221,   223,   226,
-     227,   230,   231
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const yytype_int8 yyrhs[] =
-{
-      28,     0,    -1,    29,    -1,    30,    -1,    23,    41,    -1,
-      -1,    30,    31,    -1,    32,    -1,    33,    -1,    34,    -1,
-      36,    -1,    35,    -1,    37,    -1,    44,    -1,    45,    -1,
-      20,    15,    -1,    20,    24,    20,    47,    -1,    20,    24,
-      20,    19,    46,    -1,    20,    24,    20,    24,    43,    47,
-      -1,    20,    24,    20,    24,    43,    19,    46,    -1,    14,
-      -1,    14,     4,    -1,    18,    -1,    18,    39,    -1,    18,
-      19,    46,    -1,    13,    -1,    18,     4,    -1,    12,    -1,
-      12,    25,    -1,    17,    12,    -1,    20,    12,    -1,    20,
-      26,    20,    -1,    20,    26,    20,    26,    20,    -1,    20,
-      19,    19,    -1,    20,    16,    19,    -1,    16,    19,    19,
-      -1,    16,    20,    -1,    16,    20,    25,    20,    -1,    20,
-      16,    -1,    20,    16,    20,    -1,    38,     3,    -1,    38,
-      -1,    40,    -1,    17,     5,    -1,    20,     5,    -1,     5,
-      -1,    17,     6,    -1,    20,     6,    -1,     6,    -1,    17,
-      10,    -1,    20,    10,    -1,    10,    -1,    17,     7,    -1,
-      20,     7,    -1,     7,    -1,    17,     8,    -1,    20,     8,
-      -1,     8,    -1,    17,     9,    -1,    20,     9,    -1,    21,
-       9,    -1,    22,     9,    -1,     9,    -1,    39,    -1,    19,
-       5,    -1,    19,     6,    -1,    19,    10,    -1,    19,     7,
-      -1,    19,     8,    -1,    19,     9,    -1,    11,    -1,    42,
-      -1,    43,    -1,    21,    -1,    19,    -1,    22,    -1,    20,
-      -1,    20,    -1,    20,    39,    -1,    -1,    24,    20,    -1,
-      -1,    15,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const yytype_uint16 yyrline[] =
-{
-       0,   312,   312,   313,   317,   324,   326,   330,   332,   334,
-     336,   338,   340,   341,   342,   346,   351,   356,   363,   368,
-     378,   383,   391,   393,   396,   398,   400,   405,   410,   415,
-     420,   428,   433,   453,   460,   468,   476,   481,   487,   492,
-     501,   503,   505,   510,   512,   514,   516,   518,   520,   522,
-     524,   526,   528,   530,   532,   534,   536,   538,   540,   542,
-     544,   546,   548,   550,   554,   556,   558,   560,   562,   564,
-     569,   573,   573,   576,   577,   582,   583,   588,   593,   604,
-     605,   611,   612
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
-static const char *const yytname[] =
-{
-  "$end", "error", "$undefined", "tAGO", "tDST", "tYEAR_UNIT",
-  "tMONTH_UNIT", "tHOUR_UNIT", "tMINUTE_UNIT", "tSEC_UNIT", "tDAY_UNIT",
-  "tDAY_SHIFT", "tDAY", "tDAYZONE", "tLOCAL_ZONE", "tMERIDIAN", "tMONTH",
-  "tORDINAL", "tZONE", "tSNUMBER", "tUNUMBER", "tSDECIMAL_NUMBER",
-  "tUDECIMAL_NUMBER", "'@'", "':'", "','", "'/'", "$accept", "spec",
-  "timespec", "items", "item", "time", "local_zone", "zone", "day", "date",
-  "rel", "relunit", "relunit_snumber", "dayshift", "seconds",
-  "signed_seconds", "unsigned_seconds", "number", "hybrid",
-  "o_colon_minutes", "o_merid", 0
-};
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
-static const yytype_uint16 yytoknum[] =
-{
-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,    64,    58,    44,    47
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       0,    27,    28,    28,    29,    30,    30,    31,    31,    31,
-      31,    31,    31,    31,    31,    32,    32,    32,    32,    32,
-      33,    33,    34,    34,    34,    34,    34,    35,    35,    35,
-      35,    36,    36,    36,    36,    36,    36,    36,    36,    36,
-      37,    37,    37,    38,    38,    38,    38,    38,    38,    38,
-      38,    38,    38,    38,    38,    38,    38,    38,    38,    38,
-      38,    38,    38,    38,    39,    39,    39,    39,    39,    39,
-      40,    41,    41,    42,    42,    43,    43,    44,    45,    46,
-      46,    47,    47
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
-{
-       0,     2,     1,     1,     2,     0,     2,     1,     1,     1,
-       1,     1,     1,     1,     1,     2,     4,     5,     6,     7,
-       1,     2,     1,     2,     3,     1,     2,     1,     2,     2,
-       2,     3,     5,     3,     3,     3,     2,     4,     2,     3,
-       2,     1,     1,     2,     2,     1,     2,     2,     1,     2,
-       2,     1,     2,     2,     1,     2,     2,     1,     2,     2,
-       2,     2,     1,     1,     2,     2,     2,     2,     2,     2,
-       1,     1,     1,     1,     1,     1,     1,     1,     2,     0,
-       2,     0,     1
-};
-
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
-static const yytype_uint8 yydefact[] =
-{
-       5,     0,     0,     2,     3,    74,    76,    73,    75,     4,
-      71,    72,     1,    45,    48,    54,    57,    62,    51,    70,
-      27,    25,    20,     0,     0,    22,     0,    77,     0,     0,
-       6,     7,     8,     9,    11,    10,    12,    41,    63,    42,
-      13,    14,    28,    21,     0,    36,    43,    46,    52,    55,
-      58,    49,    29,    26,    79,    23,    64,    65,    67,    68,
-      69,    66,    44,    47,    53,    56,    59,    50,    30,    15,
-      38,     0,     0,     0,    78,    60,    61,    40,    35,     0,
-       0,    24,    34,    39,    33,    81,    31,    37,    80,    82,
-      79,     0,    16,     0,    17,    81,    32,    79,    18,    19
-};
-
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int8 yydefgoto[] =
-{
-      -1,     2,     3,     4,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,     9,    10,    11,    40,    41,    81,
-      92
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -82
-static const yytype_int8 yypact[] =
-{
-     -17,    56,    15,   -82,    26,   -82,   -82,   -82,   -82,   -82,
-     -82,   -82,   -82,   -82,   -82,   -82,   -82,   -82,   -82,   -82,
-      36,   -82,    68,    10,    50,     9,    59,    -5,    72,    73,
-     -82,   -82,   -82,   -82,   -82,   -82,   -82,    80,   -82,   -82,
-     -82,   -82,   -82,   -82,    65,    61,   -82,   -82,   -82,   -82,
-     -82,   -82,   -82,   -82,    17,   -82,   -82,   -82,   -82,   -82,
-     -82,   -82,   -82,   -82,   -82,   -82,   -82,   -82,   -82,   -82,
-      60,    44,    67,    69,   -82,   -82,   -82,   -82,   -82,    70,
-      71,   -82,   -82,   -82,   -82,    -7,    62,   -82,   -82,   -82,
-      74,    -2,   -82,    75,   -82,    55,   -82,    74,   -82,   -82
-};
-
-/* YYPGOTO[NTERM-NUM].  */
-static const yytype_int8 yypgoto[] =
-{
-     -82,   -82,   -82,   -82,   -82,   -82,   -82,   -82,   -82,   -82,
-     -82,   -82,    46,   -82,   -82,   -82,    -6,   -82,   -82,   -81,
-      -3
-};
-
-/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
-   positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If zero, do what YYDEFACT says.
-   If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -1
-static const yytype_uint8 yytable[] =
-{
-      62,    63,    64,    65,    66,    67,     1,    68,    89,    94,
-      69,    70,    90,    53,    71,    12,    99,    91,     6,    72,
-       8,    73,    56,    57,    58,    59,    60,    61,    54,    44,
-      45,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    80,    23,    24,    25,    26,    27,    28,    29,    56,
-      57,    58,    59,    60,    61,    46,    47,    48,    49,    50,
-      51,    42,    52,    84,    56,    57,    58,    59,    60,    61,
-      89,    55,    43,    74,    97,     5,     6,     7,     8,    82,
-      83,    75,    76,    77,    78,    95,    79,    85,    93,    86,
-      87,    88,    98,     0,     0,    96,     0,     0,    80
-};
-
-static const yytype_int8 yycheck[] =
-{
-       5,     6,     7,     8,     9,    10,    23,    12,    15,    90,
-      15,    16,    19,     4,    19,     0,    97,    24,    20,    24,
-      22,    26,     5,     6,     7,     8,     9,    10,    19,    19,
-      20,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    24,    16,    17,    18,    19,    20,    21,    22,     5,
-       6,     7,     8,     9,    10,     5,     6,     7,     8,     9,
-      10,    25,    12,    19,     5,     6,     7,     8,     9,    10,
-      15,    25,     4,    27,    19,    19,    20,    21,    22,    19,
-      20,     9,     9,     3,    19,    91,    25,    20,    26,    20,
-      20,    20,    95,    -1,    -1,    20,    -1,    -1,    24
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
-{
-       0,    23,    28,    29,    30,    19,    20,    21,    22,    41,
-      42,    43,     0,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    16,    17,    18,    19,    20,    21,    22,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      44,    45,    25,     4,    19,    20,     5,     6,     7,     8,
-       9,    10,    12,     4,    19,    39,     5,     6,     7,     8,
-       9,    10,     5,     6,     7,     8,     9,    10,    12,    15,
-      16,    19,    24,    26,    39,     9,     9,     3,    19,    25,
-      24,    46,    19,    20,    19,    20,    20,    20,    20,    15,
-      19,    24,    47,    26,    46,    43,    20,    19,    47,    46
-};
-
-#define yyerrok                (yyerrstatus = 0)
-#define yyclearin      (yychar = YYEMPTY)
-#define YYEMPTY                (-2)
-#define YYEOF          0
-
-#define YYACCEPT       goto yyacceptlab
-#define YYABORT                goto yyabortlab
-#define YYERROR                goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  */
-
-#define YYFAIL         goto yyerrlab
-
-#define YYRECOVERING()  (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value)                                 \
-do                                                             \
-  if (yychar == YYEMPTY && yylen == 1)                         \
-    {                                                          \
-      yychar = (Token);                                                \
-      yylval = (Value);                                                \
-      yytoken = YYTRANSLATE (yychar);                          \
-      YYPOPSTACK (1);                                          \
-      goto yybackup;                                           \
-    }                                                          \
-  else                                                         \
-    {                                                          \
-      yyerror (pc, YY_("syntax error: cannot back up")); \
-      YYERROR;                                                 \
-    }                                                          \
-while (YYID (0))
-
-
-#define YYTERROR       1
-#define YYERRCODE      256
-
-
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-   If N is 0, then set CURRENT to the empty location which ends
-   the previous symbol: RHS[0] (always defined).  */
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
-    do                                                                 \
-      if (YYID (N))                                                    \
-       {                                                               \
-         (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
-         (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
-         (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
-         (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
-       }                                                               \
-      else                                                             \
-       {                                                               \
-         (Current).first_line   = (Current).last_line   =              \
-           YYRHSLOC (Rhs, 0).last_line;                                \
-         (Current).first_column = (Current).last_column =              \
-           YYRHSLOC (Rhs, 0).last_column;                              \
-       }                                                               \
-    while (YYID (0))
-#endif
-
-
-/* YY_LOCATION_PRINT -- Print the location on the stream.
-   This macro was not mandated originally: define only if we know
-   we won't break user code: when these are the locations we know.  */
-
-#ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
-#  define YY_LOCATION_PRINT(File, Loc)                 \
-     fprintf (File, "%d.%d-%d.%d",                     \
-             (Loc).first_line, (Loc).first_column,     \
-             (Loc).last_line,  (Loc).last_column)
-# else
-#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (&yylval, YYLEX_PARAM)
-#else
-# define YYLEX yylex (&yylval, pc)
-#endif
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args)                       \
-do {                                           \
-  if (yydebug)                                 \
-    YYFPRINTF Args;                            \
-} while (YYID (0))
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
-do {                                                                     \
-  if (yydebug)                                                           \
-    {                                                                    \
-      YYFPRINTF (stderr, "%s ", Title);                                          \
-      yy_symbol_print (stderr,                                           \
-                 Type, Value, pc); \
-      YYFPRINTF (stderr, "\n");                                                  \
-    }                                                                    \
-} while (YYID (0))
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, parser_control *pc)
-#else
-static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep, pc)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-    parser_control *pc;
-#endif
-{
-  if (!yyvaluep)
-    return;
-  YYUSE (pc);
-# ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
-# endif
-  switch (yytype)
-    {
-      default:
-       break;
-    }
-}
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, parser_control *pc)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep, pc)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-    parser_control *pc;
-#endif
-{
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep, pc);
-  YYFPRINTF (yyoutput, ")");
-}
-
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included).                                                   |
-`------------------------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
-#else
-static void
-yy_stack_print (bottom, top)
-    yytype_int16 *bottom;
-    yytype_int16 *top;
-#endif
-{
-  YYFPRINTF (stderr, "Stack now");
-  for (; bottom <= top; ++bottom)
-    YYFPRINTF (stderr, " %d", *bottom);
-  YYFPRINTF (stderr, "\n");
-}
-
-# define YY_STACK_PRINT(Bottom, Top)                           \
-do {                                                           \
-  if (yydebug)                                                 \
-    yy_stack_print ((Bottom), (Top));                          \
-} while (YYID (0))
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced.  |
-`------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule, parser_control *pc)
-#else
-static void
-yy_reduce_print (yyvsp, yyrule, pc)
-    YYSTYPE *yyvsp;
-    int yyrule;
-    parser_control *pc;
-#endif
-{
-  int yynrhs = yyr2[yyrule];
-  int yyi;
-  unsigned long int yylno = yyrline[yyrule];
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-            yyrule - 1, yylno);
-  /* The symbols being reduced.  */
-  for (yyi = 0; yyi < yynrhs; yyi++)
-    {
-      fprintf (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
-                      &(yyvsp[(yyi + 1) - (yynrhs)])
-                                      , pc);
-      fprintf (stderr, "\n");
-    }
-}
-
-# define YY_REDUCE_PRINT(Rule)         \
-do {                                   \
-  if (yydebug)                         \
-    yy_reduce_print (yyvsp, Rule, pc); \
-} while (YYID (0))
-
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef        YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
-
-   Do not make this value too large; the results are undefined if
-   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-
-\f
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen strlen
-#  else
-/* Return the length of YYSTR.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static YYSIZE_T
-yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
-    const char *yystr;
-#endif
-{
-  YYSIZE_T yylen;
-  for (yylen = 0; yystr[yylen]; yylen++)
-    continue;
-  return yylen;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
-    char *yydest;
-    const char *yysrc;
-#endif
-{
-  char *yyd = yydest;
-  const char *yys = yysrc;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-   quotes and backslashes, so that it's suitable for yyerror.  The
-   heuristic is that double-quoting is unnecessary unless the string
-   contains an apostrophe, a comma, or backslash (other than
-   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
-   null, do not copy; instead, return the length of what the result
-   would have been.  */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
-  if (*yystr == '"')
-    {
-      YYSIZE_T yyn = 0;
-      char const *yyp = yystr;
-
-      for (;;)
-       switch (*++yyp)
-         {
-         case '\'':
-         case ',':
-           goto do_not_strip_quotes;
-
-         case '\\':
-           if (*++yyp != '\\')
-             goto do_not_strip_quotes;
-           /* Fall through.  */
-         default:
-           if (yyres)
-             yyres[yyn] = *yyp;
-           yyn++;
-           break;
-
-         case '"':
-           if (yyres)
-             yyres[yyn] = '\0';
-           return yyn;
-         }
-    do_not_strip_quotes: ;
-    }
-
-  if (! yyres)
-    return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
-
-/* Copy into YYRESULT an error message about the unexpected token
-   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
-   including the terminating null byte.  If YYRESULT is null, do not
-   copy anything; just return the number of bytes that would be
-   copied.  As a special case, return 0 if an ordinary "syntax error"
-   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
-   size calculation.  */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
-{
-  int yyn = yypact[yystate];
-
-  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
-    return 0;
-  else
-    {
-      int yytype = YYTRANSLATE (yychar);
-      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
-      YYSIZE_T yysize = yysize0;
-      YYSIZE_T yysize1;
-      int yysize_overflow = 0;
-      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-      int yyx;
-
-# if 0
-      /* This is so xgettext sees the translatable formats that are
-        constructed on the fly.  */
-      YY_("syntax error, unexpected %s");
-      YY_("syntax error, unexpected %s, expecting %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
-      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
-      char *yyfmt;
-      char const *yyf;
-      static char const yyunexpected[] = "syntax error, unexpected %s";
-      static char const yyexpecting[] = ", expecting %s";
-      static char const yyor[] = " or %s";
-      char yyformat[sizeof yyunexpected
-                   + sizeof yyexpecting - 1
-                   + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
-                      * (sizeof yyor - 1))];
-      char const *yyprefix = yyexpecting;
-
-      /* Start YYX at -YYN if negative to avoid negative indexes in
-        YYCHECK.  */
-      int yyxbegin = yyn < 0 ? -yyn : 0;
-
-      /* Stay within bounds of both yycheck and yytname.  */
-      int yychecklim = YYLAST - yyn + 1;
-      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-      int yycount = 1;
-
-      yyarg[0] = yytname[yytype];
-      yyfmt = yystpcpy (yyformat, yyunexpected);
-
-      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-       if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
-         {
-           if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-             {
-               yycount = 1;
-               yysize = yysize0;
-               yyformat[sizeof yyunexpected - 1] = '\0';
-               break;
-             }
-           yyarg[yycount++] = yytname[yyx];
-           yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-           yysize_overflow |= (yysize1 < yysize);
-           yysize = yysize1;
-           yyfmt = yystpcpy (yyfmt, yyprefix);
-           yyprefix = yyor;
-         }
-
-      yyf = YY_(yyformat);
-      yysize1 = yysize + yystrlen (yyf);
-      yysize_overflow |= (yysize1 < yysize);
-      yysize = yysize1;
-
-      if (yysize_overflow)
-       return YYSIZE_MAXIMUM;
-
-      if (yyresult)
-       {
-         /* Avoid sprintf, as that infringes on the user's name space.
-            Don't have undefined behavior even if the translation
-            produced a string with the wrong number of "%s"s.  */
-         char *yyp = yyresult;
-         int yyi = 0;
-         while ((*yyp = *yyf) != '\0')
-           {
-             if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
-               {
-                 yyp += yytnamerr (yyp, yyarg[yyi++]);
-                 yyf += 2;
-               }
-             else
-               {
-                 yyp++;
-                 yyf++;
-               }
-           }
-       }
-      return yysize;
-    }
-}
-#endif /* YYERROR_VERBOSE */
-\f
-
-/*-----------------------------------------------.
-| Release the memory associated to this symbol.  |
-`-----------------------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, parser_control *pc)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep, pc)
-    const char *yymsg;
-    int yytype;
-    YYSTYPE *yyvaluep;
-    parser_control *pc;
-#endif
-{
-  YYUSE (yyvaluep);
-  YYUSE (pc);
-
-  if (!yymsg)
-    yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
-  switch (yytype)
-    {
-
-      default:
-       break;
-    }
-}
-\f
-
-/* Prevent warnings from -Wmissing-prototypes.  */
-
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (parser_control *pc);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-
-
-
-
-
-
-/*----------.
-| yyparse.  |
-`----------*/
-
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
-    void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (parser_control *pc)
-#else
-int
-yyparse (pc)
-    parser_control *pc;
-#endif
-#endif
-{
-  /* The look-ahead symbol.  */
-int yychar;
-
-/* The semantic value of the look-ahead symbol.  */
-YYSTYPE yylval;
-
-/* Number of syntax errors so far.  */
-int yynerrs;
-
-  int yystate;
-  int yyn;
-  int yyresult;
-  /* Number of tokens to shift before error messages enabled.  */
-  int yyerrstatus;
-  /* Look-ahead token as an internal (translated) token number.  */
-  int yytoken = 0;
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
-
-  /* Three stacks and their tools:
-     `yyss': related to states,
-     `yyvs': related to semantic values,
-     `yyls': related to locations.
-
-     Refer to the stacks thru separate pointers, to allow yyoverflow
-     to reallocate them elsewhere.  */
-
-  /* The state stack.  */
-  yytype_int16 yyssa[YYINITDEPTH];
-  yytype_int16 *yyss = yyssa;
-  yytype_int16 *yyssp;
-
-  /* The semantic value stack.  */
-  YYSTYPE yyvsa[YYINITDEPTH];
-  YYSTYPE *yyvs = yyvsa;
-  YYSTYPE *yyvsp;
-
-
-
-#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
-
-  YYSIZE_T yystacksize = YYINITDEPTH;
-
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-
-
-  /* The number of symbols on the RHS of the reduced rule.
-     Keep to zero when no symbol should be popped.  */
-  int yylen = 0;
-
-  YYDPRINTF ((stderr, "Starting parse\n"));
-
-  yystate = 0;
-  yyerrstatus = 0;
-  yynerrs = 0;
-  yychar = YYEMPTY;            /* Cause a token to be read.  */
-
-  /* Initialize stack pointers.
-     Waste one element of value and location stack
-     so that they stay on the same level as the state stack.
-     The wasted elements are never initialized.  */
-
-  yyssp = yyss;
-  yyvsp = yyvs;
-
-  goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
-`------------------------------------------------------------*/
- yynewstate:
-  /* In all cases, when you get here, the value and location stacks
-     have just been pushed.  So pushing a state here evens the stacks.  */
-  yyssp++;
-
- yysetstate:
-  *yyssp = yystate;
-
-  if (yyss + yystacksize - 1 <= yyssp)
-    {
-      /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      {
-       /* Give user a chance to reallocate the stack.  Use copies of
-          these so that the &'s don't force the real ones into
-          memory.  */
-       YYSTYPE *yyvs1 = yyvs;
-       yytype_int16 *yyss1 = yyss;
-
-
-       /* Each stack pointer address is followed by the size of the
-          data in use in that stack, in bytes.  This used to be a
-          conditional around just the two extra args, but that might
-          be undefined if yyoverflow is a macro.  */
-       yyoverflow (YY_("memory exhausted"),
-                   &yyss1, yysize * sizeof (*yyssp),
-                   &yyvs1, yysize * sizeof (*yyvsp),
-
-                   &yystacksize);
-
-       yyss = yyss1;
-       yyvs = yyvs1;
-      }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
-      /* Extend the stack our own way.  */
-      if (YYMAXDEPTH <= yystacksize)
-       goto yyexhaustedlab;
-      yystacksize *= 2;
-      if (YYMAXDEPTH < yystacksize)
-       yystacksize = YYMAXDEPTH;
-
-      {
-       yytype_int16 *yyss1 = yyss;
-       union yyalloc *yyptr =
-         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-       if (! yyptr)
-         goto yyexhaustedlab;
-       YYSTACK_RELOCATE (yyss);
-       YYSTACK_RELOCATE (yyvs);
-
-#  undef YYSTACK_RELOCATE
-       if (yyss1 != yyssa)
-         YYSTACK_FREE (yyss1);
-      }
-# endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
-
-
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                 (unsigned long int) yystacksize));
-
-      if (yyss + yystacksize - 1 <= yyssp)
-       YYABORT;
-    }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
-  goto yybackup;
-
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
-
-  /* Do appropriate processing given the current state.  Read a
-     look-ahead token if we need one and don't already have one.  */
-
-  /* First try to decide what to do without reference to look-ahead token.  */
-  yyn = yypact[yystate];
-  if (yyn == YYPACT_NINF)
-    goto yydefault;
-
-  /* Not known => get a look-ahead token if don't already have one.  */
-
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
-  if (yychar == YYEMPTY)
-    {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
-    }
-
-  if (yychar <= YYEOF)
-    {
-      yychar = yytoken = YYEOF;
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
-    }
-  else
-    {
-      yytoken = YYTRANSLATE (yychar);
-      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
-    }
-
-  /* If the proper action on seeing token YYTOKEN is to reduce or to
-     detect an error, take that action.  */
-  yyn += yytoken;
-  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
-    goto yydefault;
-  yyn = yytable[yyn];
-  if (yyn <= 0)
-    {
-      if (yyn == 0 || yyn == YYTABLE_NINF)
-       goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
-
-  /* Shift the look-ahead token.  */
-  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token unless it is eof.  */
-  if (yychar != YYEOF)
-    yychar = YYEMPTY;
-
-  yystate = yyn;
-  *++yyvsp = yylval;
-
-  goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
-yydefault:
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-  goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction.  |
-`-----------------------------*/
-yyreduce:
-  /* yyn is the number of a rule to reduce with.  */
-  yylen = yyr2[yyn];
-
-  /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
-
-     Otherwise, the following line sets YYVAL to garbage.
-     This behavior is undocumented and Bison
-     users should not rely upon it.  Assigning to YYVAL
-     unconditionally makes the parser a bit smaller, and it avoids a
-     GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1-yylen];
-
-
-  YY_REDUCE_PRINT (yyn);
-  switch (yyn)
-    {
-        case 4:
-#line 318 "getdate.y"
-    {
-       pc->seconds = (yyvsp[(2) - (2)].timespec);
-       pc->timespec_seen = true;
-      }
-    break;
-
-  case 7:
-#line 331 "getdate.y"
-    { pc->times_seen++; }
-    break;
-
-  case 8:
-#line 333 "getdate.y"
-    { pc->local_zones_seen++; }
-    break;
-
-  case 9:
-#line 335 "getdate.y"
-    { pc->zones_seen++; }
-    break;
-
-  case 10:
-#line 337 "getdate.y"
-    { pc->dates_seen++; }
-    break;
-
-  case 11:
-#line 339 "getdate.y"
-    { pc->days_seen++; }
-    break;
-
-  case 15:
-#line 347 "getdate.y"
-    {
-       set_hhmmss (pc, (yyvsp[(1) - (2)].textintval).value, 0, 0, 0);
-       pc->meridian = (yyvsp[(2) - (2)].intval);
-      }
-    break;
-
-  case 16:
-#line 352 "getdate.y"
-    {
-       set_hhmmss (pc, (yyvsp[(1) - (4)].textintval).value, (yyvsp[(3) - (4)].textintval).value, 0, 0);
-       pc->meridian = (yyvsp[(4) - (4)].intval);
-      }
-    break;
-
-  case 17:
-#line 357 "getdate.y"
-    {
-       set_hhmmss (pc, (yyvsp[(1) - (5)].textintval).value, (yyvsp[(3) - (5)].textintval).value, 0, 0);
-       pc->meridian = MER24;
-       pc->zones_seen++;
-       pc->time_zone = time_zone_hhmm (pc, (yyvsp[(4) - (5)].textintval), (yyvsp[(5) - (5)].intval));
-      }
-    break;
-
-  case 18:
-#line 364 "getdate.y"
-    {
-       set_hhmmss (pc, (yyvsp[(1) - (6)].textintval).value, (yyvsp[(3) - (6)].textintval).value, (yyvsp[(5) - (6)].timespec).tv_sec, (yyvsp[(5) - (6)].timespec).tv_nsec);
-       pc->meridian = (yyvsp[(6) - (6)].intval);
-      }
-    break;
-
-  case 19:
-#line 369 "getdate.y"
-    {
-       set_hhmmss (pc, (yyvsp[(1) - (7)].textintval).value, (yyvsp[(3) - (7)].textintval).value, (yyvsp[(5) - (7)].timespec).tv_sec, (yyvsp[(5) - (7)].timespec).tv_nsec);
-       pc->meridian = MER24;
-       pc->zones_seen++;
-       pc->time_zone = time_zone_hhmm (pc, (yyvsp[(6) - (7)].textintval), (yyvsp[(7) - (7)].intval));
-      }
-    break;
-
-  case 20:
-#line 379 "getdate.y"
-    {
-       pc->local_isdst = (yyvsp[(1) - (1)].intval);
-       pc->dsts_seen += (0 < (yyvsp[(1) - (1)].intval));
-      }
-    break;
-
-  case 21:
-#line 384 "getdate.y"
-    {
-       pc->local_isdst = 1;
-       pc->dsts_seen += (0 < (yyvsp[(1) - (2)].intval)) + 1;
-      }
-    break;
-
-  case 22:
-#line 392 "getdate.y"
-    { pc->time_zone = (yyvsp[(1) - (1)].intval); }
-    break;
-
-  case 23:
-#line 394 "getdate.y"
-    { pc->time_zone = (yyvsp[(1) - (2)].intval);
-       apply_relative_time (pc, (yyvsp[(2) - (2)].rel), 1); }
-    break;
-
-  case 24:
-#line 397 "getdate.y"
-    { pc->time_zone = (yyvsp[(1) - (3)].intval) + time_zone_hhmm (pc, (yyvsp[(2) - (3)].textintval), (yyvsp[(3) - (3)].intval)); }
-    break;
-
-  case 25:
-#line 399 "getdate.y"
-    { pc->time_zone = (yyvsp[(1) - (1)].intval) + 60; }
-    break;
-
-  case 26:
-#line 401 "getdate.y"
-    { pc->time_zone = (yyvsp[(1) - (2)].intval) + 60; }
-    break;
-
-  case 27:
-#line 406 "getdate.y"
-    {
-       pc->day_ordinal = 1;
-       pc->day_number = (yyvsp[(1) - (1)].intval);
-      }
-    break;
-
-  case 28:
-#line 411 "getdate.y"
-    {
-       pc->day_ordinal = 1;
-       pc->day_number = (yyvsp[(1) - (2)].intval);
-      }
-    break;
-
-  case 29:
-#line 416 "getdate.y"
-    {
-       pc->day_ordinal = (yyvsp[(1) - (2)].intval);
-       pc->day_number = (yyvsp[(2) - (2)].intval);
-      }
-    break;
-
-  case 30:
-#line 421 "getdate.y"
-    {
-       pc->day_ordinal = (yyvsp[(1) - (2)].textintval).value;
-       pc->day_number = (yyvsp[(2) - (2)].intval);
-      }
-    break;
-
-  case 31:
-#line 429 "getdate.y"
-    {
-       pc->month = (yyvsp[(1) - (3)].textintval).value;
-       pc->day = (yyvsp[(3) - (3)].textintval).value;
-      }
-    break;
-
-  case 32:
-#line 434 "getdate.y"
-    {
-       /* Interpret as YYYY/MM/DD if the first value has 4 or more digits,
-          otherwise as MM/DD/YY.
-          The goal in recognizing YYYY/MM/DD is solely to support legacy
-          machine-generated dates like those in an RCS log listing.  If
-          you want portability, use the ISO 8601 format.  */
-       if (4 <= (yyvsp[(1) - (5)].textintval).digits)
-         {
-           pc->year = (yyvsp[(1) - (5)].textintval);
-           pc->month = (yyvsp[(3) - (5)].textintval).value;
-           pc->day = (yyvsp[(5) - (5)].textintval).value;
-         }
-       else
-         {
-           pc->month = (yyvsp[(1) - (5)].textintval).value;
-           pc->day = (yyvsp[(3) - (5)].textintval).value;
-           pc->year = (yyvsp[(5) - (5)].textintval);
-         }
-      }
-    break;
-
-  case 33:
-#line 454 "getdate.y"
-    {
-       /* ISO 8601 format.  YYYY-MM-DD.  */
-       pc->year = (yyvsp[(1) - (3)].textintval);
-       pc->month = -(yyvsp[(2) - (3)].textintval).value;
-       pc->day = -(yyvsp[(3) - (3)].textintval).value;
-      }
-    break;
-
-  case 34:
-#line 461 "getdate.y"
-    {
-       /* e.g. 17-JUN-1992.  */
-       pc->day = (yyvsp[(1) - (3)].textintval).value;
-       pc->month = (yyvsp[(2) - (3)].intval);
-       pc->year.value = -(yyvsp[(3) - (3)].textintval).value;
-       pc->year.digits = (yyvsp[(3) - (3)].textintval).digits;
-      }
-    break;
-
-  case 35:
-#line 469 "getdate.y"
-    {
-       /* e.g. JUN-17-1992.  */
-       pc->month = (yyvsp[(1) - (3)].intval);
-       pc->day = -(yyvsp[(2) - (3)].textintval).value;
-       pc->year.value = -(yyvsp[(3) - (3)].textintval).value;
-       pc->year.digits = (yyvsp[(3) - (3)].textintval).digits;
-      }
-    break;
-
-  case 36:
-#line 477 "getdate.y"
-    {
-       pc->month = (yyvsp[(1) - (2)].intval);
-       pc->day = (yyvsp[(2) - (2)].textintval).value;
-      }
-    break;
-
-  case 37:
-#line 482 "getdate.y"
-    {
-       pc->month = (yyvsp[(1) - (4)].intval);
-       pc->day = (yyvsp[(2) - (4)].textintval).value;
-       pc->year = (yyvsp[(4) - (4)].textintval);
-      }
-    break;
-
-  case 38:
-#line 488 "getdate.y"
-    {
-       pc->day = (yyvsp[(1) - (2)].textintval).value;
-       pc->month = (yyvsp[(2) - (2)].intval);
-      }
-    break;
-
-  case 39:
-#line 493 "getdate.y"
-    {
-       pc->day = (yyvsp[(1) - (3)].textintval).value;
-       pc->month = (yyvsp[(2) - (3)].intval);
-       pc->year = (yyvsp[(3) - (3)].textintval);
-      }
-    break;
-
-  case 40:
-#line 502 "getdate.y"
-    { apply_relative_time (pc, (yyvsp[(1) - (2)].rel), -1); }
-    break;
-
-  case 41:
-#line 504 "getdate.y"
-    { apply_relative_time (pc, (yyvsp[(1) - (1)].rel), 1); }
-    break;
-
-  case 42:
-#line 506 "getdate.y"
-    { apply_relative_time (pc, (yyvsp[(1) - (1)].rel), 1); }
-    break;
-
-  case 43:
-#line 511 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).year = (yyvsp[(1) - (2)].intval); }
-    break;
-
-  case 44:
-#line 513 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).year = (yyvsp[(1) - (2)].textintval).value; }
-    break;
-
-  case 45:
-#line 515 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).year = 1; }
-    break;
-
-  case 46:
-#line 517 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).month = (yyvsp[(1) - (2)].intval); }
-    break;
-
-  case 47:
-#line 519 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).month = (yyvsp[(1) - (2)].textintval).value; }
-    break;
-
-  case 48:
-#line 521 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).month = 1; }
-    break;
-
-  case 49:
-#line 523 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).day = (yyvsp[(1) - (2)].intval) * (yyvsp[(2) - (2)].intval); }
-    break;
-
-  case 50:
-#line 525 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).day = (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); }
-    break;
-
-  case 51:
-#line 527 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).day = (yyvsp[(1) - (1)].intval); }
-    break;
-
-  case 52:
-#line 529 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).hour = (yyvsp[(1) - (2)].intval); }
-    break;
-
-  case 53:
-#line 531 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).hour = (yyvsp[(1) - (2)].textintval).value; }
-    break;
-
-  case 54:
-#line 533 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).hour = 1; }
-    break;
-
-  case 55:
-#line 535 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).minutes = (yyvsp[(1) - (2)].intval); }
-    break;
-
-  case 56:
-#line 537 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).minutes = (yyvsp[(1) - (2)].textintval).value; }
-    break;
-
-  case 57:
-#line 539 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).minutes = 1; }
-    break;
-
-  case 58:
-#line 541 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[(1) - (2)].intval); }
-    break;
-
-  case 59:
-#line 543 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[(1) - (2)].textintval).value; }
-    break;
-
-  case 60:
-#line 545 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[(1) - (2)].timespec).tv_sec; (yyval.rel).ns = (yyvsp[(1) - (2)].timespec).tv_nsec; }
-    break;
-
-  case 61:
-#line 547 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[(1) - (2)].timespec).tv_sec; (yyval.rel).ns = (yyvsp[(1) - (2)].timespec).tv_nsec; }
-    break;
-
-  case 62:
-#line 549 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = 1; }
-    break;
-
-  case 64:
-#line 555 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).year = (yyvsp[(1) - (2)].textintval).value; }
-    break;
-
-  case 65:
-#line 557 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).month = (yyvsp[(1) - (2)].textintval).value; }
-    break;
-
-  case 66:
-#line 559 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).day = (yyvsp[(1) - (2)].textintval).value * (yyvsp[(2) - (2)].intval); }
-    break;
-
-  case 67:
-#line 561 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).hour = (yyvsp[(1) - (2)].textintval).value; }
-    break;
-
-  case 68:
-#line 563 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).minutes = (yyvsp[(1) - (2)].textintval).value; }
-    break;
-
-  case 69:
-#line 565 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[(1) - (2)].textintval).value; }
-    break;
-
-  case 70:
-#line 570 "getdate.y"
-    { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).day = (yyvsp[(1) - (1)].intval); }
-    break;
-
-  case 74:
-#line 578 "getdate.y"
-    { (yyval.timespec).tv_sec = (yyvsp[(1) - (1)].textintval).value; (yyval.timespec).tv_nsec = 0; }
-    break;
-
-  case 76:
-#line 584 "getdate.y"
-    { (yyval.timespec).tv_sec = (yyvsp[(1) - (1)].textintval).value; (yyval.timespec).tv_nsec = 0; }
-    break;
-
-  case 77:
-#line 589 "getdate.y"
-    { digits_to_date_time (pc, (yyvsp[(1) - (1)].textintval)); }
-    break;
-
-  case 78:
-#line 594 "getdate.y"
-    {
-       /* Hybrid all-digit and relative offset, so that we accept e.g.,
-          "YYYYMMDD +N days" as well as "YYYYMMDD N days".  */
-       digits_to_date_time (pc, (yyvsp[(1) - (2)].textintval));
-       apply_relative_time (pc, (yyvsp[(2) - (2)].rel), 1);
-      }
-    break;
-
-  case 79:
-#line 604 "getdate.y"
-    { (yyval.intval) = -1; }
-    break;
-
-  case 80:
-#line 606 "getdate.y"
-    { (yyval.intval) = (yyvsp[(2) - (2)].textintval).value; }
-    break;
-
-  case 81:
-#line 611 "getdate.y"
-    { (yyval.intval) = MER24; }
-    break;
-
-  case 82:
-#line 613 "getdate.y"
-    { (yyval.intval) = (yyvsp[(1) - (1)].intval); }
-    break;
-
-
-/* Line 1267 of yacc.c.  */
-#line 2178 "getdate.c"
-      default: break;
-    }
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-
-  *++yyvsp = yyval;
-
-
-  /* Now `shift' the result of the reduction.  Determine what state
-     that goes to, based on the state we popped back to and the rule
-     number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
-
-  goto yynewstate;
-
-
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
-    {
-      ++yynerrs;
-#if ! YYERROR_VERBOSE
-      yyerror (pc, YY_("syntax error"));
-#else
-      {
-       YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
-       if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
-         {
-           YYSIZE_T yyalloc = 2 * yysize;
-           if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
-             yyalloc = YYSTACK_ALLOC_MAXIMUM;
-           if (yymsg != yymsgbuf)
-             YYSTACK_FREE (yymsg);
-           yymsg = (char *) YYSTACK_ALLOC (yyalloc);
-           if (yymsg)
-             yymsg_alloc = yyalloc;
-           else
-             {
-               yymsg = yymsgbuf;
-               yymsg_alloc = sizeof yymsgbuf;
-             }
-         }
-
-       if (0 < yysize && yysize <= yymsg_alloc)
-         {
-           (void) yysyntax_error (yymsg, yystate, yychar);
-           yyerror (pc, yymsg);
-         }
-       else
-         {
-           yyerror (pc, YY_("syntax error"));
-           if (yysize != 0)
-             goto yyexhaustedlab;
-         }
-      }
-#endif
-    }
-
-
-
-  if (yyerrstatus == 3)
-    {
-      /* If just tried and failed to reuse look-ahead token after an
-        error, discard it.  */
-
-      if (yychar <= YYEOF)
-       {
-         /* Return failure if at end of input.  */
-         if (yychar == YYEOF)
-           YYABORT;
-       }
-      else
-       {
-         yydestruct ("Error: discarding",
-                     yytoken, &yylval, pc);
-         yychar = YYEMPTY;
-       }
-    }
-
-  /* Else will try to reuse look-ahead token after shifting the error
-     token.  */
-  goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR.  |
-`---------------------------------------------------*/
-yyerrorlab:
-
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  if (/*CONSTCOND*/ 0)
-     goto yyerrorlab;
-
-  /* Do not reclaim the symbols of the rule which action triggered
-     this YYERROR.  */
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-  yystate = *yyssp;
-  goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR.  |
-`-------------------------------------------------------------*/
-yyerrlab1:
-  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
-
-  for (;;)
-    {
-      yyn = yypact[yystate];
-      if (yyn != YYPACT_NINF)
-       {
-         yyn += YYTERROR;
-         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-           {
-             yyn = yytable[yyn];
-             if (0 < yyn)
-               break;
-           }
-       }
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (yyssp == yyss)
-       YYABORT;
-
-
-      yydestruct ("Error: popping",
-                 yystos[yystate], yyvsp, pc);
-      YYPOPSTACK (1);
-      yystate = *yyssp;
-      YY_STACK_PRINT (yyss, yyssp);
-    }
-
-  if (yyn == YYFINAL)
-    YYACCEPT;
-
-  *++yyvsp = yylval;
-
-
-  /* Shift the error token.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-#ifndef yyoverflow
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here.  |
-`-------------------------------------------------*/
-yyexhaustedlab:
-  yyerror (pc, YY_("memory exhausted"));
-  yyresult = 2;
-  /* Fall through.  */
-#endif
-
-yyreturn:
-  if (yychar != YYEOF && yychar != YYEMPTY)
-     yydestruct ("Cleanup: discarding lookahead",
-                yytoken, &yylval, pc);
-  /* Do not reclaim the symbols of the rule which action triggered
-     this YYABORT or YYACCEPT.  */
-  YYPOPSTACK (yylen);
-  YY_STACK_PRINT (yyss, yyssp);
-  while (yyssp != yyss)
-    {
-      yydestruct ("Cleanup: popping",
-                 yystos[*yyssp], yyvsp, pc);
-      YYPOPSTACK (1);
-    }
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
-#endif
-#if YYERROR_VERBOSE
-  if (yymsg != yymsgbuf)
-    YYSTACK_FREE (yymsg);
-#endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
-}
-
-
-#line 616 "getdate.y"
-
-
-static table const meridian_table[] =
-{
-  { "AM",   tMERIDIAN, MERam },
-  { "A.M.", tMERIDIAN, MERam },
-  { "PM",   tMERIDIAN, MERpm },
-  { "P.M.", tMERIDIAN, MERpm },
-  { NULL, 0, 0 }
-};
-
-static table const dst_table[] =
-{
-  { "DST", tDST, 0 }
-};
-
-static table const month_and_day_table[] =
-{
-  { "JANUARY", tMONTH,  1 },
-  { "FEBRUARY",        tMONTH,  2 },
-  { "MARCH",   tMONTH,  3 },
-  { "APRIL",   tMONTH,  4 },
-  { "MAY",     tMONTH,  5 },
-  { "JUNE",    tMONTH,  6 },
-  { "JULY",    tMONTH,  7 },
-  { "AUGUST",  tMONTH,  8 },
-  { "SEPTEMBER",tMONTH,         9 },
-  { "SEPT",    tMONTH,  9 },
-  { "OCTOBER", tMONTH, 10 },
-  { "NOVEMBER",        tMONTH, 11 },
-  { "DECEMBER",        tMONTH, 12 },
-  { "SUNDAY",  tDAY,    0 },
-  { "MONDAY",  tDAY,    1 },
-  { "TUESDAY", tDAY,    2 },
-  { "TUES",    tDAY,    2 },
-  { "WEDNESDAY",tDAY,   3 },
-  { "WEDNES",  tDAY,    3 },
-  { "THURSDAY",        tDAY,    4 },
-  { "THUR",    tDAY,    4 },
-  { "THURS",   tDAY,    4 },
-  { "FRIDAY",  tDAY,    5 },
-  { "SATURDAY",        tDAY,    6 },
-  { NULL, 0, 0 }
-};
-
-static table const time_units_table[] =
-{
-  { "YEAR",    tYEAR_UNIT,      1 },
-  { "MONTH",   tMONTH_UNIT,     1 },
-  { "FORTNIGHT",tDAY_UNIT,     14 },
-  { "WEEK",    tDAY_UNIT,       7 },
-  { "DAY",     tDAY_UNIT,       1 },
-  { "HOUR",    tHOUR_UNIT,      1 },
-  { "MINUTE",  tMINUTE_UNIT,    1 },
-  { "MIN",     tMINUTE_UNIT,    1 },
-  { "SECOND",  tSEC_UNIT,       1 },
-  { "SEC",     tSEC_UNIT,       1 },
-  { NULL, 0, 0 }
-};
-
-/* Assorted relative-time words. */
-static table const relative_time_table[] =
-{
-  { "TOMORROW",        tDAY_SHIFT,      1 },
-  { "YESTERDAY",tDAY_SHIFT,    -1 },
-  { "TODAY",   tDAY_SHIFT,      0 },
-  { "NOW",     tDAY_SHIFT,      0 },
-  { "LAST",    tORDINAL,       -1 },
-  { "THIS",    tORDINAL,        0 },
-  { "NEXT",    tORDINAL,        1 },
-  { "FIRST",   tORDINAL,        1 },
-/*{ "SECOND",  tORDINAL,        2 }, */
-  { "THIRD",   tORDINAL,        3 },
-  { "FOURTH",  tORDINAL,        4 },
-  { "FIFTH",   tORDINAL,        5 },
-  { "SIXTH",   tORDINAL,        6 },
-  { "SEVENTH", tORDINAL,        7 },
-  { "EIGHTH",  tORDINAL,        8 },
-  { "NINTH",   tORDINAL,        9 },
-  { "TENTH",   tORDINAL,       10 },
-  { "ELEVENTH",        tORDINAL,       11 },
-  { "TWELFTH", tORDINAL,       12 },
-  { "AGO",     tAGO,            1 },
-  { NULL, 0, 0 }
-};
-
-/* The universal time zone table.  These labels can be used even for
-   time stamps that would not otherwise be valid, e.g., GMT time
-   stamps in London during summer.  */
-static table const universal_time_zone_table[] =
-{
-  { "GMT",     tZONE,     HOUR ( 0) }, /* Greenwich Mean */
-  { "UT",      tZONE,     HOUR ( 0) }, /* Universal (Coordinated) */
-  { "UTC",     tZONE,     HOUR ( 0) },
-  { NULL, 0, 0 }
-};
-
-/* The time zone table.  This table is necessarily incomplete, as time
-   zone abbreviations are ambiguous; e.g. Australians interpret "EST"
-   as Eastern time in Australia, not as US Eastern Standard Time.
-   You cannot rely on getdate to handle arbitrary time zone
-   abbreviations; use numeric abbreviations like `-0500' instead.  */
-static table const time_zone_table[] =
-{
-  { "WET",     tZONE,     HOUR ( 0) }, /* Western European */
-  { "WEST",    tDAYZONE,  HOUR ( 0) }, /* Western European Summer */
-  { "BST",     tDAYZONE,  HOUR ( 0) }, /* British Summer */
-  { "ART",     tZONE,    -HOUR ( 3) }, /* Argentina */
-  { "BRT",     tZONE,    -HOUR ( 3) }, /* Brazil */
-  { "BRST",    tDAYZONE, -HOUR ( 3) }, /* Brazil Summer */
-  { "NST",     tZONE,   -(HOUR ( 3) + 30) },   /* Newfoundland Standard */
-  { "NDT",     tDAYZONE,-(HOUR ( 3) + 30) },   /* Newfoundland Daylight */
-  { "AST",     tZONE,    -HOUR ( 4) }, /* Atlantic Standard */
-  { "ADT",     tDAYZONE, -HOUR ( 4) }, /* Atlantic Daylight */
-  { "CLT",     tZONE,    -HOUR ( 4) }, /* Chile */
-  { "CLST",    tDAYZONE, -HOUR ( 4) }, /* Chile Summer */
-  { "EST",     tZONE,    -HOUR ( 5) }, /* Eastern Standard */
-  { "EDT",     tDAYZONE, -HOUR ( 5) }, /* Eastern Daylight */
-  { "CST",     tZONE,    -HOUR ( 6) }, /* Central Standard */
-  { "CDT",     tDAYZONE, -HOUR ( 6) }, /* Central Daylight */
-  { "MST",     tZONE,    -HOUR ( 7) }, /* Mountain Standard */
-  { "MDT",     tDAYZONE, -HOUR ( 7) }, /* Mountain Daylight */
-  { "PST",     tZONE,    -HOUR ( 8) }, /* Pacific Standard */
-  { "PDT",     tDAYZONE, -HOUR ( 8) }, /* Pacific Daylight */
-  { "AKST",    tZONE,    -HOUR ( 9) }, /* Alaska Standard */
-  { "AKDT",    tDAYZONE, -HOUR ( 9) }, /* Alaska Daylight */
-  { "HST",     tZONE,    -HOUR (10) }, /* Hawaii Standard */
-  { "HAST",    tZONE,    -HOUR (10) }, /* Hawaii-Aleutian Standard */
-  { "HADT",    tDAYZONE, -HOUR (10) }, /* Hawaii-Aleutian Daylight */
-  { "SST",     tZONE,    -HOUR (12) }, /* Samoa Standard */
-  { "WAT",     tZONE,     HOUR ( 1) }, /* West Africa */
-  { "CET",     tZONE,     HOUR ( 1) }, /* Central European */
-  { "CEST",    tDAYZONE,  HOUR ( 1) }, /* Central European Summer */
-  { "MET",     tZONE,     HOUR ( 1) }, /* Middle European */
-  { "MEZ",     tZONE,     HOUR ( 1) }, /* Middle European */
-  { "MEST",    tDAYZONE,  HOUR ( 1) }, /* Middle European Summer */
-  { "MESZ",    tDAYZONE,  HOUR ( 1) }, /* Middle European Summer */
-  { "EET",     tZONE,     HOUR ( 2) }, /* Eastern European */
-  { "EEST",    tDAYZONE,  HOUR ( 2) }, /* Eastern European Summer */
-  { "CAT",     tZONE,     HOUR ( 2) }, /* Central Africa */
-  { "SAST",    tZONE,     HOUR ( 2) }, /* South Africa Standard */
-  { "EAT",     tZONE,     HOUR ( 3) }, /* East Africa */
-  { "MSK",     tZONE,     HOUR ( 3) }, /* Moscow */
-  { "MSD",     tDAYZONE,  HOUR ( 3) }, /* Moscow Daylight */
-  { "IST",     tZONE,    (HOUR ( 5) + 30) },   /* India Standard */
-  { "SGT",     tZONE,     HOUR ( 8) }, /* Singapore */
-  { "KST",     tZONE,     HOUR ( 9) }, /* Korea Standard */
-  { "JST",     tZONE,     HOUR ( 9) }, /* Japan Standard */
-  { "GST",     tZONE,     HOUR (10) }, /* Guam Standard */
-  { "NZST",    tZONE,     HOUR (12) }, /* New Zealand Standard */
-  { "NZDT",    tDAYZONE,  HOUR (12) }, /* New Zealand Daylight */
-  { NULL, 0, 0 }
-};
-
-/* Military time zone table. */
-static table const military_table[] =
-{
-  { "A", tZONE,        -HOUR ( 1) },
-  { "B", tZONE,        -HOUR ( 2) },
-  { "C", tZONE,        -HOUR ( 3) },
-  { "D", tZONE,        -HOUR ( 4) },
-  { "E", tZONE,        -HOUR ( 5) },
-  { "F", tZONE,        -HOUR ( 6) },
-  { "G", tZONE,        -HOUR ( 7) },
-  { "H", tZONE,        -HOUR ( 8) },
-  { "I", tZONE,        -HOUR ( 9) },
-  { "K", tZONE,        -HOUR (10) },
-  { "L", tZONE,        -HOUR (11) },
-  { "M", tZONE,        -HOUR (12) },
-  { "N", tZONE,         HOUR ( 1) },
-  { "O", tZONE,         HOUR ( 2) },
-  { "P", tZONE,         HOUR ( 3) },
-  { "Q", tZONE,         HOUR ( 4) },
-  { "R", tZONE,         HOUR ( 5) },
-  { "S", tZONE,         HOUR ( 6) },
-  { "T", tZONE,         HOUR ( 7) },
-  { "U", tZONE,         HOUR ( 8) },
-  { "V", tZONE,         HOUR ( 9) },
-  { "W", tZONE,         HOUR (10) },
-  { "X", tZONE,         HOUR (11) },
-  { "Y", tZONE,         HOUR (12) },
-  { "Z", tZONE,         HOUR ( 0) },
-  { NULL, 0, 0 }
-};
-
-\f
-
-/* Convert a time zone expressed as HH:MM into an integer count of
-   minutes.  If MM is negative, then S is of the form HHMM and needs
-   to be picked apart; otherwise, S is of the form HH.  As specified in
-   http://www.opengroup.org/susv3xbd/xbd_chap08.html#tag_08_03, allow
-   only valid TZ range, and consider first two digits as hours, if no
-   minutes specified.  */
-
-static long int
-time_zone_hhmm (parser_control *pc, textint s, long int mm)
-{
-  long int n_minutes;
-
-  /* If the length of S is 1 or 2 and no minutes are specified,
-     interpret it as a number of hours.  */
-  if (s.digits <= 2 && mm < 0)
-    s.value *= 100;
-
-  if (mm < 0)
-    n_minutes = (s.value / 100) * 60 + s.value % 100;
-  else
-    n_minutes = s.value * 60 + (s.negative ? -mm : mm);
-
-  /* If the absolute number of minutes is larger than 24 hours,
-     arrange to reject it by incrementing pc->zones_seen.  Thus,
-     we allow only values in the range UTC-24:00 to UTC+24:00.  */
-  if (24 * 60 < abs (n_minutes))
-    pc->zones_seen++;
-
-  return n_minutes;
-}
-
-static int
-to_hour (long int hours, int meridian)
-{
-  switch (meridian)
-    {
-    default: /* Pacify GCC.  */
-    case MER24:
-      return 0 <= hours && hours < 24 ? hours : -1;
-    case MERam:
-      return 0 < hours && hours < 12 ? hours : hours == 12 ? 0 : -1;
-    case MERpm:
-      return 0 < hours && hours < 12 ? hours + 12 : hours == 12 ? 12 : -1;
-    }
-}
-
-static long int
-to_year (textint textyear)
-{
-  long int year = textyear.value;
-
-  if (year < 0)
-    year = -year;
-
-  /* XPG4 suggests that years 00-68 map to 2000-2068, and
-     years 69-99 map to 1969-1999.  */
-  else if (textyear.digits == 2)
-    year += year < 69 ? 2000 : 1900;
-
-  return year;
-}
-
-static table const *
-lookup_zone (parser_control const *pc, char const *name)
-{
-  table const *tp;
-
-  for (tp = universal_time_zone_table; tp->name; tp++)
-    if (strcmp (name, tp->name) == 0)
-      return tp;
-
-  /* Try local zone abbreviations before those in time_zone_table, as
-     the local ones are more likely to be right.  */
-  for (tp = pc->local_time_zone_table; tp->name; tp++)
-    if (strcmp (name, tp->name) == 0)
-      return tp;
-
-  for (tp = time_zone_table; tp->name; tp++)
-    if (strcmp (name, tp->name) == 0)
-      return tp;
-
-  return NULL;
-}
-
-#if ! HAVE_TM_GMTOFF
-/* Yield the difference between *A and *B,
-   measured in seconds, ignoring leap seconds.
-   The body of this function is taken directly from the GNU C Library;
-   see src/strftime.c.  */
-static long int
-tm_diff (struct tm const *a, struct tm const *b)
-{
-  /* Compute intervening leap days correctly even if year is negative.
-     Take care to avoid int overflow in leap day calculations.  */
-  int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3);
-  int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3);
-  int a100 = a4 / 25 - (a4 % 25 < 0);
-  int b100 = b4 / 25 - (b4 % 25 < 0);
-  int a400 = SHR (a100, 2);
-  int b400 = SHR (b100, 2);
-  int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400);
-  long int ayear = a->tm_year;
-  long int years = ayear - b->tm_year;
-  long int days = (365 * years + intervening_leap_days
-                  + (a->tm_yday - b->tm_yday));
-  return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour))
-               + (a->tm_min - b->tm_min))
-         + (a->tm_sec - b->tm_sec));
-}
-#endif /* ! HAVE_TM_GMTOFF */
-
-static table const *
-lookup_word (parser_control const *pc, char *word)
-{
-  char *p;
-  char *q;
-  size_t wordlen;
-  table const *tp;
-  bool period_found;
-  bool abbrev;
-
-  /* Make it uppercase.  */
-  for (p = word; *p; p++)
-    {
-      unsigned char ch = *p;
-      *p = c_toupper (ch);
-    }
-
-  for (tp = meridian_table; tp->name; tp++)
-    if (strcmp (word, tp->name) == 0)
-      return tp;
-
-  /* See if we have an abbreviation for a month. */
-  wordlen = strlen (word);
-  abbrev = wordlen == 3 || (wordlen == 4 && word[3] == '.');
-
-  for (tp = month_and_day_table; tp->name; tp++)
-    if ((abbrev ? strncmp (word, tp->name, 3) : strcmp (word, tp->name)) == 0)
-      return tp;
-
-  if ((tp = lookup_zone (pc, word)))
-    return tp;
-
-  if (strcmp (word, dst_table[0].name) == 0)
-    return dst_table;
-
-  for (tp = time_units_table; tp->name; tp++)
-    if (strcmp (word, tp->name) == 0)
-      return tp;
-
-  /* Strip off any plural and try the units table again. */
-  if (word[wordlen - 1] == 'S')
-    {
-      word[wordlen - 1] = '\0';
-      for (tp = time_units_table; tp->name; tp++)
-       if (strcmp (word, tp->name) == 0)
-         return tp;
-      word[wordlen - 1] = 'S'; /* For "this" in relative_time_table.  */
-    }
-
-  for (tp = relative_time_table; tp->name; tp++)
-    if (strcmp (word, tp->name) == 0)
-      return tp;
-
-  /* Military time zones. */
-  if (wordlen == 1)
-    for (tp = military_table; tp->name; tp++)
-      if (word[0] == tp->name[0])
-       return tp;
-
-  /* Drop out any periods and try the time zone table again. */
-  for (period_found = false, p = q = word; (*p = *q); q++)
-    if (*q == '.')
-      period_found = true;
-    else
-      p++;
-  if (period_found && (tp = lookup_zone (pc, word)))
-    return tp;
-
-  return NULL;
-}
-
-static int
-yylex (YYSTYPE *lvalp, parser_control *pc)
-{
-  unsigned char c;
-  size_t count;
-
-  for (;;)
-    {
-      while (c = *pc->input, c_isspace (c))
-       pc->input++;
-
-      if (ISDIGIT (c) || c == '-' || c == '+')
-       {
-         char const *p;
-         int sign;
-         unsigned long int value;
-         if (c == '-' || c == '+')
-           {
-             sign = c == '-' ? -1 : 1;
-             while (c = *++pc->input, c_isspace (c))
-               continue;
-             if (! ISDIGIT (c))
-               /* skip the '-' sign */
-               continue;
-           }
-         else
-           sign = 0;
-         p = pc->input;
-         for (value = 0; ; value *= 10)
-           {
-             unsigned long int value1 = value + (c - '0');
-             if (value1 < value)
-               return '?';
-             value = value1;
-             c = *++p;
-             if (! ISDIGIT (c))
-               break;
-             if (ULONG_MAX / 10 < value)
-               return '?';
-           }
-         if ((c == '.' || c == ',') && ISDIGIT (p[1]))
-           {
-             time_t s;
-             int ns;
-             int digits;
-             unsigned long int value1;
-
-             /* Check for overflow when converting value to time_t.  */
-             if (sign < 0)
-               {
-                 s = - value;
-                 if (0 < s)
-                   return '?';
-                 value1 = -s;
-               }
-             else
-               {
-                 s = value;
-                 if (s < 0)
-                   return '?';
-                 value1 = s;
-               }
-             if (value != value1)
-               return '?';
-
-             /* Accumulate fraction, to ns precision.  */
-             p++;
-             ns = *p++ - '0';
-             for (digits = 2; digits <= LOG10_BILLION; digits++)
-               {
-                 ns *= 10;
-                 if (ISDIGIT (*p))
-                   ns += *p++ - '0';
-               }
-
-             /* Skip excess digits, truncating toward -Infinity.  */
-             if (sign < 0)
-               for (; ISDIGIT (*p); p++)
-                 if (*p != '0')
-                   {
-                     ns++;
-                     break;
-                   }
-             while (ISDIGIT (*p))
-               p++;
-
-             /* Adjust to the timespec convention, which is that
-                tv_nsec is always a positive offset even if tv_sec is
-                negative.  */
-             if (sign < 0 && ns)
-               {
-                 s--;
-                 if (! (s < 0))
-                   return '?';
-                 ns = BILLION - ns;
-               }
-
-             lvalp->timespec.tv_sec = s;
-             lvalp->timespec.tv_nsec = ns;
-             pc->input = p;
-             return sign ? tSDECIMAL_NUMBER : tUDECIMAL_NUMBER;
-           }
-         else
-           {
-             lvalp->textintval.negative = sign < 0;
-             if (sign < 0)
-               {
-                 lvalp->textintval.value = - value;
-                 if (0 < lvalp->textintval.value)
-                   return '?';
-               }
-             else
-               {
-                 lvalp->textintval.value = value;
-                 if (lvalp->textintval.value < 0)
-                   return '?';
-               }
-             lvalp->textintval.digits = p - pc->input;
-             pc->input = p;
-             return sign ? tSNUMBER : tUNUMBER;
-           }
-       }
-
-      if (c_isalpha (c))
-       {
-         char buff[20];
-         char *p = buff;
-         table const *tp;
-
-         do
-           {
-             if (p < buff + sizeof buff - 1)
-               *p++ = c;
-             c = *++pc->input;
-           }
-         while (c_isalpha (c) || c == '.');
-
-         *p = '\0';
-         tp = lookup_word (pc, buff);
-         if (! tp)
-           return '?';
-         lvalp->intval = tp->value;
-         return tp->type;
-       }
-
-      if (c != '(')
-       return *pc->input++;
-      count = 0;
-      do
-       {
-         c = *pc->input++;
-         if (c == '\0')
-           return c;
-         if (c == '(')
-           count++;
-         else if (c == ')')
-           count--;
-       }
-      while (count != 0);
-    }
-}
-
-/* Do nothing if the parser reports an error.  */
-static int
-yyerror (parser_control const *pc ATTRIBUTE_UNUSED,
-        char const *s ATTRIBUTE_UNUSED)
-{
-  return 0;
-}
-
-/* If *TM0 is the old and *TM1 is the new value of a struct tm after
-   passing it to mktime, return true if it's OK that mktime returned T.
-   It's not OK if *TM0 has out-of-range members.  */
-
-static bool
-mktime_ok (struct tm const *tm0, struct tm const *tm1, time_t t)
-{
-  if (t == (time_t) -1)
-    {
-      /* Guard against falsely reporting an error when parsing a time
-        stamp that happens to equal (time_t) -1, on a host that
-        supports such a time stamp.  */
-      tm1 = localtime (&t);
-      if (!tm1)
-       return false;
-    }
-
-  return ! ((tm0->tm_sec ^ tm1->tm_sec)
-           | (tm0->tm_min ^ tm1->tm_min)
-           | (tm0->tm_hour ^ tm1->tm_hour)
-           | (tm0->tm_mday ^ tm1->tm_mday)
-           | (tm0->tm_mon ^ tm1->tm_mon)
-           | (tm0->tm_year ^ tm1->tm_year));
-}
-
-/* A reasonable upper bound for the size of ordinary TZ strings.
-   Use heap allocation if TZ's length exceeds this.  */
-enum { TZBUFSIZE = 100 };
-
-/* Return a copy of TZ, stored in TZBUF if it fits, and heap-allocated
-   otherwise.  */
-static char *
-get_tz (char tzbuf[TZBUFSIZE])
-{
-  char *tz = getenv ("TZ");
-  if (tz)
-    {
-      size_t tzsize = strlen (tz) + 1;
-      tz = (tzsize <= TZBUFSIZE
-           ? memcpy (tzbuf, tz, tzsize)
-           : xmemdup (tz, tzsize));
-    }
-  return tz;
-}
-
-/* Parse a date/time string, storing the resulting time value into *RESULT.
-   The string itself is pointed to by P.  Return true if successful.
-   P can be an incomplete or relative time specification; if so, use
-   *NOW as the basis for the returned time.  */
-bool
-get_date (struct timespec *result, char const *p, struct timespec const *now)
-{
-  time_t Start;
-  long int Start_ns;
-  struct tm const *tmp;
-  struct tm tm;
-  struct tm tm0;
-  parser_control pc;
-  struct timespec gettime_buffer;
-  unsigned char c;
-  bool tz_was_altered = false;
-  char *tz0 = NULL;
-  char tz0buf[TZBUFSIZE];
-  bool ok = true;
-
-  if (! now)
-    {
-      gettime (&gettime_buffer);
-      now = &gettime_buffer;
-    }
-
-  Start = now->tv_sec;
-  Start_ns = now->tv_nsec;
-
-  tmp = localtime (&now->tv_sec);
-  if (! tmp)
-    return false;
-
-  while (c = *p, c_isspace (c))
-    p++;
-
-  if (strncmp (p, "TZ=\"", 4) == 0)
-    {
-      char const *tzbase = p + 4;
-      size_t tzsize = 1;
-      char const *s;
-
-      for (s = tzbase; *s; s++, tzsize++)
-       if (*s == '\\')
-         {
-           s++;
-           if (! (*s == '\\' || *s == '"'))
-             break;
-         }
-       else if (*s == '"')
-         {
-           char *z;
-           char *tz1;
-           char tz1buf[TZBUFSIZE];
-           bool large_tz = TZBUFSIZE < tzsize;
-           bool setenv_ok;
-           tz0 = get_tz (tz0buf);
-           z = tz1 = large_tz ? xmalloc (tzsize) : tz1buf;
-           for (s = tzbase; *s != '"'; s++)
-             *z++ = *(s += *s == '\\');
-           *z = '\0';
-           setenv_ok = setenv ("TZ", tz1, 1) == 0;
-           if (large_tz)
-             free (tz1);
-           if (!setenv_ok)
-             goto fail;
-           tz_was_altered = true;
-           p = s + 1;
-         }
-    }
-
-  /* As documented, be careful to treat the empty string just like
-     a date string of "0".  Without this, an empty string would be
-     declared invalid when parsed during a DST transition.  */
-  if (*p == '\0')
-    p = "0";
-
-  pc.input = p;
-  pc.year.value = tmp->tm_year;
-  pc.year.value += TM_YEAR_BASE;
-  pc.year.digits = 0;
-  pc.month = tmp->tm_mon + 1;
-  pc.day = tmp->tm_mday;
-  pc.hour = tmp->tm_hour;
-  pc.minutes = tmp->tm_min;
-  pc.seconds.tv_sec = tmp->tm_sec;
-  pc.seconds.tv_nsec = Start_ns;
-  tm.tm_isdst = tmp->tm_isdst;
-
-  pc.meridian = MER24;
-  pc.rel = RELATIVE_TIME_0;
-  pc.timespec_seen = false;
-  pc.rels_seen = false;
-  pc.dates_seen = 0;
-  pc.days_seen = 0;
-  pc.times_seen = 0;
-  pc.local_zones_seen = 0;
-  pc.dsts_seen = 0;
-  pc.zones_seen = 0;
-
-#if HAVE_STRUCT_TM_TM_ZONE
-  pc.local_time_zone_table[0].name = tmp->tm_zone;
-  pc.local_time_zone_table[0].type = tLOCAL_ZONE;
-  pc.local_time_zone_table[0].value = tmp->tm_isdst;
-  pc.local_time_zone_table[1].name = NULL;
-
-  /* Probe the names used in the next three calendar quarters, looking
-     for a tm_isdst different from the one we already have.  */
-  {
-    int quarter;
-    for (quarter = 1; quarter <= 3; quarter++)
-      {
-       time_t probe = Start + quarter * (90 * 24 * 60 * 60);
-       struct tm const *probe_tm = localtime (&probe);
-       if (probe_tm && probe_tm->tm_zone
-           && probe_tm->tm_isdst != pc.local_time_zone_table[0].value)
-         {
-             {
-               pc.local_time_zone_table[1].name = probe_tm->tm_zone;
-               pc.local_time_zone_table[1].type = tLOCAL_ZONE;
-               pc.local_time_zone_table[1].value = probe_tm->tm_isdst;
-               pc.local_time_zone_table[2].name = NULL;
-             }
-           break;
-         }
-      }
-  }
-#else
-#if HAVE_TZNAME
-  {
-# if !HAVE_DECL_TZNAME
-    extern char *tzname[];
-# endif
-    int i;
-    for (i = 0; i < 2; i++)
-      {
-       pc.local_time_zone_table[i].name = tzname[i];
-       pc.local_time_zone_table[i].type = tLOCAL_ZONE;
-       pc.local_time_zone_table[i].value = i;
-      }
-    pc.local_time_zone_table[i].name = NULL;
-  }
-#else
-  pc.local_time_zone_table[0].name = NULL;
-#endif
-#endif
-
-  if (pc.local_time_zone_table[0].name && pc.local_time_zone_table[1].name
-      && ! strcmp (pc.local_time_zone_table[0].name,
-                  pc.local_time_zone_table[1].name))
-    {
-      /* This locale uses the same abbrevation for standard and
-        daylight times.  So if we see that abbreviation, we don't
-        know whether it's daylight time.  */
-      pc.local_time_zone_table[0].value = -1;
-      pc.local_time_zone_table[1].name = NULL;
-    }
-
-  if (yyparse (&pc) != 0)
-    goto fail;
-
-  if (pc.timespec_seen)
-    *result = pc.seconds;
-  else
-    {
-      if (1 < (pc.times_seen | pc.dates_seen | pc.days_seen | pc.dsts_seen
-              | (pc.local_zones_seen + pc.zones_seen)))
-       goto fail;
-
-      tm.tm_year = to_year (pc.year) - TM_YEAR_BASE;
-      tm.tm_mon = pc.month - 1;
-      tm.tm_mday = pc.day;
-      if (pc.times_seen || (pc.rels_seen && ! pc.dates_seen && ! pc.days_seen))
-       {
-         tm.tm_hour = to_hour (pc.hour, pc.meridian);
-         if (tm.tm_hour < 0)
-           goto fail;
-         tm.tm_min = pc.minutes;
-         tm.tm_sec = pc.seconds.tv_sec;
-       }
-      else
-       {
-         tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
-         pc.seconds.tv_nsec = 0;
-       }
-
-      /* Let mktime deduce tm_isdst if we have an absolute time stamp.  */
-      if (pc.dates_seen | pc.days_seen | pc.times_seen)
-       tm.tm_isdst = -1;
-
-      /* But if the input explicitly specifies local time with or without
-        DST, give mktime that information.  */
-      if (pc.local_zones_seen)
-       tm.tm_isdst = pc.local_isdst;
-
-      tm0 = tm;
-
-      Start = mktime (&tm);
-
-      if (! mktime_ok (&tm0, &tm, Start))
-       {
-         if (! pc.zones_seen)
-           goto fail;
-         else
-           {
-             /* Guard against falsely reporting errors near the time_t
-                boundaries when parsing times in other time zones.  For
-                example, suppose the input string "1969-12-31 23:00:00 -0100",
-                the current time zone is 8 hours ahead of UTC, and the min
-                time_t value is 1970-01-01 00:00:00 UTC.  Then the min
-                localtime value is 1970-01-01 08:00:00, and mktime will
-                therefore fail on 1969-12-31 23:00:00.  To work around the
-                problem, set the time zone to 1 hour behind UTC temporarily
-                by setting TZ="XXX1:00" and try mktime again.  */
-
-             long int time_zone = pc.time_zone;
-             long int abs_time_zone = time_zone < 0 ? - time_zone : time_zone;
-             long int abs_time_zone_hour = abs_time_zone / 60;
-             int abs_time_zone_min = abs_time_zone % 60;
-             char tz1buf[sizeof "XXX+0:00"
-                         + sizeof pc.time_zone * CHAR_BIT / 3];
-             if (!tz_was_altered)
-               tz0 = get_tz (tz0buf);
-             sprintf (tz1buf, "XXX%s%ld:%02d", "-" + (time_zone < 0),
-                      abs_time_zone_hour, abs_time_zone_min);
-             if (setenv ("TZ", tz1buf, 1) != 0)
-               goto fail;
-             tz_was_altered = true;
-             tm = tm0;
-             Start = mktime (&tm);
-             if (! mktime_ok (&tm0, &tm, Start))
-               goto fail;
-           }
-       }
-
-      if (pc.days_seen && ! pc.dates_seen)
-       {
-         tm.tm_mday += ((pc.day_number - tm.tm_wday + 7) % 7
-                        + 7 * (pc.day_ordinal - (0 < pc.day_ordinal)));
-         tm.tm_isdst = -1;
-         Start = mktime (&tm);
-         if (Start == (time_t) -1)
-           goto fail;
-       }
-
-      /* Add relative date.  */
-      if (pc.rel.year | pc.rel.month | pc.rel.day)
-       {
-         int year = tm.tm_year + pc.rel.year;
-         int month = tm.tm_mon + pc.rel.month;
-         int day = tm.tm_mday + pc.rel.day;
-         if (((year < tm.tm_year) ^ (pc.rel.year < 0))
-             | ((month < tm.tm_mon) ^ (pc.rel.month < 0))
-             | ((day < tm.tm_mday) ^ (pc.rel.day < 0)))
-           goto fail;
-         tm.tm_year = year;
-         tm.tm_mon = month;
-         tm.tm_mday = day;
-         tm.tm_hour = tm0.tm_hour;
-         tm.tm_min = tm0.tm_min;
-         tm.tm_sec = tm0.tm_sec;
-         tm.tm_isdst = tm0.tm_isdst;
-         Start = mktime (&tm);
-         if (Start == (time_t) -1)
-           goto fail;
-       }
-
-      /* The only "output" of this if-block is an updated Start value,
-        so this block must follow others that clobber Start.  */
-      if (pc.zones_seen)
-       {
-         long int delta = pc.time_zone * 60;
-         time_t t1;
-#ifdef HAVE_TM_GMTOFF
-         delta -= tm.tm_gmtoff;
-#else
-         time_t t = Start;
-         struct tm const *gmt = gmtime (&t);
-         if (! gmt)
-           goto fail;
-         delta -= tm_diff (&tm, gmt);
-#endif
-         t1 = Start - delta;
-         if ((Start < t1) != (delta < 0))
-           goto fail;  /* time_t overflow */
-         Start = t1;
-       }
-
-      /* Add relative hours, minutes, and seconds.  On hosts that support
-        leap seconds, ignore the possibility of leap seconds; e.g.,
-        "+ 10 minutes" adds 600 seconds, even if one of them is a
-        leap second.  Typically this is not what the user wants, but it's
-        too hard to do it the other way, because the time zone indicator
-        must be applied before relative times, and if mktime is applied
-        again the time zone will be lost.  */
-      {
-       long int sum_ns = pc.seconds.tv_nsec + pc.rel.ns;
-       long int normalized_ns = (sum_ns % BILLION + BILLION) % BILLION;
-       time_t t0 = Start;
-       long int d1 = 60 * 60 * pc.rel.hour;
-       time_t t1 = t0 + d1;
-       long int d2 = 60 * pc.rel.minutes;
-       time_t t2 = t1 + d2;
-       long int d3 = pc.rel.seconds;
-       time_t t3 = t2 + d3;
-       long int d4 = (sum_ns - normalized_ns) / BILLION;
-       time_t t4 = t3 + d4;
-
-       if ((d1 / (60 * 60) ^ pc.rel.hour)
-           | (d2 / 60 ^ pc.rel.minutes)
-           | ((t1 < t0) ^ (d1 < 0))
-           | ((t2 < t1) ^ (d2 < 0))
-           | ((t3 < t2) ^ (d3 < 0))
-           | ((t4 < t3) ^ (d4 < 0)))
-         goto fail;
-
-       result->tv_sec = t4;
-       result->tv_nsec = normalized_ns;
-      }
-    }
-
-  goto done;
-
- fail:
-  ok = false;
- done:
-  if (tz_was_altered)
-    ok &= (tz0 ? setenv ("TZ", tz0, 1) : unsetenv ("TZ")) == 0;
-  if (tz0 != tz0buf)
-    free (tz0);
-  return ok;
-}
-
-#if TEST
-
-int
-main (int ac, char **av)
-{
-  char buff[BUFSIZ];
-
-  printf ("Enter date, or blank line to exit.\n\t> ");
-  fflush (stdout);
-
-  buff[BUFSIZ - 1] = '\0';
-  while (fgets (buff, BUFSIZ - 1, stdin) && buff[0])
-    {
-      struct timespec d;
-      struct tm const *tm;
-      if (! get_date (&d, buff, NULL))
-       printf ("Bad format - couldn't convert.\n");
-      else if (! (tm = localtime (&d.tv_sec)))
-       {
-         long int sec = d.tv_sec;
-         printf ("localtime (%ld) failed\n", sec);
-       }
-      else
-       {
-         int ns = d.tv_nsec;
-         printf ("%04ld-%02d-%02d %02d:%02d:%02d.%09d\n",
-                 tm->tm_year + 1900L, tm->tm_mon + 1, tm->tm_mday,
-                 tm->tm_hour, tm->tm_min, tm->tm_sec, ns);
-       }
-      printf ("\t> ");
-      fflush (stdout);
-    }
-  return 0;
-}
-#endif /* TEST */
-
diff --git a/lib/getdate.h b/lib/getdate.h
deleted file mode 100644 (file)
index 73b6188..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Parse a string into an internal time stamp.
-
-   Copyright (C) 1995, 1997, 1998, 2003, 2004, 2007 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 <stdbool.h>
-#include <time.h>
-
-bool get_date (struct timespec *, char const *, struct timespec const *);
diff --git a/lib/getdate.y b/lib/getdate.y
deleted file mode 100644 (file)
index 877b264..0000000
+++ /dev/null
@@ -1,1567 +0,0 @@
-%{
-/* Parse a string into an internal time stamp.
-
-   Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-   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/>.  */
-
-/* Originally written by Steven M. Bellovin <smb@research.att.com> while
-   at the University of North Carolina at Chapel Hill.  Later tweaked by
-   a couple of people on Usenet.  Completely overhauled by Rich $alz
-   <rsalz@bbn.com> and Jim Berets <jberets@bbn.com> in August, 1990.
-
-   Modified by Paul Eggert <eggert@twinsun.com> in August 1999 to do
-   the right thing about local DST.  Also modified by Paul Eggert
-   <eggert@cs.ucla.edu> in February 2004 to support
-   nanosecond-resolution time stamps, and in October 2004 to support
-   TZ strings in dates.  */
-
-/* FIXME: Check for arithmetic overflow in all cases, not just
-   some of them.  */
-
-#include <config.h>
-
-#include "getdate.h"
-
-#include "intprops.h"
-#include "timespec.h"
-#include "verify.h"
-
-/* There's no need to extend the stack, so there's no need to involve
-   alloca.  */
-#define YYSTACK_USE_ALLOCA 0
-
-/* Tell Bison how much stack space is needed.  20 should be plenty for
-   this grammar, which is not right recursive.  Beware setting it too
-   high, since that might cause problems on machines whose
-   implementations have lame stack-overflow checking.  */
-#define YYMAXDEPTH 20
-#define YYINITDEPTH YYMAXDEPTH
-
-/* Since the code of getdate.y is not included in the Emacs executable
-   itself, there is no need to #define static in this file.  Even if
-   the code were included in the Emacs executable, it probably
-   wouldn't do any harm to #undef it here; this will only cause
-   problems if we try to write to a static variable, which I don't
-   think this code needs to do.  */
-#ifdef emacs
-# undef static
-#endif
-
-#include <c-ctype.h>
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "xalloc.h"
-
-
-/* ISDIGIT differs from isdigit, as follows:
-   - Its arg may be any int or unsigned int; it need not be an unsigned char
-     or EOF.
-   - It's typically faster.
-   POSIX says that only '0' through '9' are digits.  Prefer ISDIGIT to
-   isdigit unless it's important to use the locale's definition
-   of `digit' even when the host does not conform to POSIX.  */
-#define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
-
-#ifndef __attribute__
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
-#  define __attribute__(x)
-# endif
-#endif
-
-#ifndef ATTRIBUTE_UNUSED
-# define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
-#endif
-
-/* Shift A right by B bits portably, by dividing A by 2**B and
-   truncating towards minus infinity.  A and B should be free of side
-   effects, and B should be in the range 0 <= B <= INT_BITS - 2, where
-   INT_BITS is the number of useful bits in an int.  GNU code can
-   assume that INT_BITS is at least 32.
-
-   ISO C99 says that A >> B is implementation-defined if A < 0.  Some
-   implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift
-   right in the usual way when A < 0, so SHR falls back on division if
-   ordinary A >> B doesn't seem to be the usual signed shift.  */
-#define SHR(a, b)      \
-  (-1 >> 1 == -1       \
-   ? (a) >> (b)                \
-   : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0))
-
-#define EPOCH_YEAR 1970
-#define TM_YEAR_BASE 1900
-
-#define HOUR(x) ((x) * 60)
-
-/* Lots of this code assumes time_t and time_t-like values fit into
-   long int.  It also assumes that signed integer overflow silently
-   wraps around, but there's no portable way to check for that at
-   compile-time.  */
-verify (TYPE_IS_INTEGER (time_t));
-verify (LONG_MIN <= TYPE_MINIMUM (time_t) && TYPE_MAXIMUM (time_t) <= LONG_MAX);
-
-/* An integer value, and the number of digits in its textual
-   representation.  */
-typedef struct
-{
-  bool negative;
-  long int value;
-  size_t digits;
-} textint;
-
-/* An entry in the lexical lookup table.  */
-typedef struct
-{
-  char const *name;
-  int type;
-  int value;
-} table;
-
-/* Meridian: am, pm, or 24-hour style.  */
-enum { MERam, MERpm, MER24 };
-
-enum { BILLION = 1000000000, LOG10_BILLION = 9 };
-
-/* Relative times.  */
-typedef struct
-{
-  /* Relative year, month, day, hour, minutes, seconds, and nanoseconds.  */
-  long int year;
-  long int month;
-  long int day;
-  long int hour;
-  long int minutes;
-  long int seconds;
-  long int ns;
-} relative_time;
-
-#if HAVE_COMPOUND_LITERALS
-# define RELATIVE_TIME_0 ((relative_time) { 0, 0, 0, 0, 0, 0, 0 })
-#else
-static relative_time const RELATIVE_TIME_0;
-#endif
-
-/* Information passed to and from the parser.  */
-typedef struct
-{
-  /* The input string remaining to be parsed. */
-  const char *input;
-
-  /* N, if this is the Nth Tuesday.  */
-  long int day_ordinal;
-
-  /* Day of week; Sunday is 0.  */
-  int day_number;
-
-  /* tm_isdst flag for the local zone.  */
-  int local_isdst;
-
-  /* Time zone, in minutes east of UTC.  */
-  long int time_zone;
-
-  /* Style used for time.  */
-  int meridian;
-
-  /* Gregorian year, month, day, hour, minutes, seconds, and nanoseconds.  */
-  textint year;
-  long int month;
-  long int day;
-  long int hour;
-  long int minutes;
-  struct timespec seconds; /* includes nanoseconds */
-
-  /* Relative year, month, day, hour, minutes, seconds, and nanoseconds.  */
-  relative_time rel;
-
-  /* Presence or counts of nonterminals of various flavors parsed so far.  */
-  bool timespec_seen;
-  bool rels_seen;
-  size_t dates_seen;
-  size_t days_seen;
-  size_t local_zones_seen;
-  size_t dsts_seen;
-  size_t times_seen;
-  size_t zones_seen;
-
-  /* Table of local time zone abbrevations, terminated by a null entry.  */
-  table local_time_zone_table[3];
-} parser_control;
-
-union YYSTYPE;
-static int yylex (union YYSTYPE *, parser_control *);
-static int yyerror (parser_control const *, char const *);
-static long int time_zone_hhmm (parser_control *, textint, long int);
-
-/* Extract into *PC any date and time info from a string of digits
-   of the form e.g., YYYYMMDD, YYMMDD, HHMM, HH (and sometimes YYY,
-   YYYY, ...).  */
-static void
-digits_to_date_time (parser_control *pc, textint text_int)
-{
-  if (pc->dates_seen && ! pc->year.digits
-      && ! pc->rels_seen && (pc->times_seen || 2 < text_int.digits))
-    pc->year = text_int;
-  else
-    {
-      if (4 < text_int.digits)
-       {
-         pc->dates_seen++;
-         pc->day = text_int.value % 100;
-         pc->month = (text_int.value / 100) % 100;
-         pc->year.value = text_int.value / 10000;
-         pc->year.digits = text_int.digits - 4;
-       }
-      else
-       {
-         pc->times_seen++;
-         if (text_int.digits <= 2)
-           {
-             pc->hour = text_int.value;
-             pc->minutes = 0;
-           }
-         else
-           {
-             pc->hour = text_int.value / 100;
-             pc->minutes = text_int.value % 100;
-           }
-         pc->seconds.tv_sec = 0;
-         pc->seconds.tv_nsec = 0;
-         pc->meridian = MER24;
-       }
-    }
-}
-
-/* Increment PC->rel by FACTOR * REL (FACTOR is 1 or -1).  */
-static void
-apply_relative_time (parser_control *pc, relative_time rel, int factor)
-{
-  pc->rel.ns += factor * rel.ns;
-  pc->rel.seconds += factor * rel.seconds;
-  pc->rel.minutes += factor * rel.minutes;
-  pc->rel.hour += factor * rel.hour;
-  pc->rel.day += factor * rel.day;
-  pc->rel.month += factor * rel.month;
-  pc->rel.year += factor * rel.year;
-  pc->rels_seen = true;
-}
-
-/* Set PC-> hour, minutes, seconds and nanoseconds members from arguments.  */
-static void
-set_hhmmss (parser_control *pc, long int hour, long int minutes,
-           time_t sec, long int nsec)
-{
-  pc->hour = hour;
-  pc->minutes = minutes;
-  pc->seconds.tv_sec = sec;
-  pc->seconds.tv_nsec = nsec;
-}
-
-%}
-
-/* We want a reentrant parser, even if the TZ manipulation and the calls to
-   localtime and gmtime are not reentrant.  */
-%pure-parser
-%parse-param { parser_control *pc }
-%lex-param { parser_control *pc }
-
-/* This grammar has 20 shift/reduce conflicts. */
-%expect 20
-
-%union
-{
-  long int intval;
-  textint textintval;
-  struct timespec timespec;
-  relative_time rel;
-}
-
-%token tAGO tDST
-
-%token tYEAR_UNIT tMONTH_UNIT tHOUR_UNIT tMINUTE_UNIT tSEC_UNIT
-%token <intval> tDAY_UNIT tDAY_SHIFT
-
-%token <intval> tDAY tDAYZONE tLOCAL_ZONE tMERIDIAN
-%token <intval> tMONTH tORDINAL tZONE
-
-%token <textintval> tSNUMBER tUNUMBER
-%token <timespec> tSDECIMAL_NUMBER tUDECIMAL_NUMBER
-
-%type <intval> o_colon_minutes o_merid
-%type <timespec> seconds signed_seconds unsigned_seconds
-
-%type <rel> relunit relunit_snumber dayshift
-
-%%
-
-spec:
-    timespec
-  | items
-  ;
-
-timespec:
-    '@' seconds
-      {
-       pc->seconds = $2;
-       pc->timespec_seen = true;
-      }
-  ;
-
-items:
-    /* empty */
-  | items item
-  ;
-
-item:
-    time
-      { pc->times_seen++; }
-  | local_zone
-      { pc->local_zones_seen++; }
-  | zone
-      { pc->zones_seen++; }
-  | date
-      { pc->dates_seen++; }
-  | day
-      { pc->days_seen++; }
-  | rel
-  | number
-  | hybrid
-  ;
-
-time:
-    tUNUMBER tMERIDIAN
-      {
-       set_hhmmss (pc, $1.value, 0, 0, 0);
-       pc->meridian = $2;
-      }
-  | tUNUMBER ':' tUNUMBER o_merid
-      {
-       set_hhmmss (pc, $1.value, $3.value, 0, 0);
-       pc->meridian = $4;
-      }
-  | tUNUMBER ':' tUNUMBER tSNUMBER o_colon_minutes
-      {
-       set_hhmmss (pc, $1.value, $3.value, 0, 0);
-       pc->meridian = MER24;
-       pc->zones_seen++;
-       pc->time_zone = time_zone_hhmm (pc, $4, $5);
-      }
-  | tUNUMBER ':' tUNUMBER ':' unsigned_seconds o_merid
-      {
-       set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec);
-       pc->meridian = $6;
-      }
-  | tUNUMBER ':' tUNUMBER ':' unsigned_seconds tSNUMBER o_colon_minutes
-      {
-       set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec);
-       pc->meridian = MER24;
-       pc->zones_seen++;
-       pc->time_zone = time_zone_hhmm (pc, $6, $7);
-      }
-  ;
-
-local_zone:
-    tLOCAL_ZONE
-      {
-       pc->local_isdst = $1;
-       pc->dsts_seen += (0 < $1);
-      }
-  | tLOCAL_ZONE tDST
-      {
-       pc->local_isdst = 1;
-       pc->dsts_seen += (0 < $1) + 1;
-      }
-  ;
-
-zone:
-    tZONE
-      { pc->time_zone = $1; }
-  | tZONE relunit_snumber
-      { pc->time_zone = $1;
-       apply_relative_time (pc, $2, 1); }
-  | tZONE tSNUMBER o_colon_minutes
-      { pc->time_zone = $1 + time_zone_hhmm (pc, $2, $3); }
-  | tDAYZONE
-      { pc->time_zone = $1 + 60; }
-  | tZONE tDST
-      { pc->time_zone = $1 + 60; }
-  ;
-
-day:
-    tDAY
-      {
-       pc->day_ordinal = 1;
-       pc->day_number = $1;
-      }
-  | tDAY ','
-      {
-       pc->day_ordinal = 1;
-       pc->day_number = $1;
-      }
-  | tORDINAL tDAY
-      {
-       pc->day_ordinal = $1;
-       pc->day_number = $2;
-      }
-  | tUNUMBER tDAY
-      {
-       pc->day_ordinal = $1.value;
-       pc->day_number = $2;
-      }
-  ;
-
-date:
-    tUNUMBER '/' tUNUMBER
-      {
-       pc->month = $1.value;
-       pc->day = $3.value;
-      }
-  | tUNUMBER '/' tUNUMBER '/' tUNUMBER
-      {
-       /* Interpret as YYYY/MM/DD if the first value has 4 or more digits,
-          otherwise as MM/DD/YY.
-          The goal in recognizing YYYY/MM/DD is solely to support legacy
-          machine-generated dates like those in an RCS log listing.  If
-          you want portability, use the ISO 8601 format.  */
-       if (4 <= $1.digits)
-         {
-           pc->year = $1;
-           pc->month = $3.value;
-           pc->day = $5.value;
-         }
-       else
-         {
-           pc->month = $1.value;
-           pc->day = $3.value;
-           pc->year = $5;
-         }
-      }
-  | tUNUMBER tSNUMBER tSNUMBER
-      {
-       /* ISO 8601 format.  YYYY-MM-DD.  */
-       pc->year = $1;
-       pc->month = -$2.value;
-       pc->day = -$3.value;
-      }
-  | tUNUMBER tMONTH tSNUMBER
-      {
-       /* e.g. 17-JUN-1992.  */
-       pc->day = $1.value;
-       pc->month = $2;
-       pc->year.value = -$3.value;
-       pc->year.digits = $3.digits;
-      }
-  | tMONTH tSNUMBER tSNUMBER
-      {
-       /* e.g. JUN-17-1992.  */
-       pc->month = $1;
-       pc->day = -$2.value;
-       pc->year.value = -$3.value;
-       pc->year.digits = $3.digits;
-      }
-  | tMONTH tUNUMBER
-      {
-       pc->month = $1;
-       pc->day = $2.value;
-      }
-  | tMONTH tUNUMBER ',' tUNUMBER
-      {
-       pc->month = $1;
-       pc->day = $2.value;
-       pc->year = $4;
-      }
-  | tUNUMBER tMONTH
-      {
-       pc->day = $1.value;
-       pc->month = $2;
-      }
-  | tUNUMBER tMONTH tUNUMBER
-      {
-       pc->day = $1.value;
-       pc->month = $2;
-       pc->year = $3;
-      }
-  ;
-
-rel:
-    relunit tAGO
-      { apply_relative_time (pc, $1, -1); }
-  | relunit
-      { apply_relative_time (pc, $1, 1); }
-  | dayshift
-      { apply_relative_time (pc, $1, 1); }
-  ;
-
-relunit:
-    tORDINAL tYEAR_UNIT
-      { $$ = RELATIVE_TIME_0; $$.year = $1; }
-  | tUNUMBER tYEAR_UNIT
-      { $$ = RELATIVE_TIME_0; $$.year = $1.value; }
-  | tYEAR_UNIT
-      { $$ = RELATIVE_TIME_0; $$.year = 1; }
-  | tORDINAL tMONTH_UNIT
-      { $$ = RELATIVE_TIME_0; $$.month = $1; }
-  | tUNUMBER tMONTH_UNIT
-      { $$ = RELATIVE_TIME_0; $$.month = $1.value; }
-  | tMONTH_UNIT
-      { $$ = RELATIVE_TIME_0; $$.month = 1; }
-  | tORDINAL tDAY_UNIT
-      { $$ = RELATIVE_TIME_0; $$.day = $1 * $2; }
-  | tUNUMBER tDAY_UNIT
-      { $$ = RELATIVE_TIME_0; $$.day = $1.value * $2; }
-  | tDAY_UNIT
-      { $$ = RELATIVE_TIME_0; $$.day = $1; }
-  | tORDINAL tHOUR_UNIT
-      { $$ = RELATIVE_TIME_0; $$.hour = $1; }
-  | tUNUMBER tHOUR_UNIT
-      { $$ = RELATIVE_TIME_0; $$.hour = $1.value; }
-  | tHOUR_UNIT
-      { $$ = RELATIVE_TIME_0; $$.hour = 1; }
-  | tORDINAL tMINUTE_UNIT
-      { $$ = RELATIVE_TIME_0; $$.minutes = $1; }
-  | tUNUMBER tMINUTE_UNIT
-      { $$ = RELATIVE_TIME_0; $$.minutes = $1.value; }
-  | tMINUTE_UNIT
-      { $$ = RELATIVE_TIME_0; $$.minutes = 1; }
-  | tORDINAL tSEC_UNIT
-      { $$ = RELATIVE_TIME_0; $$.seconds = $1; }
-  | tUNUMBER tSEC_UNIT
-      { $$ = RELATIVE_TIME_0; $$.seconds = $1.value; }
-  | tSDECIMAL_NUMBER tSEC_UNIT
-      { $$ = RELATIVE_TIME_0; $$.seconds = $1.tv_sec; $$.ns = $1.tv_nsec; }
-  | tUDECIMAL_NUMBER tSEC_UNIT
-      { $$ = RELATIVE_TIME_0; $$.seconds = $1.tv_sec; $$.ns = $1.tv_nsec; }
-  | tSEC_UNIT
-      { $$ = RELATIVE_TIME_0; $$.seconds = 1; }
-  | relunit_snumber
-  ;
-
-relunit_snumber:
-    tSNUMBER tYEAR_UNIT
-      { $$ = RELATIVE_TIME_0; $$.year = $1.value; }
-  | tSNUMBER tMONTH_UNIT
-      { $$ = RELATIVE_TIME_0; $$.month = $1.value; }
-  | tSNUMBER tDAY_UNIT
-      { $$ = RELATIVE_TIME_0; $$.day = $1.value * $2; }
-  | tSNUMBER tHOUR_UNIT
-      { $$ = RELATIVE_TIME_0; $$.hour = $1.value; }
-  | tSNUMBER tMINUTE_UNIT
-      { $$ = RELATIVE_TIME_0; $$.minutes = $1.value; }
-  | tSNUMBER tSEC_UNIT
-      { $$ = RELATIVE_TIME_0; $$.seconds = $1.value; }
-  ;
-
-dayshift:
-    tDAY_SHIFT
-      { $$ = RELATIVE_TIME_0; $$.day = $1; }
-  ;
-
-seconds: signed_seconds | unsigned_seconds;
-
-signed_seconds:
-    tSDECIMAL_NUMBER
-  | tSNUMBER
-      { $$.tv_sec = $1.value; $$.tv_nsec = 0; }
-  ;
-
-unsigned_seconds:
-    tUDECIMAL_NUMBER
-  | tUNUMBER
-      { $$.tv_sec = $1.value; $$.tv_nsec = 0; }
-  ;
-
-number:
-    tUNUMBER
-      { digits_to_date_time (pc, $1); }
-  ;
-
-hybrid:
-    tUNUMBER relunit_snumber
-      {
-       /* Hybrid all-digit and relative offset, so that we accept e.g.,
-          "YYYYMMDD +N days" as well as "YYYYMMDD N days".  */
-       digits_to_date_time (pc, $1);
-       apply_relative_time (pc, $2, 1);
-      }
-  ;
-
-o_colon_minutes:
-    /* empty */
-      { $$ = -1; }
-  | ':' tUNUMBER
-      { $$ = $2.value; }
-  ;
-
-o_merid:
-    /* empty */
-      { $$ = MER24; }
-  | tMERIDIAN
-      { $$ = $1; }
-  ;
-
-%%
-
-static table const meridian_table[] =
-{
-  { "AM",   tMERIDIAN, MERam },
-  { "A.M.", tMERIDIAN, MERam },
-  { "PM",   tMERIDIAN, MERpm },
-  { "P.M.", tMERIDIAN, MERpm },
-  { NULL, 0, 0 }
-};
-
-static table const dst_table[] =
-{
-  { "DST", tDST, 0 }
-};
-
-static table const month_and_day_table[] =
-{
-  { "JANUARY", tMONTH,  1 },
-  { "FEBRUARY",        tMONTH,  2 },
-  { "MARCH",   tMONTH,  3 },
-  { "APRIL",   tMONTH,  4 },
-  { "MAY",     tMONTH,  5 },
-  { "JUNE",    tMONTH,  6 },
-  { "JULY",    tMONTH,  7 },
-  { "AUGUST",  tMONTH,  8 },
-  { "SEPTEMBER",tMONTH,         9 },
-  { "SEPT",    tMONTH,  9 },
-  { "OCTOBER", tMONTH, 10 },
-  { "NOVEMBER",        tMONTH, 11 },
-  { "DECEMBER",        tMONTH, 12 },
-  { "SUNDAY",  tDAY,    0 },
-  { "MONDAY",  tDAY,    1 },
-  { "TUESDAY", tDAY,    2 },
-  { "TUES",    tDAY,    2 },
-  { "WEDNESDAY",tDAY,   3 },
-  { "WEDNES",  tDAY,    3 },
-  { "THURSDAY",        tDAY,    4 },
-  { "THUR",    tDAY,    4 },
-  { "THURS",   tDAY,    4 },
-  { "FRIDAY",  tDAY,    5 },
-  { "SATURDAY",        tDAY,    6 },
-  { NULL, 0, 0 }
-};
-
-static table const time_units_table[] =
-{
-  { "YEAR",    tYEAR_UNIT,      1 },
-  { "MONTH",   tMONTH_UNIT,     1 },
-  { "FORTNIGHT",tDAY_UNIT,     14 },
-  { "WEEK",    tDAY_UNIT,       7 },
-  { "DAY",     tDAY_UNIT,       1 },
-  { "HOUR",    tHOUR_UNIT,      1 },
-  { "MINUTE",  tMINUTE_UNIT,    1 },
-  { "MIN",     tMINUTE_UNIT,    1 },
-  { "SECOND",  tSEC_UNIT,       1 },
-  { "SEC",     tSEC_UNIT,       1 },
-  { NULL, 0, 0 }
-};
-
-/* Assorted relative-time words. */
-static table const relative_time_table[] =
-{
-  { "TOMORROW",        tDAY_SHIFT,      1 },
-  { "YESTERDAY",tDAY_SHIFT,    -1 },
-  { "TODAY",   tDAY_SHIFT,      0 },
-  { "NOW",     tDAY_SHIFT,      0 },
-  { "LAST",    tORDINAL,       -1 },
-  { "THIS",    tORDINAL,        0 },
-  { "NEXT",    tORDINAL,        1 },
-  { "FIRST",   tORDINAL,        1 },
-/*{ "SECOND",  tORDINAL,        2 }, */
-  { "THIRD",   tORDINAL,        3 },
-  { "FOURTH",  tORDINAL,        4 },
-  { "FIFTH",   tORDINAL,        5 },
-  { "SIXTH",   tORDINAL,        6 },
-  { "SEVENTH", tORDINAL,        7 },
-  { "EIGHTH",  tORDINAL,        8 },
-  { "NINTH",   tORDINAL,        9 },
-  { "TENTH",   tORDINAL,       10 },
-  { "ELEVENTH",        tORDINAL,       11 },
-  { "TWELFTH", tORDINAL,       12 },
-  { "AGO",     tAGO,            1 },
-  { NULL, 0, 0 }
-};
-
-/* The universal time zone table.  These labels can be used even for
-   time stamps that would not otherwise be valid, e.g., GMT time
-   stamps in London during summer.  */
-static table const universal_time_zone_table[] =
-{
-  { "GMT",     tZONE,     HOUR ( 0) }, /* Greenwich Mean */
-  { "UT",      tZONE,     HOUR ( 0) }, /* Universal (Coordinated) */
-  { "UTC",     tZONE,     HOUR ( 0) },
-  { NULL, 0, 0 }
-};
-
-/* The time zone table.  This table is necessarily incomplete, as time
-   zone abbreviations are ambiguous; e.g. Australians interpret "EST"
-   as Eastern time in Australia, not as US Eastern Standard Time.
-   You cannot rely on getdate to handle arbitrary time zone
-   abbreviations; use numeric abbreviations like `-0500' instead.  */
-static table const time_zone_table[] =
-{
-  { "WET",     tZONE,     HOUR ( 0) }, /* Western European */
-  { "WEST",    tDAYZONE,  HOUR ( 0) }, /* Western European Summer */
-  { "BST",     tDAYZONE,  HOUR ( 0) }, /* British Summer */
-  { "ART",     tZONE,    -HOUR ( 3) }, /* Argentina */
-  { "BRT",     tZONE,    -HOUR ( 3) }, /* Brazil */
-  { "BRST",    tDAYZONE, -HOUR ( 3) }, /* Brazil Summer */
-  { "NST",     tZONE,   -(HOUR ( 3) + 30) },   /* Newfoundland Standard */
-  { "NDT",     tDAYZONE,-(HOUR ( 3) + 30) },   /* Newfoundland Daylight */
-  { "AST",     tZONE,    -HOUR ( 4) }, /* Atlantic Standard */
-  { "ADT",     tDAYZONE, -HOUR ( 4) }, /* Atlantic Daylight */
-  { "CLT",     tZONE,    -HOUR ( 4) }, /* Chile */
-  { "CLST",    tDAYZONE, -HOUR ( 4) }, /* Chile Summer */
-  { "EST",     tZONE,    -HOUR ( 5) }, /* Eastern Standard */
-  { "EDT",     tDAYZONE, -HOUR ( 5) }, /* Eastern Daylight */
-  { "CST",     tZONE,    -HOUR ( 6) }, /* Central Standard */
-  { "CDT",     tDAYZONE, -HOUR ( 6) }, /* Central Daylight */
-  { "MST",     tZONE,    -HOUR ( 7) }, /* Mountain Standard */
-  { "MDT",     tDAYZONE, -HOUR ( 7) }, /* Mountain Daylight */
-  { "PST",     tZONE,    -HOUR ( 8) }, /* Pacific Standard */
-  { "PDT",     tDAYZONE, -HOUR ( 8) }, /* Pacific Daylight */
-  { "AKST",    tZONE,    -HOUR ( 9) }, /* Alaska Standard */
-  { "AKDT",    tDAYZONE, -HOUR ( 9) }, /* Alaska Daylight */
-  { "HST",     tZONE,    -HOUR (10) }, /* Hawaii Standard */
-  { "HAST",    tZONE,    -HOUR (10) }, /* Hawaii-Aleutian Standard */
-  { "HADT",    tDAYZONE, -HOUR (10) }, /* Hawaii-Aleutian Daylight */
-  { "SST",     tZONE,    -HOUR (12) }, /* Samoa Standard */
-  { "WAT",     tZONE,     HOUR ( 1) }, /* West Africa */
-  { "CET",     tZONE,     HOUR ( 1) }, /* Central European */
-  { "CEST",    tDAYZONE,  HOUR ( 1) }, /* Central European Summer */
-  { "MET",     tZONE,     HOUR ( 1) }, /* Middle European */
-  { "MEZ",     tZONE,     HOUR ( 1) }, /* Middle European */
-  { "MEST",    tDAYZONE,  HOUR ( 1) }, /* Middle European Summer */
-  { "MESZ",    tDAYZONE,  HOUR ( 1) }, /* Middle European Summer */
-  { "EET",     tZONE,     HOUR ( 2) }, /* Eastern European */
-  { "EEST",    tDAYZONE,  HOUR ( 2) }, /* Eastern European Summer */
-  { "CAT",     tZONE,     HOUR ( 2) }, /* Central Africa */
-  { "SAST",    tZONE,     HOUR ( 2) }, /* South Africa Standard */
-  { "EAT",     tZONE,     HOUR ( 3) }, /* East Africa */
-  { "MSK",     tZONE,     HOUR ( 3) }, /* Moscow */
-  { "MSD",     tDAYZONE,  HOUR ( 3) }, /* Moscow Daylight */
-  { "IST",     tZONE,    (HOUR ( 5) + 30) },   /* India Standard */
-  { "SGT",     tZONE,     HOUR ( 8) }, /* Singapore */
-  { "KST",     tZONE,     HOUR ( 9) }, /* Korea Standard */
-  { "JST",     tZONE,     HOUR ( 9) }, /* Japan Standard */
-  { "GST",     tZONE,     HOUR (10) }, /* Guam Standard */
-  { "NZST",    tZONE,     HOUR (12) }, /* New Zealand Standard */
-  { "NZDT",    tDAYZONE,  HOUR (12) }, /* New Zealand Daylight */
-  { NULL, 0, 0 }
-};
-
-/* Military time zone table. */
-static table const military_table[] =
-{
-  { "A", tZONE,        -HOUR ( 1) },
-  { "B", tZONE,        -HOUR ( 2) },
-  { "C", tZONE,        -HOUR ( 3) },
-  { "D", tZONE,        -HOUR ( 4) },
-  { "E", tZONE,        -HOUR ( 5) },
-  { "F", tZONE,        -HOUR ( 6) },
-  { "G", tZONE,        -HOUR ( 7) },
-  { "H", tZONE,        -HOUR ( 8) },
-  { "I", tZONE,        -HOUR ( 9) },
-  { "K", tZONE,        -HOUR (10) },
-  { "L", tZONE,        -HOUR (11) },
-  { "M", tZONE,        -HOUR (12) },
-  { "N", tZONE,         HOUR ( 1) },
-  { "O", tZONE,         HOUR ( 2) },
-  { "P", tZONE,         HOUR ( 3) },
-  { "Q", tZONE,         HOUR ( 4) },
-  { "R", tZONE,         HOUR ( 5) },
-  { "S", tZONE,         HOUR ( 6) },
-  { "T", tZONE,         HOUR ( 7) },
-  { "U", tZONE,         HOUR ( 8) },
-  { "V", tZONE,         HOUR ( 9) },
-  { "W", tZONE,         HOUR (10) },
-  { "X", tZONE,         HOUR (11) },
-  { "Y", tZONE,         HOUR (12) },
-  { "Z", tZONE,         HOUR ( 0) },
-  { NULL, 0, 0 }
-};
-
-\f
-
-/* Convert a time zone expressed as HH:MM into an integer count of
-   minutes.  If MM is negative, then S is of the form HHMM and needs
-   to be picked apart; otherwise, S is of the form HH.  As specified in
-   http://www.opengroup.org/susv3xbd/xbd_chap08.html#tag_08_03, allow
-   only valid TZ range, and consider first two digits as hours, if no
-   minutes specified.  */
-
-static long int
-time_zone_hhmm (parser_control *pc, textint s, long int mm)
-{
-  long int n_minutes;
-
-  /* If the length of S is 1 or 2 and no minutes are specified,
-     interpret it as a number of hours.  */
-  if (s.digits <= 2 && mm < 0)
-    s.value *= 100;
-
-  if (mm < 0)
-    n_minutes = (s.value / 100) * 60 + s.value % 100;
-  else
-    n_minutes = s.value * 60 + (s.negative ? -mm : mm);
-
-  /* If the absolute number of minutes is larger than 24 hours,
-     arrange to reject it by incrementing pc->zones_seen.  Thus,
-     we allow only values in the range UTC-24:00 to UTC+24:00.  */
-  if (24 * 60 < abs (n_minutes))
-    pc->zones_seen++;
-
-  return n_minutes;
-}
-
-static int
-to_hour (long int hours, int meridian)
-{
-  switch (meridian)
-    {
-    default: /* Pacify GCC.  */
-    case MER24:
-      return 0 <= hours && hours < 24 ? hours : -1;
-    case MERam:
-      return 0 < hours && hours < 12 ? hours : hours == 12 ? 0 : -1;
-    case MERpm:
-      return 0 < hours && hours < 12 ? hours + 12 : hours == 12 ? 12 : -1;
-    }
-}
-
-static long int
-to_year (textint textyear)
-{
-  long int year = textyear.value;
-
-  if (year < 0)
-    year = -year;
-
-  /* XPG4 suggests that years 00-68 map to 2000-2068, and
-     years 69-99 map to 1969-1999.  */
-  else if (textyear.digits == 2)
-    year += year < 69 ? 2000 : 1900;
-
-  return year;
-}
-
-static table const *
-lookup_zone (parser_control const *pc, char const *name)
-{
-  table const *tp;
-
-  for (tp = universal_time_zone_table; tp->name; tp++)
-    if (strcmp (name, tp->name) == 0)
-      return tp;
-
-  /* Try local zone abbreviations before those in time_zone_table, as
-     the local ones are more likely to be right.  */
-  for (tp = pc->local_time_zone_table; tp->name; tp++)
-    if (strcmp (name, tp->name) == 0)
-      return tp;
-
-  for (tp = time_zone_table; tp->name; tp++)
-    if (strcmp (name, tp->name) == 0)
-      return tp;
-
-  return NULL;
-}
-
-#if ! HAVE_TM_GMTOFF
-/* Yield the difference between *A and *B,
-   measured in seconds, ignoring leap seconds.
-   The body of this function is taken directly from the GNU C Library;
-   see src/strftime.c.  */
-static long int
-tm_diff (struct tm const *a, struct tm const *b)
-{
-  /* Compute intervening leap days correctly even if year is negative.
-     Take care to avoid int overflow in leap day calculations.  */
-  int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3);
-  int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3);
-  int a100 = a4 / 25 - (a4 % 25 < 0);
-  int b100 = b4 / 25 - (b4 % 25 < 0);
-  int a400 = SHR (a100, 2);
-  int b400 = SHR (b100, 2);
-  int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400);
-  long int ayear = a->tm_year;
-  long int years = ayear - b->tm_year;
-  long int days = (365 * years + intervening_leap_days
-                  + (a->tm_yday - b->tm_yday));
-  return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour))
-               + (a->tm_min - b->tm_min))
-         + (a->tm_sec - b->tm_sec));
-}
-#endif /* ! HAVE_TM_GMTOFF */
-
-static table const *
-lookup_word (parser_control const *pc, char *word)
-{
-  char *p;
-  char *q;
-  size_t wordlen;
-  table const *tp;
-  bool period_found;
-  bool abbrev;
-
-  /* Make it uppercase.  */
-  for (p = word; *p; p++)
-    {
-      unsigned char ch = *p;
-      *p = c_toupper (ch);
-    }
-
-  for (tp = meridian_table; tp->name; tp++)
-    if (strcmp (word, tp->name) == 0)
-      return tp;
-
-  /* See if we have an abbreviation for a month. */
-  wordlen = strlen (word);
-  abbrev = wordlen == 3 || (wordlen == 4 && word[3] == '.');
-
-  for (tp = month_and_day_table; tp->name; tp++)
-    if ((abbrev ? strncmp (word, tp->name, 3) : strcmp (word, tp->name)) == 0)
-      return tp;
-
-  if ((tp = lookup_zone (pc, word)))
-    return tp;
-
-  if (strcmp (word, dst_table[0].name) == 0)
-    return dst_table;
-
-  for (tp = time_units_table; tp->name; tp++)
-    if (strcmp (word, tp->name) == 0)
-      return tp;
-
-  /* Strip off any plural and try the units table again. */
-  if (word[wordlen - 1] == 'S')
-    {
-      word[wordlen - 1] = '\0';
-      for (tp = time_units_table; tp->name; tp++)
-       if (strcmp (word, tp->name) == 0)
-         return tp;
-      word[wordlen - 1] = 'S'; /* For "this" in relative_time_table.  */
-    }
-
-  for (tp = relative_time_table; tp->name; tp++)
-    if (strcmp (word, tp->name) == 0)
-      return tp;
-
-  /* Military time zones. */
-  if (wordlen == 1)
-    for (tp = military_table; tp->name; tp++)
-      if (word[0] == tp->name[0])
-       return tp;
-
-  /* Drop out any periods and try the time zone table again. */
-  for (period_found = false, p = q = word; (*p = *q); q++)
-    if (*q == '.')
-      period_found = true;
-    else
-      p++;
-  if (period_found && (tp = lookup_zone (pc, word)))
-    return tp;
-
-  return NULL;
-}
-
-static int
-yylex (YYSTYPE *lvalp, parser_control *pc)
-{
-  unsigned char c;
-  size_t count;
-
-  for (;;)
-    {
-      while (c = *pc->input, c_isspace (c))
-       pc->input++;
-
-      if (ISDIGIT (c) || c == '-' || c == '+')
-       {
-         char const *p;
-         int sign;
-         unsigned long int value;
-         if (c == '-' || c == '+')
-           {
-             sign = c == '-' ? -1 : 1;
-             while (c = *++pc->input, c_isspace (c))
-               continue;
-             if (! ISDIGIT (c))
-               /* skip the '-' sign */
-               continue;
-           }
-         else
-           sign = 0;
-         p = pc->input;
-         for (value = 0; ; value *= 10)
-           {
-             unsigned long int value1 = value + (c - '0');
-             if (value1 < value)
-               return '?';
-             value = value1;
-             c = *++p;
-             if (! ISDIGIT (c))
-               break;
-             if (ULONG_MAX / 10 < value)
-               return '?';
-           }
-         if ((c == '.' || c == ',') && ISDIGIT (p[1]))
-           {
-             time_t s;
-             int ns;
-             int digits;
-             unsigned long int value1;
-
-             /* Check for overflow when converting value to time_t.  */
-             if (sign < 0)
-               {
-                 s = - value;
-                 if (0 < s)
-                   return '?';
-                 value1 = -s;
-               }
-             else
-               {
-                 s = value;
-                 if (s < 0)
-                   return '?';
-                 value1 = s;
-               }
-             if (value != value1)
-               return '?';
-
-             /* Accumulate fraction, to ns precision.  */
-             p++;
-             ns = *p++ - '0';
-             for (digits = 2; digits <= LOG10_BILLION; digits++)
-               {
-                 ns *= 10;
-                 if (ISDIGIT (*p))
-                   ns += *p++ - '0';
-               }
-
-             /* Skip excess digits, truncating toward -Infinity.  */
-             if (sign < 0)
-               for (; ISDIGIT (*p); p++)
-                 if (*p != '0')
-                   {
-                     ns++;
-                     break;
-                   }
-             while (ISDIGIT (*p))
-               p++;
-
-             /* Adjust to the timespec convention, which is that
-                tv_nsec is always a positive offset even if tv_sec is
-                negative.  */
-             if (sign < 0 && ns)
-               {
-                 s--;
-                 if (! (s < 0))
-                   return '?';
-                 ns = BILLION - ns;
-               }
-
-             lvalp->timespec.tv_sec = s;
-             lvalp->timespec.tv_nsec = ns;
-             pc->input = p;
-             return sign ? tSDECIMAL_NUMBER : tUDECIMAL_NUMBER;
-           }
-         else
-           {
-             lvalp->textintval.negative = sign < 0;
-             if (sign < 0)
-               {
-                 lvalp->textintval.value = - value;
-                 if (0 < lvalp->textintval.value)
-                   return '?';
-               }
-             else
-               {
-                 lvalp->textintval.value = value;
-                 if (lvalp->textintval.value < 0)
-                   return '?';
-               }
-             lvalp->textintval.digits = p - pc->input;
-             pc->input = p;
-             return sign ? tSNUMBER : tUNUMBER;
-           }
-       }
-
-      if (c_isalpha (c))
-       {
-         char buff[20];
-         char *p = buff;
-         table const *tp;
-
-         do
-           {
-             if (p < buff + sizeof buff - 1)
-               *p++ = c;
-             c = *++pc->input;
-           }
-         while (c_isalpha (c) || c == '.');
-
-         *p = '\0';
-         tp = lookup_word (pc, buff);
-         if (! tp)
-           return '?';
-         lvalp->intval = tp->value;
-         return tp->type;
-       }
-
-      if (c != '(')
-       return *pc->input++;
-      count = 0;
-      do
-       {
-         c = *pc->input++;
-         if (c == '\0')
-           return c;
-         if (c == '(')
-           count++;
-         else if (c == ')')
-           count--;
-       }
-      while (count != 0);
-    }
-}
-
-/* Do nothing if the parser reports an error.  */
-static int
-yyerror (parser_control const *pc ATTRIBUTE_UNUSED,
-        char const *s ATTRIBUTE_UNUSED)
-{
-  return 0;
-}
-
-/* If *TM0 is the old and *TM1 is the new value of a struct tm after
-   passing it to mktime, return true if it's OK that mktime returned T.
-   It's not OK if *TM0 has out-of-range members.  */
-
-static bool
-mktime_ok (struct tm const *tm0, struct tm const *tm1, time_t t)
-{
-  if (t == (time_t) -1)
-    {
-      /* Guard against falsely reporting an error when parsing a time
-        stamp that happens to equal (time_t) -1, on a host that
-        supports such a time stamp.  */
-      tm1 = localtime (&t);
-      if (!tm1)
-       return false;
-    }
-
-  return ! ((tm0->tm_sec ^ tm1->tm_sec)
-           | (tm0->tm_min ^ tm1->tm_min)
-           | (tm0->tm_hour ^ tm1->tm_hour)
-           | (tm0->tm_mday ^ tm1->tm_mday)
-           | (tm0->tm_mon ^ tm1->tm_mon)
-           | (tm0->tm_year ^ tm1->tm_year));
-}
-
-/* A reasonable upper bound for the size of ordinary TZ strings.
-   Use heap allocation if TZ's length exceeds this.  */
-enum { TZBUFSIZE = 100 };
-
-/* Return a copy of TZ, stored in TZBUF if it fits, and heap-allocated
-   otherwise.  */
-static char *
-get_tz (char tzbuf[TZBUFSIZE])
-{
-  char *tz = getenv ("TZ");
-  if (tz)
-    {
-      size_t tzsize = strlen (tz) + 1;
-      tz = (tzsize <= TZBUFSIZE
-           ? memcpy (tzbuf, tz, tzsize)
-           : xmemdup (tz, tzsize));
-    }
-  return tz;
-}
-
-/* Parse a date/time string, storing the resulting time value into *RESULT.
-   The string itself is pointed to by P.  Return true if successful.
-   P can be an incomplete or relative time specification; if so, use
-   *NOW as the basis for the returned time.  */
-bool
-get_date (struct timespec *result, char const *p, struct timespec const *now)
-{
-  time_t Start;
-  long int Start_ns;
-  struct tm const *tmp;
-  struct tm tm;
-  struct tm tm0;
-  parser_control pc;
-  struct timespec gettime_buffer;
-  unsigned char c;
-  bool tz_was_altered = false;
-  char *tz0 = NULL;
-  char tz0buf[TZBUFSIZE];
-  bool ok = true;
-
-  if (! now)
-    {
-      gettime (&gettime_buffer);
-      now = &gettime_buffer;
-    }
-
-  Start = now->tv_sec;
-  Start_ns = now->tv_nsec;
-
-  tmp = localtime (&now->tv_sec);
-  if (! tmp)
-    return false;
-
-  while (c = *p, c_isspace (c))
-    p++;
-
-  if (strncmp (p, "TZ=\"", 4) == 0)
-    {
-      char const *tzbase = p + 4;
-      size_t tzsize = 1;
-      char const *s;
-
-      for (s = tzbase; *s; s++, tzsize++)
-       if (*s == '\\')
-         {
-           s++;
-           if (! (*s == '\\' || *s == '"'))
-             break;
-         }
-       else if (*s == '"')
-         {
-           char *z;
-           char *tz1;
-           char tz1buf[TZBUFSIZE];
-           bool large_tz = TZBUFSIZE < tzsize;
-           bool setenv_ok;
-           tz0 = get_tz (tz0buf);
-           z = tz1 = large_tz ? xmalloc (tzsize) : tz1buf;
-           for (s = tzbase; *s != '"'; s++)
-             *z++ = *(s += *s == '\\');
-           *z = '\0';
-           setenv_ok = setenv ("TZ", tz1, 1) == 0;
-           if (large_tz)
-             free (tz1);
-           if (!setenv_ok)
-             goto fail;
-           tz_was_altered = true;
-           p = s + 1;
-         }
-    }
-
-  /* As documented, be careful to treat the empty string just like
-     a date string of "0".  Without this, an empty string would be
-     declared invalid when parsed during a DST transition.  */
-  if (*p == '\0')
-    p = "0";
-
-  pc.input = p;
-  pc.year.value = tmp->tm_year;
-  pc.year.value += TM_YEAR_BASE;
-  pc.year.digits = 0;
-  pc.month = tmp->tm_mon + 1;
-  pc.day = tmp->tm_mday;
-  pc.hour = tmp->tm_hour;
-  pc.minutes = tmp->tm_min;
-  pc.seconds.tv_sec = tmp->tm_sec;
-  pc.seconds.tv_nsec = Start_ns;
-  tm.tm_isdst = tmp->tm_isdst;
-
-  pc.meridian = MER24;
-  pc.rel = RELATIVE_TIME_0;
-  pc.timespec_seen = false;
-  pc.rels_seen = false;
-  pc.dates_seen = 0;
-  pc.days_seen = 0;
-  pc.times_seen = 0;
-  pc.local_zones_seen = 0;
-  pc.dsts_seen = 0;
-  pc.zones_seen = 0;
-
-#if HAVE_STRUCT_TM_TM_ZONE
-  pc.local_time_zone_table[0].name = tmp->tm_zone;
-  pc.local_time_zone_table[0].type = tLOCAL_ZONE;
-  pc.local_time_zone_table[0].value = tmp->tm_isdst;
-  pc.local_time_zone_table[1].name = NULL;
-
-  /* Probe the names used in the next three calendar quarters, looking
-     for a tm_isdst different from the one we already have.  */
-  {
-    int quarter;
-    for (quarter = 1; quarter <= 3; quarter++)
-      {
-       time_t probe = Start + quarter * (90 * 24 * 60 * 60);
-       struct tm const *probe_tm = localtime (&probe);
-       if (probe_tm && probe_tm->tm_zone
-           && probe_tm->tm_isdst != pc.local_time_zone_table[0].value)
-         {
-             {
-               pc.local_time_zone_table[1].name = probe_tm->tm_zone;
-               pc.local_time_zone_table[1].type = tLOCAL_ZONE;
-               pc.local_time_zone_table[1].value = probe_tm->tm_isdst;
-               pc.local_time_zone_table[2].name = NULL;
-             }
-           break;
-         }
-      }
-  }
-#else
-#if HAVE_TZNAME
-  {
-# if !HAVE_DECL_TZNAME
-    extern char *tzname[];
-# endif
-    int i;
-    for (i = 0; i < 2; i++)
-      {
-       pc.local_time_zone_table[i].name = tzname[i];
-       pc.local_time_zone_table[i].type = tLOCAL_ZONE;
-       pc.local_time_zone_table[i].value = i;
-      }
-    pc.local_time_zone_table[i].name = NULL;
-  }
-#else
-  pc.local_time_zone_table[0].name = NULL;
-#endif
-#endif
-
-  if (pc.local_time_zone_table[0].name && pc.local_time_zone_table[1].name
-      && ! strcmp (pc.local_time_zone_table[0].name,
-                  pc.local_time_zone_table[1].name))
-    {
-      /* This locale uses the same abbrevation for standard and
-        daylight times.  So if we see that abbreviation, we don't
-        know whether it's daylight time.  */
-      pc.local_time_zone_table[0].value = -1;
-      pc.local_time_zone_table[1].name = NULL;
-    }
-
-  if (yyparse (&pc) != 0)
-    goto fail;
-
-  if (pc.timespec_seen)
-    *result = pc.seconds;
-  else
-    {
-      if (1 < (pc.times_seen | pc.dates_seen | pc.days_seen | pc.dsts_seen
-              | (pc.local_zones_seen + pc.zones_seen)))
-       goto fail;
-
-      tm.tm_year = to_year (pc.year) - TM_YEAR_BASE;
-      tm.tm_mon = pc.month - 1;
-      tm.tm_mday = pc.day;
-      if (pc.times_seen || (pc.rels_seen && ! pc.dates_seen && ! pc.days_seen))
-       {
-         tm.tm_hour = to_hour (pc.hour, pc.meridian);
-         if (tm.tm_hour < 0)
-           goto fail;
-         tm.tm_min = pc.minutes;
-         tm.tm_sec = pc.seconds.tv_sec;
-       }
-      else
-       {
-         tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
-         pc.seconds.tv_nsec = 0;
-       }
-
-      /* Let mktime deduce tm_isdst if we have an absolute time stamp.  */
-      if (pc.dates_seen | pc.days_seen | pc.times_seen)
-       tm.tm_isdst = -1;
-
-      /* But if the input explicitly specifies local time with or without
-        DST, give mktime that information.  */
-      if (pc.local_zones_seen)
-       tm.tm_isdst = pc.local_isdst;
-
-      tm0 = tm;
-
-      Start = mktime (&tm);
-
-      if (! mktime_ok (&tm0, &tm, Start))
-       {
-         if (! pc.zones_seen)
-           goto fail;
-         else
-           {
-             /* Guard against falsely reporting errors near the time_t
-                boundaries when parsing times in other time zones.  For
-                example, suppose the input string "1969-12-31 23:00:00 -0100",
-                the current time zone is 8 hours ahead of UTC, and the min
-                time_t value is 1970-01-01 00:00:00 UTC.  Then the min
-                localtime value is 1970-01-01 08:00:00, and mktime will
-                therefore fail on 1969-12-31 23:00:00.  To work around the
-                problem, set the time zone to 1 hour behind UTC temporarily
-                by setting TZ="XXX1:00" and try mktime again.  */
-
-             long int time_zone = pc.time_zone;
-             long int abs_time_zone = time_zone < 0 ? - time_zone : time_zone;
-             long int abs_time_zone_hour = abs_time_zone / 60;
-             int abs_time_zone_min = abs_time_zone % 60;
-             char tz1buf[sizeof "XXX+0:00"
-                         + sizeof pc.time_zone * CHAR_BIT / 3];
-             if (!tz_was_altered)
-               tz0 = get_tz (tz0buf);
-             sprintf (tz1buf, "XXX%s%ld:%02d", "-" + (time_zone < 0),
-                      abs_time_zone_hour, abs_time_zone_min);
-             if (setenv ("TZ", tz1buf, 1) != 0)
-               goto fail;
-             tz_was_altered = true;
-             tm = tm0;
-             Start = mktime (&tm);
-             if (! mktime_ok (&tm0, &tm, Start))
-               goto fail;
-           }
-       }
-
-      if (pc.days_seen && ! pc.dates_seen)
-       {
-         tm.tm_mday += ((pc.day_number - tm.tm_wday + 7) % 7
-                        + 7 * (pc.day_ordinal - (0 < pc.day_ordinal)));
-         tm.tm_isdst = -1;
-         Start = mktime (&tm);
-         if (Start == (time_t) -1)
-           goto fail;
-       }
-
-      /* Add relative date.  */
-      if (pc.rel.year | pc.rel.month | pc.rel.day)
-       {
-         int year = tm.tm_year + pc.rel.year;
-         int month = tm.tm_mon + pc.rel.month;
-         int day = tm.tm_mday + pc.rel.day;
-         if (((year < tm.tm_year) ^ (pc.rel.year < 0))
-             | ((month < tm.tm_mon) ^ (pc.rel.month < 0))
-             | ((day < tm.tm_mday) ^ (pc.rel.day < 0)))
-           goto fail;
-         tm.tm_year = year;
-         tm.tm_mon = month;
-         tm.tm_mday = day;
-         tm.tm_hour = tm0.tm_hour;
-         tm.tm_min = tm0.tm_min;
-         tm.tm_sec = tm0.tm_sec;
-         tm.tm_isdst = tm0.tm_isdst;
-         Start = mktime (&tm);
-         if (Start == (time_t) -1)
-           goto fail;
-       }
-
-      /* The only "output" of this if-block is an updated Start value,
-        so this block must follow others that clobber Start.  */
-      if (pc.zones_seen)
-       {
-         long int delta = pc.time_zone * 60;
-         time_t t1;
-#ifdef HAVE_TM_GMTOFF
-         delta -= tm.tm_gmtoff;
-#else
-         time_t t = Start;
-         struct tm const *gmt = gmtime (&t);
-         if (! gmt)
-           goto fail;
-         delta -= tm_diff (&tm, gmt);
-#endif
-         t1 = Start - delta;
-         if ((Start < t1) != (delta < 0))
-           goto fail;  /* time_t overflow */
-         Start = t1;
-       }
-
-      /* Add relative hours, minutes, and seconds.  On hosts that support
-        leap seconds, ignore the possibility of leap seconds; e.g.,
-        "+ 10 minutes" adds 600 seconds, even if one of them is a
-        leap second.  Typically this is not what the user wants, but it's
-        too hard to do it the other way, because the time zone indicator
-        must be applied before relative times, and if mktime is applied
-        again the time zone will be lost.  */
-      {
-       long int sum_ns = pc.seconds.tv_nsec + pc.rel.ns;
-       long int normalized_ns = (sum_ns % BILLION + BILLION) % BILLION;
-       time_t t0 = Start;
-       long int d1 = 60 * 60 * pc.rel.hour;
-       time_t t1 = t0 + d1;
-       long int d2 = 60 * pc.rel.minutes;
-       time_t t2 = t1 + d2;
-       long int d3 = pc.rel.seconds;
-       time_t t3 = t2 + d3;
-       long int d4 = (sum_ns - normalized_ns) / BILLION;
-       time_t t4 = t3 + d4;
-
-       if ((d1 / (60 * 60) ^ pc.rel.hour)
-           | (d2 / 60 ^ pc.rel.minutes)
-           | ((t1 < t0) ^ (d1 < 0))
-           | ((t2 < t1) ^ (d2 < 0))
-           | ((t3 < t2) ^ (d3 < 0))
-           | ((t4 < t3) ^ (d4 < 0)))
-         goto fail;
-
-       result->tv_sec = t4;
-       result->tv_nsec = normalized_ns;
-      }
-    }
-
-  goto done;
-
- fail:
-  ok = false;
- done:
-  if (tz_was_altered)
-    ok &= (tz0 ? setenv ("TZ", tz0, 1) : unsetenv ("TZ")) == 0;
-  if (tz0 != tz0buf)
-    free (tz0);
-  return ok;
-}
-
-#if TEST
-
-int
-main (int ac, char **av)
-{
-  char buff[BUFSIZ];
-
-  printf ("Enter date, or blank line to exit.\n\t> ");
-  fflush (stdout);
-
-  buff[BUFSIZ - 1] = '\0';
-  while (fgets (buff, BUFSIZ - 1, stdin) && buff[0])
-    {
-      struct timespec d;
-      struct tm const *tm;
-      if (! get_date (&d, buff, NULL))
-       printf ("Bad format - couldn't convert.\n");
-      else if (! (tm = localtime (&d.tv_sec)))
-       {
-         long int sec = d.tv_sec;
-         printf ("localtime (%ld) failed\n", sec);
-       }
-      else
-       {
-         int ns = d.tv_nsec;
-         printf ("%04ld-%02d-%02d %02d:%02d:%02d.%09d\n",
-                 tm->tm_year + 1900L, tm->tm_mon + 1, tm->tm_mday,
-                 tm->tm_hour, tm->tm_min, tm->tm_sec, ns);
-       }
-      printf ("\t> ");
-      fflush (stdout);
-    }
-  return 0;
-}
-#endif /* TEST */
diff --git a/lib/getdelim.c b/lib/getdelim.c
deleted file mode 100644 (file)
index 4cd1c11..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* getdelim.c --- Implementation of replacement getdelim function.
-   Copyright (C) 1994, 1996, 1997, 1998, 2001, 2003, 2005, 2006, 2007, 2008 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, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301, USA.  */
-
-/* Ported from glibc by Simon Josefsson. */
-
-#include <config.h>
-
-#include <stdio.h>
-
-#include <limits.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#ifndef SIZE_MAX
-# define SIZE_MAX ((size_t) -1)
-#endif
-#ifndef SSIZE_MAX
-# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2))
-#endif
-
-#if USE_UNLOCKED_IO
-# include "unlocked-io.h"
-# define getc_maybe_unlocked(fp)       getc(fp)
-#elif !HAVE_FLOCKFILE || !HAVE_FUNLOCKFILE || !HAVE_DECL_GETC_UNLOCKED
-# undef flockfile
-# undef funlockfile
-# define flockfile(x) ((void) 0)
-# define funlockfile(x) ((void) 0)
-# define getc_maybe_unlocked(fp)       getc(fp)
-#else
-# define getc_maybe_unlocked(fp)       getc_unlocked(fp)
-#endif
-
-/* Read up to (and including) a DELIMITER from FP into *LINEPTR (and
-   NUL-terminate it).  *LINEPTR is a pointer returned from malloc (or
-   NULL), pointing to *N characters of space.  It is realloc'ed as
-   necessary.  Returns the number of characters read (not including
-   the null terminator), or -1 on error or EOF.  */
-
-ssize_t
-getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp)
-{
-  ssize_t result;
-  size_t cur_len = 0;
-
-  if (lineptr == NULL || n == NULL || fp == NULL)
-    {
-      errno = EINVAL;
-      return -1;
-    }
-
-  flockfile (fp);
-
-  if (*lineptr == NULL || *n == 0)
-    {
-      char *new_lineptr;
-      *n = 120;
-      new_lineptr = (char *) realloc (*lineptr, *n);
-      if (new_lineptr == NULL)
-       {
-         result = -1;
-         goto unlock_return;
-       }
-      *lineptr = new_lineptr;
-    }
-
-  for (;;)
-    {
-      int i;
-
-      i = getc_maybe_unlocked (fp);
-      if (i == EOF)
-       {
-         result = -1;
-         break;
-       }
-
-      /* Make enough space for len+1 (for final NUL) bytes.  */
-      if (cur_len + 1 >= *n)
-       {
-         size_t needed_max =
-           SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX;
-         size_t needed = 2 * *n + 1;   /* Be generous. */
-         char *new_lineptr;
-
-         if (needed_max < needed)
-           needed = needed_max;
-         if (cur_len + 1 >= needed)
-           {
-             result = -1;
-             errno = EOVERFLOW;
-             goto unlock_return;
-           }
-
-         new_lineptr = (char *) realloc (*lineptr, needed);
-         if (new_lineptr == NULL)
-           {
-             result = -1;
-             goto unlock_return;
-           }
-
-         *lineptr = new_lineptr;
-         *n = needed;
-       }
-
-      (*lineptr)[cur_len] = i;
-      cur_len++;
-
-      if (i == delimiter)
-       break;
-    }
-  (*lineptr)[cur_len] = '\0';
-  result = cur_len ? cur_len : result;
-
- unlock_return:
-  funlockfile (fp); /* doesn't set errno */
-
-  return result;
-}
diff --git a/lib/getline.c b/lib/getline.c
deleted file mode 100644 (file)
index 6be04ef..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* getline.c --- Implementation of replacement getline function.
-   Copyright (C) 2005, 2006, 2007 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, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-   02110-1301, USA.  */
-
-/* Written by Simon Josefsson. */
-
-#include <config.h>
-
-#include <stdio.h>
-
-ssize_t
-getline (char **lineptr, size_t *n, FILE *stream)
-{
-  return getdelim (lineptr, n, '\n', stream);
-}
diff --git a/lib/getopt.c b/lib/getopt.c
deleted file mode 100644 (file)
index f1e6d1f..0000000
+++ /dev/null
@@ -1,1186 +0,0 @@
-/* Getopt for GNU.
-   NOTE: getopt is now 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,88,89,90,91,92,93,94,95,96,98,99,2000,2001,2002,2003,2004,2006,2008
-       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
-   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/>.  */
-\f
-#ifndef _LIBC
-# include <config.h>
-#endif
-
-#include "getopt.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#ifdef _LIBC
-# include <libintl.h>
-#else
-# include "gettext.h"
-# define _(msgid) gettext (msgid)
-#endif
-
-#if defined _LIBC && defined USE_IN_LIBIO
-# include <wchar.h>
-#endif
-
-#ifndef attribute_hidden
-# define attribute_hidden
-#endif
-
-/* Unlike standard Unix `getopt', functions like `getopt_long'
-   let the user intersperse the options with the other arguments.
-
-   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
-   disables permutation.
-   Then the application's behavior is completely standard.
-
-   GNU application programs can use a third alternative mode in which
-   they can distinguish the relative order of options and other arguments.  */
-
-#include "getopt_int.h"
-
-/* 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,
-   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'.
-
-   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
-   non-option elements that the caller should itself scan.
-
-   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.  */
-int optind = 1;
-
-/* Callers store zero here to inhibit the error message
-   for unrecognized options.  */
-
-int opterr = 1;
-
-/* Set to an option character which was unrecognized.
-   This must be initialized on some systems to avoid linking in the
-   system's own getopt implementation.  */
-
-int optopt = '?';
-
-/* Keep a global copy of all internal members of getopt_data.  */
-
-static struct _getopt_data getopt_data;
-
-\f
-#if defined HAVE_DECL_GETENV && !HAVE_DECL_GETENV
-extern char *getenv ();
-#endif
-\f
-#ifdef _LIBC
-/* Stored original parameters.
-   XXX This is no good solution.  We should rather copy the args so
-   that we can compare them later.  But we must not use malloc(3).  */
-extern int __libc_argc;
-extern char **__libc_argv;
-
-/* Bash 2.0 gives us an environment variable containing flags
-   indicating ARGV elements that should not be considered arguments.  */
-
-# ifdef USE_NONOPTION_FLAGS
-/* Defined in getopt_init.c  */
-extern char *__getopt_nonoption_flags;
-# endif
-
-# ifdef USE_NONOPTION_FLAGS
-#  define SWAP_FLAGS(ch1, ch2) \
-  if (d->__nonoption_flags_len > 0)                                          \
-    {                                                                        \
-      char __tmp = __getopt_nonoption_flags[ch1];                            \
-      __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2];         \
-      __getopt_nonoption_flags[ch2] = __tmp;                                 \
-    }
-# else
-#  define SWAP_FLAGS(ch1, ch2)
-# endif
-#else  /* !_LIBC */
-# define SWAP_FLAGS(ch1, ch2)
-#endif /* _LIBC */
-
-/* Exchange two adjacent subsequences of ARGV.
-   One subsequence is elements [first_nonopt,last_nonopt)
-   which contains all the non-options that have been skipped so far.
-   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
-   the new indices of the non-options in ARGV after they are moved.  */
-
-static void
-exchange (char **argv, struct _getopt_data *d)
-{
-  int bottom = d->__first_nonopt;
-  int middle = d->__last_nonopt;
-  int top = d->optind;
-  char *tem;
-
-  /* Exchange the shorter segment with the far end of the longer segment.
-     That puts the shorter segment into the right place.
-     It leaves the longer segment in the right place overall,
-     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'
-     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)
-    {
-      /* We must extend the array.  The user plays games with us and
-        presents new arguments.  */
-      char *new_str = malloc (top + 1);
-      if (new_str == NULL)
-       d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0;
-      else
-       {
-         memset (__mempcpy (new_str, __getopt_nonoption_flags,
-                            d->__nonoption_flags_max_len),
-                 '\0', top + 1 - d->__nonoption_flags_max_len);
-         d->__nonoption_flags_max_len = top + 1;
-         __getopt_nonoption_flags = new_str;
-       }
-    }
-#endif
-
-  while (top > middle && middle > bottom)
-    {
-      if (top - middle > middle - bottom)
-       {
-         /* Bottom segment is the short one.  */
-         int len = middle - bottom;
-         register int i;
-
-         /* Swap it with the top part of the top segment.  */
-         for (i = 0; i < len; i++)
-           {
-             tem = argv[bottom + i];
-             argv[bottom + i] = argv[top - (middle - bottom) + i];
-             argv[top - (middle - bottom) + i] = tem;
-             SWAP_FLAGS (bottom + i, top - (middle - bottom) + i);
-           }
-         /* Exclude the moved bottom segment from further swapping.  */
-         top -= len;
-       }
-      else
-       {
-         /* Top segment is the short one.  */
-         int len = top - middle;
-         register int i;
-
-         /* Swap it with the bottom part of the bottom segment.  */
-         for (i = 0; i < len; i++)
-           {
-             tem = argv[bottom + i];
-             argv[bottom + i] = argv[middle + i];
-             argv[middle + i] = tem;
-             SWAP_FLAGS (bottom + i, middle + i);
-           }
-         /* Exclude the moved top segment from further swapping.  */
-         bottom += len;
-       }
-    }
-
-  /* Update records for the slots the non-options now occupy.  */
-
-  d->__first_nonopt += (d->optind - d->__last_nonopt);
-  d->__last_nonopt = d->optind;
-}
-
-/* Initialize the internal data when the first call is made.  */
-
-static const char *
-_getopt_initialize (int argc, char **argv, const char *optstring,
-                   int posixly_correct, struct _getopt_data *d)
-{
-  /* Start processing options with ARGV-element 1 (since ARGV-element 0
-     is the program name); the sequence of previously skipped
-     non-option ARGV-elements is empty.  */
-
-  d->__first_nonopt = d->__last_nonopt = d->optind;
-
-  d->__nextchar = NULL;
-
-  d->__posixly_correct = posixly_correct || !!getenv ("POSIXLY_CORRECT");
-
-  /* Determine how to handle the ordering of options and nonoptions.  */
-
-  if (optstring[0] == '-')
-    {
-      d->__ordering = RETURN_IN_ORDER;
-      ++optstring;
-    }
-  else if (optstring[0] == '+')
-    {
-      d->__ordering = REQUIRE_ORDER;
-      ++optstring;
-    }
-  else if (d->__posixly_correct)
-    d->__ordering = REQUIRE_ORDER;
-  else
-    d->__ordering = PERMUTE;
-
-#if defined _LIBC && defined USE_NONOPTION_FLAGS
-  if (!d->__posixly_correct
-      && argc == __libc_argc && argv == __libc_argv)
-    {
-      if (d->__nonoption_flags_max_len == 0)
-       {
-         if (__getopt_nonoption_flags == NULL
-             || __getopt_nonoption_flags[0] == '\0')
-           d->__nonoption_flags_max_len = -1;
-         else
-           {
-             const char *orig_str = __getopt_nonoption_flags;
-             int len = d->__nonoption_flags_max_len = strlen (orig_str);
-             if (d->__nonoption_flags_max_len < argc)
-               d->__nonoption_flags_max_len = argc;
-             __getopt_nonoption_flags =
-               (char *) malloc (d->__nonoption_flags_max_len);
-             if (__getopt_nonoption_flags == NULL)
-               d->__nonoption_flags_max_len = -1;
-             else
-               memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
-                       '\0', d->__nonoption_flags_max_len - len);
-           }
-       }
-      d->__nonoption_flags_len = d->__nonoption_flags_max_len;
-    }
-  else
-    d->__nonoption_flags_len = 0;
-#endif
-
-  return optstring;
-}
-\f
-/* Scan elements of ARGV (whose length is ARGC) for option characters
-   given in OPTSTRING.
-
-   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'
-   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
-   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
-   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
-   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
-   wants an optional arg; if there is text in the current ARGV-element,
-   it is returned in `optarg', otherwise `optarg' is set to zero.
-
-   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 `-'.
-   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.
-
-   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.
-   It is only valid when a long-named option has been found by the most
-   recent call.
-
-   If LONG_ONLY is nonzero, '-' as well as '--' can introduce
-   long-named options.
-
-   If POSIXLY_CORRECT is nonzero, behave as if the POSIXLY_CORRECT
-   environment variable were set.  */
-
-int
-_getopt_internal_r (int argc, char **argv, const char *optstring,
-                   const struct option *longopts, int *longind,
-                   int long_only, int posixly_correct, struct _getopt_data *d)
-{
-  int print_errors = d->opterr;
-  if (optstring[0] == ':')
-    print_errors = 0;
-
-  if (argc < 1)
-    return -1;
-
-  d->optarg = NULL;
-
-  if (d->optind == 0 || !d->__initialized)
-    {
-      if (d->optind == 0)
-       d->optind = 1;  /* Don't scan ARGV[0], the program name.  */
-      optstring = _getopt_initialize (argc, argv, optstring,
-                                     posixly_correct, d);
-      d->__initialized = 1;
-    }
-
-  /* Test whether ARGV[optind] points to a non-option argument.
-     Either it does not have option syntax, or there is an environment flag
-     from the shell indicating it is not an option.  The later information
-     is only used when the used in the GNU libc.  */
-#if defined _LIBC && defined USE_NONOPTION_FLAGS
-# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0' \
-                     || (d->optind < d->__nonoption_flags_len                \
-                         && __getopt_nonoption_flags[d->optind] == '1'))
-#else
-# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0')
-#endif
-
-  if (d->__nextchar == NULL || *d->__nextchar == '\0')
-    {
-      /* Advance to the next ARGV-element.  */
-
-      /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
-        moved back by the user (who may also have changed the arguments).  */
-      if (d->__last_nonopt > d->optind)
-       d->__last_nonopt = d->optind;
-      if (d->__first_nonopt > d->optind)
-       d->__first_nonopt = d->optind;
-
-      if (d->__ordering == PERMUTE)
-       {
-         /* If we have just processed some options following some non-options,
-            exchange them so that the options come first.  */
-
-         if (d->__first_nonopt != d->__last_nonopt
-             && d->__last_nonopt != d->optind)
-           exchange ((char **) argv, d);
-         else if (d->__last_nonopt != d->optind)
-           d->__first_nonopt = d->optind;
-
-         /* Skip any additional non-options
-            and extend the range of non-options previously skipped.  */
-
-         while (d->optind < argc && NONOPTION_P)
-           d->optind++;
-         d->__last_nonopt = d->optind;
-       }
-
-      /* 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.  */
-
-      if (d->optind != argc && !strcmp (argv[d->optind], "--"))
-       {
-         d->optind++;
-
-         if (d->__first_nonopt != d->__last_nonopt
-             && d->__last_nonopt != d->optind)
-           exchange ((char **) argv, d);
-         else if (d->__first_nonopt == d->__last_nonopt)
-           d->__first_nonopt = d->optind;
-         d->__last_nonopt = argc;
-
-         d->optind = argc;
-       }
-
-      /* If we have done all the ARGV-elements, stop the scan
-        and back over any non-options that we skipped and permuted.  */
-
-      if (d->optind == argc)
-       {
-         /* Set the next-arg-index to point at the non-options
-            that we previously skipped, so the caller will digest them.  */
-         if (d->__first_nonopt != d->__last_nonopt)
-           d->optind = d->__first_nonopt;
-         return -1;
-       }
-
-      /* If we have come to a non-option and did not permute it,
-        either stop the scan or describe it to the caller and pass it by.  */
-
-      if (NONOPTION_P)
-       {
-         if (d->__ordering == REQUIRE_ORDER)
-           return -1;
-         d->optarg = argv[d->optind++];
-         return 1;
-       }
-
-      /* We have found another option-ARGV-element.
-        Skip the initial punctuation.  */
-
-      d->__nextchar = (argv[d->optind] + 1
-                 + (longopts != NULL && argv[d->optind][1] == '-'));
-    }
-
-  /* Decode the current option-ARGV-element.  */
-
-  /* Check whether the ARGV-element is a long option.
-
-     If long_only and the ARGV-element has the form "-f", where f is
-     a valid short option, don't consider it an abbreviated form of
-     a long option that starts with f.  Otherwise there would be no
-     way to give the -f short option.
-
-     On the other hand, if there's a long option "fubar" and
-     the ARGV-element is "-fu", do consider that an abbreviation of
-     the long option, just like "--fu", and not "-f" with arg "u".
-
-     This distinction seems to be the most useful approach.  */
-
-  if (longopts != NULL
-      && (argv[d->optind][1] == '-'
-         || (long_only && (argv[d->optind][2]
-                           || !strchr (optstring, argv[d->optind][1])))))
-    {
-      char *nameend;
-      const struct option *p;
-      const struct option *pfound = NULL;
-      int exact = 0;
-      int ambig = 0;
-      int indfound = -1;
-      int option_index;
-
-      for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++)
-       /* Do nothing.  */ ;
-
-      /* Test all long options for either exact match
-        or abbreviated matches.  */
-      for (p = longopts, option_index = 0; p->name; p++, option_index++)
-       if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar))
-         {
-           if ((unsigned int) (nameend - d->__nextchar)
-               == (unsigned int) strlen (p->name))
-             {
-               /* Exact match found.  */
-               pfound = p;
-               indfound = option_index;
-               exact = 1;
-               break;
-             }
-           else if (pfound == NULL)
-             {
-               /* First nonexact match found.  */
-               pfound = p;
-               indfound = option_index;
-             }
-           else if (long_only
-                    || pfound->has_arg != p->has_arg
-                    || pfound->flag != p->flag
-                    || pfound->val != p->val)
-             /* Second or later nonexact match found.  */
-             ambig = 1;
-         }
-
-      if (ambig && !exact)
-       {
-         if (print_errors)
-           {
-#if defined _LIBC && defined USE_IN_LIBIO
-             char *buf;
-
-             if (__asprintf (&buf, _("%s: option `%s' is ambiguous\n"),
-                             argv[0], argv[d->optind]) >= 0)
-               {
-                 _IO_flockfile (stderr);
-
-                 int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-                 ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
-
-                 __fxprintf (NULL, "%s", buf);
-
-                 ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-                 _IO_funlockfile (stderr);
-
-                 free (buf);
-               }
-#else
-             fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
-                      argv[0], argv[d->optind]);
-#endif
-           }
-         d->__nextchar += strlen (d->__nextchar);
-         d->optind++;
-         d->optopt = 0;
-         return '?';
-       }
-
-      if (pfound != NULL)
-       {
-         option_index = indfound;
-         d->optind++;
-         if (*nameend)
-           {
-             /* Don't test has_arg with >, because some C compilers don't
-                allow it to be used on enums.  */
-             if (pfound->has_arg)
-               d->optarg = nameend + 1;
-             else
-               {
-                 if (print_errors)
-                   {
-#if defined _LIBC && defined USE_IN_LIBIO
-                     char *buf;
-                     int n;
-#endif
-
-                     if (argv[d->optind - 1][1] == '-')
-                       {
-                         /* --option */
-#if defined _LIBC && defined USE_IN_LIBIO
-                         n = __asprintf (&buf, _("\
-%s: option `--%s' doesn't allow an argument\n"),
-                                         argv[0], pfound->name);
-#else
-                         fprintf (stderr, _("\
-%s: option `--%s' doesn't allow an argument\n"),
-                                  argv[0], pfound->name);
-#endif
-                       }
-                     else
-                       {
-                         /* +option or -option */
-#if defined _LIBC && defined USE_IN_LIBIO
-                         n = __asprintf (&buf, _("\
-%s: option `%c%s' doesn't allow an argument\n"),
-                                         argv[0], argv[d->optind - 1][0],
-                                         pfound->name);
-#else
-                         fprintf (stderr, _("\
-%s: option `%c%s' doesn't allow an argument\n"),
-                                  argv[0], argv[d->optind - 1][0],
-                                  pfound->name);
-#endif
-                       }
-
-#if defined _LIBC && defined USE_IN_LIBIO
-                     if (n >= 0)
-                       {
-                         _IO_flockfile (stderr);
-
-                         int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-                         ((_IO_FILE *) stderr)->_flags2
-                           |= _IO_FLAGS2_NOTCANCEL;
-
-                         __fxprintf (NULL, "%s", buf);
-
-                         ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-                         _IO_funlockfile (stderr);
-
-                         free (buf);
-                       }
-#endif
-                   }
-
-                 d->__nextchar += strlen (d->__nextchar);
-
-                 d->optopt = pfound->val;
-                 return '?';
-               }
-           }
-         else if (pfound->has_arg == 1)
-           {
-             if (d->optind < argc)
-               d->optarg = argv[d->optind++];
-             else
-               {
-                 if (print_errors)
-                   {
-#if defined _LIBC && defined USE_IN_LIBIO
-                     char *buf;
-
-                     if (__asprintf (&buf, _("\
-%s: option `%s' requires an argument\n"),
-                                     argv[0], argv[d->optind - 1]) >= 0)
-                       {
-                         _IO_flockfile (stderr);
-
-                         int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-                         ((_IO_FILE *) stderr)->_flags2
-                           |= _IO_FLAGS2_NOTCANCEL;
-
-                         __fxprintf (NULL, "%s", buf);
-
-                         ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-                         _IO_funlockfile (stderr);
-
-                         free (buf);
-                       }
-#else
-                     fprintf (stderr,
-                              _("%s: option `%s' requires an argument\n"),
-                              argv[0], argv[d->optind - 1]);
-#endif
-                   }
-                 d->__nextchar += strlen (d->__nextchar);
-                 d->optopt = pfound->val;
-                 return optstring[0] == ':' ? ':' : '?';
-               }
-           }
-         d->__nextchar += strlen (d->__nextchar);
-         if (longind != NULL)
-           *longind = option_index;
-         if (pfound->flag)
-           {
-             *(pfound->flag) = pfound->val;
-             return 0;
-           }
-         return pfound->val;
-       }
-
-      /* Can't find it as a long option.  If this is not getopt_long_only,
-        or the option starts with '--' or is not a valid short
-        option, then it's an error.
-        Otherwise interpret it as a short option.  */
-      if (!long_only || argv[d->optind][1] == '-'
-         || strchr (optstring, *d->__nextchar) == NULL)
-       {
-         if (print_errors)
-           {
-#if defined _LIBC && defined USE_IN_LIBIO
-             char *buf;
-             int n;
-#endif
-
-             if (argv[d->optind][1] == '-')
-               {
-                 /* --option */
-#if defined _LIBC && defined USE_IN_LIBIO
-                 n = __asprintf (&buf, _("%s: unrecognized option `--%s'\n"),
-                                 argv[0], d->__nextchar);
-#else
-                 fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
-                          argv[0], d->__nextchar);
-#endif
-               }
-             else
-               {
-                 /* +option or -option */
-#if defined _LIBC && defined USE_IN_LIBIO
-                 n = __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"),
-                                 argv[0], argv[d->optind][0], d->__nextchar);
-#else
-                 fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
-                          argv[0], argv[d->optind][0], d->__nextchar);
-#endif
-               }
-
-#if defined _LIBC && defined USE_IN_LIBIO
-             if (n >= 0)
-               {
-                 _IO_flockfile (stderr);
-
-                 int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-                 ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
-
-                 __fxprintf (NULL, "%s", buf);
-
-                 ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-                 _IO_funlockfile (stderr);
-
-                 free (buf);
-               }
-#endif
-           }
-         d->__nextchar = (char *) "";
-         d->optind++;
-         d->optopt = 0;
-         return '?';
-       }
-    }
-
-  /* Look at and handle the next short option-character.  */
-
-  {
-    char c = *d->__nextchar++;
-    char *temp = strchr (optstring, c);
-
-    /* Increment `optind' when we start to process its last character.  */
-    if (*d->__nextchar == '\0')
-      ++d->optind;
-
-    if (temp == NULL || c == ':')
-      {
-       if (print_errors)
-         {
-#if defined _LIBC && defined USE_IN_LIBIO
-             char *buf;
-             int n;
-#endif
-
-           if (d->__posixly_correct)
-             {
-               /* 1003.2 specifies the format of this message.  */
-#if defined _LIBC && defined USE_IN_LIBIO
-               n = __asprintf (&buf, _("%s: illegal option -- %c\n"),
-                               argv[0], c);
-#else
-               fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c);
-#endif
-             }
-           else
-             {
-#if defined _LIBC && defined USE_IN_LIBIO
-               n = __asprintf (&buf, _("%s: invalid option -- %c\n"),
-                               argv[0], c);
-#else
-               fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c);
-#endif
-             }
-
-#if defined _LIBC && defined USE_IN_LIBIO
-           if (n >= 0)
-             {
-               _IO_flockfile (stderr);
-
-               int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-               ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
-
-               __fxprintf (NULL, "%s", buf);
-
-               ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-               _IO_funlockfile (stderr);
-
-               free (buf);
-             }
-#endif
-         }
-       d->optopt = c;
-       return '?';
-      }
-    /* Convenience. Treat POSIX -W foo same as long option --foo */
-    if (temp[0] == 'W' && temp[1] == ';')
-      {
-       char *nameend;
-       const struct option *p;
-       const struct option *pfound = NULL;
-       int exact = 0;
-       int ambig = 0;
-       int indfound = 0;
-       int option_index;
-
-       /* This is an option that requires an argument.  */
-       if (*d->__nextchar != '\0')
-         {
-           d->optarg = d->__nextchar;
-           /* If we end this ARGV-element by taking the rest as an arg,
-              we must advance to the next element now.  */
-           d->optind++;
-         }
-       else if (d->optind == argc)
-         {
-           if (print_errors)
-             {
-               /* 1003.2 specifies the format of this message.  */
-#if defined _LIBC && defined USE_IN_LIBIO
-               char *buf;
-
-               if (__asprintf (&buf,
-                               _("%s: option requires an argument -- %c\n"),
-                               argv[0], c) >= 0)
-                 {
-                   _IO_flockfile (stderr);
-
-                   int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-                   ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
-
-                   __fxprintf (NULL, "%s", buf);
-
-                   ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-                   _IO_funlockfile (stderr);
-
-                   free (buf);
-                 }
-#else
-               fprintf (stderr, _("%s: option requires an argument -- %c\n"),
-                        argv[0], c);
-#endif
-             }
-           d->optopt = c;
-           if (optstring[0] == ':')
-             c = ':';
-           else
-             c = '?';
-           return c;
-         }
-       else
-         /* We already incremented `d->optind' once;
-            increment it again when taking next ARGV-elt as argument.  */
-         d->optarg = argv[d->optind++];
-
-       /* optarg is now the argument, see if it's in the
-          table of longopts.  */
-
-       for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '=';
-            nameend++)
-         /* Do nothing.  */ ;
-
-       /* Test all long options for either exact match
-          or abbreviated matches.  */
-       for (p = longopts, option_index = 0; p->name; p++, option_index++)
-         if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar))
-           {
-             if ((unsigned int) (nameend - d->__nextchar) == strlen (p->name))
-               {
-                 /* Exact match found.  */
-                 pfound = p;
-                 indfound = option_index;
-                 exact = 1;
-                 break;
-               }
-             else if (pfound == NULL)
-               {
-                 /* First nonexact match found.  */
-                 pfound = p;
-                 indfound = option_index;
-               }
-             else
-               /* Second or later nonexact match found.  */
-               ambig = 1;
-           }
-       if (ambig && !exact)
-         {
-           if (print_errors)
-             {
-#if defined _LIBC && defined USE_IN_LIBIO
-               char *buf;
-
-               if (__asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"),
-                               argv[0], argv[d->optind]) >= 0)
-                 {
-                   _IO_flockfile (stderr);
-
-                   int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-                   ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
-
-                   __fxprintf (NULL, "%s", buf);
-
-                   ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-                   _IO_funlockfile (stderr);
-
-                   free (buf);
-                 }
-#else
-               fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
-                        argv[0], argv[d->optind]);
-#endif
-             }
-           d->__nextchar += strlen (d->__nextchar);
-           d->optind++;
-           return '?';
-         }
-       if (pfound != NULL)
-         {
-           option_index = indfound;
-           if (*nameend)
-             {
-               /* Don't test has_arg with >, because some C compilers don't
-                  allow it to be used on enums.  */
-               if (pfound->has_arg)
-                 d->optarg = nameend + 1;
-               else
-                 {
-                   if (print_errors)
-                     {
-#if defined _LIBC && defined USE_IN_LIBIO
-                       char *buf;
-
-                       if (__asprintf (&buf, _("\
-%s: option `-W %s' doesn't allow an argument\n"),
-                                       argv[0], pfound->name) >= 0)
-                         {
-                           _IO_flockfile (stderr);
-
-                           int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-                           ((_IO_FILE *) stderr)->_flags2
-                             |= _IO_FLAGS2_NOTCANCEL;
-
-                           __fxprintf (NULL, "%s", buf);
-
-                           ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-                           _IO_funlockfile (stderr);
-
-                           free (buf);
-                         }
-#else
-                       fprintf (stderr, _("\
-%s: option `-W %s' doesn't allow an argument\n"),
-                                argv[0], pfound->name);
-#endif
-                     }
-
-                   d->__nextchar += strlen (d->__nextchar);
-                   return '?';
-                 }
-             }
-           else if (pfound->has_arg == 1)
-             {
-               if (d->optind < argc)
-                 d->optarg = argv[d->optind++];
-               else
-                 {
-                   if (print_errors)
-                     {
-#if defined _LIBC && defined USE_IN_LIBIO
-                       char *buf;
-
-                       if (__asprintf (&buf, _("\
-%s: option `%s' requires an argument\n"),
-                                       argv[0], argv[d->optind - 1]) >= 0)
-                         {
-                           _IO_flockfile (stderr);
-
-                           int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-                           ((_IO_FILE *) stderr)->_flags2
-                             |= _IO_FLAGS2_NOTCANCEL;
-
-                           __fxprintf (NULL, "%s", buf);
-
-                           ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-                           _IO_funlockfile (stderr);
-
-                           free (buf);
-                         }
-#else
-                       fprintf (stderr,
-                                _("%s: option `%s' requires an argument\n"),
-                                argv[0], argv[d->optind - 1]);
-#endif
-                     }
-                   d->__nextchar += strlen (d->__nextchar);
-                   return optstring[0] == ':' ? ':' : '?';
-                 }
-             }
-           d->__nextchar += strlen (d->__nextchar);
-           if (longind != NULL)
-             *longind = option_index;
-           if (pfound->flag)
-             {
-               *(pfound->flag) = pfound->val;
-               return 0;
-             }
-           return pfound->val;
-         }
-         d->__nextchar = NULL;
-         return 'W';   /* Let the application handle it.   */
-      }
-    if (temp[1] == ':')
-      {
-       if (temp[2] == ':')
-         {
-           /* This is an option that accepts an argument optionally.  */
-           if (*d->__nextchar != '\0')
-             {
-               d->optarg = d->__nextchar;
-               d->optind++;
-             }
-           else
-             d->optarg = NULL;
-           d->__nextchar = NULL;
-         }
-       else
-         {
-           /* This is an option that requires an argument.  */
-           if (*d->__nextchar != '\0')
-             {
-               d->optarg = d->__nextchar;
-               /* If we end this ARGV-element by taking the rest as an arg,
-                  we must advance to the next element now.  */
-               d->optind++;
-             }
-           else if (d->optind == argc)
-             {
-               if (print_errors)
-                 {
-                   /* 1003.2 specifies the format of this message.  */
-#if defined _LIBC && defined USE_IN_LIBIO
-                   char *buf;
-
-                   if (__asprintf (&buf, _("\
-%s: option requires an argument -- %c\n"),
-                                   argv[0], c) >= 0)
-                     {
-                       _IO_flockfile (stderr);
-
-                       int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
-                       ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
-
-                       __fxprintf (NULL, "%s", buf);
-
-                       ((_IO_FILE *) stderr)->_flags2 = old_flags2;
-                       _IO_funlockfile (stderr);
-
-                       free (buf);
-                     }
-#else
-                   fprintf (stderr,
-                            _("%s: option requires an argument -- %c\n"),
-                            argv[0], c);
-#endif
-                 }
-               d->optopt = c;
-               if (optstring[0] == ':')
-                 c = ':';
-               else
-                 c = '?';
-             }
-           else
-             /* We already incremented `optind' once;
-                increment it again when taking next ARGV-elt as argument.  */
-             d->optarg = argv[d->optind++];
-           d->__nextchar = NULL;
-         }
-      }
-    return c;
-  }
-}
-
-int
-_getopt_internal (int argc, char **argv, const char *optstring,
-                 const struct option *longopts, int *longind,
-                 int long_only, int posixly_correct)
-{
-  int result;
-
-  getopt_data.optind = optind;
-  getopt_data.opterr = opterr;
-
-  result = _getopt_internal_r (argc, argv, optstring, longopts, longind,
-                              long_only, posixly_correct, &getopt_data);
-
-  optind = getopt_data.optind;
-  optarg = getopt_data.optarg;
-  optopt = getopt_data.optopt;
-
-  return result;
-}
-
-/* glibc gets a LSB-compliant getopt.
-   Standalone applications get a POSIX-compliant getopt.  */
-#if _LIBC
-enum { POSIXLY_CORRECT = 0 };
-#else
-enum { POSIXLY_CORRECT = 1 };
-#endif
-
-int
-getopt (int argc, char *const *argv, const char *optstring)
-{
-  return _getopt_internal (argc, (char **) argv, optstring, NULL, NULL, 0,
-                          POSIXLY_CORRECT);
-}
-
-\f
-#ifdef TEST
-
-/* Compile with -DTEST to make an executable for use in testing
-   the above definition of `getopt'.  */
-
-int
-main (int argc, char **argv)
-{
-  int c;
-  int digit_optind = 0;
-
-  while (1)
-    {
-      int this_option_optind = optind ? optind : 1;
-
-      c = getopt (argc, argv, "abc:d:0123456789");
-      if (c == -1)
-       break;
-
-      switch (c)
-       {
-       case '0':
-       case '1':
-       case '2':
-       case '3':
-       case '4':
-       case '5':
-       case '6':
-       case '7':
-       case '8':
-       case '9':
-         if (digit_optind != 0 && digit_optind != this_option_optind)
-           printf ("digits occur in two different argv-elements.\n");
-         digit_optind = this_option_optind;
-         printf ("option %c\n", c);
-         break;
-
-       case 'a':
-         printf ("option a\n");
-         break;
-
-       case 'b':
-         printf ("option b\n");
-         break;
-
-       case 'c':
-         printf ("option c with value `%s'\n", optarg);
-         break;
-
-       case '?':
-         break;
-
-       default:
-         printf ("?? getopt returned character code 0%o ??\n", c);
-       }
-    }
-
-  if (optind < argc)
-    {
-      printf ("non-option ARGV-elements: ");
-      while (optind < argc)
-       printf ("%s ", argv[optind++]);
-      printf ("\n");
-    }
-
-  exit (0);
-}
-
-#endif /* TEST */
diff --git a/lib/getopt.in.h b/lib/getopt.in.h
deleted file mode 100644 (file)
index d2d3e6e..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-/* Declarations for getopt.
-   Copyright (C) 1989-1994,1996-1999,2001,2003,2004,2005,2006,2007
-   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
-   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 _GETOPT_H
-
-#ifndef __need_getopt
-# define _GETOPT_H 1
-#endif
-
-/* Standalone applications should #define __GETOPT_PREFIX to an
-   identifier that prefixes the external functions and variables
-   defined in this header.  When this happens, include the
-   headers that might declare getopt so that they will not cause
-   confusion if included after this file.  Then systematically rename
-   identifiers so that they do not collide with the system functions
-   and variables.  Renaming avoids problems with some compilers and
-   linkers.  */
-#if defined __GETOPT_PREFIX && !defined __need_getopt
-# include <stdlib.h>
-# include <stdio.h>
-# include <unistd.h>
-# undef __need_getopt
-# undef getopt
-# undef getopt_long
-# undef getopt_long_only
-# undef optarg
-# undef opterr
-# undef optind
-# undef optopt
-# define __GETOPT_CONCAT(x, y) x ## y
-# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
-# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
-# define getopt __GETOPT_ID (getopt)
-# define getopt_long __GETOPT_ID (getopt_long)
-# define getopt_long_only __GETOPT_ID (getopt_long_only)
-# define optarg __GETOPT_ID (optarg)
-# define opterr __GETOPT_ID (opterr)
-# define optind __GETOPT_ID (optind)
-# define optopt __GETOPT_ID (optopt)
-#endif
-
-/* Standalone applications get correct prototypes for getopt_long and
-   getopt_long_only; they declare "char **argv".  libc uses prototypes
-   with "char *const *argv" that are incorrect because getopt_long and
-   getopt_long_only can permute argv; this is required for backward
-   compatibility (e.g., for LSB 2.0.1).
-
-   This used to be `#if defined __GETOPT_PREFIX && !defined __need_getopt',
-   but it caused redefinition warnings if both unistd.h and getopt.h were
-   included, since unistd.h includes getopt.h having previously defined
-   __need_getopt.
-
-   The only place where __getopt_argv_const is used is in definitions
-   of getopt_long and getopt_long_only below, but these are visible
-   only if __need_getopt is not defined, so it is quite safe to rewrite
-   the conditional as follows:
-*/
-#if !defined __need_getopt
-# if defined __GETOPT_PREFIX
-#  define __getopt_argv_const /* empty */
-# else
-#  define __getopt_argv_const const
-# endif
-#endif
-
-/* If __GNU_LIBRARY__ is not already defined, either we are being used
-   standalone, or this is the first header included in the source file.
-   If we are being used with glibc, we need to include <features.h>, but
-   that does not exist if we are standalone.  So: if __GNU_LIBRARY__ is
-   not defined, include <ctype.h>, which will pull in <features.h> for us
-   if it's from glibc.  (Why ctype.h?  It's guaranteed to exist and it
-   doesn't flood the namespace with stuff the way some other headers do.)  */
-#if !defined __GNU_LIBRARY__
-# include <ctype.h>
-#endif
-
-#ifndef __THROW
-# ifndef __GNUC_PREREQ
-#  define __GNUC_PREREQ(maj, min) (0)
-# endif
-# if defined __cplusplus && __GNUC_PREREQ (2,8)
-#  define __THROW      throw ()
-# else
-#  define __THROW
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* 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,
-   each non-option ARGV-element is returned here.  */
-
-extern 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'.
-
-   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
-   non-option elements that the caller should itself scan.
-
-   Otherwise, `optind' communicates from one call to the next
-   how much of ARGV has been scanned so far.  */
-
-extern int optind;
-
-/* Callers store zero here to inhibit the error message `getopt' prints
-   for unrecognized options.  */
-
-extern int opterr;
-
-/* Set to an option character which was unrecognized.  */
-
-extern int optopt;
-
-#ifndef __need_getopt
-/* Describe the long-named options requested by the application.
-   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
-   of `struct option' terminated by an element containing a name which is
-   zero.
-
-   The field `has_arg' is:
-   no_argument         (or 0) if the option does not take an argument,
-   required_argument   (or 1) if the option requires an argument,
-   optional_argument   (or 2) if the option takes an optional argument.
-
-   If the field `flag' is not NULL, it points to a variable that is set
-   to the value given in the field `val' when the option is found, but
-   left unchanged if the option is not found.
-
-   To have a long-named option do something other than set an `int' to
-   a compiled-in constant, such as set a value from `optarg', set the
-   option's `flag' field to zero and its `val' field to a nonzero
-   value (the equivalent single-letter option character, if there is
-   one).  For long options that have a zero `flag' field, `getopt'
-   returns the contents of the `val' field.  */
-
-struct option
-{
-  const char *name;
-  /* has_arg can't be an enum because some compilers complain about
-     type mismatches in all the code that assumes it is an int.  */
-  int has_arg;
-  int *flag;
-  int val;
-};
-
-/* Names for the values of the `has_arg' field of `struct option'.  */
-
-# define no_argument           0
-# define required_argument     1
-# define optional_argument     2
-#endif /* need getopt */
-
-
-/* Get definitions and prototypes for functions to process the
-   arguments in ARGV (ARGC of them, minus the program name) for
-   options given in OPTS.
-
-   Return the option character from OPTS just read.  Return -1 when
-   there are no more options.  For unrecognized options, or options
-   missing arguments, `optopt' is set to the option letter, and '?' is
-   returned.
-
-   The OPTS string is a list of characters which are recognized option
-   letters, optionally followed by colons, specifying that that letter
-   takes an argument, to be placed in `optarg'.
-
-   If a letter in OPTS is followed by two colons, its argument is
-   optional.  This behavior is specific to the GNU `getopt'.
-
-   The argument `--' causes premature termination of argument
-   scanning, explicitly telling `getopt' that there are no more
-   options.
-
-   If OPTS begins with `-', then non-option arguments are treated as
-   arguments to the option '\1'.  This behavior is specific to the GNU
-   `getopt'.  If OPTS begins with `+', or POSIXLY_CORRECT is set in
-   the environment, then do not permute arguments.  */
-
-extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
-       __THROW;
-
-#ifndef __need_getopt
-extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
-                       const char *__shortopts,
-                       const struct option *__longopts, int *__longind)
-       __THROW;
-extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
-                            const char *__shortopts,
-                            const struct option *__longopts, int *__longind)
-       __THROW;
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-/* Make sure we later can get all the definitions and declarations.  */
-#undef __need_getopt
-
-#endif /* getopt.h */
diff --git a/lib/getopt1.c b/lib/getopt1.c
deleted file mode 100644 (file)
index d6a3ecf..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/* getopt_long and getopt_long_only entry points for GNU getopt.
-   Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98,2004,2006
-     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
-   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/>.  */
-\f
-#ifdef _LIBC
-# include <getopt.h>
-#else
-# include <config.h>
-# include "getopt.h"
-#endif
-#include "getopt_int.h"
-
-#include <stdio.h>
-
-/* This needs to come after some library #include
-   to get __GNU_LIBRARY__ defined.  */
-#ifdef __GNU_LIBRARY__
-#include <stdlib.h>
-#endif
-
-#ifndef        NULL
-#define NULL 0
-#endif
-
-int
-getopt_long (int argc, char *__getopt_argv_const *argv, const char *options,
-            const struct option *long_options, int *opt_index)
-{
-  return _getopt_internal (argc, (char **) argv, options, long_options,
-                          opt_index, 0, 0);
-}
-
-int
-_getopt_long_r (int argc, char **argv, const char *options,
-               const struct option *long_options, int *opt_index,
-               struct _getopt_data *d)
-{
-  return _getopt_internal_r (argc, argv, options, long_options, opt_index,
-                            0, 0, d);
-}
-
-/* Like getopt_long, but '-' as well as '--' can indicate a long option.
-   If an option that starts with '-' (not '--') doesn't match a long option,
-   but does match a short option, it is parsed as a short option
-   instead.  */
-
-int
-getopt_long_only (int argc, char *__getopt_argv_const *argv,
-                 const char *options,
-                 const struct option *long_options, int *opt_index)
-{
-  return _getopt_internal (argc, (char **) argv, options, long_options,
-                          opt_index, 1, 0);
-}
-
-int
-_getopt_long_only_r (int argc, char **argv, const char *options,
-                    const struct option *long_options, int *opt_index,
-                    struct _getopt_data *d)
-{
-  return _getopt_internal_r (argc, argv, options, long_options, opt_index,
-                            1, 0, d);
-}
-
-\f
-#ifdef TEST
-
-#include <stdio.h>
-
-int
-main (int argc, char **argv)
-{
-  int c;
-  int digit_optind = 0;
-
-  while (1)
-    {
-      int this_option_optind = optind ? optind : 1;
-      int option_index = 0;
-      static struct option long_options[] =
-      {
-       {"add", 1, 0, 0},
-       {"append", 0, 0, 0},
-       {"delete", 1, 0, 0},
-       {"verbose", 0, 0, 0},
-       {"create", 0, 0, 0},
-       {"file", 1, 0, 0},
-       {0, 0, 0, 0}
-      };
-
-      c = getopt_long (argc, argv, "abc:d:0123456789",
-                      long_options, &option_index);
-      if (c == -1)
-       break;
-
-      switch (c)
-       {
-       case 0:
-         printf ("option %s", long_options[option_index].name);
-         if (optarg)
-           printf (" with arg %s", optarg);
-         printf ("\n");
-         break;
-
-       case '0':
-       case '1':
-       case '2':
-       case '3':
-       case '4':
-       case '5':
-       case '6':
-       case '7':
-       case '8':
-       case '9':
-         if (digit_optind != 0 && digit_optind != this_option_optind)
-           printf ("digits occur in two different argv-elements.\n");
-         digit_optind = this_option_optind;
-         printf ("option %c\n", c);
-         break;
-
-       case 'a':
-         printf ("option a\n");
-         break;
-
-       case 'b':
-         printf ("option b\n");
-         break;
-
-       case 'c':
-         printf ("option c with value `%s'\n", optarg);
-         break;
-
-       case 'd':
-         printf ("option d with value `%s'\n", optarg);
-         break;
-
-       case '?':
-         break;
-
-       default:
-         printf ("?? getopt returned character code 0%o ??\n", c);
-       }
-    }
-
-  if (optind < argc)
-    {
-      printf ("non-option ARGV-elements: ");
-      while (optind < argc)
-       printf ("%s ", argv[optind++]);
-      printf ("\n");
-    }
-
-  exit (0);
-}
-
-#endif /* TEST */
diff --git a/lib/getopt_int.h b/lib/getopt_int.h
deleted file mode 100644 (file)
index 3c6628b..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/* Internal declarations for getopt.
-   Copyright (C) 1989-1994,1996-1999,2001,2003,2004
-   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
-   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 _GETOPT_INT_H
-#define _GETOPT_INT_H  1
-
-extern int _getopt_internal (int ___argc, char **___argv,
-                            const char *__shortopts,
-                            const struct option *__longopts, int *__longind,
-                            int __long_only, int __posixly_correct);
-
-\f
-/* Reentrant versions which can handle parsing multiple argument
-   vectors at the same time.  */
-
-/* Data type for reentrant functions.  */
-struct _getopt_data
-{
-  /* These have exactly the same meaning as the corresponding global
-     variables, except that they are used for the reentrant
-     versions of getopt.  */
-  int optind;
-  int opterr;
-  int optopt;
-  char *optarg;
-
-  /* Internal members.  */
-
-  /* True if the internal members have been initialized.  */
-  int __initialized;
-
-  /* The next char to be scanned in the option-element
-     in which the last option character we returned was found.
-     This allows us to pick up the scan where we left off.
-
-     If this is zero, or a null string, it means resume the scan
-     by advancing to the next ARGV-element.  */
-  char *__nextchar;
-
-  /* Describe how to deal with options that follow non-option ARGV-elements.
-
-     If the caller did not specify anything,
-     the default is REQUIRE_ORDER if the environment variable
-     POSIXLY_CORRECT is defined, PERMUTE otherwise.
-
-     REQUIRE_ORDER means don't recognize them as options;
-     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
-     of the list of option characters, or by calling getopt.
-
-     PERMUTE is the default.  We permute the contents of ARGV as we
-     scan, so that eventually all the non-options are at the end.
-     This allows options to be given in any order, even with programs
-     that were not written to expect this.
-
-     RETURN_IN_ORDER is an option available to programs that were
-     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
-     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.  */
-
-  enum
-    {
-      REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
-    } __ordering;
-
-  /* If the POSIXLY_CORRECT environment variable is set
-     or getopt was called.  */
-  int __posixly_correct;
-
-
-  /* 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.  */
-
-  int __first_nonopt;
-  int __last_nonopt;
-
-#if defined _LIBC && defined USE_NONOPTION_FLAGS
-  int __nonoption_flags_max_len;
-  int __nonoption_flags_len;
-# endif
-};
-
-/* The initializer is necessary to set OPTIND and OPTERR to their
-   default values and to clear the initialization flag.  */
-#define _GETOPT_DATA_INITIALIZER       { 1, 1 }
-
-extern int _getopt_internal_r (int ___argc, char **___argv,
-                              const char *__shortopts,
-                              const struct option *__longopts, int *__longind,
-                              int __long_only, int __posixly_correct,
-                              struct _getopt_data *__data);
-
-extern int _getopt_long_r (int ___argc, char **___argv,
-                          const char *__shortopts,
-                          const struct option *__longopts, int *__longind,
-                          struct _getopt_data *__data);
-
-extern int _getopt_long_only_r (int ___argc, char **___argv,
-                               const char *__shortopts,
-                               const struct option *__longopts,
-                               int *__longind,
-                               struct _getopt_data *__data);
-
-#endif /* getopt_int.h */
diff --git a/lib/getpagesize.c b/lib/getpagesize.c
deleted file mode 100644 (file)
index 5498aa9..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* getpagesize emulation for systems where it cannot be done in a C macro.
-
-   Copyright (C) 2007 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 and Martin Lambers.  */
-
-#include <config.h>
-
-/* Specification. */
-#include <unistd.h>
-
-/* This implementation is only for native Win32 systems.  */
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-
-int
-getpagesize (void)
-{
-  SYSTEM_INFO system_info;
-  GetSystemInfo (&system_info);
-  return system_info.dwPageSize;
-}
-
-#endif
diff --git a/lib/gettext.h b/lib/gettext.h
deleted file mode 100644 (file)
index 89b4feb..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-/* -*- 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 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _LIBGETTEXT_H
-#define _LIBGETTEXT_H 1
-
-/* NLS can be disabled through the configure --disable-nls option.  */
-#if ENABLE_NLS
-
-/* Get declarations of GNU message catalog functions.  */
-# include <libintl.h>
-
-/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by
-   the gettext() and ngettext() macros.  This is an alternative to calling
-   textdomain(), and is useful for libraries.  */
-# ifdef DEFAULT_TEXT_DOMAIN
-#  undef gettext
-#  define gettext(Msgid) \
-     dgettext (DEFAULT_TEXT_DOMAIN, Msgid)
-#  undef ngettext
-#  define ngettext(Msgid1, Msgid2, N) \
-     dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N)
-# endif
-
-#else
-
-/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
-   chokes if dcgettext is defined as a macro.  So include it now, to make
-   later inclusions of <locale.h> a NOP.  We don't include <libintl.h>
-   as well because people using "gettext.h" will not include <libintl.h>,
-   and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
-   is OK.  */
-#if defined(__sun)
-# include <locale.h>
-#endif
-
-/* Many header files from the libstdc++ coming with g++ 3.3 or newer include
-   <libintl.h>, which chokes if dcgettext is defined as a macro.  So include
-   it now, to make later inclusions of <libintl.h> a NOP.  */
-#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3)
-# include <cstdlib>
-# if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H
-#  include <libintl.h>
-# endif
-#endif
-
-/* Disabled NLS.
-   The casts to 'const char *' serve the purpose of producing warnings
-   for invalid uses of the value returned from these functions.
-   On pre-ANSI systems without 'const', the config.h file is supposed to
-   contain "#define const".  */
-# define gettext(Msgid) ((const char *) (Msgid))
-# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid))
-# define dcgettext(Domainname, Msgid, Category) \
-    ((void) (Category), dgettext (Domainname, Msgid))
-# define ngettext(Msgid1, Msgid2, N) \
-    ((N) == 1 \
-     ? ((void) (Msgid2), (const char *) (Msgid1)) \
-     : ((void) (Msgid1), (const char *) (Msgid2)))
-# define dngettext(Domainname, Msgid1, Msgid2, N) \
-    ((void) (Domainname), ngettext (Msgid1, Msgid2, N))
-# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
-    ((void) (Category), dngettext(Domainname, Msgid1, Msgid2, N))
-# define textdomain(Domainname) ((const char *) (Domainname))
-# define bindtextdomain(Domainname, Dirname) \
-    ((void) (Domainname), (const char *) (Dirname))
-# define bind_textdomain_codeset(Domainname, Codeset) \
-    ((void) (Domainname), (const char *) (Codeset))
-
-#endif
-
-/* A pseudo function call that serves as a marker for the automated
-   extraction of messages, but does not call gettext().  The run-time
-   translation is done at a different place in the code.
-   The argument, String, should be a literal string.  Concatenated strings
-   and other string expressions won't work.
-   The macro's expansion is not parenthesized, so that it is suitable as
-   initializer for static 'char[]' or 'const char[]' variables.  */
-#define gettext_noop(String) String
-
-/* The separator between msgctxt and msgid in a .mo file.  */
-#define GETTEXT_CONTEXT_GLUE "\004"
-
-/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a
-   MSGID.  MSGCTXT and MSGID must be string literals.  MSGCTXT should be
-   short and rarely need to change.
-   The letter 'p' stands for 'particular' or 'special'.  */
-#ifdef DEFAULT_TEXT_DOMAIN
-# define pgettext(Msgctxt, Msgid) \
-   pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
-#else
-# define pgettext(Msgctxt, Msgid) \
-   pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
-#endif
-#define dpgettext(Domainname, Msgctxt, Msgid) \
-  pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
-#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \
-  pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category)
-#ifdef DEFAULT_TEXT_DOMAIN
-# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
-   npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
-#else
-# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
-   npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
-#endif
-#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
-  npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
-#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \
-  npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category)
-
-#ifdef __GNUC__
-__inline
-#else
-#ifdef __cplusplus
-inline
-#endif
-#endif
-static const char *
-pgettext_aux (const char *domain,
-             const char *msg_ctxt_id, const char *msgid,
-             int category)
-{
-  const char *translation = dcgettext (domain, msg_ctxt_id, category);
-  if (translation == msg_ctxt_id)
-    return msgid;
-  else
-    return translation;
-}
-
-#ifdef __GNUC__
-__inline
-#else
-#ifdef __cplusplus
-inline
-#endif
-#endif
-static const char *
-npgettext_aux (const char *domain,
-              const char *msg_ctxt_id, const char *msgid,
-              const char *msgid_plural, unsigned long int n,
-              int category)
-{
-  const char *translation =
-    dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
-  if (translation == msg_ctxt_id || translation == msgid_plural)
-    return (n == 1 ? msgid : msgid_plural);
-  else
-    return translation;
-}
-
-/* The same thing extended for non-constant arguments.  Here MSGCTXT and MSGID
-   can be arbitrary expressions.  But for string literals these macros are
-   less efficient than those above.  */
-
-#include <string.h>
-
-#define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \
-  (((__GNUC__ >= 3 || __GNUG__ >= 2) && !__STRICT_ANSI__) \
-   /* || __STDC_VERSION__ >= 199901L */ )
-
-#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
-#include <stdlib.h>
-#endif
-
-#define pgettext_expr(Msgctxt, Msgid) \
-  dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES)
-#define dpgettext_expr(Domainname, Msgctxt, Msgid) \
-  dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES)
-
-#ifdef __GNUC__
-__inline
-#else
-#ifdef __cplusplus
-inline
-#endif
-#endif
-static const char *
-dcpgettext_expr (const char *domain,
-                const char *msgctxt, const char *msgid,
-                int category)
-{
-  size_t msgctxt_len = strlen (msgctxt) + 1;
-  size_t msgid_len = strlen (msgid) + 1;
-  const char *translation;
-#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
-  char msg_ctxt_id[msgctxt_len + msgid_len];
-#else
-  char buf[1024];
-  char *msg_ctxt_id =
-    (msgctxt_len + msgid_len <= sizeof (buf)
-     ? buf
-     : (char *) malloc (msgctxt_len + msgid_len));
-  if (msg_ctxt_id != NULL)
-#endif
-    {
-      memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
-      msg_ctxt_id[msgctxt_len - 1] = '\004';
-      memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
-      translation = dcgettext (domain, msg_ctxt_id, category);
-#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
-      if (msg_ctxt_id != buf)
-       free (msg_ctxt_id);
-#endif
-      if (translation != msg_ctxt_id)
-       return translation;
-    }
-  return msgid;
-}
-
-#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \
-  dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
-#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
-  dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
-
-#ifdef __GNUC__
-__inline
-#else
-#ifdef __cplusplus
-inline
-#endif
-#endif
-static const char *
-dcnpgettext_expr (const char *domain,
-                 const char *msgctxt, const char *msgid,
-                 const char *msgid_plural, unsigned long int n,
-                 int category)
-{
-  size_t msgctxt_len = strlen (msgctxt) + 1;
-  size_t msgid_len = strlen (msgid) + 1;
-  const char *translation;
-#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
-  char msg_ctxt_id[msgctxt_len + msgid_len];
-#else
-  char buf[1024];
-  char *msg_ctxt_id =
-    (msgctxt_len + msgid_len <= sizeof (buf)
-     ? buf
-     : (char *) malloc (msgctxt_len + msgid_len));
-  if (msg_ctxt_id != NULL)
-#endif
-    {
-      memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
-      msg_ctxt_id[msgctxt_len - 1] = '\004';
-      memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
-      translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
-#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
-      if (msg_ctxt_id != buf)
-       free (msg_ctxt_id);
-#endif
-      if (!(translation == msg_ctxt_id || translation == msgid_plural))
-       return translation;
-    }
-  return (n == 1 ? msgid : msgid_plural);
-}
-
-#endif /* _LIBGETTEXT_H */
diff --git a/lib/gettime.c b/lib/gettime.c
deleted file mode 100644 (file)
index 1b85336..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/* gettime -- get the system clock
-
-   Copyright (C) 2002, 2004, 2005, 2006, 2007 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.  */
-
-#include <config.h>
-
-#include "timespec.h"
-
-#include <sys/time.h>
-
-/* Get the system time into *TS.  */
-
-void
-gettime (struct timespec *ts)
-{
-#if HAVE_NANOTIME
-  nanotime (ts);
-#else
-
-# if defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME
-  if (clock_gettime (CLOCK_REALTIME, ts) == 0)
-    return;
-# endif
-
-  {
-    struct timeval tv;
-    gettimeofday (&tv, NULL);
-    ts->tv_sec = tv.tv_sec;
-    ts->tv_nsec = tv.tv_usec * 1000;
-  }
-
-#endif
-}
diff --git a/lib/gettimeofday.c b/lib/gettimeofday.c
deleted file mode 100644 (file)
index 1d977b1..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Provide gettimeofday for systems that don't have it or for which it's broken.
-
-   Copyright (C) 2001, 2002, 2003, 2005, 2006, 2007 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* written by Jim Meyering */
-
-#include <config.h>
-
-/* Specification.  */
-#include <sys/time.h>
-
-#include <time.h>
-
-#if HAVE_SYS_TIMEB_H
-# include <sys/timeb.h>
-#endif
-
-#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME
-
-/* Work around the bug in some systems whereby gettimeofday clobbers
-   the static buffer that localtime uses for its return value.  The
-   gettimeofday function from Mac OS X 10.0.4 (i.e., Darwin 1.3.7) has
-   this problem.  The tzset replacement is necessary for at least
-   Solaris 2.5, 2.5.1, and 2.6.  */
-
-static struct tm tm_zero_buffer;
-static struct tm *localtime_buffer_addr = &tm_zero_buffer;
-
-#undef localtime
-extern struct tm *localtime (time_t const *);
-
-#undef gmtime
-extern struct tm *gmtime (time_t const *);
-
-/* This is a wrapper for localtime.  It is used only on systems for which
-   gettimeofday clobbers the static buffer used for localtime's result.
-
-   On the first call, record the address of the static buffer that
-   localtime uses for its result.  */
-
-struct tm *
-rpl_localtime (time_t const *timep)
-{
-  struct tm *tm = localtime (timep);
-
-  if (localtime_buffer_addr == &tm_zero_buffer)
-    localtime_buffer_addr = tm;
-
-  return tm;
-}
-
-/* Same as above, since gmtime and localtime use the same buffer.  */
-struct tm *
-rpl_gmtime (time_t const *timep)
-{
-  struct tm *tm = gmtime (timep);
-
-  if (localtime_buffer_addr == &tm_zero_buffer)
-    localtime_buffer_addr = tm;
-
-  return tm;
-}
-
-#endif /* GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME */
-
-#if TZSET_CLOBBERS_LOCALTIME
-
-#undef tzset
-extern void tzset (void);
-
-/* This is a wrapper for tzset, for systems on which tzset may clobber
-   the static buffer used for localtime's result.  */
-void
-rpl_tzset (void)
-{
-  /* Save and restore the contents of the buffer used for localtime's
-     result around the call to tzset.  */
-  struct tm save = *localtime_buffer_addr;
-  tzset ();
-  *localtime_buffer_addr = save;
-}
-#endif
-
-/* This is a wrapper for gettimeofday.  It is used only on systems
-   that lack this function, or whose implementation of this function
-   causes problems.  */
-
-int
-rpl_gettimeofday (struct timeval *restrict tv, void *restrict tz)
-{
-#undef gettimeofday
-#if HAVE_GETTIMEOFDAY
-# if GETTIMEOFDAY_CLOBBERS_LOCALTIME
-  /* Save and restore the contents of the buffer used for localtime's
-     result around the call to gettimeofday.  */
-  struct tm save = *localtime_buffer_addr;
-# endif
-
-  int result = gettimeofday (tv, tz);
-
-# if GETTIMEOFDAY_CLOBBERS_LOCALTIME
-  *localtime_buffer_addr = save;
-# endif
-
-  return result;
-
-#else
-
-# if HAVE__FTIME
-
-  struct _timeb timebuf;
-  _ftime (&timebuf);
-  tv->tv_sec = timebuf.time;
-  tv->tv_usec = timebuf.millitm * 1000;
-
-# else
-
-#  if !defined OK_TO_USE_1S_CLOCK
-#   error "Only 1-second nominal clock resolution found.  Is that intended?" \
-          "If so, compile with the -DOK_TO_USE_1S_CLOCK option."
-#  endif
-  tv->tv_sec = time (NULL);
-  tv->tv_usec = 0;
-
-# endif
-
-  return 0;
-
-#endif
-}
diff --git a/lib/gnulib.mk b/lib/gnulib.mk
deleted file mode 100644 (file)
index 7f94093..0000000
+++ /dev/null
@@ -1,1993 +0,0 @@
-## DO NOT EDIT! GENERATED AUTOMATICALLY!
-## Process this file with automake to produce Makefile.in.
-# Copyright (C) 2002-2009 Free Software Foundation, Inc.
-#
-# This file is free software, distributed under the terms of the GNU
-# General Public License.  As a special exception to the GNU General
-# Public License, this file may be distributed as part of a program
-# that contains a configuration script generated by Autoconf, under
-# the same distribution terms as the rest of that program.
-#
-# Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=. --local-dir=gl --lib=libtar --source-base=.#bootmp/lib --m4-base=.#bootmp/m4 --doc-base=.#bootmp/doc --tests-base=.#bootmp/tests --aux-dir=.#bootmp/build-aux --avoid=lock --no-libtool --macro-prefix=gl alloca argmatch argp backupfile closeout configmake dirname error exclude exitfail fileblocks fnmatch-gnu fseeko ftruncate full-write getdate getline getopt getpagesize gettext gettime hash human inttostr inttypes lchown localcharset mkdtemp modechange obstack quote quotearg rpmatch safe-read save-cwd savedir setenv snprintf stat-time stdbool stdint stpcpy strdup-posix strerror strtol strtoul timespec unlinkdir unlocked-io utime utimens version-etc-fsf xalloc xalloc-die xgetcwd xstrtoumax
-
-AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects
-
-SUBDIRS =
-noinst_HEADERS =
-noinst_LIBRARIES =
-noinst_LTLIBRARIES =
-EXTRA_DIST =
-BUILT_SOURCES =
-SUFFIXES =
-MOSTLYCLEANFILES = core *.stackdump
-MOSTLYCLEANDIRS =
-CLEANFILES =
-DISTCLEANFILES =
-MAINTAINERCLEANFILES =
-
-AM_CPPFLAGS =
-
-noinst_LIBRARIES += libtar.a
-
-libtar_a_SOURCES =
-libtar_a_LIBADD = $(gl_LIBOBJS)
-libtar_a_DEPENDENCIES = $(gl_LIBOBJS)
-EXTRA_libtar_a_SOURCES =
-
-## begin gnulib module alloca
-
-
-EXTRA_DIST += alloca.c
-
-EXTRA_libtar_a_SOURCES += alloca.c
-
-libtar_a_LIBADD += @ALLOCA@
-libtar_a_DEPENDENCIES += @ALLOCA@
-## end   gnulib module alloca
-
-## begin gnulib module alloca-opt
-
-BUILT_SOURCES += $(ALLOCA_H)
-
-# We need the following in order to create <alloca.h> when the system
-# doesn't have one that works with the given compiler.
-alloca.h: alloca.in.h
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         cat $(srcdir)/alloca.in.h; \
-       } > $@-t
-       mv -f $@-t $@
-MOSTLYCLEANFILES += alloca.h alloca.h-t
-
-EXTRA_DIST += alloca.in.h
-
-## end   gnulib module alloca-opt
-
-## begin gnulib module argmatch
-
-
-EXTRA_DIST += argmatch.c argmatch.h
-
-EXTRA_libtar_a_SOURCES += argmatch.c
-
-## end   gnulib module argmatch
-
-## begin gnulib module argp
-
-libtar_a_SOURCES += argp.h argp-ba.c argp-eexst.c \
-           argp-fmtstream.c argp-fmtstream.h argp-fs-xinl.c argp-help.c \
-           argp-namefrob.h argp-parse.c argp-pin.c argp-pv.c argp-pvh.c \
-           argp-xinl.c
-
-## end   gnulib module argp
-
-## begin gnulib module backupfile
-
-
-EXTRA_DIST += backupfile.c backupfile.h
-
-EXTRA_libtar_a_SOURCES += backupfile.c
-
-## end   gnulib module backupfile
-
-## begin gnulib module btowc
-
-
-EXTRA_DIST += btowc.c
-
-EXTRA_libtar_a_SOURCES += btowc.c
-
-## end   gnulib module btowc
-
-## begin gnulib module c-ctype
-
-libtar_a_SOURCES += c-ctype.h c-ctype.c
-
-## end   gnulib module c-ctype
-
-## begin gnulib module canonicalize-lgpl
-
-
-EXTRA_DIST += canonicalize-lgpl.c canonicalize.h
-
-EXTRA_libtar_a_SOURCES += canonicalize-lgpl.c
-
-## end   gnulib module canonicalize-lgpl
-
-## begin gnulib module chdir-long
-
-
-EXTRA_DIST += chdir-long.c chdir-long.h
-
-EXTRA_libtar_a_SOURCES += chdir-long.c
-
-## end   gnulib module chdir-long
-
-## begin gnulib module chown
-
-
-EXTRA_DIST += chown.c fchown-stub.c
-
-EXTRA_libtar_a_SOURCES += chown.c fchown-stub.c
-
-## end   gnulib module chown
-
-## begin gnulib module close
-
-
-EXTRA_DIST += close.c w32sock.h
-
-EXTRA_libtar_a_SOURCES += close.c
-
-## end   gnulib module close
-
-## begin gnulib module close-stream
-
-
-EXTRA_DIST += close-stream.c close-stream.h
-
-EXTRA_libtar_a_SOURCES += close-stream.c
-
-## end   gnulib module close-stream
-
-## begin gnulib module closeout
-
-
-EXTRA_DIST += closeout.c closeout.h
-
-EXTRA_libtar_a_SOURCES += closeout.c
-
-## end   gnulib module closeout
-
-## begin gnulib module configmake
-
-# Retrieve values of the variables through 'configure' followed by
-# 'make', not directly through 'configure', so that a user who
-# sets some of these variables consistently on the 'make' command
-# line gets correct results.
-#
-# One advantage of this approach, compared to the classical
-# approach of adding -DLIBDIR=\"$(libdir)\" etc. to AM_CPPFLAGS,
-# is that it protects against the use of undefined variables.
-# If, say, $(libdir) is not set in the Makefile, LIBDIR is not
-# defined by this module, and code using LIBDIR gives a
-# compilation error.
-#
-# Another advantage is that 'make' output is shorter.
-#
-# Listed in the same order as the GNU makefile conventions.
-# The Automake-defined pkg* macros are appended, in the order
-# listed in the Automake 1.10a+ documentation.
-configmake.h: Makefile
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         echo '#define PREFIX "$(prefix)"'; \
-         echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
-         echo '#define BINDIR "$(bindir)"'; \
-         echo '#define SBINDIR "$(sbindir)"'; \
-         echo '#define LIBEXECDIR "$(libexecdir)"'; \
-         echo '#define DATAROOTDIR "$(datarootdir)"'; \
-         echo '#define DATADIR "$(datadir)"'; \
-         echo '#define SYSCONFDIR "$(sysconfdir)"'; \
-         echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \
-         echo '#define LOCALSTATEDIR "$(localstatedir)"'; \
-         echo '#define INCLUDEDIR "$(includedir)"'; \
-         echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \
-         echo '#define DOCDIR "$(docdir)"'; \
-         echo '#define INFODIR "$(infodir)"'; \
-         echo '#define HTMLDIR "$(htmldir)"'; \
-         echo '#define DVIDIR "$(dvidir)"'; \
-         echo '#define PDFDIR "$(pdfdir)"'; \
-         echo '#define PSDIR "$(psdir)"'; \
-         echo '#define LIBDIR "$(libdir)"'; \
-         echo '#define LISPDIR "$(lispdir)"'; \
-         echo '#define LOCALEDIR "$(localedir)"'; \
-         echo '#define MANDIR "$(mandir)"'; \
-         echo '#define MANEXT "$(manext)"'; \
-         echo '#define PKGDATADIR "$(pkgdatadir)"'; \
-         echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \
-         echo '#define PKGLIBDIR "$(pkglibdir)"'; \
-         echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \
-       } | sed '/""/d' > $@-t
-       mv $@-t $@
-BUILT_SOURCES += configmake.h
-CLEANFILES += configmake.h configmake.h-t
-
-## end   gnulib module configmake
-
-## begin gnulib module dirent
-
-BUILT_SOURCES += $(DIRENT_H)
-
-# We need the following in order to create <dirent.h> when the system
-# doesn't have one that works with the given compiler.
-dirent.h: dirent.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_DIRENT_H''@|$(NEXT_DIRENT_H)|g' \
-             -e 's|@''GNULIB_DIRFD''@|$(GNULIB_DIRFD)|g' \
-             -e 's|@''GNULIB_SCANDIR''@|$(GNULIB_SCANDIR)|g' \
-             -e 's|@''GNULIB_ALPHASORT''@|$(GNULIB_ALPHASORT)|g' \
-             -e 's|@''HAVE_DECL_DIRFD''@|$(HAVE_DECL_DIRFD)|g' \
-             -e 's|@''HAVE_SCANDIR''@|$(HAVE_SCANDIR)|g' \
-             -e 's|@''HAVE_ALPHASORT''@|$(HAVE_ALPHASORT)|g' \
-             -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \
-             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
-             < $(srcdir)/dirent.in.h; \
-       } > $@-t
-       mv $@-t $@
-MOSTLYCLEANFILES += dirent.h dirent.h-t
-
-EXTRA_DIST += dirent.in.h
-
-## end   gnulib module dirent
-
-## begin gnulib module dirfd
-
-
-EXTRA_DIST += dirfd.c
-
-EXTRA_libtar_a_SOURCES += dirfd.c
-
-## end   gnulib module dirfd
-
-## begin gnulib module dirname
-
-
-EXTRA_DIST += basename.c dirname.c dirname.h stripslash.c
-
-EXTRA_libtar_a_SOURCES += basename.c dirname.c stripslash.c
-
-## end   gnulib module dirname
-
-## begin gnulib module dup2
-
-
-EXTRA_DIST += dup2.c
-
-EXTRA_libtar_a_SOURCES += dup2.c
-
-## end   gnulib module dup2
-
-## begin gnulib module errno
-
-BUILT_SOURCES += $(ERRNO_H)
-
-# We need the following in order to create <errno.h> when the system
-# doesn't have one that is POSIX compliant.
-errno.h: errno.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \
-             -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \
-             -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \
-             -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \
-             -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \
-             -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \
-             -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \
-             < $(srcdir)/errno.in.h; \
-       } > $@-t
-       mv $@-t $@
-MOSTLYCLEANFILES += errno.h errno.h-t
-
-EXTRA_DIST += errno.in.h
-
-## end   gnulib module errno
-
-## begin gnulib module error
-
-
-EXTRA_DIST += error.c error.h
-
-EXTRA_libtar_a_SOURCES += error.c
-
-## end   gnulib module error
-
-## begin gnulib module exclude
-
-
-EXTRA_DIST += exclude.c exclude.h
-
-EXTRA_libtar_a_SOURCES += exclude.c
-
-## end   gnulib module exclude
-
-## begin gnulib module exitfail
-
-
-EXTRA_DIST += exitfail.c exitfail.h
-
-EXTRA_libtar_a_SOURCES += exitfail.c
-
-## end   gnulib module exitfail
-
-## begin gnulib module fchdir
-
-
-EXTRA_DIST += fchdir.c
-
-EXTRA_libtar_a_SOURCES += fchdir.c
-
-## end   gnulib module fchdir
-
-## begin gnulib module fclose
-
-
-EXTRA_DIST += fclose.c
-
-EXTRA_libtar_a_SOURCES += fclose.c
-
-## end   gnulib module fclose
-
-## begin gnulib module fcntl
-
-BUILT_SOURCES += $(FCNTL_H)
-
-# We need the following in order to create <fcntl.h> when the system
-# doesn't have one that works with the given compiler.
-fcntl.h: fcntl.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \
-             -e 's|@''GNULIB_OPEN''@|$(GNULIB_OPEN)|g' \
-             -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \
-             < $(srcdir)/fcntl.in.h; \
-       } > $@-t
-       mv $@-t $@
-MOSTLYCLEANFILES += fcntl.h fcntl.h-t
-
-EXTRA_DIST += fcntl.in.h
-
-## end   gnulib module fcntl
-
-## begin gnulib module fcntl-safer
-
-
-EXTRA_DIST += creat-safer.c fcntl--.h fcntl-safer.h open-safer.c
-
-EXTRA_libtar_a_SOURCES += creat-safer.c open-safer.c
-
-## end   gnulib module fcntl-safer
-
-## begin gnulib module fileblocks
-
-
-EXTRA_DIST += fileblocks.c
-
-EXTRA_libtar_a_SOURCES += fileblocks.c
-
-## end   gnulib module fileblocks
-
-## begin gnulib module float
-
-BUILT_SOURCES += $(FLOAT_H)
-
-# We need the following in order to create <float.h> when the system
-# doesn't have one that works with the given compiler.
-float.h: float.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \
-             < $(srcdir)/float.in.h; \
-       } > $@-t
-       mv $@-t $@
-MOSTLYCLEANFILES += float.h float.h-t
-
-EXTRA_DIST += float.in.h
-
-## end   gnulib module float
-
-## begin gnulib module fnmatch
-
-BUILT_SOURCES += $(FNMATCH_H)
-
-# We need the following in order to create <fnmatch.h> when the system
-# doesn't have one that supports the required API.
-fnmatch.h: fnmatch.in.h
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         cat $(srcdir)/fnmatch.in.h; \
-       } > $@-t
-       mv -f $@-t $@
-MOSTLYCLEANFILES += fnmatch.h fnmatch.h-t
-
-EXTRA_DIST += fnmatch.c fnmatch.in.h fnmatch_loop.c
-
-EXTRA_libtar_a_SOURCES += fnmatch.c fnmatch_loop.c
-
-## end   gnulib module fnmatch
-
-## begin gnulib module fpending
-
-
-EXTRA_DIST += fpending.c fpending.h
-
-EXTRA_libtar_a_SOURCES += fpending.c
-
-## end   gnulib module fpending
-
-## begin gnulib module fseeko
-
-
-EXTRA_DIST += fseeko.c stdio-impl.h
-
-EXTRA_libtar_a_SOURCES += fseeko.c
-
-## end   gnulib module fseeko
-
-## begin gnulib module ftruncate
-
-
-EXTRA_DIST += ftruncate.c
-
-EXTRA_libtar_a_SOURCES += ftruncate.c
-
-## end   gnulib module ftruncate
-
-## begin gnulib module full-write
-
-libtar_a_SOURCES += full-write.h full-write.c
-
-## end   gnulib module full-write
-
-## begin gnulib module getcwd
-
-
-EXTRA_DIST += getcwd.c
-
-EXTRA_libtar_a_SOURCES += getcwd.c
-
-## end   gnulib module getcwd
-
-## begin gnulib module getdate
-
-libtar_a_SOURCES += getdate.y
-BUILT_SOURCES += getdate.c
-MAINTAINERCLEANFILES += getdate.c
-EXTRA_DIST += getdate.c
-
-EXTRA_DIST += getdate.h
-
-## end   gnulib module getdate
-
-## begin gnulib module getdelim
-
-
-EXTRA_DIST += getdelim.c
-
-EXTRA_libtar_a_SOURCES += getdelim.c
-
-## end   gnulib module getdelim
-
-## begin gnulib module getline
-
-
-EXTRA_DIST += getline.c
-
-EXTRA_libtar_a_SOURCES += getline.c
-
-## end   gnulib module getline
-
-## begin gnulib module getopt
-
-BUILT_SOURCES += $(GETOPT_H)
-
-# We need the following in order to create <getopt.h> when the system
-# doesn't have one that works with the given compiler.
-getopt.h: getopt.in.h
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         cat $(srcdir)/getopt.in.h; \
-       } > $@-t
-       mv -f $@-t $@
-MOSTLYCLEANFILES += getopt.h getopt.h-t
-
-EXTRA_DIST += getopt.c getopt.in.h getopt1.c getopt_int.h
-
-EXTRA_libtar_a_SOURCES += getopt.c getopt1.c
-
-## end   gnulib module getopt
-
-## begin gnulib module getpagesize
-
-
-EXTRA_DIST += getpagesize.c
-
-EXTRA_libtar_a_SOURCES += getpagesize.c
-
-## end   gnulib module getpagesize
-
-## begin gnulib module gettext
-
-# This is for those projects which use "gettextize --intl" to put a source-code
-# copy of libintl into their package. In such projects, every Makefile.am needs
-# -I$(top_builddir)/intl, so that <libintl.h> can be found in this directory.
-# For the Makefile.ams in other directories it is the maintainer's
-# responsibility; for the one from gnulib we do it here.
-# This option has no effect when the user disables NLS (because then the intl
-# directory contains no libintl.h file) or when the project does not use
-# "gettextize --intl".
-#AM_CPPFLAGS += -I$(top_builddir)/intl
-
-EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath
-
-## end   gnulib module gettext
-
-## begin gnulib module gettext-h
-
-libtar_a_SOURCES += gettext.h
-
-## end   gnulib module gettext-h
-
-## begin gnulib module gettime
-
-
-EXTRA_DIST += gettime.c
-
-EXTRA_libtar_a_SOURCES += gettime.c
-
-## end   gnulib module gettime
-
-## begin gnulib module gettimeofday
-
-
-EXTRA_DIST += gettimeofday.c
-
-EXTRA_libtar_a_SOURCES += gettimeofday.c
-
-## end   gnulib module gettimeofday
-
-## begin gnulib module hash
-
-
-EXTRA_DIST += hash.c hash.h
-
-EXTRA_libtar_a_SOURCES += hash.c
-
-## end   gnulib module hash
-
-## begin gnulib module havelib
-
-
-EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath
-
-## end   gnulib module havelib
-
-## begin gnulib module human
-
-
-EXTRA_DIST += human.c human.h
-
-EXTRA_libtar_a_SOURCES += human.c
-
-## end   gnulib module human
-
-## begin gnulib module intprops
-
-
-EXTRA_DIST += intprops.h
-
-## end   gnulib module intprops
-
-## begin gnulib module inttostr
-
-
-EXTRA_DIST += imaxtostr.c inttostr.c inttostr.h offtostr.c uinttostr.c umaxtostr.c
-
-EXTRA_libtar_a_SOURCES += imaxtostr.c inttostr.c offtostr.c uinttostr.c umaxtostr.c
-
-## end   gnulib module inttostr
-
-## begin gnulib module inttypes
-
-BUILT_SOURCES += $(INTTYPES_H)
-
-# We need the following in order to create <inttypes.h> when the system
-# doesn't have one that works with the given compiler.
-inttypes.h: inttypes.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
-             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \
-             -e 's/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \
-             -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
-             -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
-             -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
-             -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \
-             -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \
-             -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \
-             -e 's/@''GNULIB_STRTOIMAX''@/$(GNULIB_STRTOIMAX)/g' \
-             -e 's/@''GNULIB_STRTOUMAX''@/$(GNULIB_STRTOUMAX)/g' \
-             -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \
-             -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \
-             -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \
-             -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \
-             -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \
-             -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \
-             -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \
-             -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \
-             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
-             < $(srcdir)/inttypes.in.h; \
-       } > $@-t
-       mv $@-t $@
-MOSTLYCLEANFILES += inttypes.h inttypes.h-t
-
-EXTRA_DIST += inttypes.in.h
-
-## end   gnulib module inttypes
-
-## begin gnulib module lchown
-
-
-EXTRA_DIST += lchown.c
-
-EXTRA_libtar_a_SOURCES += lchown.c
-
-## end   gnulib module lchown
-
-## begin gnulib module link-warning
-
-LINK_WARNING_H=$(top_srcdir)/build-aux/link-warning.h
-
-EXTRA_DIST += $(top_srcdir)/build-aux/link-warning.h
-
-## end   gnulib module link-warning
-
-## begin gnulib module localcharset
-
-libtar_a_SOURCES += localcharset.h localcharset.c
-
-# We need the following in order to install a simple file in $(libdir)
-# which is shared with other installed packages. We use a list of referencing
-# packages so that "make uninstall" will remove the file if and only if it
-# is not used by another installed package.
-# On systems with glibc-2.1 or newer, the file is redundant, therefore we
-# avoid installing it.
-
-all-local: charset.alias ref-add.sed ref-del.sed
-
-charset_alias = $(DESTDIR)$(libdir)/charset.alias
-charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
-install-exec-local: all-local
-       if test $(GLIBC21) = no; then \
-         case '$(host_os)' in \
-           darwin[56]*) \
-             need_charset_alias=true ;; \
-           darwin* | cygwin* | mingw* | pw32* | cegcc*) \
-             need_charset_alias=false ;; \
-           *) \
-             need_charset_alias=true ;; \
-         esac ; \
-       else \
-         need_charset_alias=false ; \
-       fi ; \
-       if $$need_charset_alias; then \
-         $(mkinstalldirs) $(DESTDIR)$(libdir) ; \
-       fi ; \
-       if test -f $(charset_alias); then \
-         sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \
-         $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
-         rm -f $(charset_tmp) ; \
-       else \
-         if $$need_charset_alias; then \
-           sed -f ref-add.sed charset.alias > $(charset_tmp) ; \
-           $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
-           rm -f $(charset_tmp) ; \
-         fi ; \
-       fi
-
-uninstall-local: all-local
-       if test -f $(charset_alias); then \
-         sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \
-         if grep '^# Packages using this file: $$' $(charset_tmp) \
-             > /dev/null; then \
-           rm -f $(charset_alias); \
-         else \
-           $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \
-         fi; \
-         rm -f $(charset_tmp); \
-       fi
-
-charset.alias: config.charset
-       rm -f t-$@ $@
-       $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@
-       mv t-$@ $@
-
-SUFFIXES += .sed .sin
-.sin.sed:
-       rm -f t-$@ $@
-       sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@
-       mv t-$@ $@
-
-CLEANFILES += charset.alias ref-add.sed ref-del.sed
-
-EXTRA_DIST += config.charset ref-add.sin ref-del.sin
-
-## end   gnulib module localcharset
-
-## begin gnulib module lseek
-
-
-EXTRA_DIST += lseek.c
-
-EXTRA_libtar_a_SOURCES += lseek.c
-
-## end   gnulib module lseek
-
-## begin gnulib module lstat
-
-
-EXTRA_DIST += lstat.c
-
-EXTRA_libtar_a_SOURCES += lstat.c
-
-## end   gnulib module lstat
-
-## begin gnulib module malloc
-
-
-EXTRA_DIST += malloc.c
-
-EXTRA_libtar_a_SOURCES += malloc.c
-
-## end   gnulib module malloc
-
-## begin gnulib module malloc-posix
-
-
-EXTRA_DIST += malloc.c
-
-EXTRA_libtar_a_SOURCES += malloc.c
-
-## end   gnulib module malloc-posix
-
-## begin gnulib module malloca
-
-libtar_a_SOURCES += malloca.c
-
-EXTRA_DIST += malloca.h malloca.valgrind
-
-## end   gnulib module malloca
-
-## begin gnulib module mbchar
-
-libtar_a_SOURCES += mbchar.c
-
-EXTRA_DIST += mbchar.h
-
-## end   gnulib module mbchar
-
-## begin gnulib module mbrtowc
-
-
-EXTRA_DIST += mbrtowc.c
-
-EXTRA_libtar_a_SOURCES += mbrtowc.c
-
-## end   gnulib module mbrtowc
-
-## begin gnulib module mbscasecmp
-
-libtar_a_SOURCES += mbscasecmp.c
-
-## end   gnulib module mbscasecmp
-
-## begin gnulib module mbsinit
-
-
-EXTRA_DIST += mbsinit.c
-
-EXTRA_libtar_a_SOURCES += mbsinit.c
-
-## end   gnulib module mbsinit
-
-## begin gnulib module mbuiter
-
-libtar_a_SOURCES += mbuiter.h
-
-## end   gnulib module mbuiter
-
-## begin gnulib module mempcpy
-
-
-EXTRA_DIST += mempcpy.c
-
-EXTRA_libtar_a_SOURCES += mempcpy.c
-
-## end   gnulib module mempcpy
-
-## begin gnulib module memrchr
-
-
-EXTRA_DIST += memrchr.c
-
-EXTRA_libtar_a_SOURCES += memrchr.c
-
-## end   gnulib module memrchr
-
-## begin gnulib module mkdtemp
-
-
-EXTRA_DIST += mkdtemp.c
-
-EXTRA_libtar_a_SOURCES += mkdtemp.c
-
-## end   gnulib module mkdtemp
-
-## begin gnulib module mktime
-
-
-EXTRA_DIST += mktime.c
-
-EXTRA_libtar_a_SOURCES += mktime.c
-
-## end   gnulib module mktime
-
-## begin gnulib module modechange
-
-
-EXTRA_DIST += modechange.c modechange.h
-
-EXTRA_libtar_a_SOURCES += modechange.c
-
-## end   gnulib module modechange
-
-## begin gnulib module obstack
-
-
-EXTRA_DIST += obstack.c obstack.h
-
-EXTRA_libtar_a_SOURCES += obstack.c
-
-## end   gnulib module obstack
-
-## begin gnulib module open
-
-
-EXTRA_DIST += open.c
-
-EXTRA_libtar_a_SOURCES += open.c
-
-## end   gnulib module open
-
-## begin gnulib module openat
-
-
-EXTRA_DIST += at-func.c fchmodat.c fchownat.c fstatat.c mkdirat.c openat-priv.h openat-proc.c openat.c openat.h
-
-EXTRA_libtar_a_SOURCES += at-func.c fchmodat.c fchownat.c fstatat.c mkdirat.c openat-proc.c openat.c
-
-## end   gnulib module openat
-
-## begin gnulib module openat-die
-
-libtar_a_SOURCES += openat-die.c
-
-## end   gnulib module openat-die
-
-## begin gnulib module pathmax
-
-
-EXTRA_DIST += pathmax.h
-
-## end   gnulib module pathmax
-
-## begin gnulib module quote
-
-
-EXTRA_DIST += quote.c quote.h
-
-EXTRA_libtar_a_SOURCES += quote.c
-
-## end   gnulib module quote
-
-## begin gnulib module quotearg
-
-
-EXTRA_DIST += quotearg.c quotearg.h
-
-EXTRA_libtar_a_SOURCES += quotearg.c
-
-## end   gnulib module quotearg
-
-## begin gnulib module rawmemchr
-
-
-EXTRA_DIST += rawmemchr.c rawmemchr.valgrind
-
-EXTRA_libtar_a_SOURCES += rawmemchr.c
-
-## end   gnulib module rawmemchr
-
-## begin gnulib module readlink
-
-
-EXTRA_DIST += readlink.c
-
-EXTRA_libtar_a_SOURCES += readlink.c
-
-## end   gnulib module readlink
-
-## begin gnulib module realloc-posix
-
-
-EXTRA_DIST += realloc.c
-
-EXTRA_libtar_a_SOURCES += realloc.c
-
-## end   gnulib module realloc-posix
-
-## begin gnulib module regex
-
-
-EXTRA_DIST += regcomp.c regex.c regex.h regex_internal.c regex_internal.h regexec.c
-
-EXTRA_libtar_a_SOURCES += regcomp.c regex.c regex_internal.c regexec.c
-
-## end   gnulib module regex
-
-## begin gnulib module rpmatch
-
-
-EXTRA_DIST += rpmatch.c
-
-EXTRA_libtar_a_SOURCES += rpmatch.c
-
-## end   gnulib module rpmatch
-
-## begin gnulib module safe-read
-
-
-EXTRA_DIST += safe-read.c safe-read.h
-
-EXTRA_libtar_a_SOURCES += safe-read.c
-
-## end   gnulib module safe-read
-
-## begin gnulib module safe-write
-
-
-EXTRA_DIST += safe-write.c safe-write.h
-
-EXTRA_libtar_a_SOURCES += safe-write.c
-
-## end   gnulib module safe-write
-
-## begin gnulib module same-inode
-
-
-EXTRA_DIST += same-inode.h
-
-## end   gnulib module same-inode
-
-## begin gnulib module save-cwd
-
-
-EXTRA_DIST += save-cwd.c save-cwd.h
-
-EXTRA_libtar_a_SOURCES += save-cwd.c
-
-## end   gnulib module save-cwd
-
-## begin gnulib module savedir
-
-
-EXTRA_DIST += savedir.c savedir.h
-
-EXTRA_libtar_a_SOURCES += savedir.c
-
-## end   gnulib module savedir
-
-## begin gnulib module setenv
-
-
-EXTRA_DIST += setenv.c
-
-EXTRA_libtar_a_SOURCES += setenv.c
-
-## end   gnulib module setenv
-
-## begin gnulib module size_max
-
-libtar_a_SOURCES += size_max.h
-
-## end   gnulib module size_max
-
-## begin gnulib module sleep
-
-
-EXTRA_DIST += sleep.c
-
-EXTRA_libtar_a_SOURCES += sleep.c
-
-## end   gnulib module sleep
-
-## begin gnulib module snprintf
-
-
-EXTRA_DIST += snprintf.c
-
-EXTRA_libtar_a_SOURCES += snprintf.c
-
-## end   gnulib module snprintf
-
-## begin gnulib module stat-macros
-
-
-EXTRA_DIST += stat-macros.h
-
-## end   gnulib module stat-macros
-
-## begin gnulib module stat-time
-
-
-EXTRA_DIST += stat-time.h
-
-## end   gnulib module stat-time
-
-## begin gnulib module stdarg
-
-BUILT_SOURCES += $(STDARG_H)
-
-# We need the following in order to create <stdarg.h> when the system
-# doesn't have one that works with the given compiler.
-stdarg.h: stdarg.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \
-             < $(srcdir)/stdarg.in.h; \
-       } > $@-t
-       mv $@-t $@
-MOSTLYCLEANFILES += stdarg.h stdarg.h-t
-
-EXTRA_DIST += stdarg.in.h
-
-## end   gnulib module stdarg
-
-## begin gnulib module stdbool
-
-BUILT_SOURCES += $(STDBOOL_H)
-
-# We need the following in order to create <stdbool.h> when the system
-# doesn't have one that works.
-stdbool.h: stdbool.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \
-       } > $@-t
-       mv $@-t $@
-MOSTLYCLEANFILES += stdbool.h stdbool.h-t
-
-EXTRA_DIST += stdbool.in.h
-
-## end   gnulib module stdbool
-
-## begin gnulib module stdint
-
-BUILT_SOURCES += $(STDINT_H)
-
-# We need the following in order to create <stdint.h> when the system
-# doesn't have one that works with the given compiler.
-stdint.h: stdint.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
-             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
-             -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
-             -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
-             -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
-             -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
-             -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
-             -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
-             -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
-             -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
-             -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
-             -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
-             -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
-             -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
-             -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
-             -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
-             -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
-             -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
-             -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
-             -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
-             -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
-             -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
-             < $(srcdir)/stdint.in.h; \
-       } > $@-t
-       mv $@-t $@
-MOSTLYCLEANFILES += stdint.h stdint.h-t
-
-EXTRA_DIST += stdint.in.h
-
-## end   gnulib module stdint
-
-## begin gnulib module stdio
-
-BUILT_SOURCES += stdio.h
-
-# We need the following in order to create <stdio.h> when the system
-# doesn't have one that works with the given compiler.
-stdio.h: stdio.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \
-             -e 's|@''GNULIB_FPRINTF''@|$(GNULIB_FPRINTF)|g' \
-             -e 's|@''GNULIB_FPRINTF_POSIX''@|$(GNULIB_FPRINTF_POSIX)|g' \
-             -e 's|@''GNULIB_PRINTF''@|$(GNULIB_PRINTF)|g' \
-             -e 's|@''GNULIB_PRINTF_POSIX''@|$(GNULIB_PRINTF_POSIX)|g' \
-             -e 's|@''GNULIB_SNPRINTF''@|$(GNULIB_SNPRINTF)|g' \
-             -e 's|@''GNULIB_SPRINTF_POSIX''@|$(GNULIB_SPRINTF_POSIX)|g' \
-             -e 's|@''GNULIB_VFPRINTF''@|$(GNULIB_VFPRINTF)|g' \
-             -e 's|@''GNULIB_VFPRINTF_POSIX''@|$(GNULIB_VFPRINTF_POSIX)|g' \
-             -e 's|@''GNULIB_VPRINTF''@|$(GNULIB_VPRINTF)|g' \
-             -e 's|@''GNULIB_VPRINTF_POSIX''@|$(GNULIB_VPRINTF_POSIX)|g' \
-             -e 's|@''GNULIB_VSNPRINTF''@|$(GNULIB_VSNPRINTF)|g' \
-             -e 's|@''GNULIB_VSPRINTF_POSIX''@|$(GNULIB_VSPRINTF_POSIX)|g' \
-             -e 's|@''GNULIB_DPRINTF''@|$(GNULIB_DPRINTF)|g' \
-             -e 's|@''GNULIB_VDPRINTF''@|$(GNULIB_VDPRINTF)|g' \
-             -e 's|@''GNULIB_VASPRINTF''@|$(GNULIB_VASPRINTF)|g' \
-             -e 's|@''GNULIB_OBSTACK_PRINTF''@|$(GNULIB_OBSTACK_PRINTF)|g' \
-             -e 's|@''GNULIB_OBSTACK_PRINTF_POSIX''@|$(GNULIB_OBSTACK_PRINTF_POSIX)|g' \
-             -e 's|@''GNULIB_FOPEN''@|$(GNULIB_FOPEN)|g' \
-             -e 's|@''GNULIB_FREOPEN''@|$(GNULIB_FREOPEN)|g' \
-             -e 's|@''GNULIB_FSEEK''@|$(GNULIB_FSEEK)|g' \
-             -e 's|@''GNULIB_FSEEKO''@|$(GNULIB_FSEEKO)|g' \
-             -e 's|@''GNULIB_FTELL''@|$(GNULIB_FTELL)|g' \
-             -e 's|@''GNULIB_FTELLO''@|$(GNULIB_FTELLO)|g' \
-             -e 's|@''GNULIB_FFLUSH''@|$(GNULIB_FFLUSH)|g' \
-             -e 's|@''GNULIB_FCLOSE''@|$(GNULIB_FCLOSE)|g' \
-             -e 's|@''GNULIB_FPUTC''@|$(GNULIB_FPUTC)|g' \
-             -e 's|@''GNULIB_PUTC''@|$(GNULIB_PUTC)|g' \
-             -e 's|@''GNULIB_PUTCHAR''@|$(GNULIB_PUTCHAR)|g' \
-             -e 's|@''GNULIB_FPUTS''@|$(GNULIB_FPUTS)|g' \
-             -e 's|@''GNULIB_PUTS''@|$(GNULIB_PUTS)|g' \
-             -e 's|@''GNULIB_FWRITE''@|$(GNULIB_FWRITE)|g' \
-             -e 's|@''GNULIB_GETDELIM''@|$(GNULIB_GETDELIM)|g' \
-             -e 's|@''GNULIB_GETLINE''@|$(GNULIB_GETLINE)|g' \
-             -e 's|@''GNULIB_PERROR''@|$(GNULIB_PERROR)|g' \
-             -e 's|@''GNULIB_STDIO_H_SIGPIPE''@|$(GNULIB_STDIO_H_SIGPIPE)|g' \
-             -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \
-             -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \
-             -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \
-             -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \
-             -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \
-             -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \
-             -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \
-             -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \
-             -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \
-             -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \
-             -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \
-             -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \
-             -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \
-             -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \
-             -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \
-             -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \
-             -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \
-             -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \
-             -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \
-             -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \
-             -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \
-             -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \
-             -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \
-             -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \
-             -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \
-             -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \
-             -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \
-             -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \
-             -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \
-             -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \
-             -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \
-             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
-             < $(srcdir)/stdio.in.h; \
-       } > $@-t
-       mv $@-t $@
-MOSTLYCLEANFILES += stdio.h stdio.h-t
-
-EXTRA_DIST += stdio-write.c stdio.in.h
-
-EXTRA_libtar_a_SOURCES += stdio-write.c
-
-## end   gnulib module stdio
-
-## begin gnulib module stdlib
-
-BUILT_SOURCES += stdlib.h
-
-# We need the following in order to create <stdlib.h> when the system
-# doesn't have one that works with the given compiler.
-stdlib.h: stdlib.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \
-             -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \
-             -e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \
-             -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \
-             -e 's|@''GNULIB_CALLOC_POSIX''@|$(GNULIB_CALLOC_POSIX)|g' \
-             -e 's|@''GNULIB_ATOLL''@|$(GNULIB_ATOLL)|g' \
-             -e 's|@''GNULIB_GETLOADAVG''@|$(GNULIB_GETLOADAVG)|g' \
-             -e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \
-             -e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \
-             -e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \
-             -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \
-             -e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \
-             -e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|g' \
-             -e 's|@''GNULIB_SETENV''@|$(GNULIB_SETENV)|g' \
-             -e 's|@''GNULIB_STRTOD''@|$(GNULIB_STRTOD)|g' \
-             -e 's|@''GNULIB_STRTOLL''@|$(GNULIB_STRTOLL)|g' \
-             -e 's|@''GNULIB_STRTOULL''@|$(GNULIB_STRTOULL)|g' \
-             -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \
-             -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \
-             -e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|g' \
-             -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \
-             -e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \
-             -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
-             -e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \
-             -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \
-             -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
-             -e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|g' \
-             -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
-             -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \
-             -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \
-             -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \
-             -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \
-             -e 's|@''HAVE_UNSETENV''@|$(HAVE_UNSETENV)|g' \
-             -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \
-             -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
-             -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
-             -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
-             -e 's|@''VOID_UNSETENV''@|$(VOID_UNSETENV)|g' \
-             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
-             < $(srcdir)/stdlib.in.h; \
-       } > $@-t
-       mv $@-t $@
-MOSTLYCLEANFILES += stdlib.h stdlib.h-t
-
-EXTRA_DIST += stdlib.in.h
-
-## end   gnulib module stdlib
-
-## begin gnulib module stpcpy
-
-
-EXTRA_DIST += stpcpy.c
-
-EXTRA_libtar_a_SOURCES += stpcpy.c
-
-## end   gnulib module stpcpy
-
-## begin gnulib module strcase
-
-
-EXTRA_DIST += strcasecmp.c strncasecmp.c
-
-EXTRA_libtar_a_SOURCES += strcasecmp.c strncasecmp.c
-
-## end   gnulib module strcase
-
-## begin gnulib module strchrnul
-
-
-EXTRA_DIST += strchrnul.c strchrnul.valgrind
-
-EXTRA_libtar_a_SOURCES += strchrnul.c
-
-## end   gnulib module strchrnul
-
-## begin gnulib module strdup-posix
-
-
-EXTRA_DIST += strdup.c
-
-EXTRA_libtar_a_SOURCES += strdup.c
-
-## end   gnulib module strdup-posix
-
-## begin gnulib module streq
-
-
-EXTRA_DIST += streq.h
-
-## end   gnulib module streq
-
-## begin gnulib module strerror
-
-
-EXTRA_DIST += strerror.c
-
-EXTRA_libtar_a_SOURCES += strerror.c
-
-## end   gnulib module strerror
-
-## begin gnulib module string
-
-BUILT_SOURCES += string.h
-
-# We need the following in order to create <string.h> when the system
-# doesn't have one that works with the given compiler.
-string.h: string.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
-             -e 's|@''GNULIB_MBSLEN''@|$(GNULIB_MBSLEN)|g' \
-             -e 's|@''GNULIB_MBSNLEN''@|$(GNULIB_MBSNLEN)|g' \
-             -e 's|@''GNULIB_MBSCHR''@|$(GNULIB_MBSCHR)|g' \
-             -e 's|@''GNULIB_MBSRCHR''@|$(GNULIB_MBSRCHR)|g' \
-             -e 's|@''GNULIB_MBSSTR''@|$(GNULIB_MBSSTR)|g' \
-             -e 's|@''GNULIB_MBSCASECMP''@|$(GNULIB_MBSCASECMP)|g' \
-             -e 's|@''GNULIB_MBSNCASECMP''@|$(GNULIB_MBSNCASECMP)|g' \
-             -e 's|@''GNULIB_MBSPCASECMP''@|$(GNULIB_MBSPCASECMP)|g' \
-             -e 's|@''GNULIB_MBSCASESTR''@|$(GNULIB_MBSCASESTR)|g' \
-             -e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \
-             -e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \
-             -e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \
-             -e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \
-             -e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \
-             -e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \
-             -e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \
-             -e 's|@''GNULIB_MEMRCHR''@|$(GNULIB_MEMRCHR)|g' \
-             -e 's|@''GNULIB_RAWMEMCHR''@|$(GNULIB_RAWMEMCHR)|g' \
-             -e 's|@''GNULIB_STPCPY''@|$(GNULIB_STPCPY)|g' \
-             -e 's|@''GNULIB_STPNCPY''@|$(GNULIB_STPNCPY)|g' \
-             -e 's|@''GNULIB_STRCHRNUL''@|$(GNULIB_STRCHRNUL)|g' \
-             -e 's|@''GNULIB_STRDUP''@|$(GNULIB_STRDUP)|g' \
-             -e 's|@''GNULIB_STRNDUP''@|$(GNULIB_STRNDUP)|g' \
-             -e 's|@''GNULIB_STRNLEN''@|$(GNULIB_STRNLEN)|g' \
-             -e 's|@''GNULIB_STRPBRK''@|$(GNULIB_STRPBRK)|g' \
-             -e 's|@''GNULIB_STRSEP''@|$(GNULIB_STRSEP)|g' \
-             -e 's|@''GNULIB_STRSTR''@|$(GNULIB_STRSTR)|g' \
-             -e 's|@''GNULIB_STRCASESTR''@|$(GNULIB_STRCASESTR)|g' \
-             -e 's|@''GNULIB_STRTOK_R''@|$(GNULIB_STRTOK_R)|g' \
-             -e 's|@''GNULIB_STRERROR''@|$(GNULIB_STRERROR)|g' \
-             -e 's|@''GNULIB_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \
-             -e 's|@''GNULIB_STRVERSCMP''@|$(GNULIB_STRVERSCMP)|g' \
-             -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
-             -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
-             -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
-             -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \
-             -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
-             -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
-             -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
-             -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
-             -e 's|@''HAVE_STRNDUP''@|$(HAVE_STRNDUP)|g' \
-             -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
-             -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
-             -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
-             -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
-             -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
-             -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
-             -e 's|@''HAVE_DECL_STRERROR''@|$(HAVE_DECL_STRERROR)|g' \
-             -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
-             -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
-             -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
-             -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
-             -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
-             -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
-             -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
-             -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
-             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
-             < $(srcdir)/string.in.h; \
-       } > $@-t
-       mv $@-t $@
-MOSTLYCLEANFILES += string.h string.h-t
-
-EXTRA_DIST += string.in.h
-
-## end   gnulib module string
-
-## begin gnulib module strings
-
-BUILT_SOURCES += strings.h
-
-# We need the following in order to create <strings.h> when the system
-# doesn't have one that works with the given compiler.
-strings.h: strings.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \
-             -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \
-             -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \
-             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
-             < $(srcdir)/strings.in.h; \
-       } > $@-t
-       mv $@-t $@
-MOSTLYCLEANFILES += strings.h strings.h-t
-
-EXTRA_DIST += strings.in.h
-
-## end   gnulib module strings
-
-## begin gnulib module strndup
-
-
-EXTRA_DIST += strndup.c
-
-EXTRA_libtar_a_SOURCES += strndup.c
-
-## end   gnulib module strndup
-
-## begin gnulib module strnlen
-
-
-EXTRA_DIST += strnlen.c
-
-EXTRA_libtar_a_SOURCES += strnlen.c
-
-## end   gnulib module strnlen
-
-## begin gnulib module strnlen1
-
-libtar_a_SOURCES += strnlen1.h strnlen1.c
-
-## end   gnulib module strnlen1
-
-## begin gnulib module strtoimax
-
-
-EXTRA_DIST += strtoimax.c
-
-EXTRA_libtar_a_SOURCES += strtoimax.c
-
-## end   gnulib module strtoimax
-
-## begin gnulib module strtol
-
-
-EXTRA_DIST += strtol.c
-
-EXTRA_libtar_a_SOURCES += strtol.c
-
-## end   gnulib module strtol
-
-## begin gnulib module strtoll
-
-
-EXTRA_DIST += strtoll.c
-
-EXTRA_libtar_a_SOURCES += strtoll.c
-
-## end   gnulib module strtoll
-
-## begin gnulib module strtoul
-
-
-EXTRA_DIST += strtoul.c
-
-EXTRA_libtar_a_SOURCES += strtoul.c
-
-## end   gnulib module strtoul
-
-## begin gnulib module strtoull
-
-
-EXTRA_DIST += strtoull.c
-
-EXTRA_libtar_a_SOURCES += strtoull.c
-
-## end   gnulib module strtoull
-
-## begin gnulib module strtoumax
-
-
-EXTRA_DIST += strtoumax.c
-
-EXTRA_libtar_a_SOURCES += strtoumax.c
-
-## end   gnulib module strtoumax
-
-## begin gnulib module sys_stat
-
-BUILT_SOURCES += $(SYS_STAT_H)
-
-# We need the following in order to create <sys/stat.h> when the system
-# has one that is incomplete.
-sys/stat.h: sys_stat.in.h
-       @MKDIR_P@ sys
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
-             -e 's|@''GNULIB_LCHMOD''@|$(GNULIB_LCHMOD)|g' \
-             -e 's|@''GNULIB_LSTAT''@|$(GNULIB_LSTAT)|g' \
-             -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \
-             -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \
-             -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \
-             -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \
-             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
-             < $(srcdir)/sys_stat.in.h; \
-       } > $@-t
-       mv $@-t $@
-MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t
-MOSTLYCLEANDIRS += sys
-
-EXTRA_DIST += sys_stat.in.h
-
-## end   gnulib module sys_stat
-
-## begin gnulib module sys_time
-
-BUILT_SOURCES += $(SYS_TIME_H)
-
-# We need the following in order to create <sys/time.h> when the system
-# doesn't have one that works with the given compiler.
-sys/time.h: sys_time.in.h
-       @MKDIR_P@ sys
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \
-             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \
-             -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \
-             -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \
-             < $(srcdir)/sys_time.in.h; \
-       } > $@-t
-       mv $@-t $@
-MOSTLYCLEANFILES += sys/time.h sys/time.h-t
-
-EXTRA_DIST += sys_time.in.h
-
-## end   gnulib module sys_time
-
-## begin gnulib module sysexits
-
-BUILT_SOURCES += $(SYSEXITS_H)
-
-# We need the following in order to create <sysexits.h> when the system
-# doesn't have one that works with the given compiler.
-sysexits.h: sysexits.in.h
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''HAVE_SYSEXITS_H''@|$(HAVE_SYSEXITS_H)|g' \
-             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_SYSEXITS_H''@|$(NEXT_SYSEXITS_H)|g' \
-             < $(srcdir)/sysexits.in.h; \
-       } > $@-t
-       mv -f $@-t $@
-MOSTLYCLEANFILES += sysexits.h sysexits.h-t
-
-EXTRA_DIST += sysexits.in.h
-
-## end   gnulib module sysexits
-
-## begin gnulib module tempname
-
-
-EXTRA_DIST += tempname.c tempname.h
-
-EXTRA_libtar_a_SOURCES += tempname.c
-
-## end   gnulib module tempname
-
-## begin gnulib module time
-
-BUILT_SOURCES += time.h
-
-# We need the following in order to create <time.h> when the system
-# doesn't have one that works with the given compiler.
-time.h: time.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \
-             -e 's|@REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \
-             -e 's|@REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \
-             -e 's|@REPLACE_STRPTIME''@|$(REPLACE_STRPTIME)|g' \
-             -e 's|@REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \
-             -e 's|@SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
-             -e 's|@TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
-             < $(srcdir)/time.in.h; \
-       } > $@-t
-       mv $@-t $@
-MOSTLYCLEANFILES += time.h time.h-t
-
-EXTRA_DIST += time.in.h
-
-## end   gnulib module time
-
-## begin gnulib module time_r
-
-
-EXTRA_DIST += time_r.c
-
-EXTRA_libtar_a_SOURCES += time_r.c
-
-## end   gnulib module time_r
-
-## begin gnulib module timespec
-
-
-EXTRA_DIST += timespec.h
-
-## end   gnulib module timespec
-
-## begin gnulib module unistd
-
-BUILT_SOURCES += unistd.h
-
-# We need the following in order to create an empty placeholder for
-# <unistd.h> when the system doesn't have one.
-unistd.h: unistd.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
-             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
-             -e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \
-             -e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|g' \
-             -e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \
-             -e 's|@''GNULIB_ENVIRON''@|$(GNULIB_ENVIRON)|g' \
-             -e 's|@''GNULIB_EUIDACCESS''@|$(GNULIB_EUIDACCESS)|g' \
-             -e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \
-             -e 's|@''GNULIB_FSYNC''@|$(GNULIB_FSYNC)|g' \
-             -e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \
-             -e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \
-             -e 's|@''GNULIB_GETDOMAINNAME''@|$(GNULIB_GETDOMAINNAME)|g' \
-             -e 's|@''GNULIB_GETDTABLESIZE''@|$(GNULIB_GETDTABLESIZE)|g' \
-             -e 's|@''GNULIB_GETHOSTNAME''@|$(GNULIB_GETHOSTNAME)|g' \
-             -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \
-             -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \
-             -e 's|@''GNULIB_GETUSERSHELL''@|$(GNULIB_GETUSERSHELL)|g' \
-             -e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \
-             -e 's|@''GNULIB_LINK''@|$(GNULIB_LINK)|g' \
-             -e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \
-             -e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \
-             -e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \
-             -e 's|@''GNULIB_UNISTD_H_SIGPIPE''@|$(GNULIB_UNISTD_H_SIGPIPE)|g' \
-             -e 's|@''GNULIB_WRITE''@|$(GNULIB_WRITE)|g' \
-             -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
-             -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \
-             -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \
-             -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
-             -e 's|@''HAVE_GETDOMAINNAME''@|$(HAVE_GETDOMAINNAME)|g' \
-             -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \
-             -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \
-             -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
-             -e 's|@''HAVE_GETUSERSHELL''@|$(HAVE_GETUSERSHELL)|g' \
-             -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
-             -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
-             -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
-             -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
-             -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
-             -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
-             -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
-             -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
-             -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
-             -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \
-             -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
-             -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
-             -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
-             -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
-             -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \
-             -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \
-             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
-             < $(srcdir)/unistd.in.h; \
-       } > $@-t
-       mv $@-t $@
-MOSTLYCLEANFILES += unistd.h unistd.h-t
-
-EXTRA_DIST += unistd.in.h
-
-## end   gnulib module unistd
-
-## begin gnulib module unistd-safer
-
-
-EXTRA_DIST += dup-safer.c fd-safer.c pipe-safer.c unistd--.h unistd-safer.h
-
-EXTRA_libtar_a_SOURCES += dup-safer.c fd-safer.c pipe-safer.c
-
-## end   gnulib module unistd-safer
-
-## begin gnulib module unitypes
-
-
-EXTRA_DIST += unitypes.h
-
-## end   gnulib module unitypes
-
-## begin gnulib module uniwidth/base
-
-
-EXTRA_DIST += localcharset.h uniwidth.h
-
-## end   gnulib module uniwidth/base
-
-## begin gnulib module uniwidth/width
-
-libtar_a_SOURCES += uniwidth/width.c
-
-EXTRA_DIST += uniwidth/cjk.h
-
-## end   gnulib module uniwidth/width
-
-## begin gnulib module unlinkdir
-
-
-EXTRA_DIST += unlinkdir.c unlinkdir.h
-
-EXTRA_libtar_a_SOURCES += unlinkdir.c
-
-## end   gnulib module unlinkdir
-
-## begin gnulib module unlocked-io
-
-
-EXTRA_DIST += unlocked-io.h
-
-## end   gnulib module unlocked-io
-
-## begin gnulib module unsetenv
-
-
-EXTRA_DIST += unsetenv.c
-
-EXTRA_libtar_a_SOURCES += unsetenv.c
-
-## end   gnulib module unsetenv
-
-## begin gnulib module utime
-
-
-EXTRA_DIST += utime.c
-
-EXTRA_libtar_a_SOURCES += utime.c
-
-## end   gnulib module utime
-
-## begin gnulib module utimens
-
-
-EXTRA_DIST += utimens.c utimens.h
-
-EXTRA_libtar_a_SOURCES += utimens.c
-
-## end   gnulib module utimens
-
-## begin gnulib module vasnprintf
-
-
-EXTRA_DIST += asnprintf.c float+.h printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h
-
-EXTRA_libtar_a_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c
-
-## end   gnulib module vasnprintf
-
-## begin gnulib module verify
-
-libtar_a_SOURCES += verify.h
-
-## end   gnulib module verify
-
-## begin gnulib module version-etc
-
-libtar_a_SOURCES += version-etc.h version-etc.c
-
-## end   gnulib module version-etc
-
-## begin gnulib module version-etc-fsf
-
-libtar_a_SOURCES += version-etc-fsf.c
-
-## end   gnulib module version-etc-fsf
-
-## begin gnulib module vsnprintf
-
-
-EXTRA_DIST += vsnprintf.c
-
-EXTRA_libtar_a_SOURCES += vsnprintf.c
-
-## end   gnulib module vsnprintf
-
-## begin gnulib module wchar
-
-BUILT_SOURCES += $(WCHAR_H)
-
-# We need the following in order to create <wchar.h> when the system
-# version does not work standalone.
-wchar.h: wchar.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
-             -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
-             -e 's|@''GNULIB_BTOWC''@|$(GNULIB_BTOWC)|g' \
-             -e 's|@''GNULIB_WCTOB''@|$(GNULIB_WCTOB)|g' \
-             -e 's|@''GNULIB_MBSINIT''@|$(GNULIB_MBSINIT)|g' \
-             -e 's|@''GNULIB_MBRTOWC''@|$(GNULIB_MBRTOWC)|g' \
-             -e 's|@''GNULIB_MBRLEN''@|$(GNULIB_MBRLEN)|g' \
-             -e 's|@''GNULIB_MBSRTOWCS''@|$(GNULIB_MBSRTOWCS)|g' \
-             -e 's|@''GNULIB_MBSNRTOWCS''@|$(GNULIB_MBSNRTOWCS)|g' \
-             -e 's|@''GNULIB_WCRTOMB''@|$(GNULIB_WCRTOMB)|g' \
-             -e 's|@''GNULIB_WCSRTOMBS''@|$(GNULIB_WCSRTOMBS)|g' \
-             -e 's|@''GNULIB_WCSNRTOMBS''@|$(GNULIB_WCSNRTOMBS)|g' \
-             -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \
-             -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
-             -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
-             -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
-             -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
-             -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
-             -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
-             -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
-             -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
-             -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
-             -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
-             -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
-             -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
-             -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
-             -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
-             -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
-             -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
-             -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
-             -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
-             -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
-             -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
-             -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
-             -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
-             -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
-             -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \
-           < $(srcdir)/wchar.in.h; \
-       } > $@-t
-       mv $@-t $@
-MOSTLYCLEANFILES += wchar.h wchar.h-t
-
-EXTRA_DIST += wchar.in.h
-
-## end   gnulib module wchar
-
-## begin gnulib module wcrtomb
-
-
-EXTRA_DIST += wcrtomb.c
-
-EXTRA_libtar_a_SOURCES += wcrtomb.c
-
-## end   gnulib module wcrtomb
-
-## begin gnulib module wctype
-
-BUILT_SOURCES += $(WCTYPE_H)
-
-# We need the following in order to create <wctype.h> when the system
-# doesn't have one that works with the given compiler.
-wctype.h: wctype.in.h
-       rm -f $@-t $@
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
-             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
-             -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
-             -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
-             -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
-             < $(srcdir)/wctype.in.h; \
-       } > $@-t
-       mv $@-t $@
-MOSTLYCLEANFILES += wctype.h wctype.h-t
-
-EXTRA_DIST += wctype.in.h
-
-## end   gnulib module wctype
-
-## begin gnulib module wcwidth
-
-
-EXTRA_DIST += wcwidth.c
-
-EXTRA_libtar_a_SOURCES += wcwidth.c
-
-## end   gnulib module wcwidth
-
-## begin gnulib module write
-
-
-EXTRA_DIST += write.c
-
-EXTRA_libtar_a_SOURCES += write.c
-
-## end   gnulib module write
-
-## begin gnulib module xalloc
-
-
-EXTRA_DIST += xalloc.h xmalloc.c
-
-EXTRA_libtar_a_SOURCES += xmalloc.c
-
-## end   gnulib module xalloc
-
-## begin gnulib module xalloc-die
-
-libtar_a_SOURCES += xalloc-die.c
-
-## end   gnulib module xalloc-die
-
-## begin gnulib module xgetcwd
-
-
-EXTRA_DIST += xgetcwd.c xgetcwd.h
-
-EXTRA_libtar_a_SOURCES += xgetcwd.c
-
-## end   gnulib module xgetcwd
-
-## begin gnulib module xsize
-
-libtar_a_SOURCES += xsize.h
-
-## end   gnulib module xsize
-
-## begin gnulib module xstrndup
-
-libtar_a_SOURCES += xstrndup.h xstrndup.c
-
-## end   gnulib module xstrndup
-
-## begin gnulib module xstrtol
-
-
-EXTRA_DIST += xstrtol-error.c xstrtol.c xstrtol.h xstrtoul.c
-
-EXTRA_libtar_a_SOURCES += xstrtol-error.c xstrtol.c xstrtoul.c
-
-## end   gnulib module xstrtol
-
-## begin gnulib module xstrtoumax
-
-libtar_a_SOURCES += xstrtoumax.c
-
-## end   gnulib module xstrtoumax
-
-
-mostlyclean-local: mostlyclean-generic
-       @for dir in '' $(MOSTLYCLEANDIRS); do \
-         if test -n "$$dir" && test -d $$dir; then \
-           echo "rmdir $$dir"; rmdir $$dir; \
-         fi; \
-       done; \
-       :
diff --git a/lib/hash.c b/lib/hash.c
deleted file mode 100644 (file)
index 7d76d45..0000000
+++ /dev/null
@@ -1,1049 +0,0 @@
-/* hash - hashing table processing.
-
-   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006, 2007 Free
-   Software Foundation, Inc.
-
-   Written by Jim Meyering, 1992.
-
-   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/>.  */
-
-/* A generic hash table package.  */
-
-/* Define USE_OBSTACK to 1 if you want the allocator to use obstacks instead
-   of malloc.  If you change USE_OBSTACK, you have to recompile!  */
-
-#include <config.h>
-
-#include "hash.h"
-#include "xalloc.h"
-
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#if USE_OBSTACK
-# include "obstack.h"
-# ifndef obstack_chunk_alloc
-#  define obstack_chunk_alloc malloc
-# endif
-# ifndef obstack_chunk_free
-#  define obstack_chunk_free free
-# endif
-#endif
-
-#ifndef SIZE_MAX
-# define SIZE_MAX ((size_t) -1)
-#endif
-
-struct hash_table
-  {
-    /* The array of buckets starts at BUCKET and extends to BUCKET_LIMIT-1,
-       for a possibility of N_BUCKETS.  Among those, N_BUCKETS_USED buckets
-       are not empty, there are N_ENTRIES active entries in the table.  */
-    struct hash_entry *bucket;
-    struct hash_entry const *bucket_limit;
-    size_t n_buckets;
-    size_t n_buckets_used;
-    size_t n_entries;
-
-    /* Tuning arguments, kept in a physicaly separate structure.  */
-    const Hash_tuning *tuning;
-
-    /* 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
-       function for a user entry.  */
-    Hash_hasher hasher;
-    Hash_comparator comparator;
-    Hash_data_freer data_freer;
-
-    /* A linked list of freed struct hash_entry structs.  */
-    struct hash_entry *free_entry_list;
-
-#if USE_OBSTACK
-    /* Whenever obstacks are used, it is possible to allocate all overflowed
-       entries into a single stack, so they all can be freed in a single
-       operation.  It is not clear if the speedup is worth the trouble.  */
-    struct obstack entry_stack;
-#endif
-  };
-
-/* A hash table contains many internal entries, each holding a pointer to
-   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
-   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.
-   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
-   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.
-
-   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
-   that those are not that easy to write! :-), and to use a table size
-   larger than the actual number of entries.  */
-
-/* If an insertion makes the ratio of nonempty buckets to table size larger
-   than the growth threshold (a number between 0.0 and 1.0), then increase
-   the table size by multiplying by the growth factor (a number greater than
-   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
-
-/* 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
-   0.0 and 1.0), then shrink the table by multiplying by the shrink factor (a
-   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
-
-/* Use this to initialize or reset a TUNING structure to
-   some sensible values. */
-static const Hash_tuning default_tuning =
-  {
-    DEFAULT_SHRINK_THRESHOLD,
-    DEFAULT_SHRINK_FACTOR,
-    DEFAULT_GROWTH_THRESHOLD,
-    DEFAULT_GROWTH_FACTOR,
-    false
-  };
-
-/* Information and lookup.  */
-
-/* The following few functions provide information about the overall hash
-   table organization: the number of entries, number of buckets and maximum
-   length of buckets.  */
-
-/* Return the number of buckets in the hash table.  The table size, the total
-   number of buckets (used plus unused), or the maximum number of slots, are
-   the same quantity.  */
-
-size_t
-hash_get_n_buckets (const Hash_table *table)
-{
-  return table->n_buckets;
-}
-
-/* Return the number of slots in use (non-empty buckets).  */
-
-size_t
-hash_get_n_buckets_used (const Hash_table *table)
-{
-  return table->n_buckets_used;
-}
-
-/* Return the number of active entries.  */
-
-size_t
-hash_get_n_entries (const Hash_table *table)
-{
-  return table->n_entries;
-}
-
-/* Return the length of the longest chain (bucket).  */
-
-size_t
-hash_get_max_bucket_length (const Hash_table *table)
-{
-  struct hash_entry const *bucket;
-  size_t max_bucket_length = 0;
-
-  for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
-    {
-      if (bucket->data)
-       {
-         struct hash_entry const *cursor = bucket;
-         size_t bucket_length = 1;
-
-         while (cursor = cursor->next, cursor)
-           bucket_length++;
-
-         if (bucket_length > max_bucket_length)
-           max_bucket_length = bucket_length;
-       }
-    }
-
-  return max_bucket_length;
-}
-
-/* Do a mild validation of a hash table, by traversing it and checking two
-   statistics.  */
-
-bool
-hash_table_ok (const Hash_table *table)
-{
-  struct hash_entry const *bucket;
-  size_t n_buckets_used = 0;
-  size_t n_entries = 0;
-
-  for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
-    {
-      if (bucket->data)
-       {
-         struct hash_entry const *cursor = bucket;
-
-         /* Count bucket head.  */
-         n_buckets_used++;
-         n_entries++;
-
-         /* Count bucket overflow.  */
-         while (cursor = cursor->next, cursor)
-           n_entries++;
-       }
-    }
-
-  if (n_buckets_used == table->n_buckets_used && n_entries == table->n_entries)
-    return true;
-
-  return false;
-}
-
-void
-hash_print_statistics (const Hash_table *table, FILE *stream)
-{
-  size_t n_entries = hash_get_n_entries (table);
-  size_t n_buckets = hash_get_n_buckets (table);
-  size_t n_buckets_used = hash_get_n_buckets_used (table);
-  size_t max_bucket_length = hash_get_max_bucket_length (table);
-
-  fprintf (stream, "# entries:         %lu\n", (unsigned long int) n_entries);
-  fprintf (stream, "# buckets:         %lu\n", (unsigned long int) n_buckets);
-  fprintf (stream, "# buckets used:    %lu (%.2f%%)\n",
-          (unsigned long int) n_buckets_used,
-          (100.0 * n_buckets_used) / n_buckets);
-  fprintf (stream, "max bucket length: %lu\n",
-          (unsigned long int) max_bucket_length);
-}
-
-/* If ENTRY matches an entry already in the hash table, return the
-   entry from the table.  Otherwise, return NULL.  */
-
-void *
-hash_lookup (const Hash_table *table, const void *entry)
-{
-  struct hash_entry const *bucket
-    = table->bucket + table->hasher (entry, table->n_buckets);
-  struct hash_entry const *cursor;
-
-  if (! (bucket < table->bucket_limit))
-    abort ();
-
-  if (bucket->data == NULL)
-    return NULL;
-
-  for (cursor = bucket; cursor; cursor = cursor->next)
-    if (table->comparator (entry, cursor->data))
-      return cursor->data;
-
-  return NULL;
-}
-
-/* Walking.  */
-
-/* The functions in this page traverse the hash table and process the
-   contained entries.  For the traversal to work properly, the hash table
-   should not be resized nor modified while any particular entry is being
-   processed.  In particular, entries should not be added or removed.  */
-
-/* Return the first data in the table, or NULL if the table is empty.  */
-
-void *
-hash_get_first (const Hash_table *table)
-{
-  struct hash_entry const *bucket;
-
-  if (table->n_entries == 0)
-    return NULL;
-
-  for (bucket = table->bucket; ; bucket++)
-    if (! (bucket < table->bucket_limit))
-      abort ();
-    else if (bucket->data)
-      return bucket->data;
-}
-
-/* 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'.
-   Return NULL if there are no more entries.  */
-
-void *
-hash_get_next (const Hash_table *table, const void *entry)
-{
-  struct hash_entry const *bucket
-    = table->bucket + table->hasher (entry, table->n_buckets);
-  struct hash_entry const *cursor;
-
-  if (! (bucket < table->bucket_limit))
-    abort ();
-
-  /* Find next entry in the same bucket.  */
-  for (cursor = bucket; cursor; cursor = cursor->next)
-    if (cursor->data == entry && cursor->next)
-      return cursor->next->data;
-
-  /* Find first entry in any subsequent bucket.  */
-  while (++bucket < table->bucket_limit)
-    if (bucket->data)
-      return bucket->data;
-
-  /* None found.  */
-  return NULL;
-}
-
-/* Fill BUFFER with pointers to active user entries in the hash table, then
-   return the number of pointers copied.  Do not copy more than BUFFER_SIZE
-   pointers.  */
-
-size_t
-hash_get_entries (const Hash_table *table, void **buffer,
-                 size_t buffer_size)
-{
-  size_t counter = 0;
-  struct hash_entry const *bucket;
-  struct hash_entry const *cursor;
-
-  for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
-    {
-      if (bucket->data)
-       {
-         for (cursor = bucket; cursor; cursor = cursor->next)
-           {
-             if (counter >= buffer_size)
-               return counter;
-             buffer[counter++] = cursor->data;
-           }
-       }
-    }
-
-  return counter;
-}
-
-/* Call a PROCESSOR function for each entry of a hash table, and return the
-   number of entries for which the processor function returned success.  A
-   pointer to some PROCESSOR_DATA which will be made available to each call to
-   the processor function.  The PROCESSOR accepts two arguments: the first is
-   the user entry being walked into, the second is the value of PROCESSOR_DATA
-   as received.  The walking continue for as long as the PROCESSOR function
-   returns nonzero.  When it returns zero, the walking is interrupted.  */
-
-size_t
-hash_do_for_each (const Hash_table *table, Hash_processor processor,
-                 void *processor_data)
-{
-  size_t counter = 0;
-  struct hash_entry const *bucket;
-  struct hash_entry const *cursor;
-
-  for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
-    {
-      if (bucket->data)
-       {
-         for (cursor = bucket; cursor; cursor = cursor->next)
-           {
-             if (!(*processor) (cursor->data, processor_data))
-               return counter;
-             counter++;
-           }
-       }
-    }
-
-  return counter;
-}
-
-/* Allocation and clean-up.  */
-
-/* Return a hash index for a NUL-terminated STRING between 0 and N_BUCKETS-1.
-   This is a convenience routine for constructing other hashing functions.  */
-
-#if USE_DIFF_HASH
-
-/* About hashings, Paul Eggert writes to me (FP), on 1994-01-01: "Please see
-   B. J. McKenzie, R. Harries & T. Bell, Selecting a hashing algorithm,
-   Software--practice & experience 20, 2 (Feb 1990), 209-224.  Good hash
-   algorithms tend to be domain-specific, so what's good for [diffutils'] io.c
-   may not be good for your application."  */
-
-size_t
-hash_string (const char *string, size_t n_buckets)
-{
-# define ROTATE_LEFT(Value, Shift) \
-  ((Value) << (Shift) | (Value) >> ((sizeof (size_t) * CHAR_BIT) - (Shift)))
-# define HASH_ONE_CHAR(Value, Byte) \
-  ((Byte) + ROTATE_LEFT (Value, 7))
-
-  size_t value = 0;
-  unsigned char ch;
-
-  for (; (ch = *string); string++)
-    value = HASH_ONE_CHAR (value, ch);
-  return value % n_buckets;
-
-# undef ROTATE_LEFT
-# undef HASH_ONE_CHAR
-}
-
-#else /* not USE_DIFF_HASH */
-
-/* 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.
-   (By the way, what happened to this excellent man?  Is he still alive?)  */
-
-size_t
-hash_string (const char *string, size_t n_buckets)
-{
-  size_t value = 0;
-  unsigned char ch;
-
-  for (; (ch = *string); string++)
-    value = (value * 31 + ch) % n_buckets;
-  return value;
-}
-
-#endif /* not USE_DIFF_HASH */
-
-/* Return true if CANDIDATE is a prime number.  CANDIDATE should be an odd
-   number at least equal to 11.  */
-
-static bool
-is_prime (size_t candidate)
-{
-  size_t divisor = 3;
-  size_t square = divisor * divisor;
-
-  while (square < candidate && (candidate % divisor))
-    {
-      divisor++;
-      square += 4 * divisor;
-      divisor++;
-    }
-
-  return (candidate % divisor ? true : false);
-}
-
-/* Round a given CANDIDATE number up to the nearest prime, and return that
-   prime.  Primes lower than 10 are merely skipped.  */
-
-static size_t
-next_prime (size_t candidate)
-{
-  /* Skip small primes.  */
-  if (candidate < 10)
-    candidate = 10;
-
-  /* Make it definitely odd.  */
-  candidate |= 1;
-
-  while (!is_prime (candidate))
-    candidate += 2;
-
-  return candidate;
-}
-
-void
-hash_reset_tuning (Hash_tuning *tuning)
-{
-  *tuning = default_tuning;
-}
-
-/* For the given hash TABLE, check the user supplied tuning structure for
-   reasonable values, and return true if there is no gross error with it.
-   Otherwise, definitively reset the TUNING field to some acceptable default
-   in the hash table (that is, the user loses the right of further modifying
-   tuning arguments), and return false.  */
-
-static bool
-check_tuning (Hash_table *table)
-{
-  const Hash_tuning *tuning = table->tuning;
-
-  /* Be a bit stricter than mathematics would require, so that
-     rounding errors in size calculations do not cause allocations to
-     fail to grow or shrink as they should.  The smallest allocation
-     is 11 (due to next_prime's algorithm), so an epsilon of 0.1
-     should be good enough.  */
-  float epsilon = 0.1f;
-
-  if (epsilon < tuning->growth_threshold
-      && tuning->growth_threshold < 1 - epsilon
-      && 1 + epsilon < tuning->growth_factor
-      && 0 <= tuning->shrink_threshold
-      && tuning->shrink_threshold + epsilon < tuning->shrink_factor
-      && tuning->shrink_factor <= 1
-      && tuning->shrink_threshold + epsilon < tuning->growth_threshold)
-    return true;
-
-  table->tuning = &default_tuning;
-  return false;
-}
-
-/* Allocate and return a new hash table, or NULL upon failure.  The initial
-   number of buckets is automatically selected so as to _guarantee_ that you
-   may insert at least CANDIDATE different user entries before any growth of
-   the hash table size occurs.  So, if have a reasonably tight a-priori upper
-   bound on the number of entries you intend to insert in the hash table, you
-   may save some table memory and insertion time, by specifying it here.  If
-   the IS_N_BUCKETS field of the TUNING structure is true, the CANDIDATE
-   argument has its meaning changed to the wanted number of buckets.
-
-   TUNING points to a structure of user-supplied values, in case some fine
-   tuning is wanted over the default behavior of the hasher.  If TUNING is
-   NULL, the default tuning parameters are used instead.
-
-   The user-supplied HASHER function should be provided.  It accepts two
-   arguments ENTRY and TABLE_SIZE.  It computes, by hashing ENTRY contents, a
-   slot number for that entry which should be in the range 0..TABLE_SIZE-1.
-   This slot number is then returned.
-
-   The user-supplied COMPARATOR function should be provided.  It accepts two
-   arguments pointing to user data, it then returns true for a pair of entries
-   that compare equal, or false otherwise.  This function is internally called
-   on entries which are already known to hash to the same bucket index.
-
-   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'.
-   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
-   simply an auxiliary struct that you have malloc'd to aggregate several
-   values.  */
-
-Hash_table *
-hash_initialize (size_t candidate, const Hash_tuning *tuning,
-                Hash_hasher hasher, Hash_comparator comparator,
-                Hash_data_freer data_freer)
-{
-  Hash_table *table;
-
-  if (hasher == NULL || comparator == NULL)
-    return NULL;
-
-  table = malloc (sizeof *table);
-  if (table == NULL)
-    return NULL;
-
-  if (!tuning)
-    tuning = &default_tuning;
-  table->tuning = tuning;
-  if (!check_tuning (table))
-    {
-      /* Fail if the tuning options are invalid.  This is the only occasion
-        when the user gets some feedback about it.  Once the table is created,
-        if the user provides invalid tuning options, we silently revert to
-        using the defaults, and ignore further request to change the tuning
-        options.  */
-      goto fail;
-    }
-
-  if (!tuning->is_n_buckets)
-    {
-      float new_candidate = candidate / tuning->growth_threshold;
-      if (SIZE_MAX <= new_candidate)
-       goto fail;
-      candidate = new_candidate;
-    }
-
-  if (xalloc_oversized (candidate, sizeof *table->bucket))
-    goto fail;
-  table->n_buckets = next_prime (candidate);
-  if (xalloc_oversized (table->n_buckets, sizeof *table->bucket))
-    goto fail;
-
-  table->bucket = calloc (table->n_buckets, sizeof *table->bucket);
-  if (table->bucket == NULL)
-    goto fail;
-  table->bucket_limit = table->bucket + table->n_buckets;
-  table->n_buckets_used = 0;
-  table->n_entries = 0;
-
-  table->hasher = hasher;
-  table->comparator = comparator;
-  table->data_freer = data_freer;
-
-  table->free_entry_list = NULL;
-#if USE_OBSTACK
-  obstack_init (&table->entry_stack);
-#endif
-  return table;
-
- fail:
-  free (table);
-  return NULL;
-}
-
-/* Make all buckets empty, placing any chained entries on the free list.
-   Apply the user-specified function data_freer (if any) to the datas of any
-   affected entries.  */
-
-void
-hash_clear (Hash_table *table)
-{
-  struct hash_entry *bucket;
-
-  for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
-    {
-      if (bucket->data)
-       {
-         struct hash_entry *cursor;
-         struct hash_entry *next;
-
-         /* Free the bucket overflow.  */
-         for (cursor = bucket->next; cursor; cursor = next)
-           {
-             if (table->data_freer)
-               (*table->data_freer) (cursor->data);
-             cursor->data = NULL;
-
-             next = cursor->next;
-             /* Relinking is done one entry at a time, as it is to be expected
-                that overflows are either rare or short.  */
-             cursor->next = table->free_entry_list;
-             table->free_entry_list = cursor;
-           }
-
-         /* Free the bucket head.  */
-         if (table->data_freer)
-           (*table->data_freer) (bucket->data);
-         bucket->data = NULL;
-         bucket->next = NULL;
-       }
-    }
-
-  table->n_buckets_used = 0;
-  table->n_entries = 0;
-}
-
-/* Reclaim all storage associated with a hash table.  If a data_freer
-   function has been supplied by the user when the hash table was created,
-   this function applies it to the data of each entry before freeing that
-   entry.  */
-
-void
-hash_free (Hash_table *table)
-{
-  struct hash_entry *bucket;
-  struct hash_entry *cursor;
-  struct hash_entry *next;
-
-  /* Call the user data_freer function.  */
-  if (table->data_freer && table->n_entries)
-    {
-      for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
-       {
-         if (bucket->data)
-           {
-             for (cursor = bucket; cursor; cursor = cursor->next)
-               {
-                 (*table->data_freer) (cursor->data);
-               }
-           }
-       }
-    }
-
-#if USE_OBSTACK
-
-  obstack_free (&table->entry_stack, NULL);
-
-#else
-
-  /* Free all bucket overflowed entries.  */
-  for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
-    {
-      for (cursor = bucket->next; cursor; cursor = next)
-       {
-         next = cursor->next;
-         free (cursor);
-       }
-    }
-
-  /* Also reclaim the internal list of previously freed entries.  */
-  for (cursor = table->free_entry_list; cursor; cursor = next)
-    {
-      next = cursor->next;
-      free (cursor);
-    }
-
-#endif
-
-  /* Free the remainder of the hash table structure.  */
-  free (table->bucket);
-  free (table);
-}
-
-/* Insertion and deletion.  */
-
-/* Get a new hash entry for a bucket overflow, possibly by reclying a
-   previously freed one.  If this is not possible, allocate a new one.  */
-
-static struct hash_entry *
-allocate_entry (Hash_table *table)
-{
-  struct hash_entry *new;
-
-  if (table->free_entry_list)
-    {
-      new = table->free_entry_list;
-      table->free_entry_list = new->next;
-    }
-  else
-    {
-#if USE_OBSTACK
-      new = obstack_alloc (&table->entry_stack, sizeof *new);
-#else
-      new = malloc (sizeof *new);
-#endif
-    }
-
-  return new;
-}
-
-/* Free a hash entry which was part of some bucket overflow,
-   saving it for later recycling.  */
-
-static void
-free_entry (Hash_table *table, struct hash_entry *entry)
-{
-  entry->data = NULL;
-  entry->next = table->free_entry_list;
-  table->free_entry_list = entry;
-}
-
-/* This private function is used to help with insertion and deletion.  When
-   ENTRY matches an entry in the table, return a pointer to the corresponding
-   user data and set *BUCKET_HEAD to the head of the selected bucket.
-   Otherwise, return NULL.  When DELETE is true and ENTRY matches an entry in
-   the table, unlink the matching entry.  */
-
-static void *
-hash_find_entry (Hash_table *table, const void *entry,
-                struct hash_entry **bucket_head, bool delete)
-{
-  struct hash_entry *bucket
-    = table->bucket + table->hasher (entry, table->n_buckets);
-  struct hash_entry *cursor;
-
-  if (! (bucket < table->bucket_limit))
-    abort ();
-
-  *bucket_head = bucket;
-
-  /* Test for empty bucket.  */
-  if (bucket->data == NULL)
-    return NULL;
-
-  /* See if the entry is the first in the bucket.  */
-  if ((*table->comparator) (entry, bucket->data))
-    {
-      void *data = bucket->data;
-
-      if (delete)
-       {
-         if (bucket->next)
-           {
-             struct hash_entry *next = bucket->next;
-
-             /* Bump the first overflow entry into the bucket head, then save
-                the previous first overflow entry for later recycling.  */
-             *bucket = *next;
-             free_entry (table, next);
-           }
-         else
-           {
-             bucket->data = NULL;
-           }
-       }
-
-      return data;
-    }
-
-  /* Scan the bucket overflow.  */
-  for (cursor = bucket; cursor->next; cursor = cursor->next)
-    {
-      if ((*table->comparator) (entry, cursor->next->data))
-       {
-         void *data = cursor->next->data;
-
-         if (delete)
-           {
-             struct hash_entry *next = cursor->next;
-
-             /* Unlink the entry to delete, then save the freed entry for later
-                recycling.  */
-             cursor->next = next->next;
-             free_entry (table, next);
-           }
-
-         return data;
-       }
-    }
-
-  /* No entry found.  */
-  return NULL;
-}
-
-/* For an already existing hash table, change the number of buckets through
-   specifying CANDIDATE.  The contents of the hash table are preserved.  The
-   new number of buckets is automatically selected so as to _guarantee_ that
-   the table may receive at least CANDIDATE different user entries, including
-   those already in the table, before any other growth of the hash table size
-   occurs.  If TUNING->IS_N_BUCKETS is true, then CANDIDATE specifies the
-   exact number of buckets desired.  */
-
-bool
-hash_rehash (Hash_table *table, size_t candidate)
-{
-  Hash_table *new_table;
-  struct hash_entry *bucket;
-  struct hash_entry *cursor;
-  struct hash_entry *next;
-
-  new_table = hash_initialize (candidate, table->tuning, table->hasher,
-                              table->comparator, table->data_freer);
-  if (new_table == NULL)
-    return false;
-
-  /* Merely reuse the extra old space into the new table.  */
-#if USE_OBSTACK
-  obstack_free (&new_table->entry_stack, NULL);
-  new_table->entry_stack = table->entry_stack;
-#endif
-  new_table->free_entry_list = table->free_entry_list;
-
-  for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
-    if (bucket->data)
-      for (cursor = bucket; cursor; cursor = next)
-       {
-         void *data = cursor->data;
-         struct hash_entry *new_bucket
-           = (new_table->bucket
-              + new_table->hasher (data, new_table->n_buckets));
-
-         if (! (new_bucket < new_table->bucket_limit))
-           abort ();
-
-         next = cursor->next;
-
-         if (new_bucket->data)
-           {
-             if (cursor == bucket)
-               {
-                 /* Allocate or recycle an entry, when moving from a bucket
-                    header into a bucket overflow.  */
-                 struct hash_entry *new_entry = allocate_entry (new_table);
-
-                 if (new_entry == NULL)
-                   return false;
-
-                 new_entry->data = data;
-                 new_entry->next = new_bucket->next;
-                 new_bucket->next = new_entry;
-               }
-             else
-               {
-                 /* Merely relink an existing entry, when moving from a
-                    bucket overflow into a bucket overflow.  */
-                 cursor->next = new_bucket->next;
-                 new_bucket->next = cursor;
-               }
-           }
-         else
-           {
-             /* Free an existing entry, when moving from a bucket
-                overflow into a bucket header.  Also take care of the
-                simple case of moving from a bucket header into a bucket
-                header.  */
-             new_bucket->data = data;
-             new_table->n_buckets_used++;
-             if (cursor != bucket)
-               free_entry (new_table, cursor);
-           }
-       }
-
-  free (table->bucket);
-  table->bucket = new_table->bucket;
-  table->bucket_limit = new_table->bucket_limit;
-  table->n_buckets = new_table->n_buckets;
-  table->n_buckets_used = new_table->n_buckets_used;
-  table->free_entry_list = new_table->free_entry_list;
-  /* table->n_entries already holds its value.  */
-#if USE_OBSTACK
-  table->entry_stack = new_table->entry_stack;
-#endif
-  free (new_table);
-
-  return true;
-}
-
-/* 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.  */
-
-void *
-hash_insert (Hash_table *table, const void *entry)
-{
-  void *data;
-  struct hash_entry *bucket;
-
-  /* The caller cannot insert a NULL entry.  */
-  if (! entry)
-    abort ();
-
-  /* If there's a matching entry already in the table, return that.  */
-  if ((data = hash_find_entry (table, entry, &bucket, false)) != NULL)
-    return data;
-
-  /* ENTRY is not matched, it should be inserted.  */
-
-  if (bucket->data)
-    {
-      struct hash_entry *new_entry = allocate_entry (table);
-
-      if (new_entry == NULL)
-       return NULL;
-
-      /* Add ENTRY in the overflow of the bucket.  */
-
-      new_entry->data = (void *) entry;
-      new_entry->next = bucket->next;
-      bucket->next = new_entry;
-      table->n_entries++;
-      return (void *) entry;
-    }
-
-  /* Add ENTRY right in the bucket head.  */
-
-  bucket->data = (void *) entry;
-  table->n_entries++;
-  table->n_buckets_used++;
-
-  /* If the growth threshold of the buckets in use has been reached, increase
-     the table size and rehash.  There's no point in checking the number of
-     entries:  if the hashing function is ill-conditioned, rehashing is not
-     likely to improve it.  */
-
-  if (table->n_buckets_used
-      > table->tuning->growth_threshold * table->n_buckets)
-    {
-      /* Check more fully, before starting real work.  If tuning arguments
-        became invalid, the second check will rely on proper defaults.  */
-      check_tuning (table);
-      if (table->n_buckets_used
-         > table->tuning->growth_threshold * table->n_buckets)
-       {
-         const Hash_tuning *tuning = table->tuning;
-         float candidate =
-           (tuning->is_n_buckets
-            ? (table->n_buckets * tuning->growth_factor)
-            : (table->n_buckets * tuning->growth_factor
-               * tuning->growth_threshold));
-
-         if (SIZE_MAX <= candidate)
-           return NULL;
-
-         /* If the rehash fails, arrange to return NULL.  */
-         if (!hash_rehash (table, candidate))
-           entry = NULL;
-       }
-    }
-
-  return (void *) entry;
-}
-
-/* If ENTRY is already in the table, remove it and return the just-deleted
-   data (the user may want to deallocate its storage).  If ENTRY is not in the
-   table, don't modify the table and return NULL.  */
-
-void *
-hash_delete (Hash_table *table, const void *entry)
-{
-  void *data;
-  struct hash_entry *bucket;
-
-  data = hash_find_entry (table, entry, &bucket, true);
-  if (!data)
-    return NULL;
-
-  table->n_entries--;
-  if (!bucket->data)
-    {
-      table->n_buckets_used--;
-
-      /* If the shrink threshold of the buckets in use has been reached,
-        rehash into a smaller table.  */
-
-      if (table->n_buckets_used
-         < table->tuning->shrink_threshold * table->n_buckets)
-       {
-         /* Check more fully, before starting real work.  If tuning arguments
-            became invalid, the second check will rely on proper defaults.  */
-         check_tuning (table);
-         if (table->n_buckets_used
-             < table->tuning->shrink_threshold * table->n_buckets)
-           {
-             const Hash_tuning *tuning = table->tuning;
-             size_t candidate =
-               (tuning->is_n_buckets
-                ? table->n_buckets * tuning->shrink_factor
-                : (table->n_buckets * tuning->shrink_factor
-                   * tuning->growth_threshold));
-
-             hash_rehash (table, candidate);
-           }
-       }
-    }
-
-  return data;
-}
-
-/* Testing.  */
-
-#if TESTING
-
-void
-hash_print (const Hash_table *table)
-{
-  struct hash_entry const *bucket;
-
-  for (bucket = table->bucket; bucket < table->bucket_limit; bucket++)
-    {
-      struct hash_entry *cursor;
-
-      if (bucket)
-       printf ("%lu:\n", (unsigned long int) (bucket - table->bucket));
-
-      for (cursor = bucket; cursor; cursor = cursor->next)
-       {
-         char const *s = cursor->data;
-         /* FIXME */
-         if (s)
-           printf ("  %s\n", s);
-       }
-    }
-}
-
-#endif /* TESTING */
diff --git a/lib/hash.h b/lib/hash.h
deleted file mode 100644 (file)
index fc1af28..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/* hash - hashing table processing.
-   Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
-   Written by Jim Meyering <meyering@ascend.com>, 1998.
-
-   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/>.  */
-
-/* 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.  */
-
-#ifndef HASH_H_
-# define HASH_H_
-
-# include <stdio.h>
-# include <stdbool.h>
-
-typedef size_t (*Hash_hasher) (const void *, size_t);
-typedef bool (*Hash_comparator) (const void *, const void *);
-typedef void (*Hash_data_freer) (void *);
-typedef bool (*Hash_processor) (void *, void *);
-
-struct hash_entry
-  {
-    void *data;
-    struct hash_entry *next;
-  };
-
-struct hash_tuning
-  {
-    /* 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 */
-    float growth_threshold;    /* ratio of used buckets to trigger a growth */
-    float growth_factor;       /* ratio of new bigger size to original size */
-    bool is_n_buckets;         /* if CANDIDATE really means table size */
-  };
-
-typedef struct hash_tuning Hash_tuning;
-
-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 *);
-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_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);
-void hash_reset_tuning (Hash_tuning *);
-Hash_table *hash_initialize (size_t, const Hash_tuning *,
-                            Hash_hasher, Hash_comparator,
-                            Hash_data_freer);
-void hash_clear (Hash_table *);
-void hash_free (Hash_table *);
-
-/* Insertion and deletion.  */
-bool hash_rehash (Hash_table *, size_t);
-void *hash_insert (Hash_table *, const void *);
-void *hash_delete (Hash_table *, const void *);
-
-#endif
diff --git a/lib/human.c b/lib/human.c
deleted file mode 100644 (file)
index c7291b7..0000000
+++ /dev/null
@@ -1,471 +0,0 @@
-/* human.c -- print human readable file size
-
-   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006, 2007 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 and Larry McVoy.  */
-
-#include <config.h>
-
-#include "human.h"
-
-#include <locale.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <argmatch.h>
-#include <error.h>
-#include <intprops.h>
-
-/* The maximum length of a suffix like "KiB".  */
-#define HUMAN_READABLE_SUFFIX_LENGTH_MAX 3
-
-static const char power_letter[] =
-{
-  0,   /* not used */
-  'K', /* kibi ('k' for kilo is a special case) */
-  'M', /* mega or mebi */
-  'G', /* giga or gibi */
-  'T', /* tera or tebi */
-  'P', /* peta or pebi */
-  'E', /* exa or exbi */
-  'Z', /* zetta or 2**70 */
-  'Y'  /* yotta or 2**80 */
-};
-
-
-/* If INEXACT_STYLE is not human_round_to_nearest, and if easily
-   possible, adjust VALUE according to the style.  */
-
-static long double
-adjust_value (int inexact_style, long double value)
-{
-  /* Do not use the floorl or ceill functions, as that would mean
-     checking for their presence and possibly linking with the
-     standard math library, which is a porting pain.  So leave the
-     value alone if it is too large to easily round.  */
-  if (inexact_style != human_round_to_nearest && value < UINTMAX_MAX)
-    {
-      uintmax_t u = value;
-      value = u + (inexact_style == human_ceiling && u != value);
-    }
-
-  return value;
-}
-
-/* Group the digits of NUMBER according to the grouping rules of the
-   current locale.  NUMBER contains NUMBERLEN digits.  Modify the
-   bytes pointed to by NUMBER in place, subtracting 1 from NUMBER for
-   each byte inserted.  Return the starting address of the modified
-   number.
-
-   To group the digits, use GROUPING and THOUSANDS_SEP as in `struct
-   lconv' from <locale.h>.  */
-
-static char *
-group_number (char *number, size_t numberlen,
-             char const *grouping, char const *thousands_sep)
-{
-  register char *d;
-  size_t grouplen = SIZE_MAX;
-  size_t thousands_seplen = strlen (thousands_sep);
-  size_t i = numberlen;
-
-  /* The maximum possible value for NUMBERLEN is the number of digits
-     in the square of the largest uintmax_t, so double the size needed.  */
-  char buf[2 * INT_STRLEN_BOUND (uintmax_t) + 1];
-
-  memcpy (buf, number, numberlen);
-  d = number + numberlen;
-
-  for (;;)
-    {
-      unsigned char g = *grouping;
-
-      if (g)
-       {
-         grouplen = g < CHAR_MAX ? g : i;
-         grouping++;
-       }
-
-      if (i < grouplen)
-       grouplen = i;
-
-      d -= grouplen;
-      i -= grouplen;
-      memcpy (d, buf + i, grouplen);
-      if (i == 0)
-       return d;
-
-      d -= thousands_seplen;
-      memcpy (d, thousands_sep, thousands_seplen);
-    }
-}
-
-/* Convert N to a human readable format in BUF, using the options OPTS.
-
-   N is expressed in units of FROM_BLOCK_SIZE.  FROM_BLOCK_SIZE must
-   be nonnegative.
-
-   Use units of TO_BLOCK_SIZE in the output number.  TO_BLOCK_SIZE
-   must be positive.
-
-   Use (OPTS & (human_round_to_nearest | human_floor | human_ceiling))
-   to determine whether to take the ceiling or floor of any result
-   that cannot be expressed exactly.
-
-   If (OPTS & human_group_digits), group the thousands digits
-   according to the locale, e.g., `1,000,000' in an American English
-   locale.
-
-   If (OPTS & human_autoscale), deduce the output block size
-   automatically; TO_BLOCK_SIZE must be 1 but it has no effect on the
-   output.  Use powers of 1024 if (OPTS & human_base_1024), and powers
-   of 1000 otherwise.  For example, assuming powers of 1024, 8500
-   would be converted to 8.3, 133456345 to 127, 56990456345 to 53, and
-   so on.  Numbers smaller than the power aren't modified.
-   human_autoscale is normally used together with human_SI.
-
-   If (OPTS & human_space_before_unit), use a space to separate the
-   number from any suffix that is appended as described below.
-
-   If (OPTS & human_SI), append an SI prefix indicating which power is
-   being used.  If in addition (OPTS & human_B), append "B" (if base
-   1000) or "iB" (if base 1024) to the SI prefix.  When ((OPTS &
-   human_SI) && ! (OPTS & human_autoscale)), TO_BLOCK_SIZE must be a
-   power of 1024 or of 1000, depending on (OPTS &
-   human_base_1024).  */
-
-char *
-human_readable (uintmax_t n, char *buf, int opts,
-               uintmax_t from_block_size, uintmax_t to_block_size)
-{
-  int inexact_style =
-    opts & (human_round_to_nearest | human_floor | human_ceiling);
-  unsigned int base = opts & human_base_1024 ? 1024 : 1000;
-  uintmax_t amt;
-  int tenths;
-  int exponent = -1;
-  int exponent_max = sizeof power_letter - 1;
-  char *p;
-  char *psuffix;
-  char const *integerlim;
-
-  /* 0 means adjusted N == AMT.TENTHS;
-     1 means AMT.TENTHS < adjusted N < AMT.TENTHS + 0.05;
-     2 means adjusted N == AMT.TENTHS + 0.05;
-     3 means AMT.TENTHS + 0.05 < adjusted N < AMT.TENTHS + 0.1.  */
-  int rounding;
-
-  char const *decimal_point = ".";
-  size_t decimal_pointlen = 1;
-  char const *grouping = "";
-  char const *thousands_sep = "";
-  struct lconv const *l = localeconv ();
-  size_t pointlen = strlen (l->decimal_point);
-  if (0 < pointlen && pointlen <= MB_LEN_MAX)
-    {
-      decimal_point = l->decimal_point;
-      decimal_pointlen = pointlen;
-    }
-  grouping = l->grouping;
-  if (strlen (l->thousands_sep) <= MB_LEN_MAX)
-    thousands_sep = l->thousands_sep;
-
-  psuffix = buf + LONGEST_HUMAN_READABLE - HUMAN_READABLE_SUFFIX_LENGTH_MAX;
-  p = psuffix;
-
-  /* Adjust AMT out of FROM_BLOCK_SIZE units and into TO_BLOCK_SIZE
-     units.  If this can be done exactly with integer arithmetic, do
-     not use floating point operations.  */
-  if (to_block_size <= from_block_size)
-    {
-      if (from_block_size % to_block_size == 0)
-       {
-         uintmax_t multiplier = from_block_size / to_block_size;
-         amt = n * multiplier;
-         if (amt / multiplier == n)
-           {
-             tenths = 0;
-             rounding = 0;
-             goto use_integer_arithmetic;
-           }
-       }
-    }
-  else if (from_block_size != 0 && to_block_size % from_block_size == 0)
-    {
-      uintmax_t divisor = to_block_size / from_block_size;
-      uintmax_t r10 = (n % divisor) * 10;
-      uintmax_t r2 = (r10 % divisor) * 2;
-      amt = n / divisor;
-      tenths = r10 / divisor;
-      rounding = r2 < divisor ? 0 < r2 : 2 + (divisor < r2);
-      goto use_integer_arithmetic;
-    }
-
-  {
-    /* Either the result cannot be computed easily using uintmax_t,
-       or from_block_size is zero.  Fall back on floating point.
-       FIXME: This can yield answers that are slightly off.  */
-
-    long double dto_block_size = to_block_size;
-    long double damt = n * (from_block_size / dto_block_size);
-    size_t buflen;
-    size_t nonintegerlen;
-
-    if (! (opts & human_autoscale))
-      {
-       sprintf (buf, "%.0Lf", adjust_value (inexact_style, damt));
-       buflen = strlen (buf);
-       nonintegerlen = 0;
-      }
-    else
-      {
-       long double e = 1;
-       exponent = 0;
-
-       do
-         {
-           e *= base;
-           exponent++;
-         }
-       while (e * base <= damt && exponent < exponent_max);
-
-       damt /= e;
-
-       sprintf (buf, "%.1Lf", adjust_value (inexact_style, damt));
-       buflen = strlen (buf);
-       nonintegerlen = decimal_pointlen + 1;
-
-       if (1 + nonintegerlen + ! (opts & human_base_1024) < buflen
-           || ((opts & human_suppress_point_zero)
-               && buf[buflen - 1] == '0'))
-         {
-           sprintf (buf, "%.0Lf",
-                    adjust_value (inexact_style, damt * 10) / 10);
-           buflen = strlen (buf);
-           nonintegerlen = 0;
-         }
-      }
-
-    p = psuffix - buflen;
-    memmove (p, buf, buflen);
-    integerlim = p + buflen - nonintegerlen;
-  }
-  goto do_grouping;
-
- use_integer_arithmetic:
-  {
-    /* The computation can be done exactly, with integer arithmetic.
-
-       Use power of BASE notation if requested and if adjusted AMT is
-       large enough.  */
-
-    if (opts & human_autoscale)
-      {
-       exponent = 0;
-
-       if (base <= amt)
-         {
-           do
-             {
-               unsigned int r10 = (amt % base) * 10 + tenths;
-               unsigned int r2 = (r10 % base) * 2 + (rounding >> 1);
-               amt /= base;
-               tenths = r10 / base;
-               rounding = (r2 < base
-                           ? (r2 + rounding) != 0
-                           : 2 + (base < r2 + rounding));
-               exponent++;
-             }
-           while (base <= amt && exponent < exponent_max);
-
-           if (amt < 10)
-             {
-               if (inexact_style == human_round_to_nearest
-                   ? 2 < rounding + (tenths & 1)
-                   : inexact_style == human_ceiling && 0 < rounding)
-                 {
-                   tenths++;
-                   rounding = 0;
-
-                   if (tenths == 10)
-                     {
-                       amt++;
-                       tenths = 0;
-                     }
-                 }
-
-               if (amt < 10
-                   && (tenths || ! (opts & human_suppress_point_zero)))
-                 {
-                   *--p = '0' + tenths;
-                   p -= decimal_pointlen;
-                   memcpy (p, decimal_point, decimal_pointlen);
-                   tenths = rounding = 0;
-                 }
-             }
-         }
-      }
-
-    if (inexact_style == human_round_to_nearest
-       ? 5 < tenths + (0 < rounding + (amt & 1))
-       : inexact_style == human_ceiling && 0 < tenths + rounding)
-      {
-       amt++;
-
-       if ((opts & human_autoscale)
-           && amt == base && exponent < exponent_max)
-         {
-           exponent++;
-           if (! (opts & human_suppress_point_zero))
-             {
-               *--p = '0';
-               p -= decimal_pointlen;
-               memcpy (p, decimal_point, decimal_pointlen);
-             }
-           amt = 1;
-         }
-      }
-
-    integerlim = p;
-
-    do
-      {
-       int digit = amt % 10;
-       *--p = digit + '0';
-      }
-    while ((amt /= 10) != 0);
-  }
-
- do_grouping:
-  if (opts & human_group_digits)
-    p = group_number (p, integerlim - p, grouping, thousands_sep);
-
-  if (opts & human_SI)
-    {
-      if (exponent < 0)
-       {
-         uintmax_t power;
-         exponent = 0;
-         for (power = 1; power < to_block_size; power *= base)
-           if (++exponent == exponent_max)
-             break;
-       }
-
-      if ((exponent | (opts & human_B)) && (opts & human_space_before_unit))
-       *psuffix++ = ' ';
-
-      if (exponent)
-       *psuffix++ = (! (opts & human_base_1024) && exponent == 1
-                     ? 'k'
-                     : power_letter[exponent]);
-
-      if (opts & human_B)
-       {
-         if ((opts & human_base_1024) && exponent)
-           *psuffix++ = 'i';
-         *psuffix++ = 'B';
-       }
-    }
-
-  *psuffix = '\0';
-
-  return p;
-}
-
-
-/* The default block size used for output.  This number may change in
-   the future as disks get larger.  */
-#ifndef DEFAULT_BLOCK_SIZE
-# define DEFAULT_BLOCK_SIZE 1024
-#endif
-
-static char const *const block_size_args[] = { "human-readable", "si", 0 };
-static int const block_size_opts[] =
-  {
-    human_autoscale + human_SI + human_base_1024,
-    human_autoscale + human_SI
-  };
-
-static uintmax_t
-default_block_size (void)
-{
-  return getenv ("POSIXLY_CORRECT") ? 512 : DEFAULT_BLOCK_SIZE;
-}
-
-static strtol_error
-humblock (char const *spec, uintmax_t *block_size, int *options)
-{
-  int i;
-  int opts = 0;
-
-  if (! spec
-      && ! (spec = getenv ("BLOCK_SIZE"))
-      && ! (spec = getenv ("BLOCKSIZE")))
-    *block_size = default_block_size ();
-  else
-    {
-      if (*spec == '\'')
-       {
-         opts |= human_group_digits;
-         spec++;
-       }
-
-      if (0 <= (i = ARGMATCH (spec, block_size_args, block_size_opts)))
-       {
-         opts |= block_size_opts[i];
-         *block_size = 1;
-       }
-      else
-       {
-         char *ptr;
-         strtol_error e = xstrtoumax (spec, &ptr, 0, block_size,
-                                      "eEgGkKmMpPtTyYzZ0");
-         if (e != LONGINT_OK)
-           {
-             *options = 0;
-             return e;
-           }
-         for (; ! ('0' <= *spec && *spec <= '9'); spec++)
-           if (spec == ptr)
-             {
-               opts |= human_SI;
-               if (ptr[-1] == 'B')
-                 opts |= human_B;
-               if (ptr[-1] != 'B' || ptr[-2] == 'i')
-                 opts |= human_base_1024;
-               break;
-             }
-       }
-    }
-
-  *options = opts;
-  return LONGINT_OK;
-}
-
-enum strtol_error
-human_options (char const *spec, int *opts, uintmax_t *block_size)
-{
-  strtol_error e = humblock (spec, block_size, opts);
-  if (*block_size == 0)
-    {
-      *block_size = default_block_size ();
-      e = LONGINT_INVALID;
-    }
-  return e;
-}
diff --git a/lib/human.h b/lib/human.h
deleted file mode 100644 (file)
index 11b1e0c..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/* human.h -- print human readable file size
-
-   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006, 2007 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 and Larry McVoy.  */
-
-#ifndef HUMAN_H_
-# define HUMAN_H_ 1
-
-# include <limits.h>
-# include <stdbool.h>
-# include <stdint.h>
-# include <unistd.h>
-
-# include <xstrtol.h>
-
-/* A conservative bound on the maximum length of a human-readable string.
-   The output can be the square of the largest uintmax_t, so double
-   its size before converting to a bound.
-   log10 (2.0) < 146/485.  Add 1 for integer division truncation.
-   Also, the output can have a thousands separator between every digit,
-   so multiply by MB_LEN_MAX + 1 and then subtract MB_LEN_MAX.
-   Append 1 for a space before the suffix.
-   Finally, append 3, the maximum length of a suffix.  */
-# define LONGEST_HUMAN_READABLE \
-  ((2 * sizeof (uintmax_t) * CHAR_BIT * 146 / 485 + 1) * (MB_LEN_MAX + 1) \
-   - MB_LEN_MAX + 1 + 3)
-
-/* Options for human_readable.  */
-enum
-{
-  /* Unless otherwise specified these options may be ORed together.  */
-
-  /* The following three options are mutually exclusive.  */
-  /* Round to plus infinity (default).  */
-  human_ceiling = 0,
-  /* Round to nearest, ties to even.  */
-  human_round_to_nearest = 1,
-  /* Round to minus infinity.  */
-  human_floor = 2,
-
-  /* Group digits together, e.g. `1,000,000'.  This uses the
-     locale-defined grouping; the traditional C locale does not group,
-     so this has effect only if some other locale is in use.  */
-  human_group_digits = 4,
-
-  /* When autoscaling, suppress ".0" at end.  */
-  human_suppress_point_zero = 8,
-
-  /* Scale output and use SI-style units, ignoring the output block size.  */
-  human_autoscale = 16,
-
-  /* Prefer base 1024 to base 1000.  */
-  human_base_1024 = 32,
-
-  /* Prepend " " before unit symbol.  */
-  human_space_before_unit = 64,
-
-  /* Append SI prefix, e.g. "k" or "M".  */
-  human_SI = 128,
-
-  /* Append "B" (if base 1000) or "iB" (if base 1024) to SI prefix.  */
-  human_B = 256
-};
-
-char *human_readable (uintmax_t, char *, int, uintmax_t, uintmax_t);
-
-enum strtol_error human_options (char const *, int *, uintmax_t *);
-
-#endif /* HUMAN_H_ */
diff --git a/lib/imaxtostr.c b/lib/imaxtostr.c
deleted file mode 100644 (file)
index 5e87ad5..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#define inttostr imaxtostr
-#define inttype intmax_t
-#include "inttostr.c"
diff --git a/lib/intprops.h b/lib/intprops.h
deleted file mode 100644 (file)
index 002161e..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/* intprops.h -- properties of integer types
-
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 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.  */
-
-#include <limits.h>
-
-/* The extra casts in the following macros work around compiler bugs,
-   e.g., in Cray C 5.0.3.0.  */
-
-/* True if the arithmetic type T is an integer type.  bool counts as
-   an integer.  */
-#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1)
-
-/* True if negative values of the signed integer type T use two's
-   complement, ones' complement, or signed magnitude representation,
-   respectively.  Much GNU code assumes two's complement, but some
-   people like to be portable to all possible C hosts.  */
-#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
-#define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
-#define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
-
-/* True if the arithmetic type T is signed.  */
-#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
-
-/* The maximum and minimum values for the integer type T.  These
-   macros have undefined behavior if T is signed and has padding bits.
-   If this is a problem for you, please let us know how to fix it for
-   your host.  */
-#define TYPE_MINIMUM(t) \
-  ((t) (! TYPE_SIGNED (t) \
-       ? (t) 0 \
-       : TYPE_SIGNED_MAGNITUDE (t) \
-       ? ~ (t) 0 \
-       : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
-#define TYPE_MAXIMUM(t) \
-  ((t) (! TYPE_SIGNED (t) \
-       ? (t) -1 \
-       : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
-
-/* Return zero if T can be determined to be an unsigned type.
-   Otherwise, return 1.
-   When compiling with GCC, INT_STRLEN_BOUND uses this macro to obtain a
-   tighter bound.  Otherwise, it overestimates the true bound by one byte
-   when applied to unsigned types of size 2, 4, 16, ... bytes.
-   The symbol signed_type_or_expr__ is private to this header file.  */
-#if __GNUC__ >= 2
-# define signed_type_or_expr__(t) TYPE_SIGNED (__typeof__ (t))
-#else
-# define signed_type_or_expr__(t) 1
-#endif
-
-/* Bound on length of the string representing an integer type or expression T.
-   Subtract 1 for the sign bit if T is signed; log10 (2.0) < 146/485;
-   add 1 for integer division truncation; add 1 more for a minus sign
-   if needed.  */
-#define INT_STRLEN_BOUND(t) \
-  ((sizeof (t) * CHAR_BIT - signed_type_or_expr__ (t)) * 146 / 485 \
-   + signed_type_or_expr__ (t) + 1)
-
-/* Bound on buffer size needed to represent an integer type or expression T,
-   including the terminating null.  */
-#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1)
diff --git a/lib/inttostr.c b/lib/inttostr.c
deleted file mode 100644 (file)
index ed6a693..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/* inttostr.c -- convert integers to printable strings
-
-   Copyright (C) 2001, 2006, 2008 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 */
-
-/* Tell gcc not to warn about the (i < 0) test, below.  */
-#if (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) || 4 < __GNUC__
-# pragma GCC diagnostic ignored "-Wtype-limits"
-#endif
-
-#include <config.h>
-
-#include "inttostr.h"
-
-/* Convert I to a printable string in BUF, which must be at least
-   INT_BUFSIZE_BOUND (INTTYPE) bytes long.  Return the address of the
-   printable string, which need not start at BUF.  */
-
-char *
-inttostr (inttype i, char *buf)
-{
-  char *p = buf + INT_STRLEN_BOUND (inttype);
-  *p = 0;
-
-  if (i < 0)
-    {
-      do
-       *--p = '0' - i % 10;
-      while ((i /= 10) != 0);
-
-      *--p = '-';
-    }
-  else
-    {
-      do
-       *--p = '0' + i % 10;
-      while ((i /= 10) != 0);
-    }
-
-  return p;
-}
diff --git a/lib/inttostr.h b/lib/inttostr.h
deleted file mode 100644 (file)
index a103caf..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/* inttostr.h -- convert integers to printable strings
-
-   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 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 */
-
-#include <stdint.h>
-#include <sys/types.h>
-
-#include "intprops.h"
-
-#ifndef __GNUC_PREREQ
-# if defined __GNUC__ && defined __GNUC_MINOR__
-#  define __GNUC_PREREQ(maj, min) \
-         ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
-# else
-#  define __GNUC_PREREQ(maj, min) 0
-# endif
-#endif
-
-#if __GNUC_PREREQ (3,4)
-# undef __attribute_warn_unused_result__
-# define __attribute_warn_unused_result__ \
-   __attribute__ ((__warn_unused_result__))
-#else
-# define __attribute_warn_unused_result__ /* empty */
-#endif
-
-char *offtostr (off_t, char *) __attribute_warn_unused_result__;
-char *imaxtostr (intmax_t, char *) __attribute_warn_unused_result__;
-char *umaxtostr (uintmax_t, char *) __attribute_warn_unused_result__;
-char *uinttostr (unsigned int, char *) __attribute_warn_unused_result__;
diff --git a/lib/inttypes.in.h b/lib/inttypes.in.h
deleted file mode 100644 (file)
index 33cec2d..0000000
+++ /dev/null
@@ -1,1098 +0,0 @@
-/* Copyright (C) 2006-2008 Free Software Foundation, Inc.
-   Written by Paul Eggert, Bruno Haible, Derek Price.
-   This file is part of gnulib.
-
-   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/>.  */
-
-/*
- * ISO C 99 <inttypes.h> for platforms that lack it.
- * <http://www.opengroup.org/susv3xbd/inttypes.h.html>
- */
-
-/* Include the original <inttypes.h> if it exists, and if this file
-   has not been included yet or if this file includes gnulib stdint.h
-   which in turn includes this file.
-   The include_next requires a split double-inclusion guard.  */
-#if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
-# if @HAVE_INTTYPES_H@
-#  if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#  endif
-#  @INCLUDE_NEXT@ @NEXT_INTTYPES_H@
-# endif
-#endif
-
-#if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
-#define INTTYPES_H
-
-/* Include <stdint.h> or the gnulib replacement.  */
-#include <stdint.h>
-/* Get CHAR_BIT.  */
-#include <limits.h>
-
-#if !(INT_MIN == INT32_MIN && INT_MAX == INT32_MAX)
-# error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>."
-#endif
-
-/* The definition of GL_LINK_WARNING is copied here.  */
-
-/* 7.8.1 Macros for format specifiers */
-
-#if ! defined __cplusplus || defined __STDC_FORMAT_MACROS
-
-# if defined _TNS_R_TARGET
-   /* Tandem NonStop R series and compatible platforms released before
-      July 2005 support %Ld but not %lld.  */
-#  define _LONG_LONG_FORMAT_PREFIX "L"
-# else
-#  define _LONG_LONG_FORMAT_PREFIX "ll"
-# endif
-
-# if !defined PRId8 || @PRI_MACROS_BROKEN@
-#  undef PRId8
-#  ifdef INT8_MAX
-#   define PRId8 "d"
-#  endif
-# endif
-# if !defined PRIi8 || @PRI_MACROS_BROKEN@
-#  undef PRIi8
-#  ifdef INT8_MAX
-#   define PRIi8 "i"
-#  endif
-# endif
-# if !defined PRIo8 || @PRI_MACROS_BROKEN@
-#  undef PRIo8
-#  ifdef UINT8_MAX
-#   define PRIo8 "o"
-#  endif
-# endif
-# if !defined PRIu8 || @PRI_MACROS_BROKEN@
-#  undef PRIu8
-#  ifdef UINT8_MAX
-#   define PRIu8 "u"
-#  endif
-# endif
-# if !defined PRIx8 || @PRI_MACROS_BROKEN@
-#  undef PRIx8
-#  ifdef UINT8_MAX
-#   define PRIx8 "x"
-#  endif
-# endif
-# if !defined PRIX8 || @PRI_MACROS_BROKEN@
-#  undef PRIX8
-#  ifdef UINT8_MAX
-#   define PRIX8 "X"
-#  endif
-# endif
-# if !defined PRId16 || @PRI_MACROS_BROKEN@
-#  undef PRId16
-#  ifdef INT16_MAX
-#   define PRId16 "d"
-#  endif
-# endif
-# if !defined PRIi16 || @PRI_MACROS_BROKEN@
-#  undef PRIi16
-#  ifdef INT16_MAX
-#   define PRIi16 "i"
-#  endif
-# endif
-# if !defined PRIo16 || @PRI_MACROS_BROKEN@
-#  undef PRIo16
-#  ifdef UINT16_MAX
-#   define PRIo16 "o"
-#  endif
-# endif
-# if !defined PRIu16 || @PRI_MACROS_BROKEN@
-#  undef PRIu16
-#  ifdef UINT16_MAX
-#   define PRIu16 "u"
-#  endif
-# endif
-# if !defined PRIx16 || @PRI_MACROS_BROKEN@
-#  undef PRIx16
-#  ifdef UINT16_MAX
-#   define PRIx16 "x"
-#  endif
-# endif
-# if !defined PRIX16 || @PRI_MACROS_BROKEN@
-#  undef PRIX16
-#  ifdef UINT16_MAX
-#   define PRIX16 "X"
-#  endif
-# endif
-# if !defined PRId32 || @PRI_MACROS_BROKEN@
-#  undef PRId32
-#  ifdef INT32_MAX
-#   define PRId32 "d"
-#  endif
-# endif
-# if !defined PRIi32 || @PRI_MACROS_BROKEN@
-#  undef PRIi32
-#  ifdef INT32_MAX
-#   define PRIi32 "i"
-#  endif
-# endif
-# if !defined PRIo32 || @PRI_MACROS_BROKEN@
-#  undef PRIo32
-#  ifdef UINT32_MAX
-#   define PRIo32 "o"
-#  endif
-# endif
-# if !defined PRIu32 || @PRI_MACROS_BROKEN@
-#  undef PRIu32
-#  ifdef UINT32_MAX
-#   define PRIu32 "u"
-#  endif
-# endif
-# if !defined PRIx32 || @PRI_MACROS_BROKEN@
-#  undef PRIx32
-#  ifdef UINT32_MAX
-#   define PRIx32 "x"
-#  endif
-# endif
-# if !defined PRIX32 || @PRI_MACROS_BROKEN@
-#  undef PRIX32
-#  ifdef UINT32_MAX
-#   define PRIX32 "X"
-#  endif
-# endif
-# ifdef INT64_MAX
-#  if (@APPLE_UNIVERSAL_BUILD@ ? _LP64 : @INT64_MAX_EQ_LONG_MAX@)
-#   define _PRI64_PREFIX "l"
-#  elif defined _MSC_VER || defined __MINGW32__
-#   define _PRI64_PREFIX "I64"
-#  elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
-#   define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX
-#  endif
-#  if !defined PRId64 || @PRI_MACROS_BROKEN@
-#   undef PRId64
-#   define PRId64 _PRI64_PREFIX "d"
-#  endif
-#  if !defined PRIi64 || @PRI_MACROS_BROKEN@
-#   undef PRIi64
-#   define PRIi64 _PRI64_PREFIX "i"
-#  endif
-# endif
-# ifdef UINT64_MAX
-#  if (@APPLE_UNIVERSAL_BUILD@ ? _LP64 : @UINT64_MAX_EQ_ULONG_MAX@)
-#   define _PRIu64_PREFIX "l"
-#  elif defined _MSC_VER || defined __MINGW32__
-#   define _PRIu64_PREFIX "I64"
-#  elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
-#   define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX
-#  endif
-#  if !defined PRIo64 || @PRI_MACROS_BROKEN@
-#   undef PRIo64
-#   define PRIo64 _PRIu64_PREFIX "o"
-#  endif
-#  if !defined PRIu64 || @PRI_MACROS_BROKEN@
-#   undef PRIu64
-#   define PRIu64 _PRIu64_PREFIX "u"
-#  endif
-#  if !defined PRIx64 || @PRI_MACROS_BROKEN@
-#   undef PRIx64
-#   define PRIx64 _PRIu64_PREFIX "x"
-#  endif
-#  if !defined PRIX64 || @PRI_MACROS_BROKEN@
-#   undef PRIX64
-#   define PRIX64 _PRIu64_PREFIX "X"
-#  endif
-# endif
-
-# if !defined PRIdLEAST8 || @PRI_MACROS_BROKEN@
-#  undef PRIdLEAST8
-#  define PRIdLEAST8 "d"
-# endif
-# if !defined PRIiLEAST8 || @PRI_MACROS_BROKEN@
-#  undef PRIiLEAST8
-#  define PRIiLEAST8 "i"
-# endif
-# if !defined PRIoLEAST8 || @PRI_MACROS_BROKEN@
-#  undef PRIoLEAST8
-#  define PRIoLEAST8 "o"
-# endif
-# if !defined PRIuLEAST8 || @PRI_MACROS_BROKEN@
-#  undef PRIuLEAST8
-#  define PRIuLEAST8 "u"
-# endif
-# if !defined PRIxLEAST8 || @PRI_MACROS_BROKEN@
-#  undef PRIxLEAST8
-#  define PRIxLEAST8 "x"
-# endif
-# if !defined PRIXLEAST8 || @PRI_MACROS_BROKEN@
-#  undef PRIXLEAST8
-#  define PRIXLEAST8 "X"
-# endif
-# if !defined PRIdLEAST16 || @PRI_MACROS_BROKEN@
-#  undef PRIdLEAST16
-#  define PRIdLEAST16 "d"
-# endif
-# if !defined PRIiLEAST16 || @PRI_MACROS_BROKEN@
-#  undef PRIiLEAST16
-#  define PRIiLEAST16 "i"
-# endif
-# if !defined PRIoLEAST16 || @PRI_MACROS_BROKEN@
-#  undef PRIoLEAST16
-#  define PRIoLEAST16 "o"
-# endif
-# if !defined PRIuLEAST16 || @PRI_MACROS_BROKEN@
-#  undef PRIuLEAST16
-#  define PRIuLEAST16 "u"
-# endif
-# if !defined PRIxLEAST16 || @PRI_MACROS_BROKEN@
-#  undef PRIxLEAST16
-#  define PRIxLEAST16 "x"
-# endif
-# if !defined PRIXLEAST16 || @PRI_MACROS_BROKEN@
-#  undef PRIXLEAST16
-#  define PRIXLEAST16 "X"
-# endif
-# if !defined PRIdLEAST32 || @PRI_MACROS_BROKEN@
-#  undef PRIdLEAST32
-#  define PRIdLEAST32 "d"
-# endif
-# if !defined PRIiLEAST32 || @PRI_MACROS_BROKEN@
-#  undef PRIiLEAST32
-#  define PRIiLEAST32 "i"
-# endif
-# if !defined PRIoLEAST32 || @PRI_MACROS_BROKEN@
-#  undef PRIoLEAST32
-#  define PRIoLEAST32 "o"
-# endif
-# if !defined PRIuLEAST32 || @PRI_MACROS_BROKEN@
-#  undef PRIuLEAST32
-#  define PRIuLEAST32 "u"
-# endif
-# if !defined PRIxLEAST32 || @PRI_MACROS_BROKEN@
-#  undef PRIxLEAST32
-#  define PRIxLEAST32 "x"
-# endif
-# if !defined PRIXLEAST32 || @PRI_MACROS_BROKEN@
-#  undef PRIXLEAST32
-#  define PRIXLEAST32 "X"
-# endif
-# ifdef INT64_MAX
-#  if !defined PRIdLEAST64 || @PRI_MACROS_BROKEN@
-#   undef PRIdLEAST64
-#   define PRIdLEAST64 PRId64
-#  endif
-#  if !defined PRIiLEAST64 || @PRI_MACROS_BROKEN@
-#   undef PRIiLEAST64
-#   define PRIiLEAST64 PRIi64
-#  endif
-# endif
-# ifdef UINT64_MAX
-#  if !defined PRIoLEAST64 || @PRI_MACROS_BROKEN@
-#   undef PRIoLEAST64
-#   define PRIoLEAST64 PRIo64
-#  endif
-#  if !defined PRIuLEAST64 || @PRI_MACROS_BROKEN@
-#   undef PRIuLEAST64
-#   define PRIuLEAST64 PRIu64
-#  endif
-#  if !defined PRIxLEAST64 || @PRI_MACROS_BROKEN@
-#   undef PRIxLEAST64
-#   define PRIxLEAST64 PRIx64
-#  endif
-#  if !defined PRIXLEAST64 || @PRI_MACROS_BROKEN@
-#   undef PRIXLEAST64
-#   define PRIXLEAST64 PRIX64
-#  endif
-# endif
-
-# if !defined PRIdFAST8 || @PRI_MACROS_BROKEN@
-#  undef PRIdFAST8
-#  if INT_FAST8_MAX > INT32_MAX
-#   define PRIdFAST8 PRId64
-#  else
-#   define PRIdFAST8 "d"
-#  endif
-# endif
-# if !defined PRIiFAST8 || @PRI_MACROS_BROKEN@
-#  undef PRIiFAST8
-#  if INT_FAST8_MAX > INT32_MAX
-#   define PRIiFAST8 PRIi64
-#  else
-#   define PRIiFAST8 "i"
-#  endif
-# endif
-# if !defined PRIoFAST8 || @PRI_MACROS_BROKEN@
-#  undef PRIoFAST8
-#  if UINT_FAST8_MAX > UINT32_MAX
-#   define PRIoFAST8 PRIo64
-#  else
-#   define PRIoFAST8 "o"
-#  endif
-# endif
-# if !defined PRIuFAST8 || @PRI_MACROS_BROKEN@
-#  undef PRIuFAST8
-#  if UINT_FAST8_MAX > UINT32_MAX
-#   define PRIuFAST8 PRIu64
-#  else
-#   define PRIuFAST8 "u"
-#  endif
-# endif
-# if !defined PRIxFAST8 || @PRI_MACROS_BROKEN@
-#  undef PRIxFAST8
-#  if UINT_FAST8_MAX > UINT32_MAX
-#   define PRIxFAST8 PRIx64
-#  else
-#   define PRIxFAST8 "x"
-#  endif
-# endif
-# if !defined PRIXFAST8 || @PRI_MACROS_BROKEN@
-#  undef PRIXFAST8
-#  if UINT_FAST8_MAX > UINT32_MAX
-#   define PRIXFAST8 PRIX64
-#  else
-#   define PRIXFAST8 "X"
-#  endif
-# endif
-# if !defined PRIdFAST16 || @PRI_MACROS_BROKEN@
-#  undef PRIdFAST16
-#  if INT_FAST16_MAX > INT32_MAX
-#   define PRIdFAST16 PRId64
-#  else
-#   define PRIdFAST16 "d"
-#  endif
-# endif
-# if !defined PRIiFAST16 || @PRI_MACROS_BROKEN@
-#  undef PRIiFAST16
-#  if INT_FAST16_MAX > INT32_MAX
-#   define PRIiFAST16 PRIi64
-#  else
-#   define PRIiFAST16 "i"
-#  endif
-# endif
-# if !defined PRIoFAST16 || @PRI_MACROS_BROKEN@
-#  undef PRIoFAST16
-#  if UINT_FAST16_MAX > UINT32_MAX
-#   define PRIoFAST16 PRIo64
-#  else
-#   define PRIoFAST16 "o"
-#  endif
-# endif
-# if !defined PRIuFAST16 || @PRI_MACROS_BROKEN@
-#  undef PRIuFAST16
-#  if UINT_FAST16_MAX > UINT32_MAX
-#   define PRIuFAST16 PRIu64
-#  else
-#   define PRIuFAST16 "u"
-#  endif
-# endif
-# if !defined PRIxFAST16 || @PRI_MACROS_BROKEN@
-#  undef PRIxFAST16
-#  if UINT_FAST16_MAX > UINT32_MAX
-#   define PRIxFAST16 PRIx64
-#  else
-#   define PRIxFAST16 "x"
-#  endif
-# endif
-# if !defined PRIXFAST16 || @PRI_MACROS_BROKEN@
-#  undef PRIXFAST16
-#  if UINT_FAST16_MAX > UINT32_MAX
-#   define PRIXFAST16 PRIX64
-#  else
-#   define PRIXFAST16 "X"
-#  endif
-# endif
-# if !defined PRIdFAST32 || @PRI_MACROS_BROKEN@
-#  undef PRIdFAST32
-#  if INT_FAST32_MAX > INT32_MAX
-#   define PRIdFAST32 PRId64
-#  else
-#   define PRIdFAST32 "d"
-#  endif
-# endif
-# if !defined PRIiFAST32 || @PRI_MACROS_BROKEN@
-#  undef PRIiFAST32
-#  if INT_FAST32_MAX > INT32_MAX
-#   define PRIiFAST32 PRIi64
-#  else
-#   define PRIiFAST32 "i"
-#  endif
-# endif
-# if !defined PRIoFAST32 || @PRI_MACROS_BROKEN@
-#  undef PRIoFAST32
-#  if UINT_FAST32_MAX > UINT32_MAX
-#   define PRIoFAST32 PRIo64
-#  else
-#   define PRIoFAST32 "o"
-#  endif
-# endif
-# if !defined PRIuFAST32 || @PRI_MACROS_BROKEN@
-#  undef PRIuFAST32
-#  if UINT_FAST32_MAX > UINT32_MAX
-#   define PRIuFAST32 PRIu64
-#  else
-#   define PRIuFAST32 "u"
-#  endif
-# endif
-# if !defined PRIxFAST32 || @PRI_MACROS_BROKEN@
-#  undef PRIxFAST32
-#  if UINT_FAST32_MAX > UINT32_MAX
-#   define PRIxFAST32 PRIx64
-#  else
-#   define PRIxFAST32 "x"
-#  endif
-# endif
-# if !defined PRIXFAST32 || @PRI_MACROS_BROKEN@
-#  undef PRIXFAST32
-#  if UINT_FAST32_MAX > UINT32_MAX
-#   define PRIXFAST32 PRIX64
-#  else
-#   define PRIXFAST32 "X"
-#  endif
-# endif
-# ifdef INT64_MAX
-#  if !defined PRIdFAST64 || @PRI_MACROS_BROKEN@
-#   undef PRIdFAST64
-#   define PRIdFAST64 PRId64
-#  endif
-#  if !defined PRIiFAST64 || @PRI_MACROS_BROKEN@
-#   undef PRIiFAST64
-#   define PRIiFAST64 PRIi64
-#  endif
-# endif
-# ifdef UINT64_MAX
-#  if !defined PRIoFAST64 || @PRI_MACROS_BROKEN@
-#   undef PRIoFAST64
-#   define PRIoFAST64 PRIo64
-#  endif
-#  if !defined PRIuFAST64 || @PRI_MACROS_BROKEN@
-#   undef PRIuFAST64
-#   define PRIuFAST64 PRIu64
-#  endif
-#  if !defined PRIxFAST64 || @PRI_MACROS_BROKEN@
-#   undef PRIxFAST64
-#   define PRIxFAST64 PRIx64
-#  endif
-#  if !defined PRIXFAST64 || @PRI_MACROS_BROKEN@
-#   undef PRIXFAST64
-#   define PRIXFAST64 PRIX64
-#  endif
-# endif
-
-# if !defined PRIdMAX || @PRI_MACROS_BROKEN@
-#  undef PRIdMAX
-#  if @INT32_MAX_LT_INTMAX_MAX@
-#   define PRIdMAX PRId64
-#  else
-#   define PRIdMAX "ld"
-#  endif
-# endif
-# if !defined PRIiMAX || @PRI_MACROS_BROKEN@
-#  undef PRIiMAX
-#  if @INT32_MAX_LT_INTMAX_MAX@
-#   define PRIiMAX PRIi64
-#  else
-#   define PRIiMAX "li"
-#  endif
-# endif
-# if !defined PRIoMAX || @PRI_MACROS_BROKEN@
-#  undef PRIoMAX
-#  if @UINT32_MAX_LT_UINTMAX_MAX@
-#   define PRIoMAX PRIo64
-#  else
-#   define PRIoMAX "lo"
-#  endif
-# endif
-# if !defined PRIuMAX || @PRI_MACROS_BROKEN@
-#  undef PRIuMAX
-#  if @UINT32_MAX_LT_UINTMAX_MAX@
-#   define PRIuMAX PRIu64
-#  else
-#   define PRIuMAX "lu"
-#  endif
-# endif
-# if !defined PRIxMAX || @PRI_MACROS_BROKEN@
-#  undef PRIxMAX
-#  if @UINT32_MAX_LT_UINTMAX_MAX@
-#   define PRIxMAX PRIx64
-#  else
-#   define PRIxMAX "lx"
-#  endif
-# endif
-# if !defined PRIXMAX || @PRI_MACROS_BROKEN@
-#  undef PRIXMAX
-#  if @UINT32_MAX_LT_UINTMAX_MAX@
-#   define PRIXMAX PRIX64
-#  else
-#   define PRIXMAX "lX"
-#  endif
-# endif
-
-# if !defined PRIdPTR || @PRI_MACROS_BROKEN@
-#  undef PRIdPTR
-#  ifdef INTPTR_MAX
-#   define PRIdPTR @PRIPTR_PREFIX@ "d"
-#  endif
-# endif
-# if !defined PRIiPTR || @PRI_MACROS_BROKEN@
-#  undef PRIiPTR
-#  ifdef INTPTR_MAX
-#   define PRIiPTR @PRIPTR_PREFIX@ "i"
-#  endif
-# endif
-# if !defined PRIoPTR || @PRI_MACROS_BROKEN@
-#  undef PRIoPTR
-#  ifdef UINTPTR_MAX
-#   define PRIoPTR @PRIPTR_PREFIX@ "o"
-#  endif
-# endif
-# if !defined PRIuPTR || @PRI_MACROS_BROKEN@
-#  undef PRIuPTR
-#  ifdef UINTPTR_MAX
-#   define PRIuPTR @PRIPTR_PREFIX@ "u"
-#  endif
-# endif
-# if !defined PRIxPTR || @PRI_MACROS_BROKEN@
-#  undef PRIxPTR
-#  ifdef UINTPTR_MAX
-#   define PRIxPTR @PRIPTR_PREFIX@ "x"
-#  endif
-# endif
-# if !defined PRIXPTR || @PRI_MACROS_BROKEN@
-#  undef PRIXPTR
-#  ifdef UINTPTR_MAX
-#   define PRIXPTR @PRIPTR_PREFIX@ "X"
-#  endif
-# endif
-
-# if !defined SCNd8 || @PRI_MACROS_BROKEN@
-#  undef SCNd8
-#  ifdef INT8_MAX
-#   define SCNd8 "hhd"
-#  endif
-# endif
-# if !defined SCNi8 || @PRI_MACROS_BROKEN@
-#  undef SCNi8
-#  ifdef INT8_MAX
-#   define SCNi8 "hhi"
-#  endif
-# endif
-# if !defined SCNo8 || @PRI_MACROS_BROKEN@
-#  undef SCNo8
-#  ifdef UINT8_MAX
-#   define SCNo8 "hho"
-#  endif
-# endif
-# if !defined SCNu8 || @PRI_MACROS_BROKEN@
-#  undef SCNu8
-#  ifdef UINT8_MAX
-#   define SCNu8 "hhu"
-#  endif
-# endif
-# if !defined SCNx8 || @PRI_MACROS_BROKEN@
-#  undef SCNx8
-#  ifdef UINT8_MAX
-#   define SCNx8 "hhx"
-#  endif
-# endif
-# if !defined SCNd16 || @PRI_MACROS_BROKEN@
-#  undef SCNd16
-#  ifdef INT16_MAX
-#   define SCNd16 "hd"
-#  endif
-# endif
-# if !defined SCNi16 || @PRI_MACROS_BROKEN@
-#  undef SCNi16
-#  ifdef INT16_MAX
-#   define SCNi16 "hi"
-#  endif
-# endif
-# if !defined SCNo16 || @PRI_MACROS_BROKEN@
-#  undef SCNo16
-#  ifdef UINT16_MAX
-#   define SCNo16 "ho"
-#  endif
-# endif
-# if !defined SCNu16 || @PRI_MACROS_BROKEN@
-#  undef SCNu16
-#  ifdef UINT16_MAX
-#   define SCNu16 "hu"
-#  endif
-# endif
-# if !defined SCNx16 || @PRI_MACROS_BROKEN@
-#  undef SCNx16
-#  ifdef UINT16_MAX
-#   define SCNx16 "hx"
-#  endif
-# endif
-# if !defined SCNd32 || @PRI_MACROS_BROKEN@
-#  undef SCNd32
-#  ifdef INT32_MAX
-#   define SCNd32 "d"
-#  endif
-# endif
-# if !defined SCNi32 || @PRI_MACROS_BROKEN@
-#  undef SCNi32
-#  ifdef INT32_MAX
-#   define SCNi32 "i"
-#  endif
-# endif
-# if !defined SCNo32 || @PRI_MACROS_BROKEN@
-#  undef SCNo32
-#  ifdef UINT32_MAX
-#   define SCNo32 "o"
-#  endif
-# endif
-# if !defined SCNu32 || @PRI_MACROS_BROKEN@
-#  undef SCNu32
-#  ifdef UINT32_MAX
-#   define SCNu32 "u"
-#  endif
-# endif
-# if !defined SCNx32 || @PRI_MACROS_BROKEN@
-#  undef SCNx32
-#  ifdef UINT32_MAX
-#   define SCNx32 "x"
-#  endif
-# endif
-# ifdef INT64_MAX
-#  if (@APPLE_UNIVERSAL_BUILD@ ? _LP64 : @INT64_MAX_EQ_LONG_MAX@)
-#   define _SCN64_PREFIX "l"
-#  elif defined _MSC_VER || defined __MINGW32__
-#   define _SCN64_PREFIX "I64"
-#  elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
-#   define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX
-#  endif
-#  if !defined SCNd64 || @PRI_MACROS_BROKEN@
-#   undef SCNd64
-#   define SCNd64 _SCN64_PREFIX "d"
-#  endif
-#  if !defined SCNi64 || @PRI_MACROS_BROKEN@
-#   undef SCNi64
-#   define SCNi64 _SCN64_PREFIX "i"
-#  endif
-# endif
-# ifdef UINT64_MAX
-#  if (@APPLE_UNIVERSAL_BUILD@ ? _LP64 : @UINT64_MAX_EQ_ULONG_MAX@)
-#   define _SCNu64_PREFIX "l"
-#  elif defined _MSC_VER || defined __MINGW32__
-#   define _SCNu64_PREFIX "I64"
-#  elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
-#   define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX
-#  endif
-#  if !defined SCNo64 || @PRI_MACROS_BROKEN@
-#   undef SCNo64
-#   define SCNo64 _SCNu64_PREFIX "o"
-#  endif
-#  if !defined SCNu64 || @PRI_MACROS_BROKEN@
-#   undef SCNu64
-#   define SCNu64 _SCNu64_PREFIX "u"
-#  endif
-#  if !defined SCNx64 || @PRI_MACROS_BROKEN@
-#   undef SCNx64
-#   define SCNx64 _SCNu64_PREFIX "x"
-#  endif
-# endif
-
-# if !defined SCNdLEAST8 || @PRI_MACROS_BROKEN@
-#  undef SCNdLEAST8
-#  define SCNdLEAST8 "hhd"
-# endif
-# if !defined SCNiLEAST8 || @PRI_MACROS_BROKEN@
-#  undef SCNiLEAST8
-#  define SCNiLEAST8 "hhi"
-# endif
-# if !defined SCNoLEAST8 || @PRI_MACROS_BROKEN@
-#  undef SCNoLEAST8
-#  define SCNoLEAST8 "hho"
-# endif
-# if !defined SCNuLEAST8 || @PRI_MACROS_BROKEN@
-#  undef SCNuLEAST8
-#  define SCNuLEAST8 "hhu"
-# endif
-# if !defined SCNxLEAST8 || @PRI_MACROS_BROKEN@
-#  undef SCNxLEAST8
-#  define SCNxLEAST8 "hhx"
-# endif
-# if !defined SCNdLEAST16 || @PRI_MACROS_BROKEN@
-#  undef SCNdLEAST16
-#  define SCNdLEAST16 "hd"
-# endif
-# if !defined SCNiLEAST16 || @PRI_MACROS_BROKEN@
-#  undef SCNiLEAST16
-#  define SCNiLEAST16 "hi"
-# endif
-# if !defined SCNoLEAST16 || @PRI_MACROS_BROKEN@
-#  undef SCNoLEAST16
-#  define SCNoLEAST16 "ho"
-# endif
-# if !defined SCNuLEAST16 || @PRI_MACROS_BROKEN@
-#  undef SCNuLEAST16
-#  define SCNuLEAST16 "hu"
-# endif
-# if !defined SCNxLEAST16 || @PRI_MACROS_BROKEN@
-#  undef SCNxLEAST16
-#  define SCNxLEAST16 "hx"
-# endif
-# if !defined SCNdLEAST32 || @PRI_MACROS_BROKEN@
-#  undef SCNdLEAST32
-#  define SCNdLEAST32 "d"
-# endif
-# if !defined SCNiLEAST32 || @PRI_MACROS_BROKEN@
-#  undef SCNiLEAST32
-#  define SCNiLEAST32 "i"
-# endif
-# if !defined SCNoLEAST32 || @PRI_MACROS_BROKEN@
-#  undef SCNoLEAST32
-#  define SCNoLEAST32 "o"
-# endif
-# if !defined SCNuLEAST32 || @PRI_MACROS_BROKEN@
-#  undef SCNuLEAST32
-#  define SCNuLEAST32 "u"
-# endif
-# if !defined SCNxLEAST32 || @PRI_MACROS_BROKEN@
-#  undef SCNxLEAST32
-#  define SCNxLEAST32 "x"
-# endif
-# ifdef INT64_MAX
-#  if !defined SCNdLEAST64 || @PRI_MACROS_BROKEN@
-#   undef SCNdLEAST64
-#   define SCNdLEAST64 SCNd64
-#  endif
-#  if !defined SCNiLEAST64 || @PRI_MACROS_BROKEN@
-#   undef SCNiLEAST64
-#   define SCNiLEAST64 SCNi64
-#  endif
-# endif
-# ifdef UINT64_MAX
-#  if !defined SCNoLEAST64 || @PRI_MACROS_BROKEN@
-#   undef SCNoLEAST64
-#   define SCNoLEAST64 SCNo64
-#  endif
-#  if !defined SCNuLEAST64 || @PRI_MACROS_BROKEN@
-#   undef SCNuLEAST64
-#   define SCNuLEAST64 SCNu64
-#  endif
-#  if !defined SCNxLEAST64 || @PRI_MACROS_BROKEN@
-#   undef SCNxLEAST64
-#   define SCNxLEAST64 SCNx64
-#  endif
-# endif
-
-# if !defined SCNdFAST8 || @PRI_MACROS_BROKEN@
-#  undef SCNdFAST8
-#  if INT_FAST8_MAX > INT32_MAX
-#   define SCNdFAST8 SCNd64
-#  elif INT_FAST8_MAX == 0x7fff
-#   define SCNdFAST8 "hd"
-#  elif INT_FAST8_MAX == 0x7f
-#   define SCNdFAST8 "hhd"
-#  else
-#   define SCNdFAST8 "d"
-#  endif
-# endif
-# if !defined SCNiFAST8 || @PRI_MACROS_BROKEN@
-#  undef SCNiFAST8
-#  if INT_FAST8_MAX > INT32_MAX
-#   define SCNiFAST8 SCNi64
-#  elif INT_FAST8_MAX == 0x7fff
-#   define SCNiFAST8 "hi"
-#  elif INT_FAST8_MAX == 0x7f
-#   define SCNiFAST8 "hhi"
-#  else
-#   define SCNiFAST8 "i"
-#  endif
-# endif
-# if !defined SCNoFAST8 || @PRI_MACROS_BROKEN@
-#  undef SCNoFAST8
-#  if UINT_FAST8_MAX > UINT32_MAX
-#   define SCNoFAST8 SCNo64
-#  elif UINT_FAST8_MAX == 0xffff
-#   define SCNoFAST8 "ho"
-#  elif UINT_FAST8_MAX == 0xff
-#   define SCNoFAST8 "hho"
-#  else
-#   define SCNoFAST8 "o"
-#  endif
-# endif
-# if !defined SCNuFAST8 || @PRI_MACROS_BROKEN@
-#  undef SCNuFAST8
-#  if UINT_FAST8_MAX > UINT32_MAX
-#   define SCNuFAST8 SCNu64
-#  elif UINT_FAST8_MAX == 0xffff
-#   define SCNuFAST8 "hu"
-#  elif UINT_FAST8_MAX == 0xff
-#   define SCNuFAST8 "hhu"
-#  else
-#   define SCNuFAST8 "u"
-#  endif
-# endif
-# if !defined SCNxFAST8 || @PRI_MACROS_BROKEN@
-#  undef SCNxFAST8
-#  if UINT_FAST8_MAX > UINT32_MAX
-#   define SCNxFAST8 SCNx64
-#  elif UINT_FAST8_MAX == 0xffff
-#   define SCNxFAST8 "hx"
-#  elif UINT_FAST8_MAX == 0xff
-#   define SCNxFAST8 "hhx"
-#  else
-#   define SCNxFAST8 "x"
-#  endif
-# endif
-# if !defined SCNdFAST16 || @PRI_MACROS_BROKEN@
-#  undef SCNdFAST16
-#  if INT_FAST16_MAX > INT32_MAX
-#   define SCNdFAST16 SCNd64
-#  elif INT_FAST16_MAX == 0x7fff
-#   define SCNdFAST16 "hd"
-#  else
-#   define SCNdFAST16 "d"
-#  endif
-# endif
-# if !defined SCNiFAST16 || @PRI_MACROS_BROKEN@
-#  undef SCNiFAST16
-#  if INT_FAST16_MAX > INT32_MAX
-#   define SCNiFAST16 SCNi64
-#  elif INT_FAST16_MAX == 0x7fff
-#   define SCNiFAST16 "hi"
-#  else
-#   define SCNiFAST16 "i"
-#  endif
-# endif
-# if !defined SCNoFAST16 || @PRI_MACROS_BROKEN@
-#  undef SCNoFAST16
-#  if UINT_FAST16_MAX > UINT32_MAX
-#   define SCNoFAST16 SCNo64
-#  elif UINT_FAST16_MAX == 0xffff
-#   define SCNoFAST16 "ho"
-#  else
-#   define SCNoFAST16 "o"
-#  endif
-# endif
-# if !defined SCNuFAST16 || @PRI_MACROS_BROKEN@
-#  undef SCNuFAST16
-#  if UINT_FAST16_MAX > UINT32_MAX
-#   define SCNuFAST16 SCNu64
-#  elif UINT_FAST16_MAX == 0xffff
-#   define SCNuFAST16 "hu"
-#  else
-#   define SCNuFAST16 "u"
-#  endif
-# endif
-# if !defined SCNxFAST16 || @PRI_MACROS_BROKEN@
-#  undef SCNxFAST16
-#  if UINT_FAST16_MAX > UINT32_MAX
-#   define SCNxFAST16 SCNx64
-#  elif UINT_FAST16_MAX == 0xffff
-#   define SCNxFAST16 "hx"
-#  else
-#   define SCNxFAST16 "x"
-#  endif
-# endif
-# if !defined SCNdFAST32 || @PRI_MACROS_BROKEN@
-#  undef SCNdFAST32
-#  if INT_FAST32_MAX > INT32_MAX
-#   define SCNdFAST32 SCNd64
-#  else
-#   define SCNdFAST32 "d"
-#  endif
-# endif
-# if !defined SCNiFAST32 || @PRI_MACROS_BROKEN@
-#  undef SCNiFAST32
-#  if INT_FAST32_MAX > INT32_MAX
-#   define SCNiFAST32 SCNi64
-#  else
-#   define SCNiFAST32 "i"
-#  endif
-# endif
-# if !defined SCNoFAST32 || @PRI_MACROS_BROKEN@
-#  undef SCNoFAST32
-#  if UINT_FAST32_MAX > UINT32_MAX
-#   define SCNoFAST32 SCNo64
-#  else
-#   define SCNoFAST32 "o"
-#  endif
-# endif
-# if !defined SCNuFAST32 || @PRI_MACROS_BROKEN@
-#  undef SCNuFAST32
-#  if UINT_FAST32_MAX > UINT32_MAX
-#   define SCNuFAST32 SCNu64
-#  else
-#   define SCNuFAST32 "u"
-#  endif
-# endif
-# if !defined SCNxFAST32 || @PRI_MACROS_BROKEN@
-#  undef SCNxFAST32
-#  if UINT_FAST32_MAX > UINT32_MAX
-#   define SCNxFAST32 SCNx64
-#  else
-#   define SCNxFAST32 "x"
-#  endif
-# endif
-# ifdef INT64_MAX
-#  if !defined SCNdFAST64 || @PRI_MACROS_BROKEN@
-#   undef SCNdFAST64
-#   define SCNdFAST64 SCNd64
-#  endif
-#  if !defined SCNiFAST64 || @PRI_MACROS_BROKEN@
-#   undef SCNiFAST64
-#   define SCNiFAST64 SCNi64
-#  endif
-# endif
-# ifdef UINT64_MAX
-#  if !defined SCNoFAST64 || @PRI_MACROS_BROKEN@
-#   undef SCNoFAST64
-#   define SCNoFAST64 SCNo64
-#  endif
-#  if !defined SCNuFAST64 || @PRI_MACROS_BROKEN@
-#   undef SCNuFAST64
-#   define SCNuFAST64 SCNu64
-#  endif
-#  if !defined SCNxFAST64 || @PRI_MACROS_BROKEN@
-#   undef SCNxFAST64
-#   define SCNxFAST64 SCNx64
-#  endif
-# endif
-
-# if !defined SCNdMAX || @PRI_MACROS_BROKEN@
-#  undef SCNdMAX
-#  if @INT32_MAX_LT_INTMAX_MAX@
-#   define SCNdMAX SCNd64
-#  else
-#   define SCNdMAX "ld"
-#  endif
-# endif
-# if !defined SCNiMAX || @PRI_MACROS_BROKEN@
-#  undef SCNiMAX
-#  if @INT32_MAX_LT_INTMAX_MAX@
-#   define SCNiMAX SCNi64
-#  else
-#   define SCNiMAX "li"
-#  endif
-# endif
-# if !defined SCNoMAX || @PRI_MACROS_BROKEN@
-#  undef SCNoMAX
-#  if @UINT32_MAX_LT_UINTMAX_MAX@
-#   define SCNoMAX SCNo64
-#  else
-#   define SCNoMAX "lo"
-#  endif
-# endif
-# if !defined SCNuMAX || @PRI_MACROS_BROKEN@
-#  undef SCNuMAX
-#  if @UINT32_MAX_LT_UINTMAX_MAX@
-#   define SCNuMAX SCNu64
-#  else
-#   define SCNuMAX "lu"
-#  endif
-# endif
-# if !defined SCNxMAX || @PRI_MACROS_BROKEN@
-#  undef SCNxMAX
-#  if @UINT32_MAX_LT_UINTMAX_MAX@
-#   define SCNxMAX SCNx64
-#  else
-#   define SCNxMAX "lx"
-#  endif
-# endif
-
-# if !defined SCNdPTR || @PRI_MACROS_BROKEN@
-#  undef SCNdPTR
-#  ifdef INTPTR_MAX
-#   define SCNdPTR @PRIPTR_PREFIX@ "d"
-#  endif
-# endif
-# if !defined SCNiPTR || @PRI_MACROS_BROKEN@
-#  undef SCNiPTR
-#  ifdef INTPTR_MAX
-#   define SCNiPTR @PRIPTR_PREFIX@ "i"
-#  endif
-# endif
-# if !defined SCNoPTR || @PRI_MACROS_BROKEN@
-#  undef SCNoPTR
-#  ifdef UINTPTR_MAX
-#   define SCNoPTR @PRIPTR_PREFIX@ "o"
-#  endif
-# endif
-# if !defined SCNuPTR || @PRI_MACROS_BROKEN@
-#  undef SCNuPTR
-#  ifdef UINTPTR_MAX
-#   define SCNuPTR @PRIPTR_PREFIX@ "u"
-#  endif
-# endif
-# if !defined SCNxPTR || @PRI_MACROS_BROKEN@
-#  undef SCNxPTR
-#  ifdef UINTPTR_MAX
-#   define SCNxPTR @PRIPTR_PREFIX@ "x"
-#  endif
-# endif
-
-#endif
-
-/* 7.8.2 Functions for greatest-width integer types */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if @GNULIB_IMAXABS@
-# if !@HAVE_DECL_IMAXABS@
-extern intmax_t imaxabs (intmax_t);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef imaxabs
-# define imaxabs(a) \
-    (GL_LINK_WARNING ("imaxabs is unportable - " \
-                      "use gnulib module imaxabs for portability"), \
-     imaxabs (a))
-#endif
-
-#if @GNULIB_IMAXDIV@
-# if !@HAVE_DECL_IMAXDIV@
-typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t;
-extern imaxdiv_t imaxdiv (intmax_t, intmax_t);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef imaxdiv
-# define imaxdiv(a,b) \
-    (GL_LINK_WARNING ("imaxdiv is unportable - " \
-                      "use gnulib module imaxdiv for portability"), \
-     imaxdiv (a, b))
-#endif
-
-#if @GNULIB_STRTOIMAX@
-# if !@HAVE_DECL_STRTOIMAX@
-extern intmax_t strtoimax (const char *, char **, int);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strtoimax
-# define strtoimax(p,e,b) \
-    (GL_LINK_WARNING ("strtoimax is unportable - " \
-                      "use gnulib module strtoimax for portability"), \
-     strtoimax (p, e, b))
-#endif
-
-#if @GNULIB_STRTOUMAX@
-# if !@HAVE_DECL_STRTOUMAX@
-extern uintmax_t strtoumax (const char *, char **, int);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strtoumax
-# define strtoumax(p,e,b) \
-    (GL_LINK_WARNING ("strtoumax is unportable - " \
-                      "use gnulib module strtoumax for portability"), \
-     strtoumax (p, e, b))
-#endif
-
-/* Don't bother defining or declaring wcstoimax and wcstoumax, since
-   wide-character functions like this are hardly ever useful.  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */
diff --git a/lib/lchown.c b/lib/lchown.c
deleted file mode 100644 (file)
index 07aef87..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Provide a stub lchown function for systems that lack it.
-
-   Copyright (C) 1998, 1999, 2002, 2004, 2006, 2007 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 */
-
-#include <config.h>
-
-/* If the system chown does not follow symlinks, we don't want it
-   replaced by gnulib's chown, which does follow symlinks.  */
-#if CHOWN_MODIFIES_SYMLINK
-# define REPLACE_CHOWN 0
-#endif
-#include <unistd.h>
-
-#include <errno.h>
-#include <sys/stat.h>
-
-/* Some systems don't have EOPNOTSUPP.  */
-#ifndef EOPNOTSUPP
-# ifdef ENOTSUP
-#  define EOPNOTSUPP ENOTSUP
-# else
-/* Some systems don't have ENOTSUP either.  */
-#  define EOPNOTSUPP EINVAL
-# endif
-#endif
-
-/* Work just like chown, except when FILE is a symbolic link.
-   In that case, set errno to EOPNOTSUPP and return -1.
-   But if autoconf tests determined that chown modifies
-   symlinks, then just call chown.  */
-
-int
-lchown (const char *file, uid_t uid, gid_t gid)
-{
-#if ! CHOWN_MODIFIES_SYMLINK
-  struct stat stats;
-
-  if (lstat (file, &stats) == 0 && S_ISLNK (stats.st_mode))
-    {
-      errno = EOPNOTSUPP;
-      return -1;
-    }
-#endif
-
-  return chown (file, uid, gid);
-}
diff --git a/lib/localcharset.c b/lib/localcharset.c
deleted file mode 100644 (file)
index b4998ee..0000000
+++ /dev/null
@@ -1,501 +0,0 @@
-/* -*- 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-2009 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* Written by Bruno Haible <bruno@clisp.org>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include "localcharset.h"
-
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#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 */
-#endif
-
-#if defined _WIN32 || defined __WIN32__
-# define WIN32_NATIVE
-#endif
-
-#if defined __EMX__
-/* Assume EMX program runs on OS/2, even if compiled under DOS.  */
-# ifndef OS2
-#  define OS2
-# endif
-#endif
-
-#if !defined WIN32_NATIVE
-# if HAVE_LANGINFO_CODESET
-#  include <langinfo.h>
-# else
-#  if 0 /* see comment below */
-#   include <locale.h>
-#  endif
-# endif
-# ifdef __CYGWIN__
-#  define WIN32_LEAN_AND_MEAN
-#  include <windows.h>
-# endif
-#elif defined WIN32_NATIVE
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-#endif
-#if defined OS2
-# define INCL_DOS
-# include <os2.h>
-#endif
-
-#if ENABLE_RELOCATABLE
-# include "relocatable.h"
-#else
-# define relocate(pathname) (pathname)
-#endif
-
-/* Get LIBDIR.  */
-#ifndef LIBDIR
-# include "configmake.h"
-#endif
-
-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
-  /* Win32, Cygwin, OS/2, DOS */
-# define ISSLASH(C) ((C) == '/' || (C) == '\\')
-#endif
-
-#ifndef DIRECTORY_SEPARATOR
-# define DIRECTORY_SEPARATOR '/'
-#endif
-
-#ifndef ISSLASH
-# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
-#endif
-
-#if HAVE_DECL_GETC_UNLOCKED
-# undef getc
-# define getc getc_unlocked
-#endif
-
-/* The following static variable is declared 'volatile' to avoid a
-   possible multithread problem in the function get_charset_aliases. If we
-   are running in a threaded environment, and if two threads initialize
-   'charset_aliases' simultaneously, both will produce the same value,
-   and everything will be ok if the two assignments to 'charset_aliases'
-   are atomic. But I don't know what will happen if the two assignments mix.  */
-#if __STDC__ != 1
-# define volatile /* empty */
-#endif
-/* Pointer to the contents of the charset.alias file, if it has already been
-   read, else NULL.  Its format is:
-   ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0'  */
-static const char * volatile charset_aliases;
-
-/* Return a pointer to the contents of the charset.alias file.  */
-static const char *
-get_charset_aliases (void)
-{
-  const char *cp;
-
-  cp = charset_aliases;
-  if (cp == NULL)
-    {
-#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__)
-      FILE *fp;
-      const char *dir;
-      const char *base = "charset.alias";
-      char *file_name;
-
-      /* Make it possible to override the charset.alias location.  This is
-        necessary for running the testsuite before "make install".  */
-      dir = getenv ("CHARSETALIASDIR");
-      if (dir == NULL || dir[0] == '\0')
-       dir = relocate (LIBDIR);
-
-      /* Concatenate dir and base into freshly allocated file_name.  */
-      {
-       size_t dir_len = strlen (dir);
-       size_t base_len = strlen (base);
-       int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
-       file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
-       if (file_name != NULL)
-         {
-           memcpy (file_name, dir, dir_len);
-           if (add_slash)
-             file_name[dir_len] = DIRECTORY_SEPARATOR;
-           memcpy (file_name + dir_len + add_slash, base, base_len + 1);
-         }
-      }
-
-      if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
-       /* Out of memory or file not found, treat it as empty.  */
-       cp = "";
-      else
-       {
-         /* Parse the file's contents.  */
-         char *res_ptr = NULL;
-         size_t res_size = 0;
-
-         for (;;)
-           {
-             int c;
-             char buf1[50+1];
-             char buf2[50+1];
-             size_t l1, l2;
-             char *old_res_ptr;
-
-             c = getc (fp);
-             if (c == EOF)
-               break;
-             if (c == '\n' || c == ' ' || c == '\t')
-               continue;
-             if (c == '#')
-               {
-                 /* Skip comment, to end of line.  */
-                 do
-                   c = getc (fp);
-                 while (!(c == EOF || c == '\n'));
-                 if (c == EOF)
-                   break;
-                 continue;
-               }
-             ungetc (c, fp);
-             if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
-               break;
-             l1 = strlen (buf1);
-             l2 = strlen (buf2);
-             old_res_ptr = res_ptr;
-             if (res_size == 0)
-               {
-                 res_size = l1 + 1 + l2 + 1;
-                 res_ptr = (char *) malloc (res_size + 1);
-               }
-             else
-               {
-                 res_size += l1 + 1 + l2 + 1;
-                 res_ptr = (char *) realloc (res_ptr, res_size + 1);
-               }
-             if (res_ptr == NULL)
-               {
-                 /* Out of memory. */
-                 res_size = 0;
-                 if (old_res_ptr != NULL)
-                   free (old_res_ptr);
-                 break;
-               }
-             strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
-             strcpy (res_ptr + res_size - (l2 + 1), buf2);
-           }
-         fclose (fp);
-         if (res_size == 0)
-           cp = "";
-         else
-           {
-             *(res_ptr + res_size) = '\0';
-             cp = res_ptr;
-           }
-       }
-
-      if (file_name != NULL)
-       free (file_name);
-
-#else
-
-# if defined DARWIN7
-      /* To avoid the trouble of installing a file that is shared by many
-        GNU packages -- many packaging systems have problems with this --,
-        simply inline the aliases here.  */
-      cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
-          "ISO8859-2" "\0" "ISO-8859-2" "\0"
-          "ISO8859-4" "\0" "ISO-8859-4" "\0"
-          "ISO8859-5" "\0" "ISO-8859-5" "\0"
-          "ISO8859-7" "\0" "ISO-8859-7" "\0"
-          "ISO8859-9" "\0" "ISO-8859-9" "\0"
-          "ISO8859-13" "\0" "ISO-8859-13" "\0"
-          "ISO8859-15" "\0" "ISO-8859-15" "\0"
-          "KOI8-R" "\0" "KOI8-R" "\0"
-          "KOI8-U" "\0" "KOI8-U" "\0"
-          "CP866" "\0" "CP866" "\0"
-          "CP949" "\0" "CP949" "\0"
-          "CP1131" "\0" "CP1131" "\0"
-          "CP1251" "\0" "CP1251" "\0"
-          "eucCN" "\0" "GB2312" "\0"
-          "GB2312" "\0" "GB2312" "\0"
-          "eucJP" "\0" "EUC-JP" "\0"
-          "eucKR" "\0" "EUC-KR" "\0"
-          "Big5" "\0" "BIG5" "\0"
-          "Big5HKSCS" "\0" "BIG5-HKSCS" "\0"
-          "GBK" "\0" "GBK" "\0"
-          "GB18030" "\0" "GB18030" "\0"
-          "SJIS" "\0" "SHIFT_JIS" "\0"
-          "ARMSCII-8" "\0" "ARMSCII-8" "\0"
-          "PT154" "\0" "PT154" "\0"
-        /*"ISCII-DEV" "\0" "?" "\0"*/
-          "*" "\0" "UTF-8" "\0";
-# endif
-
-# if defined VMS
-      /* To avoid the troubles of an extra file charset.alias_vms in the
-        sources of many GNU packages, simply inline the aliases here.  */
-      /* The list of encodings is taken from the OpenVMS 7.3-1 documentation
-        "Compaq C Run-Time Library Reference Manual for OpenVMS systems"
-        section 10.7 "Handling Different Character Sets".  */
-      cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
-          "ISO8859-2" "\0" "ISO-8859-2" "\0"
-          "ISO8859-5" "\0" "ISO-8859-5" "\0"
-          "ISO8859-7" "\0" "ISO-8859-7" "\0"
-          "ISO8859-8" "\0" "ISO-8859-8" "\0"
-          "ISO8859-9" "\0" "ISO-8859-9" "\0"
-          /* Japanese */
-          "eucJP" "\0" "EUC-JP" "\0"
-          "SJIS" "\0" "SHIFT_JIS" "\0"
-          "DECKANJI" "\0" "DEC-KANJI" "\0"
-          "SDECKANJI" "\0" "EUC-JP" "\0"
-          /* Chinese */
-          "eucTW" "\0" "EUC-TW" "\0"
-          "DECHANYU" "\0" "DEC-HANYU" "\0"
-          "DECHANZI" "\0" "GB2312" "\0"
-          /* Korean */
-          "DECKOREAN" "\0" "EUC-KR" "\0";
-# endif
-
-# if defined WIN32_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.  */
-
-      cp = "CP936" "\0" "GBK" "\0"
-          "CP1361" "\0" "JOHAB" "\0"
-          "CP20127" "\0" "ASCII" "\0"
-          "CP20866" "\0" "KOI8-R" "\0"
-          "CP20936" "\0" "GB2312" "\0"
-          "CP21866" "\0" "KOI8-RU" "\0"
-          "CP28591" "\0" "ISO-8859-1" "\0"
-          "CP28592" "\0" "ISO-8859-2" "\0"
-          "CP28593" "\0" "ISO-8859-3" "\0"
-          "CP28594" "\0" "ISO-8859-4" "\0"
-          "CP28595" "\0" "ISO-8859-5" "\0"
-          "CP28596" "\0" "ISO-8859-6" "\0"
-          "CP28597" "\0" "ISO-8859-7" "\0"
-          "CP28598" "\0" "ISO-8859-8" "\0"
-          "CP28599" "\0" "ISO-8859-9" "\0"
-          "CP28605" "\0" "ISO-8859-15" "\0"
-          "CP38598" "\0" "ISO-8859-8" "\0"
-          "CP51932" "\0" "EUC-JP" "\0"
-          "CP51936" "\0" "GB2312" "\0"
-          "CP51949" "\0" "EUC-KR" "\0"
-          "CP51950" "\0" "EUC-TW" "\0"
-          "CP54936" "\0" "GB18030" "\0"
-          "CP65001" "\0" "UTF-8" "\0";
-# endif
-#endif
-
-      charset_aliases = cp;
-    }
-
-  return cp;
-}
-
-/* Determine the current locale's character encoding, and canonicalize it
-   into one of the canonical names listed in config.charset.
-   The result must not be freed; it is statically allocated.
-   If the canonical name cannot be determined, the result is a non-canonical
-   name.  */
-
-#ifdef STATIC
-STATIC
-#endif
-const char *
-locale_charset (void)
-{
-  const char *codeset;
-  const char *aliases;
-
-#if !(defined WIN32_NATIVE || defined OS2)
-
-# if HAVE_LANGINFO_CODESET
-
-  /* Most systems support nl_langinfo (CODESET) nowadays.  */
-  codeset = nl_langinfo (CODESET);
-
-#  ifdef __CYGWIN__
-  /* Cygwin 2006 does not have locales.  nl_langinfo (CODESET) always
-     returns "US-ASCII".  As long as this is not fixed, return the suffix
-     of the locale name from the environment variables (if present) or
-     the codepage as a number.  */
-  if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0)
-    {
-      const char *locale;
-      static char buf[2 + 10 + 1];
-
-      locale = getenv ("LC_ALL");
-      if (locale == NULL || locale[0] == '\0')
-       {
-         locale = getenv ("LC_CTYPE");
-         if (locale == NULL || locale[0] == '\0')
-           locale = getenv ("LANG");
-       }
-      if (locale != NULL && locale[0] != '\0')
-       {
-         /* If the locale name contains an encoding after the dot, return
-            it.  */
-         const char *dot = strchr (locale, '.');
-
-         if (dot != NULL)
-           {
-             const char *modifier;
-
-             dot++;
-             /* Look for the possible @... trailer and remove it, if any.  */
-             modifier = strchr (dot, '@');
-             if (modifier == NULL)
-               return dot;
-             if (modifier - dot < sizeof (buf))
-               {
-                 memcpy (buf, dot, modifier - dot);
-                 buf [modifier - dot] = '\0';
-                 return buf;
-               }
-           }
-       }
-
-      /* Woe32 has a function returning the locale's codepage as a number.  */
-      sprintf (buf, "CP%u", GetACP ());
-      codeset = buf;
-    }
-#  endif
-
-# else
-
-  /* On old systems which lack it, use setlocale or getenv.  */
-  const char *locale = NULL;
-
-  /* But most old systems don't have a complete set of locales.  Some
-     (like SunOS 4 or DJGPP) have only the C locale.  Therefore we don't
-     use setlocale here; it would return "C" when it doesn't support the
-     locale name the user has set.  */
-#  if 0
-  locale = setlocale (LC_CTYPE, NULL);
-#  endif
-  if (locale == NULL || locale[0] == '\0')
-    {
-      locale = getenv ("LC_ALL");
-      if (locale == NULL || locale[0] == '\0')
-       {
-         locale = getenv ("LC_CTYPE");
-         if (locale == NULL || locale[0] == '\0')
-           locale = getenv ("LANG");
-       }
-    }
-
-  /* On some old systems, one used to set locale = "iso8859_1". On others,
-     you set it to "language_COUNTRY.charset". In any case, we resolve it
-     through the charset.alias file.  */
-  codeset = locale;
-
-# endif
-
-#elif defined WIN32_NATIVE
-
-  static char buf[2 + 10 + 1];
-
-  /* Woe32 has a function returning the locale's codepage as a number.  */
-  sprintf (buf, "CP%u", GetACP ());
-  codeset = buf;
-
-#elif defined OS2
-
-  const char *locale;
-  static char buf[2 + 10 + 1];
-  ULONG cp[3];
-  ULONG cplen;
-
-  /* Allow user to override the codeset, as set in the operating system,
-     with standard language environment variables.  */
-  locale = getenv ("LC_ALL");
-  if (locale == NULL || locale[0] == '\0')
-    {
-      locale = getenv ("LC_CTYPE");
-      if (locale == NULL || locale[0] == '\0')
-       locale = getenv ("LANG");
-    }
-  if (locale != NULL && locale[0] != '\0')
-    {
-      /* If the locale name contains an encoding after the dot, return it.  */
-      const char *dot = strchr (locale, '.');
-
-      if (dot != NULL)
-       {
-         const char *modifier;
-
-         dot++;
-         /* Look for the possible @... trailer and remove it, if any.  */
-         modifier = strchr (dot, '@');
-         if (modifier == NULL)
-           return dot;
-         if (modifier - dot < sizeof (buf))
-           {
-             memcpy (buf, dot, modifier - dot);
-             buf [modifier - dot] = '\0';
-             return buf;
-           }
-       }
-
-      /* Resolve through the charset.alias file.  */
-      codeset = locale;
-    }
-  else
-    {
-      /* OS/2 has a function returning the locale's codepage as a number.  */
-      if (DosQueryCp (sizeof (cp), cp, &cplen))
-       codeset = "";
-      else
-       {
-         sprintf (buf, "CP%u", cp[0]);
-         codeset = buf;
-       }
-    }
-
-#endif
-
-  if (codeset == NULL)
-    /* The canonical name cannot be determined.  */
-    codeset = "";
-
-  /* Resolve alias. */
-  for (aliases = get_charset_aliases ();
-       *aliases != '\0';
-       aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
-    if (strcmp (codeset, aliases) == 0
-       || (aliases[0] == '*' && aliases[1] == '\0'))
-      {
-       codeset = aliases + strlen (aliases) + 1;
-       break;
-      }
-
-  /* Don't return an empty string.  GNU libc and GNU libiconv interpret
-     the empty string as denoting "the locale's character encoding",
-     thus GNU libiconv would call this function a second time.  */
-  if (codeset[0] == '\0')
-    codeset = "ASCII";
-
-  return codeset;
-}
diff --git a/lib/localcharset.h b/lib/localcharset.h
deleted file mode 100644 (file)
index 7f0b974..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/* -*- 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 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
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _LOCALCHARSET_H
-#define _LOCALCHARSET_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Determine the current locale's character encoding, and canonicalize it
-   into one of the canonical names listed in config.charset.
-   The result must not be freed; it is statically allocated.
-   If the canonical name cannot be determined, the result is a non-canonical
-   name.  */
-extern const char * locale_charset (void);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _LOCALCHARSET_H */
diff --git a/lib/lseek.c b/lib/lseek.c
deleted file mode 100644 (file)
index f0b7603..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* An lseek() function that detects pipes.
-   Copyright (C) 2007 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include <unistd.h>
-
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-/* Windows platforms.  */
-/* Get GetFileType.  */
-# include <windows.h>
-#else
-# include <sys/stat.h>
-#endif
-#include <errno.h>
-
-#undef lseek
-
-off_t
-rpl_lseek (int fd, off_t offset, int whence)
-{
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-  /* mingw lseek mistakenly succeeds on pipes, sockets, and terminals.  */
-  HANDLE h = (HANDLE) _get_osfhandle (fd);
-  if (h == INVALID_HANDLE_VALUE)
-    {
-      errno = EBADF;
-      return -1;
-    }
-  if (GetFileType (h) != FILE_TYPE_DISK)
-    {
-      errno = ESPIPE;
-      return -1;
-    }
-#else
-  /* BeOS lseek mistakenly succeeds on pipes...  */
-  struct stat statbuf;
-  if (fstat (fd, &statbuf) < 0)
-    return -1;
-  if (!S_ISREG (statbuf.st_mode))
-    {
-      errno = ESPIPE;
-      return -1;
-    }
-#endif
-  return lseek (fd, offset, whence);
-}
diff --git a/lib/lstat.c b/lib/lstat.c
deleted file mode 100644 (file)
index 3e07270..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/* Work around a bug of lstat on some systems
-
-   Copyright (C) 1997-1999, 2000-2006, 2008 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 */
-
-#include <config.h>
-
-/* Get the original definition of open.  It might be defined as a macro.  */
-#define __need_system_sys_stat_h
-#include <sys/types.h>
-#include <sys/stat.h>
-#undef __need_system_sys_stat_h
-
-static inline int
-orig_lstat (const char *filename, struct stat *buf)
-{
-  return lstat (filename, buf);
-}
-
-/* Specification.  */
-#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
-   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)',
-   but on Solaris 9 and earlier it does not.
-
-   If FILE has a trailing slash and specifies a symbolic link,
-   then use stat() to get more info on the referent of FILE.
-   If the referent is a non-directory, then set errno to ENOTDIR
-   and return -1.  Otherwise, return stat's result.  */
-
-int
-rpl_lstat (const char *file, struct stat *sbuf)
-{
-  size_t len;
-  int lstat_result = orig_lstat (file, sbuf);
-
-  if (lstat_result != 0 || !S_ISLNK (sbuf->st_mode))
-    return lstat_result;
-
-  len = strlen (file);
-  if (len == 0 || file[len - 1] != '/')
-    return 0;
-
-  /* FILE refers to a symbolic link and the name ends with a slash.
-     Call stat() to get info about the link's referent.  */
-
-  /* If stat fails, then we do the same.  */
-  if (stat (file, sbuf) != 0)
-    return -1;
-
-  /* If FILE references a directory, return 0.  */
-  if (S_ISDIR (sbuf->st_mode))
-    return 0;
-
-  /* Here, we know stat succeeded and FILE references a non-directory.
-     But it was specified via a name including a trailing slash.
-     Fail with errno set to ENOTDIR to indicate the contradiction.  */
-  errno = ENOTDIR;
-  return -1;
-}
diff --git a/lib/malloc.c b/lib/malloc.c
deleted file mode 100644 (file)
index 4738df2..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* malloc() function that is glibc compatible.
-
-   Copyright (C) 1997, 1998, 2006, 2007 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* written by Jim Meyering and Bruno Haible */
-
-#include <config.h>
-/* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h.  */
-#ifdef malloc
-# define NEED_MALLOC_GNU
-# undef malloc
-#endif
-
-/* Specification.  */
-#include <stdlib.h>
-
-#include <errno.h>
-
-/* Call the system's malloc below.  */
-#undef malloc
-
-/* Allocate an N-byte block of memory from the heap.
-   If N is zero, allocate a 1-byte block.  */
-
-void *
-rpl_malloc (size_t n)
-{
-  void *result;
-
-#ifdef NEED_MALLOC_GNU
-  if (n == 0)
-    n = 1;
-#endif
-
-  result = malloc (n);
-
-#if !HAVE_MALLOC_POSIX
-  if (result == NULL)
-    errno = ENOMEM;
-#endif
-
-  return result;
-}
diff --git a/lib/malloca.c b/lib/malloca.c
deleted file mode 100644 (file)
index 52f0c67..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Safe automatic memory allocation.
-   Copyright (C) 2003, 2006-2007 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2003.
-
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include "malloca.h"
-
-/* The speed critical point in this file is freea() applied to an alloca()
-   result: it must be fast, to match the speed of alloca().  The speed of
-   mmalloca() and freea() in the other case are not critical, because they
-   are only invoked for big memory sizes.  */
-
-#if HAVE_ALLOCA
-
-/* Store the mmalloca() results in a hash table.  This is needed to reliably
-   distinguish a mmalloca() result and an alloca() result.
-
-   Although it is possible that the same pointer is returned by alloca() and
-   by mmalloca() at different times in the same application, it does not lead
-   to a bug in freea(), because:
-     - Before a pointer returned by alloca() can point into malloc()ed memory,
-       the function must return, and once this has happened the programmer must
-       not call freea() on it anyway.
-     - Before a pointer returned by mmalloca() can point into the stack, it
-       must be freed.  The only function that can free it is freea(), and
-       when freea() frees it, it also removes it from the hash table.  */
-
-#define MAGIC_NUMBER 0x1415fb4a
-#define MAGIC_SIZE sizeof (int)
-/* This is how the header info would look like without any alignment
-   considerations.  */
-struct preliminary_header { void *next; char room[MAGIC_SIZE]; };
-/* But the header's size must be a multiple of sa_alignment_max.  */
-#define HEADER_SIZE \
-  (((sizeof (struct preliminary_header) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max)
-struct header { void *next; char room[HEADER_SIZE - sizeof (struct preliminary_header) + MAGIC_SIZE]; };
-/* Verify that HEADER_SIZE == sizeof (struct header).  */
-typedef int verify1[2 * (HEADER_SIZE == sizeof (struct header)) - 1];
-/* We make the hash table quite big, so that during lookups the probability
-   of empty hash buckets is quite high.  There is no need to make the hash
-   table resizable, because when the hash table gets filled so much that the
-   lookup becomes slow, it means that the application has memory leaks.  */
-#define HASH_TABLE_SIZE 257
-static void * mmalloca_results[HASH_TABLE_SIZE];
-
-#endif
-
-void *
-mmalloca (size_t n)
-{
-#if HAVE_ALLOCA
-  /* Allocate one more word, that serves as an indicator for malloc()ed
-     memory, so that freea() of an alloca() result is fast.  */
-  size_t nplus = n + HEADER_SIZE;
-
-  if (nplus >= n)
-    {
-      char *p = (char *) malloc (nplus);
-
-      if (p != NULL)
-       {
-         size_t slot;
-
-         p += HEADER_SIZE;
-
-         /* Put a magic number into the indicator word.  */
-         ((int *) p)[-1] = MAGIC_NUMBER;
-
-         /* Enter p into the hash table.  */
-         slot = (unsigned long) p % HASH_TABLE_SIZE;
-         ((struct header *) (p - HEADER_SIZE))->next = mmalloca_results[slot];
-         mmalloca_results[slot] = p;
-
-         return p;
-       }
-    }
-  /* Out of memory.  */
-  return NULL;
-#else
-# if !MALLOC_0_IS_NONNULL
-  if (n == 0)
-    n = 1;
-# endif
-  return malloc (n);
-#endif
-}
-
-#if HAVE_ALLOCA
-void
-freea (void *p)
-{
-  /* mmalloca() may have returned NULL.  */
-  if (p != NULL)
-    {
-      /* Attempt to quickly distinguish the mmalloca() result - which has
-        a magic indicator word - and the alloca() result - which has an
-        uninitialized indicator word.  It is for this test that sa_increment
-        additional bytes are allocated in the alloca() case.  */
-      if (((int *) p)[-1] == MAGIC_NUMBER)
-       {
-         /* 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;
-         void **chain = &mmalloca_results[slot];
-         for (; *chain != NULL;)
-           {
-             if (*chain == p)
-               {
-                 /* Found it.  Remove it from the hash table and free it.  */
-                 char *p_begin = (char *) p - HEADER_SIZE;
-                 *chain = ((struct header *) p_begin)->next;
-                 free (p_begin);
-                 return;
-               }
-             chain = &((struct header *) ((char *) *chain - HEADER_SIZE))->next;
-           }
-       }
-      /* At this point, we know it was not a mmalloca() result.  */
-    }
-}
-#endif
diff --git a/lib/malloca.h b/lib/malloca.h
deleted file mode 100644 (file)
index ae180c3..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Safe automatic memory allocation.
-   Copyright (C) 2003-2007 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2003.
-
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _MALLOCA_H
-#define _MALLOCA_H
-
-#include <alloca.h>
-#include <stddef.h>
-#include <stdlib.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* safe_alloca(N) is equivalent to alloca(N) when it is safe to call
-   alloca(N); otherwise it returns NULL.  It either returns N bytes of
-   memory allocated on the stack, that lasts until the function returns,
-   or NULL.
-   Use of safe_alloca should be avoided:
-     - inside arguments of function calls - undefined behaviour,
-     - in inline functions - the allocation may actually last until the
-       calling function returns.
-*/
-#if HAVE_ALLOCA
-/* The OS usually guarantees only one guard page at the bottom of the stack,
-   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.  */
-# define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL)
-#else
-# define safe_alloca(N) ((void) (N), NULL)
-#endif
-
-/* malloca(N) is a safe variant of alloca(N).  It allocates N bytes of
-   memory allocated on the stack, that must be freed using freea() before
-   the function returns.  Upon failure, it returns NULL.  */
-#if HAVE_ALLOCA
-# define malloca(N) \
-  ((N) < 4032 - sa_increment                                       \
-   ? (void *) ((char *) alloca ((N) + sa_increment) + sa_increment) \
-   : mmalloca (N))
-#else
-# define malloca(N) \
-  mmalloca (N)
-#endif
-extern void * mmalloca (size_t n);
-
-/* Free a block of memory allocated through malloca().  */
-#if HAVE_ALLOCA
-extern void freea (void *p);
-#else
-# define freea free
-#endif
-
-/* nmalloca(N,S) is an overflow-safe variant of malloca (N * S).
-   It allocates an array of N objects, each with S bytes of memory,
-   on the stack.  S must be positive and N must be nonnegative.
-   The array must be freed using freea() before the function returns.  */
-#if 1
-/* Cf. the definition of xalloc_oversized.  */
-# define nmalloca(n, s) \
-    ((n) > (size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) \
-     ? NULL \
-     : malloca ((n) * (s)))
-#else
-extern void * nmalloca (size_t n, size_t s);
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-/* ------------------- Auxiliary, non-public definitions ------------------- */
-
-/* Determine the alignment of a type at compile time.  */
-#if defined __GNUC__
-# define sa_alignof __alignof__
-#elif defined __cplusplus
-  template <class type> struct sa_alignof_helper { char __slot1; type __slot2; };
-# define sa_alignof(type) offsetof (sa_alignof_helper<type>, __slot2)
-#elif defined __hpux
-  /* Work around a HP-UX 10.20 cc bug with enums constants defined as offsetof
-     values.  */
-# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8)
-#elif defined _AIX
-  /* Work around an AIX 3.2.5 xlc bug with enums constants defined as offsetof
-     values.  */
-# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8)
-#else
-# define sa_alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2)
-#endif
-
-enum
-{
-/* The desired alignment of memory allocations is the maximum alignment
-   among all elementary types.  */
-  sa_alignment_long = sa_alignof (long),
-  sa_alignment_double = sa_alignof (double),
-#if HAVE_LONG_LONG_INT
-  sa_alignment_longlong = sa_alignof (long long),
-#endif
-  sa_alignment_longdouble = sa_alignof (long double),
-  sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1)
-#if HAVE_LONG_LONG_INT
-                     | (sa_alignment_longlong - 1)
-#endif
-                     | (sa_alignment_longdouble - 1)
-                    ) + 1,
-/* The increment that guarantees room for a magic word must be >= sizeof (int)
-   and a multiple of sa_alignment_max.  */
-  sa_increment = ((sizeof (int) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max
-};
-
-#endif /* _MALLOCA_H */
diff --git a/lib/malloca.valgrind b/lib/malloca.valgrind
deleted file mode 100644 (file)
index 52f0a50..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-# Suppress a valgrind message about use of uninitialized memory in freea().
-# This use is OK because it provides only a speedup.
-{
-    freea
-    Memcheck:Cond
-    fun:freea
-}
diff --git a/lib/mbchar.c b/lib/mbchar.c
deleted file mode 100644 (file)
index 6fa14b0..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (C) 2001, 2006 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>
-
-#include <limits.h>
-
-#include "mbchar.h"
-
-#if IS_BASIC_ASCII
-
-/* Bit table of characters in the ISO C "basic character set".  */
-const unsigned int is_basic_table [UCHAR_MAX / 32 + 1] =
-{
-  0x00001a00,          /* '\t' '\v' '\f' */
-  0xffffffef,          /* ' '...'#' '%'...'?' */
-  0xfffffffe,          /* 'A'...'Z' '[' '\\' ']' '^' '_' */
-  0x7ffffffe           /* 'a'...'z' '{' '|' '}' '~' */
-  /* The remaining bits are 0.  */
-};
-
-#endif /* IS_BASIC_ASCII */
diff --git a/lib/mbchar.h b/lib/mbchar.h
deleted file mode 100644 (file)
index 5d47a0a..0000000
+++ /dev/null
@@ -1,350 +0,0 @@
-/* Multibyte character data type.
-   Copyright (C) 2001, 2005-2007 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>.  */
-
-/* A multibyte character is a short subsequence of a char* string,
-   representing a single wide character.
-
-   We use multibyte characters instead of wide characters because of
-   the following goals:
-   1) correct multibyte handling, i.e. operate according to the LC_CTYPE
-      locale,
-   2) ease of maintenance, i.e. the maintainer needs not know all details
-      of the ISO C 99 standard,
-   3) don't fail grossly if the input is not in the encoding set by the
-      locale, because often different encodings are in use in the same
-      countries (ISO-8859-1/UTF-8, EUC-JP/Shift_JIS, ...),
-   4) fast in the case of ASCII characters,
-   5) portability, i.e. don't make unportable assumptions about wchar_t.
-
-   Multibyte characters are only accessed through the mb* macros.
-
-   mb_ptr (mbc)
-     return a pointer to the beginning of the multibyte sequence.
-
-   mb_len (mbc)
-     returns the number of bytes occupied by the multibyte sequence.
-     Always > 0.
-
-   mb_iseq (mbc, sc)
-     returns true if mbc is the standard ASCII character sc.
-
-   mb_isnul (mbc)
-     returns true if mbc is the nul character.
-
-   mb_cmp (mbc1, mbc2)
-     returns a positive, zero, or negative value depending on whether mbc1
-     sorts after, same or before mbc2.
-
-   mb_casecmp (mbc1, mbc2)
-     returns a positive, zero, or negative value depending on whether mbc1
-     sorts after, same or before mbc2, modulo upper/lowercase conversion.
-
-   mb_equal (mbc1, mbc2)
-     returns true if mbc1 and mbc2 are equal.
-
-   mb_caseequal (mbc1, mbc2)
-     returns true if mbc1 and mbc2 are equal modulo upper/lowercase conversion.
-
-   mb_isalnum (mbc)
-     returns true if mbc is alphanumeric.
-
-   mb_isalpha (mbc)
-     returns true if mbc is alphabetic.
-
-   mb_isascii(mbc)
-     returns true if mbc is plain ASCII.
-
-   mb_isblank (mbc)
-     returns true if mbc is a blank.
-
-   mb_iscntrl (mbc)
-     returns true if mbc is a control character.
-
-   mb_isdigit (mbc)
-     returns true if mbc is a decimal digit.
-
-   mb_isgraph (mbc)
-     returns true if mbc is a graphic character.
-
-   mb_islower (mbc)
-     returns true if mbc is lowercase.
-
-   mb_isprint (mbc)
-     returns true if mbc is a printable character.
-
-   mb_ispunct (mbc)
-     returns true if mbc is a punctuation character.
-
-   mb_isspace (mbc)
-     returns true if mbc is a space character.
-
-   mb_isupper (mbc)
-     returns true if mbc is uppercase.
-
-   mb_isxdigit (mbc)
-     returns true if mbc is a hexadecimal digit.
-
-   mb_width (mbc)
-     returns the number of columns on the output device occupied by mbc.
-     Always >= 0.
-
-   mb_putc (mbc, stream)
-     outputs mbc on stream, a byte oriented FILE stream opened for output.
-
-   mb_setascii (&mbc, sc)
-     assigns the standard ASCII character sc to mbc.
-
-   mb_copy (&destmbc, &srcmbc)
-     copies srcmbc to destmbc.
-
-   Here are the function prototypes of the macros.
-
-   extern const char * mb_ptr (const mbchar_t mbc);
-   extern size_t       mb_len (const mbchar_t mbc);
-   extern bool         mb_iseq (const mbchar_t mbc, char sc);
-   extern bool         mb_isnul (const mbchar_t mbc);
-   extern int          mb_cmp (const mbchar_t mbc1, const mbchar_t mbc2);
-   extern int          mb_casecmp (const mbchar_t mbc1, const mbchar_t mbc2);
-   extern bool         mb_equal (const mbchar_t mbc1, const mbchar_t mbc2);
-   extern bool         mb_caseequal (const mbchar_t mbc1, const mbchar_t mbc2);
-   extern bool         mb_isalnum (const mbchar_t mbc);
-   extern bool         mb_isalpha (const mbchar_t mbc);
-   extern bool         mb_isascii (const mbchar_t mbc);
-   extern bool         mb_isblank (const mbchar_t mbc);
-   extern bool         mb_iscntrl (const mbchar_t mbc);
-   extern bool         mb_isdigit (const mbchar_t mbc);
-   extern bool         mb_isgraph (const mbchar_t mbc);
-   extern bool         mb_islower (const mbchar_t mbc);
-   extern bool         mb_isprint (const mbchar_t mbc);
-   extern bool         mb_ispunct (const mbchar_t mbc);
-   extern bool         mb_isspace (const mbchar_t mbc);
-   extern bool         mb_isupper (const mbchar_t mbc);
-   extern bool         mb_isxdigit (const mbchar_t mbc);
-   extern int          mb_width (const mbchar_t mbc);
-   extern void         mb_putc (const mbchar_t mbc, FILE *stream);
-   extern void          mb_setascii (mbchar_t *new, char sc);
-   extern void         mb_copy (mbchar_t *new, const mbchar_t *old);
- */
-
-#ifndef _MBCHAR_H
-#define _MBCHAR_H 1
-
-#include <stdbool.h>
-#include <string.h>
-
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before
-   <wchar.h>.  */
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#define MBCHAR_BUF_SIZE 24
-
-struct mbchar
-{
-  const char *ptr;     /* pointer to current character */
-  size_t bytes;                /* number of bytes of current character, > 0 */
-  bool wc_valid;       /* true if wc is a valid wide character */
-  wchar_t wc;          /* if wc_valid: the current character */
-  char buf[MBCHAR_BUF_SIZE]; /* room for the bytes, used for file input only */
-};
-
-/* EOF (not a real character) is represented with bytes = 0 and
-   wc_valid = false.  */
-
-typedef struct mbchar mbchar_t;
-
-/* Access the current character.  */
-#define mb_ptr(mbc) ((mbc).ptr)
-#define mb_len(mbc) ((mbc).bytes)
-
-/* Comparison of characters.  */
-#define mb_iseq(mbc, sc) ((mbc).wc_valid && (mbc).wc == (sc))
-#define mb_isnul(mbc) ((mbc).wc_valid && (mbc).wc == 0)
-#define mb_cmp(mbc1, mbc2) \
-  ((mbc1).wc_valid                                                     \
-   ? ((mbc2).wc_valid                                                  \
-      ? (int) (mbc1).wc - (int) (mbc2).wc                              \
-      : -1)                                                            \
-   : ((mbc2).wc_valid                                                  \
-      ? 1                                                              \
-      : (mbc1).bytes == (mbc2).bytes                                   \
-        ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes)                        \
-        : (mbc1).bytes < (mbc2).bytes                                  \
-          ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \
-          : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1)))
-#define mb_casecmp(mbc1, mbc2) \
-  ((mbc1).wc_valid                                                     \
-   ? ((mbc2).wc_valid                                                  \
-      ? (int) towlower ((mbc1).wc) - (int) towlower ((mbc2).wc)                \
-      : -1)                                                            \
-   : ((mbc2).wc_valid                                                  \
-      ? 1                                                              \
-      : (mbc1).bytes == (mbc2).bytes                                   \
-        ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes)                        \
-        : (mbc1).bytes < (mbc2).bytes                                  \
-          ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \
-          : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1)))
-#define mb_equal(mbc1, mbc2) \
-  ((mbc1).wc_valid && (mbc2).wc_valid                                  \
-   ? (mbc1).wc == (mbc2).wc                                            \
-   : (mbc1).bytes == (mbc2).bytes                                      \
-     && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0)
-#define mb_caseequal(mbc1, mbc2) \
-  ((mbc1).wc_valid && (mbc2).wc_valid                                  \
-   ? towlower ((mbc1).wc) == towlower ((mbc2).wc)                      \
-   : (mbc1).bytes == (mbc2).bytes                                      \
-     && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0)
-
-/* <ctype.h>, <wctype.h> classification.  */
-#define mb_isascii(mbc) \
-  ((mbc).wc_valid && (mbc).wc >= 0 && (mbc).wc <= 127)
-#define mb_isalnum(mbc) ((mbc).wc_valid && iswalnum ((mbc).wc))
-#define mb_isalpha(mbc) ((mbc).wc_valid && iswalpha ((mbc).wc))
-#define mb_isblank(mbc) ((mbc).wc_valid && iswblank ((mbc).wc))
-#define mb_iscntrl(mbc) ((mbc).wc_valid && iswcntrl ((mbc).wc))
-#define mb_isdigit(mbc) ((mbc).wc_valid && iswdigit ((mbc).wc))
-#define mb_isgraph(mbc) ((mbc).wc_valid && iswgraph ((mbc).wc))
-#define mb_islower(mbc) ((mbc).wc_valid && iswlower ((mbc).wc))
-#define mb_isprint(mbc) ((mbc).wc_valid && iswprint ((mbc).wc))
-#define mb_ispunct(mbc) ((mbc).wc_valid && iswpunct ((mbc).wc))
-#define mb_isspace(mbc) ((mbc).wc_valid && iswspace ((mbc).wc))
-#define mb_isupper(mbc) ((mbc).wc_valid && iswupper ((mbc).wc))
-#define mb_isxdigit(mbc) ((mbc).wc_valid && iswxdigit ((mbc).wc))
-
-/* Extra <wchar.h> function.  */
-
-/* Unprintable characters appear as a small box of width 1.  */
-#define MB_UNPRINTABLE_WIDTH 1
-
-static inline int
-mb_width_aux (wint_t wc)
-{
-  int w = wcwidth (wc);
-  /* For unprintable characters, arbitrarily return 0 for control characters
-     and MB_UNPRINTABLE_WIDTH otherwise.  */
-  return (w >= 0 ? w : iswcntrl (wc) ? 0 : MB_UNPRINTABLE_WIDTH);
-}
-
-#define mb_width(mbc) \
-  ((mbc).wc_valid ? mb_width_aux ((mbc).wc) : MB_UNPRINTABLE_WIDTH)
-
-/* Output.  */
-#define mb_putc(mbc, stream)  fwrite ((mbc).ptr, 1, (mbc).bytes, (stream))
-
-/* Assignment.  */
-#define mb_setascii(mbc, sc) \
-  ((mbc)->ptr = (mbc)->buf, (mbc)->bytes = 1, (mbc)->wc_valid = 1, \
-   (mbc)->wc = (mbc)->buf[0] = (sc))
-
-/* Copying a character.  */
-static inline void
-mb_copy (mbchar_t *new_mbc, const mbchar_t *old_mbc)
-{
-  if (old_mbc->ptr == &old_mbc->buf[0])
-    {
-      memcpy (&new_mbc->buf[0], &old_mbc->buf[0], old_mbc->bytes);
-      new_mbc->ptr = &new_mbc->buf[0];
-    }
-  else
-    new_mbc->ptr = old_mbc->ptr;
-  new_mbc->bytes = old_mbc->bytes;
-  if ((new_mbc->wc_valid = old_mbc->wc_valid))
-    new_mbc->wc = old_mbc->wc;
-}
-
-
-/* is_basic(c) tests whether the single-byte character c is in the
-   ISO C "basic character set".
-   This is a convenience function, and is in this file only to share code
-   between mbiter_multi.h and mbfile_multi.h.  */
-#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
-    && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
-    && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
-    && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
-    && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
-    && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
-    && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
-    && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
-    && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
-    && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
-    && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
-    && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
-    && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
-    && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
-    && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
-    && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
-    && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
-    && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
-    && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
-    && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
-    && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
-    && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
-    && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)
-/* The character set is ISO-646, not EBCDIC. */
-# define IS_BASIC_ASCII 1
-
-extern const unsigned int is_basic_table[];
-
-static inline bool
-is_basic (char c)
-{
-  return (is_basic_table [(unsigned char) c >> 5] >> ((unsigned char) c & 31))
-        & 1;
-}
-
-#else
-
-static inline bool
-is_basic (char c)
-{
-  switch (c)
-    {
-    case '\t': case '\v': case '\f':
-    case ' ': case '!': case '"': case '#': case '%':
-    case '&': case '\'': case '(': case ')': case '*':
-    case '+': case ',': case '-': case '.': case '/':
-    case '0': case '1': case '2': case '3': case '4':
-    case '5': case '6': case '7': case '8': case '9':
-    case ':': case ';': case '<': case '=': case '>':
-    case '?':
-    case 'A': case 'B': case 'C': case 'D': case 'E':
-    case 'F': case 'G': case 'H': case 'I': case 'J':
-    case 'K': case 'L': case 'M': case 'N': case 'O':
-    case 'P': case 'Q': case 'R': case 'S': case 'T':
-    case 'U': case 'V': case 'W': case 'X': case 'Y':
-    case 'Z':
-    case '[': case '\\': case ']': case '^': case '_':
-    case 'a': case 'b': case 'c': case 'd': case 'e':
-    case 'f': case 'g': case 'h': case 'i': case 'j':
-    case 'k': case 'l': case 'm': case 'n': case 'o':
-    case 'p': case 'q': case 'r': case 's': case 't':
-    case 'u': case 'v': case 'w': case 'x': case 'y':
-    case 'z': case '{': case '|': case '}': case '~':
-      return 1;
-    default:
-      return 0;
-    }
-}
-
-#endif
-
-#endif /* _MBCHAR_H */
diff --git a/lib/mbrtowc.c b/lib/mbrtowc.c
deleted file mode 100644 (file)
index ba03973..0000000
+++ /dev/null
@@ -1,386 +0,0 @@
-/* Convert multibyte character to wide character.
-   Copyright (C) 1999-2002, 2005-2009 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2008.
-
-   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 <wchar.h>
-
-#if GNULIB_defined_mbstate_t
-/* Implement mbrtowc() on top of mbtowc().  */
-
-# include <errno.h>
-# include <stdlib.h>
-
-# include "localcharset.h"
-# include "streq.h"
-# include "verify.h"
-
-
-verify (sizeof (mbstate_t) >= 4);
-
-static char internal_state[4];
-
-size_t
-mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
-{
-  char *pstate = (char *)ps;
-
-  if (pstate == NULL)
-    pstate = internal_state;
-
-  if (s == NULL)
-    {
-      pwc = NULL;
-      s = "";
-      n = 1;
-    }
-
-  if (n == 0)
-    return (size_t)(-2);
-
-  /* Here n > 0.  */
-  {
-    size_t nstate = pstate[0];
-    char buf[4];
-    const char *p;
-    size_t m;
-
-    switch (nstate)
-      {
-      case 0:
-       p = s;
-       m = n;
-       break;
-      case 3:
-       buf[2] = pstate[3];
-       /*FALLTHROUGH*/
-      case 2:
-       buf[1] = pstate[2];
-       /*FALLTHROUGH*/
-      case 1:
-       buf[0] = pstate[1];
-       p = buf;
-       m = nstate;
-       buf[m++] = s[0];
-       if (n >= 2 && m < 4)
-         {
-           buf[m++] = s[1];
-           if (n >= 3 && m < 4)
-             buf[m++] = s[2];
-         }
-       break;
-      default:
-       errno = EINVAL;
-       return (size_t)(-1);
-      }
-
-    /* Here 0 < m ≤ 4.  */
-
-# if __GLIBC__
-    /* Work around bug <http://sourceware.org/bugzilla/show_bug.cgi?id=9674> */
-    mbtowc (NULL, NULL, 0);
-# endif
-    {
-      int res = mbtowc (pwc, p, m);
-
-      if (res >= 0)
-       {
-         if (pwc != NULL && ((*pwc == 0) != (res == 0)))
-           abort ();
-         if (nstate >= (res > 0 ? res : 1))
-           abort ();
-         res -= nstate;
-         pstate[0] = 0;
-         return res;
-       }
-
-      /* mbtowc does not distinguish between invalid and incomplete multibyte
-        sequences.  But mbrtowc needs to make this distinction.
-        There are two possible approaches:
-          - Use iconv() and its return value.
-          - Use built-in knowledge about the possible encodings.
-        Given the low quality of implementation of iconv() on the systems that
-        lack mbrtowc(), we use the second approach.
-        The possible encodings are:
-          - 8-bit encodings,
-          - EUC-JP, EUC-KR, GB2312, EUC-TW, BIG5, GB18030, SJIS,
-          - UTF-8.
-        Use specialized code for each.  */
-      if (m >= 4 || m >= MB_CUR_MAX)
-       goto invalid;
-      /* Here MB_CUR_MAX > 1 and 0 < m < 4.  */
-      {
-       const char *encoding = locale_charset ();
-
-       if (STREQ (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0))
-         {
-           /* Cf. unistr/u8-mblen.c.  */
-           unsigned char c = (unsigned char) p[0];
-
-           if (c >= 0xc2)
-             {
-               if (c < 0xe0)
-                 {
-                   if (m == 1)
-                     goto incomplete;
-                 }
-               else if (c < 0xf0)
-                 {
-                   if (m == 1)
-                     goto incomplete;
-                   if (m == 2)
-                     {
-                       unsigned char c2 = (unsigned char) p[1];
-
-                       if ((c2 ^ 0x80) < 0x40
-                           && (c >= 0xe1 || c2 >= 0xa0)
-                           && (c != 0xed || c2 < 0xa0))
-                         goto incomplete;
-                     }
-                 }
-               else if (c <= 0xf4)
-                 {
-                   if (m == 1)
-                     goto incomplete;
-                   else /* m == 2 || m == 3 */
-                     {
-                       unsigned char c2 = (unsigned char) p[1];
-
-                       if ((c2 ^ 0x80) < 0x40
-                           && (c >= 0xf1 || c2 >= 0x90)
-                           && (c < 0xf4 || (c == 0xf4 && c2 < 0x90)))
-                         {
-                           if (m == 2)
-                             goto incomplete;
-                           else /* m == 3 */
-                             {
-                               unsigned char c3 = (unsigned char) p[2];
-
-                               if ((c3 ^ 0x80) < 0x40)
-                                 goto incomplete;
-                             }
-                         }
-                     }
-                 }
-             }
-           goto invalid;
-         }
-
-       /* As a reference for this code, you can use the GNU libiconv
-          implementation.  Look for uses of the RET_TOOFEW macro.  */
-
-       if (STREQ (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0))
-         {
-           if (m == 1)
-             {
-               unsigned char c = (unsigned char) p[0];
-
-               if ((c >= 0xa1 && c < 0xff) || c == 0x8e || c == 0x8f)
-                 goto incomplete;
-             }
-           if (m == 2)
-             {
-               unsigned char c = (unsigned char) p[0];
-
-               if (c == 0x8f)
-                 {
-                   unsigned char c2 = (unsigned char) p[1];
-
-                   if (c2 >= 0xa1 && c2 < 0xff)
-                     goto incomplete;
-                 }
-             }
-           goto invalid;
-         }
-       if (STREQ (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
-           || STREQ (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0)
-           || STREQ (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0))
-         {
-           if (m == 1)
-             {
-               unsigned char c = (unsigned char) p[0];
-
-               if (c >= 0xa1 && c < 0xff)
-                 goto incomplete;
-             }
-           goto invalid;
-         }
-       if (STREQ (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0))
-         {
-           if (m == 1)
-             {
-               unsigned char c = (unsigned char) p[0];
-
-               if ((c >= 0xa1 && c < 0xff) || c == 0x8e)
-                 goto incomplete;
-             }
-           else /* m == 2 || m == 3 */
-             {
-               unsigned char c = (unsigned char) p[0];
-
-               if (c == 0x8e)
-                 goto incomplete;
-             }
-           goto invalid;
-         }
-       if (STREQ (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0))
-         {
-           if (m == 1)
-             {
-               unsigned char c = (unsigned char) p[0];
-
-               if ((c >= 0x90 && c <= 0xe3) || (c >= 0xf8 && c <= 0xfe))
-                 goto incomplete;
-             }
-           else /* m == 2 || m == 3 */
-             {
-               unsigned char c = (unsigned char) p[0];
-
-               if (c >= 0x90 && c <= 0xe3)
-                 {
-                   unsigned char c2 = (unsigned char) p[1];
-
-                   if (c2 >= 0x30 && c2 <= 0x39)
-                     {
-                       if (m == 2)
-                         goto incomplete;
-                       else /* m == 3 */
-                         {
-                           unsigned char c3 = (unsigned char) p[2];
-
-                           if (c3 >= 0x81 && c3 <= 0xfe)
-                             goto incomplete;
-                         }
-                     }
-                 }
-             }
-           goto invalid;
-         }
-       if (STREQ (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0))
-         {
-           if (m == 1)
-             {
-               unsigned char c = (unsigned char) p[0];
-
-               if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea)
-                   || (c >= 0xf0 && c <= 0xf9))
-                 goto incomplete;
-             }
-           goto invalid;
-         }
-
-       /* An unknown multibyte encoding.  */
-       goto incomplete;
-      }
-
-     incomplete:
-      {
-       size_t k = nstate;
-       /* Here 0 <= k < m < 4.  */
-       pstate[++k] = s[0];
-       if (k < m)
-         {
-           pstate[++k] = s[1];
-           if (k < m)
-             pstate[++k] = s[2];
-         }
-       if (k != m)
-         abort ();
-      }
-      pstate[0] = m;
-      return (size_t)(-2);
-
-     invalid:
-      errno = EILSEQ;
-      /* The conversion state is undefined, says POSIX.  */
-      return (size_t)(-1);
-    }
-  }
-}
-
-#else
-/* Override the system's mbrtowc() function.  */
-
-# undef mbrtowc
-
-size_t
-rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
-{
-# if MBRTOWC_NULL_ARG_BUG || MBRTOWC_RETVAL_BUG
-  if (s == NULL)
-    {
-      pwc = NULL;
-      s = "";
-      n = 1;
-    }
-# endif
-
-# if MBRTOWC_RETVAL_BUG
-  {
-    static mbstate_t internal_state;
-
-    /* Override mbrtowc's internal state.  We can not call mbsinit() on the
-       hidden internal state, but we can call it on our variable.  */
-    if (ps == NULL)
-      ps = &internal_state;
-
-    if (!mbsinit (ps))
-      {
-       /* Parse the rest of the multibyte character byte for byte.  */
-       size_t count = 0;
-       for (; n > 0; s++, n--)
-         {
-           wchar_t wc;
-           size_t ret = mbrtowc (&wc, s, 1, ps);
-
-           if (ret == (size_t)(-1))
-             return (size_t)(-1);
-           count++;
-           if (ret != (size_t)(-2))
-             {
-               /* The multibyte character has been completed.  */
-               if (pwc != NULL)
-                 *pwc = wc;
-               return (wc == 0 ? 0 : count);
-             }
-         }
-       return (size_t)(-2);
-      }
-  }
-# endif
-
-# if MBRTOWC_NUL_RETVAL_BUG
-  {
-    wchar_t wc;
-    size_t ret = mbrtowc (&wc, s, n, ps);
-
-    if (ret != (size_t)(-1) && ret != (size_t)(-2))
-      {
-       if (pwc != NULL)
-         *pwc = wc;
-       if (wc == 0)
-         ret = 0;
-      }
-    return ret;
-  }
-# else
-  return mbrtowc (pwc, s, n, ps);
-# endif
-}
-
-#endif
diff --git a/lib/mbscasecmp.c b/lib/mbscasecmp.c
deleted file mode 100644 (file)
index 7fdfdeb..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Case-insensitive string comparison function.
-   Copyright (C) 1998-1999, 2005-2008 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2005,
-   based on earlier glibc code.
-
-   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 <string.h>
-
-#include <ctype.h>
-#include <limits.h>
-
-#include "mbuiter.h"
-
-#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
-
-/* Compare the character 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.
-   Note: This function may, in multibyte locales, return 0 for strings of
-   different lengths!  */
-int
-mbscasecmp (const char *s1, const char *s2)
-{
-  if (s1 == s2)
-    return 0;
-
-  /* Be careful not to look at the entire extent of s1 or s2 until needed.
-     This is useful because when two strings differ, the difference is
-     most often already in the very few first characters.  */
-  if (MB_CUR_MAX > 1)
-    {
-      mbui_iterator_t iter1;
-      mbui_iterator_t iter2;
-
-      mbui_init (iter1, s1);
-      mbui_init (iter2, s2);
-
-      while (mbui_avail (iter1) && mbui_avail (iter2))
-       {
-         int cmp = mb_casecmp (mbui_cur (iter1), mbui_cur (iter2));
-
-         if (cmp != 0)
-           return cmp;
-
-         mbui_advance (iter1);
-         mbui_advance (iter2);
-       }
-      if (mbui_avail (iter1))
-       /* s2 terminated before s1.  */
-       return 1;
-      if (mbui_avail (iter2))
-       /* s1 terminated before s2.  */
-       return -1;
-      return 0;
-    }
-  else
-    {
-      const unsigned char *p1 = (const unsigned char *) s1;
-      const unsigned char *p2 = (const unsigned char *) s2;
-      unsigned char c1, c2;
-
-      do
-       {
-         c1 = TOLOWER (*p1);
-         c2 = TOLOWER (*p2);
-
-         if (c1 == '\0')
-           break;
-
-         ++p1;
-         ++p2;
-       }
-      while (c1 == c2);
-
-      if (UCHAR_MAX <= INT_MAX)
-       return c1 - c2;
-      else
-       /* On machines where 'char' and 'int' are types of the same size, the
-          difference of two 'unsigned char' values - including the sign bit -
-          doesn't fit in an 'int'.  */
-       return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
-    }
-}
diff --git a/lib/mbsinit.c b/lib/mbsinit.c
deleted file mode 100644 (file)
index 81fed5a..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Test for initial conversion state.
-   Copyright (C) 2008 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2008.
-
-   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 <wchar.h>
-
-#include "verify.h"
-
-/* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs()
-   and wcrtomb(), wcsrtombs().
-   We assume that
-     - sizeof (mbstate_t) >= 4,
-     - only stateless encodings are supported (such as UTF-8 and EUC-JP, but
-       not ISO-2022 variants),
-     - for each encoding, the number of bytes for a wide character is <= 4.
-       (This maximum is attained for UTF-8, GB18030, EUC-TW.)
-   We define the meaning of mbstate_t as follows:
-     - In mb -> wc direction, mbstate_t's first byte contains the number of
-       buffered bytes (in the range 0..3), followed by up to 3 buffered bytes.
-     - In wc -> mb direction, mbstate_t contains no information. In other
-       words, it is always in the initial state.  */
-
-verify (sizeof (mbstate_t) >= 4);
-
-int
-mbsinit (const mbstate_t *ps)
-{
-  const char *pstate = (const char *)ps;
-
-  return pstate[0] == 0;
-}
diff --git a/lib/mbuiter.h b/lib/mbuiter.h
deleted file mode 100644 (file)
index 213e710..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-/* Iterating through multibyte strings: macros for multi-byte encodings.
-   Copyright (C) 2001, 2005, 2007 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>.  */
-
-/* The macros in this file implement forward iteration through a
-   multi-byte string, without knowing its length a-priori.
-
-   With these macros, an iteration loop that looks like
-
-      char *iter;
-      for (iter = buf; *iter != '\0'; iter++)
-        {
-          do_something (*iter);
-        }
-
-   becomes
-
-      mbui_iterator_t iter;
-      for (mbui_init (iter, buf); mbui_avail (iter); mbui_advance (iter))
-        {
-          do_something (mbui_cur_ptr (iter), mb_len (mbui_cur (iter)));
-        }
-
-   The benefit of these macros over plain use of mbrtowc is:
-   - Handling of invalid multibyte sequences is possible without
-     making the code more complicated, while still preserving the
-     invalid multibyte sequences.
-
-   Compared to mbiter.h, the macros here don't need to know the string's
-   length a-priori.  The downside is that at each step, the look-ahead
-   that guards against overrunning the terminating '\0' is more expensive.
-   The mbui_* macros are therefore suitable when there is a high probability
-   that only the first few multibyte characters need to be inspected.
-   Whereas the mbi_* macros are better if usually the iteration runs
-   through the entire string.
-
-   mbui_iterator_t
-     is a type usable for variable declarations.
-
-   mbui_init (iter, startptr)
-     initializes the iterator, starting at startptr.
-
-   mbui_avail (iter)
-     returns true if there are more multibyte chracters available before
-     the end of string is reached. In this case, mbui_cur (iter) is
-     initialized to the next multibyte chracter.
-
-   mbui_advance (iter)
-     advances the iterator by one multibyte character.
-
-   mbui_cur (iter)
-     returns the current multibyte character, of type mbchar_t.  All the
-     macros defined in mbchar.h can be used on it.
-
-   mbui_cur_ptr (iter)
-     return a pointer to the beginning of the current multibyte character.
-
-   mbui_reloc (iter, ptrdiff)
-     relocates iterator when the string is moved by ptrdiff bytes.
-
-   mbui_copy (&destiter, &srciter)
-     copies srciter to destiter.
-
-   Here are the function prototypes of the macros.
-
-   extern void         mbui_init (mbui_iterator_t iter, const char *startptr);
-   extern bool         mbui_avail (mbui_iterator_t iter);
-   extern void         mbui_advance (mbui_iterator_t iter);
-   extern mbchar_t     mbui_cur (mbui_iterator_t iter);
-   extern const char * mbui_cur_ptr (mbui_iterator_t iter);
-   extern void         mbui_reloc (mbui_iterator_t iter, ptrdiff_t ptrdiff);
-   extern void         mbui_copy (mbui_iterator_t *new, const mbui_iterator_t *old);
- */
-
-#ifndef _MBUITER_H
-#define _MBUITER_H 1
-
-#include <assert.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.1 has a bug: <stdio.h> and <time.h> must be included before
-   <wchar.h>.  */
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-
-#include "mbchar.h"
-#include "strnlen1.h"
-
-struct mbuiter_multi
-{
-  bool in_shift;       /* true if next byte may not be interpreted as ASCII */
-  mbstate_t state;     /* if in_shift: current shift state */
-  bool next_done;      /* true if mbui_avail has already filled the following */
-  struct mbchar cur;   /* the current character:
-       const char *cur.ptr             pointer to current character
-       The following are only valid after mbui_avail.
-       size_t cur.bytes                number of bytes of current character
-       bool cur.wc_valid               true if wc is a valid wide character
-       wchar_t cur.wc                  if wc_valid: the current character
-       */
-};
-
-static inline void
-mbuiter_multi_next (struct mbuiter_multi *iter)
-{
-  if (iter->next_done)
-    return;
-  if (iter->in_shift)
-    goto with_shift;
-  /* Handle most ASCII characters quickly, without calling mbrtowc().  */
-  if (is_basic (*iter->cur.ptr))
-    {
-      /* These characters are part of the basic character set.  ISO C 99
-        guarantees that their wide character code is identical to their
-        char code.  */
-      iter->cur.bytes = 1;
-      iter->cur.wc = *iter->cur.ptr;
-      iter->cur.wc_valid = true;
-    }
-  else
-    {
-      assert (mbsinit (&iter->state));
-      iter->in_shift = true;
-    with_shift:
-      iter->cur.bytes = mbrtowc (&iter->cur.wc, iter->cur.ptr,
-                                strnlen1 (iter->cur.ptr, MB_CUR_MAX),
-                                &iter->state);
-      if (iter->cur.bytes == (size_t) -1)
-       {
-         /* An invalid multibyte sequence was encountered.  */
-         iter->cur.bytes = 1;
-         iter->cur.wc_valid = false;
-         /* Whether to set iter->in_shift = false and reset iter->state
-            or not is not very important; the string is bogus anyway.  */
-       }
-      else if (iter->cur.bytes == (size_t) -2)
-       {
-         /* An incomplete multibyte character at the end.  */
-         iter->cur.bytes = strlen (iter->cur.ptr);
-         iter->cur.wc_valid = false;
-         /* Whether to set iter->in_shift = false and reset iter->state
-            or not is not important; the string end is reached anyway.  */
-       }
-      else
-       {
-         if (iter->cur.bytes == 0)
-           {
-             /* A null wide character was encountered.  */
-             iter->cur.bytes = 1;
-             assert (*iter->cur.ptr == '\0');
-             assert (iter->cur.wc == 0);
-           }
-         iter->cur.wc_valid = true;
-
-         /* When in the initial state, we can go back treating ASCII
-            characters more quickly.  */
-         if (mbsinit (&iter->state))
-           iter->in_shift = false;
-       }
-    }
-  iter->next_done = true;
-}
-
-static inline void
-mbuiter_multi_reloc (struct mbuiter_multi *iter, ptrdiff_t ptrdiff)
-{
-  iter->cur.ptr += ptrdiff;
-}
-
-static 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))
-    memcpy (&new_iter->state, &old_iter->state, sizeof (mbstate_t));
-  else
-    memset (&new_iter->state, 0, sizeof (mbstate_t));
-  new_iter->next_done = old_iter->next_done;
-  mb_copy (&new_iter->cur, &old_iter->cur);
-}
-
-/* Iteration macros.  */
-typedef struct mbuiter_multi mbui_iterator_t;
-#define mbui_init(iter, startptr) \
-  ((iter).cur.ptr = (startptr), \
-   (iter).in_shift = false, memset (&(iter).state, '\0', sizeof (mbstate_t)), \
-   (iter).next_done = false)
-#define mbui_avail(iter) \
-  (mbuiter_multi_next (&(iter)), !mb_isnul ((iter).cur))
-#define mbui_advance(iter) \
-  ((iter).cur.ptr += (iter).cur.bytes, (iter).next_done = false)
-
-/* Access to the current character.  */
-#define mbui_cur(iter) (iter).cur
-#define mbui_cur_ptr(iter) (iter).cur.ptr
-
-/* Relocation.  */
-#define mbui_reloc(iter, ptrdiff) mbuiter_multi_reloc (&iter, ptrdiff)
-
-/* Copying an iterator.  */
-#define mbui_copy mbuiter_multi_copy
-
-#endif /* _MBUITER_H */
diff --git a/lib/mempcpy.c b/lib/mempcpy.c
deleted file mode 100644 (file)
index 988936a..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Copy memory area and return pointer after last written byte.
-   Copyright (C) 2003, 2007 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include <string.h>
-
-/* Copy N bytes of SRC to DEST, return pointer to bytes after the
-   last written byte.  */
-void *
-mempcpy (void *dest, const void *src, size_t n)
-{
-  return (char *) memcpy (dest, src, n) + n;
-}
diff --git a/lib/memrchr.c b/lib/memrchr.c
deleted file mode 100644 (file)
index da93ca0..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-/* memrchr -- find the last occurrence of a byte in a memory block
-
-   Copyright (C) 1991, 1993, 1996, 1997, 1999, 2000, 2003, 2004, 2005,
-   2006, 2007, 2008 Free Software Foundation, Inc.
-
-   Based on strlen implementation by Torbjorn Granlund (tege@sics.se),
-   with help from Dan Sahlin (dan@sics.se) and
-   commentary by Jim Blandy (jimb@ai.mit.edu);
-   adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu),
-   and implemented by Roland McGrath (roland@ai.mit.edu).
-
-   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 defined _LIBC
-# include <memcopy.h>
-#else
-# include <config.h>
-# define reg_char char
-#endif
-
-#include <string.h>
-#include <limits.h>
-
-#undef __memrchr
-#ifdef _LIBC
-# undef memrchr
-#endif
-
-#ifndef weak_alias
-# define __memrchr memrchr
-#endif
-
-/* Search no more than N bytes of S for C.  */
-void *
-__memrchr (void const *s, int c_in, size_t n)
-{
-  /* On 32-bit hardware, choosing longword to be a 32-bit unsigned
-     long instead of a 64-bit uintmax_t tends to give better
-     performance.  On 64-bit hardware, unsigned long is generally 64
-     bits already.  Change this typedef to experiment with
-     performance.  */
-  typedef unsigned long int longword;
-
-  const unsigned char *char_ptr;
-  const longword *longword_ptr;
-  longword repeated_one;
-  longword repeated_c;
-  unsigned reg_char c;
-
-  c = (unsigned char) c_in;
-
-  /* Handle the last few bytes by reading one byte at a time.
-     Do this until CHAR_PTR is aligned on a longword boundary.  */
-  for (char_ptr = (const unsigned char *) s + n;
-       n > 0 && (size_t) char_ptr % sizeof (longword) != 0;
-       --n)
-    if (*--char_ptr == c)
-      return (void *) char_ptr;
-
-  longword_ptr = (const longword *) char_ptr;
-
-  /* All these elucidatory comments refer to 4-byte longwords,
-     but the theory applies equally well to any size longwords.  */
-
-  /* Compute auxiliary longword values:
-     repeated_one is a value which has a 1 in every byte.
-     repeated_c has c in every byte.  */
-  repeated_one = 0x01010101;
-  repeated_c = c | (c << 8);
-  repeated_c |= repeated_c << 16;
-  if (0xffffffffU < (longword) -1)
-    {
-      repeated_one |= repeated_one << 31 << 1;
-      repeated_c |= repeated_c << 31 << 1;
-      if (8 < sizeof (longword))
-       {
-         size_t i;
-
-         for (i = 64; i < sizeof (longword) * 8; i *= 2)
-           {
-             repeated_one |= repeated_one << i;
-             repeated_c |= repeated_c << i;
-           }
-       }
-    }
-
-  /* Instead of the traditional loop which tests each byte, we will test a
-     longword at a time.  The tricky part is testing if *any of the four*
-     bytes in the longword in question are equal to c.  We first use an xor
-     with repeated_c.  This reduces the task to testing whether *any of the
-     four* bytes in longword1 is zero.
-
-     We compute tmp =
-       ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7).
-     That is, we perform the following operations:
-       1. Subtract repeated_one.
-       2. & ~longword1.
-       3. & a mask consisting of 0x80 in every byte.
-     Consider what happens in each byte:
-       - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff,
-         and step 3 transforms it into 0x80.  A carry can also be propagated
-         to more significant bytes.
-       - If a byte of longword1 is nonzero, let its lowest 1 bit be at
-         position k (0 <= k <= 7); so the lowest k bits are 0.  After step 1,
-         the byte ends in a single bit of value 0 and k bits of value 1.
-         After step 2, the result is just k bits of value 1: 2^k - 1.  After
-         step 3, the result is 0.  And no carry is produced.
-     So, if longword1 has only non-zero bytes, tmp is zero.
-     Whereas if longword1 has a zero byte, call j the position of the least
-     significant zero byte.  Then the result has a zero at positions 0, ...,
-     j-1 and a 0x80 at position j.  We cannot predict the result at the more
-     significant bytes (positions j+1..3), but it does not matter since we
-     already have a non-zero bit at position 8*j+7.
-
-     So, the test whether any byte in longword1 is zero is equivalent to
-     testing whether tmp is nonzero.  */
-
-  while (n >= sizeof (longword))
-    {
-      longword longword1 = *--longword_ptr ^ repeated_c;
-
-      if ((((longword1 - repeated_one) & ~longword1)
-          & (repeated_one << 7)) != 0)
-       {
-         longword_ptr++;
-         break;
-       }
-      n -= sizeof (longword);
-    }
-
-  char_ptr = (const unsigned char *) longword_ptr;
-
-  /* At this point, we know that either n < sizeof (longword), or one of the
-     sizeof (longword) bytes starting at char_ptr is == c.  On little-endian
-     machines, we could determine the first such byte without any further
-     memory accesses, just by looking at the tmp result from the last loop
-     iteration.  But this does not work on big-endian machines.  Choose code
-     that works in both cases.  */
-
-  while (n-- > 0)
-    {
-      if (*--char_ptr == c)
-       return (void *) char_ptr;
-    }
-
-  return NULL;
-}
-#ifdef weak_alias
-weak_alias (__memrchr, memrchr)
-#endif
diff --git a/lib/mkdirat.c b/lib/mkdirat.c
deleted file mode 100644 (file)
index 6b6278b..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/* fd-relative mkdir
-   Copyright (C) 2005, 2006 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 */
-
-#include <config.h>
-
-#include "openat.h"
-
-#include <unistd.h>
-
-#include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */
-#include "save-cwd.h"
-#include "openat-priv.h"
-
-/* Solaris 10 has no function like this.
-   Create a subdirectory, FILE, with mode MODE, in the directory
-   open on descriptor FD.  If possible, do it without changing the
-   working directory.  Otherwise, resort to using save_cwd/fchdir,
-   then mkdir/restore_cwd.  If either the save_cwd or the restore_cwd
-   fails, then give a diagnostic and exit nonzero.  */
-
-#define AT_FUNC_NAME mkdirat
-#define AT_FUNC_F1 mkdir
-#define AT_FUNC_F2 mkdir
-#define AT_FUNC_USE_F1_COND 1
-#define AT_FUNC_POST_FILE_PARAM_DECLS , mode_t mode
-#define AT_FUNC_POST_FILE_ARGS        , mode
-#include "at-func.c"
diff --git a/lib/mkdtemp.c b/lib/mkdtemp.c
deleted file mode 100644 (file)
index 6b9dd15..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (C) 1999, 2001-2003, 2006-2007 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
-   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/>.  */
-
-/* Extracted from misc/mkdtemp.c.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include <stdlib.h>
-
-#include "tempname.h"
-
-/* Generate a unique temporary directory from TEMPLATE.
-   The last six characters of TEMPLATE must be "XXXXXX";
-   they are replaced with a string that makes the filename unique.
-   The directory is created, mode 700, and its name is returned.
-   (This function comes from OpenBSD.) */
-char *
-mkdtemp (char *template)
-{
-  if (gen_tempname (template, GT_DIR))
-    return NULL;
-  else
-    return template;
-}
diff --git a/lib/mktime.c b/lib/mktime.c
deleted file mode 100644 (file)
index 776a48a..0000000
+++ /dev/null
@@ -1,667 +0,0 @@
-/* -*- 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-2005, 2006, 2007 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.
-
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* Define this to have a standalone program to test this implementation of
-   mktime.  */
-/* #define DEBUG 1 */
-
-#ifndef _LIBC
-# include <config.h>
-#endif
-
-/* Assume that leap seconds are possible, unless told otherwise.
-   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
-#endif
-
-#include <time.h>
-
-#include <limits.h>
-
-#include <string.h>            /* For the real memcpy prototype.  */
-
-#if DEBUG
-# include <stdio.h>
-# include <stdlib.h>
-/* Make it work even if the system's libc has its own mktime routine.  */
-# define mktime my_mktime
-#endif /* DEBUG */
-
-/* Shift A right by B bits portably, by dividing A by 2**B and
-   truncating towards minus infinity.  A and B should be free of side
-   effects, and B should be in the range 0 <= B <= INT_BITS - 2, where
-   INT_BITS is the number of useful bits in an int.  GNU code can
-   assume that INT_BITS is at least 32.
-
-   ISO C99 says that A >> B is implementation-defined if A < 0.  Some
-   implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift
-   right in the usual way when A < 0, so SHR falls back on division if
-   ordinary A >> B doesn't seem to be the usual signed shift.  */
-#define SHR(a, b)      \
-  (-1 >> 1 == -1       \
-   ? (a) >> (b)                \
-   : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0))
-
-/* The extra casts in the following macros work around compiler bugs,
-   e.g., in Cray C 5.0.3.0.  */
-
-/* True if the arithmetic type T is an integer type.  bool counts as
-   an integer.  */
-#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1)
-
-/* True if negative values of the signed integer type T use two's
-   complement, ones' complement, or signed magnitude representation,
-   respectively.  Much GNU code assumes two's complement, but some
-   people like to be portable to all possible C hosts.  */
-#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
-#define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
-#define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
-
-/* True if the arithmetic type T is signed.  */
-#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
-
-/* The maximum and minimum values for the integer type T.  These
-   macros have undefined behavior if T is signed and has padding bits.
-   If this is a problem for you, please let us know how to fix it for
-   your host.  */
-#define TYPE_MINIMUM(t) \
-  ((t) (! TYPE_SIGNED (t) \
-       ? (t) 0 \
-       : TYPE_SIGNED_MAGNITUDE (t) \
-       ? ~ (t) 0 \
-       : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
-#define TYPE_MAXIMUM(t) \
-  ((t) (! TYPE_SIGNED (t) \
-       ? (t) -1 \
-       : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
-
-#ifndef TIME_T_MIN
-# define TIME_T_MIN TYPE_MINIMUM (time_t)
-#endif
-#ifndef TIME_T_MAX
-# define TIME_T_MAX TYPE_MAXIMUM (time_t)
-#endif
-#define TIME_T_MIDPOINT (SHR (TIME_T_MIN + TIME_T_MAX, 1) + 1)
-
-/* Verify a requirement at compile-time (unlike assert, which is runtime).  */
-#define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; }
-
-verify (time_t_is_integer, TYPE_IS_INTEGER (time_t));
-verify (twos_complement_arithmetic, TYPE_TWOS_COMPLEMENT (int));
-/* The code also assumes that signed integer overflow silently wraps
-   around, but this assumption can't be stated without causing a
-   diagnostic on some hosts.  */
-
-#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
-leapyear (long int year)
-{
-  /* Don't add YEAR to TM_YEAR_BASE, as that might overflow.
-     Also, work even if YEAR is negative.  */
-  return
-    ((year & 3) == 0
-     && (year % 100 != 0
-        || ((year / 100) & 3) == (- (TM_YEAR_BASE / 100) & 3)));
-}
-
-/* How many days come before each month (0-12).  */
-#ifndef _LIBC
-static
-#endif
-const unsigned short int __mon_yday[2][13] =
-  {
-    /* Normal years.  */
-    { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
-    /* Leap years.  */
-    { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }
-  };
-
-
-#ifndef _LIBC
-/* Portable standalone applications should supply a <time.h> that
-   declares a POSIX-compliant localtime_r, for the benefit of older
-   implementations that lack localtime_r or have a nonstandard one.
-   See the gnulib time_r module for one way to implement this.  */
-# undef __localtime_r
-# define __localtime_r localtime_r
-# define __mktime_internal mktime_internal
-#endif
-
-/* Return an integer value measuring (YEAR1-YDAY1 HOUR1:MIN1:SEC1) -
-   (YEAR0-YDAY0 HOUR0:MIN0:SEC0) in seconds, assuming that the clocks
-   were not adjusted between the time stamps.
-
-   The YEAR values uses the same numbering as TP->tm_year.  Values
-   need not be in the usual range.  However, YEAR1 must not be less
-   than 2 * INT_MIN or greater than 2 * INT_MAX.
-
-   The result may overflow.  It is the caller's responsibility to
-   detect overflow.  */
-
-static inline 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)
-{
-  verify (C99_integer_division, -1 / 2 == 0);
-  verify (long_int_year_and_yday_are_wide_enough,
-         INT_MAX <= LONG_MAX / 2 || TIME_T_MAX <= UINT_MAX);
-
-  /* Compute intervening leap days correctly even if year is negative.
-     Take care to avoid integer overflow here.  */
-  int a4 = SHR (year1, 2) + SHR (TM_YEAR_BASE, 2) - ! (year1 & 3);
-  int b4 = SHR (year0, 2) + SHR (TM_YEAR_BASE, 2) - ! (year0 & 3);
-  int a100 = a4 / 25 - (a4 % 25 < 0);
-  int b100 = b4 / 25 - (b4 % 25 < 0);
-  int a400 = SHR (a100, 2);
-  int b400 = SHR (b100, 2);
-  int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400);
-
-  /* Compute the desired time in time_t precision.  Overflow might
-     occur here.  */
-  time_t tyear1 = year1;
-  time_t years = tyear1 - year0;
-  time_t days = 365 * years + yday1 - yday0 + intervening_leap_days;
-  time_t hours = 24 * days + hour1 - hour0;
-  time_t minutes = 60 * hours + min1 - min0;
-  time_t seconds = 60 * minutes + sec1 - sec0;
-  return seconds;
-}
-
-
-/* Return a time_t value corresponding to (YEAR-YDAY HOUR:MIN:SEC),
-   assuming that *T corresponds to *TP and that no clock adjustments
-   occurred between *TP and the desired time.
-   If TP is null, return a value not equal to *T; this avoids false matches.
-   If overflow occurs, yield the minimal or maximal value, except do not
-   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)
-{
-  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);
-      time_t t1 = *t + d;
-      if ((t1 < *t) == (TYPE_SIGNED (time_t) ? d < 0 : TIME_T_MAX / 2 < d))
-       return t1;
-    }
-
-  /* Overflow occurred one way or another.  Return the nearest result
-     that is actually in range, except don't report a zero difference
-     if the actual difference is nonzero, as that would cause a false
-     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));
-}
-
-/* Use CONVERT to convert *T to a broken down time in *TP.
-   If *T is out of range for conversion, adjust it so that
-   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)
-{
-  struct tm *r = convert (t, tp);
-
-  if (!r && *t)
-    {
-      time_t bad = *t;
-      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.  */
-      while (bad != ok + (bad < 0 ? -1 : 1))
-       {
-         time_t mid = *t = (bad < 0
-                            ? bad + ((ok - bad) >> 1)
-                            : ok + ((bad - ok) >> 1));
-         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);
-       }
-    }
-
-  return r;
-}
-
-
-/* Convert *TP to a time_t value, inverting
-   the monotonic and mostly-unit-linear conversion function CONVERT.
-   Use *OFFSET to keep track of a guess at the offset of the result,
-   compared to what the result would be for UTC without leap seconds.
-   If *OFFSET's guess is correct, only one CONVERT call is needed.
-   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)
-{
-  time_t t, gt, t0, t1, t2;
-  struct tm tm;
-
-  /* The maximum number of probes (calls to CONVERT) should be enough
-     to handle any combinations of time zone rule changes, solar time,
-     leap seconds, and oscillations around a spring-forward gap.
-     POSIX.1 prohibits leap seconds, but some hosts have them anyway.  */
-  int remaining_probes = 6;
-
-  /* Time requested.  Copy it in case CONVERT modifies *TP; this can
-     occur if TP is localtime's returned value and CONVERT is localtime.  */
-  int sec = tp->tm_sec;
-  int min = tp->tm_min;
-  int hour = tp->tm_hour;
-  int mday = tp->tm_mday;
-  int mon = tp->tm_mon;
-  int year_requested = tp->tm_year;
-  /* Normalize the value.  */
-  int isdst = ((tp->tm_isdst >> (8 * sizeof (tp->tm_isdst) - 1))
-              | (tp->tm_isdst != 0));
-
-  /* 1 if the previous probe was DST.  */
-  int dst2;
-
-  /* Ensure that mon is in range, and set year accordingly.  */
-  int mon_remainder = mon % 12;
-  int negative_mon_remainder = mon_remainder < 0;
-  int mon_years = mon / 12 - negative_mon_remainder;
-  long int lyear_requested = year_requested;
-  long int year = lyear_requested + mon_years;
-
-  /* The other values need not be in range:
-     the remaining code handles minor overflows correctly,
-     assuming int and time_t arithmetic wraps around.
-     Major overflows are caught at the end.  */
-
-  /* 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);
-  long int lmday = mday;
-  long int yday = mon_yday + lmday;
-
-  time_t guessed_offset = *offset;
-
-  int sec_requested = sec;
-
-  if (LEAP_SECONDS_POSSIBLE)
-    {
-      /* Handle out-of-range seconds specially,
-        since ydhms_tm_diff assumes every minute has 60 seconds.  */
-      if (sec < 0)
-       sec = 0;
-      if (59 < sec)
-       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);
-
-  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.  */
-
-      /* 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.  */
-      int ALOG2_SECONDS_PER_BIENNIUM = 26;
-      int ALOG2_MINUTES_PER_BIENNIUM = 20;
-      int ALOG2_HOURS_PER_BIENNIUM = 14;
-      int ALOG2_DAYS_PER_BIENNIUM = 10;
-      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)));
-
-      int approx_biennia = SHR (t0, ALOG2_SECONDS_PER_BIENNIUM);
-      int diff = approx_biennia - approx_requested_biennia;
-      int abs_diff = diff < 0 ? - diff : diff;
-
-      /* IRIX 4.0.5 cc miscaculates 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) */
-      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 ? - diff : diff;
-         if (overflow_threshold < 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);
-       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))))
-      /* 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.  */
-      goto offset_found;
-    else if (--remaining_probes == 0)
-      return -1;
-
-  /* We have a match.  Check whether tm.tm_isdst has the requested
-     value, if any.  */
-  if (isdst != tm.tm_isdst && 0 <= isdst && 0 <= tm.tm_isdst)
-    {
-      /* tm.tm_isdst has the wrong value.  Look for a neighboring
-        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.  */
-
-      /* 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.  */
-      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.  */
-      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.  */
-      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)
-         {
-           time_t ot = t + delta * direction;
-           if ((ot < t) == (direction < 0))
-             {
-               struct tm otm;
-               ranged_convert (convert, &ot, &otm);
-               if (otm.tm_isdst == 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:
-  *offset = guessed_offset + t - t0;
-
-  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.  */
-      int sec_adjustment = (sec == 0 && tm.tm_sec == 60) - sec;
-      t1 = t + sec_requested;
-      t2 = t1 + sec_adjustment;
-      if (((t1 < t) != (sec_requested < 0))
-         | ((t2 < t1) != (sec_adjustment < 0))
-         | ! convert (&t2, &tm))
-       return -1;
-      t = t2;
-    }
-
-  *tp = tm;
-  return t;
-}
-
-
-/* FIXME: This should use a signed type wide enough to hold any UTC
-   offset in seconds.  'int' should be good enough for GNU code.  We
-   can't fix this unilaterally though, as other modules invoke
-   __mktime_internal.  */
-static time_t localtime_offset;
-
-/* Convert *TP to a time_t value.  */
-time_t
-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
-     be set as if the tzset() function had been called.  */
-  __tzset ();
-#endif
-
-  return __mktime_internal (tp, __localtime_r, &localtime_offset);
-}
-
-#ifdef weak_alias
-weak_alias (mktime, timelocal)
-#endif
-
-#ifdef _LIBC
-libc_hidden_def (mktime)
-libc_hidden_weak (timelocal)
-#endif
-\f
-#if DEBUG
-
-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)
-         | (a->tm_isdst ^ b->tm_isdst));
-}
-
-static void
-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);
-  else
-    printf ("0");
-}
-
-static int
-check_result (time_t tk, struct tm tmk, time_t tl, const struct tm *lt)
-{
-  if (tk != tl || !lt || not_equal_tm (&tmk, lt))
-    {
-      printf ("mktime (");
-      print_tm (lt);
-      printf (")\nyields (");
-      print_tm (&tmk);
-      printf (") == %ld, should be %ld\n", (long int) tk, (long int) tl);
-      return 1;
-    }
-
-  return 0;
-}
-
-int
-main (int argc, char **argv)
-{
-  int status = 0;
-  struct tm tm, tmk, tml;
-  struct tm *lt;
-  time_t tk, tl, tl1;
-  char trailer;
-
-  if ((argc == 3 || argc == 4)
-      && (sscanf (argv[1], "%d-%d-%d%c",
-                 &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_year -= TM_YEAR_BASE;
-      tm.tm_mon--;
-      tm.tm_isdst = argc == 3 ? -1 : atoi (argv[3]);
-      tmk = tm;
-      tl = mktime (&tmk);
-      lt = localtime (&tl);
-      if (lt)
-       {
-         tml = *lt;
-         lt = &tml;
-       }
-      printf ("mktime returns %ld == ", (long int) tl);
-      print_tm (&tmk);
-      printf ("\n");
-      status = check_result (tl, tmk, tl, lt);
-    }
-  else if (argc == 4 || (argc == 5 && strcmp (argv[4], "-") == 0))
-    {
-      time_t from = atol (argv[1]);
-      time_t by = atol (argv[2]);
-      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;
-         }
-      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;
-         }
-    }
-  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]);
-
-  return status;
-}
-
-#endif /* DEBUG */
-\f
-/*
-Local Variables:
-compile-command: "gcc -DDEBUG -Wall -W -O -g mktime.c -o mktime"
-End:
-*/
diff --git a/lib/modechange.c b/lib/modechange.c
deleted file mode 100644 (file)
index 1296717..0000000
+++ /dev/null
@@ -1,385 +0,0 @@
-/* modechange.c -- file mode manipulation
-
-   Copyright (C) 1989, 1990, 1997, 1998, 1999, 2001, 2003, 2004, 2005,
-   2006 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 David MacKenzie <djm@ai.mit.edu> */
-
-/* The ASCII mode string is compiled into an array of `struct
-   modechange', which can then be applied to each file to be changed.
-   We do this instead of re-parsing the ASCII string for each file
-   because the compiled form requires less computation to use; when
-   changing the mode of many files, this probably results in a
-   performance gain.  */
-
-#include <config.h>
-
-#include "modechange.h"
-#include <sys/stat.h>
-#include "stat-macros.h"
-#include "xalloc.h"
-#include <stdlib.h>
-
-/* The traditional octal values corresponding to each mode bit.  */
-#define SUID 04000
-#define SGID 02000
-#define SVTX 01000
-#define RUSR 00400
-#define WUSR 00200
-#define XUSR 00100
-#define RGRP 00040
-#define WGRP 00020
-#define XGRP 00010
-#define ROTH 00004
-#define WOTH 00002
-#define XOTH 00001
-#define ALLM 07777 /* all octal mode bits */
-
-/* Convert OCTAL, which uses one of the traditional octal values, to
-   an internal mode_t value.  */
-static mode_t
-octal_to_mode (unsigned int octal)
-{
-  /* Help the compiler optimize the usual case where mode_t uses
-     the traditional octal representation.  */
-  return ((S_ISUID == SUID && S_ISGID == SGID && S_ISVTX == SVTX
-          && S_IRUSR == RUSR && S_IWUSR == WUSR && S_IXUSR == XUSR
-          && S_IRGRP == RGRP && S_IWGRP == WGRP && S_IXGRP == XGRP
-          && S_IROTH == ROTH && S_IWOTH == WOTH && S_IXOTH == XOTH)
-         ? octal
-         : (mode_t) ((octal & SUID ? S_ISUID : 0)
-                     | (octal & SGID ? S_ISGID : 0)
-                     | (octal & SVTX ? S_ISVTX : 0)
-                     | (octal & RUSR ? S_IRUSR : 0)
-                     | (octal & WUSR ? S_IWUSR : 0)
-                     | (octal & XUSR ? S_IXUSR : 0)
-                     | (octal & RGRP ? S_IRGRP : 0)
-                     | (octal & WGRP ? S_IWGRP : 0)
-                     | (octal & XGRP ? S_IXGRP : 0)
-                     | (octal & ROTH ? S_IROTH : 0)
-                     | (octal & WOTH ? S_IWOTH : 0)
-                     | (octal & XOTH ? S_IXOTH : 0)));
-}
-
-/* Special operations flags.  */
-enum
-  {
-    /* For the sentinel at the end of the mode changes array.  */
-    MODE_DONE,
-
-    /* The typical case.  */
-    MODE_ORDINARY_CHANGE,
-
-    /* In addition to the typical case, affect the execute bits if at
-       least one execute bit is set already, or if the file is a
-       directory.  */
-    MODE_X_IF_ANY_X,
-
-    /* Instead of the typical case, copy some existing permissions for
-       u, g, or o onto the other two.  Which of u, g, or o is copied
-       is determined by which bits are set in the `value' field.  */
-    MODE_COPY_EXISTING
-  };
-
-/* Description of a mode change.  */
-struct mode_change
-{
-  char op;                     /* One of "=+-".  */
-  char flag;                   /* Special operations flag.  */
-  mode_t affected;             /* Set for u, g, o, or a.  */
-  mode_t value;                        /* Bits to add/remove.  */
-  mode_t mentioned;            /* Bits explicitly mentioned.  */
-};
-
-/* Return a mode_change array with the specified `=ddd'-style
-   mode change operation, where NEW_MODE is `ddd' and MENTIONED
-   contains the bits explicitly mentioned in the mode are MENTIONED.  */
-
-static struct mode_change *
-make_node_op_equals (mode_t new_mode, mode_t mentioned)
-{
-  struct mode_change *p = xmalloc (2 * sizeof *p);
-  p->op = '=';
-  p->flag = MODE_ORDINARY_CHANGE;
-  p->affected = CHMOD_MODE_BITS;
-  p->value = new_mode;
-  p->mentioned = mentioned;
-  p[1].flag = MODE_DONE;
-  return p;
-}
-
-/* Return a pointer to an array of file mode change operations created from
-   MODE_STRING, an ASCII string that contains either an octal number
-   specifying an absolute mode, or symbolic mode change operations with
-   the form:
-   [ugoa...][[+-=][rwxXstugo...]...][,...]
-
-   Return NULL if `mode_string' does not contain a valid
-   representation of file mode change operations.  */
-
-struct mode_change *
-mode_compile (char const *mode_string)
-{
-  /* The array of mode-change directives to be returned.  */
-  struct mode_change *mc;
-  size_t used = 0;
-
-  if ('0' <= *mode_string && *mode_string < '8')
-    {
-      unsigned int octal_mode = 0;
-      mode_t mode;
-      mode_t mentioned;
-
-      do
-       {
-         octal_mode = 8 * octal_mode + *mode_string++ - '0';
-         if (ALLM < octal_mode)
-           return NULL;
-       }
-      while ('0' <= *mode_string && *mode_string < '8');
-
-      if (*mode_string)
-       return NULL;
-
-      mode = octal_to_mode (octal_mode);
-      mentioned = (mode & (S_ISUID | S_ISGID)) | S_ISVTX | S_IRWXUGO;
-      return make_node_op_equals (mode, mentioned);
-    }
-
-  /* Allocate enough space to hold the result.  */
-  {
-    size_t needed = 1;
-    char const *p;
-    for (p = mode_string; *p; p++)
-      needed += (*p == '=' || *p == '+' || *p == '-');
-    mc = xnmalloc (needed, sizeof *mc);
-  }
-
-  /* One loop iteration for each `[ugoa]*([-+=]([rwxXst]*|[ugo]))+'.  */
-  for (;; mode_string++)
-    {
-      /* Which bits in the mode are operated on.  */
-      mode_t affected = 0;
-
-      /* Turn on all the bits in `affected' for each group given.  */
-      for (;; mode_string++)
-       switch (*mode_string)
-         {
-         default:
-           goto invalid;
-         case 'u':
-           affected |= S_ISUID | S_IRWXU;
-           break;
-         case 'g':
-           affected |= S_ISGID | S_IRWXG;
-           break;
-         case 'o':
-           affected |= S_ISVTX | S_IRWXO;
-           break;
-         case 'a':
-           affected |= CHMOD_MODE_BITS;
-           break;
-         case '=': case '+': case '-':
-           goto no_more_affected;
-         }
-    no_more_affected:;
-
-      do
-       {
-         char op = *mode_string++;
-         mode_t value;
-         char flag = MODE_COPY_EXISTING;
-         struct mode_change *change;
-
-         switch (*mode_string++)
-           {
-           case 'u':
-             /* Set the affected bits to the value of the `u' bits
-                on the same file.  */
-             value = S_IRWXU;
-             break;
-           case 'g':
-             /* Set the affected bits to the value of the `g' bits
-                on the same file.  */
-             value = S_IRWXG;
-             break;
-           case 'o':
-             /* Set the affected bits to the value of the `o' bits
-                on the same file.  */
-             value = S_IRWXO;
-             break;
-
-           default:
-             value = 0;
-             flag = MODE_ORDINARY_CHANGE;
-
-             for (mode_string--;; mode_string++)
-               switch (*mode_string)
-                 {
-                 case 'r':
-                   value |= S_IRUSR | S_IRGRP | S_IROTH;
-                   break;
-                 case 'w':
-                   value |= S_IWUSR | S_IWGRP | S_IWOTH;
-                   break;
-                 case 'x':
-                   value |= S_IXUSR | S_IXGRP | S_IXOTH;
-                   break;
-                 case 'X':
-                   flag = MODE_X_IF_ANY_X;
-                   break;
-                 case 's':
-                   /* Set the setuid/gid bits if `u' or `g' is selected.  */
-                   value |= S_ISUID | S_ISGID;
-                   break;
-                 case 't':
-                   /* Set the "save text image" bit if `o' is selected.  */
-                   value |= S_ISVTX;
-                   break;
-                 default:
-                   goto no_more_values;
-                 }
-           no_more_values:;
-           }
-
-         change = &mc[used++];
-         change->op = op;
-         change->flag = flag;
-         change->affected = affected;
-         change->value = value;
-         change->mentioned = (affected ? affected & value : value);
-       }
-      while (*mode_string == '=' || *mode_string == '+'
-            || *mode_string == '-');
-
-      if (*mode_string != ',')
-       break;
-    }
-
-  if (*mode_string == 0)
-    {
-      mc[used].flag = MODE_DONE;
-      return mc;
-    }
-
-invalid:
-  free (mc);
-  return NULL;
-}
-
-/* Return a file mode change operation that sets permissions to match those
-   of REF_FILE.  Return NULL (setting errno) if REF_FILE can't be accessed.  */
-
-struct mode_change *
-mode_create_from_ref (const char *ref_file)
-{
-  struct stat ref_stats;
-
-  if (stat (ref_file, &ref_stats) != 0)
-    return NULL;
-  return make_node_op_equals (ref_stats.st_mode, CHMOD_MODE_BITS);
-}
-
-/* Return the file mode bits of OLDMODE (which is the mode of a
-   directory if DIR), assuming the umask is UMASK_VALUE, adjusted as
-   indicated by the list of change operations CHANGES.  If DIR, the
-   type 'X' change affects the returned value even if no execute bits
-   were set in OLDMODE, and set user and group ID bits are preserved
-   unless CHANGES mentioned them.  If PMODE_BITS is not null, store into
-   *PMODE_BITS a mask denoting file mode bits that are affected by
-   CHANGES.
-
-   The returned value and *PMODE_BITS contain only file mode bits.
-   For example, they have the S_IFMT bits cleared on a standard
-   Unix-like host.  */
-
-mode_t
-mode_adjust (mode_t oldmode, bool dir, mode_t umask_value,
-            struct mode_change const *changes, mode_t *pmode_bits)
-{
-  /* The adjusted mode.  */
-  mode_t newmode = oldmode & CHMOD_MODE_BITS;
-
-  /* File mode bits that CHANGES cares about.  */
-  mode_t mode_bits = 0;
-
-  for (; changes->flag != MODE_DONE; changes++)
-    {
-      mode_t affected = changes->affected;
-      mode_t omit_change =
-       (dir ? S_ISUID | S_ISGID : 0) & ~ changes->mentioned;
-      mode_t value = changes->value;
-
-      switch (changes->flag)
-       {
-       case MODE_ORDINARY_CHANGE:
-         break;
-
-       case MODE_COPY_EXISTING:
-         /* Isolate in `value' the bits in `newmode' to copy.  */
-         value &= newmode;
-
-         /* Copy the isolated bits to the other two parts.  */
-         value |= ((value & (S_IRUSR | S_IRGRP | S_IROTH)
-                    ? S_IRUSR | S_IRGRP | S_IROTH : 0)
-                   | (value & (S_IWUSR | S_IWGRP | S_IWOTH)
-                      ? S_IWUSR | S_IWGRP | S_IWOTH : 0)
-                   | (value & (S_IXUSR | S_IXGRP | S_IXOTH)
-                      ? S_IXUSR | S_IXGRP | S_IXOTH : 0));
-         break;
-
-       case MODE_X_IF_ANY_X:
-         /* Affect the execute bits if execute bits are already set
-            or if the file is a directory.  */
-         if ((newmode & (S_IXUSR | S_IXGRP | S_IXOTH)) | dir)
-           value |= S_IXUSR | S_IXGRP | S_IXOTH;
-         break;
-       }
-
-      /* If WHO was specified, limit the change to the affected bits.
-        Otherwise, apply the umask.  Either way, omit changes as
-        requested.  */
-      value &= (affected ? affected : ~umask_value) & ~ omit_change;
-
-      switch (changes->op)
-       {
-       case '=':
-         /* If WHO was specified, preserve the previous values of
-            bits that are not affected by this change operation.
-            Otherwise, clear all the bits.  */
-         {
-           mode_t preserved = (affected ? ~affected : 0) | omit_change;
-           mode_bits |= CHMOD_MODE_BITS & ~preserved;
-           newmode = (newmode & preserved) | value;
-           break;
-         }
-
-       case '+':
-         mode_bits |= value;
-         newmode |= value;
-         break;
-
-       case '-':
-         mode_bits |= value;
-         newmode &= ~value;
-         break;
-       }
-    }
-
-  if (pmode_bits)
-    *pmode_bits = mode_bits;
-  return newmode;
-}
diff --git a/lib/modechange.h b/lib/modechange.h
deleted file mode 100644 (file)
index f6f8e74..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/* modechange.h -- definitions for file mode manipulation
-
-   Copyright (C) 1989, 1990, 1997, 2003, 2004, 2005, 2006 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 ! defined MODECHANGE_H_
-# define MODECHANGE_H_
-
-# include <stdbool.h>
-# include <sys/types.h>
-
-struct mode_change *mode_compile (const char *);
-struct mode_change *mode_create_from_ref (const char *);
-mode_t mode_adjust (mode_t, bool, mode_t, struct mode_change const *,
-                   mode_t *);
-
-#endif
diff --git a/lib/obstack.c b/lib/obstack.c
deleted file mode 100644 (file)
index 5b87466..0000000
+++ /dev/null
@@ -1,430 +0,0 @@
-/* obstack.c - subroutines used implicitly by object stack macros
-
-   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997,
-   1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 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/>.  */
-
-#ifdef _LIBC
-# include <obstack.h>
-# include <shlib-compat.h>
-#else
-# include <config.h>
-# include "obstack.h"
-#endif
-
-/* NOTE BEFORE MODIFYING THIS FILE: This version number must be
-   incremented whenever callers compiled using an old obstack.h can no
-   longer properly call the functions in this obstack.c.  */
-#define OBSTACK_INTERFACE_VERSION 1
-
-/* Comment out all this code if we are using the GNU C Library, and are not
-   actually compiling the library itself, and the installed library
-   supports the same library interface we do.  This code is part of the GNU
-   C 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, it is simpler to just do this in the source for each such file.  */
-
-#include <stdio.h>             /* Random thing to get __GNU_LIBRARY__.  */
-#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1
-# include <gnu-versions.h>
-# if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
-#  define ELIDE_CODE
-# endif
-#endif
-
-#include <stddef.h>
-
-#ifndef ELIDE_CODE
-
-# include <stdint.h>
-
-/* Determine default alignment.  */
-union fooround
-{
-  uintmax_t i;
-  long double d;
-  void *p;
-};
-struct fooalign
-{
-  char c;
-  union fooround u;
-};
-/* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT.
-   But in fact it might be less smart and round addresses to as much as
-   DEFAULT_ROUNDING.  So we prepare for it to do that.  */
-enum
-  {
-    DEFAULT_ALIGNMENT = offsetof (struct fooalign, u),
-    DEFAULT_ROUNDING = sizeof (union fooround)
-  };
-
-/* When we copy a long block of data, this is the unit to do it with.
-   On some machines, copying successive ints does not work;
-   in such a case, redefine COPYING_UNIT to `long' (if that works)
-   or `char' as a last resort.  */
-# ifndef COPYING_UNIT
-#  define COPYING_UNIT int
-# endif
-
-
-/* The functions allocating more room by calling `obstack_chunk_alloc'
-   jump to the handler pointed to by `obstack_alloc_failed_handler'.
-   This can be set to a user defined function which should either
-   abort gracefully or use longjump - but shouldn't return.  This
-   variable by default points to the internal function
-   `print_and_abort'.  */
-static void print_and_abort (void);
-void (*obstack_alloc_failed_handler) (void) = print_and_abort;
-
-/* Exit value used when `print_and_abort' is used.  */
-# include <stdlib.h>
-# ifdef _LIBC
-int obstack_exit_failure = EXIT_FAILURE;
-# else
-#  include "exitfail.h"
-#  define obstack_exit_failure exit_failure
-# endif
-
-# ifdef _LIBC
-#  if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)
-/* A looong time ago (before 1994, anyway; we're not sure) this global variable
-   was used by non-GNU-C macros to avoid multiple evaluation.  The GNU C
-   library still exports it because somebody might use it.  */
-struct obstack *_obstack_compat;
-compat_symbol (libc, _obstack_compat, _obstack, GLIBC_2_0);
-#  endif
-# endif
-
-/* Define a macro that either calls functions with the traditional malloc/free
-   calling interface, or calls functions with the mmalloc/mfree interface
-   (that adds an extra first argument), based on the state of use_extra_arg.
-   For free, do not use ?:, since some compilers, like the MIPS compilers,
-   do not allow (expr) ? void : void.  */
-
-# define CALL_CHUNKFUN(h, size) \
-  (((h) -> use_extra_arg) \
-   ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
-   : (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size)))
-
-# define CALL_FREEFUN(h, old_chunk) \
-  do { \
-    if ((h) -> use_extra_arg) \
-      (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
-    else \
-      (*(void (*) (void *)) (h)->freefun) ((old_chunk)); \
-  } while (0)
-
-\f
-/* Initialize an obstack H for use.  Specify chunk size SIZE (0 means default).
-   Objects start on multiples of ALIGNMENT (0 means use default).
-   CHUNKFUN is the function to use to allocate chunks,
-   and FREEFUN the function to free them.
-
-   Return nonzero if successful, calls obstack_alloc_failed_handler if
-   allocation fails.  */
-
-int
-_obstack_begin (struct obstack *h,
-               int size, int alignment,
-               void *(*chunkfun) (long),
-               void (*freefun) (void *))
-{
-  register struct _obstack_chunk *chunk; /* points to new chunk */
-
-  if (alignment == 0)
-    alignment = DEFAULT_ALIGNMENT;
-  if (size == 0)
-    /* Default size is what GNU malloc can fit in a 4096-byte block.  */
-    {
-      /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc.
-        Use the values for range checking, because if range checking is off,
-        the extra bytes won't be missed terribly, but if range checking is on
-        and we used a larger request, a whole extra 4096 bytes would be
-        allocated.
-
-        These number are irrelevant to the new GNU malloc.  I suspect it is
-        less sensitive to the size of the request.  */
-      int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1))
-                   + 4 + DEFAULT_ROUNDING - 1)
-                  & ~(DEFAULT_ROUNDING - 1));
-      size = 4096 - extra;
-    }
-
-  h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun;
-  h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
-  h->chunk_size = size;
-  h->alignment_mask = alignment - 1;
-  h->use_extra_arg = 0;
-
-  chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size);
-  if (!chunk)
-    (*obstack_alloc_failed_handler) ();
-  h->next_free = h->object_base = __PTR_ALIGN ((char *) chunk, chunk->contents,
-                                              alignment - 1);
-  h->chunk_limit = chunk->limit
-    = (char *) chunk + h->chunk_size;
-  chunk->prev = 0;
-  /* The initial chunk now contains no empty object.  */
-  h->maybe_empty_object = 0;
-  h->alloc_failed = 0;
-  return 1;
-}
-
-int
-_obstack_begin_1 (struct obstack *h, int size, int alignment,
-                 void *(*chunkfun) (void *, long),
-                 void (*freefun) (void *, void *),
-                 void *arg)
-{
-  register struct _obstack_chunk *chunk; /* points to new chunk */
-
-  if (alignment == 0)
-    alignment = DEFAULT_ALIGNMENT;
-  if (size == 0)
-    /* Default size is what GNU malloc can fit in a 4096-byte block.  */
-    {
-      /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc.
-        Use the values for range checking, because if range checking is off,
-        the extra bytes won't be missed terribly, but if range checking is on
-        and we used a larger request, a whole extra 4096 bytes would be
-        allocated.
-
-        These number are irrelevant to the new GNU malloc.  I suspect it is
-        less sensitive to the size of the request.  */
-      int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1))
-                   + 4 + DEFAULT_ROUNDING - 1)
-                  & ~(DEFAULT_ROUNDING - 1));
-      size = 4096 - extra;
-    }
-
-  h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun;
-  h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
-  h->chunk_size = size;
-  h->alignment_mask = alignment - 1;
-  h->extra_arg = arg;
-  h->use_extra_arg = 1;
-
-  chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size);
-  if (!chunk)
-    (*obstack_alloc_failed_handler) ();
-  h->next_free = h->object_base = __PTR_ALIGN ((char *) chunk, chunk->contents,
-                                              alignment - 1);
-  h->chunk_limit = chunk->limit
-    = (char *) chunk + h->chunk_size;
-  chunk->prev = 0;
-  /* The initial chunk now contains no empty object.  */
-  h->maybe_empty_object = 0;
-  h->alloc_failed = 0;
-  return 1;
-}
-
-/* Allocate a new current chunk for the obstack *H
-   on the assumption that LENGTH bytes need to be added
-   to the current object, or a new object of length LENGTH allocated.
-   Copies any partial object from the end of the old chunk
-   to the beginning of the new one.  */
-
-void
-_obstack_newchunk (struct obstack *h, int length)
-{
-  register struct _obstack_chunk *old_chunk = h->chunk;
-  register struct _obstack_chunk *new_chunk;
-  register long        new_size;
-  register long obj_size = h->next_free - h->object_base;
-  register long i;
-  long already;
-  char *object_base;
-
-  /* Compute size for new chunk.  */
-  new_size = (obj_size + length) + (obj_size >> 3) + h->alignment_mask + 100;
-  if (new_size < h->chunk_size)
-    new_size = h->chunk_size;
-
-  /* Allocate and initialize the new chunk.  */
-  new_chunk = CALL_CHUNKFUN (h, new_size);
-  if (!new_chunk)
-    (*obstack_alloc_failed_handler) ();
-  h->chunk = new_chunk;
-  new_chunk->prev = old_chunk;
-  new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size;
-
-  /* Compute an aligned object_base in the new chunk */
-  object_base =
-    __PTR_ALIGN ((char *) new_chunk, new_chunk->contents, h->alignment_mask);
-
-  /* Move the existing object to the new chunk.
-     Word at a time is fast and is safe if the object
-     is sufficiently aligned.  */
-  if (h->alignment_mask + 1 >= DEFAULT_ALIGNMENT)
-    {
-      for (i = obj_size / sizeof (COPYING_UNIT) - 1;
-          i >= 0; i--)
-       ((COPYING_UNIT *)object_base)[i]
-         = ((COPYING_UNIT *)h->object_base)[i];
-      /* We used to copy the odd few remaining bytes as one extra COPYING_UNIT,
-        but that can cross a page boundary on a machine
-        which does not do strict alignment for COPYING_UNITS.  */
-      already = obj_size / sizeof (COPYING_UNIT) * sizeof (COPYING_UNIT);
-    }
-  else
-    already = 0;
-  /* Copy remaining bytes one by one.  */
-  for (i = already; i < obj_size; i++)
-    object_base[i] = h->object_base[i];
-
-  /* If the object just copied was the only data in OLD_CHUNK,
-     free that chunk and remove it from the chain.
-     But not if that chunk might contain an empty object.  */
-  if (! h->maybe_empty_object
-      && (h->object_base
-         == __PTR_ALIGN ((char *) old_chunk, old_chunk->contents,
-                         h->alignment_mask)))
-    {
-      new_chunk->prev = old_chunk->prev;
-      CALL_FREEFUN (h, old_chunk);
-    }
-
-  h->object_base = object_base;
-  h->next_free = h->object_base + obj_size;
-  /* The new chunk certainly contains no empty object yet.  */
-  h->maybe_empty_object = 0;
-}
-# ifdef _LIBC
-libc_hidden_def (_obstack_newchunk)
-# endif
-
-/* Return nonzero if object OBJ has been allocated from obstack H.
-   This is here for debugging.
-   If you use it in a program, you are probably losing.  */
-
-/* Suppress -Wmissing-prototypes warning.  We don't want to declare this in
-   obstack.h because it is just for debugging.  */
-int _obstack_allocated_p (struct obstack *h, void *obj);
-
-int
-_obstack_allocated_p (struct obstack *h, void *obj)
-{
-  register struct _obstack_chunk *lp;  /* below addr of any objects in this chunk */
-  register struct _obstack_chunk *plp; /* point to previous chunk if any */
-
-  lp = (h)->chunk;
-  /* We use >= rather than > since the object cannot be exactly at
-     the beginning of the chunk but might be an empty object exactly
-     at the end of an adjacent chunk.  */
-  while (lp != 0 && ((void *) lp >= obj || (void *) (lp)->limit < obj))
-    {
-      plp = lp->prev;
-      lp = plp;
-    }
-  return lp != 0;
-}
-\f
-/* Free objects in obstack H, including OBJ and everything allocate
-   more recently than OBJ.  If OBJ is zero, free everything in H.  */
-
-# undef obstack_free
-
-void
-__obstack_free (struct obstack *h, void *obj)
-{
-  register struct _obstack_chunk *lp;  /* below addr of any objects in this chunk */
-  register struct _obstack_chunk *plp; /* point to previous chunk if any */
-
-  lp = h->chunk;
-  /* We use >= because there cannot be an object at the beginning of a chunk.
-     But there can be an empty object at that address
-     at the end of another chunk.  */
-  while (lp != 0 && ((void *) lp >= obj || (void *) (lp)->limit < obj))
-    {
-      plp = lp->prev;
-      CALL_FREEFUN (h, lp);
-      lp = plp;
-      /* If we switch chunks, we can't tell whether the new current
-        chunk contains an empty object, so assume that it may.  */
-      h->maybe_empty_object = 1;
-    }
-  if (lp)
-    {
-      h->object_base = h->next_free = (char *) (obj);
-      h->chunk_limit = lp->limit;
-      h->chunk = lp;
-    }
-  else if (obj != 0)
-    /* obj is not in any of the chunks! */
-    abort ();
-}
-
-# ifdef _LIBC
-/* Older versions of libc used a function _obstack_free intended to be
-   called by non-GCC compilers.  */
-strong_alias (obstack_free, _obstack_free)
-# endif
-\f
-int
-_obstack_memory_used (struct obstack *h)
-{
-  register struct _obstack_chunk* lp;
-  register int nbytes = 0;
-
-  for (lp = h->chunk; lp != 0; lp = lp->prev)
-    {
-      nbytes += lp->limit - (char *) lp;
-    }
-  return nbytes;
-}
-\f
-/* Define the error handler.  */
-# ifdef _LIBC
-#  include <libintl.h>
-# else
-#  include "gettext.h"
-# endif
-# ifndef _
-#  define _(msgid) gettext (msgid)
-# endif
-
-# ifdef _LIBC
-#  include <libio/iolibio.h>
-# endif
-
-# ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later.  */
-#  if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
-#   define __attribute__(Spec) /* empty */
-#  endif
-# endif
-
-static void
-__attribute__ ((noreturn))
-print_and_abort (void)
-{
-  /* Don't change any of these strings.  Yes, it would be possible to add
-     the newline to the string and use fputs or so.  But this must not
-     happen because the "memory exhausted" message appears in other places
-     like this and the translation should be reused instead of creating
-     a very similar string which requires a separate translation.  */
-# ifdef _LIBC
-  (void) __fxprintf (NULL, "%s\n", _("memory exhausted"));
-# else
-  fprintf (stderr, "%s\n", _("memory exhausted"));
-# endif
-  exit (obstack_exit_failure);
-}
-
-#endif /* !ELIDE_CODE */
diff --git a/lib/obstack.h b/lib/obstack.h
deleted file mode 100644 (file)
index 1bf4b2f..0000000
+++ /dev/null
@@ -1,512 +0,0 @@
-/* obstack.h - object stack macros
-   Copyright (C) 1988-1994,1996-1999,2003,2004,2005,2006
-       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
-   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/>.  */
-
-/* Summary:
-
-All the apparent functions defined here are macros. The idea
-is that you would use these pre-tested macros to solve a
-very specific set of problems, and they would run fast.
-Caution: no side-effects in arguments please!! They may be
-evaluated MANY times!!
-
-These macros operate a stack of objects.  Each object starts life
-small, and may grow to maturity.  (Consider building a word syllable
-by syllable.)  An object can move while it is growing.  Once it has
-been "finished" it never changes address again.  So the "top of the
-stack" is typically an immature growing object, while the rest of the
-stack is of mature, fixed size and fixed address objects.
-
-These routines grab large chunks of memory, using a function you
-supply, called `obstack_chunk_alloc'.  On occasion, they free chunks,
-by calling `obstack_chunk_free'.  You must define them and declare
-them before using any obstack macros.
-
-Each independent stack is represented by a `struct obstack'.
-Each of the obstack macros expects a pointer to such a structure
-as the first argument.
-
-One motivation for this package is the problem of growing char strings
-in symbol tables.  Unless you are "fascist pig with a read-only mind"
---Gosper's immortal quote from HAKMEM item 154, out of context--you
-would not like to put any arbitrary upper limit on the length of your
-symbols.
-
-In practice this often means you will build many short symbols and a
-few long symbols.  At the time you are reading a symbol you don't know
-how long it is.  One traditional method is to read a symbol into a
-buffer, realloc()ating the buffer every time you try to read a symbol
-that is longer than the buffer.  This is beaut, but you still will
-want to copy the symbol from the buffer to a more permanent
-symbol-table entry say about half the time.
-
-With obstacks, you can work differently.  Use one obstack for all symbol
-names.  As you read a symbol, grow the name in the obstack gradually.
-When the name is complete, finalize it.  Then, if the symbol exists already,
-free the newly read name.
-
-The way we do this is to take a large chunk, allocating memory from
-low addresses.  When you want to build a symbol in the chunk you just
-add chars above the current "high water mark" in the chunk.  When you
-have finished adding chars, because you got to the end of the symbol,
-you know how long the chars are, and you can create a new object.
-Mostly the chars will not burst over the highest address of the chunk,
-because you would typically expect a chunk to be (say) 100 times as
-long as an average object.
-
-In case that isn't clear, when we have enough chars to make up
-the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed)
-so we just point to it where it lies.  No moving of chars is
-needed and this is the second win: potentially long strings need
-never be explicitly shuffled. Once an object is formed, it does not
-change its address during its lifetime.
-
-When the chars burst over a chunk boundary, we allocate a larger
-chunk, and then copy the partly formed object from the end of the old
-chunk to the beginning of the new larger chunk.  We then carry on
-accreting characters to the end of the object as we normally would.
-
-A special macro is provided to add a single char at a time to a
-growing object.  This allows the use of register variables, which
-break the ordinary 'growth' macro.
-
-Summary:
-       We allocate large chunks.
-       We carve out one object at a time from the current chunk.
-       Once carved, an object never moves.
-       We are free to append data of any size to the currently
-         growing object.
-       Exactly one object is growing in an obstack at any one time.
-       You can run one obstack per control block.
-       You may have as many control blocks as you dare.
-       Because of the way we do it, you can `unwind' an obstack
-         back to a previous state. (You may remove objects much
-         as you would with a stack.)
-*/
-
-
-/* Don't do the contents of this file more than once.  */
-
-#ifndef _OBSTACK_H
-#define _OBSTACK_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-\f
-/* We need the type of a pointer subtraction.  If __PTRDIFF_TYPE__ is
-   defined, as with GNU C, use that; that way we don't pollute the
-   namespace with <stddef.h>'s symbols.  Otherwise, include <stddef.h>
-   and use ptrdiff_t.  */
-
-#ifdef __PTRDIFF_TYPE__
-# define PTR_INT_TYPE __PTRDIFF_TYPE__
-#else
-# include <stddef.h>
-# define PTR_INT_TYPE ptrdiff_t
-#endif
-
-/* If B is the base of an object addressed by P, return the result of
-   aligning P to the next multiple of A + 1.  B and P must be of type
-   char *.  A + 1 must be a power of 2.  */
-
-#define __BPTR_ALIGN(B, P, A) ((B) + (((P) - (B) + (A)) & ~(A)))
-
-/* Similiar to _BPTR_ALIGN (B, P, A), except optimize the common case
-   where pointers can be converted to integers, aligned as integers,
-   and converted back again.  If PTR_INT_TYPE is narrower than a
-   pointer (e.g., the AS/400), play it safe and compute the alignment
-   relative to B.  Otherwise, use the faster strategy of computing the
-   alignment relative to 0.  */
-
-#define __PTR_ALIGN(B, P, A)                                               \
-  __BPTR_ALIGN (sizeof (PTR_INT_TYPE) < sizeof (void *) ? (B) : (char *) 0, \
-               P, A)
-
-#include <string.h>
-
-struct _obstack_chunk          /* Lives at front of each chunk. */
-{
-  char  *limit;                        /* 1 past end of this chunk */
-  struct _obstack_chunk *prev; /* address of prior chunk or NULL */
-  char contents[4];            /* objects begin here */
-};
-
-struct obstack         /* control current object in current chunk */
-{
-  long chunk_size;             /* preferred size to allocate chunks in */
-  struct _obstack_chunk *chunk;        /* address of current struct obstack_chunk */
-  char *object_base;           /* address of object we are building */
-  char *next_free;             /* where to add next char to current object */
-  char *chunk_limit;           /* address of char after current chunk */
-  union
-  {
-    PTR_INT_TYPE tempint;
-    void *tempptr;
-  } temp;                      /* Temporary for some macros.  */
-  int   alignment_mask;                /* Mask of alignment for each object. */
-  /* These prototypes vary based on `use_extra_arg', and we use
-     casts to the prototypeless function type in all assignments,
-     but having prototypes here quiets -Wstrict-prototypes.  */
-  struct _obstack_chunk *(*chunkfun) (void *, long);
-  void (*freefun) (void *, struct _obstack_chunk *);
-  void *extra_arg;             /* first arg for chunk alloc/dealloc funcs */
-  unsigned use_extra_arg:1;    /* chunk alloc/dealloc funcs take extra arg */
-  unsigned maybe_empty_object:1;/* There is a possibility that the current
-                                  chunk contains a zero-length object.  This
-                                  prevents freeing the chunk if we allocate
-                                  a bigger chunk to replace it. */
-  unsigned alloc_failed:1;     /* No longer used, as we now call the failed
-                                  handler on error, but retained for binary
-                                  compatibility.  */
-};
-
-/* Declare the external functions we use; they are in obstack.c.  */
-
-extern void _obstack_newchunk (struct obstack *, int);
-extern int _obstack_begin (struct obstack *, int, int,
-                           void *(*) (long), void (*) (void *));
-extern int _obstack_begin_1 (struct obstack *, int, int,
-                            void *(*) (void *, long),
-                            void (*) (void *, void *), void *);
-extern int _obstack_memory_used (struct obstack *);
-
-/* The default name of the function for freeing a chunk is 'obstack_free',
-   but gnulib users can override this by defining '__obstack_free'.  */
-#ifndef __obstack_free
-# define __obstack_free obstack_free
-#endif
-extern void __obstack_free (struct obstack *obstack, void *block);
-
-\f
-/* Error handler called when `obstack_chunk_alloc' failed to allocate
-   more memory.  This can be set to a user defined function which
-   should either abort gracefully or use longjump - but shouldn't
-   return.  The default action is to print a message and abort.  */
-extern void (*obstack_alloc_failed_handler) (void);
-
-/* Exit value used when `print_and_abort' is used.  */
-extern int obstack_exit_failure;
-\f
-/* Pointer to beginning of object being allocated or to be allocated next.
-   Note that this might not be the final address of the object
-   because a new chunk might be needed to hold the final size.  */
-
-#define obstack_base(h) ((void *) (h)->object_base)
-
-/* Size for allocating ordinary chunks.  */
-
-#define obstack_chunk_size(h) ((h)->chunk_size)
-
-/* Pointer to next byte not yet allocated in current chunk.  */
-
-#define obstack_next_free(h)   ((h)->next_free)
-
-/* Mask specifying low bits that should be clear in address of an object.  */
-
-#define obstack_alignment_mask(h) ((h)->alignment_mask)
-
-/* To prevent prototype warnings provide complete argument list.  */
-#define obstack_init(h)                                                \
-  _obstack_begin ((h), 0, 0,                                   \
-                 (void *(*) (long)) obstack_chunk_alloc,       \
-                 (void (*) (void *)) obstack_chunk_free)
-
-#define obstack_begin(h, size)                                 \
-  _obstack_begin ((h), (size), 0,                              \
-                 (void *(*) (long)) obstack_chunk_alloc,       \
-                 (void (*) (void *)) obstack_chunk_free)
-
-#define obstack_specify_allocation(h, size, alignment, chunkfun, freefun)  \
-  _obstack_begin ((h), (size), (alignment),                               \
-                 (void *(*) (long)) (chunkfun),                           \
-                 (void (*) (void *)) (freefun))
-
-#define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
-  _obstack_begin_1 ((h), (size), (alignment),                          \
-                   (void *(*) (void *, long)) (chunkfun),              \
-                   (void (*) (void *, void *)) (freefun), (arg))
-
-#define obstack_chunkfun(h, newchunkfun) \
-  ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun))
-
-#define obstack_freefun(h, newfreefun) \
-  ((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun))
-
-#define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = (achar))
-
-#define obstack_blank_fast(h,n) ((h)->next_free += (n))
-
-#define obstack_memory_used(h) _obstack_memory_used (h)
-\f
-#if defined __GNUC__ && defined __STDC__ && __STDC__
-/* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and
-   does not implement __extension__.  But that compiler doesn't define
-   __GNUC_MINOR__.  */
-# if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__)
-#  define __extension__
-# endif
-
-/* For GNU C, if not -traditional,
-   we can define these macros to compute all args only once
-   without using a global variable.
-   Also, we can avoid using the `temp' slot, to make faster code.  */
-
-# define obstack_object_size(OBSTACK)                                  \
-  __extension__                                                                \
-  ({ struct obstack const *__o = (OBSTACK);                            \
-     (unsigned) (__o->next_free - __o->object_base); })
-
-# define obstack_room(OBSTACK)                                         \
-  __extension__                                                                \
-  ({ struct obstack const *__o = (OBSTACK);                            \
-     (unsigned) (__o->chunk_limit - __o->next_free); })
-
-# define obstack_make_room(OBSTACK,length)                             \
-__extension__                                                          \
-({ struct obstack *__o = (OBSTACK);                                    \
-   int __len = (length);                                               \
-   if (__o->chunk_limit - __o->next_free < __len)                      \
-     _obstack_newchunk (__o, __len);                                   \
-   (void) 0; })
-
-# define obstack_empty_p(OBSTACK)                                      \
-  __extension__                                                                \
-  ({ struct obstack const *__o = (OBSTACK);                            \
-     (__o->chunk->prev == 0                                            \
-      && __o->next_free == __PTR_ALIGN ((char *) __o->chunk,           \
-                                       __o->chunk->contents,           \
-                                       __o->alignment_mask)); })
-
-# define obstack_grow(OBSTACK,where,length)                            \
-__extension__                                                          \
-({ struct obstack *__o = (OBSTACK);                                    \
-   int __len = (length);                                               \
-   if (__o->next_free + __len > __o->chunk_limit)                      \
-     _obstack_newchunk (__o, __len);                                   \
-   memcpy (__o->next_free, where, __len);                              \
-   __o->next_free += __len;                                            \
-   (void) 0; })
-
-# define obstack_grow0(OBSTACK,where,length)                           \
-__extension__                                                          \
-({ struct obstack *__o = (OBSTACK);                                    \
-   int __len = (length);                                               \
-   if (__o->next_free + __len + 1 > __o->chunk_limit)                  \
-     _obstack_newchunk (__o, __len + 1);                               \
-   memcpy (__o->next_free, where, __len);                              \
-   __o->next_free += __len;                                            \
-   *(__o->next_free)++ = 0;                                            \
-   (void) 0; })
-
-# define obstack_1grow(OBSTACK,datum)                                  \
-__extension__                                                          \
-({ struct obstack *__o = (OBSTACK);                                    \
-   if (__o->next_free + 1 > __o->chunk_limit)                          \
-     _obstack_newchunk (__o, 1);                                       \
-   obstack_1grow_fast (__o, datum);                                    \
-   (void) 0; })
-
-/* These assume that the obstack alignment is good enough for pointers
-   or ints, and that the data added so far to the current object
-   shares that much alignment.  */
-
-# define obstack_ptr_grow(OBSTACK,datum)                               \
-__extension__                                                          \
-({ struct obstack *__o = (OBSTACK);                                    \
-   if (__o->next_free + sizeof (void *) > __o->chunk_limit)            \
-     _obstack_newchunk (__o, sizeof (void *));                         \
-   obstack_ptr_grow_fast (__o, datum); })                              \
-
-# define obstack_int_grow(OBSTACK,datum)                               \
-__extension__                                                          \
-({ struct obstack *__o = (OBSTACK);                                    \
-   if (__o->next_free + sizeof (int) > __o->chunk_limit)               \
-     _obstack_newchunk (__o, sizeof (int));                            \
-   obstack_int_grow_fast (__o, datum); })
-
-# define obstack_ptr_grow_fast(OBSTACK,aptr)                           \
-__extension__                                                          \
-({ struct obstack *__o1 = (OBSTACK);                                   \
-   *(const void **) __o1->next_free = (aptr);                          \
-   __o1->next_free += sizeof (const void *);                           \
-   (void) 0; })
-
-# define obstack_int_grow_fast(OBSTACK,aint)                           \
-__extension__                                                          \
-({ struct obstack *__o1 = (OBSTACK);                                   \
-   *(int *) __o1->next_free = (aint);                                  \
-   __o1->next_free += sizeof (int);                                    \
-   (void) 0; })
-
-# define obstack_blank(OBSTACK,length)                                 \
-__extension__                                                          \
-({ struct obstack *__o = (OBSTACK);                                    \
-   int __len = (length);                                               \
-   if (__o->chunk_limit - __o->next_free < __len)                      \
-     _obstack_newchunk (__o, __len);                                   \
-   obstack_blank_fast (__o, __len);                                    \
-   (void) 0; })
-
-# define obstack_alloc(OBSTACK,length)                                 \
-__extension__                                                          \
-({ struct obstack *__h = (OBSTACK);                                    \
-   obstack_blank (__h, (length));                                      \
-   obstack_finish (__h); })
-
-# define obstack_copy(OBSTACK,where,length)                            \
-__extension__                                                          \
-({ struct obstack *__h = (OBSTACK);                                    \
-   obstack_grow (__h, (where), (length));                              \
-   obstack_finish (__h); })
-
-# define obstack_copy0(OBSTACK,where,length)                           \
-__extension__                                                          \
-({ struct obstack *__h = (OBSTACK);                                    \
-   obstack_grow0 (__h, (where), (length));                             \
-   obstack_finish (__h); })
-
-/* The local variable is named __o1 to avoid a name conflict
-   when obstack_blank is called.  */
-# define obstack_finish(OBSTACK)                                       \
-__extension__                                                          \
-({ struct obstack *__o1 = (OBSTACK);                                   \
-   void *__value = (void *) __o1->object_base;                         \
-   if (__o1->next_free == __value)                                     \
-     __o1->maybe_empty_object = 1;                                     \
-   __o1->next_free                                                     \
-     = __PTR_ALIGN (__o1->object_base, __o1->next_free,                        \
-                   __o1->alignment_mask);                              \
-   if (__o1->next_free - (char *)__o1->chunk                           \
-       > __o1->chunk_limit - (char *)__o1->chunk)                      \
-     __o1->next_free = __o1->chunk_limit;                              \
-   __o1->object_base = __o1->next_free;                                        \
-   __value; })
-
-# define obstack_free(OBSTACK, OBJ)                                    \
-__extension__                                                          \
-({ struct obstack *__o = (OBSTACK);                                    \
-   void *__obj = (OBJ);                                                        \
-   if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit)  \
-     __o->next_free = __o->object_base = (char *)__obj;                        \
-   else (__obstack_free) (__o, __obj); })
-\f
-#else /* not __GNUC__ or not __STDC__ */
-
-# define obstack_object_size(h) \
- (unsigned) ((h)->next_free - (h)->object_base)
-
-# define obstack_room(h)               \
- (unsigned) ((h)->chunk_limit - (h)->next_free)
-
-# define obstack_empty_p(h) \
- ((h)->chunk->prev == 0                                                        \
-  && (h)->next_free == __PTR_ALIGN ((char *) (h)->chunk,               \
-                                   (h)->chunk->contents,               \
-                                   (h)->alignment_mask))
-
-/* Note that the call to _obstack_newchunk is enclosed in (..., 0)
-   so that we can avoid having void expressions
-   in the arms of the conditional expression.
-   Casting the third operand to void was tried before,
-   but some compilers won't accept it.  */
-
-# define obstack_make_room(h,length)                                   \
-( (h)->temp.tempint = (length),                                                \
-  (((h)->next_free + (h)->temp.tempint > (h)->chunk_limit)             \
-   ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0))
-
-# define obstack_grow(h,where,length)                                  \
-( (h)->temp.tempint = (length),                                                \
-  (((h)->next_free + (h)->temp.tempint > (h)->chunk_limit)             \
-   ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0),             \
-  memcpy ((h)->next_free, where, (h)->temp.tempint),                   \
-  (h)->next_free += (h)->temp.tempint)
-
-# define obstack_grow0(h,where,length)                                 \
-( (h)->temp.tempint = (length),                                                \
-  (((h)->next_free + (h)->temp.tempint + 1 > (h)->chunk_limit)         \
-   ? (_obstack_newchunk ((h), (h)->temp.tempint + 1), 0) : 0),         \
-  memcpy ((h)->next_free, where, (h)->temp.tempint),                   \
-  (h)->next_free += (h)->temp.tempint,                                 \
-  *((h)->next_free)++ = 0)
-
-# define obstack_1grow(h,datum)                                                \
-( (((h)->next_free + 1 > (h)->chunk_limit)                             \
-   ? (_obstack_newchunk ((h), 1), 0) : 0),                             \
-  obstack_1grow_fast (h, datum))
-
-# define obstack_ptr_grow(h,datum)                                     \
-( (((h)->next_free + sizeof (char *) > (h)->chunk_limit)               \
-   ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0),               \
-  obstack_ptr_grow_fast (h, datum))
-
-# define obstack_int_grow(h,datum)                                     \
-( (((h)->next_free + sizeof (int) > (h)->chunk_limit)                  \
-   ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0),                  \
-  obstack_int_grow_fast (h, datum))
-
-# define obstack_ptr_grow_fast(h,aptr)                                 \
-  (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr))
-
-# define obstack_int_grow_fast(h,aint)                                 \
-  (((int *) ((h)->next_free += sizeof (int)))[-1] = (aint))
-
-# define obstack_blank(h,length)                                       \
-( (h)->temp.tempint = (length),                                                \
-  (((h)->chunk_limit - (h)->next_free < (h)->temp.tempint)             \
-   ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0),             \
-  obstack_blank_fast (h, (h)->temp.tempint))
-
-# define obstack_alloc(h,length)                                       \
- (obstack_blank ((h), (length)), obstack_finish ((h)))
-
-# define obstack_copy(h,where,length)                                  \
- (obstack_grow ((h), (where), (length)), obstack_finish ((h)))
-
-# define obstack_copy0(h,where,length)                                 \
- (obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))
-
-# define obstack_finish(h)                                             \
-( ((h)->next_free == (h)->object_base                                  \
-   ? (((h)->maybe_empty_object = 1), 0)                                        \
-   : 0),                                                               \
-  (h)->temp.tempptr = (h)->object_base,                                        \
-  (h)->next_free                                                       \
-    = __PTR_ALIGN ((h)->object_base, (h)->next_free,                   \
-                  (h)->alignment_mask),                                \
-  (((h)->next_free - (char *) (h)->chunk                               \
-    > (h)->chunk_limit - (char *) (h)->chunk)                          \
-   ? ((h)->next_free = (h)->chunk_limit) : 0),                         \
-  (h)->object_base = (h)->next_free,                                   \
-  (h)->temp.tempptr)
-
-# define obstack_free(h,obj)                                           \
-( (h)->temp.tempint = (char *) (obj) - (char *) (h)->chunk,            \
-  ((((h)->temp.tempint > 0                                             \
-    && (h)->temp.tempint < (h)->chunk_limit - (char *) (h)->chunk))    \
-   ? (int) ((h)->next_free = (h)->object_base                          \
-           = (h)->temp.tempint + (char *) (h)->chunk)                  \
-   : (((__obstack_free) ((h), (h)->temp.tempint + (char *) (h)->chunk), 0), 0)))
-
-#endif /* not __GNUC__ or not __STDC__ */
-
-#ifdef __cplusplus
-}      /* C++ */
-#endif
-
-#endif /* obstack.h */
diff --git a/lib/offtostr.c b/lib/offtostr.c
deleted file mode 100644 (file)
index 45196e2..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#define inttostr offtostr
-#define inttype off_t
-#include "inttostr.c"
diff --git a/lib/open-safer.c b/lib/open-safer.c
deleted file mode 100644 (file)
index 15bf6a6..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Invoke open, but avoid some glitches.
-
-   Copyright (C) 2005, 2006, 2008 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.  */
-
-#include <config.h>
-
-#include "fcntl-safer.h"
-
-#include <fcntl.h>
-#include <stdarg.h>
-#include "unistd-safer.h"
-
-int
-open_safer (char const *file, int flags, ...)
-{
-  mode_t mode = 0;
-
-  if (flags & O_CREAT)
-    {
-      va_list ap;
-      va_start (ap, flags);
-
-      /* Assume mode_t promotes to int if and only if it is smaller.
-        This assumption isn't guaranteed by the C standard, but we
-        don't know of any real-world counterexamples.  */
-      if (sizeof (mode_t) < sizeof (int))
-       mode = va_arg (ap, int);
-      else
-       mode = va_arg (ap, mode_t);
-
-      va_end (ap);
-    }
-
-  return fd_safer (open (file, flags, mode));
-}
diff --git a/lib/open.c b/lib/open.c
deleted file mode 100644 (file)
index 13af274..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/* Open a descriptor to a file.
-   Copyright (C) 2007-2008 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>, 2007.  */
-
-#include <config.h>
-
-/* Get the original definition of open.  It might be defined as a macro.  */
-#define __need_system_fcntl_h
-#include <fcntl.h>
-#undef __need_system_fcntl_h
-#include <sys/types.h>
-
-static inline int
-orig_open (const char *filename, int flags, mode_t mode)
-{
-  return open (filename, flags, mode);
-}
-
-/* Specification.  */
-#include <fcntl.h>
-
-#include <errno.h>
-#include <stdarg.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-int
-open (const char *filename, int flags, ...)
-{
-  mode_t mode;
-  int fd;
-
-  mode = 0;
-  if (flags & O_CREAT)
-    {
-      va_list arg;
-      va_start (arg, flags);
-
-      /* If mode_t is narrower than int, use the promoted type (int),
-        not mode_t.  Use sizeof to guess whether mode_t is narrower;
-        we don't know of any practical counterexamples.  */
-      mode = (sizeof (mode_t) < sizeof (int)
-             ? va_arg (arg, int)
-             : va_arg (arg, mode_t));
-
-      va_end (arg);
-    }
-
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-  if (strcmp (filename, "/dev/null") == 0)
-    filename = "NUL";
-#endif
-
-#if OPEN_TRAILING_SLASH_BUG
-  /* If the filename ends in a slash and one of O_CREAT, O_WRONLY, O_RDWR
-     is specified, then fail.
-     Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html>
-     says that
-       "A pathname that contains at least one non-slash character and that
-        ends with one or more trailing slashes shall be resolved as if a
-        single dot character ( '.' ) were appended to the pathname."
-     and
-       "The special filename dot shall refer to the directory specified by
-        its predecessor."
-     If the named file already exists as a directory, then
-       - if O_CREAT is specified, open() must fail because of the semantics
-         of O_CREAT,
-       - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX
-         <http://www.opengroup.org/susv3/functions/open.html> says that it
-         fails with errno = EISDIR in this case.
-     If the named file does not exist or does not name a directory, then
-       - if O_CREAT is specified, open() must fail since open() cannot create
-         directories,
-       - if O_WRONLY or O_RDWR is specified, open() must fail because the
-         file does not contain a '.' directory.  */
-  if (flags & (O_CREAT | O_WRONLY | O_RDWR))
-    {
-      size_t len = strlen (filename);
-      if (len > 0 && filename[len - 1] == '/')
-       {
-         errno = EISDIR;
-         return -1;
-       }
-    }
-#endif
-
-  fd = orig_open (filename, flags, mode);
-
-#if OPEN_TRAILING_SLASH_BUG
-  /* If the filename ends in a slash and fd does not refer to a directory,
-     then fail.
-     Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html>
-     says that
-       "A pathname that contains at least one non-slash character and that
-        ends with one or more trailing slashes shall be resolved as if a
-        single dot character ( '.' ) were appended to the pathname."
-     and
-       "The special filename dot shall refer to the directory specified by
-        its predecessor."
-     If the named file without the slash is not a directory, open() must fail
-     with ENOTDIR.  */
-  if (fd >= 0)
-    {
-      size_t len = strlen (filename);
-      if (len > 0 && filename[len - 1] == '/')
-       {
-         struct stat statbuf;
-
-         if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode))
-           {
-             close (fd);
-             errno = ENOTDIR;
-             return -1;
-           }
-       }
-    }
-#endif
-
-#ifdef FCHDIR_REPLACEMENT
-  if (fd >= 0)
-    _gl_register_fd (fd, filename);
-#endif
-
-  return fd;
-}
diff --git a/lib/openat-die.c b/lib/openat-die.c
deleted file mode 100644 (file)
index 81498ae..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Report a save- or restore-cwd failure in our openat replacement and then exit.
-
-   Copyright (C) 2005, 2006, 2008 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>
-
-#include "openat.h"
-
-#include <stdlib.h>
-
-#include "error.h"
-#include "exitfail.h"
-
-#include "gettext.h"
-#define _(msgid) gettext (msgid)
-#define N_(msgid) msgid
-
-void
-openat_save_fail (int errnum)
-{
-  error (exit_failure, errnum,
-        _("unable to record current working directory"));
-
-  /* The `noreturn' attribute cannot be applied to error, since it returns
-     when its first argument is 0.  To help compilers understand that this
-     function does not return, call abort.  Also, the abort is a
-     safety feature if exit_failure is 0 (which shouldn't happen).  */
-  abort ();
-}
-
-void
-openat_restore_fail (int errnum)
-{
-  error (exit_failure, errnum,
-        _("failed to return to initial working directory"));
-
-  /* As above.  */
-  abort ();
-}
diff --git a/lib/openat-priv.h b/lib/openat-priv.h
deleted file mode 100644 (file)
index 9254f6b..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Internals for openat-like functions.
-
-   Copyright (C) 2005, 2006 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 */
-
-#include <errno.h>
-#include <stdlib.h>
-
-#define OPENAT_BUFFER_SIZE 512
-char *openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file);
-
-/* Some systems don't have ENOSYS.  */
-#ifndef ENOSYS
-# ifdef ENOTSUP
-#  define ENOSYS ENOTSUP
-# else
-/* Some systems don't have ENOTSUP either.  */
-#  define ENOSYS EINVAL
-# endif
-#endif
-
-/* Some systems don't have EOPNOTSUPP.  */
-#ifndef EOPNOTSUPP
-# ifdef ENOTSUP
-#  define EOPNOTSUPP ENOTSUP
-# else
-/* Some systems don't have ENOTSUP either.  */
-#  define EOPNOTSUPP EINVAL
-# endif
-#endif
-
-/* Trying to access a BUILD_PROC_NAME file will fail on systems without
-   /proc support, and even on systems *with* ProcFS support.  Return
-   nonzero if the failure may be legitimate, e.g., because /proc is not
-   readable, or the particular .../fd/N directory is not present.  */
-#define EXPECTED_ERRNO(Errno)                  \
-  ((Errno) == ENOTDIR || (Errno) == ENOENT     \
-   || (Errno) == EPERM || (Errno) == EACCES    \
-   || (Errno) == ENOSYS /* Solaris 8 */                \
-   || (Errno) == EOPNOTSUPP /* FreeBSD */)
diff --git a/lib/openat-proc.c b/lib/openat-proc.c
deleted file mode 100644 (file)
index e84dc45..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/* Create /proc/self/fd-related names for subfiles of open directories.
-
-   Copyright (C) 2006 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.  */
-
-#include <config.h>
-
-#include "openat-priv.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include <stdio.h>
-#include <string.h>
-
-#include "dirname.h"
-#include "intprops.h"
-#include "same-inode.h"
-#include "xalloc.h"
-
-/* The results of open() in this file are not used with fchdir,
-   therefore save some unnecessary work in fchdir.c.  */
-#undef open
-#undef close
-
-#define PROC_SELF_FD_FORMAT "/proc/self/fd/%d/%s"
-
-#define PROC_SELF_FD_NAME_SIZE_BOUND(len) \
-  (sizeof PROC_SELF_FD_FORMAT - sizeof "%d%s" \
-   + INT_STRLEN_BOUND (int) + (len) + 1)
-
-
-/* Set BUF to the expansion of PROC_SELF_FD_FORMAT, using FD and FILE
-   respectively for %d and %s.  If successful, return BUF if the
-   result fits in BUF, dynamically allocated memory otherwise.  But
-   return NULL if /proc is not reliable.  */
-char *
-openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file)
-{
-  static int proc_status = 0;
-
-  if (! proc_status)
-    {
-      /* Set PROC_STATUS to a positive value if /proc/self/fd is
-        reliable, and a negative value otherwise.  Solaris 10
-        /proc/self/fd mishandles "..", and any file name might expand
-        to ".." after symbolic link expansion, so avoid /proc/self/fd
-        if it mishandles "..".  Solaris 10 has openat, but this
-        problem is exhibited on code that built on Solaris 8 and
-        running on Solaris 10.  */
-
-      int proc_self_fd = open ("/proc/self/fd", O_RDONLY);
-      if (proc_self_fd < 0)
-       proc_status = -1;
-      else
-       {
-         struct stat proc_self_fd_dotdot_st;
-         struct stat proc_self_st;
-         char dotdot_buf[PROC_SELF_FD_NAME_SIZE_BOUND (sizeof ".." - 1)];
-         sprintf (dotdot_buf, PROC_SELF_FD_FORMAT, proc_self_fd, "..");
-         proc_status =
-           ((stat (dotdot_buf, &proc_self_fd_dotdot_st) == 0
-             && stat ("/proc/self", &proc_self_st) == 0
-             && SAME_INODE (proc_self_fd_dotdot_st, proc_self_st))
-            ? 1 : -1);
-         close (proc_self_fd);
-       }
-    }
-
-  if (proc_status < 0)
-    return NULL;
-  else
-    {
-      size_t bufsize = PROC_SELF_FD_NAME_SIZE_BOUND (strlen (file));
-      char *result = (bufsize < OPENAT_BUFFER_SIZE ? buf : xmalloc (bufsize));
-      sprintf (result, PROC_SELF_FD_FORMAT, fd, file);
-      return result;
-    }
-}
diff --git a/lib/openat.c b/lib/openat.c
deleted file mode 100644 (file)
index 0c32672..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-/* provide a replacement openat function
-   Copyright (C) 2004, 2005, 2006, 2007, 2008 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 */
-
-#include <config.h>
-
-#include "openat.h"
-
-#include <stdarg.h>
-#include <stddef.h>
-#include <sys/stat.h>
-
-#include "dirname.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */
-#include "fcntl--.h"
-#include "openat-priv.h"
-#include "save-cwd.h"
-
-/* Replacement for Solaris' openat function.
-   <http://www.google.com/search?q=openat+site:docs.sun.com>
-   First, try to simulate it via open ("/proc/self/fd/FD/FILE").
-   Failing that, simulate it by doing save_cwd/fchdir/open/restore_cwd.
-   If either the save_cwd or the restore_cwd fails (relatively unlikely),
-   then give a diagnostic and exit nonzero.
-   Otherwise, upon failure, set errno and return -1, as openat does.
-   Upon successful completion, return a file descriptor.  */
-int
-openat (int fd, char const *file, int flags, ...)
-{
-  mode_t mode = 0;
-
-  if (flags & O_CREAT)
-    {
-      va_list arg;
-      va_start (arg, flags);
-
-      /* If mode_t is narrower than int, use the promoted type (int),
-         not mode_t.  Use sizeof to guess whether mode_t is narrower;
-         we don't know of any practical counterexamples.  */
-      mode = (sizeof (mode_t) < sizeof (int)
-             ? va_arg (arg, int)
-             : va_arg (arg, mode_t));
-
-      va_end (arg);
-    }
-
-  return openat_permissive (fd, file, flags, mode, NULL);
-}
-
-/* Like openat (FD, FILE, FLAGS, MODE), but if CWD_ERRNO is
-   nonnull, set *CWD_ERRNO to an errno value if unable to save
-   or restore the initial working directory.  This is needed only
-   the first time remove.c's remove_dir opens a command-line
-   directory argument.
-
-   If a previous attempt to restore the current working directory
-   failed, then we must not even try to access a `.'-relative name.
-   It is the caller's responsibility not to call this function
-   in that case.  */
-
-int
-openat_permissive (int fd, char const *file, int flags, mode_t mode,
-                  int *cwd_errno)
-{
-  struct saved_cwd saved_cwd;
-  int saved_errno;
-  int err;
-  bool save_ok;
-
-  if (fd == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file))
-    return open (file, flags, mode);
-
-  {
-    char buf[OPENAT_BUFFER_SIZE];
-    char *proc_file = openat_proc_name (buf, fd, file);
-    if (proc_file)
-      {
-       int open_result = open (proc_file, flags, mode);
-       int open_errno = errno;
-       if (proc_file != buf)
-         free (proc_file);
-       /* If the syscall succeeds, or if it fails with an unexpected
-          errno value, then return right away.  Otherwise, fall through
-          and resort to using save_cwd/restore_cwd.  */
-       if (0 <= open_result || ! EXPECTED_ERRNO (open_errno))
-         {
-           errno = open_errno;
-           return open_result;
-         }
-      }
-  }
-
-  save_ok = (save_cwd (&saved_cwd) == 0);
-  if (! save_ok)
-    {
-      if (! cwd_errno)
-       openat_save_fail (errno);
-      *cwd_errno = errno;
-    }
-
-  err = fchdir (fd);
-  saved_errno = errno;
-
-  if (! err)
-    {
-      err = open (file, flags, mode);
-      saved_errno = errno;
-      if (save_ok && restore_cwd (&saved_cwd) != 0)
-       {
-         if (! cwd_errno)
-           openat_restore_fail (errno);
-         *cwd_errno = errno;
-       }
-    }
-
-  free_cwd (&saved_cwd);
-  errno = saved_errno;
-  return err;
-}
-
-/* Return true if our openat implementation must resort to
-   using save_cwd and restore_cwd.  */
-bool
-openat_needs_fchdir (void)
-{
-  bool needs_fchdir = true;
-  int fd = open ("/", O_RDONLY);
-
-  if (0 <= fd)
-    {
-      char buf[OPENAT_BUFFER_SIZE];
-      char *proc_file = openat_proc_name (buf, fd, ".");
-      if (proc_file)
-       {
-         needs_fchdir = false;
-         if (proc_file != buf)
-           free (proc_file);
-       }
-      close (fd);
-    }
-
-  return needs_fchdir;
-}
-
-#if !HAVE_FDOPENDIR
-
-/* Replacement for Solaris' function by the same name.
-   <http://www.google.com/search?q=fdopendir+site:docs.sun.com>
-   First, try to simulate it via opendir ("/proc/self/fd/FD").  Failing
-   that, simulate it by doing save_cwd/fchdir/opendir(".")/restore_cwd.
-   If either the save_cwd or the restore_cwd fails (relatively unlikely),
-   then give a diagnostic and exit nonzero.
-   Otherwise, this function works just like Solaris' fdopendir.
-
-   W A R N I N G:
-   Unlike the other fd-related functions here, this one
-   effectively consumes its FD parameter.  The caller should not
-   close or otherwise manipulate FD if this function returns successfully.  */
-DIR *
-fdopendir (int fd)
-{
-  struct saved_cwd saved_cwd;
-  int saved_errno;
-  DIR *dir;
-
-  char buf[OPENAT_BUFFER_SIZE];
-  char *proc_file = openat_proc_name (buf, fd, ".");
-  if (proc_file)
-    {
-      dir = opendir (proc_file);
-      saved_errno = errno;
-    }
-  else
-    {
-      dir = NULL;
-      saved_errno = EOPNOTSUPP;
-    }
-
-  /* If the syscall fails with an expected errno value, resort to
-     save_cwd/restore_cwd.  */
-  if (! dir && EXPECTED_ERRNO (saved_errno))
-    {
-      if (save_cwd (&saved_cwd) != 0)
-       openat_save_fail (errno);
-
-      if (fchdir (fd) != 0)
-       {
-         dir = NULL;
-         saved_errno = errno;
-       }
-      else
-       {
-         dir = opendir (".");
-         saved_errno = errno;
-
-         if (restore_cwd (&saved_cwd) != 0)
-           openat_restore_fail (errno);
-       }
-
-      free_cwd (&saved_cwd);
-    }
-
-  if (dir)
-    close (fd);
-  if (proc_file != buf)
-    free (proc_file);
-  errno = saved_errno;
-  return dir;
-}
-
-#endif
-
-/* Replacement for Solaris' function by the same name.
-   <http://www.google.com/search?q=fstatat+site:docs.sun.com>
-   First, try to simulate it via l?stat ("/proc/self/fd/FD/FILE").
-   Failing that, simulate it via save_cwd/fchdir/(stat|lstat)/restore_cwd.
-   If either the save_cwd or the restore_cwd fails (relatively unlikely),
-   then give a diagnostic and exit nonzero.
-   Otherwise, this function works just like Solaris' fstatat.  */
-
-#define AT_FUNC_NAME fstatat
-#define AT_FUNC_F1 lstat
-#define AT_FUNC_F2 stat
-#define AT_FUNC_USE_F1_COND flag == AT_SYMLINK_NOFOLLOW
-#define AT_FUNC_POST_FILE_PARAM_DECLS , struct stat *st, int flag
-#define AT_FUNC_POST_FILE_ARGS        , st
-#include "at-func.c"
-#undef AT_FUNC_NAME
-#undef AT_FUNC_F1
-#undef AT_FUNC_F2
-#undef AT_FUNC_USE_F1_COND
-#undef AT_FUNC_POST_FILE_PARAM_DECLS
-#undef AT_FUNC_POST_FILE_ARGS
-
-/* Replacement for Solaris' function by the same name.
-   <http://www.google.com/search?q=unlinkat+site:docs.sun.com>
-   First, try to simulate it via (unlink|rmdir) ("/proc/self/fd/FD/FILE").
-   Failing that, simulate it via save_cwd/fchdir/(unlink|rmdir)/restore_cwd.
-   If either the save_cwd or the restore_cwd fails (relatively unlikely),
-   then give a diagnostic and exit nonzero.
-   Otherwise, this function works just like Solaris' unlinkat.  */
-
-#define AT_FUNC_NAME unlinkat
-#define AT_FUNC_F1 rmdir
-#define AT_FUNC_F2 unlink
-#define AT_FUNC_USE_F1_COND flag == AT_REMOVEDIR
-#define AT_FUNC_POST_FILE_PARAM_DECLS , int flag
-#define AT_FUNC_POST_FILE_ARGS        /* empty */
-#include "at-func.c"
-#undef AT_FUNC_NAME
-#undef AT_FUNC_F1
-#undef AT_FUNC_F2
-#undef AT_FUNC_USE_F1_COND
-#undef AT_FUNC_POST_FILE_PARAM_DECLS
-#undef AT_FUNC_POST_FILE_ARGS
diff --git a/lib/openat.h b/lib/openat.h
deleted file mode 100644 (file)
index 68c7df0..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/* provide a replacement openat function
-   Copyright (C) 2004, 2005, 2006, 2008 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 */
-
-#include <fcntl.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h>
-#include <unistd.h>
-#include <stdbool.h>
-
-#ifndef __attribute__
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
-#  define __attribute__(x) /* empty */
-# endif
-#endif
-
-#ifndef ATTRIBUTE_NORETURN
-# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
-#endif
-
-/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive.  Its
-   value exceeds INT_MAX, so its use as an int doesn't conform to the
-   C standard, and GCC and Sun C complain in some cases.  If the bug
-   is present, undef AT_FDCWD here, so it can be redefined below.  */
-#if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553
-# undef AT_FDCWD
-#endif
-
-/* Use the same bit pattern as Solaris 9, but with the proper
-   signedness.  The bit pattern is important, in case this actually is
-   Solaris with the above workaround.  */
-#ifndef AT_FDCWD
-# define AT_FDCWD (-3041965)
-#endif
-
-/* Use the same values as Solaris 9.  This shouldn't matter, but
-   there's no real reason to differ.  */
-#ifndef AT_SYMLINK_NOFOLLOW
-# define AT_SYMLINK_NOFOLLOW 4096
-# define AT_REMOVEDIR 1
-#endif
-
-#ifdef __OPENAT_PREFIX
-
-# undef openat
-# define __OPENAT_CONCAT(x, y) x ## y
-# define __OPENAT_XCONCAT(x, y) __OPENAT_CONCAT (x, y)
-# define __OPENAT_ID(y) __OPENAT_XCONCAT (__OPENAT_PREFIX, y)
-# define openat __OPENAT_ID (openat)
-int openat (int fd, char const *file, int flags, /* mode_t mode */ ...);
-int openat_permissive (int fd, char const *file, int flags, mode_t mode,
-                      int *cwd_errno);
-# if ! HAVE_FDOPENDIR
-#  define fdopendir __OPENAT_ID (fdopendir)
-# endif
-DIR *fdopendir (int fd);
-# define fstatat __OPENAT_ID (fstatat)
-int fstatat (int fd, char const *file, struct stat *st, int flag);
-# define unlinkat __OPENAT_ID (unlinkat)
-int unlinkat (int fd, char const *file, int flag);
-bool openat_needs_fchdir (void);
-
-#else
-
-# define openat_permissive(Fd, File, Flags, Mode, Cwd_errno) \
-    openat (Fd, File, Flags, Mode)
-# define openat_needs_fchdir() false
-
-#endif
-
-#if HAVE_OPENAT && ! LSTAT_FOLLOWS_SLASHED_SYMLINK
-int rpl_fstatat (int fd, char const *file, struct stat *st, int flag);
-# if !COMPILING_FSTATAT
-#  undef fstatat
-#  define fstatat rpl_fstatat
-# endif
-#endif
-
-int mkdirat (int fd, char const *file, mode_t mode);
-void openat_restore_fail (int) ATTRIBUTE_NORETURN;
-void openat_save_fail (int) ATTRIBUTE_NORETURN;
-int fchmodat (int fd, char const *file, mode_t mode, int flag);
-int fchownat (int fd, char const *file, uid_t owner, gid_t group, int flag);
-
-/* Using these function names makes application code
-   slightly more readable than it would be with
-   fchownat (..., 0) or fchownat (..., AT_SYMLINK_NOFOLLOW).  */
-static inline int
-chownat (int fd, char const *file, uid_t owner, gid_t group)
-{
-  return fchownat (fd, file, owner, group, 0);
-}
-
-static inline int
-lchownat (int fd, char const *file, uid_t owner, gid_t group)
-{
-  return fchownat (fd, file, owner, group, AT_SYMLINK_NOFOLLOW);
-}
-
-static inline int
-chmodat (int fd, char const *file, mode_t mode)
-{
-  return fchmodat (fd, file, mode, 0);
-}
-
-static inline int
-lchmodat (int fd, char const *file, mode_t mode)
-{
-  return fchmodat (fd, file, mode, AT_SYMLINK_NOFOLLOW);
-}
diff --git a/lib/pathmax.h b/lib/pathmax.h
deleted file mode 100644 (file)
index c02c65a..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Define PATH_MAX somehow.  Requires sys/types.h.
-   Copyright (C) 1992, 1999, 2001, 2003, 2005 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _PATHMAX_H
-# define _PATHMAX_H
-
-# include <unistd.h>
-
-# include <limits.h>
-
-# ifndef _POSIX_PATH_MAX
-#  define _POSIX_PATH_MAX 256
-# endif
-
-# if !defined PATH_MAX && defined _PC_PATH_MAX
-#  define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 \
-                   : pathconf ("/", _PC_PATH_MAX))
-# endif
-
-/* Don't include sys/param.h if it already has been.  */
-# if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
-#  include <sys/param.h>
-# endif
-
-# if !defined PATH_MAX && defined MAXPATHLEN
-#  define PATH_MAX MAXPATHLEN
-# endif
-
-# ifndef PATH_MAX
-#  define PATH_MAX _POSIX_PATH_MAX
-# endif
-
-#endif /* _PATHMAX_H */
diff --git a/lib/pipe-safer.c b/lib/pipe-safer.c
deleted file mode 100644 (file)
index 0fc6850..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Invoke pipe, but avoid some glitches.
-   Copyright (C) 2005, 2006 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.  */
-
-#include <config.h>
-
-#include "unistd-safer.h"
-
-#include <unistd.h>
-#include <errno.h>
-
-/* Like pipe, but ensure that neither of the file descriptors is
-   STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO.  Fail with ENOSYS on
-   platforms that lack pipe.  */
-
-int
-pipe_safer (int fd[2])
-{
-#if HAVE_PIPE
-  if (pipe (fd) == 0)
-    {
-      int i;
-      for (i = 0; i < 2; i++)
-       {
-         fd[i] = fd_safer (fd[i]);
-         if (fd[i] < 0)
-           {
-             int e = errno;
-             close (fd[1 - i]);
-             errno = e;
-             return -1;
-           }
-       }
-
-      return 0;
-    }
-#else
-  errno = ENOSYS;
-#endif
-
-  return -1;
-}
diff --git a/lib/printf-args.c b/lib/printf-args.c
deleted file mode 100644 (file)
index efe28b4..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Decomposed printf argument list.
-   Copyright (C) 1999, 2002-2003, 2005-2007 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* This file can be parametrized with the following macros:
-     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.
-     PRINTF_FETCHARGS   Name of the function to be defined.
-     STATIC             Set to 'static' to declare the function static.  */
-
-#ifndef PRINTF_FETCHARGS
-# include <config.h>
-#endif
-
-/* Specification.  */
-#ifndef PRINTF_FETCHARGS
-# include "printf-args.h"
-#endif
-
-#ifdef STATIC
-STATIC
-#endif
-int
-PRINTF_FETCHARGS (va_list args, arguments *a)
-{
-  size_t i;
-  argument *ap;
-
-  for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++)
-    switch (ap->type)
-      {
-      case TYPE_SCHAR:
-       ap->a.a_schar = va_arg (args, /*signed char*/ int);
-       break;
-      case TYPE_UCHAR:
-       ap->a.a_uchar = va_arg (args, /*unsigned char*/ int);
-       break;
-      case TYPE_SHORT:
-       ap->a.a_short = va_arg (args, /*short*/ int);
-       break;
-      case TYPE_USHORT:
-       ap->a.a_ushort = va_arg (args, /*unsigned short*/ int);
-       break;
-      case TYPE_INT:
-       ap->a.a_int = va_arg (args, int);
-       break;
-      case TYPE_UINT:
-       ap->a.a_uint = va_arg (args, unsigned int);
-       break;
-      case TYPE_LONGINT:
-       ap->a.a_longint = va_arg (args, long int);
-       break;
-      case TYPE_ULONGINT:
-       ap->a.a_ulongint = va_arg (args, unsigned long int);
-       break;
-#if HAVE_LONG_LONG_INT
-      case TYPE_LONGLONGINT:
-       ap->a.a_longlongint = va_arg (args, long long int);
-       break;
-      case TYPE_ULONGLONGINT:
-       ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
-       break;
-#endif
-      case TYPE_DOUBLE:
-       ap->a.a_double = va_arg (args, double);
-       break;
-      case TYPE_LONGDOUBLE:
-       ap->a.a_longdouble = va_arg (args, long double);
-       break;
-      case TYPE_CHAR:
-       ap->a.a_char = va_arg (args, int);
-       break;
-#if HAVE_WINT_T
-      case TYPE_WIDE_CHAR:
-       /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by
-          default argument promotions", this is not the case in mingw32,
-          where wint_t is 'unsigned short'.  */
-       ap->a.a_wide_char =
-         (sizeof (wint_t) < sizeof (int)
-          ? va_arg (args, int)
-          : va_arg (args, wint_t));
-       break;
-#endif
-      case TYPE_STRING:
-       ap->a.a_string = va_arg (args, const char *);
-       /* A null pointer is an invalid argument for "%s", but in practice
-          it occurs quite frequently in printf statements that produce
-          debug output.  Use a fallback in this case.  */
-       if (ap->a.a_string == NULL)
-         ap->a.a_string = "(NULL)";
-       break;
-#if HAVE_WCHAR_T
-      case TYPE_WIDE_STRING:
-       ap->a.a_wide_string = va_arg (args, const wchar_t *);
-       /* A null pointer is an invalid argument for "%ls", but in practice
-          it occurs quite frequently in printf statements that produce
-          debug output.  Use a fallback in this case.  */
-       if (ap->a.a_wide_string == NULL)
-         {
-           static const wchar_t wide_null_string[] =
-             {
-               (wchar_t)'(',
-               (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L',
-               (wchar_t)')',
-               (wchar_t)0
-             };
-           ap->a.a_wide_string = wide_null_string;
-         }
-       break;
-#endif
-      case TYPE_POINTER:
-       ap->a.a_pointer = va_arg (args, void *);
-       break;
-      case TYPE_COUNT_SCHAR_POINTER:
-       ap->a.a_count_schar_pointer = va_arg (args, signed char *);
-       break;
-      case TYPE_COUNT_SHORT_POINTER:
-       ap->a.a_count_short_pointer = va_arg (args, short *);
-       break;
-      case TYPE_COUNT_INT_POINTER:
-       ap->a.a_count_int_pointer = va_arg (args, int *);
-       break;
-      case TYPE_COUNT_LONGINT_POINTER:
-       ap->a.a_count_longint_pointer = va_arg (args, long int *);
-       break;
-#if HAVE_LONG_LONG_INT
-      case TYPE_COUNT_LONGLONGINT_POINTER:
-       ap->a.a_count_longlongint_pointer = va_arg (args, long long int *);
-       break;
-#endif
-#if ENABLE_UNISTDIO
-      /* The unistdio extensions.  */
-      case TYPE_U8_STRING:
-       ap->a.a_u8_string = va_arg (args, const uint8_t *);
-       /* A null pointer is an invalid argument for "%U", but in practice
-          it occurs quite frequently in printf statements that produce
-          debug output.  Use a fallback in this case.  */
-       if (ap->a.a_u8_string == NULL)
-         {
-           static const uint8_t u8_null_string[] =
-             { '(', 'N', 'U', 'L', 'L', ')', 0 };
-           ap->a.a_u8_string = u8_null_string;
-         }
-       break;
-      case TYPE_U16_STRING:
-       ap->a.a_u16_string = va_arg (args, const uint16_t *);
-       /* A null pointer is an invalid argument for "%lU", but in practice
-          it occurs quite frequently in printf statements that produce
-          debug output.  Use a fallback in this case.  */
-       if (ap->a.a_u16_string == NULL)
-         {
-           static const uint16_t u16_null_string[] =
-             { '(', 'N', 'U', 'L', 'L', ')', 0 };
-           ap->a.a_u16_string = u16_null_string;
-         }
-       break;
-      case TYPE_U32_STRING:
-       ap->a.a_u32_string = va_arg (args, const uint32_t *);
-       /* A null pointer is an invalid argument for "%llU", but in practice
-          it occurs quite frequently in printf statements that produce
-          debug output.  Use a fallback in this case.  */
-       if (ap->a.a_u32_string == NULL)
-         {
-           static const uint32_t u32_null_string[] =
-             { '(', 'N', 'U', 'L', 'L', ')', 0 };
-           ap->a.a_u32_string = u32_null_string;
-         }
-       break;
-#endif
-      default:
-       /* Unknown type.  */
-       return -1;
-      }
-  return 0;
-}
diff --git a/lib/printf-args.h b/lib/printf-args.h
deleted file mode 100644 (file)
index 0c1e48c..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Decomposed printf argument list.
-   Copyright (C) 1999, 2002-2003, 2006-2007 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _PRINTF_ARGS_H
-#define _PRINTF_ARGS_H
-
-/* This file can be parametrized with the following macros:
-     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.
-     PRINTF_FETCHARGS   Name of the function to be declared.
-     STATIC             Set to 'static' to declare the function static.  */
-
-/* Default parameters.  */
-#ifndef PRINTF_FETCHARGS
-# define PRINTF_FETCHARGS printf_fetchargs
-#endif
-
-/* Get size_t.  */
-#include <stddef.h>
-
-/* Get wchar_t.  */
-#if HAVE_WCHAR_T
-# include <stddef.h>
-#endif
-
-/* Get wint_t.  */
-#if HAVE_WINT_T
-# include <wchar.h>
-#endif
-
-/* Get va_list.  */
-#include <stdarg.h>
-
-
-/* Argument types */
-typedef enum
-{
-  TYPE_NONE,
-  TYPE_SCHAR,
-  TYPE_UCHAR,
-  TYPE_SHORT,
-  TYPE_USHORT,
-  TYPE_INT,
-  TYPE_UINT,
-  TYPE_LONGINT,
-  TYPE_ULONGINT,
-#if HAVE_LONG_LONG_INT
-  TYPE_LONGLONGINT,
-  TYPE_ULONGLONGINT,
-#endif
-  TYPE_DOUBLE,
-  TYPE_LONGDOUBLE,
-  TYPE_CHAR,
-#if HAVE_WINT_T
-  TYPE_WIDE_CHAR,
-#endif
-  TYPE_STRING,
-#if HAVE_WCHAR_T
-  TYPE_WIDE_STRING,
-#endif
-  TYPE_POINTER,
-  TYPE_COUNT_SCHAR_POINTER,
-  TYPE_COUNT_SHORT_POINTER,
-  TYPE_COUNT_INT_POINTER,
-  TYPE_COUNT_LONGINT_POINTER
-#if HAVE_LONG_LONG_INT
-, TYPE_COUNT_LONGLONGINT_POINTER
-#endif
-#if ENABLE_UNISTDIO
-  /* The unistdio extensions.  */
-, TYPE_U8_STRING
-, TYPE_U16_STRING
-, TYPE_U32_STRING
-#endif
-} arg_type;
-
-/* Polymorphic argument */
-typedef struct
-{
-  arg_type type;
-  union
-  {
-    signed char                        a_schar;
-    unsigned char              a_uchar;
-    short                      a_short;
-    unsigned short             a_ushort;
-    int                                a_int;
-    unsigned int               a_uint;
-    long int                   a_longint;
-    unsigned long int          a_ulongint;
-#if HAVE_LONG_LONG_INT
-    long long int              a_longlongint;
-    unsigned long long int     a_ulonglongint;
-#endif
-    float                      a_float;
-    double                     a_double;
-    long double                        a_longdouble;
-    int                                a_char;
-#if HAVE_WINT_T
-    wint_t                     a_wide_char;
-#endif
-    const char*                        a_string;
-#if HAVE_WCHAR_T
-    const wchar_t*             a_wide_string;
-#endif
-    void*                      a_pointer;
-    signed char *              a_count_schar_pointer;
-    short *                    a_count_short_pointer;
-    int *                      a_count_int_pointer;
-    long int *                 a_count_longint_pointer;
-#if HAVE_LONG_LONG_INT
-    long long int *            a_count_longlongint_pointer;
-#endif
-#if ENABLE_UNISTDIO
-    /* The unistdio extensions.  */
-    const uint8_t *            a_u8_string;
-    const uint16_t *           a_u16_string;
-    const uint32_t *           a_u32_string;
-#endif
-  }
-  a;
-}
-argument;
-
-typedef struct
-{
-  size_t count;
-  argument *arg;
-}
-arguments;
-
-
-/* Fetch the arguments, putting them into a. */
-#ifdef STATIC
-STATIC
-#else
-extern
-#endif
-int PRINTF_FETCHARGS (va_list args, arguments *a);
-
-#endif /* _PRINTF_ARGS_H */
diff --git a/lib/printf-parse.c b/lib/printf-parse.c
deleted file mode 100644 (file)
index 6bb5485..0000000
+++ /dev/null
@@ -1,629 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Formatted output to strings.
-   Copyright (C) 1999-2000, 2002-2003, 2006-2008 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* This file can be parametrized with the following macros:
-     CHAR_T             The element type of the format string.
-     CHAR_T_ONLY_ASCII  Set to 1 to enable verification that all characters
-                        in the format string are ASCII.
-     DIRECTIVE          Structure denoting a format directive.
-                        Depends on CHAR_T.
-     DIRECTIVES         Structure denoting the set of format directives of a
-                        format string.  Depends on CHAR_T.
-     PRINTF_PARSE       Function that parses a format string.
-                        Depends on CHAR_T.
-     STATIC             Set to 'static' to declare the function static.
-     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.  */
-
-#ifndef PRINTF_PARSE
-# include <config.h>
-#endif
-
-/* Specification.  */
-#ifndef PRINTF_PARSE
-# include "printf-parse.h"
-#endif
-
-/* Default parameters.  */
-#ifndef PRINTF_PARSE
-# define PRINTF_PARSE printf_parse
-# define CHAR_T char
-# define DIRECTIVE char_directive
-# define DIRECTIVES char_directives
-#endif
-
-/* Get size_t, NULL.  */
-#include <stddef.h>
-
-/* Get intmax_t.  */
-#if defined IN_LIBINTL || defined IN_LIBASPRINTF
-# if HAVE_STDINT_H_WITH_UINTMAX
-#  include <stdint.h>
-# endif
-# if HAVE_INTTYPES_H_WITH_UINTMAX
-#  include <inttypes.h>
-# endif
-#else
-# include <stdint.h>
-#endif
-
-/* malloc(), realloc(), free().  */
-#include <stdlib.h>
-
-/* errno.  */
-#include <errno.h>
-
-/* Checked size_t computations.  */
-#include "xsize.h"
-
-#if CHAR_T_ONLY_ASCII
-/* c_isascii().  */
-# include "c-ctype.h"
-#endif
-
-#ifdef STATIC
-STATIC
-#endif
-int
-PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a)
-{
-  const CHAR_T *cp = format;           /* pointer into format */
-  size_t arg_posn = 0;         /* number of regular arguments consumed */
-  size_t d_allocated;                  /* allocated elements of d->dir */
-  size_t a_allocated;                  /* allocated elements of a->arg */
-  size_t max_width_length = 0;
-  size_t max_precision_length = 0;
-
-  d->count = 0;
-  d_allocated = 1;
-  d->dir = (DIRECTIVE *) malloc (d_allocated * sizeof (DIRECTIVE));
-  if (d->dir == NULL)
-    /* Out of memory.  */
-    goto out_of_memory_1;
-
-  a->count = 0;
-  a_allocated = 0;
-  a->arg = NULL;
-
-#define REGISTER_ARG(_index_,_type_) \
-  {                                                                    \
-    size_t n = (_index_);                                              \
-    if (n >= a_allocated)                                              \
-      {                                                                        \
-       size_t memory_size;                                             \
-       argument *memory;                                               \
-                                                                       \
-       a_allocated = xtimes (a_allocated, 2);                          \
-       if (a_allocated <= n)                                           \
-         a_allocated = xsum (n, 1);                                    \
-       memory_size = xtimes (a_allocated, sizeof (argument));          \
-       if (size_overflow_p (memory_size))                              \
-         /* Overflow, would lead to out of memory.  */                 \
-         goto out_of_memory;                                           \
-       memory = (argument *) (a->arg                                   \
-                              ? realloc (a->arg, memory_size)          \
-                              : malloc (memory_size));                 \
-       if (memory == NULL)                                             \
-         /* Out of memory.  */                                         \
-         goto out_of_memory;                                           \
-       a->arg = memory;                                                \
-      }                                                                        \
-    while (a->count <= n)                                              \
-      a->arg[a->count++].type = TYPE_NONE;                             \
-    if (a->arg[n].type == TYPE_NONE)                                   \
-      a->arg[n].type = (_type_);                                       \
-    else if (a->arg[n].type != (_type_))                               \
-      /* Ambiguous type for positional argument.  */                   \
-      goto error;                                                      \
-  }
-
-  while (*cp != '\0')
-    {
-      CHAR_T c = *cp++;
-      if (c == '%')
-       {
-         size_t arg_index = ARG_NONE;
-         DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */
-
-         /* Initialize the next directive.  */
-         dp->dir_start = cp - 1;
-         dp->flags = 0;
-         dp->width_start = NULL;
-         dp->width_end = NULL;
-         dp->width_arg_index = ARG_NONE;
-         dp->precision_start = NULL;
-         dp->precision_end = NULL;
-         dp->precision_arg_index = ARG_NONE;
-         dp->arg_index = ARG_NONE;
-
-         /* Test for positional argument.  */
-         if (*cp >= '0' && *cp <= '9')
-           {
-             const CHAR_T *np;
-
-             for (np = cp; *np >= '0' && *np <= '9'; np++)
-               ;
-             if (*np == '$')
-               {
-                 size_t n = 0;
-
-                 for (np = cp; *np >= '0' && *np <= '9'; np++)
-                   n = xsum (xtimes (n, 10), *np - '0');
-                 if (n == 0)
-                   /* Positional argument 0.  */
-                   goto error;
-                 if (size_overflow_p (n))
-                   /* n too large, would lead to out of memory later.  */
-                   goto error;
-                 arg_index = n - 1;
-                 cp = np + 1;
-               }
-           }
-
-         /* Read the flags.  */
-         for (;;)
-           {
-             if (*cp == '\'')
-               {
-                 dp->flags |= FLAG_GROUP;
-                 cp++;
-               }
-             else if (*cp == '-')
-               {
-                 dp->flags |= FLAG_LEFT;
-                 cp++;
-               }
-             else if (*cp == '+')
-               {
-                 dp->flags |= FLAG_SHOWSIGN;
-                 cp++;
-               }
-             else if (*cp == ' ')
-               {
-                 dp->flags |= FLAG_SPACE;
-                 cp++;
-               }
-             else if (*cp == '#')
-               {
-                 dp->flags |= FLAG_ALT;
-                 cp++;
-               }
-             else if (*cp == '0')
-               {
-                 dp->flags |= FLAG_ZERO;
-                 cp++;
-               }
-             else
-               break;
-           }
-
-         /* Parse the field width.  */
-         if (*cp == '*')
-           {
-             dp->width_start = cp;
-             cp++;
-             dp->width_end = cp;
-             if (max_width_length < 1)
-               max_width_length = 1;
-
-             /* Test for positional argument.  */
-             if (*cp >= '0' && *cp <= '9')
-               {
-                 const CHAR_T *np;
-
-                 for (np = cp; *np >= '0' && *np <= '9'; np++)
-                   ;
-                 if (*np == '$')
-                   {
-                     size_t n = 0;
-
-                     for (np = cp; *np >= '0' && *np <= '9'; np++)
-                       n = xsum (xtimes (n, 10), *np - '0');
-                     if (n == 0)
-                       /* Positional argument 0.  */
-                       goto error;
-                     if (size_overflow_p (n))
-                       /* n too large, would lead to out of memory later.  */
-                       goto error;
-                     dp->width_arg_index = n - 1;
-                     cp = np + 1;
-                   }
-               }
-             if (dp->width_arg_index == ARG_NONE)
-               {
-                 dp->width_arg_index = arg_posn++;
-                 if (dp->width_arg_index == ARG_NONE)
-                   /* arg_posn wrapped around.  */
-                   goto error;
-               }
-             REGISTER_ARG (dp->width_arg_index, TYPE_INT);
-           }
-         else if (*cp >= '0' && *cp <= '9')
-           {
-             size_t width_length;
-
-             dp->width_start = cp;
-             for (; *cp >= '0' && *cp <= '9'; cp++)
-               ;
-             dp->width_end = cp;
-             width_length = dp->width_end - dp->width_start;
-             if (max_width_length < width_length)
-               max_width_length = width_length;
-           }
-
-         /* Parse the precision.  */
-         if (*cp == '.')
-           {
-             cp++;
-             if (*cp == '*')
-               {
-                 dp->precision_start = cp - 1;
-                 cp++;
-                 dp->precision_end = cp;
-                 if (max_precision_length < 2)
-                   max_precision_length = 2;
-
-                 /* Test for positional argument.  */
-                 if (*cp >= '0' && *cp <= '9')
-                   {
-                     const CHAR_T *np;
-
-                     for (np = cp; *np >= '0' && *np <= '9'; np++)
-                       ;
-                     if (*np == '$')
-                       {
-                         size_t n = 0;
-
-                         for (np = cp; *np >= '0' && *np <= '9'; np++)
-                           n = xsum (xtimes (n, 10), *np - '0');
-                         if (n == 0)
-                           /* Positional argument 0.  */
-                           goto error;
-                         if (size_overflow_p (n))
-                           /* n too large, would lead to out of memory
-                              later.  */
-                           goto error;
-                         dp->precision_arg_index = n - 1;
-                         cp = np + 1;
-                       }
-                   }
-                 if (dp->precision_arg_index == ARG_NONE)
-                   {
-                     dp->precision_arg_index = arg_posn++;
-                     if (dp->precision_arg_index == ARG_NONE)
-                       /* arg_posn wrapped around.  */
-                       goto error;
-                   }
-                 REGISTER_ARG (dp->precision_arg_index, TYPE_INT);
-               }
-             else
-               {
-                 size_t precision_length;
-
-                 dp->precision_start = cp - 1;
-                 for (; *cp >= '0' && *cp <= '9'; cp++)
-                   ;
-                 dp->precision_end = cp;
-                 precision_length = dp->precision_end - dp->precision_start;
-                 if (max_precision_length < precision_length)
-                   max_precision_length = precision_length;
-               }
-           }
-
-         {
-           arg_type type;
-
-           /* Parse argument type/size specifiers.  */
-           {
-             int flags = 0;
-
-             for (;;)
-               {
-                 if (*cp == 'h')
-                   {
-                     flags |= (1 << (flags & 1));
-                     cp++;
-                   }
-                 else if (*cp == 'L')
-                   {
-                     flags |= 4;
-                     cp++;
-                   }
-                 else if (*cp == 'l')
-                   {
-                     flags += 8;
-                     cp++;
-                   }
-                 else if (*cp == 'j')
-                   {
-                     if (sizeof (intmax_t) > sizeof (long))
-                       {
-                         /* intmax_t = long long */
-                         flags += 16;
-                       }
-                     else if (sizeof (intmax_t) > sizeof (int))
-                       {
-                         /* intmax_t = long */
-                         flags += 8;
-                       }
-                     cp++;
-                   }
-                 else if (*cp == 'z' || *cp == 'Z')
-                   {
-                     /* 'z' is standardized in ISO C 99, but glibc uses 'Z'
-                        because the warning facility in gcc-2.95.2 understands
-                        only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784).  */
-                     if (sizeof (size_t) > sizeof (long))
-                       {
-                         /* size_t = long long */
-                         flags += 16;
-                       }
-                     else if (sizeof (size_t) > sizeof (int))
-                       {
-                         /* size_t = long */
-                         flags += 8;
-                       }
-                     cp++;
-                   }
-                 else if (*cp == 't')
-                   {
-                     if (sizeof (ptrdiff_t) > sizeof (long))
-                       {
-                         /* ptrdiff_t = long long */
-                         flags += 16;
-                       }
-                     else if (sizeof (ptrdiff_t) > sizeof (int))
-                       {
-                         /* ptrdiff_t = long */
-                         flags += 8;
-                       }
-                     cp++;
-                   }
-#if defined __APPLE__ && defined __MACH__
-                 /* On MacOS X 10.3, PRIdMAX is defined as "qd".
-                    We cannot change it to "lld" because PRIdMAX must also
-                    be understood by the system's printf routines.  */
-                 else if (*cp == 'q')
-                   {
-                     if (64 / 8 > sizeof (long))
-                       {
-                         /* int64_t = long long */
-                         flags += 16;
-                       }
-                     else
-                       {
-                         /* int64_t = long */
-                         flags += 8;
-                       }
-                     cp++;
-                   }
-#endif
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-                 /* On native Win32, PRIdMAX is defined as "I64d".
-                    We cannot change it to "lld" because PRIdMAX must also
-                    be understood by the system's printf routines.  */
-                 else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4')
-                   {
-                     if (64 / 8 > sizeof (long))
-                       {
-                         /* __int64 = long long */
-                         flags += 16;
-                       }
-                     else
-                       {
-                         /* __int64 = long */
-                         flags += 8;
-                       }
-                     cp += 3;
-                   }
-#endif
-                 else
-                   break;
-               }
-
-             /* Read the conversion character.  */
-             c = *cp++;
-             switch (c)
-               {
-               case 'd': case 'i':
-#if HAVE_LONG_LONG_INT
-                 /* If 'long long' exists and is larger than 'long':  */
-                 if (flags >= 16 || (flags & 4))
-                   type = TYPE_LONGLONGINT;
-                 else
-#endif
-                 /* If 'long long' exists and is the same as 'long', we parse
-                    "lld" into TYPE_LONGINT.  */
-                 if (flags >= 8)
-                   type = TYPE_LONGINT;
-                 else if (flags & 2)
-                   type = TYPE_SCHAR;
-                 else if (flags & 1)
-                   type = TYPE_SHORT;
-                 else
-                   type = TYPE_INT;
-                 break;
-               case 'o': case 'u': case 'x': case 'X':
-#if HAVE_LONG_LONG_INT
-                 /* If 'long long' exists and is larger than 'long':  */
-                 if (flags >= 16 || (flags & 4))
-                   type = TYPE_ULONGLONGINT;
-                 else
-#endif
-                 /* If 'unsigned long long' exists and is the same as
-                    'unsigned long', we parse "llu" into TYPE_ULONGINT.  */
-                 if (flags >= 8)
-                   type = TYPE_ULONGINT;
-                 else if (flags & 2)
-                   type = TYPE_UCHAR;
-                 else if (flags & 1)
-                   type = TYPE_USHORT;
-                 else
-                   type = TYPE_UINT;
-                 break;
-               case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
-               case 'a': case 'A':
-                 if (flags >= 16 || (flags & 4))
-                   type = TYPE_LONGDOUBLE;
-                 else
-                   type = TYPE_DOUBLE;
-                 break;
-               case 'c':
-                 if (flags >= 8)
-#if HAVE_WINT_T
-                   type = TYPE_WIDE_CHAR;
-#else
-                   goto error;
-#endif
-                 else
-                   type = TYPE_CHAR;
-                 break;
-#if HAVE_WINT_T
-               case 'C':
-                 type = TYPE_WIDE_CHAR;
-                 c = 'c';
-                 break;
-#endif
-               case 's':
-                 if (flags >= 8)
-#if HAVE_WCHAR_T
-                   type = TYPE_WIDE_STRING;
-#else
-                   goto error;
-#endif
-                 else
-                   type = TYPE_STRING;
-                 break;
-#if HAVE_WCHAR_T
-               case 'S':
-                 type = TYPE_WIDE_STRING;
-                 c = 's';
-                 break;
-#endif
-               case 'p':
-                 type = TYPE_POINTER;
-                 break;
-               case 'n':
-#if HAVE_LONG_LONG_INT
-                 /* If 'long long' exists and is larger than 'long':  */
-                 if (flags >= 16 || (flags & 4))
-                   type = TYPE_COUNT_LONGLONGINT_POINTER;
-                 else
-#endif
-                 /* If 'long long' exists and is the same as 'long', we parse
-                    "lln" into TYPE_COUNT_LONGINT_POINTER.  */
-                 if (flags >= 8)
-                   type = TYPE_COUNT_LONGINT_POINTER;
-                 else if (flags & 2)
-                   type = TYPE_COUNT_SCHAR_POINTER;
-                 else if (flags & 1)
-                   type = TYPE_COUNT_SHORT_POINTER;
-                 else
-                   type = TYPE_COUNT_INT_POINTER;
-                 break;
-#if ENABLE_UNISTDIO
-               /* The unistdio extensions.  */
-               case 'U':
-                 if (flags >= 16)
-                   type = TYPE_U32_STRING;
-                 else if (flags >= 8)
-                   type = TYPE_U16_STRING;
-                 else
-                   type = TYPE_U8_STRING;
-                 break;
-#endif
-               case '%':
-                 type = TYPE_NONE;
-                 break;
-               default:
-                 /* Unknown conversion character.  */
-                 goto error;
-               }
-           }
-
-           if (type != TYPE_NONE)
-             {
-               dp->arg_index = arg_index;
-               if (dp->arg_index == ARG_NONE)
-                 {
-                   dp->arg_index = arg_posn++;
-                   if (dp->arg_index == ARG_NONE)
-                     /* arg_posn wrapped around.  */
-                     goto error;
-                 }
-               REGISTER_ARG (dp->arg_index, type);
-             }
-           dp->conversion = c;
-           dp->dir_end = cp;
-         }
-
-         d->count++;
-         if (d->count >= d_allocated)
-           {
-             size_t memory_size;
-             DIRECTIVE *memory;
-
-             d_allocated = xtimes (d_allocated, 2);
-             memory_size = xtimes (d_allocated, sizeof (DIRECTIVE));
-             if (size_overflow_p (memory_size))
-               /* Overflow, would lead to out of memory.  */
-               goto out_of_memory;
-             memory = (DIRECTIVE *) realloc (d->dir, memory_size);
-             if (memory == NULL)
-               /* Out of memory.  */
-               goto out_of_memory;
-             d->dir = memory;
-           }
-       }
-#if CHAR_T_ONLY_ASCII
-      else if (!c_isascii (c))
-       {
-         /* Non-ASCII character.  Not supported.  */
-         goto error;
-       }
-#endif
-    }
-  d->dir[d->count].dir_start = cp;
-
-  d->max_width_length = max_width_length;
-  d->max_precision_length = max_precision_length;
-  return 0;
-
-error:
-  if (a->arg)
-    free (a->arg);
-  if (d->dir)
-    free (d->dir);
-  errno = EINVAL;
-  return -1;
-
-out_of_memory:
-  if (a->arg)
-    free (a->arg);
-  if (d->dir)
-    free (d->dir);
-out_of_memory_1:
-  errno = ENOMEM;
-  return -1;
-}
-
-#undef PRINTF_PARSE
-#undef DIRECTIVES
-#undef DIRECTIVE
-#undef CHAR_T_ONLY_ASCII
-#undef CHAR_T
diff --git a/lib/printf-parse.h b/lib/printf-parse.h
deleted file mode 100644 (file)
index 31064c6..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Parse printf format string.
-   Copyright (C) 1999, 2002-2003, 2005, 2007 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _PRINTF_PARSE_H
-#define _PRINTF_PARSE_H
-
-/* This file can be parametrized with the following macros:
-     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.
-     STATIC             Set to 'static' to declare the function static.  */
-
-#include "printf-args.h"
-
-
-/* Flags */
-#define FLAG_GROUP      1      /* ' flag */
-#define FLAG_LEFT       2      /* - flag */
-#define FLAG_SHOWSIGN   4      /* + flag */
-#define FLAG_SPACE      8      /* space flag */
-#define FLAG_ALT       16      /* # flag */
-#define FLAG_ZERO      32
-
-/* arg_index value indicating that no argument is consumed.  */
-#define ARG_NONE       (~(size_t)0)
-
-/* xxx_directive: A parsed directive.
-   xxx_directives: A parsed format string.  */
-
-/* A parsed directive.  */
-typedef struct
-{
-  const char* dir_start;
-  const char* dir_end;
-  int flags;
-  const char* width_start;
-  const char* width_end;
-  size_t width_arg_index;
-  const char* precision_start;
-  const char* precision_end;
-  size_t precision_arg_index;
-  char conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
-  size_t arg_index;
-}
-char_directive;
-
-/* A parsed format string.  */
-typedef struct
-{
-  size_t count;
-  char_directive *dir;
-  size_t max_width_length;
-  size_t max_precision_length;
-}
-char_directives;
-
-#if ENABLE_UNISTDIO
-
-/* A parsed directive.  */
-typedef struct
-{
-  const uint8_t* dir_start;
-  const uint8_t* dir_end;
-  int flags;
-  const uint8_t* width_start;
-  const uint8_t* width_end;
-  size_t width_arg_index;
-  const uint8_t* precision_start;
-  const uint8_t* precision_end;
-  size_t precision_arg_index;
-  uint8_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
-  size_t arg_index;
-}
-u8_directive;
-
-/* A parsed format string.  */
-typedef struct
-{
-  size_t count;
-  u8_directive *dir;
-  size_t max_width_length;
-  size_t max_precision_length;
-}
-u8_directives;
-
-/* A parsed directive.  */
-typedef struct
-{
-  const uint16_t* dir_start;
-  const uint16_t* dir_end;
-  int flags;
-  const uint16_t* width_start;
-  const uint16_t* width_end;
-  size_t width_arg_index;
-  const uint16_t* precision_start;
-  const uint16_t* precision_end;
-  size_t precision_arg_index;
-  uint16_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
-  size_t arg_index;
-}
-u16_directive;
-
-/* A parsed format string.  */
-typedef struct
-{
-  size_t count;
-  u16_directive *dir;
-  size_t max_width_length;
-  size_t max_precision_length;
-}
-u16_directives;
-
-/* A parsed directive.  */
-typedef struct
-{
-  const uint32_t* dir_start;
-  const uint32_t* dir_end;
-  int flags;
-  const uint32_t* width_start;
-  const uint32_t* width_end;
-  size_t width_arg_index;
-  const uint32_t* precision_start;
-  const uint32_t* precision_end;
-  size_t precision_arg_index;
-  uint32_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
-  size_t arg_index;
-}
-u32_directive;
-
-/* A parsed format string.  */
-typedef struct
-{
-  size_t count;
-  u32_directive *dir;
-  size_t max_width_length;
-  size_t max_precision_length;
-}
-u32_directives;
-
-#endif
-
-
-/* Parses the format string.  Fills in the number N of directives, and fills
-   in directives[0], ..., directives[N-1], and sets directives[N].dir_start
-   to the end of the format string.  Also fills in the arg_type fields of the
-   arguments and the needed count of arguments.  */
-#if ENABLE_UNISTDIO
-extern int
-       ulc_printf_parse (const char *format, char_directives *d, arguments *a);
-extern int
-       u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a);
-extern int
-       u16_printf_parse (const uint16_t *format, u16_directives *d,
-                        arguments *a);
-extern int
-       u32_printf_parse (const uint32_t *format, u32_directives *d,
-                        arguments *a);
-#else
-# ifdef STATIC
-STATIC
-# else
-extern
-# endif
-int printf_parse (const char *format, char_directives *d, arguments *a);
-#endif
-
-#endif /* _PRINTF_PARSE_H */
diff --git a/lib/quote.c b/lib/quote.c
deleted file mode 100644 (file)
index 5e8b764..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/* quote.c - quote arguments for output
-
-   Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005, 2006 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 <eggert@twinsun.com> */
-
-#include <config.h>
-
-#include "quotearg.h"
-#include "quote.h"
-
-/* Return an unambiguous printable representation of NAME,
-   allocated in slot N, suitable for diagnostics.  */
-char const *
-quote_n (int n, char const *name)
-{
-  return quotearg_n_style (n, locale_quoting_style, name);
-}
-
-/* Return an unambiguous printable representation of NAME,
-   suitable for diagnostics.  */
-char const *
-quote (char const *name)
-{
-  return quote_n (0, name);
-}
diff --git a/lib/quote.h b/lib/quote.h
deleted file mode 100644 (file)
index c3660b1..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* quote.h - prototypes for quote.c
-
-   Copyright (C) 1998, 1999, 2000, 2001, 2003 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/>.  */
-
-
-char const *quote_n (int n, char const *name);
-char const *quote (char const *name);
diff --git a/lib/quotearg.c b/lib/quotearg.c
deleted file mode 100644 (file)
index 339bf34..0000000
+++ /dev/null
@@ -1,799 +0,0 @@
-/* quotearg.c - quote arguments for output
-
-   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007,
-   2008 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 <eggert@twinsun.com> */
-
-#include <config.h>
-
-#include "quotearg.h"
-
-#include "xalloc.h"
-
-#include <ctype.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#include "gettext.h"
-#define _(msgid) gettext (msgid)
-#define N_(msgid) msgid
-
-#ifndef SIZE_MAX
-# define SIZE_MAX ((size_t) -1)
-#endif
-
-#define INT_BITS (sizeof (int) * CHAR_BIT)
-
-struct quoting_options
-{
-  /* Basic quoting style.  */
-  enum quoting_style style;
-
-  /* Additional flags.  Bitwise combination of enum quoting_flags.  */
-  int flags;
-
-  /* Quote the characters indicated by this bit vector even if the
-     quoting style would not normally require them to be quoted.  */
-  unsigned int quote_these_too[(UCHAR_MAX / INT_BITS) + 1];
-};
-
-/* Names of quoting styles.  */
-char const *const quoting_style_args[] =
-{
-  "literal",
-  "shell",
-  "shell-always",
-  "c",
-  "c-maybe",
-  "escape",
-  "locale",
-  "clocale",
-  0
-};
-
-/* Correspondences to quoting style names.  */
-enum quoting_style const quoting_style_vals[] =
-{
-  literal_quoting_style,
-  shell_quoting_style,
-  shell_always_quoting_style,
-  c_quoting_style,
-  c_maybe_quoting_style,
-  escape_quoting_style,
-  locale_quoting_style,
-  clocale_quoting_style
-};
-
-/* The default quoting options.  */
-static struct quoting_options default_quoting_options;
-
-/* Allocate a new set of quoting options, with contents initially identical
-   to O if O is not null, or to the default if O is null.
-   It is the caller's responsibility to free the result.  */
-struct quoting_options *
-clone_quoting_options (struct quoting_options *o)
-{
-  int e = errno;
-  struct quoting_options *p = xmemdup (o ? o : &default_quoting_options,
-                                      sizeof *o);
-  errno = e;
-  return p;
-}
-
-/* Get the value of O's quoting style.  If O is null, use the default.  */
-enum quoting_style
-get_quoting_style (struct quoting_options *o)
-{
-  return (o ? o : &default_quoting_options)->style;
-}
-
-/* In O (or in the default if O is null),
-   set the value of the quoting style to S.  */
-void
-set_quoting_style (struct quoting_options *o, enum quoting_style s)
-{
-  (o ? o : &default_quoting_options)->style = s;
-}
-
-/* In O (or in the default if O is null),
-   set the value of the quoting options for character C to I.
-   Return the old value.  Currently, the only values defined for I are
-   0 (the default) and 1 (which means to quote the character even if
-   it would not otherwise be quoted).  */
-int
-set_char_quoting (struct quoting_options *o, char c, int i)
-{
-  unsigned char uc = c;
-  unsigned int *p =
-    (o ? o : &default_quoting_options)->quote_these_too + uc / INT_BITS;
-  int shift = uc % INT_BITS;
-  int r = (*p >> shift) & 1;
-  *p ^= ((i & 1) ^ r) << shift;
-  return r;
-}
-
-/* In O (or in the default if O is null),
-   set the value of the quoting options flag to I, which can be a
-   bitwise combination of enum quoting_flags, or 0 for default
-   behavior.  Return the old value.  */
-int
-set_quoting_flags (struct quoting_options *o, int i)
-{
-  int r;
-  if (!o)
-    o = &default_quoting_options;
-  r = o->flags;
-  o->flags = i;
-  return r;
-}
-
-/* Return quoting options for STYLE, with no extra quoting.  */
-static struct quoting_options
-quoting_options_from_style (enum quoting_style style)
-{
-  struct quoting_options o;
-  o.style = style;
-  o.flags = 0;
-  memset (o.quote_these_too, 0, sizeof o.quote_these_too);
-  return o;
-}
-
-/* MSGID approximates a quotation mark.  Return its translation if it
-   has one; otherwise, return either it or "\"", depending on S.  */
-static char const *
-gettext_quote (char const *msgid, enum quoting_style s)
-{
-  char const *translation = _(msgid);
-  if (translation == msgid && s == clocale_quoting_style)
-    translation = "\"";
-  return translation;
-}
-
-/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
-   argument ARG (of size ARGSIZE), using QUOTING_STYLE, FLAGS, and
-   QUOTE_THESE_TOO to control quoting.
-   Terminate the output with a null character, and return the written
-   size of the output, not counting the terminating null.
-   If BUFFERSIZE is too small to store the output string, return the
-   value that would have been returned had BUFFERSIZE been large enough.
-   If ARGSIZE is SIZE_MAX, use the string length of the argument for ARGSIZE.
-
-   This function acts like quotearg_buffer (BUFFER, BUFFERSIZE, ARG,
-   ARGSIZE, O), except it breaks O into its component pieces and is
-   not careful about errno.  */
-
-static size_t
-quotearg_buffer_restyled (char *buffer, size_t buffersize,
-                         char const *arg, size_t argsize,
-                         enum quoting_style quoting_style, int flags,
-                         unsigned int const *quote_these_too)
-{
-  size_t i;
-  size_t len = 0;
-  char const *quote_string = 0;
-  size_t quote_string_len = 0;
-  bool backslash_escapes = false;
-  bool unibyte_locale = MB_CUR_MAX == 1;
-  bool elide_outer_quotes = (flags & QA_ELIDE_OUTER_QUOTES) != 0;
-
-#define STORE(c) \
-    do \
-      { \
-       if (len < buffersize) \
-         buffer[len] = (c); \
-       len++; \
-      } \
-    while (0)
-
-  switch (quoting_style)
-    {
-    case c_maybe_quoting_style:
-      quoting_style = c_quoting_style;
-      elide_outer_quotes = true;
-      /* Fall through.  */
-    case c_quoting_style:
-      if (!elide_outer_quotes)
-       STORE ('"');
-      backslash_escapes = true;
-      quote_string = "\"";
-      quote_string_len = 1;
-      break;
-
-    case escape_quoting_style:
-      backslash_escapes = true;
-      elide_outer_quotes = false;
-      break;
-
-    case locale_quoting_style:
-    case clocale_quoting_style:
-      {
-       /* TRANSLATORS:
-          Get translations for open and closing quotation marks.
-
-          The message catalog should translate "`" to a left
-          quotation mark suitable for the locale, and similarly for
-          "'".  If the catalog has no translation,
-          locale_quoting_style quotes `like this', and
-          clocale_quoting_style quotes "like this".
-
-          For example, an American English Unicode locale should
-          translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
-          should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
-          MARK).  A British English Unicode locale should instead
-          translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-          U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
-
-          If you don't know what to put here, please see
-          <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
-          and use glyphs suitable for your language.  */
-
-       char const *left = gettext_quote (N_("`"), quoting_style);
-       char const *right = gettext_quote (N_("'"), quoting_style);
-       if (!elide_outer_quotes)
-         for (quote_string = left; *quote_string; quote_string++)
-           STORE (*quote_string);
-       backslash_escapes = true;
-       quote_string = right;
-       quote_string_len = strlen (quote_string);
-      }
-      break;
-
-    case shell_quoting_style:
-      quoting_style = shell_always_quoting_style;
-      elide_outer_quotes = true;
-      /* Fall through.  */
-    case shell_always_quoting_style:
-      if (!elide_outer_quotes)
-       STORE ('\'');
-      quote_string = "'";
-      quote_string_len = 1;
-      break;
-
-    case literal_quoting_style:
-      elide_outer_quotes = false;
-      break;
-
-    default:
-      abort ();
-    }
-
-  for (i = 0;  ! (argsize == SIZE_MAX ? arg[i] == '\0' : i == argsize);  i++)
-    {
-      unsigned char c;
-      unsigned char esc;
-
-      if (backslash_escapes
-         && quote_string_len
-         && i + quote_string_len <= argsize
-         && memcmp (arg + i, quote_string, quote_string_len) == 0)
-       {
-         if (elide_outer_quotes)
-           goto force_outer_quoting_style;
-         STORE ('\\');
-       }
-
-      c = arg[i];
-      switch (c)
-       {
-       case '\0':
-         if (backslash_escapes)
-           {
-             if (elide_outer_quotes)
-               goto force_outer_quoting_style;
-             STORE ('\\');
-             if (i + 1 < argsize && '0' <= arg[i + 1] && arg[i + 1] <= '9')
-               {
-                 STORE ('0');
-                 STORE ('0');
-               }
-             c = '0';
-           }
-         else if (flags & QA_ELIDE_NULL_BYTES)
-           continue;
-         break;
-
-       case '?':
-         switch (quoting_style)
-           {
-           case shell_always_quoting_style:
-             if (elide_outer_quotes)
-               goto force_outer_quoting_style;
-             break;
-
-           case c_quoting_style:
-             if ((flags & QA_SPLIT_TRIGRAPHS)
-                 && i + 2 < argsize && arg[i + 1] == '?')
-               switch (arg[i + 2])
-                 {
-                 case '!': case '\'':
-                 case '(': case ')': case '-': case '/':
-                 case '<': case '=': case '>':
-                   /* Escape the second '?' in what would otherwise be
-                      a trigraph.  */
-                   if (elide_outer_quotes)
-                     goto force_outer_quoting_style;
-                   c = arg[i + 2];
-                   i += 2;
-                   STORE ('?');
-                   STORE ('"');
-                   STORE ('"');
-                   STORE ('?');
-                   break;
-
-                 default:
-                   break;
-                 }
-             break;
-
-           default:
-             break;
-           }
-         break;
-
-       case '\a': esc = 'a'; goto c_escape;
-       case '\b': esc = 'b'; goto c_escape;
-       case '\f': esc = 'f'; goto c_escape;
-       case '\n': esc = 'n'; goto c_and_shell_escape;
-       case '\r': esc = 'r'; goto c_and_shell_escape;
-       case '\t': esc = 't'; goto c_and_shell_escape;
-       case '\v': esc = 'v'; goto c_escape;
-       case '\\': esc = c;
-         /* No need to escape the escape if we are trying to elide
-            outer quotes and nothing else is problematic.  */
-         if (backslash_escapes && elide_outer_quotes && quote_string_len)
-           goto store_c;
-
-       c_and_shell_escape:
-         if (quoting_style == shell_always_quoting_style
-             && elide_outer_quotes)
-           goto force_outer_quoting_style;
-         /* Fall through.  */
-       c_escape:
-         if (backslash_escapes)
-           {
-             c = esc;
-             goto store_escape;
-           }
-         break;
-
-       case '{': case '}': /* sometimes special if isolated */
-         if (! (argsize == SIZE_MAX ? arg[1] == '\0' : argsize == 1))
-           break;
-         /* Fall through.  */
-       case '#': case '~':
-         if (i != 0)
-           break;
-         /* Fall through.  */
-       case ' ':
-       case '!': /* special in bash */
-       case '"': case '$': case '&':
-       case '(': case ')': case '*': case ';':
-       case '<':
-       case '=': /* sometimes special in 0th or (with "set -k") later args */
-       case '>': case '[':
-       case '^': /* special in old /bin/sh, e.g. SunOS 4.1.4 */
-       case '`': case '|':
-         /* A shell special character.  In theory, '$' and '`' could
-            be the first bytes of multibyte characters, which means
-            we should check them with mbrtowc, but in practice this
-            doesn't happen so it's not worth worrying about.  */
-         if (quoting_style == shell_always_quoting_style
-             && elide_outer_quotes)
-           goto force_outer_quoting_style;
-         break;
-
-       case '\'':
-         if (quoting_style == shell_always_quoting_style)
-           {
-             if (elide_outer_quotes)
-               goto force_outer_quoting_style;
-             STORE ('\'');
-             STORE ('\\');
-             STORE ('\'');
-           }
-         break;
-
-       case '%': case '+': case ',': case '-': case '.': case '/':
-       case '0': case '1': case '2': case '3': case '4': case '5':
-       case '6': case '7': case '8': case '9': case ':':
-       case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
-       case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
-       case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
-       case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
-       case 'Y': case 'Z': case ']': case '_': case 'a': case 'b':
-       case 'c': case 'd': case 'e': case 'f': case 'g': case 'h':
-       case 'i': case 'j': case 'k': case 'l': case 'm': case 'n':
-       case 'o': case 'p': case 'q': case 'r': case 's': case 't':
-       case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
-         /* These characters don't cause problems, no matter what the
-            quoting style is.  They cannot start multibyte sequences.  */
-         break;
-
-       default:
-         /* If we have a multibyte sequence, copy it until we reach
-            its end, find an error, or come back to the initial shift
-            state.  For C-like styles, if the sequence has
-            unprintable characters, escape the whole sequence, since
-            we can't easily escape single characters within it.  */
-         {
-           /* Length of multibyte sequence found so far.  */
-           size_t m;
-
-           bool printable;
-
-           if (unibyte_locale)
-             {
-               m = 1;
-               printable = isprint (c) != 0;
-             }
-           else
-             {
-               mbstate_t mbstate;
-               memset (&mbstate, 0, sizeof mbstate);
-
-               m = 0;
-               printable = true;
-               if (argsize == SIZE_MAX)
-                 argsize = strlen (arg);
-
-               do
-                 {
-                   wchar_t w;
-                   size_t bytes = mbrtowc (&w, &arg[i + m],
-                                           argsize - (i + m), &mbstate);
-                   if (bytes == 0)
-                     break;
-                   else if (bytes == (size_t) -1)
-                     {
-                       printable = false;
-                       break;
-                     }
-                   else if (bytes == (size_t) -2)
-                     {
-                       printable = false;
-                       while (i + m < argsize && arg[i + m])
-                         m++;
-                       break;
-                     }
-                   else
-                     {
-                       /* Work around a bug with older shells that "see" a '\'
-                          that is really the 2nd byte of a multibyte character.
-                          In practice the problem is limited to ASCII
-                          chars >= '@' that are shell special chars.  */
-                       if ('[' == 0x5b && elide_outer_quotes
-                           && quoting_style == shell_always_quoting_style)
-                         {
-                           size_t j;
-                           for (j = 1; j < bytes; j++)
-                             switch (arg[i + m + j])
-                               {
-                               case '[': case '\\': case '^':
-                               case '`': case '|':
-                                 goto force_outer_quoting_style;
-
-                               default:
-                                 break;
-                               }
-                         }
-
-                       if (! iswprint (w))
-                         printable = false;
-                       m += bytes;
-                     }
-                 }
-               while (! mbsinit (&mbstate));
-             }
-
-           if (1 < m || (backslash_escapes && ! printable))
-             {
-               /* Output a multibyte sequence, or an escaped
-                  unprintable unibyte character.  */
-               size_t ilim = i + m;
-
-               for (;;)
-                 {
-                   if (backslash_escapes && ! printable)
-                     {
-                       if (elide_outer_quotes)
-                         goto force_outer_quoting_style;
-                       STORE ('\\');
-                       STORE ('0' + (c >> 6));
-                       STORE ('0' + ((c >> 3) & 7));
-                       c = '0' + (c & 7);
-                     }
-                   if (ilim <= i + 1)
-                     break;
-                   STORE (c);
-                   c = arg[++i];
-                 }
-
-               goto store_c;
-             }
-         }
-       }
-
-      if (! ((backslash_escapes || elide_outer_quotes)
-            && quote_these_too
-            && quote_these_too[c / INT_BITS] & (1 << (c % INT_BITS))))
-       goto store_c;
-
-    store_escape:
-      if (elide_outer_quotes)
-       goto force_outer_quoting_style;
-      STORE ('\\');
-
-    store_c:
-      STORE (c);
-    }
-
-  if (len == 0 && quoting_style == shell_always_quoting_style
-      && elide_outer_quotes)
-    goto force_outer_quoting_style;
-
-  if (quote_string && !elide_outer_quotes)
-    for (; *quote_string; quote_string++)
-      STORE (*quote_string);
-
-  if (len < buffersize)
-    buffer[len] = '\0';
-  return len;
-
- force_outer_quoting_style:
-  /* Don't reuse quote_these_too, since the addition of outer quotes
-     sufficiently quotes the specified characters.  */
-  return quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
-                                  quoting_style,
-                                  flags & ~QA_ELIDE_OUTER_QUOTES, NULL);
-}
-
-/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
-   argument ARG (of size ARGSIZE), using O to control quoting.
-   If O is null, use the default.
-   Terminate the output with a null character, and return the written
-   size of the output, not counting the terminating null.
-   If BUFFERSIZE is too small to store the output string, return the
-   value that would have been returned had BUFFERSIZE been large enough.
-   If ARGSIZE is SIZE_MAX, use the string length of the argument for
-   ARGSIZE.  */
-size_t
-quotearg_buffer (char *buffer, size_t buffersize,
-                char const *arg, size_t argsize,
-                struct quoting_options const *o)
-{
-  struct quoting_options const *p = o ? o : &default_quoting_options;
-  int e = errno;
-  size_t r = quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
-                                      p->style, p->flags, p->quote_these_too);
-  errno = e;
-  return r;
-}
-
-/* Equivalent to quotearg_alloc (ARG, ARGSIZE, NULL, O).  */
-char *
-quotearg_alloc (char const *arg, size_t argsize,
-               struct quoting_options const *o)
-{
-  return quotearg_alloc_mem (arg, argsize, NULL, o);
-}
-
-/* Like quotearg_buffer (..., ARG, ARGSIZE, O), except return newly
-   allocated storage containing the quoted string, and store the
-   resulting size into *SIZE, if non-NULL.  The result can contain
-   embedded null bytes only if ARGSIZE is not SIZE_MAX, SIZE is not
-   NULL, and set_quoting_flags has not set the null byte elision
-   flag.  */
-char *
-quotearg_alloc_mem (char const *arg, size_t argsize, size_t *size,
-                   struct quoting_options const *o)
-{
-  struct quoting_options const *p = o ? o : &default_quoting_options;
-  int e = errno;
-  /* Elide embedded null bytes if we can't return a size.  */
-  int flags = p->flags | (size ? 0 : QA_ELIDE_NULL_BYTES);
-  size_t bufsize = quotearg_buffer_restyled (0, 0, arg, argsize, p->style,
-                                            flags, p->quote_these_too) + 1;
-  char *buf = xcharalloc (bufsize);
-  quotearg_buffer_restyled (buf, bufsize, arg, argsize, p->style, flags,
-                           p->quote_these_too);
-  errno = e;
-  if (size)
-    *size = bufsize - 1;
-  return buf;
-}
-
-/* A storage slot with size and pointer to a value.  */
-struct slotvec
-{
-  size_t size;
-  char *val;
-};
-
-/* Preallocate a slot 0 buffer, so that the caller can always quote
-   one small component of a "memory exhausted" message in slot 0.  */
-static char slot0[256];
-static unsigned int nslots = 1;
-static struct slotvec slotvec0 = {sizeof slot0, slot0};
-static struct slotvec *slotvec = &slotvec0;
-
-void
-quotearg_free (void)
-{
-  struct slotvec *sv = slotvec;
-  unsigned int i;
-  for (i = 1; i < nslots; i++)
-    free (sv[i].val);
-  if (sv[0].val != slot0)
-    {
-      free (sv[0].val);
-      slotvec0.size = sizeof slot0;
-      slotvec0.val = slot0;
-    }
-  if (sv != &slotvec0)
-    {
-      free (sv);
-      slotvec = &slotvec0;
-    }
-  nslots = 1;
-}
-
-/* Use storage slot N to return a quoted version of argument ARG.
-   ARG is of size ARGSIZE, but if that is SIZE_MAX, ARG is a
-   null-terminated string.
-   OPTIONS specifies the quoting options.
-   The returned value points to static storage that can be
-   reused by the next call to this function with the same value of N.
-   N must be nonnegative.  N is deliberately declared with type "int"
-   to allow for future extensions (using negative values).  */
-static char *
-quotearg_n_options (int n, char const *arg, size_t argsize,
-                   struct quoting_options const *options)
-{
-  int e = errno;
-
-  unsigned int n0 = n;
-  struct slotvec *sv = slotvec;
-
-  if (n < 0)
-    abort ();
-
-  if (nslots <= n0)
-    {
-      /* FIXME: technically, the type of n1 should be `unsigned int',
-        but that evokes an unsuppressible warning from gcc-4.0.1 and
-        older.  If gcc ever provides an option to suppress that warning,
-        revert to the original type, so that the test in xalloc_oversized
-        is once again performed only at compile time.  */
-      size_t n1 = n0 + 1;
-      bool preallocated = (sv == &slotvec0);
-
-      if (xalloc_oversized (n1, sizeof *sv))
-       xalloc_die ();
-
-      slotvec = sv = xrealloc (preallocated ? NULL : sv, n1 * sizeof *sv);
-      if (preallocated)
-       *sv = slotvec0;
-      memset (sv + nslots, 0, (n1 - nslots) * sizeof *sv);
-      nslots = n1;
-    }
-
-  {
-    size_t size = sv[n].size;
-    char *val = sv[n].val;
-    /* Elide embedded null bytes since we don't return a size.  */
-    int flags = options->flags | QA_ELIDE_NULL_BYTES;
-    size_t qsize = quotearg_buffer_restyled (val, size, arg, argsize,
-                                            options->style, flags,
-                                            options->quote_these_too);
-
-    if (size <= qsize)
-      {
-       sv[n].size = size = qsize + 1;
-       if (val != slot0)
-         free (val);
-       sv[n].val = val = xcharalloc (size);
-       quotearg_buffer_restyled (val, size, arg, argsize, options->style,
-                                 flags, options->quote_these_too);
-      }
-
-    errno = e;
-    return val;
-  }
-}
-
-char *
-quotearg_n (int n, char const *arg)
-{
-  return quotearg_n_options (n, arg, SIZE_MAX, &default_quoting_options);
-}
-
-char *
-quotearg_n_mem (int n, char const *arg, size_t argsize)
-{
-  return quotearg_n_options (n, arg, argsize, &default_quoting_options);
-}
-
-char *
-quotearg (char const *arg)
-{
-  return quotearg_n (0, arg);
-}
-
-char *
-quotearg_mem (char const *arg, size_t argsize)
-{
-  return quotearg_n_mem (0, arg, argsize);
-}
-
-char *
-quotearg_n_style (int n, enum quoting_style s, char const *arg)
-{
-  struct quoting_options const o = quoting_options_from_style (s);
-  return quotearg_n_options (n, arg, SIZE_MAX, &o);
-}
-
-char *
-quotearg_n_style_mem (int n, enum quoting_style s,
-                     char const *arg, size_t argsize)
-{
-  struct quoting_options const o = quoting_options_from_style (s);
-  return quotearg_n_options (n, arg, argsize, &o);
-}
-
-char *
-quotearg_style (enum quoting_style s, char const *arg)
-{
-  return quotearg_n_style (0, s, arg);
-}
-
-char *
-quotearg_style_mem (enum quoting_style s, char const *arg, size_t argsize)
-{
-  return quotearg_n_style_mem (0, s, arg, argsize);
-}
-
-char *
-quotearg_char_mem (char const *arg, size_t argsize, char ch)
-{
-  struct quoting_options options;
-  options = default_quoting_options;
-  set_char_quoting (&options, ch, 1);
-  return quotearg_n_options (0, arg, argsize, &options);
-}
-
-char *
-quotearg_char (char const *arg, char ch)
-{
-  return quotearg_char_mem (arg, SIZE_MAX, ch);
-}
-
-char *
-quotearg_colon (char const *arg)
-{
-  return quotearg_char (arg, ':');
-}
-
-char *
-quotearg_colon_mem (char const *arg, size_t argsize)
-{
-  return quotearg_char_mem (arg, argsize, ':');
-}
diff --git a/lib/quotearg.h b/lib/quotearg.h
deleted file mode 100644 (file)
index 7700107..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-/* quotearg.h - quote arguments for output
-
-   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2006, 2008 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 <eggert@twinsun.com> */
-
-#ifndef QUOTEARG_H_
-# define QUOTEARG_H_ 1
-
-# include <stddef.h>
-
-/* Basic quoting styles.  For each style, an example is given on the
-   input strings "simple", "\0 \t\n'\"\033?""?/\\", and "a:b", using
-   quotearg_buffer, quotearg_mem, and quotearg_colon_mem with that
-   style and the default flags and quoted characters.  Note that the
-   examples are shown here as valid C strings rather than what
-   displays on a terminal (with "??/" as a trigraph for "\\").  */
-enum quoting_style
-  {
-    /* Output names as-is (ls --quoting-style=literal).  Can result in
-       embedded null bytes if QA_ELIDE_NULL_BYTES is not in
-       effect.
-
-       quotearg_buffer:
-       "simple", "\0 \t\n'\"\033??/\\", "a:b"
-       quotearg:
-       "simple", " \t\n'\"\033??/\\", "a:b"
-       quotearg_colon:
-       "simple", " \t\n'\"\033??/\\", "a:b"
-    */
-    literal_quoting_style,
-
-    /* Quote names for the shell if they contain shell metacharacters
-       or would cause ambiguous output (ls --quoting-style=shell).
-       Can result in embedded null bytes if QA_ELIDE_NULL_BYTES is not
-       in effect.
-
-       quotearg_buffer:
-       "simple", "'\0 \t\n'\\''\"\033??/\\'", "a:b"
-       quotearg:
-       "simple", "' \t\n'\\''\"\033??/\\'", "a:b"
-       quotearg_colon:
-       "simple", "' \t\n'\\''\"\033??/\\'", "'a:b'"
-    */
-    shell_quoting_style,
-
-    /* Quote names for the shell, even if they would normally not
-       require quoting (ls --quoting-style=shell-always).  Can result
-       in embedded null bytes if QA_ELIDE_NULL_BYTES is not in effect.
-       Behaves like shell_quoting_style if QA_ELIDE_OUTER_QUOTES is in
-       effect.
-
-       quotearg_buffer:
-       "'simple'", "'\0 \t\n'\\''\"\033??/\\'", "'a:b'"
-       quotearg:
-       "'simple'", "' \t\n'\\''\"\033??/\\'", "'a:b'"
-       quotearg_colon:
-       "'simple'", "' \t\n'\\''\"\033??/\\'", "'a:b'"
-    */
-    shell_always_quoting_style,
-
-    /* Quote names as for a C language string (ls --quoting-style=c).
-       Behaves like c_maybe_quoting_style if QA_ELIDE_OUTER_QUOTES is
-       in effect.  Split into consecutive strings if
-       QA_SPLIT_TRIGRAPHS.
-
-       quotearg_buffer:
-       "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
-       quotearg:
-       "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
-       quotearg_colon:
-       "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a\\:b\""
-    */
-    c_quoting_style,
-
-    /* Like c_quoting_style except omit the surrounding double-quote
-       characters if no quoted characters are encountered.
-
-       quotearg_buffer:
-       "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "a:b"
-       quotearg:
-       "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "a:b"
-       quotearg_colon:
-       "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
-    */
-    c_maybe_quoting_style,
-
-    /* Like c_quoting_style except always omit the surrounding
-       double-quote characters (ls --quoting-style=escape).
-
-       quotearg_buffer:
-       "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b"
-       quotearg:
-       "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b"
-       quotearg_colon:
-       "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a\\:b"
-    */
-    escape_quoting_style,
-
-    /* Like clocale_quoting_style, but quote `like this' instead of
-       "like this" in the default C locale (ls --quoting-style=locale).
-
-       LC_MESSAGES=C
-       quotearg_buffer:
-       "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a:b'"
-       quotearg:
-       "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a:b'"
-       quotearg_colon:
-       "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a\\:b'"
-
-       LC_MESSAGES=pt_PT.utf8
-       quotearg_buffer:
-       "\302\253simple\302\273",
-       "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273"
-       quotearg:
-       "\302\253simple\302\273",
-       "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273"
-       quotearg_colon:
-       "\302\253simple\302\273",
-       "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273"
-    */
-    locale_quoting_style,
-
-    /* Like c_quoting_style except use quotation marks appropriate for
-       the locale (ls --quoting-style=clocale).
-
-       LC_MESSAGES=C
-       quotearg_buffer:
-       "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
-       quotearg:
-       "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
-       quotearg_colon:
-       "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a\\:b\""
-
-       LC_MESSAGES=pt_PT.utf8
-       quotearg_buffer:
-       "\302\253simple\302\273",
-       "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273"
-       quotearg:
-       "\302\253simple\302\273",
-       "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273"
-       quotearg_colon:
-       "\302\253simple\302\273",
-       "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273"
-    */
-    clocale_quoting_style
-  };
-
-/* Flags for use in set_quoting_flags.  */
-enum quoting_flags
-  {
-    /* Always elide null bytes from styles that do not quote them,
-       even when the length of the result is available to the
-       caller.  */
-    QA_ELIDE_NULL_BYTES = 0x01,
-
-    /* Omit the surrounding quote characters if no escaped characters
-       are encountered.  Note that if no other character needs
-       escaping, then neither does the escape character.  */
-    QA_ELIDE_OUTER_QUOTES = 0x02,
-
-    /* In the c_quoting_style and c_maybe_quoting_style, split ANSI
-       trigraph sequences into concatenated strings (for example,
-       "?""?/" rather than "??/", which could be confused with
-       "\\").  */
-    QA_SPLIT_TRIGRAPHS = 0x04
-  };
-
-/* For now, --quoting-style=literal is the default, but this may change.  */
-# ifndef DEFAULT_QUOTING_STYLE
-#  define DEFAULT_QUOTING_STYLE literal_quoting_style
-# endif
-
-/* Names of quoting styles and their corresponding values.  */
-extern char const *const quoting_style_args[];
-extern enum quoting_style const quoting_style_vals[];
-
-struct quoting_options;
-
-/* The functions listed below set and use a hidden variable
-   that contains the default quoting style options.  */
-
-/* Allocate a new set of quoting options, with contents initially identical
-   to O if O is not null, or to the default if O is null.
-   It is the caller's responsibility to free the result.  */
-struct quoting_options *clone_quoting_options (struct quoting_options *o);
-
-/* Get the value of O's quoting style.  If O is null, use the default.  */
-enum quoting_style get_quoting_style (struct quoting_options *o);
-
-/* In O (or in the default if O is null),
-   set the value of the quoting style to S.  */
-void set_quoting_style (struct quoting_options *o, enum quoting_style s);
-
-/* In O (or in the default if O is null),
-   set the value of the quoting options for character C to I.
-   Return the old value.  Currently, the only values defined for I are
-   0 (the default) and 1 (which means to quote the character even if
-   it would not otherwise be quoted).  */
-int set_char_quoting (struct quoting_options *o, char c, int i);
-
-/* In O (or in the default if O is null),
-   set the value of the quoting options flag to I, which can be a
-   bitwise combination of enum quoting_flags, or 0 for default
-   behavior.  Return the old value.  */
-int set_quoting_flags (struct quoting_options *o, int i);
-
-/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
-   argument ARG (of size ARGSIZE), using O to control quoting.
-   If O is null, use the default.
-   Terminate the output with a null character, and return the written
-   size of the output, not counting the terminating null.
-   If BUFFERSIZE is too small to store the output string, return the
-   value that would have been returned had BUFFERSIZE been large enough.
-   If ARGSIZE is -1, use the string length of the argument for ARGSIZE.
-   On output, BUFFER might contain embedded null bytes if ARGSIZE was
-   not -1, the style of O does not use backslash escapes, and the
-   flags of O do not request elision of null bytes.*/
-size_t quotearg_buffer (char *buffer, size_t buffersize,
-                       char const *arg, size_t argsize,
-                       struct quoting_options const *o);
-
-/* Like quotearg_buffer, except return the result in a newly allocated
-   buffer.  It is the caller's responsibility to free the result.  The
-   result will not contain embedded null bytes.  */
-char *quotearg_alloc (char const *arg, size_t argsize,
-                     struct quoting_options const *o);
-
-/* Like quotearg_alloc, except that the length of the result,
-   excluding the terminating null byte, is stored into SIZE if it is
-   non-NULL.  The result might contain embedded null bytes if ARGSIZE
-   was not -1, SIZE was not NULL, the style of O does not use
-   backslash escapes, and the flags of O do not request elision of
-   null bytes.*/
-char *quotearg_alloc_mem (char const *arg, size_t argsize,
-                         size_t *size, struct quoting_options const *o);
-
-/* Use storage slot N to return a quoted version of the string ARG.
-   Use the default quoting options.
-   The returned value points to static storage that can be
-   reused by the next call to this function with the same value of N.
-   N must be nonnegative.  The output of all functions in the
-   quotearg_n family are guaranteed to not contain embedded null
-   bytes.*/
-char *quotearg_n (int n, char const *arg);
-
-/* Equivalent to quotearg_n (0, ARG).  */
-char *quotearg (char const *arg);
-
-/* Use storage slot N to return a quoted version of the argument ARG
-   of size ARGSIZE.  This is like quotearg_n (N, ARG), except it can
-   quote null bytes.  */
-char *quotearg_n_mem (int n, char const *arg, size_t argsize);
-
-/* Equivalent to quotearg_n_mem (0, ARG, ARGSIZE).  */
-char *quotearg_mem (char const *arg, size_t argsize);
-
-/* Use style S and storage slot N to return a quoted version of the string ARG.
-   This is like quotearg_n (N, ARG), except that it uses S with no other
-   options to specify the quoting method.  */
-char *quotearg_n_style (int n, enum quoting_style s, char const *arg);
-
-/* Use style S and storage slot N to return a quoted version of the
-   argument ARG of size ARGSIZE.  This is like quotearg_n_style
-   (N, S, ARG), except it can quote null bytes.  */
-char *quotearg_n_style_mem (int n, enum quoting_style s,
-                           char const *arg, size_t argsize);
-
-/* Equivalent to quotearg_n_style (0, S, ARG).  */
-char *quotearg_style (enum quoting_style s, char const *arg);
-
-/* Equivalent to quotearg_n_style_mem (0, S, ARG, ARGSIZE).  */
-char *quotearg_style_mem (enum quoting_style s,
-                         char const *arg, size_t argsize);
-
-/* Like quotearg (ARG), except also quote any instances of CH.  */
-char *quotearg_char (char const *arg, char ch);
-
-/* Like quotearg_char (ARG, CH), except it can quote null bytes.  */
-char *quotearg_char_mem (char const *arg, size_t argsize, char ch);
-
-/* Equivalent to quotearg_char (ARG, ':').  */
-char *quotearg_colon (char const *arg);
-
-/* Like quotearg_colon (ARG), except it can quote null bytes.  */
-char *quotearg_colon_mem (char const *arg, size_t argsize);
-
-/* Free any dynamically allocated memory.  */
-void quotearg_free (void);
-
-#endif /* !QUOTEARG_H_ */
diff --git a/lib/rawmemchr.c b/lib/rawmemchr.c
deleted file mode 100644 (file)
index d7cdc6e..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/* Searching in a string.
-   Copyright (C) 2008 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 <string.h>
-
-/* Find the first occurrence of C in S.  */
-void *
-rawmemchr (const void *s, int c_in)
-{
-  /* On 32-bit hardware, choosing longword to be a 32-bit unsigned
-     long instead of a 64-bit uintmax_t tends to give better
-     performance.  On 64-bit hardware, unsigned long is generally 64
-     bits already.  Change this typedef to experiment with
-     performance.  */
-  typedef unsigned long int longword;
-
-  const unsigned char *char_ptr;
-  const longword *longword_ptr;
-  longword repeated_one;
-  longword repeated_c;
-  unsigned char c;
-
-  c = (unsigned char) c_in;
-
-  /* Handle the first few bytes by reading one byte at a time.
-     Do this until CHAR_PTR is aligned on a longword boundary.  */
-  for (char_ptr = (const unsigned char *) s;
-       (size_t) char_ptr % sizeof (longword) != 0;
-       ++char_ptr)
-    if (*char_ptr == c)
-      return (void *) char_ptr;
-
-  longword_ptr = (const longword *) char_ptr;
-
-  /* All these elucidatory comments refer to 4-byte longwords,
-     but the theory applies equally well to any size longwords.  */
-
-  /* Compute auxiliary longword values:
-     repeated_one is a value which has a 1 in every byte.
-     repeated_c has c in every byte.  */
-  repeated_one = 0x01010101;
-  repeated_c = c | (c << 8);
-  repeated_c |= repeated_c << 16;
-  if (0xffffffffU < (longword) -1)
-    {
-      repeated_one |= repeated_one << 31 << 1;
-      repeated_c |= repeated_c << 31 << 1;
-      if (8 < sizeof (longword))
-        {
-          size_t i;
-
-          for (i = 64; i < sizeof (longword) * 8; i *= 2)
-            {
-              repeated_one |= repeated_one << i;
-              repeated_c |= repeated_c << i;
-            }
-        }
-    }
-
-  /* Instead of the traditional loop which tests each byte, we will
-     test a longword at a time.  The tricky part is testing if *any of
-     the four* bytes in the longword in question are equal to NUL or
-     c.  We first use an xor with repeated_c.  This reduces the task
-     to testing whether *any of the four* bytes in longword1 is zero.
-
-     We compute tmp =
-       ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7).
-     That is, we perform the following operations:
-       1. Subtract repeated_one.
-       2. & ~longword1.
-       3. & a mask consisting of 0x80 in every byte.
-     Consider what happens in each byte:
-       - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff,
-         and step 3 transforms it into 0x80.  A carry can also be propagated
-         to more significant bytes.
-       - If a byte of longword1 is nonzero, let its lowest 1 bit be at
-         position k (0 <= k <= 7); so the lowest k bits are 0.  After step 1,
-         the byte ends in a single bit of value 0 and k bits of value 1.
-         After step 2, the result is just k bits of value 1: 2^k - 1.  After
-         step 3, the result is 0.  And no carry is produced.
-     So, if longword1 has only non-zero bytes, tmp is zero.
-     Whereas if longword1 has a zero byte, call j the position of the least
-     significant zero byte.  Then the result has a zero at positions 0, ...,
-     j-1 and a 0x80 at position j.  We cannot predict the result at the more
-     significant bytes (positions j+1..3), but it does not matter since we
-     already have a non-zero bit at position 8*j+7.
-
-     The test whether any byte in longword1 is zero is equivalent
-     to testing whether tmp is nonzero.
-
-     This test can read beyond the end of a string, depending on where
-     C_IN is encountered.  However, this is considered safe since the
-     initialization phase ensured that the read will be aligned,
-     therefore, the read will not cross page boundaries and will not
-     cause a fault.  */
-
-  while (1)
-    {
-      longword longword1 = *longword_ptr ^ repeated_c;
-
-      if ((((longword1 - repeated_one) & ~longword1)
-           & (repeated_one << 7)) != 0)
-        break;
-      longword_ptr++;
-    }
-
-  char_ptr = (const unsigned char *) longword_ptr;
-
-  /* At this point, we know that one of the sizeof (longword) bytes
-     starting at char_ptr is == c.  On little-endian machines, we
-     could determine the first such byte without any further memory
-     accesses, just by looking at the tmp result from the last loop
-     iteration.  But this does not work on big-endian machines.
-     Choose code that works in both cases.  */
-
-  char_ptr = (unsigned char *) longword_ptr;
-  while (*char_ptr != c)
-    char_ptr++;
-  return (void *) char_ptr;
-}
diff --git a/lib/rawmemchr.valgrind b/lib/rawmemchr.valgrind
deleted file mode 100644 (file)
index 6363923..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# Suppress a valgrind message about use of uninitialized memory in rawmemchr().
-# This use is OK because it provides only a speedup.
-{
-    rawmemchr-value4
-    Memcheck:Value4
-    fun:rawmemchr
-}
-{
-    rawmemchr-value8
-    Memcheck:Value8
-    fun:rawmemchr
-}
diff --git a/lib/readlink.c b/lib/readlink.c
deleted file mode 100644 (file)
index 5cccdc9..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Stub for readlink().
-   Copyright (C) 2003-2007 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 <sys/types.h>
-#include <sys/stat.h>
-#include <stddef.h>
-
-#if !HAVE_READLINK
-
-/* readlink() substitute for systems that don't have a readlink() function,
-   such as DJGPP 2.03 and mingw32.  */
-
-/* The official POSIX return type of readlink() is ssize_t, but since here
-   we have no declaration in a public header file, we use 'int' as return
-   type.  */
-
-int
-readlink (const char *path, char *buf, size_t bufsize)
-{
-  struct stat statbuf;
-
-  /* In general we should use lstat() here, not stat().  But on platforms
-     without symbolic links lstat() - if it exists - would be equivalent to
-     stat(), therefore we can use stat().  This saves us a configure check.  */
-  if (stat (path, &statbuf) >= 0)
-    errno = EINVAL;
-  return -1;
-}
-
-#endif
diff --git a/lib/realloc.c b/lib/realloc.c
deleted file mode 100644 (file)
index b61c2ca..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/* realloc() function that is glibc compatible.
-
-   Copyright (C) 1997, 2003, 2004, 2006, 2007 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 and Bruno Haible */
-
-#include <config.h>
-
-/* Only the AC_FUNC_REALLOC macro defines 'realloc' already in config.h.  */
-#ifdef realloc
-# define NEED_REALLOC_GNU 1
-#endif
-
-/* Infer the properties of the system's malloc function.
-   Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h.  */
-#if GNULIB_MALLOC_GNU && !defined malloc
-# define SYSTEM_MALLOC_GLIBC_COMPATIBLE 1
-#endif
-
-/* Below we want to call the system's malloc and realloc.
-   Undefine the symbols here so that including <stdlib.h> provides a
-   declaration of malloc(), not of rpl_malloc(), and likewise for realloc.  */
-#undef malloc
-#undef realloc
-
-/* Specification.  */
-#include <stdlib.h>
-
-#include <errno.h>
-
-/* Below we want to call the system's malloc and realloc.
-   Undefine the symbols, if they were defined by gnulib's <stdlib.h>
-   replacement.  */
-#undef malloc
-#undef realloc
-
-/* Change the size of an allocated block of memory P to N bytes,
-   with error checking.  If N is zero, change it to 1.  If P is NULL,
-   use malloc.  */
-
-void *
-rpl_realloc (void *p, size_t n)
-{
-  void *result;
-
-#if NEED_REALLOC_GNU
-  if (n == 0)
-    {
-      n = 1;
-
-      /* In theory realloc might fail, so don't rely on it to free.  */
-      free (p);
-      p = NULL;
-    }
-#endif
-
-  if (p == NULL)
-    {
-#if GNULIB_REALLOC_GNU && !NEED_REALLOC_GNU && !SYSTEM_MALLOC_GLIBC_COMPATIBLE
-      if (n == 0)
-       n = 1;
-#endif
-      result = malloc (n);
-    }
-  else
-    result = realloc (p, n);
-
-#if !HAVE_REALLOC_POSIX
-  if (result == NULL)
-    errno = ENOMEM;
-#endif
-
-  return result;
-}
diff --git a/lib/ref-add.sin b/lib/ref-add.sin
deleted file mode 100644 (file)
index 222d752..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Add this package to a list of references stored in a text file.
-#
-#   Copyright (C) 2000 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, write to the Free Software Foundation,
-#   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# Written by Bruno Haible <haible@clisp.cons.org>.
-#
-/^# Packages using this file: / {
-  s/# Packages using this file://
-  ta
-  :a
-  s/ @PACKAGE@ / @PACKAGE@ /
-  tb
-  s/ $/ @PACKAGE@ /
-  :b
-  s/^/# Packages using this file:/
-}
diff --git a/lib/ref-del.sin b/lib/ref-del.sin
deleted file mode 100644 (file)
index 1bf073e..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# Remove this package from a list of references stored in a text file.
-#
-#   Copyright (C) 2000 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, write to the Free Software Foundation,
-#   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# Written by Bruno Haible <haible@clisp.cons.org>.
-#
-/^# Packages using this file: / {
-  s/# Packages using this file://
-  s/ @PACKAGE@ / /
-  s/^/# Packages using this file:/
-}
diff --git a/lib/regcomp.c b/lib/regcomp.c
deleted file mode 100644 (file)
index a4e3f2d..0000000
+++ /dev/null
@@ -1,3853 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Extended regular expression matching and search library.
-   Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009
-   Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Isamu Hasegawa <isamu@yamato.ibm.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.
-
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-
-static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern,
-                                         size_t length, reg_syntax_t syntax);
-static void re_compile_fastmap_iter (regex_t *bufp,
-                                    const re_dfastate_t *init_state,
-                                    char *fastmap);
-static reg_errcode_t init_dfa (re_dfa_t *dfa, size_t pat_len);
-#ifdef RE_ENABLE_I18N
-static void free_charset (re_charset_t *cset);
-#endif /* RE_ENABLE_I18N */
-static void free_workarea_compile (regex_t *preg);
-static reg_errcode_t create_initial_state (re_dfa_t *dfa);
-#ifdef RE_ENABLE_I18N
-static void optimize_utf8 (re_dfa_t *dfa);
-#endif
-static reg_errcode_t analyze (regex_t *preg);
-static reg_errcode_t preorder (bin_tree_t *root,
-                              reg_errcode_t (fn (void *, bin_tree_t *)),
-                              void *extra);
-static reg_errcode_t postorder (bin_tree_t *root,
-                               reg_errcode_t (fn (void *, bin_tree_t *)),
-                               void *extra);
-static reg_errcode_t optimize_subexps (void *extra, bin_tree_t *node);
-static reg_errcode_t lower_subexps (void *extra, bin_tree_t *node);
-static bin_tree_t *lower_subexp (reg_errcode_t *err, regex_t *preg,
-                                bin_tree_t *node);
-static reg_errcode_t calc_first (void *extra, bin_tree_t *node);
-static reg_errcode_t calc_next (void *extra, bin_tree_t *node);
-static reg_errcode_t link_nfa_nodes (void *extra, bin_tree_t *node);
-static Idx duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint);
-static Idx search_duplicated_node (const re_dfa_t *dfa, Idx org_node,
-                                  unsigned int constraint);
-static reg_errcode_t calc_eclosure (re_dfa_t *dfa);
-static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa,
-                                        Idx node, bool root);
-static reg_errcode_t calc_inveclosure (re_dfa_t *dfa);
-static Idx fetch_number (re_string_t *input, re_token_t *token,
-                        reg_syntax_t syntax);
-static int peek_token (re_token_t *token, re_string_t *input,
-                       reg_syntax_t syntax) internal_function;
-static bin_tree_t *parse (re_string_t *regexp, regex_t *preg,
-                         reg_syntax_t syntax, reg_errcode_t *err);
-static bin_tree_t *parse_reg_exp (re_string_t *regexp, regex_t *preg,
-                                 re_token_t *token, reg_syntax_t syntax,
-                                 Idx nest, reg_errcode_t *err);
-static bin_tree_t *parse_branch (re_string_t *regexp, regex_t *preg,
-                                re_token_t *token, reg_syntax_t syntax,
-                                Idx nest, reg_errcode_t *err);
-static bin_tree_t *parse_expression (re_string_t *regexp, regex_t *preg,
-                                    re_token_t *token, reg_syntax_t syntax,
-                                    Idx nest, reg_errcode_t *err);
-static bin_tree_t *parse_sub_exp (re_string_t *regexp, regex_t *preg,
-                                 re_token_t *token, reg_syntax_t syntax,
-                                 Idx nest, reg_errcode_t *err);
-static bin_tree_t *parse_dup_op (bin_tree_t *dup_elem, re_string_t *regexp,
-                                re_dfa_t *dfa, re_token_t *token,
-                                reg_syntax_t syntax, reg_errcode_t *err);
-static bin_tree_t *parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa,
-                                     re_token_t *token, reg_syntax_t syntax,
-                                     reg_errcode_t *err);
-static reg_errcode_t parse_bracket_element (bracket_elem_t *elem,
-                                           re_string_t *regexp,
-                                           re_token_t *token, int token_len,
-                                           re_dfa_t *dfa,
-                                           reg_syntax_t syntax,
-                                           bool accept_hyphen);
-static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem,
-                                         re_string_t *regexp,
-                                         re_token_t *token);
-#ifdef RE_ENABLE_I18N
-static reg_errcode_t build_equiv_class (bitset_t sbcset,
-                                       re_charset_t *mbcset,
-                                       Idx *equiv_class_alloc,
-                                       const unsigned char *name);
-static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans,
-                                     bitset_t sbcset,
-                                     re_charset_t *mbcset,
-                                     Idx *char_class_alloc,
-                                     const unsigned char *class_name,
-                                     reg_syntax_t syntax);
-#else  /* not RE_ENABLE_I18N */
-static reg_errcode_t build_equiv_class (bitset_t sbcset,
-                                       const unsigned char *name);
-static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans,
-                                     bitset_t sbcset,
-                                     const unsigned char *class_name,
-                                     reg_syntax_t syntax);
-#endif /* not RE_ENABLE_I18N */
-static bin_tree_t *build_charclass_op (re_dfa_t *dfa,
-                                      RE_TRANSLATE_TYPE trans,
-                                      const unsigned char *class_name,
-                                      const unsigned char *extra,
-                                      bool non_match, reg_errcode_t *err);
-static bin_tree_t *create_tree (re_dfa_t *dfa,
-                               bin_tree_t *left, bin_tree_t *right,
-                               re_token_type_t type);
-static bin_tree_t *create_token_tree (re_dfa_t *dfa,
-                                     bin_tree_t *left, bin_tree_t *right,
-                                     const re_token_t *token);
-static bin_tree_t *duplicate_tree (const bin_tree_t *src, re_dfa_t *dfa);
-static void free_token (re_token_t *node);
-static reg_errcode_t free_tree (void *extra, bin_tree_t *node);
-static reg_errcode_t mark_opt_subexp (void *extra, bin_tree_t *node);
-\f
-/* This table gives an error message for each of the error codes listed
-   in regex.h.  Obviously the order here has to be same as there.
-   POSIX doesn't require that we do anything for REG_NOERROR,
-   but why not be nice?  */
-
-static const char __re_error_msgid[] =
-  {
-#define REG_NOERROR_IDX        0
-    gettext_noop ("Success")   /* REG_NOERROR */
-    "\0"
-#define REG_NOMATCH_IDX (REG_NOERROR_IDX + sizeof "Success")
-    gettext_noop ("No match")  /* REG_NOMATCH */
-    "\0"
-#define REG_BADPAT_IDX (REG_NOMATCH_IDX + sizeof "No match")
-    gettext_noop ("Invalid regular expression") /* REG_BADPAT */
-    "\0"
-#define REG_ECOLLATE_IDX (REG_BADPAT_IDX + sizeof "Invalid regular expression")
-    gettext_noop ("Invalid collation character") /* REG_ECOLLATE */
-    "\0"
-#define REG_ECTYPE_IDX (REG_ECOLLATE_IDX + sizeof "Invalid collation character")
-    gettext_noop ("Invalid character class name") /* REG_ECTYPE */
-    "\0"
-#define REG_EESCAPE_IDX        (REG_ECTYPE_IDX + sizeof "Invalid character class name")
-    gettext_noop ("Trailing backslash") /* REG_EESCAPE */
-    "\0"
-#define REG_ESUBREG_IDX        (REG_EESCAPE_IDX + sizeof "Trailing backslash")
-    gettext_noop ("Invalid back reference") /* REG_ESUBREG */
-    "\0"
-#define REG_EBRACK_IDX (REG_ESUBREG_IDX + sizeof "Invalid back reference")
-    gettext_noop ("Unmatched [ or [^") /* REG_EBRACK */
-    "\0"
-#define REG_EPAREN_IDX (REG_EBRACK_IDX + sizeof "Unmatched [ or [^")
-    gettext_noop ("Unmatched ( or \\(") /* REG_EPAREN */
-    "\0"
-#define REG_EBRACE_IDX (REG_EPAREN_IDX + sizeof "Unmatched ( or \\(")
-    gettext_noop ("Unmatched \\{") /* REG_EBRACE */
-    "\0"
-#define REG_BADBR_IDX  (REG_EBRACE_IDX + sizeof "Unmatched \\{")
-    gettext_noop ("Invalid content of \\{\\}") /* REG_BADBR */
-    "\0"
-#define REG_ERANGE_IDX (REG_BADBR_IDX + sizeof "Invalid content of \\{\\}")
-    gettext_noop ("Invalid range end") /* REG_ERANGE */
-    "\0"
-#define REG_ESPACE_IDX (REG_ERANGE_IDX + sizeof "Invalid range end")
-    gettext_noop ("Memory exhausted") /* REG_ESPACE */
-    "\0"
-#define REG_BADRPT_IDX (REG_ESPACE_IDX + sizeof "Memory exhausted")
-    gettext_noop ("Invalid preceding regular expression") /* REG_BADRPT */
-    "\0"
-#define REG_EEND_IDX   (REG_BADRPT_IDX + sizeof "Invalid preceding regular expression")
-    gettext_noop ("Premature end of regular expression") /* REG_EEND */
-    "\0"
-#define REG_ESIZE_IDX  (REG_EEND_IDX + sizeof "Premature end of regular expression")
-    gettext_noop ("Regular expression too big") /* REG_ESIZE */
-    "\0"
-#define REG_ERPAREN_IDX        (REG_ESIZE_IDX + sizeof "Regular expression too big")
-    gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */
-  };
-
-static const size_t __re_error_msgid_idx[] =
-  {
-    REG_NOERROR_IDX,
-    REG_NOMATCH_IDX,
-    REG_BADPAT_IDX,
-    REG_ECOLLATE_IDX,
-    REG_ECTYPE_IDX,
-    REG_EESCAPE_IDX,
-    REG_ESUBREG_IDX,
-    REG_EBRACK_IDX,
-    REG_EPAREN_IDX,
-    REG_EBRACE_IDX,
-    REG_BADBR_IDX,
-    REG_ERANGE_IDX,
-    REG_ESPACE_IDX,
-    REG_BADRPT_IDX,
-    REG_EEND_IDX,
-    REG_ESIZE_IDX,
-    REG_ERPAREN_IDX
-  };
-\f
-/* Entry points for GNU code.  */
-
-/* re_compile_pattern is the GNU regular expression compiler: it
-   compiles PATTERN (of length LENGTH) and puts the result in BUFP.
-   Returns 0 if the pattern was valid, otherwise an error string.
-
-   Assumes the `allocated' (and perhaps `buffer') and `translate' fields
-   are set in BUFP on entry.  */
-
-#ifdef _LIBC
-const char *
-re_compile_pattern (pattern, length, bufp)
-    const char *pattern;
-    size_t length;
-    struct re_pattern_buffer *bufp;
-#else /* size_t might promote */
-const char *
-re_compile_pattern (const char *pattern, size_t length,
-                   struct re_pattern_buffer *bufp)
-#endif
-{
-  reg_errcode_t ret;
-
-  /* And GNU code determines whether or not to get register information
-     by passing null for the REGS argument to re_match, etc., not by
-     setting no_sub, unless RE_NO_SUB is set.  */
-  bufp->no_sub = !!(re_syntax_options & RE_NO_SUB);
-
-  /* Match anchors at newline.  */
-  bufp->newline_anchor = 1;
-
-  ret = re_compile_internal (bufp, pattern, length, re_syntax_options);
-
-  if (!ret)
-    return NULL;
-  return gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]);
-}
-#ifdef _LIBC
-weak_alias (__re_compile_pattern, re_compile_pattern)
-#endif
-
-/* Set by `re_set_syntax' to the current regexp syntax to recognize.  Can
-   also be assigned to arbitrarily: each pattern buffer stores its own
-   syntax, so it can be changed between regex compilations.  */
-/* This has no initializer because initialized variables in Emacs
-   become read-only after dumping.  */
-reg_syntax_t re_syntax_options;
-
-
-/* Specify the precise syntax of regexps for compilation.  This provides
-   for compatibility for various utilities which historically have
-   different, incompatible syntaxes.
-
-   The argument SYNTAX is a bit mask comprised of the various bits
-   defined in regex.h.  We return the old syntax.  */
-
-reg_syntax_t
-re_set_syntax (syntax)
-    reg_syntax_t syntax;
-{
-  reg_syntax_t ret = re_syntax_options;
-
-  re_syntax_options = syntax;
-  return ret;
-}
-#ifdef _LIBC
-weak_alias (__re_set_syntax, re_set_syntax)
-#endif
-
-int
-re_compile_fastmap (bufp)
-    struct re_pattern_buffer *bufp;
-{
-  re_dfa_t *dfa = (re_dfa_t *) bufp->buffer;
-  char *fastmap = bufp->fastmap;
-
-  memset (fastmap, '\0', sizeof (char) * SBC_MAX);
-  re_compile_fastmap_iter (bufp, dfa->init_state, fastmap);
-  if (dfa->init_state != dfa->init_state_word)
-    re_compile_fastmap_iter (bufp, dfa->init_state_word, fastmap);
-  if (dfa->init_state != dfa->init_state_nl)
-    re_compile_fastmap_iter (bufp, dfa->init_state_nl, fastmap);
-  if (dfa->init_state != dfa->init_state_begbuf)
-    re_compile_fastmap_iter (bufp, dfa->init_state_begbuf, fastmap);
-  bufp->fastmap_accurate = 1;
-  return 0;
-}
-#ifdef _LIBC
-weak_alias (__re_compile_fastmap, re_compile_fastmap)
-#endif
-
-static inline void
-__attribute ((always_inline))
-re_set_fastmap (char *fastmap, bool icase, int ch)
-{
-  fastmap[ch] = 1;
-  if (icase)
-    fastmap[tolower (ch)] = 1;
-}
-
-/* Helper function for re_compile_fastmap.
-   Compile fastmap for the initial_state INIT_STATE.  */
-
-static void
-re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state,
-                        char *fastmap)
-{
-  re_dfa_t *dfa = (re_dfa_t *) bufp->buffer;
-  Idx node_cnt;
-  bool icase = (dfa->mb_cur_max == 1 && (bufp->syntax & RE_ICASE));
-  for (node_cnt = 0; node_cnt < init_state->nodes.nelem; ++node_cnt)
-    {
-      Idx node = init_state->nodes.elems[node_cnt];
-      re_token_type_t type = dfa->nodes[node].type;
-
-      if (type == CHARACTER)
-       {
-         re_set_fastmap (fastmap, icase, dfa->nodes[node].opr.c);
-#ifdef RE_ENABLE_I18N
-         if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1)
-           {
-             unsigned char buf[MB_LEN_MAX];
-             unsigned char *p;
-             wchar_t wc;
-             mbstate_t state;
-
-             p = buf;
-             *p++ = dfa->nodes[node].opr.c;
-             while (++node < dfa->nodes_len
-                    && dfa->nodes[node].type == CHARACTER
-                    && dfa->nodes[node].mb_partial)
-               *p++ = dfa->nodes[node].opr.c;
-             memset (&state, '\0', sizeof (state));
-             if (__mbrtowc (&wc, (const char *) buf, p - buf,
-                            &state) == p - buf
-                 && (__wcrtomb ((char *) buf, towlower (wc), &state)
-                     != (size_t) -1))
-               re_set_fastmap (fastmap, false, buf[0]);
-           }
-#endif
-       }
-      else if (type == SIMPLE_BRACKET)
-       {
-         int i, ch;
-         for (i = 0, ch = 0; i < BITSET_WORDS; ++i)
-           {
-             int j;
-             bitset_word_t w = dfa->nodes[node].opr.sbcset[i];
-             for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch)
-               if (w & ((bitset_word_t) 1 << j))
-                 re_set_fastmap (fastmap, icase, ch);
-           }
-       }
-#ifdef RE_ENABLE_I18N
-      else if (type == COMPLEX_BRACKET)
-       {
-         re_charset_t *cset = dfa->nodes[node].opr.mbcset;
-         Idx i;
-
-# ifdef _LIBC
-         /* See if we have to try all bytes which start multiple collation
-            elements.
-            e.g. In da_DK, we want to catch 'a' since "aa" is a valid
-                 collation element, and don't catch 'b' since 'b' is
-                 the only collation element which starts from 'b' (and
-                 it is caught by SIMPLE_BRACKET).  */
-             if (_NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES) != 0
-                 && (cset->ncoll_syms || cset->nranges))
-               {
-                 const int32_t *table = (const int32_t *)
-                   _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
-                 for (i = 0; i < SBC_MAX; ++i)
-                   if (table[i] < 0)
-                     re_set_fastmap (fastmap, icase, i);
-               }
-# endif /* _LIBC */
-
-         /* See if we have to start the match at all multibyte characters,
-            i.e. where we would not find an invalid sequence.  This only
-            applies to multibyte character sets; for single byte character
-            sets, the SIMPLE_BRACKET again suffices.  */
-         if (dfa->mb_cur_max > 1
-             && (cset->nchar_classes || cset->non_match
-# ifdef _LIBC
-                 || cset->nequiv_classes
-# endif /* _LIBC */
-                ))
-           {
-             unsigned char c = 0;
-             do
-               {
-                 mbstate_t mbs;
-                 memset (&mbs, 0, sizeof (mbs));
-                 if (__mbrtowc (NULL, (char *) &c, 1, &mbs) == (size_t) -2)
-                   re_set_fastmap (fastmap, false, (int) c);
-               }
-             while (++c != 0);
-           }
-
-         else
-           {
-             /* ... Else catch all bytes which can start the mbchars.  */
-             for (i = 0; i < cset->nmbchars; ++i)
-               {
-                 char buf[256];
-                 mbstate_t state;
-                 memset (&state, '\0', sizeof (state));
-                 if (__wcrtomb (buf, cset->mbchars[i], &state) != (size_t) -1)
-                   re_set_fastmap (fastmap, icase, *(unsigned char *) buf);
-                 if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1)
-                   {
-                     if (__wcrtomb (buf, towlower (cset->mbchars[i]), &state)
-                         != (size_t) -1)
-                       re_set_fastmap (fastmap, false, *(unsigned char *) buf);
-                   }
-               }
-           }
-       }
-#endif /* RE_ENABLE_I18N */
-      else if (type == OP_PERIOD
-#ifdef RE_ENABLE_I18N
-              || type == OP_UTF8_PERIOD
-#endif /* RE_ENABLE_I18N */
-              || type == END_OF_RE)
-       {
-         memset (fastmap, '\1', sizeof (char) * SBC_MAX);
-         if (type == END_OF_RE)
-           bufp->can_be_null = 1;
-         return;
-       }
-    }
-}
-\f
-/* Entry point for POSIX code.  */
-/* regcomp takes a regular expression as a string and compiles it.
-
-   PREG is a regex_t *.  We do not expect any fields to be initialized,
-   since POSIX says we shouldn't.  Thus, we set
-
-     `buffer' to the compiled pattern;
-     `used' to the length of the compiled pattern;
-     `syntax' to RE_SYNTAX_POSIX_EXTENDED if the
-       REG_EXTENDED bit in CFLAGS is set; otherwise, to
-       RE_SYNTAX_POSIX_BASIC;
-     `newline_anchor' to REG_NEWLINE being set in CFLAGS;
-     `fastmap' to an allocated space for the fastmap;
-     `fastmap_accurate' to zero;
-     `re_nsub' to the number of subexpressions in PATTERN.
-
-   PATTERN is the address of the pattern string.
-
-   CFLAGS is a series of bits which affect compilation.
-
-     If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we
-     use POSIX basic syntax.
-
-     If REG_NEWLINE is set, then . and [^...] don't match newline.
-     Also, regexec will try a match beginning after every newline.
-
-     If REG_ICASE is set, then we considers upper- and lowercase
-     versions of letters to be equivalent when matching.
-
-     If REG_NOSUB is set, then when PREG is passed to regexec, that
-     routine will report only success or failure, and nothing about the
-     registers.
-
-   It returns 0 if it succeeds, nonzero if it doesn't.  (See regex.h for
-   the return codes and their meanings.)  */
-
-int
-regcomp (preg, pattern, cflags)
-    regex_t *_Restrict_ preg;
-    const char *_Restrict_ pattern;
-    int cflags;
-{
-  reg_errcode_t ret;
-  reg_syntax_t syntax = ((cflags & REG_EXTENDED) ? RE_SYNTAX_POSIX_EXTENDED
-                        : RE_SYNTAX_POSIX_BASIC);
-
-  preg->buffer = NULL;
-  preg->allocated = 0;
-  preg->used = 0;
-
-  /* Try to allocate space for the fastmap.  */
-  preg->fastmap = re_malloc (char, SBC_MAX);
-  if (BE (preg->fastmap == NULL, 0))
-    return REG_ESPACE;
-
-  syntax |= (cflags & REG_ICASE) ? RE_ICASE : 0;
-
-  /* If REG_NEWLINE is set, newlines are treated differently.  */
-  if (cflags & REG_NEWLINE)
-    { /* REG_NEWLINE implies neither . nor [^...] match newline.  */
-      syntax &= ~RE_DOT_NEWLINE;
-      syntax |= RE_HAT_LISTS_NOT_NEWLINE;
-      /* It also changes the matching behavior.  */
-      preg->newline_anchor = 1;
-    }
-  else
-    preg->newline_anchor = 0;
-  preg->no_sub = !!(cflags & REG_NOSUB);
-  preg->translate = NULL;
-
-  ret = re_compile_internal (preg, pattern, strlen (pattern), syntax);
-
-  /* POSIX doesn't distinguish between an unmatched open-group and an
-     unmatched close-group: both are REG_EPAREN.  */
-  if (ret == REG_ERPAREN)
-    ret = REG_EPAREN;
-
-  /* We have already checked preg->fastmap != NULL.  */
-  if (BE (ret == REG_NOERROR, 1))
-    /* Compute the fastmap now, since regexec cannot modify the pattern
-       buffer.  This function never fails in this implementation.  */
-    (void) re_compile_fastmap (preg);
-  else
-    {
-      /* Some error occurred while compiling the expression.  */
-      re_free (preg->fastmap);
-      preg->fastmap = NULL;
-    }
-
-  return (int) ret;
-}
-#ifdef _LIBC
-weak_alias (__regcomp, regcomp)
-#endif
-
-/* Returns a message corresponding to an error code, ERRCODE, returned
-   from either regcomp or regexec.   We don't use PREG here.  */
-
-#ifdef _LIBC
-size_t
-regerror (errcode, preg, errbuf, errbuf_size)
-    int errcode;
-    const regex_t *_Restrict_ preg;
-    char *_Restrict_ errbuf;
-    size_t errbuf_size;
-#else /* size_t might promote */
-size_t
-regerror (int errcode, const regex_t *_Restrict_ preg,
-         char *_Restrict_ errbuf, size_t errbuf_size)
-#endif
-{
-  const char *msg;
-  size_t msg_size;
-
-  if (BE (errcode < 0
-         || errcode >= (int) (sizeof (__re_error_msgid_idx)
-                              / sizeof (__re_error_msgid_idx[0])), 0))
-    /* Only error codes returned by the rest of the code should be passed
-       to this routine.  If we are given anything else, or if other regex
-       code generates an invalid error code, then the program has a bug.
-       Dump core so we can fix it.  */
-    abort ();
-
-  msg = gettext (__re_error_msgid + __re_error_msgid_idx[errcode]);
-
-  msg_size = strlen (msg) + 1; /* Includes the null.  */
-
-  if (BE (errbuf_size != 0, 1))
-    {
-      size_t cpy_size = msg_size;
-      if (BE (msg_size > errbuf_size, 0))
-       {
-         cpy_size = errbuf_size - 1;
-         errbuf[cpy_size] = '\0';
-       }
-      memcpy (errbuf, msg, cpy_size);
-    }
-
-  return msg_size;
-}
-#ifdef _LIBC
-weak_alias (__regerror, regerror)
-#endif
-
-
-#ifdef RE_ENABLE_I18N
-/* This static array is used for the map to single-byte characters when
-   UTF-8 is used.  Otherwise we would allocate memory just to initialize
-   it the same all the time.  UTF-8 is the preferred encoding so this is
-   a worthwhile optimization.  */
-static const bitset_t utf8_sb_map =
-{
-  /* Set the first 128 bits.  */
-# if 4 * BITSET_WORD_BITS < ASCII_CHARS
-#  error "bitset_word_t is narrower than 32 bits"
-# elif 3 * BITSET_WORD_BITS < ASCII_CHARS
-  BITSET_WORD_MAX, BITSET_WORD_MAX, BITSET_WORD_MAX,
-# elif 2 * BITSET_WORD_BITS < ASCII_CHARS
-  BITSET_WORD_MAX, BITSET_WORD_MAX,
-# elif 1 * BITSET_WORD_BITS < ASCII_CHARS
-  BITSET_WORD_MAX,
-# endif
-  (BITSET_WORD_MAX
-   >> (SBC_MAX % BITSET_WORD_BITS == 0
-       ? 0
-       : BITSET_WORD_BITS - SBC_MAX % BITSET_WORD_BITS))
-};
-#endif
-
-
-static void
-free_dfa_content (re_dfa_t *dfa)
-{
-  Idx i, j;
-
-  if (dfa->nodes)
-    for (i = 0; i < dfa->nodes_len; ++i)
-      free_token (dfa->nodes + i);
-  re_free (dfa->nexts);
-  for (i = 0; i < dfa->nodes_len; ++i)
-    {
-      if (dfa->eclosures != NULL)
-       re_node_set_free (dfa->eclosures + i);
-      if (dfa->inveclosures != NULL)
-       re_node_set_free (dfa->inveclosures + i);
-      if (dfa->edests != NULL)
-       re_node_set_free (dfa->edests + i);
-    }
-  re_free (dfa->edests);
-  re_free (dfa->eclosures);
-  re_free (dfa->inveclosures);
-  re_free (dfa->nodes);
-
-  if (dfa->state_table)
-    for (i = 0; i <= dfa->state_hash_mask; ++i)
-      {
-       struct re_state_table_entry *entry = dfa->state_table + i;
-       for (j = 0; j < entry->num; ++j)
-         {
-           re_dfastate_t *state = entry->array[j];
-           free_state (state);
-         }
-        re_free (entry->array);
-      }
-  re_free (dfa->state_table);
-#ifdef RE_ENABLE_I18N
-  if (dfa->sb_char != utf8_sb_map)
-    re_free (dfa->sb_char);
-#endif
-  re_free (dfa->subexp_map);
-#ifdef DEBUG
-  re_free (dfa->re_str);
-#endif
-
-  re_free (dfa);
-}
-
-
-/* Free dynamically allocated space used by PREG.  */
-
-void
-regfree (preg)
-    regex_t *preg;
-{
-  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
-  if (BE (dfa != NULL, 1))
-    free_dfa_content (dfa);
-  preg->buffer = NULL;
-  preg->allocated = 0;
-
-  re_free (preg->fastmap);
-  preg->fastmap = NULL;
-
-  re_free (preg->translate);
-  preg->translate = NULL;
-}
-#ifdef _LIBC
-weak_alias (__regfree, regfree)
-#endif
-\f
-/* Entry points compatible with 4.2 BSD regex library.  We don't define
-   them unless specifically requested.  */
-
-#if defined _REGEX_RE_COMP || defined _LIBC
-
-/* BSD has one and only one pattern buffer.  */
-static struct re_pattern_buffer re_comp_buf;
-
-char *
-# ifdef _LIBC
-/* Make these definitions weak in libc, so POSIX programs can redefine
-   these names if they don't use our functions, and still use
-   regcomp/regexec above without link errors.  */
-weak_function
-# endif
-re_comp (s)
-     const char *s;
-{
-  reg_errcode_t ret;
-  char *fastmap;
-
-  if (!s)
-    {
-      if (!re_comp_buf.buffer)
-       return gettext ("No previous regular expression");
-      return 0;
-    }
-
-  if (re_comp_buf.buffer)
-    {
-      fastmap = re_comp_buf.fastmap;
-      re_comp_buf.fastmap = NULL;
-      __regfree (&re_comp_buf);
-      memset (&re_comp_buf, '\0', sizeof (re_comp_buf));
-      re_comp_buf.fastmap = fastmap;
-    }
-
-  if (re_comp_buf.fastmap == NULL)
-    {
-      re_comp_buf.fastmap = (char *) malloc (SBC_MAX);
-      if (re_comp_buf.fastmap == NULL)
-       return (char *) gettext (__re_error_msgid
-                                + __re_error_msgid_idx[(int) REG_ESPACE]);
-    }
-
-  /* Since `re_exec' always passes NULL for the `regs' argument, we
-     don't need to initialize the pattern buffer fields which affect it.  */
-
-  /* Match anchors at newlines.  */
-  re_comp_buf.newline_anchor = 1;
-
-  ret = re_compile_internal (&re_comp_buf, s, strlen (s), re_syntax_options);
-
-  if (!ret)
-    return NULL;
-
-  /* Yes, we're discarding `const' here if !HAVE_LIBINTL.  */
-  return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]);
-}
-
-#ifdef _LIBC
-libc_freeres_fn (free_mem)
-{
-  __regfree (&re_comp_buf);
-}
-#endif
-
-#endif /* _REGEX_RE_COMP */
-\f
-/* Internal entry point.
-   Compile the regular expression PATTERN, whose length is LENGTH.
-   SYNTAX indicate regular expression's syntax.  */
-
-static reg_errcode_t
-re_compile_internal (regex_t *preg, const char * pattern, size_t length,
-                    reg_syntax_t syntax)
-{
-  reg_errcode_t err = REG_NOERROR;
-  re_dfa_t *dfa;
-  re_string_t regexp;
-
-  /* Initialize the pattern buffer.  */
-  preg->fastmap_accurate = 0;
-  preg->syntax = syntax;
-  preg->not_bol = preg->not_eol = 0;
-  preg->used = 0;
-  preg->re_nsub = 0;
-  preg->can_be_null = 0;
-  preg->regs_allocated = REGS_UNALLOCATED;
-
-  /* Initialize the dfa.  */
-  dfa = (re_dfa_t *) preg->buffer;
-  if (BE (preg->allocated < sizeof (re_dfa_t), 0))
-    {
-      /* If zero allocated, but buffer is non-null, try to realloc
-        enough space.  This loses if buffer's address is bogus, but
-        that is the user's responsibility.  If ->buffer is NULL this
-        is a simple allocation.  */
-      dfa = re_realloc (preg->buffer, re_dfa_t, 1);
-      if (dfa == NULL)
-       return REG_ESPACE;
-      preg->allocated = sizeof (re_dfa_t);
-      preg->buffer = (unsigned char *) dfa;
-    }
-  preg->used = sizeof (re_dfa_t);
-
-  err = init_dfa (dfa, length);
-  if (BE (err != REG_NOERROR, 0))
-    {
-      free_dfa_content (dfa);
-      preg->buffer = NULL;
-      preg->allocated = 0;
-      return err;
-    }
-#ifdef DEBUG
-  /* Note: length+1 will not overflow since it is checked in init_dfa.  */
-  dfa->re_str = re_malloc (char, length + 1);
-  strncpy (dfa->re_str, pattern, length + 1);
-#endif
-
-  __libc_lock_init (dfa->lock);
-
-  err = re_string_construct (&regexp, pattern, length, preg->translate,
-                            (syntax & RE_ICASE) != 0, dfa);
-  if (BE (err != REG_NOERROR, 0))
-    {
-    re_compile_internal_free_return:
-      free_workarea_compile (preg);
-      re_string_destruct (&regexp);
-      free_dfa_content (dfa);
-      preg->buffer = NULL;
-      preg->allocated = 0;
-      return err;
-    }
-
-  /* Parse the regular expression, and build a structure tree.  */
-  preg->re_nsub = 0;
-  dfa->str_tree = parse (&regexp, preg, syntax, &err);
-  if (BE (dfa->str_tree == NULL, 0))
-    goto re_compile_internal_free_return;
-
-  /* Analyze the tree and create the nfa.  */
-  err = analyze (preg);
-  if (BE (err != REG_NOERROR, 0))
-    goto re_compile_internal_free_return;
-
-#ifdef RE_ENABLE_I18N
-  /* If possible, do searching in single byte encoding to speed things up.  */
-  if (dfa->is_utf8 && !(syntax & RE_ICASE) && preg->translate == NULL)
-    optimize_utf8 (dfa);
-#endif
-
-  /* Then create the initial state of the dfa.  */
-  err = create_initial_state (dfa);
-
-  /* Release work areas.  */
-  free_workarea_compile (preg);
-  re_string_destruct (&regexp);
-
-  if (BE (err != REG_NOERROR, 0))
-    {
-      free_dfa_content (dfa);
-      preg->buffer = NULL;
-      preg->allocated = 0;
-    }
-
-  return err;
-}
-
-/* Initialize DFA.  We use the length of the regular expression PAT_LEN
-   as the initial length of some arrays.  */
-
-static reg_errcode_t
-init_dfa (re_dfa_t *dfa, size_t pat_len)
-{
-  __re_size_t table_size;
-#ifdef RE_ENABLE_I18N
-  size_t max_i18n_object_size = MAX (sizeof (wchar_t), sizeof (wctype_t));
-#else
-  size_t max_i18n_object_size = 0;
-#endif
-  size_t max_object_size =
-    MAX (sizeof (struct re_state_table_entry),
-        MAX (sizeof (re_token_t),
-             MAX (sizeof (re_node_set),
-                  MAX (sizeof (regmatch_t),
-                       max_i18n_object_size))));
-
-  memset (dfa, '\0', sizeof (re_dfa_t));
-
-  /* Force allocation of str_tree_storage the first time.  */
-  dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE;
-
-  /* Avoid overflows.  The extra "/ 2" is for the table_size doubling
-     calculation below, and for similar doubling calculations
-     elsewhere.  And it's <= rather than <, because some of the
-     doubling calculations add 1 afterwards.  */
-  if (BE (SIZE_MAX / max_object_size / 2 <= pat_len, 0))
-    return REG_ESPACE;
-
-  dfa->nodes_alloc = pat_len + 1;
-  dfa->nodes = re_malloc (re_token_t, dfa->nodes_alloc);
-
-  /*  table_size = 2 ^ ceil(log pat_len) */
-  for (table_size = 1; ; table_size <<= 1)
-    if (table_size > pat_len)
-      break;
-
-  dfa->state_table = calloc (sizeof (struct re_state_table_entry), table_size);
-  dfa->state_hash_mask = table_size - 1;
-
-  dfa->mb_cur_max = MB_CUR_MAX;
-#ifdef _LIBC
-  if (dfa->mb_cur_max == 6
-      && strcmp (_NL_CURRENT (LC_CTYPE, _NL_CTYPE_CODESET_NAME), "UTF-8") == 0)
-    dfa->is_utf8 = 1;
-  dfa->map_notascii = (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_TO_NONASCII)
-                      != 0);
-#else
-  if (strcmp (locale_charset (), "UTF-8") == 0)
-    dfa->is_utf8 = 1;
-
-  /* We check exhaustively in the loop below if this charset is a
-     superset of ASCII.  */
-  dfa->map_notascii = 0;
-#endif
-
-#ifdef RE_ENABLE_I18N
-  if (dfa->mb_cur_max > 1)
-    {
-      if (dfa->is_utf8)
-       dfa->sb_char = (re_bitset_ptr_t) utf8_sb_map;
-      else
-       {
-         int i, j, ch;
-
-         dfa->sb_char = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1);
-         if (BE (dfa->sb_char == NULL, 0))
-           return REG_ESPACE;
-
-         /* Set the bits corresponding to single byte chars.  */
-         for (i = 0, ch = 0; i < BITSET_WORDS; ++i)
-           for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch)
-             {
-               wint_t wch = __btowc (ch);
-               if (wch != WEOF)
-                 dfa->sb_char[i] |= (bitset_word_t) 1 << j;
-# ifndef _LIBC
-               if (isascii (ch) && wch != ch)
-                 dfa->map_notascii = 1;
-# endif
-             }
-       }
-    }
-#endif
-
-  if (BE (dfa->nodes == NULL || dfa->state_table == NULL, 0))
-    return REG_ESPACE;
-  return REG_NOERROR;
-}
-
-/* Initialize WORD_CHAR table, which indicate which character is
-   "word".  In this case "word" means that it is the word construction
-   character used by some operators like "\<", "\>", etc.  */
-
-static void
-internal_function
-init_word_char (re_dfa_t *dfa)
-{
-  int i, j, ch;
-  dfa->word_ops_used = 1;
-  for (i = 0, ch = 0; i < BITSET_WORDS; ++i)
-    for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch)
-      if (isalnum (ch) || ch == '_')
-       dfa->word_char[i] |= (bitset_word_t) 1 << j;
-}
-
-/* Free the work area which are only used while compiling.  */
-
-static void
-free_workarea_compile (regex_t *preg)
-{
-  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
-  bin_tree_storage_t *storage, *next;
-  for (storage = dfa->str_tree_storage; storage; storage = next)
-    {
-      next = storage->next;
-      re_free (storage);
-    }
-  dfa->str_tree_storage = NULL;
-  dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE;
-  dfa->str_tree = NULL;
-  re_free (dfa->org_indices);
-  dfa->org_indices = NULL;
-}
-
-/* Create initial states for all contexts.  */
-
-static reg_errcode_t
-create_initial_state (re_dfa_t *dfa)
-{
-  Idx first, i;
-  reg_errcode_t err;
-  re_node_set init_nodes;
-
-  /* Initial states have the epsilon closure of the node which is
-     the first node of the regular expression.  */
-  first = dfa->str_tree->first->node_idx;
-  dfa->init_node = first;
-  err = re_node_set_init_copy (&init_nodes, dfa->eclosures + first);
-  if (BE (err != REG_NOERROR, 0))
-    return err;
-
-  /* The back-references which are in initial states can epsilon transit,
-     since in this case all of the subexpressions can be null.
-     Then we add epsilon closures of the nodes which are the next nodes of
-     the back-references.  */
-  if (dfa->nbackref > 0)
-    for (i = 0; i < init_nodes.nelem; ++i)
-      {
-       Idx node_idx = init_nodes.elems[i];
-       re_token_type_t type = dfa->nodes[node_idx].type;
-
-       Idx clexp_idx;
-       if (type != OP_BACK_REF)
-         continue;
-       for (clexp_idx = 0; clexp_idx < init_nodes.nelem; ++clexp_idx)
-         {
-           re_token_t *clexp_node;
-           clexp_node = dfa->nodes + init_nodes.elems[clexp_idx];
-           if (clexp_node->type == OP_CLOSE_SUBEXP
-               && clexp_node->opr.idx == dfa->nodes[node_idx].opr.idx)
-             break;
-         }
-       if (clexp_idx == init_nodes.nelem)
-         continue;
-
-       if (type == OP_BACK_REF)
-         {
-           Idx dest_idx = dfa->edests[node_idx].elems[0];
-           if (!re_node_set_contains (&init_nodes, dest_idx))
-             {
-               re_node_set_merge (&init_nodes, dfa->eclosures + dest_idx);
-               i = 0;
-             }
-         }
-      }
-
-  /* It must be the first time to invoke acquire_state.  */
-  dfa->init_state = re_acquire_state_context (&err, dfa, &init_nodes, 0);
-  /* We don't check ERR here, since the initial state must not be NULL.  */
-  if (BE (dfa->init_state == NULL, 0))
-    return err;
-  if (dfa->init_state->has_constraint)
-    {
-      dfa->init_state_word = re_acquire_state_context (&err, dfa, &init_nodes,
-                                                      CONTEXT_WORD);
-      dfa->init_state_nl = re_acquire_state_context (&err, dfa, &init_nodes,
-                                                    CONTEXT_NEWLINE);
-      dfa->init_state_begbuf = re_acquire_state_context (&err, dfa,
-                                                        &init_nodes,
-                                                        CONTEXT_NEWLINE
-                                                        | CONTEXT_BEGBUF);
-      if (BE (dfa->init_state_word == NULL || dfa->init_state_nl == NULL
-             || dfa->init_state_begbuf == NULL, 0))
-       return err;
-    }
-  else
-    dfa->init_state_word = dfa->init_state_nl
-      = dfa->init_state_begbuf = dfa->init_state;
-
-  re_node_set_free (&init_nodes);
-  return REG_NOERROR;
-}
-\f
-#ifdef RE_ENABLE_I18N
-/* If it is possible to do searching in single byte encoding instead of UTF-8
-   to speed things up, set dfa->mb_cur_max to 1, clear is_utf8 and change
-   DFA nodes where needed.  */
-
-static void
-optimize_utf8 (re_dfa_t *dfa)
-{
-  Idx node;
-  int i;
-  bool mb_chars = false;
-  bool has_period = false;
-
-  for (node = 0; node < dfa->nodes_len; ++node)
-    switch (dfa->nodes[node].type)
-      {
-      case CHARACTER:
-       if (dfa->nodes[node].opr.c >= ASCII_CHARS)
-         mb_chars = true;
-       break;
-      case ANCHOR:
-       switch (dfa->nodes[node].opr.ctx_type)
-         {
-         case LINE_FIRST:
-         case LINE_LAST:
-         case BUF_FIRST:
-         case BUF_LAST:
-           break;
-         default:
-           /* Word anchors etc. cannot be handled.  It's okay to test
-              opr.ctx_type since constraints (for all DFA nodes) are
-              created by ORing one or more opr.ctx_type values.  */
-           return;
-         }
-       break;
-      case OP_PERIOD:
-        has_period = true;
-        break;
-      case OP_BACK_REF:
-      case OP_ALT:
-      case END_OF_RE:
-      case OP_DUP_ASTERISK:
-      case OP_OPEN_SUBEXP:
-      case OP_CLOSE_SUBEXP:
-       break;
-      case COMPLEX_BRACKET:
-       return;
-      case SIMPLE_BRACKET:
-       /* Just double check.  */
-       {
-         int rshift = (ASCII_CHARS % BITSET_WORD_BITS == 0
-                       ? 0
-                       : BITSET_WORD_BITS - ASCII_CHARS % BITSET_WORD_BITS);
-         for (i = ASCII_CHARS / BITSET_WORD_BITS; i < BITSET_WORDS; ++i)
-           {
-             if (dfa->nodes[node].opr.sbcset[i] >> rshift != 0)
-               return;
-             rshift = 0;
-           }
-       }
-       break;
-      default:
-       abort ();
-      }
-
-  if (mb_chars || has_period)
-    for (node = 0; node < dfa->nodes_len; ++node)
-      {
-       if (dfa->nodes[node].type == CHARACTER
-           && dfa->nodes[node].opr.c >= ASCII_CHARS)
-         dfa->nodes[node].mb_partial = 0;
-       else if (dfa->nodes[node].type == OP_PERIOD)
-         dfa->nodes[node].type = OP_UTF8_PERIOD;
-      }
-
-  /* The search can be in single byte locale.  */
-  dfa->mb_cur_max = 1;
-  dfa->is_utf8 = 0;
-  dfa->has_mb_node = dfa->nbackref > 0 || has_period;
-}
-#endif
-\f
-/* Analyze the structure tree, and calculate "first", "next", "edest",
-   "eclosure", and "inveclosure".  */
-
-static reg_errcode_t
-analyze (regex_t *preg)
-{
-  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
-  reg_errcode_t ret;
-
-  /* Allocate arrays.  */
-  dfa->nexts = re_malloc (Idx, dfa->nodes_alloc);
-  dfa->org_indices = re_malloc (Idx, dfa->nodes_alloc);
-  dfa->edests = re_malloc (re_node_set, dfa->nodes_alloc);
-  dfa->eclosures = re_malloc (re_node_set, dfa->nodes_alloc);
-  if (BE (dfa->nexts == NULL || dfa->org_indices == NULL || dfa->edests == NULL
-         || dfa->eclosures == NULL, 0))
-    return REG_ESPACE;
-
-  dfa->subexp_map = re_malloc (Idx, preg->re_nsub);
-  if (dfa->subexp_map != NULL)
-    {
-      Idx i;
-      for (i = 0; i < preg->re_nsub; i++)
-       dfa->subexp_map[i] = i;
-      preorder (dfa->str_tree, optimize_subexps, dfa);
-      for (i = 0; i < preg->re_nsub; i++)
-       if (dfa->subexp_map[i] != i)
-         break;
-      if (i == preg->re_nsub)
-       {
-         free (dfa->subexp_map);
-         dfa->subexp_map = NULL;
-       }
-    }
-
-  ret = postorder (dfa->str_tree, lower_subexps, preg);
-  if (BE (ret != REG_NOERROR, 0))
-    return ret;
-  ret = postorder (dfa->str_tree, calc_first, dfa);
-  if (BE (ret != REG_NOERROR, 0))
-    return ret;
-  preorder (dfa->str_tree, calc_next, dfa);
-  ret = preorder (dfa->str_tree, link_nfa_nodes, dfa);
-  if (BE (ret != REG_NOERROR, 0))
-    return ret;
-  ret = calc_eclosure (dfa);
-  if (BE (ret != REG_NOERROR, 0))
-    return ret;
-
-  /* We only need this during the prune_impossible_nodes pass in regexec.c;
-     skip it if p_i_n will not run, as calc_inveclosure can be quadratic.  */
-  if ((!preg->no_sub && preg->re_nsub > 0 && dfa->has_plural_match)
-      || dfa->nbackref)
-    {
-      dfa->inveclosures = re_malloc (re_node_set, dfa->nodes_len);
-      if (BE (dfa->inveclosures == NULL, 0))
-        return REG_ESPACE;
-      ret = calc_inveclosure (dfa);
-    }
-
-  return ret;
-}
-
-/* Our parse trees are very unbalanced, so we cannot use a stack to
-   implement parse tree visits.  Instead, we use parent pointers and
-   some hairy code in these two functions.  */
-static reg_errcode_t
-postorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)),
-          void *extra)
-{
-  bin_tree_t *node, *prev;
-
-  for (node = root; ; )
-    {
-      /* Descend down the tree, preferably to the left (or to the right
-        if that's the only child).  */
-      while (node->left || node->right)
-       if (node->left)
-          node = node->left;
-        else
-          node = node->right;
-
-      do
-       {
-         reg_errcode_t err = fn (extra, node);
-         if (BE (err != REG_NOERROR, 0))
-           return err;
-          if (node->parent == NULL)
-           return REG_NOERROR;
-         prev = node;
-         node = node->parent;
-       }
-      /* Go up while we have a node that is reached from the right.  */
-      while (node->right == prev || node->right == NULL);
-      node = node->right;
-    }
-}
-
-static reg_errcode_t
-preorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)),
-         void *extra)
-{
-  bin_tree_t *node;
-
-  for (node = root; ; )
-    {
-      reg_errcode_t err = fn (extra, node);
-      if (BE (err != REG_NOERROR, 0))
-       return err;
-
-      /* Go to the left node, or up and to the right.  */
-      if (node->left)
-       node = node->left;
-      else
-       {
-         bin_tree_t *prev = NULL;
-         while (node->right == prev || node->right == NULL)
-           {
-             prev = node;
-             node = node->parent;
-             if (!node)
-               return REG_NOERROR;
-           }
-         node = node->right;
-       }
-    }
-}
-
-/* Optimization pass: if a SUBEXP is entirely contained, strip it and tell
-   re_search_internal to map the inner one's opr.idx to this one's.  Adjust
-   backreferences as well.  Requires a preorder visit.  */
-static reg_errcode_t
-optimize_subexps (void *extra, bin_tree_t *node)
-{
-  re_dfa_t *dfa = (re_dfa_t *) extra;
-
-  if (node->token.type == OP_BACK_REF && dfa->subexp_map)
-    {
-      int idx = node->token.opr.idx;
-      node->token.opr.idx = dfa->subexp_map[idx];
-      dfa->used_bkref_map |= 1 << node->token.opr.idx;
-    }
-
-  else if (node->token.type == SUBEXP
-           && node->left && node->left->token.type == SUBEXP)
-    {
-      Idx other_idx = node->left->token.opr.idx;
-
-      node->left = node->left->left;
-      if (node->left)
-        node->left->parent = node;
-
-      dfa->subexp_map[other_idx] = dfa->subexp_map[node->token.opr.idx];
-      if (other_idx < BITSET_WORD_BITS)
-       dfa->used_bkref_map &= ~((bitset_word_t) 1 << other_idx);
-    }
-
-  return REG_NOERROR;
-}
-
-/* Lowering pass: Turn each SUBEXP node into the appropriate concatenation
-   of OP_OPEN_SUBEXP, the body of the SUBEXP (if any) and OP_CLOSE_SUBEXP.  */
-static reg_errcode_t
-lower_subexps (void *extra, bin_tree_t *node)
-{
-  regex_t *preg = (regex_t *) extra;
-  reg_errcode_t err = REG_NOERROR;
-
-  if (node->left && node->left->token.type == SUBEXP)
-    {
-      node->left = lower_subexp (&err, preg, node->left);
-      if (node->left)
-       node->left->parent = node;
-    }
-  if (node->right && node->right->token.type == SUBEXP)
-    {
-      node->right = lower_subexp (&err, preg, node->right);
-      if (node->right)
-       node->right->parent = node;
-    }
-
-  return err;
-}
-
-static bin_tree_t *
-lower_subexp (reg_errcode_t *err, regex_t *preg, bin_tree_t *node)
-{
-  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
-  bin_tree_t *body = node->left;
-  bin_tree_t *op, *cls, *tree1, *tree;
-
-  if (preg->no_sub
-      /* We do not optimize empty subexpressions, because otherwise we may
-        have bad CONCAT nodes with NULL children.  This is obviously not
-        very common, so we do not lose much.  An example that triggers
-        this case is the sed "script" /\(\)/x.  */
-      && node->left != NULL
-      && (node->token.opr.idx >= BITSET_WORD_BITS
-         || !(dfa->used_bkref_map
-              & ((bitset_word_t) 1 << node->token.opr.idx))))
-    return node->left;
-
-  /* Convert the SUBEXP node to the concatenation of an
-     OP_OPEN_SUBEXP, the contents, and an OP_CLOSE_SUBEXP.  */
-  op = create_tree (dfa, NULL, NULL, OP_OPEN_SUBEXP);
-  cls = create_tree (dfa, NULL, NULL, OP_CLOSE_SUBEXP);
-  tree1 = body ? create_tree (dfa, body, cls, CONCAT) : cls;
-  tree = create_tree (dfa, op, tree1, CONCAT);
-  if (BE (tree == NULL || tree1 == NULL || op == NULL || cls == NULL, 0))
-    {
-      *err = REG_ESPACE;
-      return NULL;
-    }
-
-  op->token.opr.idx = cls->token.opr.idx = node->token.opr.idx;
-  op->token.opt_subexp = cls->token.opt_subexp = node->token.opt_subexp;
-  return tree;
-}
-
-/* Pass 1 in building the NFA: compute FIRST and create unlinked automaton
-   nodes.  Requires a postorder visit.  */
-static reg_errcode_t
-calc_first (void *extra, bin_tree_t *node)
-{
-  re_dfa_t *dfa = (re_dfa_t *) extra;
-  if (node->token.type == CONCAT)
-    {
-      node->first = node->left->first;
-      node->node_idx = node->left->node_idx;
-    }
-  else
-    {
-      node->first = node;
-      node->node_idx = re_dfa_add_node (dfa, node->token);
-      if (BE (node->node_idx == REG_MISSING, 0))
-        return REG_ESPACE;
-      if (node->token.type == ANCHOR)
-        dfa->nodes[node->node_idx].constraint = node->token.opr.ctx_type;
-    }
-  return REG_NOERROR;
-}
-
-/* Pass 2: compute NEXT on the tree.  Preorder visit.  */
-static reg_errcode_t
-calc_next (void *extra, bin_tree_t *node)
-{
-  switch (node->token.type)
-    {
-    case OP_DUP_ASTERISK:
-      node->left->next = node;
-      break;
-    case CONCAT:
-      node->left->next = node->right->first;
-      node->right->next = node->next;
-      break;
-    default:
-      if (node->left)
-       node->left->next = node->next;
-      if (node->right)
-        node->right->next = node->next;
-      break;
-    }
-  return REG_NOERROR;
-}
-
-/* Pass 3: link all DFA nodes to their NEXT node (any order will do).  */
-static reg_errcode_t
-link_nfa_nodes (void *extra, bin_tree_t *node)
-{
-  re_dfa_t *dfa = (re_dfa_t *) extra;
-  Idx idx = node->node_idx;
-  reg_errcode_t err = REG_NOERROR;
-
-  switch (node->token.type)
-    {
-    case CONCAT:
-      break;
-
-    case END_OF_RE:
-      assert (node->next == NULL);
-      break;
-
-    case OP_DUP_ASTERISK:
-    case OP_ALT:
-      {
-       Idx left, right;
-       dfa->has_plural_match = 1;
-       if (node->left != NULL)
-         left = node->left->first->node_idx;
-       else
-         left = node->next->node_idx;
-       if (node->right != NULL)
-         right = node->right->first->node_idx;
-       else
-         right = node->next->node_idx;
-       assert (REG_VALID_INDEX (left));
-       assert (REG_VALID_INDEX (right));
-       err = re_node_set_init_2 (dfa->edests + idx, left, right);
-      }
-      break;
-
-    case ANCHOR:
-    case OP_OPEN_SUBEXP:
-    case OP_CLOSE_SUBEXP:
-      err = re_node_set_init_1 (dfa->edests + idx, node->next->node_idx);
-      break;
-
-    case OP_BACK_REF:
-      dfa->nexts[idx] = node->next->node_idx;
-      if (node->token.type == OP_BACK_REF)
-       re_node_set_init_1 (dfa->edests + idx, dfa->nexts[idx]);
-      break;
-
-    default:
-      assert (!IS_EPSILON_NODE (node->token.type));
-      dfa->nexts[idx] = node->next->node_idx;
-      break;
-    }
-
-  return err;
-}
-
-/* Duplicate the epsilon closure of the node ROOT_NODE.
-   Note that duplicated nodes have constraint INIT_CONSTRAINT in addition
-   to their own constraint.  */
-
-static reg_errcode_t
-internal_function
-duplicate_node_closure (re_dfa_t *dfa, Idx top_org_node, Idx top_clone_node,
-                       Idx root_node, unsigned int init_constraint)
-{
-  Idx org_node, clone_node;
-  bool ok;
-  unsigned int constraint = init_constraint;
-  for (org_node = top_org_node, clone_node = top_clone_node;;)
-    {
-      Idx org_dest, clone_dest;
-      if (dfa->nodes[org_node].type == OP_BACK_REF)
-       {
-         /* If the back reference epsilon-transit, its destination must
-            also have the constraint.  Then duplicate the epsilon closure
-            of the destination of the back reference, and store it in
-            edests of the back reference.  */
-         org_dest = dfa->nexts[org_node];
-         re_node_set_empty (dfa->edests + clone_node);
-         clone_dest = duplicate_node (dfa, org_dest, constraint);
-         if (BE (clone_dest == REG_MISSING, 0))
-           return REG_ESPACE;
-         dfa->nexts[clone_node] = dfa->nexts[org_node];
-         ok = re_node_set_insert (dfa->edests + clone_node, clone_dest);
-         if (BE (! ok, 0))
-           return REG_ESPACE;
-       }
-      else if (dfa->edests[org_node].nelem == 0)
-       {
-         /* In case of the node can't epsilon-transit, don't duplicate the
-            destination and store the original destination as the
-            destination of the node.  */
-         dfa->nexts[clone_node] = dfa->nexts[org_node];
-         break;
-       }
-      else if (dfa->edests[org_node].nelem == 1)
-       {
-         /* In case of the node can epsilon-transit, and it has only one
-            destination.  */
-         org_dest = dfa->edests[org_node].elems[0];
-         re_node_set_empty (dfa->edests + clone_node);
-         clone_dest = search_duplicated_node (dfa, org_dest, constraint);
-         /* If the node is root_node itself, it means the epsilon closure
-            has a loop.  Then tie it to the destination of the root_node.  */
-         if (org_node == root_node && clone_node != org_node)
-           {
-             ok = re_node_set_insert (dfa->edests + clone_node, org_dest);
-             if (BE (! ok, 0))
-               return REG_ESPACE;
-             break;
-           }
-         /* In case the node has another constraint, append it.  */
-         constraint |= dfa->nodes[org_node].constraint;
-         clone_dest = duplicate_node (dfa, org_dest, constraint);
-         if (BE (clone_dest == REG_MISSING, 0))
-           return REG_ESPACE;
-         ok = re_node_set_insert (dfa->edests + clone_node, clone_dest);
-         if (BE (! ok, 0))
-           return REG_ESPACE;
-       }
-      else /* dfa->edests[org_node].nelem == 2 */
-       {
-         /* In case of the node can epsilon-transit, and it has two
-            destinations. In the bin_tree_t and DFA, that's '|' and '*'.   */
-         org_dest = dfa->edests[org_node].elems[0];
-         re_node_set_empty (dfa->edests + clone_node);
-         /* Search for a duplicated node which satisfies the constraint.  */
-         clone_dest = search_duplicated_node (dfa, org_dest, constraint);
-         if (clone_dest == REG_MISSING)
-           {
-             /* There is no such duplicated node, create a new one.  */
-             reg_errcode_t err;
-             clone_dest = duplicate_node (dfa, org_dest, constraint);
-             if (BE (clone_dest == REG_MISSING, 0))
-               return REG_ESPACE;
-             ok = re_node_set_insert (dfa->edests + clone_node, clone_dest);
-             if (BE (! ok, 0))
-               return REG_ESPACE;
-             err = duplicate_node_closure (dfa, org_dest, clone_dest,
-                                           root_node, constraint);
-             if (BE (err != REG_NOERROR, 0))
-               return err;
-           }
-         else
-           {
-             /* There is a duplicated node which satisfy the constraint,
-                use it to avoid infinite loop.  */
-             ok = re_node_set_insert (dfa->edests + clone_node, clone_dest);
-             if (BE (! ok, 0))
-               return REG_ESPACE;
-           }
-
-         org_dest = dfa->edests[org_node].elems[1];
-         clone_dest = duplicate_node (dfa, org_dest, constraint);
-         if (BE (clone_dest == REG_MISSING, 0))
-           return REG_ESPACE;
-         ok = re_node_set_insert (dfa->edests + clone_node, clone_dest);
-         if (BE (! ok, 0))
-           return REG_ESPACE;
-       }
-      org_node = org_dest;
-      clone_node = clone_dest;
-    }
-  return REG_NOERROR;
-}
-
-/* Search for a node which is duplicated from the node ORG_NODE, and
-   satisfies the constraint CONSTRAINT.  */
-
-static Idx
-search_duplicated_node (const re_dfa_t *dfa, Idx org_node,
-                       unsigned int constraint)
-{
-  Idx idx;
-  for (idx = dfa->nodes_len - 1; dfa->nodes[idx].duplicated && idx > 0; --idx)
-    {
-      if (org_node == dfa->org_indices[idx]
-         && constraint == dfa->nodes[idx].constraint)
-       return idx; /* Found.  */
-    }
-  return REG_MISSING; /* Not found.  */
-}
-
-/* Duplicate the node whose index is ORG_IDX and set the constraint CONSTRAINT.
-   Return the index of the new node, or REG_MISSING if insufficient storage is
-   available.  */
-
-static Idx
-duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint)
-{
-  Idx dup_idx = re_dfa_add_node (dfa, dfa->nodes[org_idx]);
-  if (BE (dup_idx != REG_MISSING, 1))
-    {
-      dfa->nodes[dup_idx].constraint = constraint;
-      dfa->nodes[dup_idx].constraint |= dfa->nodes[org_idx].constraint;
-      dfa->nodes[dup_idx].duplicated = 1;
-
-      /* Store the index of the original node.  */
-      dfa->org_indices[dup_idx] = org_idx;
-    }
-  return dup_idx;
-}
-
-static reg_errcode_t
-calc_inveclosure (re_dfa_t *dfa)
-{
-  Idx src, idx;
-  bool ok;
-  for (idx = 0; idx < dfa->nodes_len; ++idx)
-    re_node_set_init_empty (dfa->inveclosures + idx);
-
-  for (src = 0; src < dfa->nodes_len; ++src)
-    {
-      Idx *elems = dfa->eclosures[src].elems;
-      for (idx = 0; idx < dfa->eclosures[src].nelem; ++idx)
-       {
-         ok = re_node_set_insert_last (dfa->inveclosures + elems[idx], src);
-         if (BE (! ok, 0))
-           return REG_ESPACE;
-       }
-    }
-
-  return REG_NOERROR;
-}
-
-/* Calculate "eclosure" for all the node in DFA.  */
-
-static reg_errcode_t
-calc_eclosure (re_dfa_t *dfa)
-{
-  Idx node_idx;
-  bool incomplete;
-#ifdef DEBUG
-  assert (dfa->nodes_len > 0);
-#endif
-  incomplete = false;
-  /* For each nodes, calculate epsilon closure.  */
-  for (node_idx = 0; ; ++node_idx)
-    {
-      reg_errcode_t err;
-      re_node_set eclosure_elem;
-      if (node_idx == dfa->nodes_len)
-       {
-         if (!incomplete)
-           break;
-         incomplete = false;
-         node_idx = 0;
-       }
-
-#ifdef DEBUG
-      assert (dfa->eclosures[node_idx].nelem != REG_MISSING);
-#endif
-
-      /* If we have already calculated, skip it.  */
-      if (dfa->eclosures[node_idx].nelem != 0)
-       continue;
-      /* Calculate epsilon closure of `node_idx'.  */
-      err = calc_eclosure_iter (&eclosure_elem, dfa, node_idx, true);
-      if (BE (err != REG_NOERROR, 0))
-       return err;
-
-      if (dfa->eclosures[node_idx].nelem == 0)
-       {
-         incomplete = true;
-         re_node_set_free (&eclosure_elem);
-       }
-    }
-  return REG_NOERROR;
-}
-
-/* Calculate epsilon closure of NODE.  */
-
-static reg_errcode_t
-calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, Idx node, bool root)
-{
-  reg_errcode_t err;
-  Idx i;
-  bool incomplete;
-  bool ok;
-  re_node_set eclosure;
-  incomplete = false;
-  err = re_node_set_alloc (&eclosure, dfa->edests[node].nelem + 1);
-  if (BE (err != REG_NOERROR, 0))
-    return err;
-
-  /* This indicates that we are calculating this node now.
-     We reference this value to avoid infinite loop.  */
-  dfa->eclosures[node].nelem = REG_MISSING;
-
-  /* If the current node has constraints, duplicate all nodes
-     since they must inherit the constraints.  */
-  if (dfa->nodes[node].constraint
-      && dfa->edests[node].nelem
-      && !dfa->nodes[dfa->edests[node].elems[0]].duplicated)
-    {
-      err = duplicate_node_closure (dfa, node, node, node,
-                                   dfa->nodes[node].constraint);
-      if (BE (err != REG_NOERROR, 0))
-       return err;
-    }
-
-  /* Expand each epsilon destination nodes.  */
-  if (IS_EPSILON_NODE(dfa->nodes[node].type))
-    for (i = 0; i < dfa->edests[node].nelem; ++i)
-      {
-       re_node_set eclosure_elem;
-       Idx edest = dfa->edests[node].elems[i];
-       /* If calculating the epsilon closure of `edest' is in progress,
-          return intermediate result.  */
-       if (dfa->eclosures[edest].nelem == REG_MISSING)
-         {
-           incomplete = true;
-           continue;
-         }
-       /* If we haven't calculated the epsilon closure of `edest' yet,
-          calculate now. Otherwise use calculated epsilon closure.  */
-       if (dfa->eclosures[edest].nelem == 0)
-         {
-           err = calc_eclosure_iter (&eclosure_elem, dfa, edest, false);
-           if (BE (err != REG_NOERROR, 0))
-             return err;
-         }
-       else
-         eclosure_elem = dfa->eclosures[edest];
-       /* Merge the epsilon closure of `edest'.  */
-       re_node_set_merge (&eclosure, &eclosure_elem);
-       /* If the epsilon closure of `edest' is incomplete,
-          the epsilon closure of this node is also incomplete.  */
-       if (dfa->eclosures[edest].nelem == 0)
-         {
-           incomplete = true;
-           re_node_set_free (&eclosure_elem);
-         }
-      }
-
-  /* Epsilon closures include itself.  */
-  ok = re_node_set_insert (&eclosure, node);
-  if (BE (! ok, 0))
-    return REG_ESPACE;
-  if (incomplete && !root)
-    dfa->eclosures[node].nelem = 0;
-  else
-    dfa->eclosures[node] = eclosure;
-  *new_set = eclosure;
-  return REG_NOERROR;
-}
-\f
-/* Functions for token which are used in the parser.  */
-
-/* Fetch a token from INPUT.
-   We must not use this function inside bracket expressions.  */
-
-static void
-internal_function
-fetch_token (re_token_t *result, re_string_t *input, reg_syntax_t syntax)
-{
-  re_string_skip_bytes (input, peek_token (result, input, syntax));
-}
-
-/* Peek a token from INPUT, and return the length of the token.
-   We must not use this function inside bracket expressions.  */
-
-static int
-internal_function
-peek_token (re_token_t *token, re_string_t *input, reg_syntax_t syntax)
-{
-  unsigned char c;
-
-  if (re_string_eoi (input))
-    {
-      token->type = END_OF_RE;
-      return 0;
-    }
-
-  c = re_string_peek_byte (input, 0);
-  token->opr.c = c;
-
-  token->word_char = 0;
-#ifdef RE_ENABLE_I18N
-  token->mb_partial = 0;
-  if (input->mb_cur_max > 1 &&
-      !re_string_first_byte (input, re_string_cur_idx (input)))
-    {
-      token->type = CHARACTER;
-      token->mb_partial = 1;
-      return 1;
-    }
-#endif
-  if (c == '\\')
-    {
-      unsigned char c2;
-      if (re_string_cur_idx (input) + 1 >= re_string_length (input))
-       {
-         token->type = BACK_SLASH;
-         return 1;
-       }
-
-      c2 = re_string_peek_byte_case (input, 1);
-      token->opr.c = c2;
-      token->type = CHARACTER;
-#ifdef RE_ENABLE_I18N
-      if (input->mb_cur_max > 1)
-       {
-         wint_t wc = re_string_wchar_at (input,
-                                         re_string_cur_idx (input) + 1);
-         token->word_char = IS_WIDE_WORD_CHAR (wc) != 0;
-       }
-      else
-#endif
-       token->word_char = IS_WORD_CHAR (c2) != 0;
-
-      switch (c2)
-       {
-       case '|':
-         if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_NO_BK_VBAR))
-           token->type = OP_ALT;
-         break;
-       case '1': case '2': case '3': case '4': case '5':
-       case '6': case '7': case '8': case '9':
-         if (!(syntax & RE_NO_BK_REFS))
-           {
-             token->type = OP_BACK_REF;
-             token->opr.idx = c2 - '1';
-           }
-         break;
-       case '<':
-         if (!(syntax & RE_NO_GNU_OPS))
-           {
-             token->type = ANCHOR;
-             token->opr.ctx_type = WORD_FIRST;
-           }
-         break;
-       case '>':
-         if (!(syntax & RE_NO_GNU_OPS))
-           {
-             token->type = ANCHOR;
-             token->opr.ctx_type = WORD_LAST;
-           }
-         break;
-       case 'b':
-         if (!(syntax & RE_NO_GNU_OPS))
-           {
-             token->type = ANCHOR;
-             token->opr.ctx_type = WORD_DELIM;
-           }
-         break;
-       case 'B':
-         if (!(syntax & RE_NO_GNU_OPS))
-           {
-             token->type = ANCHOR;
-             token->opr.ctx_type = NOT_WORD_DELIM;
-           }
-         break;
-       case 'w':
-         if (!(syntax & RE_NO_GNU_OPS))
-           token->type = OP_WORD;
-         break;
-       case 'W':
-         if (!(syntax & RE_NO_GNU_OPS))
-           token->type = OP_NOTWORD;
-         break;
-       case 's':
-         if (!(syntax & RE_NO_GNU_OPS))
-           token->type = OP_SPACE;
-         break;
-       case 'S':
-         if (!(syntax & RE_NO_GNU_OPS))
-           token->type = OP_NOTSPACE;
-         break;
-       case '`':
-         if (!(syntax & RE_NO_GNU_OPS))
-           {
-             token->type = ANCHOR;
-             token->opr.ctx_type = BUF_FIRST;
-           }
-         break;
-       case '\'':
-         if (!(syntax & RE_NO_GNU_OPS))
-           {
-             token->type = ANCHOR;
-             token->opr.ctx_type = BUF_LAST;
-           }
-         break;
-       case '(':
-         if (!(syntax & RE_NO_BK_PARENS))
-           token->type = OP_OPEN_SUBEXP;
-         break;
-       case ')':
-         if (!(syntax & RE_NO_BK_PARENS))
-           token->type = OP_CLOSE_SUBEXP;
-         break;
-       case '+':
-         if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM))
-           token->type = OP_DUP_PLUS;
-         break;
-       case '?':
-         if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM))
-           token->type = OP_DUP_QUESTION;
-         break;
-       case '{':
-         if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES)))
-           token->type = OP_OPEN_DUP_NUM;
-         break;
-       case '}':
-         if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES)))
-           token->type = OP_CLOSE_DUP_NUM;
-         break;
-       default:
-         break;
-       }
-      return 2;
-    }
-
-  token->type = CHARACTER;
-#ifdef RE_ENABLE_I18N
-  if (input->mb_cur_max > 1)
-    {
-      wint_t wc = re_string_wchar_at (input, re_string_cur_idx (input));
-      token->word_char = IS_WIDE_WORD_CHAR (wc) != 0;
-    }
-  else
-#endif
-    token->word_char = IS_WORD_CHAR (token->opr.c);
-
-  switch (c)
-    {
-    case '\n':
-      if (syntax & RE_NEWLINE_ALT)
-       token->type = OP_ALT;
-      break;
-    case '|':
-      if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_NO_BK_VBAR))
-       token->type = OP_ALT;
-      break;
-    case '*':
-      token->type = OP_DUP_ASTERISK;
-      break;
-    case '+':
-      if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM))
-       token->type = OP_DUP_PLUS;
-      break;
-    case '?':
-      if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM))
-       token->type = OP_DUP_QUESTION;
-      break;
-    case '{':
-      if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
-       token->type = OP_OPEN_DUP_NUM;
-      break;
-    case '}':
-      if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
-       token->type = OP_CLOSE_DUP_NUM;
-      break;
-    case '(':
-      if (syntax & RE_NO_BK_PARENS)
-       token->type = OP_OPEN_SUBEXP;
-      break;
-    case ')':
-      if (syntax & RE_NO_BK_PARENS)
-       token->type = OP_CLOSE_SUBEXP;
-      break;
-    case '[':
-      token->type = OP_OPEN_BRACKET;
-      break;
-    case '.':
-      token->type = OP_PERIOD;
-      break;
-    case '^':
-      if (!(syntax & (RE_CONTEXT_INDEP_ANCHORS | RE_CARET_ANCHORS_HERE)) &&
-         re_string_cur_idx (input) != 0)
-       {
-         char prev = re_string_peek_byte (input, -1);
-         if (!(syntax & RE_NEWLINE_ALT) || prev != '\n')
-           break;
-       }
-      token->type = ANCHOR;
-      token->opr.ctx_type = LINE_FIRST;
-      break;
-    case '$':
-      if (!(syntax & RE_CONTEXT_INDEP_ANCHORS) &&
-         re_string_cur_idx (input) + 1 != re_string_length (input))
-       {
-         re_token_t next;
-         re_string_skip_bytes (input, 1);
-         peek_token (&next, input, syntax);
-         re_string_skip_bytes (input, -1);
-         if (next.type != OP_ALT && next.type != OP_CLOSE_SUBEXP)
-           break;
-       }
-      token->type = ANCHOR;
-      token->opr.ctx_type = LINE_LAST;
-      break;
-    default:
-      break;
-    }
-  return 1;
-}
-
-/* Peek a token from INPUT, and return the length of the token.
-   We must not use this function out of bracket expressions.  */
-
-static int
-internal_function
-peek_token_bracket (re_token_t *token, re_string_t *input, reg_syntax_t syntax)
-{
-  unsigned char c;
-  if (re_string_eoi (input))
-    {
-      token->type = END_OF_RE;
-      return 0;
-    }
-  c = re_string_peek_byte (input, 0);
-  token->opr.c = c;
-
-#ifdef RE_ENABLE_I18N
-  if (input->mb_cur_max > 1 &&
-      !re_string_first_byte (input, re_string_cur_idx (input)))
-    {
-      token->type = CHARACTER;
-      return 1;
-    }
-#endif /* RE_ENABLE_I18N */
-
-  if (c == '\\' && (syntax & RE_BACKSLASH_ESCAPE_IN_LISTS)
-      && re_string_cur_idx (input) + 1 < re_string_length (input))
-    {
-      /* In this case, '\' escape a character.  */
-      unsigned char c2;
-      re_string_skip_bytes (input, 1);
-      c2 = re_string_peek_byte (input, 0);
-      token->opr.c = c2;
-      token->type = CHARACTER;
-      return 1;
-    }
-  if (c == '[') /* '[' is a special char in a bracket exps.  */
-    {
-      unsigned char c2;
-      int token_len;
-      if (re_string_cur_idx (input) + 1 < re_string_length (input))
-       c2 = re_string_peek_byte (input, 1);
-      else
-       c2 = 0;
-      token->opr.c = c2;
-      token_len = 2;
-      switch (c2)
-       {
-       case '.':
-         token->type = OP_OPEN_COLL_ELEM;
-         break;
-       case '=':
-         token->type = OP_OPEN_EQUIV_CLASS;
-         break;
-       case ':':
-         if (syntax & RE_CHAR_CLASSES)
-           {
-             token->type = OP_OPEN_CHAR_CLASS;
-             break;
-           }
-         /* else fall through.  */
-       default:
-         token->type = CHARACTER;
-         token->opr.c = c;
-         token_len = 1;
-         break;
-       }
-      return token_len;
-    }
-  switch (c)
-    {
-    case '-':
-      token->type = OP_CHARSET_RANGE;
-      break;
-    case ']':
-      token->type = OP_CLOSE_BRACKET;
-      break;
-    case '^':
-      token->type = OP_NON_MATCH_LIST;
-      break;
-    default:
-      token->type = CHARACTER;
-    }
-  return 1;
-}
-\f
-/* Functions for parser.  */
-
-/* Entry point of the parser.
-   Parse the regular expression REGEXP and return the structure tree.
-   If an error is occured, ERR is set by error code, and return NULL.
-   This function build the following tree, from regular expression <reg_exp>:
-          CAT
-          / \
-         /   \
-   <reg_exp>  EOR
-
-   CAT means concatenation.
-   EOR means end of regular expression.  */
-
-static bin_tree_t *
-parse (re_string_t *regexp, regex_t *preg, reg_syntax_t syntax,
-       reg_errcode_t *err)
-{
-  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
-  bin_tree_t *tree, *eor, *root;
-  re_token_t current_token;
-  dfa->syntax = syntax;
-  fetch_token (&current_token, regexp, syntax | RE_CARET_ANCHORS_HERE);
-  tree = parse_reg_exp (regexp, preg, &current_token, syntax, 0, err);
-  if (BE (*err != REG_NOERROR && tree == NULL, 0))
-    return NULL;
-  eor = create_tree (dfa, NULL, NULL, END_OF_RE);
-  if (tree != NULL)
-    root = create_tree (dfa, tree, eor, CONCAT);
-  else
-    root = eor;
-  if (BE (eor == NULL || root == NULL, 0))
-    {
-      *err = REG_ESPACE;
-      return NULL;
-    }
-  return root;
-}
-
-/* This function build the following tree, from regular expression
-   <branch1>|<branch2>:
-          ALT
-          / \
-         /   \
-   <branch1> <branch2>
-
-   ALT means alternative, which represents the operator `|'.  */
-
-static bin_tree_t *
-parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token,
-              reg_syntax_t syntax, Idx nest, reg_errcode_t *err)
-{
-  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
-  bin_tree_t *tree, *branch = NULL;
-  tree = parse_branch (regexp, preg, token, syntax, nest, err);
-  if (BE (*err != REG_NOERROR && tree == NULL, 0))
-    return NULL;
-
-  while (token->type == OP_ALT)
-    {
-      fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE);
-      if (token->type != OP_ALT && token->type != END_OF_RE
-         && (nest == 0 || token->type != OP_CLOSE_SUBEXP))
-       {
-         branch = parse_branch (regexp, preg, token, syntax, nest, err);
-         if (BE (*err != REG_NOERROR && branch == NULL, 0))
-           return NULL;
-       }
-      else
-       branch = NULL;
-      tree = create_tree (dfa, tree, branch, OP_ALT);
-      if (BE (tree == NULL, 0))
-       {
-         *err = REG_ESPACE;
-         return NULL;
-       }
-    }
-  return tree;
-}
-
-/* This function build the following tree, from regular expression
-   <exp1><exp2>:
-       CAT
-       / \
-       /   \
-   <exp1> <exp2>
-
-   CAT means concatenation.  */
-
-static bin_tree_t *
-parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token,
-             reg_syntax_t syntax, Idx nest, reg_errcode_t *err)
-{
-  bin_tree_t *tree, *expr;
-  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
-  tree = parse_expression (regexp, preg, token, syntax, nest, err);
-  if (BE (*err != REG_NOERROR && tree == NULL, 0))
-    return NULL;
-
-  while (token->type != OP_ALT && token->type != END_OF_RE
-        && (nest == 0 || token->type != OP_CLOSE_SUBEXP))
-    {
-      expr = parse_expression (regexp, preg, token, syntax, nest, err);
-      if (BE (*err != REG_NOERROR && expr == NULL, 0))
-       {
-         return NULL;
-       }
-      if (tree != NULL && expr != NULL)
-       {
-         tree = create_tree (dfa, tree, expr, CONCAT);
-         if (tree == NULL)
-           {
-             *err = REG_ESPACE;
-             return NULL;
-           }
-       }
-      else if (tree == NULL)
-       tree = expr;
-      /* Otherwise expr == NULL, we don't need to create new tree.  */
-    }
-  return tree;
-}
-
-/* This function build the following tree, from regular expression a*:
-        *
-        |
-        a
-*/
-
-static bin_tree_t *
-parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token,
-                 reg_syntax_t syntax, Idx nest, reg_errcode_t *err)
-{
-  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
-  bin_tree_t *tree;
-  switch (token->type)
-    {
-    case CHARACTER:
-      tree = create_token_tree (dfa, NULL, NULL, token);
-      if (BE (tree == NULL, 0))
-       {
-         *err = REG_ESPACE;
-         return NULL;
-       }
-#ifdef RE_ENABLE_I18N
-      if (dfa->mb_cur_max > 1)
-       {
-         while (!re_string_eoi (regexp)
-                && !re_string_first_byte (regexp, re_string_cur_idx (regexp)))
-           {
-             bin_tree_t *mbc_remain;
-             fetch_token (token, regexp, syntax);
-             mbc_remain = create_token_tree (dfa, NULL, NULL, token);
-             tree = create_tree (dfa, tree, mbc_remain, CONCAT);
-             if (BE (mbc_remain == NULL || tree == NULL, 0))
-               {
-                 *err = REG_ESPACE;
-                 return NULL;
-               }
-           }
-       }
-#endif
-      break;
-    case OP_OPEN_SUBEXP:
-      tree = parse_sub_exp (regexp, preg, token, syntax, nest + 1, err);
-      if (BE (*err != REG_NOERROR && tree == NULL, 0))
-       return NULL;
-      break;
-    case OP_OPEN_BRACKET:
-      tree = parse_bracket_exp (regexp, dfa, token, syntax, err);
-      if (BE (*err != REG_NOERROR && tree == NULL, 0))
-       return NULL;
-      break;
-    case OP_BACK_REF:
-      if (!BE (dfa->completed_bkref_map & (1 << token->opr.idx), 1))
-       {
-         *err = REG_ESUBREG;
-         return NULL;
-       }
-      dfa->used_bkref_map |= 1 << token->opr.idx;
-      tree = create_token_tree (dfa, NULL, NULL, token);
-      if (BE (tree == NULL, 0))
-       {
-         *err = REG_ESPACE;
-         return NULL;
-       }
-      ++dfa->nbackref;
-      dfa->has_mb_node = 1;
-      break;
-    case OP_OPEN_DUP_NUM:
-      if (syntax & RE_CONTEXT_INVALID_DUP)
-       {
-         *err = REG_BADRPT;
-         return NULL;
-       }
-      /* FALLTHROUGH */
-    case OP_DUP_ASTERISK:
-    case OP_DUP_PLUS:
-    case OP_DUP_QUESTION:
-      if (syntax & RE_CONTEXT_INVALID_OPS)
-       {
-         *err = REG_BADRPT;
-         return NULL;
-       }
-      else if (syntax & RE_CONTEXT_INDEP_OPS)
-       {
-         fetch_token (token, regexp, syntax);
-         return parse_expression (regexp, preg, token, syntax, nest, err);
-       }
-      /* else fall through  */
-    case OP_CLOSE_SUBEXP:
-      if ((token->type == OP_CLOSE_SUBEXP) &&
-         !(syntax & RE_UNMATCHED_RIGHT_PAREN_ORD))
-       {
-         *err = REG_ERPAREN;
-         return NULL;
-       }
-      /* else fall through  */
-    case OP_CLOSE_DUP_NUM:
-      /* We treat it as a normal character.  */
-
-      /* Then we can these characters as normal characters.  */
-      token->type = CHARACTER;
-      /* mb_partial and word_char bits should be initialized already
-        by peek_token.  */
-      tree = create_token_tree (dfa, NULL, NULL, token);
-      if (BE (tree == NULL, 0))
-       {
-         *err = REG_ESPACE;
-         return NULL;
-       }
-      break;
-    case ANCHOR:
-      if ((token->opr.ctx_type
-          & (WORD_DELIM | NOT_WORD_DELIM | WORD_FIRST | WORD_LAST))
-         && dfa->word_ops_used == 0)
-       init_word_char (dfa);
-      if (token->opr.ctx_type == WORD_DELIM
-          || token->opr.ctx_type == NOT_WORD_DELIM)
-       {
-         bin_tree_t *tree_first, *tree_last;
-         if (token->opr.ctx_type == WORD_DELIM)
-           {
-             token->opr.ctx_type = WORD_FIRST;
-             tree_first = create_token_tree (dfa, NULL, NULL, token);
-             token->opr.ctx_type = WORD_LAST;
-            }
-          else
-            {
-             token->opr.ctx_type = INSIDE_WORD;
-             tree_first = create_token_tree (dfa, NULL, NULL, token);
-             token->opr.ctx_type = INSIDE_NOTWORD;
-            }
-         tree_last = create_token_tree (dfa, NULL, NULL, token);
-         tree = create_tree (dfa, tree_first, tree_last, OP_ALT);
-         if (BE (tree_first == NULL || tree_last == NULL || tree == NULL, 0))
-           {
-             *err = REG_ESPACE;
-             return NULL;
-           }
-       }
-      else
-       {
-         tree = create_token_tree (dfa, NULL, NULL, token);
-         if (BE (tree == NULL, 0))
-           {
-             *err = REG_ESPACE;
-             return NULL;
-           }
-       }
-      /* We must return here, since ANCHORs can't be followed
-        by repetition operators.
-        eg. RE"^*" is invalid or "<ANCHOR(^)><CHAR(*)>",
-            it must not be "<ANCHOR(^)><REPEAT(*)>".  */
-      fetch_token (token, regexp, syntax);
-      return tree;
-    case OP_PERIOD:
-      tree = create_token_tree (dfa, NULL, NULL, token);
-      if (BE (tree == NULL, 0))
-       {
-         *err = REG_ESPACE;
-         return NULL;
-       }
-      if (dfa->mb_cur_max > 1)
-       dfa->has_mb_node = 1;
-      break;
-    case OP_WORD:
-    case OP_NOTWORD:
-      tree = build_charclass_op (dfa, regexp->trans,
-                                (const unsigned char *) "alnum",
-                                (const unsigned char *) "_",
-                                token->type == OP_NOTWORD, err);
-      if (BE (*err != REG_NOERROR && tree == NULL, 0))
-       return NULL;
-      break;
-    case OP_SPACE:
-    case OP_NOTSPACE:
-      tree = build_charclass_op (dfa, regexp->trans,
-                                (const unsigned char *) "space",
-                                (const unsigned char *) "",
-                                token->type == OP_NOTSPACE, err);
-      if (BE (*err != REG_NOERROR && tree == NULL, 0))
-       return NULL;
-      break;
-    case OP_ALT:
-    case END_OF_RE:
-      return NULL;
-    case BACK_SLASH:
-      *err = REG_EESCAPE;
-      return NULL;
-    default:
-      /* Must not happen?  */
-#ifdef DEBUG
-      assert (0);
-#endif
-      return NULL;
-    }
-  fetch_token (token, regexp, syntax);
-
-  while (token->type == OP_DUP_ASTERISK || token->type == OP_DUP_PLUS
-        || token->type == OP_DUP_QUESTION || token->type == OP_OPEN_DUP_NUM)
-    {
-      tree = parse_dup_op (tree, regexp, dfa, token, syntax, err);
-      if (BE (*err != REG_NOERROR && tree == NULL, 0))
-       return NULL;
-      /* In BRE consecutive duplications are not allowed.  */
-      if ((syntax & RE_CONTEXT_INVALID_DUP)
-         && (token->type == OP_DUP_ASTERISK
-             || token->type == OP_OPEN_DUP_NUM))
-       {
-         *err = REG_BADRPT;
-         return NULL;
-       }
-    }
-
-  return tree;
-}
-
-/* This function build the following tree, from regular expression
-   (<reg_exp>):
-        SUBEXP
-           |
-       <reg_exp>
-*/
-
-static bin_tree_t *
-parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token,
-              reg_syntax_t syntax, Idx nest, reg_errcode_t *err)
-{
-  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
-  bin_tree_t *tree;
-  size_t cur_nsub;
-  cur_nsub = preg->re_nsub++;
-
-  fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE);
-
-  /* The subexpression may be a null string.  */
-  if (token->type == OP_CLOSE_SUBEXP)
-    tree = NULL;
-  else
-    {
-      tree = parse_reg_exp (regexp, preg, token, syntax, nest, err);
-      if (BE (*err == REG_NOERROR && token->type != OP_CLOSE_SUBEXP, 0))
-        *err = REG_EPAREN;
-      if (BE (*err != REG_NOERROR, 0))
-       return NULL;
-    }
-
-  if (cur_nsub <= '9' - '1')
-    dfa->completed_bkref_map |= 1 << cur_nsub;
-
-  tree = create_tree (dfa, tree, NULL, SUBEXP);
-  if (BE (tree == NULL, 0))
-    {
-      *err = REG_ESPACE;
-      return NULL;
-    }
-  tree->token.opr.idx = cur_nsub;
-  return tree;
-}
-
-/* This function parse repetition operators like "*", "+", "{1,3}" etc.  */
-
-static bin_tree_t *
-parse_dup_op (bin_tree_t *elem, re_string_t *regexp, re_dfa_t *dfa,
-             re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err)
-{
-  bin_tree_t *tree = NULL, *old_tree = NULL;
-  Idx i, start, end, start_idx = re_string_cur_idx (regexp);
-  re_token_t start_token = *token;
-
-  if (token->type == OP_OPEN_DUP_NUM)
-    {
-      end = 0;
-      start = fetch_number (regexp, token, syntax);
-      if (start == REG_MISSING)
-       {
-         if (token->type == CHARACTER && token->opr.c == ',')
-           start = 0; /* We treat "{,m}" as "{0,m}".  */
-         else
-           {
-             *err = REG_BADBR; /* <re>{} is invalid.  */
-             return NULL;
-           }
-       }
-      if (BE (start != REG_ERROR, 1))
-       {
-         /* We treat "{n}" as "{n,n}".  */
-         end = ((token->type == OP_CLOSE_DUP_NUM) ? start
-                : ((token->type == CHARACTER && token->opr.c == ',')
-                   ? fetch_number (regexp, token, syntax) : REG_ERROR));
-       }
-      if (BE (start == REG_ERROR || end == REG_ERROR, 0))
-       {
-         /* Invalid sequence.  */
-         if (BE (!(syntax & RE_INVALID_INTERVAL_ORD), 0))
-           {
-             if (token->type == END_OF_RE)
-               *err = REG_EBRACE;
-             else
-               *err = REG_BADBR;
-
-             return NULL;
-           }
-
-         /* If the syntax bit is set, rollback.  */
-         re_string_set_index (regexp, start_idx);
-         *token = start_token;
-         token->type = CHARACTER;
-         /* mb_partial and word_char bits should be already initialized by
-            peek_token.  */
-         return elem;
-       }
-
-      if (BE (end != REG_MISSING && start > end, 0))
-       {
-         /* First number greater than second.  */
-         *err = REG_BADBR;
-         return NULL;
-       }
-    }
-  else
-    {
-      start = (token->type == OP_DUP_PLUS) ? 1 : 0;
-      end = (token->type == OP_DUP_QUESTION) ? 1 : REG_MISSING;
-    }
-
-  fetch_token (token, regexp, syntax);
-
-  if (BE (elem == NULL, 0))
-    return NULL;
-  if (BE (start == 0 && end == 0, 0))
-    {
-      postorder (elem, free_tree, NULL);
-      return NULL;
-    }
-
-  /* Extract "<re>{n,m}" to "<re><re>...<re><re>{0,<m-n>}".  */
-  if (BE (start > 0, 0))
-    {
-      tree = elem;
-      for (i = 2; i <= start; ++i)
-       {
-         elem = duplicate_tree (elem, dfa);
-         tree = create_tree (dfa, tree, elem, CONCAT);
-         if (BE (elem == NULL || tree == NULL, 0))
-           goto parse_dup_op_espace;
-       }
-
-      if (start == end)
-       return tree;
-
-      /* Duplicate ELEM before it is marked optional.  */
-      elem = duplicate_tree (elem, dfa);
-      old_tree = tree;
-    }
-  else
-    old_tree = NULL;
-
-  if (elem->token.type == SUBEXP)
-    postorder (elem, mark_opt_subexp, (void *) (long) elem->token.opr.idx);
-
-  tree = create_tree (dfa, elem, NULL,
-                     (end == REG_MISSING ? OP_DUP_ASTERISK : OP_ALT));
-  if (BE (tree == NULL, 0))
-    goto parse_dup_op_espace;
-
-  /* This loop is actually executed only when end != REG_MISSING,
-     to rewrite <re>{0,n} as (<re>(<re>...<re>?)?)?...  We have
-     already created the start+1-th copy.  */
-  if ((Idx) -1 < 0 || end != REG_MISSING)
-    for (i = start + 2; i <= end; ++i)
-      {
-       elem = duplicate_tree (elem, dfa);
-       tree = create_tree (dfa, tree, elem, CONCAT);
-       if (BE (elem == NULL || tree == NULL, 0))
-         goto parse_dup_op_espace;
-
-       tree = create_tree (dfa, tree, NULL, OP_ALT);
-       if (BE (tree == NULL, 0))
-         goto parse_dup_op_espace;
-      }
-
-  if (old_tree)
-    tree = create_tree (dfa, old_tree, tree, CONCAT);
-
-  return tree;
-
- parse_dup_op_espace:
-  *err = REG_ESPACE;
-  return NULL;
-}
-
-/* Size of the names for collating symbol/equivalence_class/character_class.
-   I'm not sure, but maybe enough.  */
-#define BRACKET_NAME_BUF_SIZE 32
-
-#ifndef _LIBC
-  /* Local function for parse_bracket_exp only used in case of NOT _LIBC.
-     Build the range expression which starts from START_ELEM, and ends
-     at END_ELEM.  The result are written to MBCSET and SBCSET.
-     RANGE_ALLOC is the allocated size of mbcset->range_starts, and
-     mbcset->range_ends, is a pointer argument sinse we may
-     update it.  */
-
-static reg_errcode_t
-internal_function
-# ifdef RE_ENABLE_I18N
-build_range_exp (bitset_t sbcset, re_charset_t *mbcset, Idx *range_alloc,
-                bracket_elem_t *start_elem, bracket_elem_t *end_elem)
-# else /* not RE_ENABLE_I18N */
-build_range_exp (bitset_t sbcset, bracket_elem_t *start_elem,
-                bracket_elem_t *end_elem)
-# endif /* not RE_ENABLE_I18N */
-{
-  unsigned int start_ch, end_ch;
-  /* Equivalence Classes and Character Classes can't be a range start/end.  */
-  if (BE (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS
-         || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS,
-         0))
-    return REG_ERANGE;
-
-  /* We can handle no multi character collating elements without libc
-     support.  */
-  if (BE ((start_elem->type == COLL_SYM
-          && strlen ((char *) start_elem->opr.name) > 1)
-         || (end_elem->type == COLL_SYM
-             && strlen ((char *) end_elem->opr.name) > 1), 0))
-    return REG_ECOLLATE;
-
-# ifdef RE_ENABLE_I18N
-  {
-    wchar_t wc;
-    wint_t start_wc;
-    wint_t end_wc;
-    wchar_t cmp_buf[6] = {L'\0', L'\0', L'\0', L'\0', L'\0', L'\0'};
-
-    start_ch = ((start_elem->type == SB_CHAR) ? start_elem->opr.ch
-               : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0]
-                  : 0));
-    end_ch = ((end_elem->type == SB_CHAR) ? end_elem->opr.ch
-             : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0]
-                : 0));
-    start_wc = ((start_elem->type == SB_CHAR || start_elem->type == COLL_SYM)
-               ? __btowc (start_ch) : start_elem->opr.wch);
-    end_wc = ((end_elem->type == SB_CHAR || end_elem->type == COLL_SYM)
-             ? __btowc (end_ch) : end_elem->opr.wch);
-    if (start_wc == WEOF || end_wc == WEOF)
-      return REG_ECOLLATE;
-    cmp_buf[0] = start_wc;
-    cmp_buf[4] = end_wc;
-    if (wcscoll (cmp_buf, cmp_buf + 4) > 0)
-      return REG_ERANGE;
-
-    /* Got valid collation sequence values, add them as a new entry.
-       However, for !_LIBC we have no collation elements: if the
-       character set is single byte, the single byte character set
-       that we build below suffices.  parse_bracket_exp passes
-       no MBCSET if dfa->mb_cur_max == 1.  */
-    if (mbcset)
-      {
-        /* Check the space of the arrays.  */
-        if (BE (*range_alloc == mbcset->nranges, 0))
-          {
-           /* There is not enough space, need realloc.  */
-           wchar_t *new_array_start, *new_array_end;
-           Idx new_nranges;
-
-           /* +1 in case of mbcset->nranges is 0.  */
-           new_nranges = 2 * mbcset->nranges + 1;
-           /* Use realloc since mbcset->range_starts and mbcset->range_ends
-              are NULL if *range_alloc == 0.  */
-           new_array_start = re_realloc (mbcset->range_starts, wchar_t,
-                                         new_nranges);
-           new_array_end = re_realloc (mbcset->range_ends, wchar_t,
-                                       new_nranges);
-
-           if (BE (new_array_start == NULL || new_array_end == NULL, 0))
-             return REG_ESPACE;
-
-           mbcset->range_starts = new_array_start;
-           mbcset->range_ends = new_array_end;
-           *range_alloc = new_nranges;
-          }
-
-        mbcset->range_starts[mbcset->nranges] = start_wc;
-        mbcset->range_ends[mbcset->nranges++] = end_wc;
-      }
-
-    /* Build the table for single byte characters.  */
-    for (wc = 0; wc < SBC_MAX; ++wc)
-      {
-       cmp_buf[2] = wc;
-       if (wcscoll (cmp_buf, cmp_buf + 2) <= 0
-           && wcscoll (cmp_buf + 2, cmp_buf + 4) <= 0)
-         bitset_set (sbcset, wc);
-      }
-  }
-# else /* not RE_ENABLE_I18N */
-  {
-    unsigned int ch;
-    start_ch = ((start_elem->type == SB_CHAR ) ? start_elem->opr.ch
-               : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0]
-                  : 0));
-    end_ch = ((end_elem->type == SB_CHAR ) ? end_elem->opr.ch
-             : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0]
-                : 0));
-    if (start_ch > end_ch)
-      return REG_ERANGE;
-    /* Build the table for single byte characters.  */
-    for (ch = 0; ch < SBC_MAX; ++ch)
-      if (start_ch <= ch  && ch <= end_ch)
-       bitset_set (sbcset, ch);
-  }
-# endif /* not RE_ENABLE_I18N */
-  return REG_NOERROR;
-}
-#endif /* not _LIBC */
-
-#ifndef _LIBC
-/* Helper function for parse_bracket_exp only used in case of NOT _LIBC..
-   Build the collating element which is represented by NAME.
-   The result are written to MBCSET and SBCSET.
-   COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a
-   pointer argument since we may update it.  */
-
-static reg_errcode_t
-internal_function
-build_collating_symbol (bitset_t sbcset,
-# ifdef RE_ENABLE_I18N
-                       re_charset_t *mbcset, Idx *coll_sym_alloc,
-# endif
-                       const unsigned char *name)
-{
-  size_t name_len = strlen ((const char *) name);
-  if (BE (name_len != 1, 0))
-    return REG_ECOLLATE;
-  else
-    {
-      bitset_set (sbcset, name[0]);
-      return REG_NOERROR;
-    }
-}
-#endif /* not _LIBC */
-
-/* This function parse bracket expression like "[abc]", "[a-c]",
-   "[[.a-a.]]" etc.  */
-
-static bin_tree_t *
-parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,
-                  reg_syntax_t syntax, reg_errcode_t *err)
-{
-#ifdef _LIBC
-  const unsigned char *collseqmb;
-  const char *collseqwc;
-  uint32_t nrules;
-  int32_t table_size;
-  const int32_t *symb_table;
-  const unsigned char *extra;
-
-  /* Local function for parse_bracket_exp used in _LIBC environement.
-     Seek the collating symbol entry correspondings to NAME.
-     Return the index of the symbol in the SYMB_TABLE.  */
-
-  auto inline int32_t
-  __attribute ((always_inline))
-  seek_collating_symbol_entry (name, name_len)
-        const unsigned char *name;
-        size_t name_len;
-    {
-      int32_t hash = elem_hash ((const char *) name, name_len);
-      int32_t elem = hash % table_size;
-      if (symb_table[2 * elem] != 0)
-       {
-         int32_t second = hash % (table_size - 2) + 1;
-
-         do
-           {
-             /* First compare the hashing value.  */
-             if (symb_table[2 * elem] == hash
-                 /* Compare the length of the name.  */
-                 && name_len == extra[symb_table[2 * elem + 1]]
-                 /* Compare the name.  */
-                 && memcmp (name, &extra[symb_table[2 * elem + 1] + 1],
-                            name_len) == 0)
-               {
-                 /* Yep, this is the entry.  */
-                 break;
-               }
-
-             /* Next entry.  */
-             elem += second;
-           }
-         while (symb_table[2 * elem] != 0);
-       }
-      return elem;
-    }
-
-  /* Local function for parse_bracket_exp used in _LIBC environement.
-     Look up the collation sequence value of BR_ELEM.
-     Return the value if succeeded, UINT_MAX otherwise.  */
-
-  auto inline unsigned int
-  __attribute ((always_inline))
-  lookup_collation_sequence_value (br_elem)
-        bracket_elem_t *br_elem;
-    {
-      if (br_elem->type == SB_CHAR)
-       {
-         /*
-         if (MB_CUR_MAX == 1)
-         */
-         if (nrules == 0)
-           return collseqmb[br_elem->opr.ch];
-         else
-           {
-             wint_t wc = __btowc (br_elem->opr.ch);
-             return __collseq_table_lookup (collseqwc, wc);
-           }
-       }
-      else if (br_elem->type == MB_CHAR)
-       {
-         return __collseq_table_lookup (collseqwc, br_elem->opr.wch);
-       }
-      else if (br_elem->type == COLL_SYM)
-       {
-         size_t sym_name_len = strlen ((char *) br_elem->opr.name);
-         if (nrules != 0)
-           {
-             int32_t elem, idx;
-             elem = seek_collating_symbol_entry (br_elem->opr.name,
-                                                 sym_name_len);
-             if (symb_table[2 * elem] != 0)
-               {
-                 /* We found the entry.  */
-                 idx = symb_table[2 * elem + 1];
-                 /* Skip the name of collating element name.  */
-                 idx += 1 + extra[idx];
-                 /* Skip the byte sequence of the collating element.  */
-                 idx += 1 + extra[idx];
-                 /* Adjust for the alignment.  */
-                 idx = (idx + 3) & ~3;
-                 /* Skip the multibyte collation sequence value.  */
-                 idx += sizeof (unsigned int);
-                 /* Skip the wide char sequence of the collating element.  */
-                 idx += sizeof (unsigned int) *
-                   (1 + *(unsigned int *) (extra + idx));
-                 /* Return the collation sequence value.  */
-                 return *(unsigned int *) (extra + idx);
-               }
-             else if (symb_table[2 * elem] == 0 && sym_name_len == 1)
-               {
-                 /* No valid character.  Match it as a single byte
-                    character.  */
-                 return collseqmb[br_elem->opr.name[0]];
-               }
-           }
-         else if (sym_name_len == 1)
-           return collseqmb[br_elem->opr.name[0]];
-       }
-      return UINT_MAX;
-    }
-
-  /* Local function for parse_bracket_exp used in _LIBC environement.
-     Build the range expression which starts from START_ELEM, and ends
-     at END_ELEM.  The result are written to MBCSET and SBCSET.
-     RANGE_ALLOC is the allocated size of mbcset->range_starts, and
-     mbcset->range_ends, is a pointer argument sinse we may
-     update it.  */
-
-  auto inline reg_errcode_t
-  __attribute ((always_inline))
-  build_range_exp (sbcset, mbcset, range_alloc, start_elem, end_elem)
-        re_charset_t *mbcset;
-        Idx *range_alloc;
-        bitset_t sbcset;
-        bracket_elem_t *start_elem, *end_elem;
-    {
-      unsigned int ch;
-      uint32_t start_collseq;
-      uint32_t end_collseq;
-
-      /* Equivalence Classes and Character Classes can't be a range
-        start/end.  */
-      if (BE (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS
-             || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS,
-             0))
-       return REG_ERANGE;
-
-      start_collseq = lookup_collation_sequence_value (start_elem);
-      end_collseq = lookup_collation_sequence_value (end_elem);
-      /* Check start/end collation sequence values.  */
-      if (BE (start_collseq == UINT_MAX || end_collseq == UINT_MAX, 0))
-       return REG_ECOLLATE;
-      if (BE ((syntax & RE_NO_EMPTY_RANGES) && start_collseq > end_collseq, 0))
-       return REG_ERANGE;
-
-      /* Got valid collation sequence values, add them as a new entry.
-        However, if we have no collation elements, and the character set
-        is single byte, the single byte character set that we
-        build below suffices. */
-      if (nrules > 0 || dfa->mb_cur_max > 1)
-       {
-          /* Check the space of the arrays.  */
-          if (BE (*range_alloc == mbcset->nranges, 0))
-           {
-             /* There is not enough space, need realloc.  */
-             uint32_t *new_array_start;
-             uint32_t *new_array_end;
-             Idx new_nranges;
-
-             /* +1 in case of mbcset->nranges is 0.  */
-             new_nranges = 2 * mbcset->nranges + 1;
-             new_array_start = re_realloc (mbcset->range_starts, uint32_t,
-                                           new_nranges);
-             new_array_end = re_realloc (mbcset->range_ends, uint32_t,
-                                         new_nranges);
-
-             if (BE (new_array_start == NULL || new_array_end == NULL, 0))
-               return REG_ESPACE;
-
-             mbcset->range_starts = new_array_start;
-             mbcset->range_ends = new_array_end;
-             *range_alloc = new_nranges;
-           }
-
-          mbcset->range_starts[mbcset->nranges] = start_collseq;
-          mbcset->range_ends[mbcset->nranges++] = end_collseq;
-       }
-
-      /* Build the table for single byte characters.  */
-      for (ch = 0; ch < SBC_MAX; ch++)
-       {
-         uint32_t ch_collseq;
-         /*
-         if (MB_CUR_MAX == 1)
-         */
-         if (nrules == 0)
-           ch_collseq = collseqmb[ch];
-         else
-           ch_collseq = __collseq_table_lookup (collseqwc, __btowc (ch));
-         if (start_collseq <= ch_collseq && ch_collseq <= end_collseq)
-           bitset_set (sbcset, ch);
-       }
-      return REG_NOERROR;
-    }
-
-  /* Local function for parse_bracket_exp used in _LIBC environement.
-     Build the collating element which is represented by NAME.
-     The result are written to MBCSET and SBCSET.
-     COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a
-     pointer argument sinse we may update it.  */
-
-  auto inline reg_errcode_t
-  __attribute ((always_inline))
-  build_collating_symbol (sbcset, mbcset, coll_sym_alloc, name)
-        re_charset_t *mbcset;
-        Idx *coll_sym_alloc;
-        bitset_t sbcset;
-        const unsigned char *name;
-    {
-      int32_t elem, idx;
-      size_t name_len = strlen ((const char *) name);
-      if (nrules != 0)
-       {
-         elem = seek_collating_symbol_entry (name, name_len);
-         if (symb_table[2 * elem] != 0)
-           {
-             /* We found the entry.  */
-             idx = symb_table[2 * elem + 1];
-             /* Skip the name of collating element name.  */
-             idx += 1 + extra[idx];
-           }
-         else if (symb_table[2 * elem] == 0 && name_len == 1)
-           {
-             /* No valid character, treat it as a normal
-                character.  */
-             bitset_set (sbcset, name[0]);
-             return REG_NOERROR;
-           }
-         else
-           return REG_ECOLLATE;
-
-         /* Got valid collation sequence, add it as a new entry.  */
-         /* Check the space of the arrays.  */
-         if (BE (*coll_sym_alloc == mbcset->ncoll_syms, 0))
-           {
-             /* Not enough, realloc it.  */
-             /* +1 in case of mbcset->ncoll_syms is 0.  */
-             Idx new_coll_sym_alloc = 2 * mbcset->ncoll_syms + 1;
-             /* Use realloc since mbcset->coll_syms is NULL
-                if *alloc == 0.  */
-             int32_t *new_coll_syms = re_realloc (mbcset->coll_syms, int32_t,
-                                                  new_coll_sym_alloc);
-             if (BE (new_coll_syms == NULL, 0))
-               return REG_ESPACE;
-             mbcset->coll_syms = new_coll_syms;
-             *coll_sym_alloc = new_coll_sym_alloc;
-           }
-         mbcset->coll_syms[mbcset->ncoll_syms++] = idx;
-         return REG_NOERROR;
-       }
-      else
-       {
-         if (BE (name_len != 1, 0))
-           return REG_ECOLLATE;
-         else
-           {
-             bitset_set (sbcset, name[0]);
-             return REG_NOERROR;
-           }
-       }
-    }
-#endif
-
-  re_token_t br_token;
-  re_bitset_ptr_t sbcset;
-#ifdef RE_ENABLE_I18N
-  re_charset_t *mbcset;
-  Idx coll_sym_alloc = 0, range_alloc = 0, mbchar_alloc = 0;
-  Idx equiv_class_alloc = 0, char_class_alloc = 0;
-#endif /* not RE_ENABLE_I18N */
-  bool non_match = false;
-  bin_tree_t *work_tree;
-  int token_len;
-  bool first_round = true;
-#ifdef _LIBC
-  collseqmb = (const unsigned char *)
-    _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB);
-  nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
-  if (nrules)
-    {
-      /*
-      if (MB_CUR_MAX > 1)
-      */
-      collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC);
-      table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB);
-      symb_table = (const int32_t *) _NL_CURRENT (LC_COLLATE,
-                                                 _NL_COLLATE_SYMB_TABLEMB);
-      extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE,
-                                                  _NL_COLLATE_SYMB_EXTRAMB);
-    }
-#endif
-  sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1);
-#ifdef RE_ENABLE_I18N
-  mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1);
-#endif /* RE_ENABLE_I18N */
-#ifdef RE_ENABLE_I18N
-  if (BE (sbcset == NULL || mbcset == NULL, 0))
-#else
-  if (BE (sbcset == NULL, 0))
-#endif /* RE_ENABLE_I18N */
-    {
-      *err = REG_ESPACE;
-      return NULL;
-    }
-
-  token_len = peek_token_bracket (token, regexp, syntax);
-  if (BE (token->type == END_OF_RE, 0))
-    {
-      *err = REG_BADPAT;
-      goto parse_bracket_exp_free_return;
-    }
-  if (token->type == OP_NON_MATCH_LIST)
-    {
-#ifdef RE_ENABLE_I18N
-      mbcset->non_match = 1;
-#endif /* not RE_ENABLE_I18N */
-      non_match = true;
-      if (syntax & RE_HAT_LISTS_NOT_NEWLINE)
-       bitset_set (sbcset, '\n');
-      re_string_skip_bytes (regexp, token_len); /* Skip a token.  */
-      token_len = peek_token_bracket (token, regexp, syntax);
-      if (BE (token->type == END_OF_RE, 0))
-       {
-         *err = REG_BADPAT;
-         goto parse_bracket_exp_free_return;
-       }
-    }
-
-  /* We treat the first ']' as a normal character.  */
-  if (token->type == OP_CLOSE_BRACKET)
-    token->type = CHARACTER;
-
-  while (1)
-    {
-      bracket_elem_t start_elem, end_elem;
-      unsigned char start_name_buf[BRACKET_NAME_BUF_SIZE];
-      unsigned char end_name_buf[BRACKET_NAME_BUF_SIZE];
-      reg_errcode_t ret;
-      int token_len2 = 0;
-      bool is_range_exp = false;
-      re_token_t token2;
-
-      start_elem.opr.name = start_name_buf;
-      ret = parse_bracket_element (&start_elem, regexp, token, token_len, dfa,
-                                  syntax, first_round);
-      if (BE (ret != REG_NOERROR, 0))
-       {
-         *err = ret;
-         goto parse_bracket_exp_free_return;
-       }
-      first_round = false;
-
-      /* Get information about the next token.  We need it in any case.  */
-      token_len = peek_token_bracket (token, regexp, syntax);
-
-      /* Do not check for ranges if we know they are not allowed.  */
-      if (start_elem.type != CHAR_CLASS && start_elem.type != EQUIV_CLASS)
-       {
-         if (BE (token->type == END_OF_RE, 0))
-           {
-             *err = REG_EBRACK;
-             goto parse_bracket_exp_free_return;
-           }
-         if (token->type == OP_CHARSET_RANGE)
-           {
-             re_string_skip_bytes (regexp, token_len); /* Skip '-'.  */
-             token_len2 = peek_token_bracket (&token2, regexp, syntax);
-             if (BE (token2.type == END_OF_RE, 0))
-               {
-                 *err = REG_EBRACK;
-                 goto parse_bracket_exp_free_return;
-               }
-             if (token2.type == OP_CLOSE_BRACKET)
-               {
-                 /* We treat the last '-' as a normal character.  */
-                 re_string_skip_bytes (regexp, -token_len);
-                 token->type = CHARACTER;
-               }
-             else
-               is_range_exp = true;
-           }
-       }
-
-      if (is_range_exp == true)
-       {
-         end_elem.opr.name = end_name_buf;
-         ret = parse_bracket_element (&end_elem, regexp, &token2, token_len2,
-                                      dfa, syntax, true);
-         if (BE (ret != REG_NOERROR, 0))
-           {
-             *err = ret;
-             goto parse_bracket_exp_free_return;
-           }
-
-         token_len = peek_token_bracket (token, regexp, syntax);
-
-#ifdef _LIBC
-         *err = build_range_exp (sbcset, mbcset, &range_alloc,
-                                 &start_elem, &end_elem);
-#else
-# ifdef RE_ENABLE_I18N
-         *err = build_range_exp (sbcset,
-                                 dfa->mb_cur_max > 1 ? mbcset : NULL,
-                                 &range_alloc, &start_elem, &end_elem);
-# else
-         *err = build_range_exp (sbcset, &start_elem, &end_elem);
-# endif
-#endif /* RE_ENABLE_I18N */
-         if (BE (*err != REG_NOERROR, 0))
-           goto parse_bracket_exp_free_return;
-       }
-      else
-       {
-         switch (start_elem.type)
-           {
-           case SB_CHAR:
-             bitset_set (sbcset, start_elem.opr.ch);
-             break;
-#ifdef RE_ENABLE_I18N
-           case MB_CHAR:
-             /* Check whether the array has enough space.  */
-             if (BE (mbchar_alloc == mbcset->nmbchars, 0))
-               {
-                 wchar_t *new_mbchars;
-                 /* Not enough, realloc it.  */
-                 /* +1 in case of mbcset->nmbchars is 0.  */
-                 mbchar_alloc = 2 * mbcset->nmbchars + 1;
-                 /* Use realloc since array is NULL if *alloc == 0.  */
-                 new_mbchars = re_realloc (mbcset->mbchars, wchar_t,
-                                           mbchar_alloc);
-                 if (BE (new_mbchars == NULL, 0))
-                   goto parse_bracket_exp_espace;
-                 mbcset->mbchars = new_mbchars;
-               }
-             mbcset->mbchars[mbcset->nmbchars++] = start_elem.opr.wch;
-             break;
-#endif /* RE_ENABLE_I18N */
-           case EQUIV_CLASS:
-             *err = build_equiv_class (sbcset,
-#ifdef RE_ENABLE_I18N
-                                       mbcset, &equiv_class_alloc,
-#endif /* RE_ENABLE_I18N */
-                                       start_elem.opr.name);
-             if (BE (*err != REG_NOERROR, 0))
-               goto parse_bracket_exp_free_return;
-             break;
-           case COLL_SYM:
-             *err = build_collating_symbol (sbcset,
-#ifdef RE_ENABLE_I18N
-                                            mbcset, &coll_sym_alloc,
-#endif /* RE_ENABLE_I18N */
-                                            start_elem.opr.name);
-             if (BE (*err != REG_NOERROR, 0))
-               goto parse_bracket_exp_free_return;
-             break;
-           case CHAR_CLASS:
-             *err = build_charclass (regexp->trans, sbcset,
-#ifdef RE_ENABLE_I18N
-                                     mbcset, &char_class_alloc,
-#endif /* RE_ENABLE_I18N */
-                                     start_elem.opr.name, syntax);
-             if (BE (*err != REG_NOERROR, 0))
-              goto parse_bracket_exp_free_return;
-             break;
-           default:
-             assert (0);
-             break;
-           }
-       }
-      if (BE (token->type == END_OF_RE, 0))
-       {
-         *err = REG_EBRACK;
-         goto parse_bracket_exp_free_return;
-       }
-      if (token->type == OP_CLOSE_BRACKET)
-       break;
-    }
-
-  re_string_skip_bytes (regexp, token_len); /* Skip a token.  */
-
-  /* If it is non-matching list.  */
-  if (non_match)
-    bitset_not (sbcset);
-
-#ifdef RE_ENABLE_I18N
-  /* Ensure only single byte characters are set.  */
-  if (dfa->mb_cur_max > 1)
-    bitset_mask (sbcset, dfa->sb_char);
-
-  if (mbcset->nmbchars || mbcset->ncoll_syms || mbcset->nequiv_classes
-      || mbcset->nranges || (dfa->mb_cur_max > 1 && (mbcset->nchar_classes
-                                                    || mbcset->non_match)))
-    {
-      bin_tree_t *mbc_tree;
-      int sbc_idx;
-      /* Build a tree for complex bracket.  */
-      dfa->has_mb_node = 1;
-      br_token.type = COMPLEX_BRACKET;
-      br_token.opr.mbcset = mbcset;
-      mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token);
-      if (BE (mbc_tree == NULL, 0))
-       goto parse_bracket_exp_espace;
-      for (sbc_idx = 0; sbc_idx < BITSET_WORDS; ++sbc_idx)
-       if (sbcset[sbc_idx])
-         break;
-      /* If there are no bits set in sbcset, there is no point
-        of having both SIMPLE_BRACKET and COMPLEX_BRACKET.  */
-      if (sbc_idx < BITSET_WORDS)
-       {
-          /* Build a tree for simple bracket.  */
-          br_token.type = SIMPLE_BRACKET;
-          br_token.opr.sbcset = sbcset;
-          work_tree = create_token_tree (dfa, NULL, NULL, &br_token);
-          if (BE (work_tree == NULL, 0))
-            goto parse_bracket_exp_espace;
-
-          /* Then join them by ALT node.  */
-          work_tree = create_tree (dfa, work_tree, mbc_tree, OP_ALT);
-          if (BE (work_tree == NULL, 0))
-            goto parse_bracket_exp_espace;
-       }
-      else
-       {
-         re_free (sbcset);
-         work_tree = mbc_tree;
-       }
-    }
-  else
-#endif /* not RE_ENABLE_I18N */
-    {
-#ifdef RE_ENABLE_I18N
-      free_charset (mbcset);
-#endif
-      /* Build a tree for simple bracket.  */
-      br_token.type = SIMPLE_BRACKET;
-      br_token.opr.sbcset = sbcset;
-      work_tree = create_token_tree (dfa, NULL, NULL, &br_token);
-      if (BE (work_tree == NULL, 0))
-        goto parse_bracket_exp_espace;
-    }
-  return work_tree;
-
- parse_bracket_exp_espace:
-  *err = REG_ESPACE;
- parse_bracket_exp_free_return:
-  re_free (sbcset);
-#ifdef RE_ENABLE_I18N
-  free_charset (mbcset);
-#endif /* RE_ENABLE_I18N */
-  return NULL;
-}
-
-/* Parse an element in the bracket expression.  */
-
-static reg_errcode_t
-parse_bracket_element (bracket_elem_t *elem, re_string_t *regexp,
-                      re_token_t *token, int token_len, re_dfa_t *dfa,
-                      reg_syntax_t syntax, bool accept_hyphen)
-{
-#ifdef RE_ENABLE_I18N
-  int cur_char_size;
-  cur_char_size = re_string_char_size_at (regexp, re_string_cur_idx (regexp));
-  if (cur_char_size > 1)
-    {
-      elem->type = MB_CHAR;
-      elem->opr.wch = re_string_wchar_at (regexp, re_string_cur_idx (regexp));
-      re_string_skip_bytes (regexp, cur_char_size);
-      return REG_NOERROR;
-    }
-#endif /* RE_ENABLE_I18N */
-  re_string_skip_bytes (regexp, token_len); /* Skip a token.  */
-  if (token->type == OP_OPEN_COLL_ELEM || token->type == OP_OPEN_CHAR_CLASS
-      || token->type == OP_OPEN_EQUIV_CLASS)
-    return parse_bracket_symbol (elem, regexp, token);
-  if (BE (token->type == OP_CHARSET_RANGE, 0) && !accept_hyphen)
-    {
-      /* A '-' must only appear as anything but a range indicator before
-        the closing bracket.  Everything else is an error.  */
-      re_token_t token2;
-      (void) peek_token_bracket (&token2, regexp, syntax);
-      if (token2.type != OP_CLOSE_BRACKET)
-       /* The actual error value is not standardized since this whole
-          case is undefined.  But ERANGE makes good sense.  */
-       return REG_ERANGE;
-    }
-  elem->type = SB_CHAR;
-  elem->opr.ch = token->opr.c;
-  return REG_NOERROR;
-}
-
-/* Parse a bracket symbol in the bracket expression.  Bracket symbols are
-   such as [:<character_class>:], [.<collating_element>.], and
-   [=<equivalent_class>=].  */
-
-static reg_errcode_t
-parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp,
-                     re_token_t *token)
-{
-  unsigned char ch, delim = token->opr.c;
-  int i = 0;
-  if (re_string_eoi(regexp))
-    return REG_EBRACK;
-  for (;; ++i)
-    {
-      if (i >= BRACKET_NAME_BUF_SIZE)
-       return REG_EBRACK;
-      if (token->type == OP_OPEN_CHAR_CLASS)
-       ch = re_string_fetch_byte_case (regexp);
-      else
-       ch = re_string_fetch_byte (regexp);
-      if (re_string_eoi(regexp))
-       return REG_EBRACK;
-      if (ch == delim && re_string_peek_byte (regexp, 0) == ']')
-       break;
-      elem->opr.name[i] = ch;
-    }
-  re_string_skip_bytes (regexp, 1);
-  elem->opr.name[i] = '\0';
-  switch (token->type)
-    {
-    case OP_OPEN_COLL_ELEM:
-      elem->type = COLL_SYM;
-      break;
-    case OP_OPEN_EQUIV_CLASS:
-      elem->type = EQUIV_CLASS;
-      break;
-    case OP_OPEN_CHAR_CLASS:
-      elem->type = CHAR_CLASS;
-      break;
-    default:
-      break;
-    }
-  return REG_NOERROR;
-}
-
-  /* Helper function for parse_bracket_exp.
-     Build the equivalence class which is represented by NAME.
-     The result are written to MBCSET and SBCSET.
-     EQUIV_CLASS_ALLOC is the allocated size of mbcset->equiv_classes,
-     is a pointer argument sinse we may update it.  */
-
-static reg_errcode_t
-#ifdef RE_ENABLE_I18N
-build_equiv_class (bitset_t sbcset, re_charset_t *mbcset,
-                  Idx *equiv_class_alloc, const unsigned char *name)
-#else /* not RE_ENABLE_I18N */
-build_equiv_class (bitset_t sbcset, const unsigned char *name)
-#endif /* not RE_ENABLE_I18N */
-{
-#ifdef _LIBC
-  uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
-  if (nrules != 0)
-    {
-      const int32_t *table, *indirect;
-      const unsigned char *weights, *extra, *cp;
-      unsigned char char_buf[2];
-      int32_t idx1, idx2;
-      unsigned int ch;
-      size_t len;
-      /* This #include defines a local function!  */
-# include <locale/weight.h>
-      /* Calculate the index for equivalence class.  */
-      cp = name;
-      table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
-      weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE,
-                                              _NL_COLLATE_WEIGHTMB);
-      extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE,
-                                                  _NL_COLLATE_EXTRAMB);
-      indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE,
-                                               _NL_COLLATE_INDIRECTMB);
-      idx1 = findidx (&cp);
-      if (BE (idx1 == 0 || cp < name + strlen ((const char *) name), 0))
-       /* This isn't a valid character.  */
-       return REG_ECOLLATE;
-
-      /* Build single byte matcing table for this equivalence class.  */
-      char_buf[1] = (unsigned char) '\0';
-      len = weights[idx1];
-      for (ch = 0; ch < SBC_MAX; ++ch)
-       {
-         char_buf[0] = ch;
-         cp = char_buf;
-         idx2 = findidx (&cp);
-/*
-         idx2 = table[ch];
-*/
-         if (idx2 == 0)
-           /* This isn't a valid character.  */
-           continue;
-         if (len == weights[idx2])
-           {
-             int cnt = 0;
-             while (cnt <= len &&
-                    weights[idx1 + 1 + cnt] == weights[idx2 + 1 + cnt])
-               ++cnt;
-
-             if (cnt > len)
-               bitset_set (sbcset, ch);
-           }
-       }
-      /* Check whether the array has enough space.  */
-      if (BE (*equiv_class_alloc == mbcset->nequiv_classes, 0))
-       {
-         /* Not enough, realloc it.  */
-         /* +1 in case of mbcset->nequiv_classes is 0.  */
-         Idx new_equiv_class_alloc = 2 * mbcset->nequiv_classes + 1;
-         /* Use realloc since the array is NULL if *alloc == 0.  */
-         int32_t *new_equiv_classes = re_realloc (mbcset->equiv_classes,
-                                                  int32_t,
-                                                  new_equiv_class_alloc);
-         if (BE (new_equiv_classes == NULL, 0))
-           return REG_ESPACE;
-         mbcset->equiv_classes = new_equiv_classes;
-         *equiv_class_alloc = new_equiv_class_alloc;
-       }
-      mbcset->equiv_classes[mbcset->nequiv_classes++] = idx1;
-    }
-  else
-#endif /* _LIBC */
-    {
-      if (BE (strlen ((const char *) name) != 1, 0))
-       return REG_ECOLLATE;
-      bitset_set (sbcset, *name);
-    }
-  return REG_NOERROR;
-}
-
-  /* Helper function for parse_bracket_exp.
-     Build the character class which is represented by NAME.
-     The result are written to MBCSET and SBCSET.
-     CHAR_CLASS_ALLOC is the allocated size of mbcset->char_classes,
-     is a pointer argument sinse we may update it.  */
-
-static reg_errcode_t
-#ifdef RE_ENABLE_I18N
-build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset,
-                re_charset_t *mbcset, Idx *char_class_alloc,
-                const unsigned char *class_name, reg_syntax_t syntax)
-#else /* not RE_ENABLE_I18N */
-build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset,
-                const unsigned char *class_name, reg_syntax_t syntax)
-#endif /* not RE_ENABLE_I18N */
-{
-  int i;
-  const char *name = (const char *) class_name;
-
-  /* In case of REG_ICASE "upper" and "lower" match the both of
-     upper and lower cases.  */
-  if ((syntax & RE_ICASE)
-      && (strcmp (name, "upper") == 0 || strcmp (name, "lower") == 0))
-    name = "alpha";
-
-#ifdef RE_ENABLE_I18N
-  /* Check the space of the arrays.  */
-  if (BE (*char_class_alloc == mbcset->nchar_classes, 0))
-    {
-      /* Not enough, realloc it.  */
-      /* +1 in case of mbcset->nchar_classes is 0.  */
-      Idx new_char_class_alloc = 2 * mbcset->nchar_classes + 1;
-      /* Use realloc since array is NULL if *alloc == 0.  */
-      wctype_t *new_char_classes = re_realloc (mbcset->char_classes, wctype_t,
-                                              new_char_class_alloc);
-      if (BE (new_char_classes == NULL, 0))
-       return REG_ESPACE;
-      mbcset->char_classes = new_char_classes;
-      *char_class_alloc = new_char_class_alloc;
-    }
-  mbcset->char_classes[mbcset->nchar_classes++] = __wctype (name);
-#endif /* RE_ENABLE_I18N */
-
-#define BUILD_CHARCLASS_LOOP(ctype_func)       \
-  do {                                         \
-    if (BE (trans != NULL, 0))                 \
-      {                                                \
-       for (i = 0; i < SBC_MAX; ++i)           \
-         if (ctype_func (i))                   \
-           bitset_set (sbcset, trans[i]);      \
-      }                                                \
-    else                                       \
-      {                                                \
-       for (i = 0; i < SBC_MAX; ++i)           \
-         if (ctype_func (i))                   \
-           bitset_set (sbcset, i);             \
-      }                                                \
-  } while (0)
-
-  if (strcmp (name, "alnum") == 0)
-    BUILD_CHARCLASS_LOOP (isalnum);
-  else if (strcmp (name, "cntrl") == 0)
-    BUILD_CHARCLASS_LOOP (iscntrl);
-  else if (strcmp (name, "lower") == 0)
-    BUILD_CHARCLASS_LOOP (islower);
-  else if (strcmp (name, "space") == 0)
-    BUILD_CHARCLASS_LOOP (isspace);
-  else if (strcmp (name, "alpha") == 0)
-    BUILD_CHARCLASS_LOOP (isalpha);
-  else if (strcmp (name, "digit") == 0)
-    BUILD_CHARCLASS_LOOP (isdigit);
-  else if (strcmp (name, "print") == 0)
-    BUILD_CHARCLASS_LOOP (isprint);
-  else if (strcmp (name, "upper") == 0)
-    BUILD_CHARCLASS_LOOP (isupper);
-  else if (strcmp (name, "blank") == 0)
-    BUILD_CHARCLASS_LOOP (isblank);
-  else if (strcmp (name, "graph") == 0)
-    BUILD_CHARCLASS_LOOP (isgraph);
-  else if (strcmp (name, "punct") == 0)
-    BUILD_CHARCLASS_LOOP (ispunct);
-  else if (strcmp (name, "xdigit") == 0)
-    BUILD_CHARCLASS_LOOP (isxdigit);
-  else
-    return REG_ECTYPE;
-
-  return REG_NOERROR;
-}
-
-static bin_tree_t *
-build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans,
-                   const unsigned char *class_name,
-                   const unsigned char *extra, bool non_match,
-                   reg_errcode_t *err)
-{
-  re_bitset_ptr_t sbcset;
-#ifdef RE_ENABLE_I18N
-  re_charset_t *mbcset;
-  Idx alloc = 0;
-#endif /* not RE_ENABLE_I18N */
-  reg_errcode_t ret;
-  re_token_t br_token;
-  bin_tree_t *tree;
-
-  sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1);
-#ifdef RE_ENABLE_I18N
-  mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1);
-#endif /* RE_ENABLE_I18N */
-
-#ifdef RE_ENABLE_I18N
-  if (BE (sbcset == NULL || mbcset == NULL, 0))
-#else /* not RE_ENABLE_I18N */
-  if (BE (sbcset == NULL, 0))
-#endif /* not RE_ENABLE_I18N */
-    {
-      *err = REG_ESPACE;
-      return NULL;
-    }
-
-  if (non_match)
-    {
-#ifdef RE_ENABLE_I18N
-      mbcset->non_match = 1;
-#endif /* not RE_ENABLE_I18N */
-    }
-
-  /* We don't care the syntax in this case.  */
-  ret = build_charclass (trans, sbcset,
-#ifdef RE_ENABLE_I18N
-                        mbcset, &alloc,
-#endif /* RE_ENABLE_I18N */
-                        class_name, 0);
-
-  if (BE (ret != REG_NOERROR, 0))
-    {
-      re_free (sbcset);
-#ifdef RE_ENABLE_I18N
-      free_charset (mbcset);
-#endif /* RE_ENABLE_I18N */
-      *err = ret;
-      return NULL;
-    }
-  /* \w match '_' also.  */
-  for (; *extra; extra++)
-    bitset_set (sbcset, *extra);
-
-  /* If it is non-matching list.  */
-  if (non_match)
-    bitset_not (sbcset);
-
-#ifdef RE_ENABLE_I18N
-  /* Ensure only single byte characters are set.  */
-  if (dfa->mb_cur_max > 1)
-    bitset_mask (sbcset, dfa->sb_char);
-#endif
-
-  /* Build a tree for simple bracket.  */
-  br_token.type = SIMPLE_BRACKET;
-  br_token.opr.sbcset = sbcset;
-  tree = create_token_tree (dfa, NULL, NULL, &br_token);
-  if (BE (tree == NULL, 0))
-    goto build_word_op_espace;
-
-#ifdef RE_ENABLE_I18N
-  if (dfa->mb_cur_max > 1)
-    {
-      bin_tree_t *mbc_tree;
-      /* Build a tree for complex bracket.  */
-      br_token.type = COMPLEX_BRACKET;
-      br_token.opr.mbcset = mbcset;
-      dfa->has_mb_node = 1;
-      mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token);
-      if (BE (mbc_tree == NULL, 0))
-       goto build_word_op_espace;
-      /* Then join them by ALT node.  */
-      tree = create_tree (dfa, tree, mbc_tree, OP_ALT);
-      if (BE (mbc_tree != NULL, 1))
-       return tree;
-    }
-  else
-    {
-      free_charset (mbcset);
-      return tree;
-    }
-#else /* not RE_ENABLE_I18N */
-  return tree;
-#endif /* not RE_ENABLE_I18N */
-
- build_word_op_espace:
-  re_free (sbcset);
-#ifdef RE_ENABLE_I18N
-  free_charset (mbcset);
-#endif /* RE_ENABLE_I18N */
-  *err = REG_ESPACE;
-  return NULL;
-}
-
-/* This is intended for the expressions like "a{1,3}".
-   Fetch a number from `input', and return the number.
-   Return REG_MISSING if the number field is empty like "{,1}".
-   Return REG_ERROR if an error occurred.  */
-
-static Idx
-fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax)
-{
-  Idx num = REG_MISSING;
-  unsigned char c;
-  while (1)
-    {
-      fetch_token (token, input, syntax);
-      c = token->opr.c;
-      if (BE (token->type == END_OF_RE, 0))
-       return REG_ERROR;
-      if (token->type == OP_CLOSE_DUP_NUM || c == ',')
-       break;
-      num = ((token->type != CHARACTER || c < '0' || '9' < c
-             || num == REG_ERROR)
-            ? REG_ERROR
-            : ((num == REG_MISSING) ? c - '0' : num * 10 + c - '0'));
-      num = (num > RE_DUP_MAX) ? REG_ERROR : num;
-    }
-  return num;
-}
-\f
-#ifdef RE_ENABLE_I18N
-static void
-free_charset (re_charset_t *cset)
-{
-  re_free (cset->mbchars);
-# ifdef _LIBC
-  re_free (cset->coll_syms);
-  re_free (cset->equiv_classes);
-  re_free (cset->range_starts);
-  re_free (cset->range_ends);
-# endif
-  re_free (cset->char_classes);
-  re_free (cset);
-}
-#endif /* RE_ENABLE_I18N */
-\f
-/* Functions for binary tree operation.  */
-
-/* Create a tree node.  */
-
-static bin_tree_t *
-create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right,
-            re_token_type_t type)
-{
-  re_token_t t;
-  t.type = type;
-  return create_token_tree (dfa, left, right, &t);
-}
-
-static bin_tree_t *
-create_token_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right,
-                  const re_token_t *token)
-{
-  bin_tree_t *tree;
-  if (BE (dfa->str_tree_storage_idx == BIN_TREE_STORAGE_SIZE, 0))
-    {
-      bin_tree_storage_t *storage = re_malloc (bin_tree_storage_t, 1);
-
-      if (storage == NULL)
-       return NULL;
-      storage->next = dfa->str_tree_storage;
-      dfa->str_tree_storage = storage;
-      dfa->str_tree_storage_idx = 0;
-    }
-  tree = &dfa->str_tree_storage->data[dfa->str_tree_storage_idx++];
-
-  tree->parent = NULL;
-  tree->left = left;
-  tree->right = right;
-  tree->token = *token;
-  tree->token.duplicated = 0;
-  tree->token.opt_subexp = 0;
-  tree->first = NULL;
-  tree->next = NULL;
-  tree->node_idx = REG_MISSING;
-
-  if (left != NULL)
-    left->parent = tree;
-  if (right != NULL)
-    right->parent = tree;
-  return tree;
-}
-
-/* Mark the tree SRC as an optional subexpression.
-   To be called from preorder or postorder.  */
-
-static reg_errcode_t
-mark_opt_subexp (void *extra, bin_tree_t *node)
-{
-  Idx idx = (Idx) (long) extra;
-  if (node->token.type == SUBEXP && node->token.opr.idx == idx)
-    node->token.opt_subexp = 1;
-
-  return REG_NOERROR;
-}
-
-/* Free the allocated memory inside NODE. */
-
-static void
-free_token (re_token_t *node)
-{
-#ifdef RE_ENABLE_I18N
-  if (node->type == COMPLEX_BRACKET && node->duplicated == 0)
-    free_charset (node->opr.mbcset);
-  else
-#endif /* RE_ENABLE_I18N */
-    if (node->type == SIMPLE_BRACKET && node->duplicated == 0)
-      re_free (node->opr.sbcset);
-}
-
-/* Worker function for tree walking.  Free the allocated memory inside NODE
-   and its children. */
-
-static reg_errcode_t
-free_tree (void *extra, bin_tree_t *node)
-{
-  free_token (&node->token);
-  return REG_NOERROR;
-}
-
-
-/* Duplicate the node SRC, and return new node.  This is a preorder
-   visit similar to the one implemented by the generic visitor, but
-   we need more infrastructure to maintain two parallel trees --- so,
-   it's easier to duplicate.  */
-
-static bin_tree_t *
-duplicate_tree (const bin_tree_t *root, re_dfa_t *dfa)
-{
-  const bin_tree_t *node;
-  bin_tree_t *dup_root;
-  bin_tree_t **p_new = &dup_root, *dup_node = root->parent;
-
-  for (node = root; ; )
-    {
-      /* Create a new tree and link it back to the current parent.  */
-      *p_new = create_token_tree (dfa, NULL, NULL, &node->token);
-      if (*p_new == NULL)
-       return NULL;
-      (*p_new)->parent = dup_node;
-      (*p_new)->token.duplicated = 1;
-      dup_node = *p_new;
-
-      /* Go to the left node, or up and to the right.  */
-      if (node->left)
-       {
-         node = node->left;
-         p_new = &dup_node->left;
-       }
-      else
-       {
-         const bin_tree_t *prev = NULL;
-         while (node->right == prev || node->right == NULL)
-           {
-             prev = node;
-             node = node->parent;
-             dup_node = dup_node->parent;
-             if (!node)
-               return dup_root;
-           }
-         node = node->right;
-         p_new = &dup_node->right;
-       }
-    }
-}
diff --git a/lib/regex.c b/lib/regex.c
deleted file mode 100644 (file)
index 4b13ec5..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Extended regular expression matching and search library.
-   Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Isamu Hasegawa <isamu@yamato.ibm.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.
-
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include <config.h>
-
-/* Make sure noone compiles this code with a C++ compiler.  */
-#if defined __cplusplus && defined _LIBC
-# error "This is C code, use a C compiler"
-#endif
-
-#ifdef _LIBC
-/* We have to keep the namespace clean.  */
-# define regfree(preg) __regfree (preg)
-# define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef)
-# define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags)
-# define regerror(errcode, preg, errbuf, errbuf_size) \
-       __regerror(errcode, preg, errbuf, errbuf_size)
-# define re_set_registers(bu, re, nu, st, en) \
-       __re_set_registers (bu, re, nu, st, en)
-# define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \
-       __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
-# define re_match(bufp, string, size, pos, regs) \
-       __re_match (bufp, string, size, pos, regs)
-# define re_search(bufp, string, size, startpos, range, regs) \
-       __re_search (bufp, string, size, startpos, range, regs)
-# define re_compile_pattern(pattern, length, bufp) \
-       __re_compile_pattern (pattern, length, bufp)
-# define re_set_syntax(syntax) __re_set_syntax (syntax)
-# define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \
-       __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop)
-# define re_compile_fastmap(bufp) __re_compile_fastmap (bufp)
-
-# include "../locale/localeinfo.h"
-#endif
-
-/* On some systems, limits.h sets RE_DUP_MAX to a lower value than
-   GNU regex allows.  Include it before <regex.h>, which correctly
-   #undefs RE_DUP_MAX and sets it to the right value.  */
-#include <limits.h>
-
-#include <regex.h>
-#include "regex_internal.h"
-
-#include "regex_internal.c"
-#include "regcomp.c"
-#include "regexec.c"
-
-/* Binary backward compatibility.  */
-#if _LIBC
-# include <shlib-compat.h>
-# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3)
-link_warning (re_max_failures, "the 're_max_failures' variable is obsolete and will go away.")
-int re_max_failures = 2000;
-# endif
-#endif
diff --git a/lib/regex.h b/lib/regex.h
deleted file mode 100644 (file)
index f1d584d..0000000
+++ /dev/null
@@ -1,677 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Definitions for data structures and routines for the regular
-   expression library.
-   Copyright (C) 1985,1989-93,1995-98,2000,2001,2002,2003,2005,2006
-   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
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _REGEX_H
-#define _REGEX_H 1
-
-#include <sys/types.h>
-
-/* Allow the use in C++ code.  */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Define __USE_GNU_REGEX to declare GNU extensions that violate the
-   POSIX name space rules.  */
-#undef __USE_GNU_REGEX
-#if (defined _GNU_SOURCE                                       \
-     || (!defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE    \
-        && !defined _XOPEN_SOURCE))
-# define __USE_GNU_REGEX 1
-#endif
-
-#ifdef _REGEX_LARGE_OFFSETS
-
-/* Use types and values that are wide enough to represent signed and
-   unsigned byte offsets in memory.  This currently works only when
-   the regex code is used outside of the GNU C library; it is not yet
-   supported within glibc itself, and glibc users should not define
-   _REGEX_LARGE_OFFSETS.  */
-
-/* The type of the offset of a byte within a string.
-   For historical reasons POSIX 1003.1-2004 requires that regoff_t be
-   at least as wide as off_t.  However, many common POSIX platforms set
-   regoff_t to the more-sensible ssize_t and the Open Group has
-   signalled its intention to change the requirement to be that
-   regoff_t be at least as wide as ptrdiff_t and ssize_t; see XBD ERN
-   60 (2005-08-25).  We don't know of any hosts where ssize_t or
-   ptrdiff_t is wider than ssize_t, so ssize_t is safe.  */
-typedef ssize_t regoff_t;
-
-/* The type of nonnegative object indexes.  Traditionally, GNU regex
-   uses 'int' for these.  Code that uses __re_idx_t should work
-   regardless of whether the type is signed.  */
-typedef size_t __re_idx_t;
-
-/* The type of object sizes.  */
-typedef size_t __re_size_t;
-
-/* The type of object sizes, in places where the traditional code
-   uses unsigned long int.  */
-typedef size_t __re_long_size_t;
-
-#else
-
-/* Use types that are binary-compatible with the traditional GNU regex
-   implementation, which mishandles strings longer than INT_MAX.  */
-
-typedef int regoff_t;
-typedef int __re_idx_t;
-typedef unsigned int __re_size_t;
-typedef unsigned long int __re_long_size_t;
-
-#endif
-
-/* The following two types have to be signed and unsigned integer type
-   wide enough to hold a value of a pointer.  For most ANSI compilers
-   ptrdiff_t and size_t should be likely OK.  Still size of these two
-   types is 2 for Microsoft C.  Ugh... */
-typedef long int s_reg_t;
-typedef unsigned long int active_reg_t;
-
-/* The following bits are used to determine the regexp syntax we
-   recognize.  The set/not-set meanings are chosen so that Emacs syntax
-   remains the value 0.  The bits are given in alphabetical order, and
-   the definitions shifted by one from the previous bit; thus, when we
-   add or remove a bit, only one other definition need change.  */
-typedef unsigned long int reg_syntax_t;
-
-#ifdef __USE_GNU_REGEX
-
-/* If this bit is not set, then \ inside a bracket expression is literal.
-   If set, then such a \ quotes the following character.  */
-# define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1)
-
-/* If this bit is not set, then + and ? are operators, and \+ and \? are
-     literals.
-   If set, then \+ and \? are operators and + and ? are literals.  */
-# define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
-
-/* If this bit is set, then character classes are supported.  They are:
-     [:alpha:], [:upper:], [:lower:],  [:digit:], [:alnum:], [:xdigit:],
-     [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
-   If not set, then character classes are not supported.  */
-# define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
-
-/* If this bit is set, then ^ and $ are always anchors (outside bracket
-     expressions, of course).
-   If this bit is not set, then it depends:
-        ^  is an anchor if it is at the beginning of a regular
-           expression or after an open-group or an alternation operator;
-        $  is an anchor if it is at the end of a regular expression, or
-           before a close-group or an alternation operator.
-
-   This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
-   POSIX draft 11.2 says that * etc. in leading positions is undefined.
-   We already implemented a previous draft which made those constructs
-   invalid, though, so we haven't changed the code back.  */
-# define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
-
-/* If this bit is set, then special characters are always special
-     regardless of where they are in the pattern.
-   If this bit is not set, then special characters are special only in
-     some contexts; otherwise they are ordinary.  Specifically,
-     * + ? and intervals are only special when not after the beginning,
-     open-group, or alternation operator.  */
-# define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
-
-/* If this bit is set, then *, +, ?, and { cannot be first in an re or
-     immediately after an alternation or begin-group operator.  */
-# define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
-
-/* If this bit is set, then . matches newline.
-   If not set, then it doesn't.  */
-# define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
-
-/* If this bit is set, then . doesn't match NUL.
-   If not set, then it does.  */
-# define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
-
-/* If this bit is set, nonmatching lists [^...] do not match newline.
-   If not set, they do.  */
-# define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
-
-/* If this bit is set, either \{...\} or {...} defines an
-     interval, depending on RE_NO_BK_BRACES.
-   If not set, \{, \}, {, and } are literals.  */
-# define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
-
-/* If this bit is set, +, ? and | aren't recognized as operators.
-   If not set, they are.  */
-# define RE_LIMITED_OPS (RE_INTERVALS << 1)
-
-/* If this bit is set, newline is an alternation operator.
-   If not set, newline is literal.  */
-# define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
-
-/* If this bit is set, then `{...}' defines an interval, and \{ and \}
-     are literals.
-  If not set, then `\{...\}' defines an interval.  */
-# define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
-
-/* If this bit is set, (...) defines a group, and \( and \) are literals.
-   If not set, \(...\) defines a group, and ( and ) are literals.  */
-# define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
-
-/* If this bit is set, then \<digit> matches <digit>.
-   If not set, then \<digit> is a back-reference.  */
-# define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
-
-/* If this bit is set, then | is an alternation operator, and \| is literal.
-   If not set, then \| is an alternation operator, and | is literal.  */
-# define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
-
-/* If this bit is set, then an ending range point collating higher
-     than the starting range point, as in [z-a], is invalid.
-   If not set, then when ending range point collates higher than the
-     starting range point, the range is ignored.  */
-# define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
-
-/* If this bit is set, then an unmatched ) is ordinary.
-   If not set, then an unmatched ) is invalid.  */
-# define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
-
-/* If this bit is set, succeed as soon as we match the whole pattern,
-   without further backtracking.  */
-# define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
-
-/* If this bit is set, do not process the GNU regex operators.
-   If not set, then the GNU regex operators are recognized. */
-# define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1)
-
-/* If this bit is set, turn on internal regex debugging.
-   If not set, and debugging was on, turn it off.
-   This only works if regex.c is compiled -DDEBUG.
-   We define this bit always, so that all that's needed to turn on
-   debugging is to recompile regex.c; the calling code can always have
-   this bit set, and it won't affect anything in the normal case. */
-# define RE_DEBUG (RE_NO_GNU_OPS << 1)
-
-/* If this bit is set, a syntactically invalid interval is treated as
-   a string of ordinary characters.  For example, the ERE 'a{1' is
-   treated as 'a\{1'.  */
-# define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1)
-
-/* If this bit is set, then ignore case when matching.
-   If not set, then case is significant.  */
-# define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1)
-
-/* This bit is used internally like RE_CONTEXT_INDEP_ANCHORS but only
-   for ^, because it is difficult to scan the regex backwards to find
-   whether ^ should be special.  */
-# define RE_CARET_ANCHORS_HERE (RE_ICASE << 1)
-
-/* If this bit is set, then \{ cannot be first in an bre or
-   immediately after an alternation or begin-group operator.  */
-# define RE_CONTEXT_INVALID_DUP (RE_CARET_ANCHORS_HERE << 1)
-
-/* If this bit is set, then no_sub will be set to 1 during
-   re_compile_pattern.  */
-# define RE_NO_SUB (RE_CONTEXT_INVALID_DUP << 1)
-
-#endif /* defined __USE_GNU_REGEX */
-
-/* This global variable defines the particular regexp syntax to use (for
-   some interfaces).  When a regexp is compiled, the syntax used is
-   stored in the pattern buffer, so changing this does not affect
-   already-compiled regexps.  */
-extern reg_syntax_t re_syntax_options;
-\f
-#ifdef __USE_GNU_REGEX
-/* Define combinations of the above bits for the standard possibilities.
-   (The [[[ comments delimit what gets put into the Texinfo file, so
-   don't delete them!)  */
-/* [[[begin syntaxes]]] */
-# define RE_SYNTAX_EMACS 0
-
-# define RE_SYNTAX_AWK                                                 \
-  (RE_BACKSLASH_ESCAPE_IN_LISTS   | RE_DOT_NOT_NULL                    \
-   | RE_NO_BK_PARENS              | RE_NO_BK_REFS                      \
-   | RE_NO_BK_VBAR                | RE_NO_EMPTY_RANGES                 \
-   | RE_DOT_NEWLINE              | RE_CONTEXT_INDEP_ANCHORS            \
-   | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS)
-
-# define RE_SYNTAX_GNU_AWK                                             \
-  ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG)        \
-   & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS           \
-       | RE_CONTEXT_INVALID_OPS ))
-
-# define RE_SYNTAX_POSIX_AWK                                           \
-  (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS             \
-   | RE_INTERVALS          | RE_NO_GNU_OPS)
-
-# define RE_SYNTAX_GREP                                                        \
-  (RE_BK_PLUS_QM              | RE_CHAR_CLASSES                                \
-   | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS                           \
-   | RE_NEWLINE_ALT)
-
-# define RE_SYNTAX_EGREP                                               \
-  (RE_CHAR_CLASSES        | RE_CONTEXT_INDEP_ANCHORS                   \
-   | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE                   \
-   | RE_NEWLINE_ALT       | RE_NO_BK_PARENS                            \
-   | RE_NO_BK_VBAR)
-
-# define RE_SYNTAX_POSIX_EGREP                                         \
-  (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES                    \
-   | RE_INVALID_INTERVAL_ORD)
-
-/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff.  */
-# define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
-
-# define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
-
-/* Syntax bits common to both basic and extended POSIX regex syntax.  */
-# define _RE_SYNTAX_POSIX_COMMON                                       \
-  (RE_CHAR_CLASSES | RE_DOT_NEWLINE      | RE_DOT_NOT_NULL             \
-   | RE_INTERVALS  | RE_NO_EMPTY_RANGES)
-
-# define RE_SYNTAX_POSIX_BASIC                                         \
-  (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM | RE_CONTEXT_INVALID_DUP)
-
-/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
-   RE_LIMITED_OPS, i.e., \? \+ \| are not recognized.  Actually, this
-   isn't minimal, since other operators, such as \`, aren't disabled.  */
-# define RE_SYNTAX_POSIX_MINIMAL_BASIC                                 \
-  (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
-
-# define RE_SYNTAX_POSIX_EXTENDED                                      \
-  (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS                 \
-   | RE_CONTEXT_INDEP_OPS   | RE_NO_BK_BRACES                          \
-   | RE_NO_BK_PARENS        | RE_NO_BK_VBAR                            \
-   | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD)
-
-/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is
-   removed and RE_NO_BK_REFS is added.  */
-# define RE_SYNTAX_POSIX_MINIMAL_EXTENDED                              \
-  (_RE_SYNTAX_POSIX_COMMON  | RE_CONTEXT_INDEP_ANCHORS                 \
-   | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES                          \
-   | RE_NO_BK_PARENS        | RE_NO_BK_REFS                            \
-   | RE_NO_BK_VBAR         | RE_UNMATCHED_RIGHT_PAREN_ORD)
-/* [[[end syntaxes]]] */
-
-#endif /* defined __USE_GNU_REGEX */
-\f
-#ifdef __USE_GNU_REGEX
-
-/* Maximum number of duplicates an interval can allow.  POSIX-conforming
-   systems might define this in <limits.h>, but we want our
-   value, so remove any previous define.  */
-# ifdef RE_DUP_MAX
-#  undef RE_DUP_MAX
-# endif
-
-/* RE_DUP_MAX is 2**15 - 1 because an earlier implementation stored
-   the counter as a 2-byte signed integer.  This is no longer true, so
-   RE_DUP_MAX could be increased to (INT_MAX / 10 - 1), or to
-   ((SIZE_MAX - 2) / 10 - 1) if _REGEX_LARGE_OFFSETS is defined.
-   However, there would be a huge performance problem if someone
-   actually used a pattern like a\{214748363\}, so RE_DUP_MAX retains
-   its historical value.  */
-# define RE_DUP_MAX (0x7fff)
-
-#endif /* defined __USE_GNU_REGEX */
-
-
-/* POSIX `cflags' bits (i.e., information for `regcomp').  */
-
-/* If this bit is set, then use extended regular expression syntax.
-   If not set, then use basic regular expression syntax.  */
-#define REG_EXTENDED 1
-
-/* If this bit is set, then ignore case when matching.
-   If not set, then case is significant.  */
-#define REG_ICASE (1 << 1)
-
-/* If this bit is set, then anchors do not match at newline
-     characters in the string.
-   If not set, then anchors do match at newlines.  */
-#define REG_NEWLINE (1 << 2)
-
-/* If this bit is set, then report only success or fail in regexec.
-   If not set, then returns differ between not matching and errors.  */
-#define REG_NOSUB (1 << 3)
-
-
-/* POSIX `eflags' bits (i.e., information for regexec).  */
-
-/* If this bit is set, then the beginning-of-line operator doesn't match
-     the beginning of the string (presumably because it's not the
-     beginning of a line).
-   If not set, then the beginning-of-line operator does match the
-     beginning of the string.  */
-#define REG_NOTBOL 1
-
-/* Like REG_NOTBOL, except for the end-of-line.  */
-#define REG_NOTEOL (1 << 1)
-
-/* Use PMATCH[0] to delimit the start and end of the search in the
-   buffer.  */
-#define REG_STARTEND (1 << 2)
-
-
-/* If any error codes are removed, changed, or added, update the
-   `__re_error_msgid' table in regcomp.c.  */
-
-typedef enum
-{
-  _REG_ENOSYS = -1,    /* This will never happen for this implementation.  */
-  _REG_NOERROR = 0,    /* Success.  */
-  _REG_NOMATCH,                /* Didn't find a match (for regexec).  */
-
-  /* POSIX regcomp return error codes.  (In the order listed in the
-     standard.)  */
-  _REG_BADPAT,         /* Invalid pattern.  */
-  _REG_ECOLLATE,       /* Invalid collating element.  */
-  _REG_ECTYPE,         /* Invalid character class name.  */
-  _REG_EESCAPE,                /* Trailing backslash.  */
-  _REG_ESUBREG,                /* Invalid back reference.  */
-  _REG_EBRACK,         /* Unmatched left bracket.  */
-  _REG_EPAREN,         /* Parenthesis imbalance.  */
-  _REG_EBRACE,         /* Unmatched \{.  */
-  _REG_BADBR,          /* Invalid contents of \{\}.  */
-  _REG_ERANGE,         /* Invalid range end.  */
-  _REG_ESPACE,         /* Ran out of memory.  */
-  _REG_BADRPT,         /* No preceding re for repetition op.  */
-
-  /* Error codes we've added.  */
-  _REG_EEND,           /* Premature end.  */
-  _REG_ESIZE,          /* Compiled pattern bigger than 2^16 bytes.  */
-  _REG_ERPAREN         /* Unmatched ) or \); not returned from regcomp.  */
-} reg_errcode_t;
-
-#ifdef _XOPEN_SOURCE
-# define REG_ENOSYS    _REG_ENOSYS
-#endif
-#define REG_NOERROR    _REG_NOERROR
-#define REG_NOMATCH    _REG_NOMATCH
-#define REG_BADPAT     _REG_BADPAT
-#define REG_ECOLLATE   _REG_ECOLLATE
-#define REG_ECTYPE     _REG_ECTYPE
-#define REG_EESCAPE    _REG_EESCAPE
-#define REG_ESUBREG    _REG_ESUBREG
-#define REG_EBRACK     _REG_EBRACK
-#define REG_EPAREN     _REG_EPAREN
-#define REG_EBRACE     _REG_EBRACE
-#define REG_BADBR      _REG_BADBR
-#define REG_ERANGE     _REG_ERANGE
-#define REG_ESPACE     _REG_ESPACE
-#define REG_BADRPT     _REG_BADRPT
-#define REG_EEND       _REG_EEND
-#define REG_ESIZE      _REG_ESIZE
-#define REG_ERPAREN    _REG_ERPAREN
-\f
-/* struct re_pattern_buffer normally uses member names like `buffer'
-   that POSIX does not allow.  In POSIX mode these members have names
-   with leading `re_' (e.g., `re_buffer').  */
-#ifdef __USE_GNU_REGEX
-# define _REG_RE_NAME(id) id
-# define _REG_RM_NAME(id) id
-#else
-# define _REG_RE_NAME(id) re_##id
-# define _REG_RM_NAME(id) rm_##id
-#endif
-
-/* The user can specify the type of the re_translate member by
-   defining the macro RE_TRANSLATE_TYPE, which defaults to unsigned
-   char *.  This pollutes the POSIX name space, so in POSIX mode just
-   use unsigned char *.  */
-#ifdef __USE_GNU_REGEX
-# ifndef RE_TRANSLATE_TYPE
-#  define RE_TRANSLATE_TYPE unsigned char *
-# endif
-# define REG_TRANSLATE_TYPE RE_TRANSLATE_TYPE
-#else
-# define REG_TRANSLATE_TYPE unsigned char *
-#endif
-
-/* This data structure represents a compiled pattern.  Before calling
-   the pattern compiler, the fields `buffer', `allocated', `fastmap',
-   `translate', and `no_sub' can be set.  After the pattern has been
-   compiled, the `re_nsub' field is available.  All other fields are
-   private to the regex routines.  */
-
-struct re_pattern_buffer
-{
-  /* Space that holds the compiled pattern.  It is declared as
-     `unsigned char *' because its elements are sometimes used as
-     array indexes.  */
-  unsigned char *_REG_RE_NAME (buffer);
-
-  /* Number of bytes to which `buffer' points.  */
-  __re_long_size_t _REG_RE_NAME (allocated);
-
-  /* Number of bytes actually used in `buffer'.  */
-  __re_long_size_t _REG_RE_NAME (used);
-
-  /* Syntax setting with which the pattern was compiled.  */
-  reg_syntax_t _REG_RE_NAME (syntax);
-
-  /* Pointer to a fastmap, if any, otherwise zero.  re_search uses the
-     fastmap, if there is one, to skip over impossible starting points
-     for matches.  */
-  char *_REG_RE_NAME (fastmap);
-
-  /* Either a translate table to apply to all characters before
-     comparing them, or zero for no translation.  The translation is
-     applied to a pattern when it is compiled and to a string when it
-     is matched.  */
-  REG_TRANSLATE_TYPE _REG_RE_NAME (translate);
-
-  /* Number of subexpressions found by the compiler.  */
-  size_t re_nsub;
-
-  /* Zero if this pattern cannot match the empty string, one else.
-     Well, in truth it's used only in `re_search_2', to see whether or
-     not we should use the fastmap, so we don't set this absolutely
-     perfectly; see `re_compile_fastmap' (the `duplicate' case).  */
-  unsigned int _REG_RE_NAME (can_be_null) : 1;
-
-  /* If REGS_UNALLOCATED, allocate space in the `regs' structure
-     for `max (RE_NREGS, re_nsub + 1)' groups.
-     If REGS_REALLOCATE, reallocate space if necessary.
-     If REGS_FIXED, use what's there.  */
-#ifdef __USE_GNU_REGEX
-# define REGS_UNALLOCATED 0
-# define REGS_REALLOCATE 1
-# define REGS_FIXED 2
-#endif
-  unsigned int _REG_RE_NAME (regs_allocated) : 2;
-
-  /* Set to zero when `regex_compile' compiles a pattern; set to one
-     by `re_compile_fastmap' if it updates the fastmap.  */
-  unsigned int _REG_RE_NAME (fastmap_accurate) : 1;
-
-  /* If set, `re_match_2' does not return information about
-     subexpressions.  */
-  unsigned int _REG_RE_NAME (no_sub) : 1;
-
-  /* If set, a beginning-of-line anchor doesn't match at the beginning
-     of the string.  */
-  unsigned int _REG_RE_NAME (not_bol) : 1;
-
-  /* Similarly for an end-of-line anchor.  */
-  unsigned int _REG_RE_NAME (not_eol) : 1;
-
-  /* If true, an anchor at a newline matches.  */
-  unsigned int _REG_RE_NAME (newline_anchor) : 1;
-
-/* [[[end pattern_buffer]]] */
-};
-
-typedef struct re_pattern_buffer regex_t;
-\f
-/* This is the structure we store register match data in.  See
-   regex.texinfo for a full description of what registers match.  */
-struct re_registers
-{
-  __re_size_t _REG_RM_NAME (num_regs);
-  regoff_t *_REG_RM_NAME (start);
-  regoff_t *_REG_RM_NAME (end);
-};
-
-
-/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
-   `re_match_2' returns information about at least this many registers
-   the first time a `regs' structure is passed.  */
-#if !defined RE_NREGS && defined __USE_GNU_REGEX
-# define RE_NREGS 30
-#endif
-
-
-/* POSIX specification for registers.  Aside from the different names than
-   `re_registers', POSIX uses an array of structures, instead of a
-   structure of arrays.  */
-typedef struct
-{
-  regoff_t rm_so;  /* Byte offset from string's start to substring's start.  */
-  regoff_t rm_eo;  /* Byte offset from string's start to substring's end.  */
-} regmatch_t;
-\f
-/* Declarations for routines.  */
-
-/* Sets the current default syntax to SYNTAX, and return the old syntax.
-   You can also simply assign to the `re_syntax_options' variable.  */
-extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax);
-
-/* Compile the regular expression PATTERN, with length LENGTH
-   and syntax given by the global `re_syntax_options', into the buffer
-   BUFFER.  Return NULL if successful, and an error string if not.  */
-extern const char *re_compile_pattern (const char *__pattern, size_t __length,
-                                      struct re_pattern_buffer *__buffer);
-
-
-/* Compile a fastmap for the compiled pattern in BUFFER; used to
-   accelerate searches.  Return 0 if successful and -2 if was an
-   internal error.  */
-extern int re_compile_fastmap (struct re_pattern_buffer *__buffer);
-
-
-/* Search in the string STRING (with length LENGTH) for the pattern
-   compiled into BUFFER.  Start searching at position START, for RANGE
-   characters.  Return the starting position of the match, -1 for no
-   match, or -2 for an internal error.  Also return register
-   information in REGS (if REGS and BUFFER->no_sub are nonzero).  */
-extern regoff_t re_search (struct re_pattern_buffer *__buffer,
-                          const char *__string, __re_idx_t __length,
-                          __re_idx_t __start, regoff_t __range,
-                          struct re_registers *__regs);
-
-
-/* Like `re_search', but search in the concatenation of STRING1 and
-   STRING2.  Also, stop searching at index START + STOP.  */
-extern regoff_t re_search_2 (struct re_pattern_buffer *__buffer,
-                            const char *__string1, __re_idx_t __length1,
-                            const char *__string2, __re_idx_t __length2,
-                            __re_idx_t __start, regoff_t __range,
-                            struct re_registers *__regs,
-                            __re_idx_t __stop);
-
-
-/* Like `re_search', but return how many characters in STRING the regexp
-   in BUFFER matched, starting at position START.  */
-extern regoff_t re_match (struct re_pattern_buffer *__buffer,
-                         const char *__string, __re_idx_t __length,
-                         __re_idx_t __start, struct re_registers *__regs);
-
-
-/* Relates to `re_match' as `re_search_2' relates to `re_search'.  */
-extern regoff_t re_match_2 (struct re_pattern_buffer *__buffer,
-                           const char *__string1, __re_idx_t __length1,
-                           const char *__string2, __re_idx_t __length2,
-                           __re_idx_t __start, struct re_registers *__regs,
-                           __re_idx_t __stop);
-
-
-/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
-   ENDS.  Subsequent matches using BUFFER and REGS will use this memory
-   for recording register information.  STARTS and ENDS must be
-   allocated with malloc, and must each be at least `NUM_REGS * sizeof
-   (regoff_t)' bytes long.
-
-   If NUM_REGS == 0, then subsequent matches should allocate their own
-   register data.
-
-   Unless this function is called, the first search or match using
-   PATTERN_BUFFER will allocate its own register data, without
-   freeing the old data.  */
-extern void re_set_registers (struct re_pattern_buffer *__buffer,
-                             struct re_registers *__regs,
-                             __re_size_t __num_regs,
-                             regoff_t *__starts, regoff_t *__ends);
-
-#if defined _REGEX_RE_COMP || defined _LIBC
-# ifndef _CRAY
-/* 4.2 bsd compatibility.  */
-extern char *re_comp (const char *);
-extern int re_exec (const char *);
-# endif
-#endif
-
-/* GCC 2.95 and later have "__restrict"; C99 compilers have
-   "restrict", and "configure" may have defined "restrict".
-   Other compilers use __restrict, __restrict__, and _Restrict, and
-   'configure' might #define 'restrict' to those words, so pick a
-   different name.  */
-#ifndef _Restrict_
-# if 199901L <= __STDC_VERSION__
-#  define _Restrict_ restrict
-# elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)
-#  define _Restrict_ __restrict
-# else
-#  define _Restrict_
-# endif
-#endif
-/* gcc 3.1 and up support the [restrict] syntax.  Don't trust
-   sys/cdefs.h's definition of __restrict_arr, though, as it
-   mishandles gcc -ansi -pedantic.  */
-#ifndef _Restrict_arr_
-# if ((199901L <= __STDC_VERSION__                                     \
-       || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__))    \
-          && !__STRICT_ANSI__))                                        \
-      && !defined __GNUG__)
-#  define _Restrict_arr_ _Restrict_
-# else
-#  define _Restrict_arr_
-# endif
-#endif
-
-/* POSIX compatibility.  */
-extern int regcomp (regex_t *_Restrict_ __preg,
-                   const char *_Restrict_ __pattern,
-                   int __cflags);
-
-extern int regexec (const regex_t *_Restrict_ __preg,
-                   const char *_Restrict_ __string, size_t __nmatch,
-                   regmatch_t __pmatch[_Restrict_arr_],
-                   int __eflags);
-
-extern size_t regerror (int __errcode, const regex_t *_Restrict_ __preg,
-                       char *_Restrict_ __errbuf, size_t __errbuf_size);
-
-extern void regfree (regex_t *__preg);
-
-
-#ifdef __cplusplus
-}
-#endif /* C++ */
-
-#endif /* regex.h */
diff --git a/lib/regex_internal.c b/lib/regex_internal.c
deleted file mode 100644 (file)
index 8a5a286..0000000
+++ /dev/null
@@ -1,1739 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Extended regular expression matching and search library.
-   Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-   Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Isamu Hasegawa <isamu@yamato.ibm.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.
-
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-
-static void re_string_construct_common (const char *str, Idx len,
-                                       re_string_t *pstr,
-                                       RE_TRANSLATE_TYPE trans, bool icase,
-                                       const re_dfa_t *dfa) internal_function;
-static re_dfastate_t *create_ci_newstate (const re_dfa_t *dfa,
-                                         const re_node_set *nodes,
-                                         re_hashval_t hash) internal_function;
-static re_dfastate_t *create_cd_newstate (const re_dfa_t *dfa,
-                                         const re_node_set *nodes,
-                                         unsigned int context,
-                                         re_hashval_t hash) internal_function;
-\f
-/* Functions for string operation.  */
-
-/* This function allocate the buffers.  It is necessary to call
-   re_string_reconstruct before using the object.  */
-
-static reg_errcode_t
-internal_function
-re_string_allocate (re_string_t *pstr, const char *str, Idx len, Idx init_len,
-                   RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa)
-{
-  reg_errcode_t ret;
-  Idx init_buf_len;
-
-  /* Ensure at least one character fits into the buffers.  */
-  if (init_len < dfa->mb_cur_max)
-    init_len = dfa->mb_cur_max;
-  init_buf_len = (len + 1 < init_len) ? len + 1: init_len;
-  re_string_construct_common (str, len, pstr, trans, icase, dfa);
-
-  ret = re_string_realloc_buffers (pstr, init_buf_len);
-  if (BE (ret != REG_NOERROR, 0))
-    return ret;
-
-  pstr->word_char = dfa->word_char;
-  pstr->word_ops_used = dfa->word_ops_used;
-  pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str;
-  pstr->valid_len = (pstr->mbs_allocated || dfa->mb_cur_max > 1) ? 0 : len;
-  pstr->valid_raw_len = pstr->valid_len;
-  return REG_NOERROR;
-}
-
-/* This function allocate the buffers, and initialize them.  */
-
-static reg_errcode_t
-internal_function
-re_string_construct (re_string_t *pstr, const char *str, Idx len,
-                    RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa)
-{
-  reg_errcode_t ret;
-  memset (pstr, '\0', sizeof (re_string_t));
-  re_string_construct_common (str, len, pstr, trans, icase, dfa);
-
-  if (len > 0)
-    {
-      ret = re_string_realloc_buffers (pstr, len + 1);
-      if (BE (ret != REG_NOERROR, 0))
-       return ret;
-    }
-  pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str;
-
-  if (icase)
-    {
-#ifdef RE_ENABLE_I18N
-      if (dfa->mb_cur_max > 1)
-       {
-         while (1)
-           {
-             ret = build_wcs_upper_buffer (pstr);
-             if (BE (ret != REG_NOERROR, 0))
-               return ret;
-             if (pstr->valid_raw_len >= len)
-               break;
-             if (pstr->bufs_len > pstr->valid_len + dfa->mb_cur_max)
-               break;
-             ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2);
-             if (BE (ret != REG_NOERROR, 0))
-               return ret;
-           }
-       }
-      else
-#endif /* RE_ENABLE_I18N  */
-       build_upper_buffer (pstr);
-    }
-  else
-    {
-#ifdef RE_ENABLE_I18N
-      if (dfa->mb_cur_max > 1)
-       build_wcs_buffer (pstr);
-      else
-#endif /* RE_ENABLE_I18N  */
-       {
-         if (trans != NULL)
-           re_string_translate_buffer (pstr);
-         else
-           {
-             pstr->valid_len = pstr->bufs_len;
-             pstr->valid_raw_len = pstr->bufs_len;
-           }
-       }
-    }
-
-  return REG_NOERROR;
-}
-
-/* Helper functions for re_string_allocate, and re_string_construct.  */
-
-static reg_errcode_t
-internal_function
-re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len)
-{
-#ifdef RE_ENABLE_I18N
-  if (pstr->mb_cur_max > 1)
-    {
-      wint_t *new_wcs;
-
-      /* Avoid overflow.  */
-      size_t max_object_size = MAX (sizeof (wint_t), sizeof (Idx));
-      if (BE (SIZE_MAX / max_object_size < new_buf_len, 0))
-       return REG_ESPACE;
-
-      new_wcs = re_realloc (pstr->wcs, wint_t, new_buf_len);
-      if (BE (new_wcs == NULL, 0))
-       return REG_ESPACE;
-      pstr->wcs = new_wcs;
-      if (pstr->offsets != NULL)
-       {
-         Idx *new_offsets = re_realloc (pstr->offsets, Idx, new_buf_len);
-         if (BE (new_offsets == NULL, 0))
-           return REG_ESPACE;
-         pstr->offsets = new_offsets;
-       }
-    }
-#endif /* RE_ENABLE_I18N  */
-  if (pstr->mbs_allocated)
-    {
-      unsigned char *new_mbs = re_realloc (pstr->mbs, unsigned char,
-                                          new_buf_len);
-      if (BE (new_mbs == NULL, 0))
-       return REG_ESPACE;
-      pstr->mbs = new_mbs;
-    }
-  pstr->bufs_len = new_buf_len;
-  return REG_NOERROR;
-}
-
-
-static void
-internal_function
-re_string_construct_common (const char *str, Idx len, re_string_t *pstr,
-                           RE_TRANSLATE_TYPE trans, bool icase,
-                           const re_dfa_t *dfa)
-{
-  pstr->raw_mbs = (const unsigned char *) str;
-  pstr->len = len;
-  pstr->raw_len = len;
-  pstr->trans = trans;
-  pstr->icase = icase;
-  pstr->mbs_allocated = (trans != NULL || icase);
-  pstr->mb_cur_max = dfa->mb_cur_max;
-  pstr->is_utf8 = dfa->is_utf8;
-  pstr->map_notascii = dfa->map_notascii;
-  pstr->stop = pstr->len;
-  pstr->raw_stop = pstr->stop;
-}
-
-#ifdef RE_ENABLE_I18N
-
-/* Build wide character buffer PSTR->WCS.
-   If the byte sequence of the string are:
-     <mb1>(0), <mb1>(1), <mb2>(0), <mb2>(1), <sb3>
-   Then wide character buffer will be:
-     <wc1>   , WEOF    , <wc2>   , WEOF    , <wc3>
-   We use WEOF for padding, they indicate that the position isn't
-   a first byte of a multibyte character.
-
-   Note that this function assumes PSTR->VALID_LEN elements are already
-   built and starts from PSTR->VALID_LEN.  */
-
-static void
-internal_function
-build_wcs_buffer (re_string_t *pstr)
-{
-#ifdef _LIBC
-  unsigned char buf[MB_LEN_MAX];
-  assert (MB_LEN_MAX >= pstr->mb_cur_max);
-#else
-  unsigned char buf[64];
-#endif
-  mbstate_t prev_st;
-  Idx byte_idx, end_idx, remain_len;
-  size_t mbclen;
-
-  /* Build the buffers from pstr->valid_len to either pstr->len or
-     pstr->bufs_len.  */
-  end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len;
-  for (byte_idx = pstr->valid_len; byte_idx < end_idx;)
-    {
-      wchar_t wc;
-      const char *p;
-
-      remain_len = end_idx - byte_idx;
-      prev_st = pstr->cur_state;
-      /* Apply the translation if we need.  */
-      if (BE (pstr->trans != NULL, 0))
-       {
-         int i, ch;
-
-         for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i)
-           {
-             ch = pstr->raw_mbs [pstr->raw_mbs_idx + byte_idx + i];
-             buf[i] = pstr->mbs[byte_idx + i] = pstr->trans[ch];
-           }
-         p = (const char *) buf;
-       }
-      else
-       p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx;
-      mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state);
-      if (BE (mbclen == (size_t) -2, 0))
-       {
-         /* The buffer doesn't have enough space, finish to build.  */
-         pstr->cur_state = prev_st;
-         break;
-       }
-      else if (BE (mbclen == (size_t) -1 || mbclen == 0, 0))
-       {
-         /* We treat these cases as a singlebyte character.  */
-         mbclen = 1;
-         wc = (wchar_t) pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx];
-         if (BE (pstr->trans != NULL, 0))
-           wc = pstr->trans[wc];
-         pstr->cur_state = prev_st;
-       }
-
-      /* Write wide character and padding.  */
-      pstr->wcs[byte_idx++] = wc;
-      /* Write paddings.  */
-      for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;)
-       pstr->wcs[byte_idx++] = WEOF;
-    }
-  pstr->valid_len = byte_idx;
-  pstr->valid_raw_len = byte_idx;
-}
-
-/* Build wide character buffer PSTR->WCS like build_wcs_buffer,
-   but for REG_ICASE.  */
-
-static reg_errcode_t
-internal_function
-build_wcs_upper_buffer (re_string_t *pstr)
-{
-  mbstate_t prev_st;
-  Idx src_idx, byte_idx, end_idx, remain_len;
-  size_t mbclen;
-#ifdef _LIBC
-  char buf[MB_LEN_MAX];
-  assert (MB_LEN_MAX >= pstr->mb_cur_max);
-#else
-  char buf[64];
-#endif
-
-  byte_idx = pstr->valid_len;
-  end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len;
-
-  /* The following optimization assumes that ASCII characters can be
-     mapped to wide characters with a simple cast.  */
-  if (! pstr->map_notascii && pstr->trans == NULL && !pstr->offsets_needed)
-    {
-      while (byte_idx < end_idx)
-       {
-         wchar_t wc;
-
-         if (isascii (pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx])
-             && mbsinit (&pstr->cur_state))
-           {
-             /* In case of a singlebyte character.  */
-             pstr->mbs[byte_idx]
-               = toupper (pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]);
-             /* The next step uses the assumption that wchar_t is encoded
-                ASCII-safe: all ASCII values can be converted like this.  */
-             pstr->wcs[byte_idx] = (wchar_t) pstr->mbs[byte_idx];
-             ++byte_idx;
-             continue;
-           }
-
-         remain_len = end_idx - byte_idx;
-         prev_st = pstr->cur_state;
-         mbclen = __mbrtowc (&wc,
-                             ((const char *) pstr->raw_mbs + pstr->raw_mbs_idx
-                              + byte_idx), remain_len, &pstr->cur_state);
-         if (BE (mbclen < (size_t) -2, 1))
-           {
-             wchar_t wcu = wc;
-             if (iswlower (wc))
-               {
-                 size_t mbcdlen;
-
-                 wcu = towupper (wc);
-                 mbcdlen = wcrtomb (buf, wcu, &prev_st);
-                 if (BE (mbclen == mbcdlen, 1))
-                   memcpy (pstr->mbs + byte_idx, buf, mbclen);
-                 else
-                   {
-                     src_idx = byte_idx;
-                     goto offsets_needed;
-                   }
-               }
-             else
-               memcpy (pstr->mbs + byte_idx,
-                       pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx, mbclen);
-             pstr->wcs[byte_idx++] = wcu;
-             /* Write paddings.  */
-             for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;)
-               pstr->wcs[byte_idx++] = WEOF;
-           }
-         else if (mbclen == (size_t) -1 || mbclen == 0)
-           {
-             /* It is an invalid character or '\0'.  Just use the byte.  */
-             int ch = pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx];
-             pstr->mbs[byte_idx] = ch;
-             /* And also cast it to wide char.  */
-             pstr->wcs[byte_idx++] = (wchar_t) ch;
-             if (BE (mbclen == (size_t) -1, 0))
-               pstr->cur_state = prev_st;
-           }
-         else
-           {
-             /* The buffer doesn't have enough space, finish to build.  */
-             pstr->cur_state = prev_st;
-             break;
-           }
-       }
-      pstr->valid_len = byte_idx;
-      pstr->valid_raw_len = byte_idx;
-      return REG_NOERROR;
-    }
-  else
-    for (src_idx = pstr->valid_raw_len; byte_idx < end_idx;)
-      {
-       wchar_t wc;
-       const char *p;
-      offsets_needed:
-       remain_len = end_idx - byte_idx;
-       prev_st = pstr->cur_state;
-       if (BE (pstr->trans != NULL, 0))
-         {
-           int i, ch;
-
-           for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i)
-             {
-               ch = pstr->raw_mbs [pstr->raw_mbs_idx + src_idx + i];
-               buf[i] = pstr->trans[ch];
-             }
-           p = (const char *) buf;
-         }
-       else
-         p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + src_idx;
-       mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state);
-       if (BE (mbclen < (size_t) -2, 1))
-         {
-           wchar_t wcu = wc;
-           if (iswlower (wc))
-             {
-               size_t mbcdlen;
-
-               wcu = towupper (wc);
-               mbcdlen = wcrtomb ((char *) buf, wcu, &prev_st);
-               if (BE (mbclen == mbcdlen, 1))
-                 memcpy (pstr->mbs + byte_idx, buf, mbclen);
-               else if (mbcdlen != (size_t) -1)
-                 {
-                   size_t i;
-
-                   if (byte_idx + mbcdlen > pstr->bufs_len)
-                     {
-                       pstr->cur_state = prev_st;
-                       break;
-                     }
-
-                   if (pstr->offsets == NULL)
-                     {
-                       pstr->offsets = re_malloc (Idx, pstr->bufs_len);
-
-                       if (pstr->offsets == NULL)
-                         return REG_ESPACE;
-                     }
-                   if (!pstr->offsets_needed)
-                     {
-                       for (i = 0; i < (size_t) byte_idx; ++i)
-                         pstr->offsets[i] = i;
-                       pstr->offsets_needed = 1;
-                     }
-
-                   memcpy (pstr->mbs + byte_idx, buf, mbcdlen);
-                   pstr->wcs[byte_idx] = wcu;
-                   pstr->offsets[byte_idx] = src_idx;
-                   for (i = 1; i < mbcdlen; ++i)
-                     {
-                       pstr->offsets[byte_idx + i]
-                         = src_idx + (i < mbclen ? i : mbclen - 1);
-                       pstr->wcs[byte_idx + i] = WEOF;
-                     }
-                   pstr->len += mbcdlen - mbclen;
-                   if (pstr->raw_stop > src_idx)
-                     pstr->stop += mbcdlen - mbclen;
-                   end_idx = (pstr->bufs_len > pstr->len)
-                             ? pstr->len : pstr->bufs_len;
-                   byte_idx += mbcdlen;
-                   src_idx += mbclen;
-                   continue;
-                 }
-                else
-                  memcpy (pstr->mbs + byte_idx, p, mbclen);
-             }
-           else
-             memcpy (pstr->mbs + byte_idx, p, mbclen);
-
-           if (BE (pstr->offsets_needed != 0, 0))
-             {
-               size_t i;
-               for (i = 0; i < mbclen; ++i)
-                 pstr->offsets[byte_idx + i] = src_idx + i;
-             }
-           src_idx += mbclen;
-
-           pstr->wcs[byte_idx++] = wcu;
-           /* Write paddings.  */
-           for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;)
-             pstr->wcs[byte_idx++] = WEOF;
-         }
-       else if (mbclen == (size_t) -1 || mbclen == 0)
-         {
-           /* It is an invalid character or '\0'.  Just use the byte.  */
-           int ch = pstr->raw_mbs[pstr->raw_mbs_idx + src_idx];
-
-           if (BE (pstr->trans != NULL, 0))
-             ch = pstr->trans [ch];
-           pstr->mbs[byte_idx] = ch;
-
-           if (BE (pstr->offsets_needed != 0, 0))
-             pstr->offsets[byte_idx] = src_idx;
-           ++src_idx;
-
-           /* And also cast it to wide char.  */
-           pstr->wcs[byte_idx++] = (wchar_t) ch;
-           if (BE (mbclen == (size_t) -1, 0))
-             pstr->cur_state = prev_st;
-         }
-       else
-         {
-           /* The buffer doesn't have enough space, finish to build.  */
-           pstr->cur_state = prev_st;
-           break;
-         }
-      }
-  pstr->valid_len = byte_idx;
-  pstr->valid_raw_len = src_idx;
-  return REG_NOERROR;
-}
-
-/* Skip characters until the index becomes greater than NEW_RAW_IDX.
-   Return the index.  */
-
-static Idx
-internal_function
-re_string_skip_chars (re_string_t *pstr, Idx new_raw_idx, wint_t *last_wc)
-{
-  mbstate_t prev_st;
-  Idx rawbuf_idx;
-  size_t mbclen;
-  wint_t wc = WEOF;
-
-  /* Skip the characters which are not necessary to check.  */
-  for (rawbuf_idx = pstr->raw_mbs_idx + pstr->valid_raw_len;
-       rawbuf_idx < new_raw_idx;)
-    {
-      wchar_t wc2;
-      Idx remain_len;
-      remain_len = pstr->len - rawbuf_idx;
-      prev_st = pstr->cur_state;
-      mbclen = __mbrtowc (&wc2, (const char *) pstr->raw_mbs + rawbuf_idx,
-                         remain_len, &pstr->cur_state);
-      if (BE (mbclen == (size_t) -2 || mbclen == (size_t) -1 || mbclen == 0, 0))
-       {
-         /* We treat these cases as a single byte character.  */
-         if (mbclen == 0 || remain_len == 0)
-           wc = L'\0';
-         else
-           wc = *(unsigned char *) (pstr->raw_mbs + rawbuf_idx);
-         mbclen = 1;
-         pstr->cur_state = prev_st;
-       }
-      else
-       wc = wc2;
-      /* Then proceed the next character.  */
-      rawbuf_idx += mbclen;
-    }
-  *last_wc = wc;
-  return rawbuf_idx;
-}
-#endif /* RE_ENABLE_I18N  */
-
-/* Build the buffer PSTR->MBS, and apply the translation if we need.
-   This function is used in case of REG_ICASE.  */
-
-static void
-internal_function
-build_upper_buffer (re_string_t *pstr)
-{
-  Idx char_idx, end_idx;
-  end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len;
-
-  for (char_idx = pstr->valid_len; char_idx < end_idx; ++char_idx)
-    {
-      int ch = pstr->raw_mbs[pstr->raw_mbs_idx + char_idx];
-      if (BE (pstr->trans != NULL, 0))
-       ch = pstr->trans[ch];
-      if (islower (ch))
-       pstr->mbs[char_idx] = toupper (ch);
-      else
-       pstr->mbs[char_idx] = ch;
-    }
-  pstr->valid_len = char_idx;
-  pstr->valid_raw_len = char_idx;
-}
-
-/* Apply TRANS to the buffer in PSTR.  */
-
-static void
-internal_function
-re_string_translate_buffer (re_string_t *pstr)
-{
-  Idx buf_idx, end_idx;
-  end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len;
-
-  for (buf_idx = pstr->valid_len; buf_idx < end_idx; ++buf_idx)
-    {
-      int ch = pstr->raw_mbs[pstr->raw_mbs_idx + buf_idx];
-      pstr->mbs[buf_idx] = pstr->trans[ch];
-    }
-
-  pstr->valid_len = buf_idx;
-  pstr->valid_raw_len = buf_idx;
-}
-
-/* This function re-construct the buffers.
-   Concretely, convert to wide character in case of pstr->mb_cur_max > 1,
-   convert to upper case in case of REG_ICASE, apply translation.  */
-
-static reg_errcode_t
-internal_function
-re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags)
-{
-  Idx offset;
-
-  if (BE (pstr->raw_mbs_idx <= idx, 0))
-    offset = idx - pstr->raw_mbs_idx;
-  else
-    {
-      /* Reset buffer.  */
-#ifdef RE_ENABLE_I18N
-      if (pstr->mb_cur_max > 1)
-       memset (&pstr->cur_state, '\0', sizeof (mbstate_t));
-#endif /* RE_ENABLE_I18N */
-      pstr->len = pstr->raw_len;
-      pstr->stop = pstr->raw_stop;
-      pstr->valid_len = 0;
-      pstr->raw_mbs_idx = 0;
-      pstr->valid_raw_len = 0;
-      pstr->offsets_needed = 0;
-      pstr->tip_context = ((eflags & REG_NOTBOL) ? CONTEXT_BEGBUF
-                          : CONTEXT_NEWLINE | CONTEXT_BEGBUF);
-      if (!pstr->mbs_allocated)
-       pstr->mbs = (unsigned char *) pstr->raw_mbs;
-      offset = idx;
-    }
-
-  if (BE (offset != 0, 1))
-    {
-      /* Should the already checked characters be kept?  */
-      if (BE (offset < pstr->valid_raw_len, 1))
-       {
-         /* Yes, move them to the front of the buffer.  */
-#ifdef RE_ENABLE_I18N
-         if (BE (pstr->offsets_needed, 0))
-           {
-             Idx low = 0, high = pstr->valid_len, mid;
-             do
-               {
-                 mid = (high + low) / 2;
-                 if (pstr->offsets[mid] > offset)
-                   high = mid;
-                 else if (pstr->offsets[mid] < offset)
-                   low = mid + 1;
-                 else
-                   break;
-               }
-             while (low < high);
-             if (pstr->offsets[mid] < offset)
-               ++mid;
-             pstr->tip_context = re_string_context_at (pstr, mid - 1,
-                                                       eflags);
-             /* This can be quite complicated, so handle specially
-                only the common and easy case where the character with
-                different length representation of lower and upper
-                case is present at or after offset.  */
-             if (pstr->valid_len > offset
-                 && mid == offset && pstr->offsets[mid] == offset)
-               {
-                 memmove (pstr->wcs, pstr->wcs + offset,
-                          (pstr->valid_len - offset) * sizeof (wint_t));
-                 memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset);
-                 pstr->valid_len -= offset;
-                 pstr->valid_raw_len -= offset;
-                 for (low = 0; low < pstr->valid_len; low++)
-                   pstr->offsets[low] = pstr->offsets[low + offset] - offset;
-               }
-             else
-               {
-                 /* Otherwise, just find out how long the partial multibyte
-                    character at offset is and fill it with WEOF/255.  */
-                 pstr->len = pstr->raw_len - idx + offset;
-                 pstr->stop = pstr->raw_stop - idx + offset;
-                 pstr->offsets_needed = 0;
-                 while (mid > 0 && pstr->offsets[mid - 1] == offset)
-                   --mid;
-                 while (mid < pstr->valid_len)
-                   if (pstr->wcs[mid] != WEOF)
-                     break;
-                   else
-                     ++mid;
-                 if (mid == pstr->valid_len)
-                   pstr->valid_len = 0;
-                 else
-                   {
-                     pstr->valid_len = pstr->offsets[mid] - offset;
-                     if (pstr->valid_len)
-                       {
-                         for (low = 0; low < pstr->valid_len; ++low)
-                           pstr->wcs[low] = WEOF;
-                         memset (pstr->mbs, 255, pstr->valid_len);
-                       }
-                   }
-                 pstr->valid_raw_len = pstr->valid_len;
-               }
-           }
-         else
-#endif
-           {
-             pstr->tip_context = re_string_context_at (pstr, offset - 1,
-                                                       eflags);
-#ifdef RE_ENABLE_I18N
-             if (pstr->mb_cur_max > 1)
-               memmove (pstr->wcs, pstr->wcs + offset,
-                        (pstr->valid_len - offset) * sizeof (wint_t));
-#endif /* RE_ENABLE_I18N */
-             if (BE (pstr->mbs_allocated, 0))
-               memmove (pstr->mbs, pstr->mbs + offset,
-                        pstr->valid_len - offset);
-             pstr->valid_len -= offset;
-             pstr->valid_raw_len -= offset;
-#if DEBUG
-             assert (pstr->valid_len > 0);
-#endif
-           }
-       }
-      else
-       {
-#ifdef RE_ENABLE_I18N
-         /* No, skip all characters until IDX.  */
-         Idx prev_valid_len = pstr->valid_len;
-
-         if (BE (pstr->offsets_needed, 0))
-           {
-             pstr->len = pstr->raw_len - idx + offset;
-             pstr->stop = pstr->raw_stop - idx + offset;
-             pstr->offsets_needed = 0;
-           }
-#endif
-         pstr->valid_len = 0;
-#ifdef RE_ENABLE_I18N
-         if (pstr->mb_cur_max > 1)
-           {
-             Idx wcs_idx;
-             wint_t wc = WEOF;
-
-             if (pstr->is_utf8)
-               {
-                 const unsigned char *raw, *p, *end;
-
-                 /* Special case UTF-8.  Multi-byte chars start with any
-                    byte other than 0x80 - 0xbf.  */
-                 raw = pstr->raw_mbs + pstr->raw_mbs_idx;
-                 end = raw + (offset - pstr->mb_cur_max);
-                 if (end < pstr->raw_mbs)
-                   end = pstr->raw_mbs;
-                 p = raw + offset - 1;
-#ifdef _LIBC
-                 /* We know the wchar_t encoding is UCS4, so for the simple
-                    case, ASCII characters, skip the conversion step.  */
-                 if (isascii (*p) && BE (pstr->trans == NULL, 1))
-                   {
-                     memset (&pstr->cur_state, '\0', sizeof (mbstate_t));
-                     /* pstr->valid_len = 0; */
-                     wc = (wchar_t) *p;
-                   }
-                 else
-#endif
-                   for (; p >= end; --p)
-                     if ((*p & 0xc0) != 0x80)
-                       {
-                         mbstate_t cur_state;
-                         wchar_t wc2;
-                         Idx mlen = raw + pstr->len - p;
-                         unsigned char buf[6];
-                         size_t mbclen;
-
-                         if (BE (pstr->trans != NULL, 0))
-                           {
-                             int i = mlen < 6 ? mlen : 6;
-                             while (--i >= 0)
-                               buf[i] = pstr->trans[p[i]];
-                           }
-                         /* XXX Don't use mbrtowc, we know which conversion
-                            to use (UTF-8 -> UCS4).  */
-                         memset (&cur_state, 0, sizeof (cur_state));
-                         mbclen = __mbrtowc (&wc2, (const char *) p, mlen,
-                                             &cur_state);
-                         if (raw + offset - p <= mbclen
-                             && mbclen < (size_t) -2)
-                           {
-                             memset (&pstr->cur_state, '\0',
-                                     sizeof (mbstate_t));
-                             pstr->valid_len = mbclen - (raw + offset - p);
-                             wc = wc2;
-                           }
-                         break;
-                       }
-               }
-
-             if (wc == WEOF)
-               pstr->valid_len = re_string_skip_chars (pstr, idx, &wc) - idx;
-             if (wc == WEOF)
-               pstr->tip_context
-                 = re_string_context_at (pstr, prev_valid_len - 1, eflags);
-             else
-               pstr->tip_context = ((BE (pstr->word_ops_used != 0, 0)
-                                     && IS_WIDE_WORD_CHAR (wc))
-                                    ? CONTEXT_WORD
-                                    : ((IS_WIDE_NEWLINE (wc)
-                                        && pstr->newline_anchor)
-                                       ? CONTEXT_NEWLINE : 0));
-             if (BE (pstr->valid_len, 0))
-               {
-                 for (wcs_idx = 0; wcs_idx < pstr->valid_len; ++wcs_idx)
-                   pstr->wcs[wcs_idx] = WEOF;
-                 if (pstr->mbs_allocated)
-                   memset (pstr->mbs, 255, pstr->valid_len);
-               }
-             pstr->valid_raw_len = pstr->valid_len;
-           }
-         else
-#endif /* RE_ENABLE_I18N */
-           {
-             int c = pstr->raw_mbs[pstr->raw_mbs_idx + offset - 1];
-             pstr->valid_raw_len = 0;
-             if (pstr->trans)
-               c = pstr->trans[c];
-             pstr->tip_context = (bitset_contain (pstr->word_char, c)
-                                  ? CONTEXT_WORD
-                                  : ((IS_NEWLINE (c) && pstr->newline_anchor)
-                                     ? CONTEXT_NEWLINE : 0));
-           }
-       }
-      if (!BE (pstr->mbs_allocated, 0))
-       pstr->mbs += offset;
-    }
-  pstr->raw_mbs_idx = idx;
-  pstr->len -= offset;
-  pstr->stop -= offset;
-
-  /* Then build the buffers.  */
-#ifdef RE_ENABLE_I18N
-  if (pstr->mb_cur_max > 1)
-    {
-      if (pstr->icase)
-       {
-         reg_errcode_t ret = build_wcs_upper_buffer (pstr);
-         if (BE (ret != REG_NOERROR, 0))
-           return ret;
-       }
-      else
-       build_wcs_buffer (pstr);
-    }
-  else
-#endif /* RE_ENABLE_I18N */
-    if (BE (pstr->mbs_allocated, 0))
-      {
-       if (pstr->icase)
-         build_upper_buffer (pstr);
-       else if (pstr->trans != NULL)
-         re_string_translate_buffer (pstr);
-      }
-    else
-      pstr->valid_len = pstr->len;
-
-  pstr->cur_idx = 0;
-  return REG_NOERROR;
-}
-
-static unsigned char
-internal_function __attribute ((pure))
-re_string_peek_byte_case (const re_string_t *pstr, Idx idx)
-{
-  int ch;
-  Idx off;
-
-  /* Handle the common (easiest) cases first.  */
-  if (BE (!pstr->mbs_allocated, 1))
-    return re_string_peek_byte (pstr, idx);
-
-#ifdef RE_ENABLE_I18N
-  if (pstr->mb_cur_max > 1
-      && ! re_string_is_single_byte_char (pstr, pstr->cur_idx + idx))
-    return re_string_peek_byte (pstr, idx);
-#endif
-
-  off = pstr->cur_idx + idx;
-#ifdef RE_ENABLE_I18N
-  if (pstr->offsets_needed)
-    off = pstr->offsets[off];
-#endif
-
-  ch = pstr->raw_mbs[pstr->raw_mbs_idx + off];
-
-#ifdef RE_ENABLE_I18N
-  /* Ensure that e.g. for tr_TR.UTF-8 BACKSLASH DOTLESS SMALL LETTER I
-     this function returns CAPITAL LETTER I instead of first byte of
-     DOTLESS SMALL LETTER I.  The latter would confuse the parser,
-     since peek_byte_case doesn't advance cur_idx in any way.  */
-  if (pstr->offsets_needed && !isascii (ch))
-    return re_string_peek_byte (pstr, idx);
-#endif
-
-  return ch;
-}
-
-static unsigned char
-internal_function __attribute ((pure))
-re_string_fetch_byte_case (re_string_t *pstr)
-{
-  if (BE (!pstr->mbs_allocated, 1))
-    return re_string_fetch_byte (pstr);
-
-#ifdef RE_ENABLE_I18N
-  if (pstr->offsets_needed)
-    {
-      Idx off;
-      int ch;
-
-      /* For tr_TR.UTF-8 [[:islower:]] there is
-        [[: CAPITAL LETTER I WITH DOT lower:]] in mbs.  Skip
-        in that case the whole multi-byte character and return
-        the original letter.  On the other side, with
-        [[: DOTLESS SMALL LETTER I return [[:I, as doing
-        anything else would complicate things too much.  */
-
-      if (!re_string_first_byte (pstr, pstr->cur_idx))
-       return re_string_fetch_byte (pstr);
-
-      off = pstr->offsets[pstr->cur_idx];
-      ch = pstr->raw_mbs[pstr->raw_mbs_idx + off];
-
-      if (! isascii (ch))
-       return re_string_fetch_byte (pstr);
-
-      re_string_skip_bytes (pstr,
-                           re_string_char_size_at (pstr, pstr->cur_idx));
-      return ch;
-    }
-#endif
-
-  return pstr->raw_mbs[pstr->raw_mbs_idx + pstr->cur_idx++];
-}
-
-static void
-internal_function
-re_string_destruct (re_string_t *pstr)
-{
-#ifdef RE_ENABLE_I18N
-  re_free (pstr->wcs);
-  re_free (pstr->offsets);
-#endif /* RE_ENABLE_I18N  */
-  if (pstr->mbs_allocated)
-    re_free (pstr->mbs);
-}
-
-/* Return the context at IDX in INPUT.  */
-
-static unsigned int
-internal_function
-re_string_context_at (const re_string_t *input, Idx idx, int eflags)
-{
-  int c;
-  if (BE (! REG_VALID_INDEX (idx), 0))
-    /* In this case, we use the value stored in input->tip_context,
-       since we can't know the character in input->mbs[-1] here.  */
-    return input->tip_context;
-  if (BE (idx == input->len, 0))
-    return ((eflags & REG_NOTEOL) ? CONTEXT_ENDBUF
-           : CONTEXT_NEWLINE | CONTEXT_ENDBUF);
-#ifdef RE_ENABLE_I18N
-  if (input->mb_cur_max > 1)
-    {
-      wint_t wc;
-      Idx wc_idx = idx;
-      while(input->wcs[wc_idx] == WEOF)
-       {
-#ifdef DEBUG
-         /* It must not happen.  */
-         assert (REG_VALID_INDEX (wc_idx));
-#endif
-         --wc_idx;
-         if (! REG_VALID_INDEX (wc_idx))
-           return input->tip_context;
-       }
-      wc = input->wcs[wc_idx];
-      if (BE (input->word_ops_used != 0, 0) && IS_WIDE_WORD_CHAR (wc))
-       return CONTEXT_WORD;
-      return (IS_WIDE_NEWLINE (wc) && input->newline_anchor
-             ? CONTEXT_NEWLINE : 0);
-    }
-  else
-#endif
-    {
-      c = re_string_byte_at (input, idx);
-      if (bitset_contain (input->word_char, c))
-       return CONTEXT_WORD;
-      return IS_NEWLINE (c) && input->newline_anchor ? CONTEXT_NEWLINE : 0;
-    }
-}
-\f
-/* Functions for set operation.  */
-
-static reg_errcode_t
-internal_function
-re_node_set_alloc (re_node_set *set, Idx size)
-{
-  set->alloc = size;
-  set->nelem = 0;
-  set->elems = re_malloc (Idx, size);
-  if (BE (set->elems == NULL, 0))
-    return REG_ESPACE;
-  return REG_NOERROR;
-}
-
-static reg_errcode_t
-internal_function
-re_node_set_init_1 (re_node_set *set, Idx elem)
-{
-  set->alloc = 1;
-  set->nelem = 1;
-  set->elems = re_malloc (Idx, 1);
-  if (BE (set->elems == NULL, 0))
-    {
-      set->alloc = set->nelem = 0;
-      return REG_ESPACE;
-    }
-  set->elems[0] = elem;
-  return REG_NOERROR;
-}
-
-static reg_errcode_t
-internal_function
-re_node_set_init_2 (re_node_set *set, Idx elem1, Idx elem2)
-{
-  set->alloc = 2;
-  set->elems = re_malloc (Idx, 2);
-  if (BE (set->elems == NULL, 0))
-    return REG_ESPACE;
-  if (elem1 == elem2)
-    {
-      set->nelem = 1;
-      set->elems[0] = elem1;
-    }
-  else
-    {
-      set->nelem = 2;
-      if (elem1 < elem2)
-       {
-         set->elems[0] = elem1;
-         set->elems[1] = elem2;
-       }
-      else
-       {
-         set->elems[0] = elem2;
-         set->elems[1] = elem1;
-       }
-    }
-  return REG_NOERROR;
-}
-
-static reg_errcode_t
-internal_function
-re_node_set_init_copy (re_node_set *dest, const re_node_set *src)
-{
-  dest->nelem = src->nelem;
-  if (src->nelem > 0)
-    {
-      dest->alloc = dest->nelem;
-      dest->elems = re_malloc (Idx, dest->alloc);
-      if (BE (dest->elems == NULL, 0))
-       {
-         dest->alloc = dest->nelem = 0;
-         return REG_ESPACE;
-       }
-      memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx));
-    }
-  else
-    re_node_set_init_empty (dest);
-  return REG_NOERROR;
-}
-
-/* Calculate the intersection of the sets SRC1 and SRC2. And merge it to
-   DEST. Return value indicate the error code or REG_NOERROR if succeeded.
-   Note: We assume dest->elems is NULL, when dest->alloc is 0.  */
-
-static reg_errcode_t
-internal_function
-re_node_set_add_intersect (re_node_set *dest, const re_node_set *src1,
-                          const re_node_set *src2)
-{
-  Idx i1, i2, is, id, delta, sbase;
-  if (src1->nelem == 0 || src2->nelem == 0)
-    return REG_NOERROR;
-
-  /* We need dest->nelem + 2 * elems_in_intersection; this is a
-     conservative estimate.  */
-  if (src1->nelem + src2->nelem + dest->nelem > dest->alloc)
-    {
-      Idx new_alloc = src1->nelem + src2->nelem + dest->alloc;
-      Idx *new_elems = re_realloc (dest->elems, Idx, new_alloc);
-      if (BE (new_elems == NULL, 0))
-        return REG_ESPACE;
-      dest->elems = new_elems;
-      dest->alloc = new_alloc;
-    }
-
-  /* Find the items in the intersection of SRC1 and SRC2, and copy
-     into the top of DEST those that are not already in DEST itself.  */
-  sbase = dest->nelem + src1->nelem + src2->nelem;
-  i1 = src1->nelem - 1;
-  i2 = src2->nelem - 1;
-  id = dest->nelem - 1;
-  for (;;)
-    {
-      if (src1->elems[i1] == src2->elems[i2])
-       {
-         /* Try to find the item in DEST.  Maybe we could binary search?  */
-         while (REG_VALID_INDEX (id) && dest->elems[id] > src1->elems[i1])
-           --id;
-
-          if (! REG_VALID_INDEX (id) || dest->elems[id] != src1->elems[i1])
-            dest->elems[--sbase] = src1->elems[i1];
-
-         if (! REG_VALID_INDEX (--i1) || ! REG_VALID_INDEX (--i2))
-           break;
-       }
-
-      /* Lower the highest of the two items.  */
-      else if (src1->elems[i1] < src2->elems[i2])
-       {
-         if (! REG_VALID_INDEX (--i2))
-           break;
-       }
-      else
-       {
-         if (! REG_VALID_INDEX (--i1))
-           break;
-       }
-    }
-
-  id = dest->nelem - 1;
-  is = dest->nelem + src1->nelem + src2->nelem - 1;
-  delta = is - sbase + 1;
-
-  /* Now copy.  When DELTA becomes zero, the remaining
-     DEST elements are already in place; this is more or
-     less the same loop that is in re_node_set_merge.  */
-  dest->nelem += delta;
-  if (delta > 0 && REG_VALID_INDEX (id))
-    for (;;)
-      {
-        if (dest->elems[is] > dest->elems[id])
-          {
-            /* Copy from the top.  */
-            dest->elems[id + delta--] = dest->elems[is--];
-            if (delta == 0)
-              break;
-          }
-        else
-          {
-            /* Slide from the bottom.  */
-            dest->elems[id + delta] = dest->elems[id];
-            if (! REG_VALID_INDEX (--id))
-              break;
-          }
-      }
-
-  /* Copy remaining SRC elements.  */
-  memcpy (dest->elems, dest->elems + sbase, delta * sizeof (Idx));
-
-  return REG_NOERROR;
-}
-
-/* Calculate the union set of the sets SRC1 and SRC2. And store it to
-   DEST. Return value indicate the error code or REG_NOERROR if succeeded.  */
-
-static reg_errcode_t
-internal_function
-re_node_set_init_union (re_node_set *dest, const re_node_set *src1,
-                       const re_node_set *src2)
-{
-  Idx i1, i2, id;
-  if (src1 != NULL && src1->nelem > 0 && src2 != NULL && src2->nelem > 0)
-    {
-      dest->alloc = src1->nelem + src2->nelem;
-      dest->elems = re_malloc (Idx, dest->alloc);
-      if (BE (dest->elems == NULL, 0))
-       return REG_ESPACE;
-    }
-  else
-    {
-      if (src1 != NULL && src1->nelem > 0)
-       return re_node_set_init_copy (dest, src1);
-      else if (src2 != NULL && src2->nelem > 0)
-       return re_node_set_init_copy (dest, src2);
-      else
-       re_node_set_init_empty (dest);
-      return REG_NOERROR;
-    }
-  for (i1 = i2 = id = 0 ; i1 < src1->nelem && i2 < src2->nelem ;)
-    {
-      if (src1->elems[i1] > src2->elems[i2])
-       {
-         dest->elems[id++] = src2->elems[i2++];
-         continue;
-       }
-      if (src1->elems[i1] == src2->elems[i2])
-       ++i2;
-      dest->elems[id++] = src1->elems[i1++];
-    }
-  if (i1 < src1->nelem)
-    {
-      memcpy (dest->elems + id, src1->elems + i1,
-            (src1->nelem - i1) * sizeof (Idx));
-      id += src1->nelem - i1;
-    }
-  else if (i2 < src2->nelem)
-    {
-      memcpy (dest->elems + id, src2->elems + i2,
-            (src2->nelem - i2) * sizeof (Idx));
-      id += src2->nelem - i2;
-    }
-  dest->nelem = id;
-  return REG_NOERROR;
-}
-
-/* Calculate the union set of the sets DEST and SRC. And store it to
-   DEST. Return value indicate the error code or REG_NOERROR if succeeded.  */
-
-static reg_errcode_t
-internal_function
-re_node_set_merge (re_node_set *dest, const re_node_set *src)
-{
-  Idx is, id, sbase, delta;
-  if (src == NULL || src->nelem == 0)
-    return REG_NOERROR;
-  if (dest->alloc < 2 * src->nelem + dest->nelem)
-    {
-      Idx new_alloc = 2 * (src->nelem + dest->alloc);
-      Idx *new_buffer = re_realloc (dest->elems, Idx, new_alloc);
-      if (BE (new_buffer == NULL, 0))
-       return REG_ESPACE;
-      dest->elems = new_buffer;
-      dest->alloc = new_alloc;
-    }
-
-  if (BE (dest->nelem == 0, 0))
-    {
-      dest->nelem = src->nelem;
-      memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx));
-      return REG_NOERROR;
-    }
-
-  /* Copy into the top of DEST the items of SRC that are not
-     found in DEST.  Maybe we could binary search in DEST?  */
-  for (sbase = dest->nelem + 2 * src->nelem,
-       is = src->nelem - 1, id = dest->nelem - 1;
-       REG_VALID_INDEX (is) && REG_VALID_INDEX (id); )
-    {
-      if (dest->elems[id] == src->elems[is])
-        is--, id--;
-      else if (dest->elems[id] < src->elems[is])
-        dest->elems[--sbase] = src->elems[is--];
-      else /* if (dest->elems[id] > src->elems[is]) */
-        --id;
-    }
-
-  if (REG_VALID_INDEX (is))
-    {
-      /* If DEST is exhausted, the remaining items of SRC must be unique.  */
-      sbase -= is + 1;
-      memcpy (dest->elems + sbase, src->elems, (is + 1) * sizeof (Idx));
-    }
-
-  id = dest->nelem - 1;
-  is = dest->nelem + 2 * src->nelem - 1;
-  delta = is - sbase + 1;
-  if (delta == 0)
-    return REG_NOERROR;
-
-  /* Now copy.  When DELTA becomes zero, the remaining
-     DEST elements are already in place.  */
-  dest->nelem += delta;
-  for (;;)
-    {
-      if (dest->elems[is] > dest->elems[id])
-        {
-         /* Copy from the top.  */
-          dest->elems[id + delta--] = dest->elems[is--];
-         if (delta == 0)
-           break;
-       }
-      else
-        {
-          /* Slide from the bottom.  */
-          dest->elems[id + delta] = dest->elems[id];
-         if (! REG_VALID_INDEX (--id))
-           {
-             /* Copy remaining SRC elements.  */
-             memcpy (dest->elems, dest->elems + sbase,
-                     delta * sizeof (Idx));
-             break;
-           }
-       }
-    }
-
-  return REG_NOERROR;
-}
-
-/* Insert the new element ELEM to the re_node_set* SET.
-   SET should not already have ELEM.
-   Return true if successful.  */
-
-static bool
-internal_function
-re_node_set_insert (re_node_set *set, Idx elem)
-{
-  Idx idx;
-  /* In case the set is empty.  */
-  if (set->alloc == 0)
-    return BE (re_node_set_init_1 (set, elem) == REG_NOERROR, 1);
-
-  if (BE (set->nelem, 0) == 0)
-    {
-      /* We already guaranteed above that set->alloc != 0.  */
-      set->elems[0] = elem;
-      ++set->nelem;
-      return true;
-    }
-
-  /* Realloc if we need.  */
-  if (set->alloc == set->nelem)
-    {
-      Idx *new_elems;
-      set->alloc = set->alloc * 2;
-      new_elems = re_realloc (set->elems, Idx, set->alloc);
-      if (BE (new_elems == NULL, 0))
-       return false;
-      set->elems = new_elems;
-    }
-
-  /* Move the elements which follows the new element.  Test the
-     first element separately to skip a check in the inner loop.  */
-  if (elem < set->elems[0])
-    {
-      idx = 0;
-      for (idx = set->nelem; idx > 0; idx--)
-        set->elems[idx] = set->elems[idx - 1];
-    }
-  else
-    {
-      for (idx = set->nelem; set->elems[idx - 1] > elem; idx--)
-        set->elems[idx] = set->elems[idx - 1];
-    }
-
-  /* Insert the new element.  */
-  set->elems[idx] = elem;
-  ++set->nelem;
-  return true;
-}
-
-/* Insert the new element ELEM to the re_node_set* SET.
-   SET should not already have any element greater than or equal to ELEM.
-   Return true if successful.  */
-
-static bool
-internal_function
-re_node_set_insert_last (re_node_set *set, Idx elem)
-{
-  /* Realloc if we need.  */
-  if (set->alloc == set->nelem)
-    {
-      Idx *new_elems;
-      set->alloc = (set->alloc + 1) * 2;
-      new_elems = re_realloc (set->elems, Idx, set->alloc);
-      if (BE (new_elems == NULL, 0))
-       return false;
-      set->elems = new_elems;
-    }
-
-  /* Insert the new element.  */
-  set->elems[set->nelem++] = elem;
-  return true;
-}
-
-/* Compare two node sets SET1 and SET2.
-   Return true if SET1 and SET2 are equivalent.  */
-
-static bool
-internal_function __attribute ((pure))
-re_node_set_compare (const re_node_set *set1, const re_node_set *set2)
-{
-  Idx i;
-  if (set1 == NULL || set2 == NULL || set1->nelem != set2->nelem)
-    return false;
-  for (i = set1->nelem ; REG_VALID_INDEX (--i) ; )
-    if (set1->elems[i] != set2->elems[i])
-      return false;
-  return true;
-}
-
-/* Return (idx + 1) if SET contains the element ELEM, return 0 otherwise.  */
-
-static Idx
-internal_function __attribute ((pure))
-re_node_set_contains (const re_node_set *set, Idx elem)
-{
-  __re_size_t idx, right, mid;
-  if (! REG_VALID_NONZERO_INDEX (set->nelem))
-    return 0;
-
-  /* Binary search the element.  */
-  idx = 0;
-  right = set->nelem - 1;
-  while (idx < right)
-    {
-      mid = (idx + right) / 2;
-      if (set->elems[mid] < elem)
-       idx = mid + 1;
-      else
-       right = mid;
-    }
-  return set->elems[idx] == elem ? idx + 1 : 0;
-}
-
-static void
-internal_function
-re_node_set_remove_at (re_node_set *set, Idx idx)
-{
-  if (idx < 0 || idx >= set->nelem)
-    return;
-  --set->nelem;
-  for (; idx < set->nelem; idx++)
-    set->elems[idx] = set->elems[idx + 1];
-}
-\f
-
-/* Add the token TOKEN to dfa->nodes, and return the index of the token.
-   Or return REG_MISSING if an error occurred.  */
-
-static Idx
-internal_function
-re_dfa_add_node (re_dfa_t *dfa, re_token_t token)
-{
-  if (BE (dfa->nodes_len >= dfa->nodes_alloc, 0))
-    {
-      size_t new_nodes_alloc = dfa->nodes_alloc * 2;
-      Idx *new_nexts, *new_indices;
-      re_node_set *new_edests, *new_eclosures;
-      re_token_t *new_nodes;
-      size_t max_object_size =
-       MAX (sizeof (re_token_t),
-            MAX (sizeof (re_node_set),
-                 sizeof (Idx)));
-
-      /* Avoid overflows.  */
-      if (BE (SIZE_MAX / 2 / max_object_size < dfa->nodes_alloc, 0))
-       return REG_MISSING;
-
-      new_nodes = re_realloc (dfa->nodes, re_token_t, new_nodes_alloc);
-      if (BE (new_nodes == NULL, 0))
-       return REG_MISSING;
-      dfa->nodes = new_nodes;
-      new_nexts = re_realloc (dfa->nexts, Idx, new_nodes_alloc);
-      new_indices = re_realloc (dfa->org_indices, Idx, new_nodes_alloc);
-      new_edests = re_realloc (dfa->edests, re_node_set, new_nodes_alloc);
-      new_eclosures = re_realloc (dfa->eclosures, re_node_set, new_nodes_alloc);
-      if (BE (new_nexts == NULL || new_indices == NULL
-             || new_edests == NULL || new_eclosures == NULL, 0))
-       return REG_MISSING;
-      dfa->nexts = new_nexts;
-      dfa->org_indices = new_indices;
-      dfa->edests = new_edests;
-      dfa->eclosures = new_eclosures;
-      dfa->nodes_alloc = new_nodes_alloc;
-    }
-  dfa->nodes[dfa->nodes_len] = token;
-  dfa->nodes[dfa->nodes_len].constraint = 0;
-#ifdef RE_ENABLE_I18N
-  {
-  int type = token.type;
-  dfa->nodes[dfa->nodes_len].accept_mb =
-    (type == OP_PERIOD && dfa->mb_cur_max > 1) || type == COMPLEX_BRACKET;
-  }
-#endif
-  dfa->nexts[dfa->nodes_len] = REG_MISSING;
-  re_node_set_init_empty (dfa->edests + dfa->nodes_len);
-  re_node_set_init_empty (dfa->eclosures + dfa->nodes_len);
-  return dfa->nodes_len++;
-}
-
-static inline re_hashval_t
-internal_function
-calc_state_hash (const re_node_set *nodes, unsigned int context)
-{
-  re_hashval_t hash = nodes->nelem + context;
-  Idx i;
-  for (i = 0 ; i < nodes->nelem ; i++)
-    hash += nodes->elems[i];
-  return hash;
-}
-
-/* Search for the state whose node_set is equivalent to NODES.
-   Return the pointer to the state, if we found it in the DFA.
-   Otherwise create the new one and return it.  In case of an error
-   return NULL and set the error code in ERR.
-   Note: - We assume NULL as the invalid state, then it is possible that
-          return value is NULL and ERR is REG_NOERROR.
-        - We never return non-NULL value in case of any errors, it is for
-          optimization.  */
-
-static re_dfastate_t *
-internal_function
-re_acquire_state (reg_errcode_t *err, const re_dfa_t *dfa,
-                 const re_node_set *nodes)
-{
-  re_hashval_t hash;
-  re_dfastate_t *new_state;
-  struct re_state_table_entry *spot;
-  Idx i;
-#ifdef lint
-  /* Suppress bogus uninitialized-variable warnings.  */
-  *err = REG_NOERROR;
-#endif
-  if (BE (nodes->nelem == 0, 0))
-    {
-      *err = REG_NOERROR;
-      return NULL;
-    }
-  hash = calc_state_hash (nodes, 0);
-  spot = dfa->state_table + (hash & dfa->state_hash_mask);
-
-  for (i = 0 ; i < spot->num ; i++)
-    {
-      re_dfastate_t *state = spot->array[i];
-      if (hash != state->hash)
-       continue;
-      if (re_node_set_compare (&state->nodes, nodes))
-       return state;
-    }
-
-  /* There are no appropriate state in the dfa, create the new one.  */
-  new_state = create_ci_newstate (dfa, nodes, hash);
-  if (BE (new_state == NULL, 0))
-    *err = REG_ESPACE;
-
-  return new_state;
-}
-
-/* Search for the state whose node_set is equivalent to NODES and
-   whose context is equivalent to CONTEXT.
-   Return the pointer to the state, if we found it in the DFA.
-   Otherwise create the new one and return it.  In case of an error
-   return NULL and set the error code in ERR.
-   Note: - We assume NULL as the invalid state, then it is possible that
-          return value is NULL and ERR is REG_NOERROR.
-        - We never return non-NULL value in case of any errors, it is for
-          optimization.  */
-
-static re_dfastate_t *
-internal_function
-re_acquire_state_context (reg_errcode_t *err, const re_dfa_t *dfa,
-                         const re_node_set *nodes, unsigned int context)
-{
-  re_hashval_t hash;
-  re_dfastate_t *new_state;
-  struct re_state_table_entry *spot;
-  Idx i;
-#ifdef lint
-  /* Suppress bogus uninitialized-variable warnings.  */
-  *err = REG_NOERROR;
-#endif
-  if (nodes->nelem == 0)
-    {
-      *err = REG_NOERROR;
-      return NULL;
-    }
-  hash = calc_state_hash (nodes, context);
-  spot = dfa->state_table + (hash & dfa->state_hash_mask);
-
-  for (i = 0 ; i < spot->num ; i++)
-    {
-      re_dfastate_t *state = spot->array[i];
-      if (state->hash == hash
-         && state->context == context
-         && re_node_set_compare (state->entrance_nodes, nodes))
-       return state;
-    }
-  /* There are no appropriate state in `dfa', create the new one.  */
-  new_state = create_cd_newstate (dfa, nodes, context, hash);
-  if (BE (new_state == NULL, 0))
-    *err = REG_ESPACE;
-
-  return new_state;
-}
-
-/* Finish initialization of the new state NEWSTATE, and using its hash value
-   HASH put in the appropriate bucket of DFA's state table.  Return value
-   indicates the error code if failed.  */
-
-static reg_errcode_t
-register_state (const re_dfa_t *dfa, re_dfastate_t *newstate,
-               re_hashval_t hash)
-{
-  struct re_state_table_entry *spot;
-  reg_errcode_t err;
-  Idx i;
-
-  newstate->hash = hash;
-  err = re_node_set_alloc (&newstate->non_eps_nodes, newstate->nodes.nelem);
-  if (BE (err != REG_NOERROR, 0))
-    return REG_ESPACE;
-  for (i = 0; i < newstate->nodes.nelem; i++)
-    {
-      Idx elem = newstate->nodes.elems[i];
-      if (!IS_EPSILON_NODE (dfa->nodes[elem].type))
-       if (BE (! re_node_set_insert_last (&newstate->non_eps_nodes, elem), 0))
-         return REG_ESPACE;
-    }
-
-  spot = dfa->state_table + (hash & dfa->state_hash_mask);
-  if (BE (spot->alloc <= spot->num, 0))
-    {
-      Idx new_alloc = 2 * spot->num + 2;
-      re_dfastate_t **new_array = re_realloc (spot->array, re_dfastate_t *,
-                                             new_alloc);
-      if (BE (new_array == NULL, 0))
-       return REG_ESPACE;
-      spot->array = new_array;
-      spot->alloc = new_alloc;
-    }
-  spot->array[spot->num++] = newstate;
-  return REG_NOERROR;
-}
-
-static void
-free_state (re_dfastate_t *state)
-{
-  re_node_set_free (&state->non_eps_nodes);
-  re_node_set_free (&state->inveclosure);
-  if (state->entrance_nodes != &state->nodes)
-    {
-      re_node_set_free (state->entrance_nodes);
-      re_free (state->entrance_nodes);
-    }
-  re_node_set_free (&state->nodes);
-  re_free (state->word_trtable);
-  re_free (state->trtable);
-  re_free (state);
-}
-
-/* Create the new state which is independ of contexts.
-   Return the new state if succeeded, otherwise return NULL.  */
-
-static re_dfastate_t *
-internal_function
-create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes,
-                   re_hashval_t hash)
-{
-  Idx i;
-  reg_errcode_t err;
-  re_dfastate_t *newstate;
-
-  newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1);
-  if (BE (newstate == NULL, 0))
-    return NULL;
-  err = re_node_set_init_copy (&newstate->nodes, nodes);
-  if (BE (err != REG_NOERROR, 0))
-    {
-      re_free (newstate);
-      return NULL;
-    }
-
-  newstate->entrance_nodes = &newstate->nodes;
-  for (i = 0 ; i < nodes->nelem ; i++)
-    {
-      re_token_t *node = dfa->nodes + nodes->elems[i];
-      re_token_type_t type = node->type;
-      if (type == CHARACTER && !node->constraint)
-       continue;
-#ifdef RE_ENABLE_I18N
-      newstate->accept_mb |= node->accept_mb;
-#endif /* RE_ENABLE_I18N */
-
-      /* If the state has the halt node, the state is a halt state.  */
-      if (type == END_OF_RE)
-       newstate->halt = 1;
-      else if (type == OP_BACK_REF)
-       newstate->has_backref = 1;
-      else if (type == ANCHOR || node->constraint)
-       newstate->has_constraint = 1;
-    }
-  err = register_state (dfa, newstate, hash);
-  if (BE (err != REG_NOERROR, 0))
-    {
-      free_state (newstate);
-      newstate = NULL;
-    }
-  return newstate;
-}
-
-/* Create the new state which is depend on the context CONTEXT.
-   Return the new state if succeeded, otherwise return NULL.  */
-
-static re_dfastate_t *
-internal_function
-create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes,
-                   unsigned int context, re_hashval_t hash)
-{
-  Idx i, nctx_nodes = 0;
-  reg_errcode_t err;
-  re_dfastate_t *newstate;
-
-  newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1);
-  if (BE (newstate == NULL, 0))
-    return NULL;
-  err = re_node_set_init_copy (&newstate->nodes, nodes);
-  if (BE (err != REG_NOERROR, 0))
-    {
-      re_free (newstate);
-      return NULL;
-    }
-
-  newstate->context = context;
-  newstate->entrance_nodes = &newstate->nodes;
-
-  for (i = 0 ; i < nodes->nelem ; i++)
-    {
-      re_token_t *node = dfa->nodes + nodes->elems[i];
-      re_token_type_t type = node->type;
-      unsigned int constraint = node->constraint;
-
-      if (type == CHARACTER && !constraint)
-       continue;
-#ifdef RE_ENABLE_I18N
-      newstate->accept_mb |= node->accept_mb;
-#endif /* RE_ENABLE_I18N */
-
-      /* If the state has the halt node, the state is a halt state.  */
-      if (type == END_OF_RE)
-       newstate->halt = 1;
-      else if (type == OP_BACK_REF)
-       newstate->has_backref = 1;
-
-      if (constraint)
-       {
-         if (newstate->entrance_nodes == &newstate->nodes)
-           {
-             newstate->entrance_nodes = re_malloc (re_node_set, 1);
-             if (BE (newstate->entrance_nodes == NULL, 0))
-               {
-                 free_state (newstate);
-                 return NULL;
-               }
-             re_node_set_init_copy (newstate->entrance_nodes, nodes);
-             nctx_nodes = 0;
-             newstate->has_constraint = 1;
-           }
-
-         if (NOT_SATISFY_PREV_CONSTRAINT (constraint,context))
-           {
-             re_node_set_remove_at (&newstate->nodes, i - nctx_nodes);
-             ++nctx_nodes;
-           }
-       }
-    }
-  err = register_state (dfa, newstate, hash);
-  if (BE (err != REG_NOERROR, 0))
-    {
-      free_state (newstate);
-      newstate = NULL;
-    }
-  return  newstate;
-}
diff --git a/lib/regex_internal.h b/lib/regex_internal.h
deleted file mode 100644 (file)
index a5070dc..0000000
+++ /dev/null
@@ -1,857 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Extended regular expression matching and search library.
-   Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-   Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Isamu Hasegawa <isamu@yamato.ibm.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.
-
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifndef _REGEX_INTERNAL_H
-#define _REGEX_INTERNAL_H 1
-
-#include <assert.h>
-#include <ctype.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef _LIBC
-# include <langinfo.h>
-#else
-# include "localcharset.h"
-#endif
-#if defined HAVE_LOCALE_H || defined _LIBC
-# include <locale.h>
-#endif
-
-#include <wchar.h>
-#include <wctype.h>
-#include <stdint.h>
-#if defined _LIBC
-# include <bits/libc-lock.h>
-#else
-# define __libc_lock_init(NAME) do { } while (0)
-# define __libc_lock_lock(NAME) do { } while (0)
-# define __libc_lock_unlock(NAME) do { } while (0)
-#endif
-
-/* In case that the system doesn't have isblank().  */
-#if !defined _LIBC && ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK))
-# define isblank(ch) ((ch) == ' ' || (ch) == '\t')
-#endif
-
-#ifdef _LIBC
-# ifndef _RE_DEFINE_LOCALE_FUNCTIONS
-#  define _RE_DEFINE_LOCALE_FUNCTIONS 1
-#   include <locale/localeinfo.h>
-#   include <locale/elem-hash.h>
-#   include <locale/coll-lookup.h>
-# endif
-#endif
-
-/* This is for other GNU distributions with internationalized messages.  */
-#if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
-# include <libintl.h>
-# ifdef _LIBC
-#  undef gettext
-#  define gettext(msgid) \
-  INTUSE(__dcgettext) (_libc_intl_domainname, msgid, LC_MESSAGES)
-# endif
-#else
-# define gettext(msgid) (msgid)
-#endif
-
-#ifndef gettext_noop
-/* This define is so xgettext can find the internationalizable
-   strings.  */
-# define gettext_noop(String) String
-#endif
-
-/* For loser systems without the definition.  */
-#ifndef SIZE_MAX
-# define SIZE_MAX ((size_t) -1)
-#endif
-
-#if (defined MB_CUR_MAX && HAVE_LOCALE_H && HAVE_WCTYPE_H && HAVE_ISWCTYPE && HAVE_WCSCOLL) || _LIBC
-# define RE_ENABLE_I18N
-#endif
-
-#if __GNUC__ >= 3
-# define BE(expr, val) __builtin_expect (expr, val)
-#else
-# define BE(expr, val) (expr)
-# ifdef _LIBC
-#  define inline
-# endif
-#endif
-
-/* Number of ASCII characters.  */
-#define ASCII_CHARS 0x80
-
-/* Number of single byte characters.  */
-#define SBC_MAX (UCHAR_MAX + 1)
-
-#define COLL_ELEM_LEN_MAX 8
-
-/* The character which represents newline.  */
-#define NEWLINE_CHAR '\n'
-#define WIDE_NEWLINE_CHAR L'\n'
-
-/* Rename to standard API for using out of glibc.  */
-#ifndef _LIBC
-# define __wctype wctype
-# define __iswctype iswctype
-# define __btowc btowc
-# define __wcrtomb wcrtomb
-# define __mbrtowc mbrtowc
-# define __regfree regfree
-# define attribute_hidden
-#endif /* not _LIBC */
-
-#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
-# define __attribute(arg) __attribute__ (arg)
-#else
-# define __attribute(arg)
-#endif
-
-typedef __re_idx_t Idx;
-
-/* Special return value for failure to match.  */
-#define REG_MISSING ((Idx) -1)
-
-/* Special return value for internal error.  */
-#define REG_ERROR ((Idx) -2)
-
-/* Test whether N is a valid index, and is not one of the above.  */
-#ifdef _REGEX_LARGE_OFFSETS
-# define REG_VALID_INDEX(n) ((Idx) (n) < REG_ERROR)
-#else
-# define REG_VALID_INDEX(n) (0 <= (n))
-#endif
-
-/* Test whether N is a valid nonzero index.  */
-#ifdef _REGEX_LARGE_OFFSETS
-# define REG_VALID_NONZERO_INDEX(n) ((Idx) ((n) - 1) < (Idx) (REG_ERROR - 1))
-#else
-# define REG_VALID_NONZERO_INDEX(n) (0 < (n))
-#endif
-
-/* A hash value, suitable for computing hash tables.  */
-typedef __re_size_t re_hashval_t;
-
-/* An integer used to represent a set of bits.  It must be unsigned,
-   and must be at least as wide as unsigned int.  */
-typedef unsigned long int bitset_word_t;
-/* All bits set in a bitset_word_t.  */
-#define BITSET_WORD_MAX ULONG_MAX
-
-/* Number of bits in a bitset_word_t.  For portability to hosts with
-   padding bits, do not use '(sizeof (bitset_word_t) * CHAR_BIT)';
-   instead, deduce it directly from BITSET_WORD_MAX.  Avoid
-   greater-than-32-bit integers and unconditional shifts by more than
-   31 bits, as they're not portable.  */
-#if BITSET_WORD_MAX == 0xffffffffUL
-# define BITSET_WORD_BITS 32
-#elif BITSET_WORD_MAX >> 31 >> 4 == 1
-# define BITSET_WORD_BITS 36
-#elif BITSET_WORD_MAX >> 31 >> 16 == 1
-# define BITSET_WORD_BITS 48
-#elif BITSET_WORD_MAX >> 31 >> 28 == 1
-# define BITSET_WORD_BITS 60
-#elif BITSET_WORD_MAX >> 31 >> 31 >> 1 == 1
-# define BITSET_WORD_BITS 64
-#elif BITSET_WORD_MAX >> 31 >> 31 >> 9 == 1
-# define BITSET_WORD_BITS 72
-#elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 3 == 1
-# define BITSET_WORD_BITS 128
-#elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 7 == 1
-# define BITSET_WORD_BITS 256
-#elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 7 > 1
-# define BITSET_WORD_BITS 257 /* any value > SBC_MAX will do here */
-# if BITSET_WORD_BITS <= SBC_MAX
-#  error "Invalid SBC_MAX"
-# endif
-#else
-# error "Add case for new bitset_word_t size"
-#endif
-
-/* Number of bitset_word_t values in a bitset_t.  */
-#define BITSET_WORDS ((SBC_MAX + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS)
-
-typedef bitset_word_t bitset_t[BITSET_WORDS];
-typedef bitset_word_t *re_bitset_ptr_t;
-typedef const bitset_word_t *re_const_bitset_ptr_t;
-
-#define PREV_WORD_CONSTRAINT 0x0001
-#define PREV_NOTWORD_CONSTRAINT 0x0002
-#define NEXT_WORD_CONSTRAINT 0x0004
-#define NEXT_NOTWORD_CONSTRAINT 0x0008
-#define PREV_NEWLINE_CONSTRAINT 0x0010
-#define NEXT_NEWLINE_CONSTRAINT 0x0020
-#define PREV_BEGBUF_CONSTRAINT 0x0040
-#define NEXT_ENDBUF_CONSTRAINT 0x0080
-#define WORD_DELIM_CONSTRAINT 0x0100
-#define NOT_WORD_DELIM_CONSTRAINT 0x0200
-
-typedef enum
-{
-  INSIDE_WORD = PREV_WORD_CONSTRAINT | NEXT_WORD_CONSTRAINT,
-  WORD_FIRST = PREV_NOTWORD_CONSTRAINT | NEXT_WORD_CONSTRAINT,
-  WORD_LAST = PREV_WORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT,
-  INSIDE_NOTWORD = PREV_NOTWORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT,
-  LINE_FIRST = PREV_NEWLINE_CONSTRAINT,
-  LINE_LAST = NEXT_NEWLINE_CONSTRAINT,
-  BUF_FIRST = PREV_BEGBUF_CONSTRAINT,
-  BUF_LAST = NEXT_ENDBUF_CONSTRAINT,
-  WORD_DELIM = WORD_DELIM_CONSTRAINT,
-  NOT_WORD_DELIM = NOT_WORD_DELIM_CONSTRAINT
-} re_context_type;
-
-typedef struct
-{
-  Idx alloc;
-  Idx nelem;
-  Idx *elems;
-} re_node_set;
-
-typedef enum
-{
-  NON_TYPE = 0,
-
-  /* Node type, These are used by token, node, tree.  */
-  CHARACTER = 1,
-  END_OF_RE = 2,
-  SIMPLE_BRACKET = 3,
-  OP_BACK_REF = 4,
-  OP_PERIOD = 5,
-#ifdef RE_ENABLE_I18N
-  COMPLEX_BRACKET = 6,
-  OP_UTF8_PERIOD = 7,
-#endif /* RE_ENABLE_I18N */
-
-  /* We define EPSILON_BIT as a macro so that OP_OPEN_SUBEXP is used
-     when the debugger shows values of this enum type.  */
-#define EPSILON_BIT 8
-  OP_OPEN_SUBEXP = EPSILON_BIT | 0,
-  OP_CLOSE_SUBEXP = EPSILON_BIT | 1,
-  OP_ALT = EPSILON_BIT | 2,
-  OP_DUP_ASTERISK = EPSILON_BIT | 3,
-  ANCHOR = EPSILON_BIT | 4,
-
-  /* Tree type, these are used only by tree. */
-  CONCAT = 16,
-  SUBEXP = 17,
-
-  /* Token type, these are used only by token.  */
-  OP_DUP_PLUS = 18,
-  OP_DUP_QUESTION,
-  OP_OPEN_BRACKET,
-  OP_CLOSE_BRACKET,
-  OP_CHARSET_RANGE,
-  OP_OPEN_DUP_NUM,
-  OP_CLOSE_DUP_NUM,
-  OP_NON_MATCH_LIST,
-  OP_OPEN_COLL_ELEM,
-  OP_CLOSE_COLL_ELEM,
-  OP_OPEN_EQUIV_CLASS,
-  OP_CLOSE_EQUIV_CLASS,
-  OP_OPEN_CHAR_CLASS,
-  OP_CLOSE_CHAR_CLASS,
-  OP_WORD,
-  OP_NOTWORD,
-  OP_SPACE,
-  OP_NOTSPACE,
-  BACK_SLASH
-
-} re_token_type_t;
-
-#ifdef RE_ENABLE_I18N
-typedef struct
-{
-  /* Multibyte characters.  */
-  wchar_t *mbchars;
-
-  /* Collating symbols.  */
-# ifdef _LIBC
-  int32_t *coll_syms;
-# endif
-
-  /* Equivalence classes. */
-# ifdef _LIBC
-  int32_t *equiv_classes;
-# endif
-
-  /* Range expressions. */
-# ifdef _LIBC
-  uint32_t *range_starts;
-  uint32_t *range_ends;
-# else /* not _LIBC */
-  wchar_t *range_starts;
-  wchar_t *range_ends;
-# endif /* not _LIBC */
-
-  /* Character classes. */
-  wctype_t *char_classes;
-
-  /* If this character set is the non-matching list.  */
-  unsigned int non_match : 1;
-
-  /* # of multibyte characters.  */
-  Idx nmbchars;
-
-  /* # of collating symbols.  */
-  Idx ncoll_syms;
-
-  /* # of equivalence classes. */
-  Idx nequiv_classes;
-
-  /* # of range expressions. */
-  Idx nranges;
-
-  /* # of character classes. */
-  Idx nchar_classes;
-} re_charset_t;
-#endif /* RE_ENABLE_I18N */
-
-typedef struct
-{
-  union
-  {
-    unsigned char c;           /* for CHARACTER */
-    re_bitset_ptr_t sbcset;    /* for SIMPLE_BRACKET */
-#ifdef RE_ENABLE_I18N
-    re_charset_t *mbcset;      /* for COMPLEX_BRACKET */
-#endif /* RE_ENABLE_I18N */
-    Idx idx;                   /* for BACK_REF */
-    re_context_type ctx_type;  /* for ANCHOR */
-  } opr;
-#if __GNUC__ >= 2 && !__STRICT_ANSI__
-  re_token_type_t type : 8;
-#else
-  re_token_type_t type;
-#endif
-  unsigned int constraint : 10;        /* context constraint */
-  unsigned int duplicated : 1;
-  unsigned int opt_subexp : 1;
-#ifdef RE_ENABLE_I18N
-  unsigned int accept_mb : 1;
-  /* These 2 bits can be moved into the union if needed (e.g. if running out
-     of bits; move opr.c to opr.c.c and move the flags to opr.c.flags).  */
-  unsigned int mb_partial : 1;
-#endif
-  unsigned int word_char : 1;
-} re_token_t;
-
-#define IS_EPSILON_NODE(type) ((type) & EPSILON_BIT)
-
-struct re_string_t
-{
-  /* Indicate the raw buffer which is the original string passed as an
-     argument of regexec(), re_search(), etc..  */
-  const unsigned char *raw_mbs;
-  /* Store the multibyte string.  In case of "case insensitive mode" like
-     REG_ICASE, upper cases of the string are stored, otherwise MBS points
-     the same address that RAW_MBS points.  */
-  unsigned char *mbs;
-#ifdef RE_ENABLE_I18N
-  /* Store the wide character string which is corresponding to MBS.  */
-  wint_t *wcs;
-  Idx *offsets;
-  mbstate_t cur_state;
-#endif
-  /* Index in RAW_MBS.  Each character mbs[i] corresponds to
-     raw_mbs[raw_mbs_idx + i].  */
-  Idx raw_mbs_idx;
-  /* The length of the valid characters in the buffers.  */
-  Idx valid_len;
-  /* The corresponding number of bytes in raw_mbs array.  */
-  Idx valid_raw_len;
-  /* The length of the buffers MBS and WCS.  */
-  Idx bufs_len;
-  /* The index in MBS, which is updated by re_string_fetch_byte.  */
-  Idx cur_idx;
-  /* length of RAW_MBS array.  */
-  Idx raw_len;
-  /* This is RAW_LEN - RAW_MBS_IDX + VALID_LEN - VALID_RAW_LEN.  */
-  Idx len;
-  /* End of the buffer may be shorter than its length in the cases such
-     as re_match_2, re_search_2.  Then, we use STOP for end of the buffer
-     instead of LEN.  */
-  Idx raw_stop;
-  /* This is RAW_STOP - RAW_MBS_IDX adjusted through OFFSETS.  */
-  Idx stop;
-
-  /* The context of mbs[0].  We store the context independently, since
-     the context of mbs[0] may be different from raw_mbs[0], which is
-     the beginning of the input string.  */
-  unsigned int tip_context;
-  /* The translation passed as a part of an argument of re_compile_pattern.  */
-  RE_TRANSLATE_TYPE trans;
-  /* Copy of re_dfa_t's word_char.  */
-  re_const_bitset_ptr_t word_char;
-  /* true if REG_ICASE.  */
-  unsigned char icase;
-  unsigned char is_utf8;
-  unsigned char map_notascii;
-  unsigned char mbs_allocated;
-  unsigned char offsets_needed;
-  unsigned char newline_anchor;
-  unsigned char word_ops_used;
-  int mb_cur_max;
-};
-typedef struct re_string_t re_string_t;
-
-
-struct re_dfa_t;
-typedef struct re_dfa_t re_dfa_t;
-
-#ifndef _LIBC
-# if defined __i386__ && !defined __EMX__
-#  define internal_function   __attribute ((regparm (3), stdcall))
-# else
-#  define internal_function
-# endif
-#endif
-
-static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr,
-                                               Idx new_buf_len)
-     internal_function;
-#ifdef RE_ENABLE_I18N
-static void build_wcs_buffer (re_string_t *pstr) internal_function;
-static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr)
-     internal_function;
-#endif /* RE_ENABLE_I18N */
-static void build_upper_buffer (re_string_t *pstr) internal_function;
-static void re_string_translate_buffer (re_string_t *pstr) internal_function;
-static unsigned int re_string_context_at (const re_string_t *input, Idx idx,
-                                         int eflags)
-     internal_function __attribute ((pure));
-#define re_string_peek_byte(pstr, offset) \
-  ((pstr)->mbs[(pstr)->cur_idx + offset])
-#define re_string_fetch_byte(pstr) \
-  ((pstr)->mbs[(pstr)->cur_idx++])
-#define re_string_first_byte(pstr, idx) \
-  ((idx) == (pstr)->valid_len || (pstr)->wcs[idx] != WEOF)
-#define re_string_is_single_byte_char(pstr, idx) \
-  ((pstr)->wcs[idx] != WEOF && ((pstr)->valid_len == (idx) + 1 \
-                               || (pstr)->wcs[(idx) + 1] != WEOF))
-#define re_string_eoi(pstr) ((pstr)->stop <= (pstr)->cur_idx)
-#define re_string_cur_idx(pstr) ((pstr)->cur_idx)
-#define re_string_get_buffer(pstr) ((pstr)->mbs)
-#define re_string_length(pstr) ((pstr)->len)
-#define re_string_byte_at(pstr,idx) ((pstr)->mbs[idx])
-#define re_string_skip_bytes(pstr,idx) ((pstr)->cur_idx += (idx))
-#define re_string_set_index(pstr,idx) ((pstr)->cur_idx = (idx))
-
-#include <alloca.h>
-
-#ifndef _LIBC
-# if HAVE_ALLOCA
-/* The OS usually guarantees only one guard page at the bottom of the stack,
-   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.  */
-#  define __libc_use_alloca(n) ((n) < 4032)
-# else
-/* alloca is implemented with malloc, so just use malloc.  */
-#  define __libc_use_alloca(n) 0
-# endif
-#endif
-
-#ifndef MAX
-# define MAX(a,b) ((a) < (b) ? (b) : (a))
-#endif
-
-#define re_malloc(t,n) ((t *) malloc ((n) * sizeof (t)))
-#define re_realloc(p,t,n) ((t *) realloc (p, (n) * sizeof (t)))
-#define re_free(p) free (p)
-
-struct bin_tree_t
-{
-  struct bin_tree_t *parent;
-  struct bin_tree_t *left;
-  struct bin_tree_t *right;
-  struct bin_tree_t *first;
-  struct bin_tree_t *next;
-
-  re_token_t token;
-
-  /* `node_idx' is the index in dfa->nodes, if `type' == 0.
-     Otherwise `type' indicate the type of this node.  */
-  Idx node_idx;
-};
-typedef struct bin_tree_t bin_tree_t;
-
-#define BIN_TREE_STORAGE_SIZE \
-  ((1024 - sizeof (void *)) / sizeof (bin_tree_t))
-
-struct bin_tree_storage_t
-{
-  struct bin_tree_storage_t *next;
-  bin_tree_t data[BIN_TREE_STORAGE_SIZE];
-};
-typedef struct bin_tree_storage_t bin_tree_storage_t;
-
-#define CONTEXT_WORD 1
-#define CONTEXT_NEWLINE (CONTEXT_WORD << 1)
-#define CONTEXT_BEGBUF (CONTEXT_NEWLINE << 1)
-#define CONTEXT_ENDBUF (CONTEXT_BEGBUF << 1)
-
-#define IS_WORD_CONTEXT(c) ((c) & CONTEXT_WORD)
-#define IS_NEWLINE_CONTEXT(c) ((c) & CONTEXT_NEWLINE)
-#define IS_BEGBUF_CONTEXT(c) ((c) & CONTEXT_BEGBUF)
-#define IS_ENDBUF_CONTEXT(c) ((c) & CONTEXT_ENDBUF)
-#define IS_ORDINARY_CONTEXT(c) ((c) == 0)
-
-#define IS_WORD_CHAR(ch) (isalnum (ch) || (ch) == '_')
-#define IS_NEWLINE(ch) ((ch) == NEWLINE_CHAR)
-#define IS_WIDE_WORD_CHAR(ch) (iswalnum (ch) || (ch) == L'_')
-#define IS_WIDE_NEWLINE(ch) ((ch) == WIDE_NEWLINE_CHAR)
-
-#define NOT_SATISFY_PREV_CONSTRAINT(constraint,context) \
- ((((constraint) & PREV_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \
-  || ((constraint & PREV_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \
-  || ((constraint & PREV_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context))\
-  || ((constraint & PREV_BEGBUF_CONSTRAINT) && !IS_BEGBUF_CONTEXT (context)))
-
-#define NOT_SATISFY_NEXT_CONSTRAINT(constraint,context) \
- ((((constraint) & NEXT_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \
-  || (((constraint) & NEXT_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \
-  || (((constraint) & NEXT_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context)) \
-  || (((constraint) & NEXT_ENDBUF_CONSTRAINT) && !IS_ENDBUF_CONTEXT (context)))
-
-struct re_dfastate_t
-{
-  re_hashval_t hash;
-  re_node_set nodes;
-  re_node_set non_eps_nodes;
-  re_node_set inveclosure;
-  re_node_set *entrance_nodes;
-  struct re_dfastate_t **trtable, **word_trtable;
-  unsigned int context : 4;
-  unsigned int halt : 1;
-  /* If this state can accept `multi byte'.
-     Note that we refer to multibyte characters, and multi character
-     collating elements as `multi byte'.  */
-  unsigned int accept_mb : 1;
-  /* If this state has backreference node(s).  */
-  unsigned int has_backref : 1;
-  unsigned int has_constraint : 1;
-};
-typedef struct re_dfastate_t re_dfastate_t;
-
-struct re_state_table_entry
-{
-  Idx num;
-  Idx alloc;
-  re_dfastate_t **array;
-};
-
-/* Array type used in re_sub_match_last_t and re_sub_match_top_t.  */
-
-typedef struct
-{
-  Idx next_idx;
-  Idx alloc;
-  re_dfastate_t **array;
-} state_array_t;
-
-/* Store information about the node NODE whose type is OP_CLOSE_SUBEXP.  */
-
-typedef struct
-{
-  Idx node;
-  Idx str_idx; /* The position NODE match at.  */
-  state_array_t path;
-} re_sub_match_last_t;
-
-/* Store information about the node NODE whose type is OP_OPEN_SUBEXP.
-   And information about the node, whose type is OP_CLOSE_SUBEXP,
-   corresponding to NODE is stored in LASTS.  */
-
-typedef struct
-{
-  Idx str_idx;
-  Idx node;
-  state_array_t *path;
-  Idx alasts; /* Allocation size of LASTS.  */
-  Idx nlasts; /* The number of LASTS.  */
-  re_sub_match_last_t **lasts;
-} re_sub_match_top_t;
-
-struct re_backref_cache_entry
-{
-  Idx node;
-  Idx str_idx;
-  Idx subexp_from;
-  Idx subexp_to;
-  char more;
-  char unused;
-  unsigned short int eps_reachable_subexps_map;
-};
-
-typedef struct
-{
-  /* The string object corresponding to the input string.  */
-  re_string_t input;
-#if defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
-  const re_dfa_t *const dfa;
-#else
-  const re_dfa_t *dfa;
-#endif
-  /* EFLAGS of the argument of regexec.  */
-  int eflags;
-  /* Where the matching ends.  */
-  Idx match_last;
-  Idx last_node;
-  /* The state log used by the matcher.  */
-  re_dfastate_t **state_log;
-  Idx state_log_top;
-  /* Back reference cache.  */
-  Idx nbkref_ents;
-  Idx abkref_ents;
-  struct re_backref_cache_entry *bkref_ents;
-  int max_mb_elem_len;
-  Idx nsub_tops;
-  Idx asub_tops;
-  re_sub_match_top_t **sub_tops;
-} re_match_context_t;
-
-typedef struct
-{
-  re_dfastate_t **sifted_states;
-  re_dfastate_t **limited_states;
-  Idx last_node;
-  Idx last_str_idx;
-  re_node_set limits;
-} re_sift_context_t;
-
-struct re_fail_stack_ent_t
-{
-  Idx idx;
-  Idx node;
-  regmatch_t *regs;
-  re_node_set eps_via_nodes;
-};
-
-struct re_fail_stack_t
-{
-  Idx num;
-  Idx alloc;
-  struct re_fail_stack_ent_t *stack;
-};
-
-struct re_dfa_t
-{
-  re_token_t *nodes;
-  size_t nodes_alloc;
-  size_t nodes_len;
-  Idx *nexts;
-  Idx *org_indices;
-  re_node_set *edests;
-  re_node_set *eclosures;
-  re_node_set *inveclosures;
-  struct re_state_table_entry *state_table;
-  re_dfastate_t *init_state;
-  re_dfastate_t *init_state_word;
-  re_dfastate_t *init_state_nl;
-  re_dfastate_t *init_state_begbuf;
-  bin_tree_t *str_tree;
-  bin_tree_storage_t *str_tree_storage;
-  re_bitset_ptr_t sb_char;
-  int str_tree_storage_idx;
-
-  /* number of subexpressions `re_nsub' is in regex_t.  */
-  re_hashval_t state_hash_mask;
-  Idx init_node;
-  Idx nbackref; /* The number of backreference in this dfa.  */
-
-  /* Bitmap expressing which backreference is used.  */
-  bitset_word_t used_bkref_map;
-  bitset_word_t completed_bkref_map;
-
-  unsigned int has_plural_match : 1;
-  /* If this dfa has "multibyte node", which is a backreference or
-     a node which can accept multibyte character or multi character
-     collating element.  */
-  unsigned int has_mb_node : 1;
-  unsigned int is_utf8 : 1;
-  unsigned int map_notascii : 1;
-  unsigned int word_ops_used : 1;
-  int mb_cur_max;
-  bitset_t word_char;
-  reg_syntax_t syntax;
-  Idx *subexp_map;
-#ifdef DEBUG
-  char* re_str;
-#endif
-#ifdef _LIBC
-  __libc_lock_define (, lock)
-#endif
-};
-
-#define re_node_set_init_empty(set) memset (set, '\0', sizeof (re_node_set))
-#define re_node_set_remove(set,id) \
-  (re_node_set_remove_at (set, re_node_set_contains (set, id) - 1))
-#define re_node_set_empty(p) ((p)->nelem = 0)
-#define re_node_set_free(set) re_free ((set)->elems)
-\f
-
-typedef enum
-{
-  SB_CHAR,
-  MB_CHAR,
-  EQUIV_CLASS,
-  COLL_SYM,
-  CHAR_CLASS
-} bracket_elem_type;
-
-typedef struct
-{
-  bracket_elem_type type;
-  union
-  {
-    unsigned char ch;
-    unsigned char *name;
-    wchar_t wch;
-  } opr;
-} bracket_elem_t;
-
-
-/* Inline functions for bitset_t operation.  */
-
-static inline void
-bitset_set (bitset_t set, Idx i)
-{
-  set[i / BITSET_WORD_BITS] |= (bitset_word_t) 1 << i % BITSET_WORD_BITS;
-}
-
-static inline void
-bitset_clear (bitset_t set, Idx i)
-{
-  set[i / BITSET_WORD_BITS] &= ~ ((bitset_word_t) 1 << i % BITSET_WORD_BITS);
-}
-
-static inline bool
-bitset_contain (const bitset_t set, Idx i)
-{
-  return (set[i / BITSET_WORD_BITS] >> i % BITSET_WORD_BITS) & 1;
-}
-
-static inline void
-bitset_empty (bitset_t set)
-{
-  memset (set, '\0', sizeof (bitset_t));
-}
-
-static inline void
-bitset_set_all (bitset_t set)
-{
-  memset (set, -1, sizeof (bitset_word_t) * (SBC_MAX / BITSET_WORD_BITS));
-  if (SBC_MAX % BITSET_WORD_BITS != 0)
-    set[BITSET_WORDS - 1] =
-      ((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1;
-}
-
-static inline void
-bitset_copy (bitset_t dest, const bitset_t src)
-{
-  memcpy (dest, src, sizeof (bitset_t));
-}
-
-static inline void
-bitset_not (bitset_t set)
-{
-  int bitset_i;
-  for (bitset_i = 0; bitset_i < SBC_MAX / BITSET_WORD_BITS; ++bitset_i)
-    set[bitset_i] = ~set[bitset_i];
-  if (SBC_MAX % BITSET_WORD_BITS != 0)
-    set[BITSET_WORDS - 1] =
-      ((((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1)
-       & ~set[BITSET_WORDS - 1]);
-}
-
-static inline void
-bitset_merge (bitset_t dest, const bitset_t src)
-{
-  int bitset_i;
-  for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i)
-    dest[bitset_i] |= src[bitset_i];
-}
-
-static inline void
-bitset_mask (bitset_t dest, const bitset_t src)
-{
-  int bitset_i;
-  for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i)
-    dest[bitset_i] &= src[bitset_i];
-}
-
-#ifdef RE_ENABLE_I18N
-/* Inline functions for re_string.  */
-static inline int
-internal_function __attribute ((pure))
-re_string_char_size_at (const re_string_t *pstr, Idx idx)
-{
-  int byte_idx;
-  if (pstr->mb_cur_max == 1)
-    return 1;
-  for (byte_idx = 1; idx + byte_idx < pstr->valid_len; ++byte_idx)
-    if (pstr->wcs[idx + byte_idx] != WEOF)
-      break;
-  return byte_idx;
-}
-
-static inline wint_t
-internal_function __attribute ((pure))
-re_string_wchar_at (const re_string_t *pstr, Idx idx)
-{
-  if (pstr->mb_cur_max == 1)
-    return (wint_t) pstr->mbs[idx];
-  return (wint_t) pstr->wcs[idx];
-}
-
-static int
-internal_function __attribute ((pure))
-re_string_elem_size_at (const re_string_t *pstr, Idx idx)
-{
-# ifdef _LIBC
-  const unsigned char *p, *extra;
-  const int32_t *table, *indirect;
-  int32_t tmp;
-#  include <locale/weight.h>
-  uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
-
-  if (nrules != 0)
-    {
-      table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
-      extra = (const unsigned char *)
-       _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
-      indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE,
-                                               _NL_COLLATE_INDIRECTMB);
-      p = pstr->mbs + idx;
-      tmp = findidx (&p);
-      return p - pstr->mbs - idx;
-    }
-  else
-# endif /* _LIBC */
-    return 1;
-}
-#endif /* RE_ENABLE_I18N */
-
-#endif /*  _REGEX_INTERNAL_H */
diff --git a/lib/regexec.c b/lib/regexec.c
deleted file mode 100644 (file)
index 4853551..0000000
+++ /dev/null
@@ -1,4409 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Extended regular expression matching and search library.
-   Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-   Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Isamu Hasegawa <isamu@yamato.ibm.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.
-
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-
-static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags,
-                                    Idx n) internal_function;
-static void match_ctx_clean (re_match_context_t *mctx) internal_function;
-static void match_ctx_free (re_match_context_t *cache) internal_function;
-static reg_errcode_t match_ctx_add_entry (re_match_context_t *cache, Idx node,
-                                         Idx str_idx, Idx from, Idx to)
-     internal_function;
-static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx)
-     internal_function;
-static reg_errcode_t match_ctx_add_subtop (re_match_context_t *mctx, Idx node,
-                                          Idx str_idx) internal_function;
-static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop,
-                                                   Idx node, Idx str_idx)
-     internal_function;
-static void sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts,
-                          re_dfastate_t **limited_sts, Idx last_node,
-                          Idx last_str_idx)
-     internal_function;
-static reg_errcode_t re_search_internal (const regex_t *preg,
-                                        const char *string, Idx length,
-                                        Idx start, Idx last_start, Idx stop,
-                                        size_t nmatch, regmatch_t pmatch[],
-                                        int eflags) internal_function;
-static regoff_t re_search_2_stub (struct re_pattern_buffer *bufp,
-                                 const char *string1, Idx length1,
-                                 const char *string2, Idx length2,
-                                 Idx start, regoff_t range,
-                                 struct re_registers *regs,
-                                 Idx stop, bool ret_len) internal_function;
-static regoff_t re_search_stub (struct re_pattern_buffer *bufp,
-                               const char *string, Idx length, Idx start,
-                               regoff_t range, Idx stop,
-                               struct re_registers *regs,
-                               bool ret_len) internal_function;
-static unsigned int re_copy_regs (struct re_registers *regs, regmatch_t *pmatch,
-                                 Idx nregs, int regs_allocated)
-     internal_function;
-static reg_errcode_t prune_impossible_nodes (re_match_context_t *mctx)
-     internal_function;
-static Idx check_matching (re_match_context_t *mctx, bool fl_longest_match,
-                          Idx *p_match_first) internal_function;
-static Idx check_halt_state_context (const re_match_context_t *mctx,
-                                    const re_dfastate_t *state, Idx idx)
-     internal_function;
-static void update_regs (const re_dfa_t *dfa, regmatch_t *pmatch,
-                        regmatch_t *prev_idx_match, Idx cur_node,
-                        Idx cur_idx, Idx nmatch) internal_function;
-static reg_errcode_t push_fail_stack (struct re_fail_stack_t *fs,
-                                     Idx str_idx, Idx dest_node, Idx nregs,
-                                     regmatch_t *regs,
-                                     re_node_set *eps_via_nodes)
-     internal_function;
-static reg_errcode_t set_regs (const regex_t *preg,
-                              const re_match_context_t *mctx,
-                              size_t nmatch, regmatch_t *pmatch,
-                              bool fl_backtrack) internal_function;
-static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs)
-     internal_function;
-
-#ifdef RE_ENABLE_I18N
-static int sift_states_iter_mb (const re_match_context_t *mctx,
-                               re_sift_context_t *sctx,
-                               Idx node_idx, Idx str_idx, Idx max_str_idx)
-     internal_function;
-#endif /* RE_ENABLE_I18N */
-static reg_errcode_t sift_states_backward (const re_match_context_t *mctx,
-                                          re_sift_context_t *sctx)
-     internal_function;
-static reg_errcode_t build_sifted_states (const re_match_context_t *mctx,
-                                         re_sift_context_t *sctx, Idx str_idx,
-                                         re_node_set *cur_dest)
-     internal_function;
-static reg_errcode_t update_cur_sifted_state (const re_match_context_t *mctx,
-                                             re_sift_context_t *sctx,
-                                             Idx str_idx,
-                                             re_node_set *dest_nodes)
-     internal_function;
-static reg_errcode_t add_epsilon_src_nodes (const re_dfa_t *dfa,
-                                           re_node_set *dest_nodes,
-                                           const re_node_set *candidates)
-     internal_function;
-static bool check_dst_limits (const re_match_context_t *mctx,
-                             const re_node_set *limits,
-                             Idx dst_node, Idx dst_idx, Idx src_node,
-                             Idx src_idx) internal_function;
-static int check_dst_limits_calc_pos_1 (const re_match_context_t *mctx,
-                                       int boundaries, Idx subexp_idx,
-                                       Idx from_node, Idx bkref_idx)
-     internal_function;
-static int check_dst_limits_calc_pos (const re_match_context_t *mctx,
-                                     Idx limit, Idx subexp_idx,
-                                     Idx node, Idx str_idx,
-                                     Idx bkref_idx) internal_function;
-static reg_errcode_t check_subexp_limits (const re_dfa_t *dfa,
-                                         re_node_set *dest_nodes,
-                                         const re_node_set *candidates,
-                                         re_node_set *limits,
-                                         struct re_backref_cache_entry *bkref_ents,
-                                         Idx str_idx) internal_function;
-static reg_errcode_t sift_states_bkref (const re_match_context_t *mctx,
-                                       re_sift_context_t *sctx,
-                                       Idx str_idx, const re_node_set *candidates)
-     internal_function;
-static reg_errcode_t merge_state_array (const re_dfa_t *dfa,
-                                       re_dfastate_t **dst,
-                                       re_dfastate_t **src, Idx num)
-     internal_function;
-static re_dfastate_t *find_recover_state (reg_errcode_t *err,
-                                        re_match_context_t *mctx) internal_function;
-static re_dfastate_t *transit_state (reg_errcode_t *err,
-                                    re_match_context_t *mctx,
-                                    re_dfastate_t *state) internal_function;
-static re_dfastate_t *merge_state_with_log (reg_errcode_t *err,
-                                           re_match_context_t *mctx,
-                                           re_dfastate_t *next_state)
-     internal_function;
-static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx,
-                                               re_node_set *cur_nodes,
-                                               Idx str_idx) internal_function;
-#if 0
-static re_dfastate_t *transit_state_sb (reg_errcode_t *err,
-                                       re_match_context_t *mctx,
-                                       re_dfastate_t *pstate)
-     internal_function;
-#endif
-#ifdef RE_ENABLE_I18N
-static reg_errcode_t transit_state_mb (re_match_context_t *mctx,
-                                      re_dfastate_t *pstate)
-     internal_function;
-#endif /* RE_ENABLE_I18N */
-static reg_errcode_t transit_state_bkref (re_match_context_t *mctx,
-                                         const re_node_set *nodes)
-     internal_function;
-static reg_errcode_t get_subexp (re_match_context_t *mctx,
-                                Idx bkref_node, Idx bkref_str_idx)
-     internal_function;
-static reg_errcode_t get_subexp_sub (re_match_context_t *mctx,
-                                    const re_sub_match_top_t *sub_top,
-                                    re_sub_match_last_t *sub_last,
-                                    Idx bkref_node, Idx bkref_str)
-     internal_function;
-static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes,
-                            Idx subexp_idx, int type) internal_function;
-static reg_errcode_t check_arrival (re_match_context_t *mctx,
-                                   state_array_t *path, Idx top_node,
-                                   Idx top_str, Idx last_node, Idx last_str,
-                                   int type) internal_function;
-static reg_errcode_t check_arrival_add_next_nodes (re_match_context_t *mctx,
-                                                  Idx str_idx,
-                                                  re_node_set *cur_nodes,
-                                                  re_node_set *next_nodes)
-     internal_function;
-static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa,
-                                              re_node_set *cur_nodes,
-                                              Idx ex_subexp, int type)
-     internal_function;
-static reg_errcode_t check_arrival_expand_ecl_sub (const re_dfa_t *dfa,
-                                                  re_node_set *dst_nodes,
-                                                  Idx target, Idx ex_subexp,
-                                                  int type) internal_function;
-static reg_errcode_t expand_bkref_cache (re_match_context_t *mctx,
-                                        re_node_set *cur_nodes, Idx cur_str,
-                                        Idx subexp_num, int type)
-     internal_function;
-static bool build_trtable (const re_dfa_t *dfa,
-                          re_dfastate_t *state) internal_function;
-#ifdef RE_ENABLE_I18N
-static int check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx,
-                                   const re_string_t *input, Idx idx)
-     internal_function;
-# ifdef _LIBC
-static unsigned int find_collation_sequence_value (const unsigned char *mbs,
-                                                  size_t name_len)
-     internal_function;
-# endif /* _LIBC */
-#endif /* RE_ENABLE_I18N */
-static Idx group_nodes_into_DFAstates (const re_dfa_t *dfa,
-                                      const re_dfastate_t *state,
-                                      re_node_set *states_node,
-                                      bitset_t *states_ch) internal_function;
-static bool check_node_accept (const re_match_context_t *mctx,
-                              const re_token_t *node, Idx idx)
-     internal_function;
-static reg_errcode_t extend_buffers (re_match_context_t *mctx)
-     internal_function;
-\f
-/* Entry point for POSIX code.  */
-
-/* regexec searches for a given pattern, specified by PREG, in the
-   string STRING.
-
-   If NMATCH is zero or REG_NOSUB was set in the cflags argument to
-   `regcomp', we ignore PMATCH.  Otherwise, we assume PMATCH has at
-   least NMATCH elements, and we set them to the offsets of the
-   corresponding matched substrings.
-
-   EFLAGS specifies `execution flags' which affect matching: if
-   REG_NOTBOL is set, then ^ does not match at the beginning of the
-   string; if REG_NOTEOL is set, then $ does not match at the end.
-
-   We return 0 if we find a match and REG_NOMATCH if not.  */
-
-int
-regexec (preg, string, nmatch, pmatch, eflags)
-    const regex_t *_Restrict_ preg;
-    const char *_Restrict_ string;
-    size_t nmatch;
-    regmatch_t pmatch[_Restrict_arr_];
-    int eflags;
-{
-  reg_errcode_t err;
-  Idx start, length;
-#ifdef _LIBC
-  re_dfa_t *dfa = (re_dfa_t *) preg->buffer;
-#endif
-
-  if (eflags & ~(REG_NOTBOL | REG_NOTEOL | REG_STARTEND))
-    return REG_BADPAT;
-
-  if (eflags & REG_STARTEND)
-    {
-      start = pmatch[0].rm_so;
-      length = pmatch[0].rm_eo;
-    }
-  else
-    {
-      start = 0;
-      length = strlen (string);
-    }
-
-  __libc_lock_lock (dfa->lock);
-  if (preg->no_sub)
-    err = re_search_internal (preg, string, length, start, length,
-                             length, 0, NULL, eflags);
-  else
-    err = re_search_internal (preg, string, length, start, length,
-                             length, nmatch, pmatch, eflags);
-  __libc_lock_unlock (dfa->lock);
-  return err != REG_NOERROR;
-}
-
-#ifdef _LIBC
-# include <shlib-compat.h>
-versioned_symbol (libc, __regexec, regexec, GLIBC_2_3_4);
-
-# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)
-__typeof__ (__regexec) __compat_regexec;
-
-int
-attribute_compat_text_section
-__compat_regexec (const regex_t *_Restrict_ preg,
-                 const char *_Restrict_ string, size_t nmatch,
-                 regmatch_t pmatch[], int eflags)
-{
-  return regexec (preg, string, nmatch, pmatch,
-                 eflags & (REG_NOTBOL | REG_NOTEOL));
-}
-compat_symbol (libc, __compat_regexec, regexec, GLIBC_2_0);
-# endif
-#endif
-
-/* Entry points for GNU code.  */
-
-/* re_match, re_search, re_match_2, re_search_2
-
-   The former two functions operate on STRING with length LENGTH,
-   while the later two operate on concatenation of STRING1 and STRING2
-   with lengths LENGTH1 and LENGTH2, respectively.
-
-   re_match() matches the compiled pattern in BUFP against the string,
-   starting at index START.
-
-   re_search() first tries matching at index START, then it tries to match
-   starting from index START + 1, and so on.  The last start position tried
-   is START + RANGE.  (Thus RANGE = 0 forces re_search to operate the same
-   way as re_match().)
-
-   The parameter STOP of re_{match,search}_2 specifies that no match exceeding
-   the first STOP characters of the concatenation of the strings should be
-   concerned.
-
-   If REGS is not NULL, and BUFP->no_sub is not set, the offsets of the match
-   and all groups is stored in REGS.  (For the "_2" variants, the offsets are
-   computed relative to the concatenation, not relative to the individual
-   strings.)
-
-   On success, re_match* functions return the length of the match, re_search*
-   return the position of the start of the match.  Return value -1 means no
-   match was found and -2 indicates an internal error.  */
-
-regoff_t
-re_match (bufp, string, length, start, regs)
-    struct re_pattern_buffer *bufp;
-    const char *string;
-    Idx length, start;
-    struct re_registers *regs;
-{
-  return re_search_stub (bufp, string, length, start, 0, length, regs, true);
-}
-#ifdef _LIBC
-weak_alias (__re_match, re_match)
-#endif
-
-regoff_t
-re_search (bufp, string, length, start, range, regs)
-    struct re_pattern_buffer *bufp;
-    const char *string;
-    Idx length, start;
-    regoff_t range;
-    struct re_registers *regs;
-{
-  return re_search_stub (bufp, string, length, start, range, length, regs,
-                        false);
-}
-#ifdef _LIBC
-weak_alias (__re_search, re_search)
-#endif
-
-regoff_t
-re_match_2 (bufp, string1, length1, string2, length2, start, regs, stop)
-    struct re_pattern_buffer *bufp;
-    const char *string1, *string2;
-    Idx length1, length2, start, stop;
-    struct re_registers *regs;
-{
-  return re_search_2_stub (bufp, string1, length1, string2, length2,
-                          start, 0, regs, stop, true);
-}
-#ifdef _LIBC
-weak_alias (__re_match_2, re_match_2)
-#endif
-
-regoff_t
-re_search_2 (bufp, string1, length1, string2, length2, start, range, regs, stop)
-    struct re_pattern_buffer *bufp;
-    const char *string1, *string2;
-    Idx length1, length2, start, stop;
-    regoff_t range;
-    struct re_registers *regs;
-{
-  return re_search_2_stub (bufp, string1, length1, string2, length2,
-                          start, range, regs, stop, false);
-}
-#ifdef _LIBC
-weak_alias (__re_search_2, re_search_2)
-#endif
-
-static regoff_t
-internal_function
-re_search_2_stub (struct re_pattern_buffer *bufp,
-                 const char *string1, Idx length1,
-                 const char *string2, Idx length2,
-                 Idx start, regoff_t range, struct re_registers *regs,
-                 Idx stop, bool ret_len)
-{
-  const char *str;
-  regoff_t rval;
-  Idx len = length1 + length2;
-  char *s = NULL;
-
-  if (BE (length1 < 0 || length2 < 0 || stop < 0 || len < length1, 0))
-    return -2;
-
-  /* Concatenate the strings.  */
-  if (length2 > 0)
-    if (length1 > 0)
-      {
-       s = re_malloc (char, len);
-
-       if (BE (s == NULL, 0))
-         return -2;
-#ifdef _LIBC
-       memcpy (__mempcpy (s, string1, length1), string2, length2);
-#else
-       memcpy (s, string1, length1);
-       memcpy (s + length1, string2, length2);
-#endif
-       str = s;
-      }
-    else
-      str = string2;
-  else
-    str = string1;
-
-  rval = re_search_stub (bufp, str, len, start, range, stop, regs,
-                        ret_len);
-  re_free (s);
-  return rval;
-}
-
-/* The parameters have the same meaning as those of re_search.
-   Additional parameters:
-   If RET_LEN is true the length of the match is returned (re_match style);
-   otherwise the position of the match is returned.  */
-
-static regoff_t
-internal_function
-re_search_stub (struct re_pattern_buffer *bufp,
-               const char *string, Idx length,
-               Idx start, regoff_t range, Idx stop, struct re_registers *regs,
-               bool ret_len)
-{
-  reg_errcode_t result;
-  regmatch_t *pmatch;
-  Idx nregs;
-  regoff_t rval;
-  int eflags = 0;
-#ifdef _LIBC
-  re_dfa_t *dfa = (re_dfa_t *) bufp->buffer;
-#endif
-  Idx last_start = start + range;
-
-  /* Check for out-of-range.  */
-  if (BE (start < 0 || start > length, 0))
-    return -1;
-  if (BE (length < last_start || (0 <= range && last_start < start), 0))
-    last_start = length;
-  else if (BE (last_start < 0 || (range < 0 && start <= last_start), 0))
-    last_start = 0;
-
-  __libc_lock_lock (dfa->lock);
-
-  eflags |= (bufp->not_bol) ? REG_NOTBOL : 0;
-  eflags |= (bufp->not_eol) ? REG_NOTEOL : 0;
-
-  /* Compile fastmap if we haven't yet.  */
-  if (start < last_start && bufp->fastmap != NULL && !bufp->fastmap_accurate)
-    re_compile_fastmap (bufp);
-
-  if (BE (bufp->no_sub, 0))
-    regs = NULL;
-
-  /* We need at least 1 register.  */
-  if (regs == NULL)
-    nregs = 1;
-  else if (BE (bufp->regs_allocated == REGS_FIXED
-              && regs->num_regs <= bufp->re_nsub, 0))
-    {
-      nregs = regs->num_regs;
-      if (BE (nregs < 1, 0))
-       {
-         /* Nothing can be copied to regs.  */
-         regs = NULL;
-         nregs = 1;
-       }
-    }
-  else
-    nregs = bufp->re_nsub + 1;
-  pmatch = re_malloc (regmatch_t, nregs);
-  if (BE (pmatch == NULL, 0))
-    {
-      rval = -2;
-      goto out;
-    }
-
-  result = re_search_internal (bufp, string, length, start, last_start, stop,
-                              nregs, pmatch, eflags);
-
-  rval = 0;
-
-  /* I hope we needn't fill ther regs with -1's when no match was found.  */
-  if (result != REG_NOERROR)
-    rval = -1;
-  else if (regs != NULL)
-    {
-      /* If caller wants register contents data back, copy them.  */
-      bufp->regs_allocated = re_copy_regs (regs, pmatch, nregs,
-                                          bufp->regs_allocated);
-      if (BE (bufp->regs_allocated == REGS_UNALLOCATED, 0))
-       rval = -2;
-    }
-
-  if (BE (rval == 0, 1))
-    {
-      if (ret_len)
-       {
-         assert (pmatch[0].rm_so == start);
-         rval = pmatch[0].rm_eo - start;
-       }
-      else
-       rval = pmatch[0].rm_so;
-    }
-  re_free (pmatch);
- out:
-  __libc_lock_unlock (dfa->lock);
-  return rval;
-}
-
-static unsigned int
-internal_function
-re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, Idx nregs,
-             int regs_allocated)
-{
-  int rval = REGS_REALLOCATE;
-  Idx i;
-  Idx need_regs = nregs + 1;
-  /* We need one extra element beyond `num_regs' for the `-1' marker GNU code
-     uses.  */
-
-  /* Have the register data arrays been allocated?  */
-  if (regs_allocated == REGS_UNALLOCATED)
-    { /* No.  So allocate them with malloc.  */
-      regs->start = re_malloc (regoff_t, need_regs);
-      if (BE (regs->start == NULL, 0))
-       return REGS_UNALLOCATED;
-      regs->end = re_malloc (regoff_t, need_regs);
-      if (BE (regs->end == NULL, 0))
-       {
-         re_free (regs->start);
-         return REGS_UNALLOCATED;
-       }
-      regs->num_regs = need_regs;
-    }
-  else if (regs_allocated == REGS_REALLOCATE)
-    { /* Yes.  If we need more elements than were already
-        allocated, reallocate them.  If we need fewer, just
-        leave it alone.  */
-      if (BE (need_regs > regs->num_regs, 0))
-       {
-         regoff_t *new_start = re_realloc (regs->start, regoff_t, need_regs);
-         regoff_t *new_end;
-         if (BE (new_start == NULL, 0))
-           return REGS_UNALLOCATED;
-         new_end = re_realloc (regs->end, regoff_t, need_regs);
-         if (BE (new_end == NULL, 0))
-           {
-             re_free (new_start);
-             return REGS_UNALLOCATED;
-           }
-         regs->start = new_start;
-         regs->end = new_end;
-         regs->num_regs = need_regs;
-       }
-    }
-  else
-    {
-      assert (regs_allocated == REGS_FIXED);
-      /* This function may not be called with REGS_FIXED and nregs too big.  */
-      assert (regs->num_regs >= nregs);
-      rval = REGS_FIXED;
-    }
-
-  /* Copy the regs.  */
-  for (i = 0; i < nregs; ++i)
-    {
-      regs->start[i] = pmatch[i].rm_so;
-      regs->end[i] = pmatch[i].rm_eo;
-    }
-  for ( ; i < regs->num_regs; ++i)
-    regs->start[i] = regs->end[i] = -1;
-
-  return rval;
-}
-
-/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
-   ENDS.  Subsequent matches using PATTERN_BUFFER and REGS will use
-   this memory for recording register information.  STARTS and ENDS
-   must be allocated using the malloc library routine, and must each
-   be at least NUM_REGS * sizeof (regoff_t) bytes long.
-
-   If NUM_REGS == 0, then subsequent matches should allocate their own
-   register data.
-
-   Unless this function is called, the first search or match using
-   PATTERN_BUFFER will allocate its own register data, without
-   freeing the old data.  */
-
-void
-re_set_registers (bufp, regs, num_regs, starts, ends)
-    struct re_pattern_buffer *bufp;
-    struct re_registers *regs;
-    __re_size_t num_regs;
-    regoff_t *starts, *ends;
-{
-  if (num_regs)
-    {
-      bufp->regs_allocated = REGS_REALLOCATE;
-      regs->num_regs = num_regs;
-      regs->start = starts;
-      regs->end = ends;
-    }
-  else
-    {
-      bufp->regs_allocated = REGS_UNALLOCATED;
-      regs->num_regs = 0;
-      regs->start = regs->end = NULL;
-    }
-}
-#ifdef _LIBC
-weak_alias (__re_set_registers, re_set_registers)
-#endif
-\f
-/* Entry points compatible with 4.2 BSD regex library.  We don't define
-   them unless specifically requested.  */
-
-#if defined _REGEX_RE_COMP || defined _LIBC
-int
-# ifdef _LIBC
-weak_function
-# endif
-re_exec (s)
-     const char *s;
-{
-  return 0 == regexec (&re_comp_buf, s, 0, NULL, 0);
-}
-#endif /* _REGEX_RE_COMP */
-\f
-/* Internal entry point.  */
-
-/* Searches for a compiled pattern PREG in the string STRING, whose
-   length is LENGTH.  NMATCH, PMATCH, and EFLAGS have the same
-   meaning as with regexec.  LAST_START is START + RANGE, where
-   START and RANGE have the same meaning as with re_search.
-   Return REG_NOERROR if we find a match, and REG_NOMATCH if not,
-   otherwise return the error code.
-   Note: We assume front end functions already check ranges.
-   (0 <= LAST_START && LAST_START <= LENGTH)  */
-
-static reg_errcode_t
-internal_function
-re_search_internal (const regex_t *preg,
-                   const char *string, Idx length,
-                   Idx start, Idx last_start, Idx stop,
-                   size_t nmatch, regmatch_t pmatch[],
-                   int eflags)
-{
-  reg_errcode_t err;
-  const re_dfa_t *dfa = (const re_dfa_t *) preg->buffer;
-  Idx left_lim, right_lim;
-  int incr;
-  bool fl_longest_match;
-  int match_kind;
-  Idx match_first;
-  Idx match_last = REG_MISSING;
-  Idx extra_nmatch;
-  bool sb;
-  int ch;
-#if defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
-  re_match_context_t mctx = { .dfa = dfa };
-#else
-  re_match_context_t mctx;
-#endif
-  char *fastmap = ((preg->fastmap != NULL && preg->fastmap_accurate
-                   && start != last_start && !preg->can_be_null)
-                  ? preg->fastmap : NULL);
-  RE_TRANSLATE_TYPE t = preg->translate;
-
-#if !(defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L))
-  memset (&mctx, '\0', sizeof (re_match_context_t));
-  mctx.dfa = dfa;
-#endif
-
-  extra_nmatch = (nmatch > preg->re_nsub) ? nmatch - (preg->re_nsub + 1) : 0;
-  nmatch -= extra_nmatch;
-
-  /* Check if the DFA haven't been compiled.  */
-  if (BE (preg->used == 0 || dfa->init_state == NULL
-         || dfa->init_state_word == NULL || dfa->init_state_nl == NULL
-         || dfa->init_state_begbuf == NULL, 0))
-    return REG_NOMATCH;
-
-#ifdef DEBUG
-  /* We assume front-end functions already check them.  */
-  assert (0 <= last_start && last_start <= length);
-#endif
-
-  /* If initial states with non-begbuf contexts have no elements,
-     the regex must be anchored.  If preg->newline_anchor is set,
-     we'll never use init_state_nl, so do not check it.  */
-  if (dfa->init_state->nodes.nelem == 0
-      && dfa->init_state_word->nodes.nelem == 0
-      && (dfa->init_state_nl->nodes.nelem == 0
-         || !preg->newline_anchor))
-    {
-      if (start != 0 && last_start != 0)
-        return REG_NOMATCH;
-      start = last_start = 0;
-    }
-
-  /* We must check the longest matching, if nmatch > 0.  */
-  fl_longest_match = (nmatch != 0 || dfa->nbackref);
-
-  err = re_string_allocate (&mctx.input, string, length, dfa->nodes_len + 1,
-                           preg->translate, (preg->syntax & RE_ICASE) != 0,
-                           dfa);
-  if (BE (err != REG_NOERROR, 0))
-    goto free_return;
-  mctx.input.stop = stop;
-  mctx.input.raw_stop = stop;
-  mctx.input.newline_anchor = preg->newline_anchor;
-
-  err = match_ctx_init (&mctx, eflags, dfa->nbackref * 2);
-  if (BE (err != REG_NOERROR, 0))
-    goto free_return;
-
-  /* We will log all the DFA states through which the dfa pass,
-     if nmatch > 1, or this dfa has "multibyte node", which is a
-     back-reference or a node which can accept multibyte character or
-     multi character collating element.  */
-  if (nmatch > 1 || dfa->has_mb_node)
-    {
-      /* Avoid overflow.  */
-      if (BE (SIZE_MAX / sizeof (re_dfastate_t *) <= mctx.input.bufs_len, 0))
-       {
-         err = REG_ESPACE;
-         goto free_return;
-       }
-
-      mctx.state_log = re_malloc (re_dfastate_t *, mctx.input.bufs_len + 1);
-      if (BE (mctx.state_log == NULL, 0))
-       {
-         err = REG_ESPACE;
-         goto free_return;
-       }
-    }
-  else
-    mctx.state_log = NULL;
-
-  match_first = start;
-  mctx.input.tip_context = (eflags & REG_NOTBOL) ? CONTEXT_BEGBUF
-                          : CONTEXT_NEWLINE | CONTEXT_BEGBUF;
-
-  /* Check incrementally whether of not the input string match.  */
-  incr = (last_start < start) ? -1 : 1;
-  left_lim = (last_start < start) ? last_start : start;
-  right_lim = (last_start < start) ? start : last_start;
-  sb = dfa->mb_cur_max == 1;
-  match_kind =
-    (fastmap
-     ? ((sb || !(preg->syntax & RE_ICASE || t) ? 4 : 0)
-       | (start <= last_start ? 2 : 0)
-       | (t != NULL ? 1 : 0))
-     : 8);
-
-  for (;; match_first += incr)
-    {
-      err = REG_NOMATCH;
-      if (match_first < left_lim || right_lim < match_first)
-       goto free_return;
-
-      /* Advance as rapidly as possible through the string, until we
-        find a plausible place to start matching.  This may be done
-        with varying efficiency, so there are various possibilities:
-        only the most common of them are specialized, in order to
-        save on code size.  We use a switch statement for speed.  */
-      switch (match_kind)
-       {
-       case 8:
-         /* No fastmap.  */
-         break;
-
-       case 7:
-         /* Fastmap with single-byte translation, match forward.  */
-         while (BE (match_first < right_lim, 1)
-                && !fastmap[t[(unsigned char) string[match_first]]])
-           ++match_first;
-         goto forward_match_found_start_or_reached_end;
-
-       case 6:
-         /* Fastmap without translation, match forward.  */
-         while (BE (match_first < right_lim, 1)
-                && !fastmap[(unsigned char) string[match_first]])
-           ++match_first;
-
-       forward_match_found_start_or_reached_end:
-         if (BE (match_first == right_lim, 0))
-           {
-             ch = match_first >= length
-                      ? 0 : (unsigned char) string[match_first];
-             if (!fastmap[t ? t[ch] : ch])
-               goto free_return;
-           }
-         break;
-
-       case 4:
-       case 5:
-         /* Fastmap without multi-byte translation, match backwards.  */
-         while (match_first >= left_lim)
-           {
-             ch = match_first >= length
-                      ? 0 : (unsigned char) string[match_first];
-             if (fastmap[t ? t[ch] : ch])
-               break;
-             --match_first;
-           }
-         if (match_first < left_lim)
-           goto free_return;
-         break;
-
-       default:
-         /* In this case, we can't determine easily the current byte,
-            since it might be a component byte of a multibyte
-            character.  Then we use the constructed buffer instead.  */
-         for (;;)
-           {
-             /* If MATCH_FIRST is out of the valid range, reconstruct the
-                buffers.  */
-             __re_size_t offset = match_first - mctx.input.raw_mbs_idx;
-             if (BE (offset >= (__re_size_t) mctx.input.valid_raw_len, 0))
-               {
-                 err = re_string_reconstruct (&mctx.input, match_first,
-                                              eflags);
-                 if (BE (err != REG_NOERROR, 0))
-                   goto free_return;
-
-                 offset = match_first - mctx.input.raw_mbs_idx;
-               }
-             /* If MATCH_FIRST is out of the buffer, leave it as '\0'.
-                Note that MATCH_FIRST must not be smaller than 0.  */
-             ch = (match_first >= length
-                   ? 0 : re_string_byte_at (&mctx.input, offset));
-             if (fastmap[ch])
-               break;
-             match_first += incr;
-             if (match_first < left_lim || match_first > right_lim)
-               {
-                 err = REG_NOMATCH;
-                 goto free_return;
-               }
-           }
-         break;
-       }
-
-      /* Reconstruct the buffers so that the matcher can assume that
-        the matching starts from the beginning of the buffer.  */
-      err = re_string_reconstruct (&mctx.input, match_first, eflags);
-      if (BE (err != REG_NOERROR, 0))
-       goto free_return;
-
-#ifdef RE_ENABLE_I18N
-     /* Don't consider this char as a possible match start if it part,
-       yet isn't the head, of a multibyte character.  */
-      if (!sb && !re_string_first_byte (&mctx.input, 0))
-       continue;
-#endif
-
-      /* It seems to be appropriate one, then use the matcher.  */
-      /* We assume that the matching starts from 0.  */
-      mctx.state_log_top = mctx.nbkref_ents = mctx.max_mb_elem_len = 0;
-      match_last = check_matching (&mctx, fl_longest_match,
-                                  start <= last_start ? &match_first : NULL);
-      if (match_last != REG_MISSING)
-       {
-         if (BE (match_last == REG_ERROR, 0))
-           {
-             err = REG_ESPACE;
-             goto free_return;
-           }
-         else
-           {
-             mctx.match_last = match_last;
-             if ((!preg->no_sub && nmatch > 1) || dfa->nbackref)
-               {
-                 re_dfastate_t *pstate = mctx.state_log[match_last];
-                 mctx.last_node = check_halt_state_context (&mctx, pstate,
-                                                            match_last);
-               }
-             if ((!preg->no_sub && nmatch > 1 && dfa->has_plural_match)
-                 || dfa->nbackref)
-               {
-                 err = prune_impossible_nodes (&mctx);
-                 if (err == REG_NOERROR)
-                   break;
-                 if (BE (err != REG_NOMATCH, 0))
-                   goto free_return;
-                 match_last = REG_MISSING;
-               }
-             else
-               break; /* We found a match.  */
-           }
-       }
-
-      match_ctx_clean (&mctx);
-    }
-
-#ifdef DEBUG
-  assert (match_last != REG_MISSING);
-  assert (err == REG_NOERROR);
-#endif
-
-  /* Set pmatch[] if we need.  */
-  if (nmatch > 0)
-    {
-      Idx reg_idx;
-
-      /* Initialize registers.  */
-      for (reg_idx = 1; reg_idx < nmatch; ++reg_idx)
-       pmatch[reg_idx].rm_so = pmatch[reg_idx].rm_eo = -1;
-
-      /* Set the points where matching start/end.  */
-      pmatch[0].rm_so = 0;
-      pmatch[0].rm_eo = mctx.match_last;
-      /* FIXME: This function should fail if mctx.match_last exceeds
-        the maximum possible regoff_t value.  We need a new error
-        code REG_OVERFLOW.  */
-
-      if (!preg->no_sub && nmatch > 1)
-       {
-         err = set_regs (preg, &mctx, nmatch, pmatch,
-                         dfa->has_plural_match && dfa->nbackref > 0);
-         if (BE (err != REG_NOERROR, 0))
-           goto free_return;
-       }
-
-      /* At last, add the offset to the each registers, since we slided
-        the buffers so that we could assume that the matching starts
-        from 0.  */
-      for (reg_idx = 0; reg_idx < nmatch; ++reg_idx)
-       if (pmatch[reg_idx].rm_so != -1)
-         {
-#ifdef RE_ENABLE_I18N
-           if (BE (mctx.input.offsets_needed != 0, 0))
-             {
-               pmatch[reg_idx].rm_so =
-                 (pmatch[reg_idx].rm_so == mctx.input.valid_len
-                  ? mctx.input.valid_raw_len
-                  : mctx.input.offsets[pmatch[reg_idx].rm_so]);
-               pmatch[reg_idx].rm_eo =
-                 (pmatch[reg_idx].rm_eo == mctx.input.valid_len
-                  ? mctx.input.valid_raw_len
-                  : mctx.input.offsets[pmatch[reg_idx].rm_eo]);
-             }
-#else
-           assert (mctx.input.offsets_needed == 0);
-#endif
-           pmatch[reg_idx].rm_so += match_first;
-           pmatch[reg_idx].rm_eo += match_first;
-         }
-      for (reg_idx = 0; reg_idx < extra_nmatch; ++reg_idx)
-       {
-         pmatch[nmatch + reg_idx].rm_so = -1;
-         pmatch[nmatch + reg_idx].rm_eo = -1;
-       }
-
-      if (dfa->subexp_map)
-        for (reg_idx = 0; reg_idx + 1 < nmatch; reg_idx++)
-          if (dfa->subexp_map[reg_idx] != reg_idx)
-            {
-              pmatch[reg_idx + 1].rm_so
-                = pmatch[dfa->subexp_map[reg_idx] + 1].rm_so;
-              pmatch[reg_idx + 1].rm_eo
-                = pmatch[dfa->subexp_map[reg_idx] + 1].rm_eo;
-            }
-    }
-
- free_return:
-  re_free (mctx.state_log);
-  if (dfa->nbackref)
-    match_ctx_free (&mctx);
-  re_string_destruct (&mctx.input);
-  return err;
-}
-
-static reg_errcode_t
-internal_function
-prune_impossible_nodes (re_match_context_t *mctx)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  Idx halt_node, match_last;
-  reg_errcode_t ret;
-  re_dfastate_t **sifted_states;
-  re_dfastate_t **lim_states = NULL;
-  re_sift_context_t sctx;
-#ifdef DEBUG
-  assert (mctx->state_log != NULL);
-#endif
-  match_last = mctx->match_last;
-  halt_node = mctx->last_node;
-
-  /* Avoid overflow.  */
-  if (BE (SIZE_MAX / sizeof (re_dfastate_t *) <= match_last, 0))
-    return REG_ESPACE;
-
-  sifted_states = re_malloc (re_dfastate_t *, match_last + 1);
-  if (BE (sifted_states == NULL, 0))
-    {
-      ret = REG_ESPACE;
-      goto free_return;
-    }
-  if (dfa->nbackref)
-    {
-      lim_states = re_malloc (re_dfastate_t *, match_last + 1);
-      if (BE (lim_states == NULL, 0))
-       {
-         ret = REG_ESPACE;
-         goto free_return;
-       }
-      while (1)
-       {
-         memset (lim_states, '\0',
-                 sizeof (re_dfastate_t *) * (match_last + 1));
-         sift_ctx_init (&sctx, sifted_states, lim_states, halt_node,
-                        match_last);
-         ret = sift_states_backward (mctx, &sctx);
-         re_node_set_free (&sctx.limits);
-         if (BE (ret != REG_NOERROR, 0))
-             goto free_return;
-         if (sifted_states[0] != NULL || lim_states[0] != NULL)
-           break;
-         do
-           {
-             --match_last;
-             if (! REG_VALID_INDEX (match_last))
-               {
-                 ret = REG_NOMATCH;
-                 goto free_return;
-               }
-           } while (mctx->state_log[match_last] == NULL
-                    || !mctx->state_log[match_last]->halt);
-         halt_node = check_halt_state_context (mctx,
-                                               mctx->state_log[match_last],
-                                               match_last);
-       }
-      ret = merge_state_array (dfa, sifted_states, lim_states,
-                              match_last + 1);
-      re_free (lim_states);
-      lim_states = NULL;
-      if (BE (ret != REG_NOERROR, 0))
-       goto free_return;
-    }
-  else
-    {
-      sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last);
-      ret = sift_states_backward (mctx, &sctx);
-      re_node_set_free (&sctx.limits);
-      if (BE (ret != REG_NOERROR, 0))
-       goto free_return;
-      if (sifted_states[0] == NULL)
-       {
-         ret = REG_NOMATCH;
-         goto free_return;
-       }
-    }
-  re_free (mctx->state_log);
-  mctx->state_log = sifted_states;
-  sifted_states = NULL;
-  mctx->last_node = halt_node;
-  mctx->match_last = match_last;
-  ret = REG_NOERROR;
- free_return:
-  re_free (sifted_states);
-  re_free (lim_states);
-  return ret;
-}
-
-/* Acquire an initial state and return it.
-   We must select appropriate initial state depending on the context,
-   since initial states may have constraints like "\<", "^", etc..  */
-
-static inline re_dfastate_t *
-__attribute ((always_inline)) internal_function
-acquire_init_state_context (reg_errcode_t *err, const re_match_context_t *mctx,
-                           Idx idx)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  if (dfa->init_state->has_constraint)
-    {
-      unsigned int context;
-      context = re_string_context_at (&mctx->input, idx - 1, mctx->eflags);
-      if (IS_WORD_CONTEXT (context))
-       return dfa->init_state_word;
-      else if (IS_ORDINARY_CONTEXT (context))
-       return dfa->init_state;
-      else if (IS_BEGBUF_CONTEXT (context) && IS_NEWLINE_CONTEXT (context))
-       return dfa->init_state_begbuf;
-      else if (IS_NEWLINE_CONTEXT (context))
-       return dfa->init_state_nl;
-      else if (IS_BEGBUF_CONTEXT (context))
-       {
-         /* It is relatively rare case, then calculate on demand.  */
-         return re_acquire_state_context (err, dfa,
-                                          dfa->init_state->entrance_nodes,
-                                          context);
-       }
-      else
-       /* Must not happen?  */
-       return dfa->init_state;
-    }
-  else
-    return dfa->init_state;
-}
-
-/* Check whether the regular expression match input string INPUT or not,
-   and return the index where the matching end.  Return REG_MISSING if
-   there is no match, and return REG_ERROR in case of an error.
-   FL_LONGEST_MATCH means we want the POSIX longest matching.
-   If P_MATCH_FIRST is not NULL, and the match fails, it is set to the
-   next place where we may want to try matching.
-   Note that the matcher assume that the maching starts from the current
-   index of the buffer.  */
-
-static Idx
-internal_function
-check_matching (re_match_context_t *mctx, bool fl_longest_match,
-               Idx *p_match_first)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  reg_errcode_t err;
-  Idx match = 0;
-  Idx match_last = REG_MISSING;
-  Idx cur_str_idx = re_string_cur_idx (&mctx->input);
-  re_dfastate_t *cur_state;
-  bool at_init_state = p_match_first != NULL;
-  Idx next_start_idx = cur_str_idx;
-
-  err = REG_NOERROR;
-  cur_state = acquire_init_state_context (&err, mctx, cur_str_idx);
-  /* An initial state must not be NULL (invalid).  */
-  if (BE (cur_state == NULL, 0))
-    {
-      assert (err == REG_ESPACE);
-      return REG_ERROR;
-    }
-
-  if (mctx->state_log != NULL)
-    {
-      mctx->state_log[cur_str_idx] = cur_state;
-
-      /* Check OP_OPEN_SUBEXP in the initial state in case that we use them
-        later.  E.g. Processing back references.  */
-      if (BE (dfa->nbackref, 0))
-       {
-         at_init_state = false;
-         err = check_subexp_matching_top (mctx, &cur_state->nodes, 0);
-         if (BE (err != REG_NOERROR, 0))
-           return err;
-
-         if (cur_state->has_backref)
-           {
-             err = transit_state_bkref (mctx, &cur_state->nodes);
-             if (BE (err != REG_NOERROR, 0))
-               return err;
-           }
-       }
-    }
-
-  /* If the RE accepts NULL string.  */
-  if (BE (cur_state->halt, 0))
-    {
-      if (!cur_state->has_constraint
-         || check_halt_state_context (mctx, cur_state, cur_str_idx))
-       {
-         if (!fl_longest_match)
-           return cur_str_idx;
-         else
-           {
-             match_last = cur_str_idx;
-             match = 1;
-           }
-       }
-    }
-
-  while (!re_string_eoi (&mctx->input))
-    {
-      re_dfastate_t *old_state = cur_state;
-      Idx next_char_idx = re_string_cur_idx (&mctx->input) + 1;
-
-      if (BE (next_char_idx >= mctx->input.bufs_len, 0)
-          || (BE (next_char_idx >= mctx->input.valid_len, 0)
-              && mctx->input.valid_len < mctx->input.len))
-        {
-          err = extend_buffers (mctx);
-          if (BE (err != REG_NOERROR, 0))
-           {
-             assert (err == REG_ESPACE);
-             return REG_ERROR;
-           }
-        }
-
-      cur_state = transit_state (&err, mctx, cur_state);
-      if (mctx->state_log != NULL)
-       cur_state = merge_state_with_log (&err, mctx, cur_state);
-
-      if (cur_state == NULL)
-       {
-         /* Reached the invalid state or an error.  Try to recover a valid
-            state using the state log, if available and if we have not
-            already found a valid (even if not the longest) match.  */
-         if (BE (err != REG_NOERROR, 0))
-           return REG_ERROR;
-
-         if (mctx->state_log == NULL
-             || (match && !fl_longest_match)
-             || (cur_state = find_recover_state (&err, mctx)) == NULL)
-           break;
-       }
-
-      if (BE (at_init_state, 0))
-       {
-         if (old_state == cur_state)
-           next_start_idx = next_char_idx;
-         else
-           at_init_state = false;
-       }
-
-      if (cur_state->halt)
-       {
-         /* Reached a halt state.
-            Check the halt state can satisfy the current context.  */
-         if (!cur_state->has_constraint
-             || check_halt_state_context (mctx, cur_state,
-                                          re_string_cur_idx (&mctx->input)))
-           {
-             /* We found an appropriate halt state.  */
-             match_last = re_string_cur_idx (&mctx->input);
-             match = 1;
-
-             /* We found a match, do not modify match_first below.  */
-             p_match_first = NULL;
-             if (!fl_longest_match)
-               break;
-           }
-       }
-    }
-
-  if (p_match_first)
-    *p_match_first += next_start_idx;
-
-  return match_last;
-}
-
-/* Check NODE match the current context.  */
-
-static bool
-internal_function
-check_halt_node_context (const re_dfa_t *dfa, Idx node, unsigned int context)
-{
-  re_token_type_t type = dfa->nodes[node].type;
-  unsigned int constraint = dfa->nodes[node].constraint;
-  if (type != END_OF_RE)
-    return false;
-  if (!constraint)
-    return true;
-  if (NOT_SATISFY_NEXT_CONSTRAINT (constraint, context))
-    return false;
-  return true;
-}
-
-/* Check the halt state STATE match the current context.
-   Return 0 if not match, if the node, STATE has, is a halt node and
-   match the context, return the node.  */
-
-static Idx
-internal_function
-check_halt_state_context (const re_match_context_t *mctx,
-                         const re_dfastate_t *state, Idx idx)
-{
-  Idx i;
-  unsigned int context;
-#ifdef DEBUG
-  assert (state->halt);
-#endif
-  context = re_string_context_at (&mctx->input, idx, mctx->eflags);
-  for (i = 0; i < state->nodes.nelem; ++i)
-    if (check_halt_node_context (mctx->dfa, state->nodes.elems[i], context))
-      return state->nodes.elems[i];
-  return 0;
-}
-
-/* Compute the next node to which "NFA" transit from NODE("NFA" is a NFA
-   corresponding to the DFA).
-   Return the destination node, and update EPS_VIA_NODES;
-   return REG_MISSING in case of errors.  */
-
-static Idx
-internal_function
-proceed_next_node (const re_match_context_t *mctx, Idx nregs, regmatch_t *regs,
-                  Idx *pidx, Idx node, re_node_set *eps_via_nodes,
-                  struct re_fail_stack_t *fs)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  Idx i;
-  bool ok;
-  if (IS_EPSILON_NODE (dfa->nodes[node].type))
-    {
-      re_node_set *cur_nodes = &mctx->state_log[*pidx]->nodes;
-      re_node_set *edests = &dfa->edests[node];
-      Idx dest_node;
-      ok = re_node_set_insert (eps_via_nodes, node);
-      if (BE (! ok, 0))
-       return REG_ERROR;
-      /* Pick up a valid destination, or return REG_MISSING if none
-        is found.  */
-      for (dest_node = REG_MISSING, i = 0; i < edests->nelem; ++i)
-       {
-         Idx candidate = edests->elems[i];
-         if (!re_node_set_contains (cur_nodes, candidate))
-           continue;
-          if (dest_node == REG_MISSING)
-           dest_node = candidate;
-
-          else
-           {
-             /* In order to avoid infinite loop like "(a*)*", return the second
-                epsilon-transition if the first was already considered.  */
-             if (re_node_set_contains (eps_via_nodes, dest_node))
-               return candidate;
-
-             /* Otherwise, push the second epsilon-transition on the fail stack.  */
-             else if (fs != NULL
-                      && push_fail_stack (fs, *pidx, candidate, nregs, regs,
-                                          eps_via_nodes))
-               return REG_ERROR;
-
-             /* We know we are going to exit.  */
-             break;
-           }
-       }
-      return dest_node;
-    }
-  else
-    {
-      Idx naccepted = 0;
-      re_token_type_t type = dfa->nodes[node].type;
-
-#ifdef RE_ENABLE_I18N
-      if (dfa->nodes[node].accept_mb)
-       naccepted = check_node_accept_bytes (dfa, node, &mctx->input, *pidx);
-      else
-#endif /* RE_ENABLE_I18N */
-      if (type == OP_BACK_REF)
-       {
-         Idx subexp_idx = dfa->nodes[node].opr.idx + 1;
-         naccepted = regs[subexp_idx].rm_eo - regs[subexp_idx].rm_so;
-         if (fs != NULL)
-           {
-             if (regs[subexp_idx].rm_so == -1 || regs[subexp_idx].rm_eo == -1)
-               return REG_MISSING;
-             else if (naccepted)
-               {
-                 char *buf = (char *) re_string_get_buffer (&mctx->input);
-                 if (memcmp (buf + regs[subexp_idx].rm_so, buf + *pidx,
-                             naccepted) != 0)
-                   return REG_MISSING;
-               }
-           }
-
-         if (naccepted == 0)
-           {
-             Idx dest_node;
-             ok = re_node_set_insert (eps_via_nodes, node);
-             if (BE (! ok, 0))
-               return REG_ERROR;
-             dest_node = dfa->edests[node].elems[0];
-             if (re_node_set_contains (&mctx->state_log[*pidx]->nodes,
-                                       dest_node))
-               return dest_node;
-           }
-       }
-
-      if (naccepted != 0
-         || check_node_accept (mctx, dfa->nodes + node, *pidx))
-       {
-         Idx dest_node = dfa->nexts[node];
-         *pidx = (naccepted == 0) ? *pidx + 1 : *pidx + naccepted;
-         if (fs && (*pidx > mctx->match_last || mctx->state_log[*pidx] == NULL
-                    || !re_node_set_contains (&mctx->state_log[*pidx]->nodes,
-                                              dest_node)))
-           return REG_MISSING;
-         re_node_set_empty (eps_via_nodes);
-         return dest_node;
-       }
-    }
-  return REG_MISSING;
-}
-
-static reg_errcode_t
-internal_function
-push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node,
-                Idx nregs, regmatch_t *regs, re_node_set *eps_via_nodes)
-{
-  reg_errcode_t err;
-  Idx num = fs->num++;
-  if (fs->num == fs->alloc)
-    {
-      struct re_fail_stack_ent_t *new_array;
-      new_array = realloc (fs->stack, (sizeof (struct re_fail_stack_ent_t)
-                                      * fs->alloc * 2));
-      if (new_array == NULL)
-       return REG_ESPACE;
-      fs->alloc *= 2;
-      fs->stack = new_array;
-    }
-  fs->stack[num].idx = str_idx;
-  fs->stack[num].node = dest_node;
-  fs->stack[num].regs = re_malloc (regmatch_t, nregs);
-  if (fs->stack[num].regs == NULL)
-    return REG_ESPACE;
-  memcpy (fs->stack[num].regs, regs, sizeof (regmatch_t) * nregs);
-  err = re_node_set_init_copy (&fs->stack[num].eps_via_nodes, eps_via_nodes);
-  return err;
-}
-
-static Idx
-internal_function
-pop_fail_stack (struct re_fail_stack_t *fs, Idx *pidx, Idx nregs,
-               regmatch_t *regs, re_node_set *eps_via_nodes)
-{
-  Idx num = --fs->num;
-  assert (REG_VALID_INDEX (num));
-  *pidx = fs->stack[num].idx;
-  memcpy (regs, fs->stack[num].regs, sizeof (regmatch_t) * nregs);
-  re_node_set_free (eps_via_nodes);
-  re_free (fs->stack[num].regs);
-  *eps_via_nodes = fs->stack[num].eps_via_nodes;
-  return fs->stack[num].node;
-}
-
-/* Set the positions where the subexpressions are starts/ends to registers
-   PMATCH.
-   Note: We assume that pmatch[0] is already set, and
-   pmatch[i].rm_so == pmatch[i].rm_eo == -1 for 0 < i < nmatch.  */
-
-static reg_errcode_t
-internal_function
-set_regs (const regex_t *preg, const re_match_context_t *mctx, size_t nmatch,
-         regmatch_t *pmatch, bool fl_backtrack)
-{
-  const re_dfa_t *dfa = (const re_dfa_t *) preg->buffer;
-  Idx idx, cur_node;
-  re_node_set eps_via_nodes;
-  struct re_fail_stack_t *fs;
-  struct re_fail_stack_t fs_body = { 0, 2, NULL };
-  regmatch_t *prev_idx_match;
-  bool prev_idx_match_malloced = false;
-
-#ifdef DEBUG
-  assert (nmatch > 1);
-  assert (mctx->state_log != NULL);
-#endif
-  if (fl_backtrack)
-    {
-      fs = &fs_body;
-      fs->stack = re_malloc (struct re_fail_stack_ent_t, fs->alloc);
-      if (fs->stack == NULL)
-       return REG_ESPACE;
-    }
-  else
-    fs = NULL;
-
-  cur_node = dfa->init_node;
-  re_node_set_init_empty (&eps_via_nodes);
-
-  if (__libc_use_alloca (nmatch * sizeof (regmatch_t)))
-    prev_idx_match = (regmatch_t *) alloca (nmatch * sizeof (regmatch_t));
-  else
-    {
-      prev_idx_match = re_malloc (regmatch_t, nmatch);
-      if (prev_idx_match == NULL)
-       {
-         free_fail_stack_return (fs);
-         return REG_ESPACE;
-       }
-      prev_idx_match_malloced = true;
-    }
-  memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch);
-
-  for (idx = pmatch[0].rm_so; idx <= pmatch[0].rm_eo ;)
-    {
-      update_regs (dfa, pmatch, prev_idx_match, cur_node, idx, nmatch);
-
-      if (idx == pmatch[0].rm_eo && cur_node == mctx->last_node)
-       {
-         Idx reg_idx;
-         if (fs)
-           {
-             for (reg_idx = 0; reg_idx < nmatch; ++reg_idx)
-               if (pmatch[reg_idx].rm_so > -1 && pmatch[reg_idx].rm_eo == -1)
-                 break;
-             if (reg_idx == nmatch)
-               {
-                 re_node_set_free (&eps_via_nodes);
-                 if (prev_idx_match_malloced)
-                   re_free (prev_idx_match);
-                 return free_fail_stack_return (fs);
-               }
-             cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch,
-                                        &eps_via_nodes);
-           }
-         else
-           {
-             re_node_set_free (&eps_via_nodes);
-             if (prev_idx_match_malloced)
-               re_free (prev_idx_match);
-             return REG_NOERROR;
-           }
-       }
-
-      /* Proceed to next node.  */
-      cur_node = proceed_next_node (mctx, nmatch, pmatch, &idx, cur_node,
-                                   &eps_via_nodes, fs);
-
-      if (BE (! REG_VALID_INDEX (cur_node), 0))
-       {
-         if (BE (cur_node == REG_ERROR, 0))
-           {
-             re_node_set_free (&eps_via_nodes);
-             if (prev_idx_match_malloced)
-               re_free (prev_idx_match);
-             free_fail_stack_return (fs);
-             return REG_ESPACE;
-           }
-         if (fs)
-           cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch,
-                                      &eps_via_nodes);
-         else
-           {
-             re_node_set_free (&eps_via_nodes);
-             if (prev_idx_match_malloced)
-               re_free (prev_idx_match);
-             return REG_NOMATCH;
-           }
-       }
-    }
-  re_node_set_free (&eps_via_nodes);
-  if (prev_idx_match_malloced)
-    re_free (prev_idx_match);
-  return free_fail_stack_return (fs);
-}
-
-static reg_errcode_t
-internal_function
-free_fail_stack_return (struct re_fail_stack_t *fs)
-{
-  if (fs)
-    {
-      Idx fs_idx;
-      for (fs_idx = 0; fs_idx < fs->num; ++fs_idx)
-       {
-         re_node_set_free (&fs->stack[fs_idx].eps_via_nodes);
-         re_free (fs->stack[fs_idx].regs);
-       }
-      re_free (fs->stack);
-    }
-  return REG_NOERROR;
-}
-
-static void
-internal_function
-update_regs (const re_dfa_t *dfa, regmatch_t *pmatch,
-            regmatch_t *prev_idx_match, Idx cur_node, Idx cur_idx, Idx nmatch)
-{
-  int type = dfa->nodes[cur_node].type;
-  if (type == OP_OPEN_SUBEXP)
-    {
-      Idx reg_num = dfa->nodes[cur_node].opr.idx + 1;
-
-      /* We are at the first node of this sub expression.  */
-      if (reg_num < nmatch)
-       {
-         pmatch[reg_num].rm_so = cur_idx;
-         pmatch[reg_num].rm_eo = -1;
-       }
-    }
-  else if (type == OP_CLOSE_SUBEXP)
-    {
-      Idx reg_num = dfa->nodes[cur_node].opr.idx + 1;
-      if (reg_num < nmatch)
-       {
-         /* We are at the last node of this sub expression.  */
-         if (pmatch[reg_num].rm_so < cur_idx)
-           {
-             pmatch[reg_num].rm_eo = cur_idx;
-             /* This is a non-empty match or we are not inside an optional
-                subexpression.  Accept this right away.  */
-             memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch);
-           }
-         else
-           {
-             if (dfa->nodes[cur_node].opt_subexp
-                 && prev_idx_match[reg_num].rm_so != -1)
-               /* We transited through an empty match for an optional
-                  subexpression, like (a?)*, and this is not the subexp's
-                  first match.  Copy back the old content of the registers
-                  so that matches of an inner subexpression are undone as
-                  well, like in ((a?))*.  */
-               memcpy (pmatch, prev_idx_match, sizeof (regmatch_t) * nmatch);
-             else
-               /* We completed a subexpression, but it may be part of
-                  an optional one, so do not update PREV_IDX_MATCH.  */
-               pmatch[reg_num].rm_eo = cur_idx;
-           }
-       }
-    }
-}
-
-/* This function checks the STATE_LOG from the SCTX->last_str_idx to 0
-   and sift the nodes in each states according to the following rules.
-   Updated state_log will be wrote to STATE_LOG.
-
-   Rules: We throw away the Node `a' in the STATE_LOG[STR_IDX] if...
-     1. When STR_IDX == MATCH_LAST(the last index in the state_log):
-       If `a' isn't the LAST_NODE and `a' can't epsilon transit to
-       the LAST_NODE, we throw away the node `a'.
-     2. When 0 <= STR_IDX < MATCH_LAST and `a' accepts
-       string `s' and transit to `b':
-       i. If 'b' isn't in the STATE_LOG[STR_IDX+strlen('s')], we throw
-          away the node `a'.
-       ii. If 'b' is in the STATE_LOG[STR_IDX+strlen('s')] but 'b' is
-           thrown away, we throw away the node `a'.
-     3. When 0 <= STR_IDX < MATCH_LAST and 'a' epsilon transit to 'b':
-       i. If 'b' isn't in the STATE_LOG[STR_IDX], we throw away the
-          node `a'.
-       ii. If 'b' is in the STATE_LOG[STR_IDX] but 'b' is thrown away,
-           we throw away the node `a'.  */
-
-#define STATE_NODE_CONTAINS(state,node) \
-  ((state) != NULL && re_node_set_contains (&(state)->nodes, node))
-
-static reg_errcode_t
-internal_function
-sift_states_backward (const re_match_context_t *mctx, re_sift_context_t *sctx)
-{
-  reg_errcode_t err;
-  int null_cnt = 0;
-  Idx str_idx = sctx->last_str_idx;
-  re_node_set cur_dest;
-
-#ifdef DEBUG
-  assert (mctx->state_log != NULL && mctx->state_log[str_idx] != NULL);
-#endif
-
-  /* Build sifted state_log[str_idx].  It has the nodes which can epsilon
-     transit to the last_node and the last_node itself.  */
-  err = re_node_set_init_1 (&cur_dest, sctx->last_node);
-  if (BE (err != REG_NOERROR, 0))
-    return err;
-  err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest);
-  if (BE (err != REG_NOERROR, 0))
-    goto free_return;
-
-  /* Then check each states in the state_log.  */
-  while (str_idx > 0)
-    {
-      /* Update counters.  */
-      null_cnt = (sctx->sifted_states[str_idx] == NULL) ? null_cnt + 1 : 0;
-      if (null_cnt > mctx->max_mb_elem_len)
-       {
-         memset (sctx->sifted_states, '\0',
-                 sizeof (re_dfastate_t *) * str_idx);
-         re_node_set_free (&cur_dest);
-         return REG_NOERROR;
-       }
-      re_node_set_empty (&cur_dest);
-      --str_idx;
-
-      if (mctx->state_log[str_idx])
-       {
-         err = build_sifted_states (mctx, sctx, str_idx, &cur_dest);
-          if (BE (err != REG_NOERROR, 0))
-           goto free_return;
-       }
-
-      /* Add all the nodes which satisfy the following conditions:
-        - It can epsilon transit to a node in CUR_DEST.
-        - It is in CUR_SRC.
-        And update state_log.  */
-      err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest);
-      if (BE (err != REG_NOERROR, 0))
-       goto free_return;
-    }
-  err = REG_NOERROR;
- free_return:
-  re_node_set_free (&cur_dest);
-  return err;
-}
-
-static reg_errcode_t
-internal_function
-build_sifted_states (const re_match_context_t *mctx, re_sift_context_t *sctx,
-                    Idx str_idx, re_node_set *cur_dest)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  const re_node_set *cur_src = &mctx->state_log[str_idx]->non_eps_nodes;
-  Idx i;
-
-  /* Then build the next sifted state.
-     We build the next sifted state on `cur_dest', and update
-     `sifted_states[str_idx]' with `cur_dest'.
-     Note:
-     `cur_dest' is the sifted state from `state_log[str_idx + 1]'.
-     `cur_src' points the node_set of the old `state_log[str_idx]'
-     (with the epsilon nodes pre-filtered out).  */
-  for (i = 0; i < cur_src->nelem; i++)
-    {
-      Idx prev_node = cur_src->elems[i];
-      int naccepted = 0;
-      bool ok;
-
-#ifdef DEBUG
-      re_token_type_t type = dfa->nodes[prev_node].type;
-      assert (!IS_EPSILON_NODE (type));
-#endif
-#ifdef RE_ENABLE_I18N
-      /* If the node may accept `multi byte'.  */
-      if (dfa->nodes[prev_node].accept_mb)
-       naccepted = sift_states_iter_mb (mctx, sctx, prev_node,
-                                        str_idx, sctx->last_str_idx);
-#endif /* RE_ENABLE_I18N */
-
-      /* We don't check backreferences here.
-        See update_cur_sifted_state().  */
-      if (!naccepted
-         && check_node_accept (mctx, dfa->nodes + prev_node, str_idx)
-         && STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + 1],
-                                 dfa->nexts[prev_node]))
-       naccepted = 1;
-
-      if (naccepted == 0)
-       continue;
-
-      if (sctx->limits.nelem)
-       {
-         Idx to_idx = str_idx + naccepted;
-         if (check_dst_limits (mctx, &sctx->limits,
-                               dfa->nexts[prev_node], to_idx,
-                               prev_node, str_idx))
-           continue;
-       }
-      ok = re_node_set_insert (cur_dest, prev_node);
-      if (BE (! ok, 0))
-       return REG_ESPACE;
-    }
-
-  return REG_NOERROR;
-}
-
-/* Helper functions.  */
-
-static reg_errcode_t
-internal_function
-clean_state_log_if_needed (re_match_context_t *mctx, Idx next_state_log_idx)
-{
-  Idx top = mctx->state_log_top;
-
-  if (next_state_log_idx >= mctx->input.bufs_len
-      || (next_state_log_idx >= mctx->input.valid_len
-         && mctx->input.valid_len < mctx->input.len))
-    {
-      reg_errcode_t err;
-      err = extend_buffers (mctx);
-      if (BE (err != REG_NOERROR, 0))
-       return err;
-    }
-
-  if (top < next_state_log_idx)
-    {
-      memset (mctx->state_log + top + 1, '\0',
-             sizeof (re_dfastate_t *) * (next_state_log_idx - top));
-      mctx->state_log_top = next_state_log_idx;
-    }
-  return REG_NOERROR;
-}
-
-static reg_errcode_t
-internal_function
-merge_state_array (const re_dfa_t *dfa, re_dfastate_t **dst,
-                  re_dfastate_t **src, Idx num)
-{
-  Idx st_idx;
-  reg_errcode_t err;
-  for (st_idx = 0; st_idx < num; ++st_idx)
-    {
-      if (dst[st_idx] == NULL)
-       dst[st_idx] = src[st_idx];
-      else if (src[st_idx] != NULL)
-       {
-         re_node_set merged_set;
-         err = re_node_set_init_union (&merged_set, &dst[st_idx]->nodes,
-                                       &src[st_idx]->nodes);
-         if (BE (err != REG_NOERROR, 0))
-           return err;
-         dst[st_idx] = re_acquire_state (&err, dfa, &merged_set);
-         re_node_set_free (&merged_set);
-         if (BE (err != REG_NOERROR, 0))
-           return err;
-       }
-    }
-  return REG_NOERROR;
-}
-
-static reg_errcode_t
-internal_function
-update_cur_sifted_state (const re_match_context_t *mctx,
-                        re_sift_context_t *sctx, Idx str_idx,
-                        re_node_set *dest_nodes)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  reg_errcode_t err = REG_NOERROR;
-  const re_node_set *candidates;
-  candidates = ((mctx->state_log[str_idx] == NULL) ? NULL
-               : &mctx->state_log[str_idx]->nodes);
-
-  if (dest_nodes->nelem == 0)
-    sctx->sifted_states[str_idx] = NULL;
-  else
-    {
-      if (candidates)
-       {
-         /* At first, add the nodes which can epsilon transit to a node in
-            DEST_NODE.  */
-         err = add_epsilon_src_nodes (dfa, dest_nodes, candidates);
-         if (BE (err != REG_NOERROR, 0))
-           return err;
-
-         /* Then, check the limitations in the current sift_context.  */
-         if (sctx->limits.nelem)
-           {
-             err = check_subexp_limits (dfa, dest_nodes, candidates, &sctx->limits,
-                                        mctx->bkref_ents, str_idx);
-             if (BE (err != REG_NOERROR, 0))
-               return err;
-           }
-       }
-
-      sctx->sifted_states[str_idx] = re_acquire_state (&err, dfa, dest_nodes);
-      if (BE (err != REG_NOERROR, 0))
-       return err;
-    }
-
-  if (candidates && mctx->state_log[str_idx]->has_backref)
-    {
-      err = sift_states_bkref (mctx, sctx, str_idx, candidates);
-      if (BE (err != REG_NOERROR, 0))
-       return err;
-    }
-  return REG_NOERROR;
-}
-
-static reg_errcode_t
-internal_function
-add_epsilon_src_nodes (const re_dfa_t *dfa, re_node_set *dest_nodes,
-                      const re_node_set *candidates)
-{
-  reg_errcode_t err = REG_NOERROR;
-  Idx i;
-
-  re_dfastate_t *state = re_acquire_state (&err, dfa, dest_nodes);
-  if (BE (err != REG_NOERROR, 0))
-    return err;
-
-  if (!state->inveclosure.alloc)
-    {
-      err = re_node_set_alloc (&state->inveclosure, dest_nodes->nelem);
-      if (BE (err != REG_NOERROR, 0))
-        return REG_ESPACE;
-      for (i = 0; i < dest_nodes->nelem; i++)
-        re_node_set_merge (&state->inveclosure,
-                          dfa->inveclosures + dest_nodes->elems[i]);
-    }
-  return re_node_set_add_intersect (dest_nodes, candidates,
-                                   &state->inveclosure);
-}
-
-static reg_errcode_t
-internal_function
-sub_epsilon_src_nodes (const re_dfa_t *dfa, Idx node, re_node_set *dest_nodes,
-                      const re_node_set *candidates)
-{
-    Idx ecl_idx;
-    reg_errcode_t err;
-    re_node_set *inv_eclosure = dfa->inveclosures + node;
-    re_node_set except_nodes;
-    re_node_set_init_empty (&except_nodes);
-    for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx)
-      {
-       Idx cur_node = inv_eclosure->elems[ecl_idx];
-       if (cur_node == node)
-         continue;
-       if (IS_EPSILON_NODE (dfa->nodes[cur_node].type))
-         {
-           Idx edst1 = dfa->edests[cur_node].elems[0];
-           Idx edst2 = ((dfa->edests[cur_node].nelem > 1)
-                        ? dfa->edests[cur_node].elems[1] : REG_MISSING);
-           if ((!re_node_set_contains (inv_eclosure, edst1)
-                && re_node_set_contains (dest_nodes, edst1))
-               || (REG_VALID_NONZERO_INDEX (edst2)
-                   && !re_node_set_contains (inv_eclosure, edst2)
-                   && re_node_set_contains (dest_nodes, edst2)))
-             {
-               err = re_node_set_add_intersect (&except_nodes, candidates,
-                                                dfa->inveclosures + cur_node);
-               if (BE (err != REG_NOERROR, 0))
-                 {
-                   re_node_set_free (&except_nodes);
-                   return err;
-                 }
-             }
-         }
-      }
-    for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx)
-      {
-       Idx cur_node = inv_eclosure->elems[ecl_idx];
-       if (!re_node_set_contains (&except_nodes, cur_node))
-         {
-           Idx idx = re_node_set_contains (dest_nodes, cur_node) - 1;
-           re_node_set_remove_at (dest_nodes, idx);
-         }
-      }
-    re_node_set_free (&except_nodes);
-    return REG_NOERROR;
-}
-
-static bool
-internal_function
-check_dst_limits (const re_match_context_t *mctx, const re_node_set *limits,
-                 Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  Idx lim_idx, src_pos, dst_pos;
-
-  Idx dst_bkref_idx = search_cur_bkref_entry (mctx, dst_idx);
-  Idx src_bkref_idx = search_cur_bkref_entry (mctx, src_idx);
-  for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx)
-    {
-      Idx subexp_idx;
-      struct re_backref_cache_entry *ent;
-      ent = mctx->bkref_ents + limits->elems[lim_idx];
-      subexp_idx = dfa->nodes[ent->node].opr.idx;
-
-      dst_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx],
-                                          subexp_idx, dst_node, dst_idx,
-                                          dst_bkref_idx);
-      src_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx],
-                                          subexp_idx, src_node, src_idx,
-                                          src_bkref_idx);
-
-      /* In case of:
-        <src> <dst> ( <subexp> )
-        ( <subexp> ) <src> <dst>
-        ( <subexp1> <src> <subexp2> <dst> <subexp3> )  */
-      if (src_pos == dst_pos)
-       continue; /* This is unrelated limitation.  */
-      else
-       return true;
-    }
-  return false;
-}
-
-static int
-internal_function
-check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, int boundaries,
-                            Idx subexp_idx, Idx from_node, Idx bkref_idx)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  const re_node_set *eclosures = dfa->eclosures + from_node;
-  Idx node_idx;
-
-  /* Else, we are on the boundary: examine the nodes on the epsilon
-     closure.  */
-  for (node_idx = 0; node_idx < eclosures->nelem; ++node_idx)
-    {
-      Idx node = eclosures->elems[node_idx];
-      switch (dfa->nodes[node].type)
-       {
-       case OP_BACK_REF:
-         if (bkref_idx != REG_MISSING)
-           {
-             struct re_backref_cache_entry *ent = mctx->bkref_ents + bkref_idx;
-             do
-               {
-                 Idx dst;
-                 int cpos;
-
-                 if (ent->node != node)
-                   continue;
-
-                 if (subexp_idx < BITSET_WORD_BITS
-                     && !(ent->eps_reachable_subexps_map
-                          & ((bitset_word_t) 1 << subexp_idx)))
-                   continue;
-
-                 /* Recurse trying to reach the OP_OPEN_SUBEXP and
-                    OP_CLOSE_SUBEXP cases below.  But, if the
-                    destination node is the same node as the source
-                    node, don't recurse because it would cause an
-                    infinite loop: a regex that exhibits this behavior
-                    is ()\1*\1*  */
-                 dst = dfa->edests[node].elems[0];
-                 if (dst == from_node)
-                   {
-                     if (boundaries & 1)
-                       return -1;
-                     else /* if (boundaries & 2) */
-                       return 0;
-                   }
-
-                 cpos =
-                   check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx,
-                                                dst, bkref_idx);
-                 if (cpos == -1 /* && (boundaries & 1) */)
-                   return -1;
-                 if (cpos == 0 && (boundaries & 2))
-                   return 0;
-
-                 if (subexp_idx < BITSET_WORD_BITS)
-                   ent->eps_reachable_subexps_map
-                     &= ~((bitset_word_t) 1 << subexp_idx);
-               }
-             while (ent++->more);
-           }
-         break;
-
-       case OP_OPEN_SUBEXP:
-         if ((boundaries & 1) && subexp_idx == dfa->nodes[node].opr.idx)
-           return -1;
-         break;
-
-       case OP_CLOSE_SUBEXP:
-         if ((boundaries & 2) && subexp_idx == dfa->nodes[node].opr.idx)
-           return 0;
-         break;
-
-       default:
-           break;
-       }
-    }
-
-  return (boundaries & 2) ? 1 : 0;
-}
-
-static int
-internal_function
-check_dst_limits_calc_pos (const re_match_context_t *mctx, Idx limit,
-                          Idx subexp_idx, Idx from_node, Idx str_idx,
-                          Idx bkref_idx)
-{
-  struct re_backref_cache_entry *lim = mctx->bkref_ents + limit;
-  int boundaries;
-
-  /* If we are outside the range of the subexpression, return -1 or 1.  */
-  if (str_idx < lim->subexp_from)
-    return -1;
-
-  if (lim->subexp_to < str_idx)
-    return 1;
-
-  /* If we are within the subexpression, return 0.  */
-  boundaries = (str_idx == lim->subexp_from);
-  boundaries |= (str_idx == lim->subexp_to) << 1;
-  if (boundaries == 0)
-    return 0;
-
-  /* Else, examine epsilon closure.  */
-  return check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx,
-                                     from_node, bkref_idx);
-}
-
-/* Check the limitations of sub expressions LIMITS, and remove the nodes
-   which are against limitations from DEST_NODES. */
-
-static reg_errcode_t
-internal_function
-check_subexp_limits (const re_dfa_t *dfa, re_node_set *dest_nodes,
-                    const re_node_set *candidates, re_node_set *limits,
-                    struct re_backref_cache_entry *bkref_ents, Idx str_idx)
-{
-  reg_errcode_t err;
-  Idx node_idx, lim_idx;
-
-  for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx)
-    {
-      Idx subexp_idx;
-      struct re_backref_cache_entry *ent;
-      ent = bkref_ents + limits->elems[lim_idx];
-
-      if (str_idx <= ent->subexp_from || ent->str_idx < str_idx)
-       continue; /* This is unrelated limitation.  */
-
-      subexp_idx = dfa->nodes[ent->node].opr.idx;
-      if (ent->subexp_to == str_idx)
-       {
-         Idx ops_node = REG_MISSING;
-         Idx cls_node = REG_MISSING;
-         for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx)
-           {
-             Idx node = dest_nodes->elems[node_idx];
-             re_token_type_t type = dfa->nodes[node].type;
-             if (type == OP_OPEN_SUBEXP
-                 && subexp_idx == dfa->nodes[node].opr.idx)
-               ops_node = node;
-             else if (type == OP_CLOSE_SUBEXP
-                      && subexp_idx == dfa->nodes[node].opr.idx)
-               cls_node = node;
-           }
-
-         /* Check the limitation of the open subexpression.  */
-         /* Note that (ent->subexp_to = str_idx != ent->subexp_from).  */
-         if (REG_VALID_INDEX (ops_node))
-           {
-             err = sub_epsilon_src_nodes (dfa, ops_node, dest_nodes,
-                                          candidates);
-             if (BE (err != REG_NOERROR, 0))
-               return err;
-           }
-
-         /* Check the limitation of the close subexpression.  */
-         if (REG_VALID_INDEX (cls_node))
-           for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx)
-             {
-               Idx node = dest_nodes->elems[node_idx];
-               if (!re_node_set_contains (dfa->inveclosures + node,
-                                          cls_node)
-                   && !re_node_set_contains (dfa->eclosures + node,
-                                             cls_node))
-                 {
-                   /* It is against this limitation.
-                      Remove it form the current sifted state.  */
-                   err = sub_epsilon_src_nodes (dfa, node, dest_nodes,
-                                                candidates);
-                   if (BE (err != REG_NOERROR, 0))
-                     return err;
-                   --node_idx;
-                 }
-             }
-       }
-      else /* (ent->subexp_to != str_idx)  */
-       {
-         for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx)
-           {
-             Idx node = dest_nodes->elems[node_idx];
-             re_token_type_t type = dfa->nodes[node].type;
-             if (type == OP_CLOSE_SUBEXP || type == OP_OPEN_SUBEXP)
-               {
-                 if (subexp_idx != dfa->nodes[node].opr.idx)
-                   continue;
-                 /* It is against this limitation.
-                    Remove it form the current sifted state.  */
-                 err = sub_epsilon_src_nodes (dfa, node, dest_nodes,
-                                              candidates);
-                 if (BE (err != REG_NOERROR, 0))
-                   return err;
-               }
-           }
-       }
-    }
-  return REG_NOERROR;
-}
-
-static reg_errcode_t
-internal_function
-sift_states_bkref (const re_match_context_t *mctx, re_sift_context_t *sctx,
-                  Idx str_idx, const re_node_set *candidates)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  reg_errcode_t err;
-  Idx node_idx, node;
-  re_sift_context_t local_sctx;
-  Idx first_idx = search_cur_bkref_entry (mctx, str_idx);
-
-  if (first_idx == REG_MISSING)
-    return REG_NOERROR;
-
-  local_sctx.sifted_states = NULL; /* Mark that it hasn't been initialized.  */
-
-  for (node_idx = 0; node_idx < candidates->nelem; ++node_idx)
-    {
-      Idx enabled_idx;
-      re_token_type_t type;
-      struct re_backref_cache_entry *entry;
-      node = candidates->elems[node_idx];
-      type = dfa->nodes[node].type;
-      /* Avoid infinite loop for the REs like "()\1+".  */
-      if (node == sctx->last_node && str_idx == sctx->last_str_idx)
-       continue;
-      if (type != OP_BACK_REF)
-       continue;
-
-      entry = mctx->bkref_ents + first_idx;
-      enabled_idx = first_idx;
-      do
-       {
-         Idx subexp_len;
-         Idx to_idx;
-         Idx dst_node;
-         bool ok;
-         re_dfastate_t *cur_state;
-
-         if (entry->node != node)
-           continue;
-         subexp_len = entry->subexp_to - entry->subexp_from;
-         to_idx = str_idx + subexp_len;
-         dst_node = (subexp_len ? dfa->nexts[node]
-                     : dfa->edests[node].elems[0]);
-
-         if (to_idx > sctx->last_str_idx
-             || sctx->sifted_states[to_idx] == NULL
-             || !STATE_NODE_CONTAINS (sctx->sifted_states[to_idx], dst_node)
-             || check_dst_limits (mctx, &sctx->limits, node,
-                                  str_idx, dst_node, to_idx))
-           continue;
-
-         if (local_sctx.sifted_states == NULL)
-           {
-             local_sctx = *sctx;
-             err = re_node_set_init_copy (&local_sctx.limits, &sctx->limits);
-             if (BE (err != REG_NOERROR, 0))
-               goto free_return;
-           }
-         local_sctx.last_node = node;
-         local_sctx.last_str_idx = str_idx;
-         ok = re_node_set_insert (&local_sctx.limits, enabled_idx);
-         if (BE (! ok, 0))
-           {
-             err = REG_ESPACE;
-             goto free_return;
-           }
-         cur_state = local_sctx.sifted_states[str_idx];
-         err = sift_states_backward (mctx, &local_sctx);
-         if (BE (err != REG_NOERROR, 0))
-           goto free_return;
-         if (sctx->limited_states != NULL)
-           {
-             err = merge_state_array (dfa, sctx->limited_states,
-                                      local_sctx.sifted_states,
-                                      str_idx + 1);
-             if (BE (err != REG_NOERROR, 0))
-               goto free_return;
-           }
-         local_sctx.sifted_states[str_idx] = cur_state;
-         re_node_set_remove (&local_sctx.limits, enabled_idx);
-
-         /* mctx->bkref_ents may have changed, reload the pointer.  */
-          entry = mctx->bkref_ents + enabled_idx;
-       }
-      while (enabled_idx++, entry++->more);
-    }
-  err = REG_NOERROR;
- free_return:
-  if (local_sctx.sifted_states != NULL)
-    {
-      re_node_set_free (&local_sctx.limits);
-    }
-
-  return err;
-}
-
-
-#ifdef RE_ENABLE_I18N
-static int
-internal_function
-sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx,
-                    Idx node_idx, Idx str_idx, Idx max_str_idx)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  int naccepted;
-  /* Check the node can accept `multi byte'.  */
-  naccepted = check_node_accept_bytes (dfa, node_idx, &mctx->input, str_idx);
-  if (naccepted > 0 && str_idx + naccepted <= max_str_idx &&
-      !STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + naccepted],
-                           dfa->nexts[node_idx]))
-    /* The node can't accept the `multi byte', or the
-       destination was already thrown away, then the node
-       could't accept the current input `multi byte'.   */
-    naccepted = 0;
-  /* Otherwise, it is sure that the node could accept
-     `naccepted' bytes input.  */
-  return naccepted;
-}
-#endif /* RE_ENABLE_I18N */
-
-\f
-/* Functions for state transition.  */
-
-/* Return the next state to which the current state STATE will transit by
-   accepting the current input byte, and update STATE_LOG if necessary.
-   If STATE can accept a multibyte char/collating element/back reference
-   update the destination of STATE_LOG.  */
-
-static re_dfastate_t *
-internal_function
-transit_state (reg_errcode_t *err, re_match_context_t *mctx,
-              re_dfastate_t *state)
-{
-  re_dfastate_t **trtable;
-  unsigned char ch;
-
-#ifdef RE_ENABLE_I18N
-  /* If the current state can accept multibyte.  */
-  if (BE (state->accept_mb, 0))
-    {
-      *err = transit_state_mb (mctx, state);
-      if (BE (*err != REG_NOERROR, 0))
-       return NULL;
-    }
-#endif /* RE_ENABLE_I18N */
-
-  /* Then decide the next state with the single byte.  */
-#if 0
-  if (0)
-    /* don't use transition table  */
-    return transit_state_sb (err, mctx, state);
-#endif
-
-  /* Use transition table  */
-  ch = re_string_fetch_byte (&mctx->input);
-  for (;;)
-    {
-      trtable = state->trtable;
-      if (BE (trtable != NULL, 1))
-       return trtable[ch];
-
-      trtable = state->word_trtable;
-      if (BE (trtable != NULL, 1))
-        {
-         unsigned int context;
-         context
-           = re_string_context_at (&mctx->input,
-                                   re_string_cur_idx (&mctx->input) - 1,
-                                   mctx->eflags);
-         if (IS_WORD_CONTEXT (context))
-           return trtable[ch + SBC_MAX];
-         else
-           return trtable[ch];
-       }
-
-      if (!build_trtable (mctx->dfa, state))
-       {
-         *err = REG_ESPACE;
-         return NULL;
-       }
-
-      /* Retry, we now have a transition table.  */
-    }
-}
-
-/* Update the state_log if we need */
-static re_dfastate_t *
-internal_function
-merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx,
-                     re_dfastate_t *next_state)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  Idx cur_idx = re_string_cur_idx (&mctx->input);
-
-  if (cur_idx > mctx->state_log_top)
-    {
-      mctx->state_log[cur_idx] = next_state;
-      mctx->state_log_top = cur_idx;
-    }
-  else if (mctx->state_log[cur_idx] == 0)
-    {
-      mctx->state_log[cur_idx] = next_state;
-    }
-  else
-    {
-      re_dfastate_t *pstate;
-      unsigned int context;
-      re_node_set next_nodes, *log_nodes, *table_nodes = NULL;
-      /* If (state_log[cur_idx] != 0), it implies that cur_idx is
-         the destination of a multibyte char/collating element/
-         back reference.  Then the next state is the union set of
-         these destinations and the results of the transition table.  */
-      pstate = mctx->state_log[cur_idx];
-      log_nodes = pstate->entrance_nodes;
-      if (next_state != NULL)
-        {
-          table_nodes = next_state->entrance_nodes;
-          *err = re_node_set_init_union (&next_nodes, table_nodes,
-                                            log_nodes);
-          if (BE (*err != REG_NOERROR, 0))
-           return NULL;
-        }
-      else
-        next_nodes = *log_nodes;
-      /* Note: We already add the nodes of the initial state,
-        then we don't need to add them here.  */
-
-      context = re_string_context_at (&mctx->input,
-                                     re_string_cur_idx (&mctx->input) - 1,
-                                     mctx->eflags);
-      next_state = mctx->state_log[cur_idx]
-        = re_acquire_state_context (err, dfa, &next_nodes, context);
-      /* We don't need to check errors here, since the return value of
-         this function is next_state and ERR is already set.  */
-
-      if (table_nodes != NULL)
-        re_node_set_free (&next_nodes);
-    }
-
-  if (BE (dfa->nbackref, 0) && next_state != NULL)
-    {
-      /* Check OP_OPEN_SUBEXP in the current state in case that we use them
-        later.  We must check them here, since the back references in the
-        next state might use them.  */
-      *err = check_subexp_matching_top (mctx, &next_state->nodes,
-                                       cur_idx);
-      if (BE (*err != REG_NOERROR, 0))
-       return NULL;
-
-      /* If the next state has back references.  */
-      if (next_state->has_backref)
-       {
-         *err = transit_state_bkref (mctx, &next_state->nodes);
-         if (BE (*err != REG_NOERROR, 0))
-           return NULL;
-         next_state = mctx->state_log[cur_idx];
-       }
-    }
-
-  return next_state;
-}
-
-/* Skip bytes in the input that correspond to part of a
-   multi-byte match, then look in the log for a state
-   from which to restart matching.  */
-static re_dfastate_t *
-internal_function
-find_recover_state (reg_errcode_t *err, re_match_context_t *mctx)
-{
-  re_dfastate_t *cur_state;
-  do
-    {
-      Idx max = mctx->state_log_top;
-      Idx cur_str_idx = re_string_cur_idx (&mctx->input);
-
-      do
-       {
-          if (++cur_str_idx > max)
-            return NULL;
-          re_string_skip_bytes (&mctx->input, 1);
-       }
-      while (mctx->state_log[cur_str_idx] == NULL);
-
-      cur_state = merge_state_with_log (err, mctx, NULL);
-    }
-  while (*err == REG_NOERROR && cur_state == NULL);
-  return cur_state;
-}
-
-/* Helper functions for transit_state.  */
-
-/* From the node set CUR_NODES, pick up the nodes whose types are
-   OP_OPEN_SUBEXP and which have corresponding back references in the regular
-   expression. And register them to use them later for evaluating the
-   correspoding back references.  */
-
-static reg_errcode_t
-internal_function
-check_subexp_matching_top (re_match_context_t *mctx, re_node_set *cur_nodes,
-                          Idx str_idx)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  Idx node_idx;
-  reg_errcode_t err;
-
-  /* TODO: This isn't efficient.
-          Because there might be more than one nodes whose types are
-          OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all
-          nodes.
-          E.g. RE: (a){2}  */
-  for (node_idx = 0; node_idx < cur_nodes->nelem; ++node_idx)
-    {
-      Idx node = cur_nodes->elems[node_idx];
-      if (dfa->nodes[node].type == OP_OPEN_SUBEXP
-         && dfa->nodes[node].opr.idx < BITSET_WORD_BITS
-         && (dfa->used_bkref_map
-             & ((bitset_word_t) 1 << dfa->nodes[node].opr.idx)))
-       {
-         err = match_ctx_add_subtop (mctx, node, str_idx);
-         if (BE (err != REG_NOERROR, 0))
-           return err;
-       }
-    }
-  return REG_NOERROR;
-}
-
-#if 0
-/* Return the next state to which the current state STATE will transit by
-   accepting the current input byte.  */
-
-static re_dfastate_t *
-transit_state_sb (reg_errcode_t *err, re_match_context_t *mctx,
-                 re_dfastate_t *state)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  re_node_set next_nodes;
-  re_dfastate_t *next_state;
-  Idx node_cnt, cur_str_idx = re_string_cur_idx (&mctx->input);
-  unsigned int context;
-
-  *err = re_node_set_alloc (&next_nodes, state->nodes.nelem + 1);
-  if (BE (*err != REG_NOERROR, 0))
-    return NULL;
-  for (node_cnt = 0; node_cnt < state->nodes.nelem; ++node_cnt)
-    {
-      Idx cur_node = state->nodes.elems[node_cnt];
-      if (check_node_accept (mctx, dfa->nodes + cur_node, cur_str_idx))
-       {
-         *err = re_node_set_merge (&next_nodes,
-                                   dfa->eclosures + dfa->nexts[cur_node]);
-         if (BE (*err != REG_NOERROR, 0))
-           {
-             re_node_set_free (&next_nodes);
-             return NULL;
-           }
-       }
-    }
-  context = re_string_context_at (&mctx->input, cur_str_idx, mctx->eflags);
-  next_state = re_acquire_state_context (err, dfa, &next_nodes, context);
-  /* We don't need to check errors here, since the return value of
-     this function is next_state and ERR is already set.  */
-
-  re_node_set_free (&next_nodes);
-  re_string_skip_bytes (&mctx->input, 1);
-  return next_state;
-}
-#endif
-
-#ifdef RE_ENABLE_I18N
-static reg_errcode_t
-internal_function
-transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  reg_errcode_t err;
-  Idx i;
-
-  for (i = 0; i < pstate->nodes.nelem; ++i)
-    {
-      re_node_set dest_nodes, *new_nodes;
-      Idx cur_node_idx = pstate->nodes.elems[i];
-      int naccepted;
-      Idx dest_idx;
-      unsigned int context;
-      re_dfastate_t *dest_state;
-
-      if (!dfa->nodes[cur_node_idx].accept_mb)
-        continue;
-
-      if (dfa->nodes[cur_node_idx].constraint)
-       {
-         context = re_string_context_at (&mctx->input,
-                                         re_string_cur_idx (&mctx->input),
-                                         mctx->eflags);
-         if (NOT_SATISFY_NEXT_CONSTRAINT (dfa->nodes[cur_node_idx].constraint,
-                                          context))
-           continue;
-       }
-
-      /* How many bytes the node can accept?  */
-      naccepted = check_node_accept_bytes (dfa, cur_node_idx, &mctx->input,
-                                          re_string_cur_idx (&mctx->input));
-      if (naccepted == 0)
-       continue;
-
-      /* The node can accepts `naccepted' bytes.  */
-      dest_idx = re_string_cur_idx (&mctx->input) + naccepted;
-      mctx->max_mb_elem_len = ((mctx->max_mb_elem_len < naccepted) ? naccepted
-                              : mctx->max_mb_elem_len);
-      err = clean_state_log_if_needed (mctx, dest_idx);
-      if (BE (err != REG_NOERROR, 0))
-       return err;
-#ifdef DEBUG
-      assert (dfa->nexts[cur_node_idx] != REG_MISSING);
-#endif
-      new_nodes = dfa->eclosures + dfa->nexts[cur_node_idx];
-
-      dest_state = mctx->state_log[dest_idx];
-      if (dest_state == NULL)
-       dest_nodes = *new_nodes;
-      else
-       {
-         err = re_node_set_init_union (&dest_nodes,
-                                       dest_state->entrance_nodes, new_nodes);
-         if (BE (err != REG_NOERROR, 0))
-           return err;
-       }
-      context = re_string_context_at (&mctx->input, dest_idx - 1,
-                                     mctx->eflags);
-      mctx->state_log[dest_idx]
-       = re_acquire_state_context (&err, dfa, &dest_nodes, context);
-      if (dest_state != NULL)
-       re_node_set_free (&dest_nodes);
-      if (BE (mctx->state_log[dest_idx] == NULL && err != REG_NOERROR, 0))
-       return err;
-    }
-  return REG_NOERROR;
-}
-#endif /* RE_ENABLE_I18N */
-
-static reg_errcode_t
-internal_function
-transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  reg_errcode_t err;
-  Idx i;
-  Idx cur_str_idx = re_string_cur_idx (&mctx->input);
-
-  for (i = 0; i < nodes->nelem; ++i)
-    {
-      Idx dest_str_idx, prev_nelem, bkc_idx;
-      Idx node_idx = nodes->elems[i];
-      unsigned int context;
-      const re_token_t *node = dfa->nodes + node_idx;
-      re_node_set *new_dest_nodes;
-
-      /* Check whether `node' is a backreference or not.  */
-      if (node->type != OP_BACK_REF)
-       continue;
-
-      if (node->constraint)
-       {
-         context = re_string_context_at (&mctx->input, cur_str_idx,
-                                         mctx->eflags);
-         if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context))
-           continue;
-       }
-
-      /* `node' is a backreference.
-        Check the substring which the substring matched.  */
-      bkc_idx = mctx->nbkref_ents;
-      err = get_subexp (mctx, node_idx, cur_str_idx);
-      if (BE (err != REG_NOERROR, 0))
-       goto free_return;
-
-      /* And add the epsilon closures (which is `new_dest_nodes') of
-        the backreference to appropriate state_log.  */
-#ifdef DEBUG
-      assert (dfa->nexts[node_idx] != REG_MISSING);
-#endif
-      for (; bkc_idx < mctx->nbkref_ents; ++bkc_idx)
-       {
-         Idx subexp_len;
-         re_dfastate_t *dest_state;
-         struct re_backref_cache_entry *bkref_ent;
-         bkref_ent = mctx->bkref_ents + bkc_idx;
-         if (bkref_ent->node != node_idx || bkref_ent->str_idx != cur_str_idx)
-           continue;
-         subexp_len = bkref_ent->subexp_to - bkref_ent->subexp_from;
-         new_dest_nodes = (subexp_len == 0
-                           ? dfa->eclosures + dfa->edests[node_idx].elems[0]
-                           : dfa->eclosures + dfa->nexts[node_idx]);
-         dest_str_idx = (cur_str_idx + bkref_ent->subexp_to
-                         - bkref_ent->subexp_from);
-         context = re_string_context_at (&mctx->input, dest_str_idx - 1,
-                                         mctx->eflags);
-         dest_state = mctx->state_log[dest_str_idx];
-         prev_nelem = ((mctx->state_log[cur_str_idx] == NULL) ? 0
-                       : mctx->state_log[cur_str_idx]->nodes.nelem);
-         /* Add `new_dest_node' to state_log.  */
-         if (dest_state == NULL)
-           {
-             mctx->state_log[dest_str_idx]
-               = re_acquire_state_context (&err, dfa, new_dest_nodes,
-                                           context);
-             if (BE (mctx->state_log[dest_str_idx] == NULL
-                     && err != REG_NOERROR, 0))
-               goto free_return;
-           }
-         else
-           {
-             re_node_set dest_nodes;
-             err = re_node_set_init_union (&dest_nodes,
-                                           dest_state->entrance_nodes,
-                                           new_dest_nodes);
-             if (BE (err != REG_NOERROR, 0))
-               {
-                 re_node_set_free (&dest_nodes);
-                 goto free_return;
-               }
-             mctx->state_log[dest_str_idx]
-               = re_acquire_state_context (&err, dfa, &dest_nodes, context);
-             re_node_set_free (&dest_nodes);
-             if (BE (mctx->state_log[dest_str_idx] == NULL
-                     && err != REG_NOERROR, 0))
-               goto free_return;
-           }
-         /* We need to check recursively if the backreference can epsilon
-            transit.  */
-         if (subexp_len == 0
-             && mctx->state_log[cur_str_idx]->nodes.nelem > prev_nelem)
-           {
-             err = check_subexp_matching_top (mctx, new_dest_nodes,
-                                              cur_str_idx);
-             if (BE (err != REG_NOERROR, 0))
-               goto free_return;
-             err = transit_state_bkref (mctx, new_dest_nodes);
-             if (BE (err != REG_NOERROR, 0))
-               goto free_return;
-           }
-       }
-    }
-  err = REG_NOERROR;
- free_return:
-  return err;
-}
-
-/* Enumerate all the candidates which the backreference BKREF_NODE can match
-   at BKREF_STR_IDX, and register them by match_ctx_add_entry().
-   Note that we might collect inappropriate candidates here.
-   However, the cost of checking them strictly here is too high, then we
-   delay these checking for prune_impossible_nodes().  */
-
-static reg_errcode_t
-internal_function
-get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  Idx subexp_num, sub_top_idx;
-  const char *buf = (const char *) re_string_get_buffer (&mctx->input);
-  /* Return if we have already checked BKREF_NODE at BKREF_STR_IDX.  */
-  Idx cache_idx = search_cur_bkref_entry (mctx, bkref_str_idx);
-  if (cache_idx != REG_MISSING)
-    {
-      const struct re_backref_cache_entry *entry
-       = mctx->bkref_ents + cache_idx;
-      do
-        if (entry->node == bkref_node)
-         return REG_NOERROR; /* We already checked it.  */
-      while (entry++->more);
-    }
-
-  subexp_num = dfa->nodes[bkref_node].opr.idx;
-
-  /* For each sub expression  */
-  for (sub_top_idx = 0; sub_top_idx < mctx->nsub_tops; ++sub_top_idx)
-    {
-      reg_errcode_t err;
-      re_sub_match_top_t *sub_top = mctx->sub_tops[sub_top_idx];
-      re_sub_match_last_t *sub_last;
-      Idx sub_last_idx, sl_str, bkref_str_off;
-
-      if (dfa->nodes[sub_top->node].opr.idx != subexp_num)
-       continue; /* It isn't related.  */
-
-      sl_str = sub_top->str_idx;
-      bkref_str_off = bkref_str_idx;
-      /* At first, check the last node of sub expressions we already
-        evaluated.  */
-      for (sub_last_idx = 0; sub_last_idx < sub_top->nlasts; ++sub_last_idx)
-       {
-         regoff_t sl_str_diff;
-         sub_last = sub_top->lasts[sub_last_idx];
-         sl_str_diff = sub_last->str_idx - sl_str;
-         /* The matched string by the sub expression match with the substring
-            at the back reference?  */
-         if (sl_str_diff > 0)
-           {
-             if (BE (bkref_str_off + sl_str_diff > mctx->input.valid_len, 0))
-               {
-                 /* Not enough chars for a successful match.  */
-                 if (bkref_str_off + sl_str_diff > mctx->input.len)
-                   break;
-
-                 err = clean_state_log_if_needed (mctx,
-                                                  bkref_str_off
-                                                  + sl_str_diff);
-                 if (BE (err != REG_NOERROR, 0))
-                   return err;
-                 buf = (const char *) re_string_get_buffer (&mctx->input);
-               }
-             if (memcmp (buf + bkref_str_off, buf + sl_str, sl_str_diff) != 0)
-               /* We don't need to search this sub expression any more.  */
-               break;
-           }
-         bkref_str_off += sl_str_diff;
-         sl_str += sl_str_diff;
-         err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node,
-                               bkref_str_idx);
-
-         /* Reload buf, since the preceding call might have reallocated
-            the buffer.  */
-         buf = (const char *) re_string_get_buffer (&mctx->input);
-
-         if (err == REG_NOMATCH)
-           continue;
-         if (BE (err != REG_NOERROR, 0))
-           return err;
-       }
-
-      if (sub_last_idx < sub_top->nlasts)
-       continue;
-      if (sub_last_idx > 0)
-       ++sl_str;
-      /* Then, search for the other last nodes of the sub expression.  */
-      for (; sl_str <= bkref_str_idx; ++sl_str)
-       {
-         Idx cls_node;
-         regoff_t sl_str_off;
-         const re_node_set *nodes;
-         sl_str_off = sl_str - sub_top->str_idx;
-         /* The matched string by the sub expression match with the substring
-            at the back reference?  */
-         if (sl_str_off > 0)
-           {
-             if (BE (bkref_str_off >= mctx->input.valid_len, 0))
-               {
-                 /* If we are at the end of the input, we cannot match.  */
-                 if (bkref_str_off >= mctx->input.len)
-                   break;
-
-                 err = extend_buffers (mctx);
-                 if (BE (err != REG_NOERROR, 0))
-                   return err;
-
-                 buf = (const char *) re_string_get_buffer (&mctx->input);
-               }
-             if (buf [bkref_str_off++] != buf[sl_str - 1])
-               break; /* We don't need to search this sub expression
-                         any more.  */
-           }
-         if (mctx->state_log[sl_str] == NULL)
-           continue;
-         /* Does this state have a ')' of the sub expression?  */
-         nodes = &mctx->state_log[sl_str]->nodes;
-         cls_node = find_subexp_node (dfa, nodes, subexp_num,
-                                      OP_CLOSE_SUBEXP);
-         if (cls_node == REG_MISSING)
-           continue; /* No.  */
-         if (sub_top->path == NULL)
-           {
-             sub_top->path = calloc (sizeof (state_array_t),
-                                     sl_str - sub_top->str_idx + 1);
-             if (sub_top->path == NULL)
-               return REG_ESPACE;
-           }
-         /* Can the OP_OPEN_SUBEXP node arrive the OP_CLOSE_SUBEXP node
-            in the current context?  */
-         err = check_arrival (mctx, sub_top->path, sub_top->node,
-                              sub_top->str_idx, cls_node, sl_str,
-                              OP_CLOSE_SUBEXP);
-         if (err == REG_NOMATCH)
-             continue;
-         if (BE (err != REG_NOERROR, 0))
-             return err;
-         sub_last = match_ctx_add_sublast (sub_top, cls_node, sl_str);
-         if (BE (sub_last == NULL, 0))
-           return REG_ESPACE;
-         err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node,
-                               bkref_str_idx);
-         if (err == REG_NOMATCH)
-           continue;
-       }
-    }
-  return REG_NOERROR;
-}
-
-/* Helper functions for get_subexp().  */
-
-/* Check SUB_LAST can arrive to the back reference BKREF_NODE at BKREF_STR.
-   If it can arrive, register the sub expression expressed with SUB_TOP
-   and SUB_LAST.  */
-
-static reg_errcode_t
-internal_function
-get_subexp_sub (re_match_context_t *mctx, const re_sub_match_top_t *sub_top,
-               re_sub_match_last_t *sub_last, Idx bkref_node, Idx bkref_str)
-{
-  reg_errcode_t err;
-  Idx to_idx;
-  /* Can the subexpression arrive the back reference?  */
-  err = check_arrival (mctx, &sub_last->path, sub_last->node,
-                      sub_last->str_idx, bkref_node, bkref_str,
-                      OP_OPEN_SUBEXP);
-  if (err != REG_NOERROR)
-    return err;
-  err = match_ctx_add_entry (mctx, bkref_node, bkref_str, sub_top->str_idx,
-                            sub_last->str_idx);
-  if (BE (err != REG_NOERROR, 0))
-    return err;
-  to_idx = bkref_str + sub_last->str_idx - sub_top->str_idx;
-  return clean_state_log_if_needed (mctx, to_idx);
-}
-
-/* Find the first node which is '(' or ')' and whose index is SUBEXP_IDX.
-   Search '(' if FL_OPEN, or search ')' otherwise.
-   TODO: This function isn't efficient...
-        Because there might be more than one nodes whose types are
-        OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all
-        nodes.
-        E.g. RE: (a){2}  */
-
-static Idx
-internal_function
-find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes,
-                 Idx subexp_idx, int type)
-{
-  Idx cls_idx;
-  for (cls_idx = 0; cls_idx < nodes->nelem; ++cls_idx)
-    {
-      Idx cls_node = nodes->elems[cls_idx];
-      const re_token_t *node = dfa->nodes + cls_node;
-      if (node->type == type
-         && node->opr.idx == subexp_idx)
-       return cls_node;
-    }
-  return REG_MISSING;
-}
-
-/* Check whether the node TOP_NODE at TOP_STR can arrive to the node
-   LAST_NODE at LAST_STR.  We record the path onto PATH since it will be
-   heavily reused.
-   Return REG_NOERROR if it can arrive, or REG_NOMATCH otherwise.  */
-
-static reg_errcode_t
-internal_function
-check_arrival (re_match_context_t *mctx, state_array_t *path, Idx top_node,
-              Idx top_str, Idx last_node, Idx last_str, int type)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  reg_errcode_t err = REG_NOERROR;
-  Idx subexp_num, backup_cur_idx, str_idx, null_cnt;
-  re_dfastate_t *cur_state = NULL;
-  re_node_set *cur_nodes, next_nodes;
-  re_dfastate_t **backup_state_log;
-  unsigned int context;
-
-  subexp_num = dfa->nodes[top_node].opr.idx;
-  /* Extend the buffer if we need.  */
-  if (BE (path->alloc < last_str + mctx->max_mb_elem_len + 1, 0))
-    {
-      re_dfastate_t **new_array;
-      Idx old_alloc = path->alloc;
-      Idx new_alloc = old_alloc + last_str + mctx->max_mb_elem_len + 1;
-      if (BE (new_alloc < old_alloc, 0)
-         || BE (SIZE_MAX / sizeof (re_dfastate_t *) < new_alloc, 0))
-       return REG_ESPACE;
-      new_array = re_realloc (path->array, re_dfastate_t *, new_alloc);
-      if (BE (new_array == NULL, 0))
-       return REG_ESPACE;
-      path->array = new_array;
-      path->alloc = new_alloc;
-      memset (new_array + old_alloc, '\0',
-             sizeof (re_dfastate_t *) * (path->alloc - old_alloc));
-    }
-
-  str_idx = path->next_idx ? path->next_idx : top_str;
-
-  /* Temporary modify MCTX.  */
-  backup_state_log = mctx->state_log;
-  backup_cur_idx = mctx->input.cur_idx;
-  mctx->state_log = path->array;
-  mctx->input.cur_idx = str_idx;
-
-  /* Setup initial node set.  */
-  context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags);
-  if (str_idx == top_str)
-    {
-      err = re_node_set_init_1 (&next_nodes, top_node);
-      if (BE (err != REG_NOERROR, 0))
-       return err;
-      err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type);
-      if (BE (err != REG_NOERROR, 0))
-       {
-         re_node_set_free (&next_nodes);
-         return err;
-       }
-    }
-  else
-    {
-      cur_state = mctx->state_log[str_idx];
-      if (cur_state && cur_state->has_backref)
-       {
-         err = re_node_set_init_copy (&next_nodes, &cur_state->nodes);
-         if (BE (err != REG_NOERROR, 0))
-           return err;
-       }
-      else
-       re_node_set_init_empty (&next_nodes);
-    }
-  if (str_idx == top_str || (cur_state && cur_state->has_backref))
-    {
-      if (next_nodes.nelem)
-       {
-         err = expand_bkref_cache (mctx, &next_nodes, str_idx,
-                                   subexp_num, type);
-         if (BE (err != REG_NOERROR, 0))
-           {
-             re_node_set_free (&next_nodes);
-             return err;
-           }
-       }
-      cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context);
-      if (BE (cur_state == NULL && err != REG_NOERROR, 0))
-       {
-         re_node_set_free (&next_nodes);
-         return err;
-       }
-      mctx->state_log[str_idx] = cur_state;
-    }
-
-  for (null_cnt = 0; str_idx < last_str && null_cnt <= mctx->max_mb_elem_len;)
-    {
-      re_node_set_empty (&next_nodes);
-      if (mctx->state_log[str_idx + 1])
-       {
-         err = re_node_set_merge (&next_nodes,
-                                  &mctx->state_log[str_idx + 1]->nodes);
-         if (BE (err != REG_NOERROR, 0))
-           {
-             re_node_set_free (&next_nodes);
-             return err;
-           }
-       }
-      if (cur_state)
-       {
-         err = check_arrival_add_next_nodes (mctx, str_idx,
-                                             &cur_state->non_eps_nodes,
-                                             &next_nodes);
-         if (BE (err != REG_NOERROR, 0))
-           {
-             re_node_set_free (&next_nodes);
-             return err;
-           }
-       }
-      ++str_idx;
-      if (next_nodes.nelem)
-       {
-         err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type);
-         if (BE (err != REG_NOERROR, 0))
-           {
-             re_node_set_free (&next_nodes);
-             return err;
-           }
-         err = expand_bkref_cache (mctx, &next_nodes, str_idx,
-                                   subexp_num, type);
-         if (BE (err != REG_NOERROR, 0))
-           {
-             re_node_set_free (&next_nodes);
-             return err;
-           }
-       }
-      context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags);
-      cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context);
-      if (BE (cur_state == NULL && err != REG_NOERROR, 0))
-       {
-         re_node_set_free (&next_nodes);
-         return err;
-       }
-      mctx->state_log[str_idx] = cur_state;
-      null_cnt = cur_state == NULL ? null_cnt + 1 : 0;
-    }
-  re_node_set_free (&next_nodes);
-  cur_nodes = (mctx->state_log[last_str] == NULL ? NULL
-              : &mctx->state_log[last_str]->nodes);
-  path->next_idx = str_idx;
-
-  /* Fix MCTX.  */
-  mctx->state_log = backup_state_log;
-  mctx->input.cur_idx = backup_cur_idx;
-
-  /* Then check the current node set has the node LAST_NODE.  */
-  if (cur_nodes != NULL && re_node_set_contains (cur_nodes, last_node))
-    return REG_NOERROR;
-
-  return REG_NOMATCH;
-}
-
-/* Helper functions for check_arrival.  */
-
-/* Calculate the destination nodes of CUR_NODES at STR_IDX, and append them
-   to NEXT_NODES.
-   TODO: This function is similar to the functions transit_state*(),
-        however this function has many additional works.
-        Can't we unify them?  */
-
-static reg_errcode_t
-internal_function
-check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx,
-                             re_node_set *cur_nodes, re_node_set *next_nodes)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  bool ok;
-  Idx cur_idx;
-#ifdef RE_ENABLE_I18N
-  reg_errcode_t err = REG_NOERROR;
-#endif
-  re_node_set union_set;
-  re_node_set_init_empty (&union_set);
-  for (cur_idx = 0; cur_idx < cur_nodes->nelem; ++cur_idx)
-    {
-      int naccepted = 0;
-      Idx cur_node = cur_nodes->elems[cur_idx];
-#ifdef DEBUG
-      re_token_type_t type = dfa->nodes[cur_node].type;
-      assert (!IS_EPSILON_NODE (type));
-#endif
-#ifdef RE_ENABLE_I18N
-      /* If the node may accept `multi byte'.  */
-      if (dfa->nodes[cur_node].accept_mb)
-       {
-         naccepted = check_node_accept_bytes (dfa, cur_node, &mctx->input,
-                                              str_idx);
-         if (naccepted > 1)
-           {
-             re_dfastate_t *dest_state;
-             Idx next_node = dfa->nexts[cur_node];
-             Idx next_idx = str_idx + naccepted;
-             dest_state = mctx->state_log[next_idx];
-             re_node_set_empty (&union_set);
-             if (dest_state)
-               {
-                 err = re_node_set_merge (&union_set, &dest_state->nodes);
-                 if (BE (err != REG_NOERROR, 0))
-                   {
-                     re_node_set_free (&union_set);
-                     return err;
-                   }
-               }
-             ok = re_node_set_insert (&union_set, next_node);
-             if (BE (! ok, 0))
-               {
-                 re_node_set_free (&union_set);
-                 return REG_ESPACE;
-               }
-             mctx->state_log[next_idx] = re_acquire_state (&err, dfa,
-                                                           &union_set);
-             if (BE (mctx->state_log[next_idx] == NULL
-                     && err != REG_NOERROR, 0))
-               {
-                 re_node_set_free (&union_set);
-                 return err;
-               }
-           }
-       }
-#endif /* RE_ENABLE_I18N */
-      if (naccepted
-         || check_node_accept (mctx, dfa->nodes + cur_node, str_idx))
-       {
-         ok = re_node_set_insert (next_nodes, dfa->nexts[cur_node]);
-         if (BE (! ok, 0))
-           {
-             re_node_set_free (&union_set);
-             return REG_ESPACE;
-           }
-       }
-    }
-  re_node_set_free (&union_set);
-  return REG_NOERROR;
-}
-
-/* For all the nodes in CUR_NODES, add the epsilon closures of them to
-   CUR_NODES, however exclude the nodes which are:
-    - inside the sub expression whose number is EX_SUBEXP, if FL_OPEN.
-    - out of the sub expression whose number is EX_SUBEXP, if !FL_OPEN.
-*/
-
-static reg_errcode_t
-internal_function
-check_arrival_expand_ecl (const re_dfa_t *dfa, re_node_set *cur_nodes,
-                         Idx ex_subexp, int type)
-{
-  reg_errcode_t err;
-  Idx idx, outside_node;
-  re_node_set new_nodes;
-#ifdef DEBUG
-  assert (cur_nodes->nelem);
-#endif
-  err = re_node_set_alloc (&new_nodes, cur_nodes->nelem);
-  if (BE (err != REG_NOERROR, 0))
-    return err;
-  /* Create a new node set NEW_NODES with the nodes which are epsilon
-     closures of the node in CUR_NODES.  */
-
-  for (idx = 0; idx < cur_nodes->nelem; ++idx)
-    {
-      Idx cur_node = cur_nodes->elems[idx];
-      const re_node_set *eclosure = dfa->eclosures + cur_node;
-      outside_node = find_subexp_node (dfa, eclosure, ex_subexp, type);
-      if (outside_node == REG_MISSING)
-       {
-         /* There are no problematic nodes, just merge them.  */
-         err = re_node_set_merge (&new_nodes, eclosure);
-         if (BE (err != REG_NOERROR, 0))
-           {
-             re_node_set_free (&new_nodes);
-             return err;
-           }
-       }
-      else
-       {
-         /* There are problematic nodes, re-calculate incrementally.  */
-         err = check_arrival_expand_ecl_sub (dfa, &new_nodes, cur_node,
-                                             ex_subexp, type);
-         if (BE (err != REG_NOERROR, 0))
-           {
-             re_node_set_free (&new_nodes);
-             return err;
-           }
-       }
-    }
-  re_node_set_free (cur_nodes);
-  *cur_nodes = new_nodes;
-  return REG_NOERROR;
-}
-
-/* Helper function for check_arrival_expand_ecl.
-   Check incrementally the epsilon closure of TARGET, and if it isn't
-   problematic append it to DST_NODES.  */
-
-static reg_errcode_t
-internal_function
-check_arrival_expand_ecl_sub (const re_dfa_t *dfa, re_node_set *dst_nodes,
-                             Idx target, Idx ex_subexp, int type)
-{
-  Idx cur_node;
-  for (cur_node = target; !re_node_set_contains (dst_nodes, cur_node);)
-    {
-      bool ok;
-
-      if (dfa->nodes[cur_node].type == type
-         && dfa->nodes[cur_node].opr.idx == ex_subexp)
-       {
-         if (type == OP_CLOSE_SUBEXP)
-           {
-             ok = re_node_set_insert (dst_nodes, cur_node);
-             if (BE (! ok, 0))
-               return REG_ESPACE;
-           }
-         break;
-       }
-      ok = re_node_set_insert (dst_nodes, cur_node);
-      if (BE (! ok, 0))
-       return REG_ESPACE;
-      if (dfa->edests[cur_node].nelem == 0)
-       break;
-      if (dfa->edests[cur_node].nelem == 2)
-       {
-         reg_errcode_t err;
-         err = check_arrival_expand_ecl_sub (dfa, dst_nodes,
-                                             dfa->edests[cur_node].elems[1],
-                                             ex_subexp, type);
-         if (BE (err != REG_NOERROR, 0))
-           return err;
-       }
-      cur_node = dfa->edests[cur_node].elems[0];
-    }
-  return REG_NOERROR;
-}
-
-
-/* For all the back references in the current state, calculate the
-   destination of the back references by the appropriate entry
-   in MCTX->BKREF_ENTS.  */
-
-static reg_errcode_t
-internal_function
-expand_bkref_cache (re_match_context_t *mctx, re_node_set *cur_nodes,
-                   Idx cur_str, Idx subexp_num, int type)
-{
-  const re_dfa_t *const dfa = mctx->dfa;
-  reg_errcode_t err;
-  Idx cache_idx_start = search_cur_bkref_entry (mctx, cur_str);
-  struct re_backref_cache_entry *ent;
-
-  if (cache_idx_start == REG_MISSING)
-    return REG_NOERROR;
-
- restart:
-  ent = mctx->bkref_ents + cache_idx_start;
-  do
-    {
-      Idx to_idx, next_node;
-
-      /* Is this entry ENT is appropriate?  */
-      if (!re_node_set_contains (cur_nodes, ent->node))
-       continue; /* No.  */
-
-      to_idx = cur_str + ent->subexp_to - ent->subexp_from;
-      /* Calculate the destination of the back reference, and append it
-        to MCTX->STATE_LOG.  */
-      if (to_idx == cur_str)
-       {
-         /* The backreference did epsilon transit, we must re-check all the
-            node in the current state.  */
-         re_node_set new_dests;
-         reg_errcode_t err2, err3;
-         next_node = dfa->edests[ent->node].elems[0];
-         if (re_node_set_contains (cur_nodes, next_node))
-           continue;
-         err = re_node_set_init_1 (&new_dests, next_node);
-         err2 = check_arrival_expand_ecl (dfa, &new_dests, subexp_num, type);
-         err3 = re_node_set_merge (cur_nodes, &new_dests);
-         re_node_set_free (&new_dests);
-         if (BE (err != REG_NOERROR || err2 != REG_NOERROR
-                 || err3 != REG_NOERROR, 0))
-           {
-             err = (err != REG_NOERROR ? err
-                    : (err2 != REG_NOERROR ? err2 : err3));
-             return err;
-           }
-         /* TODO: It is still inefficient...  */
-         goto restart;
-       }
-      else
-       {
-         re_node_set union_set;
-         next_node = dfa->nexts[ent->node];
-         if (mctx->state_log[to_idx])
-           {
-             bool ok;
-             if (re_node_set_contains (&mctx->state_log[to_idx]->nodes,
-                                       next_node))
-               continue;
-             err = re_node_set_init_copy (&union_set,
-                                          &mctx->state_log[to_idx]->nodes);
-             ok = re_node_set_insert (&union_set, next_node);
-             if (BE (err != REG_NOERROR || ! ok, 0))
-               {
-                 re_node_set_free (&union_set);
-                 err = err != REG_NOERROR ? err : REG_ESPACE;
-                 return err;
-               }
-           }
-         else
-           {
-             err = re_node_set_init_1 (&union_set, next_node);
-             if (BE (err != REG_NOERROR, 0))
-               return err;
-           }
-         mctx->state_log[to_idx] = re_acquire_state (&err, dfa, &union_set);
-         re_node_set_free (&union_set);
-         if (BE (mctx->state_log[to_idx] == NULL
-                 && err != REG_NOERROR, 0))
-           return err;
-       }
-    }
-  while (ent++->more);
-  return REG_NOERROR;
-}
-
-/* Build transition table for the state.
-   Return true if successful.  */
-
-static bool
-internal_function
-build_trtable (const re_dfa_t *dfa, re_dfastate_t *state)
-{
-  reg_errcode_t err;
-  Idx i, j;
-  int ch;
-  bool need_word_trtable = false;
-  bitset_word_t elem, mask;
-  bool dests_node_malloced = false;
-  bool dest_states_malloced = false;
-  Idx ndests; /* Number of the destination states from `state'.  */
-  re_dfastate_t **trtable;
-  re_dfastate_t **dest_states = NULL, **dest_states_word, **dest_states_nl;
-  re_node_set follows, *dests_node;
-  bitset_t *dests_ch;
-  bitset_t acceptable;
-
-  struct dests_alloc
-  {
-    re_node_set dests_node[SBC_MAX];
-    bitset_t dests_ch[SBC_MAX];
-  } *dests_alloc;
-
-  /* We build DFA states which corresponds to the destination nodes
-     from `state'.  `dests_node[i]' represents the nodes which i-th
-     destination state contains, and `dests_ch[i]' represents the
-     characters which i-th destination state accepts.  */
-  if (__libc_use_alloca (sizeof (struct dests_alloc)))
-    dests_alloc = (struct dests_alloc *) alloca (sizeof (struct dests_alloc));
-  else
-    {
-      dests_alloc = re_malloc (struct dests_alloc, 1);
-      if (BE (dests_alloc == NULL, 0))
-       return false;
-      dests_node_malloced = true;
-    }
-  dests_node = dests_alloc->dests_node;
-  dests_ch = dests_alloc->dests_ch;
-
-  /* Initialize transiton table.  */
-  state->word_trtable = state->trtable = NULL;
-
-  /* At first, group all nodes belonging to `state' into several
-     destinations.  */
-  ndests = group_nodes_into_DFAstates (dfa, state, dests_node, dests_ch);
-  if (BE (! REG_VALID_NONZERO_INDEX (ndests), 0))
-    {
-      if (dests_node_malloced)
-       free (dests_alloc);
-      if (ndests == 0)
-       {
-         state->trtable = (re_dfastate_t **)
-           calloc (sizeof (re_dfastate_t *), SBC_MAX);
-         return true;
-       }
-      return false;
-    }
-
-  err = re_node_set_alloc (&follows, ndests + 1);
-  if (BE (err != REG_NOERROR, 0))
-    goto out_free;
-
-  /* Avoid arithmetic overflow in size calculation.  */
-  if (BE ((((SIZE_MAX - (sizeof (re_node_set) + sizeof (bitset_t)) * SBC_MAX)
-           / (3 * sizeof (re_dfastate_t *)))
-          < ndests),
-         0))
-    goto out_free;
-
-  if (__libc_use_alloca ((sizeof (re_node_set) + sizeof (bitset_t)) * SBC_MAX
-                        + ndests * 3 * sizeof (re_dfastate_t *)))
-    dest_states = (re_dfastate_t **)
-      alloca (ndests * 3 * sizeof (re_dfastate_t *));
-  else
-    {
-      dest_states = (re_dfastate_t **)
-       malloc (ndests * 3 * sizeof (re_dfastate_t *));
-      if (BE (dest_states == NULL, 0))
-       {
-out_free:
-         if (dest_states_malloced)
-           free (dest_states);
-         re_node_set_free (&follows);
-         for (i = 0; i < ndests; ++i)
-           re_node_set_free (dests_node + i);
-         if (dests_node_malloced)
-           free (dests_alloc);
-         return false;
-       }
-      dest_states_malloced = true;
-    }
-  dest_states_word = dest_states + ndests;
-  dest_states_nl = dest_states_word + ndests;
-  bitset_empty (acceptable);
-
-  /* Then build the states for all destinations.  */
-  for (i = 0; i < ndests; ++i)
-    {
-      Idx next_node;
-      re_node_set_empty (&follows);
-      /* Merge the follows of this destination states.  */
-      for (j = 0; j < dests_node[i].nelem; ++j)
-       {
-         next_node = dfa->nexts[dests_node[i].elems[j]];
-         if (next_node != REG_MISSING)
-           {
-             err = re_node_set_merge (&follows, dfa->eclosures + next_node);
-             if (BE (err != REG_NOERROR, 0))
-               goto out_free;
-           }
-       }
-      dest_states[i] = re_acquire_state_context (&err, dfa, &follows, 0);
-      if (BE (dest_states[i] == NULL && err != REG_NOERROR, 0))
-       goto out_free;
-      /* If the new state has context constraint,
-        build appropriate states for these contexts.  */
-      if (dest_states[i]->has_constraint)
-       {
-         dest_states_word[i] = re_acquire_state_context (&err, dfa, &follows,
-                                                         CONTEXT_WORD);
-         if (BE (dest_states_word[i] == NULL && err != REG_NOERROR, 0))
-           goto out_free;
-
-         if (dest_states[i] != dest_states_word[i] && dfa->mb_cur_max > 1)
-           need_word_trtable = true;
-
-         dest_states_nl[i] = re_acquire_state_context (&err, dfa, &follows,
-                                                       CONTEXT_NEWLINE);
-         if (BE (dest_states_nl[i] == NULL && err != REG_NOERROR, 0))
-           goto out_free;
-       }
-      else
-       {
-         dest_states_word[i] = dest_states[i];
-         dest_states_nl[i] = dest_states[i];
-       }
-      bitset_merge (acceptable, dests_ch[i]);
-    }
-
-  if (!BE (need_word_trtable, 0))
-    {
-      /* We don't care about whether the following character is a word
-        character, or we are in a single-byte character set so we can
-        discern by looking at the character code: allocate a
-        256-entry transition table.  */
-      trtable = state->trtable =
-       (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX);
-      if (BE (trtable == NULL, 0))
-       goto out_free;
-
-      /* For all characters ch...:  */
-      for (i = 0; i < BITSET_WORDS; ++i)
-       for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1;
-            elem;
-            mask <<= 1, elem >>= 1, ++ch)
-         if (BE (elem & 1, 0))
-           {
-             /* There must be exactly one destination which accepts
-                character ch.  See group_nodes_into_DFAstates.  */
-             for (j = 0; (dests_ch[j][i] & mask) == 0; ++j)
-               ;
-
-             /* j-th destination accepts the word character ch.  */
-             if (dfa->word_char[i] & mask)
-               trtable[ch] = dest_states_word[j];
-             else
-               trtable[ch] = dest_states[j];
-           }
-    }
-  else
-    {
-      /* We care about whether the following character is a word
-        character, and we are in a multi-byte character set: discern
-        by looking at the character code: build two 256-entry
-        transition tables, one starting at trtable[0] and one
-        starting at trtable[SBC_MAX].  */
-      trtable = state->word_trtable =
-       (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), 2 * SBC_MAX);
-      if (BE (trtable == NULL, 0))
-       goto out_free;
-
-      /* For all characters ch...:  */
-      for (i = 0; i < BITSET_WORDS; ++i)
-       for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1;
-            elem;
-            mask <<= 1, elem >>= 1, ++ch)
-         if (BE (elem & 1, 0))
-           {
-             /* There must be exactly one destination which accepts
-                character ch.  See group_nodes_into_DFAstates.  */
-             for (j = 0; (dests_ch[j][i] & mask) == 0; ++j)
-               ;
-
-             /* j-th destination accepts the word character ch.  */
-             trtable[ch] = dest_states[j];
-             trtable[ch + SBC_MAX] = dest_states_word[j];
-           }
-    }
-
-  /* new line */
-  if (bitset_contain (acceptable, NEWLINE_CHAR))
-    {
-      /* The current state accepts newline character.  */
-      for (j = 0; j < ndests; ++j)
-       if (bitset_contain (dests_ch[j], NEWLINE_CHAR))
-         {
-           /* k-th destination accepts newline character.  */
-           trtable[NEWLINE_CHAR] = dest_states_nl[j];
-           if (need_word_trtable)
-             trtable[NEWLINE_CHAR + SBC_MAX] = dest_states_nl[j];
-           /* There must be only one destination which accepts
-              newline.  See group_nodes_into_DFAstates.  */
-           break;
-         }
-    }
-
-  if (dest_states_malloced)
-    free (dest_states);
-
-  re_node_set_free (&follows);
-  for (i = 0; i < ndests; ++i)
-    re_node_set_free (dests_node + i);
-
-  if (dests_node_malloced)
-    free (dests_alloc);
-
-  return true;
-}
-
-/* Group all nodes belonging to STATE into several destinations.
-   Then for all destinations, set the nodes belonging to the destination
-   to DESTS_NODE[i] and set the characters accepted by the destination
-   to DEST_CH[i].  This function return the number of destinations.  */
-
-static Idx
-internal_function
-group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state,
-                           re_node_set *dests_node, bitset_t *dests_ch)
-{
-  reg_errcode_t err;
-  bool ok;
-  Idx i, j, k;
-  Idx ndests; /* Number of the destinations from `state'.  */
-  bitset_t accepts; /* Characters a node can accept.  */
-  const re_node_set *cur_nodes = &state->nodes;
-  bitset_empty (accepts);
-  ndests = 0;
-
-  /* For all the nodes belonging to `state',  */
-  for (i = 0; i < cur_nodes->nelem; ++i)
-    {
-      re_token_t *node = &dfa->nodes[cur_nodes->elems[i]];
-      re_token_type_t type = node->type;
-      unsigned int constraint = node->constraint;
-
-      /* Enumerate all single byte character this node can accept.  */
-      if (type == CHARACTER)
-       bitset_set (accepts, node->opr.c);
-      else if (type == SIMPLE_BRACKET)
-       {
-         bitset_merge (accepts, node->opr.sbcset);
-       }
-      else if (type == OP_PERIOD)
-       {
-#ifdef RE_ENABLE_I18N
-         if (dfa->mb_cur_max > 1)
-           bitset_merge (accepts, dfa->sb_char);
-         else
-#endif
-           bitset_set_all (accepts);
-         if (!(dfa->syntax & RE_DOT_NEWLINE))
-           bitset_clear (accepts, '\n');
-         if (dfa->syntax & RE_DOT_NOT_NULL)
-           bitset_clear (accepts, '\0');
-       }
-#ifdef RE_ENABLE_I18N
-      else if (type == OP_UTF8_PERIOD)
-        {
-         if (ASCII_CHARS % BITSET_WORD_BITS == 0)
-           memset (accepts, -1, ASCII_CHARS / CHAR_BIT);
-         else
-           bitset_merge (accepts, utf8_sb_map);
-         if (!(dfa->syntax & RE_DOT_NEWLINE))
-           bitset_clear (accepts, '\n');
-         if (dfa->syntax & RE_DOT_NOT_NULL)
-           bitset_clear (accepts, '\0');
-        }
-#endif
-      else
-       continue;
-
-      /* Check the `accepts' and sift the characters which are not
-        match it the context.  */
-      if (constraint)
-       {
-         if (constraint & NEXT_NEWLINE_CONSTRAINT)
-           {
-             bool accepts_newline = bitset_contain (accepts, NEWLINE_CHAR);
-             bitset_empty (accepts);
-             if (accepts_newline)
-               bitset_set (accepts, NEWLINE_CHAR);
-             else
-               continue;
-           }
-         if (constraint & NEXT_ENDBUF_CONSTRAINT)
-           {
-             bitset_empty (accepts);
-             continue;
-           }
-
-         if (constraint & NEXT_WORD_CONSTRAINT)
-           {
-             bitset_word_t any_set = 0;
-             if (type == CHARACTER && !node->word_char)
-               {
-                 bitset_empty (accepts);
-                 continue;
-               }
-#ifdef RE_ENABLE_I18N
-             if (dfa->mb_cur_max > 1)
-               for (j = 0; j < BITSET_WORDS; ++j)
-                 any_set |= (accepts[j] &= (dfa->word_char[j] | ~dfa->sb_char[j]));
-             else
-#endif
-               for (j = 0; j < BITSET_WORDS; ++j)
-                 any_set |= (accepts[j] &= dfa->word_char[j]);
-             if (!any_set)
-               continue;
-           }
-         if (constraint & NEXT_NOTWORD_CONSTRAINT)
-           {
-             bitset_word_t any_set = 0;
-             if (type == CHARACTER && node->word_char)
-               {
-                 bitset_empty (accepts);
-                 continue;
-               }
-#ifdef RE_ENABLE_I18N
-             if (dfa->mb_cur_max > 1)
-               for (j = 0; j < BITSET_WORDS; ++j)
-                 any_set |= (accepts[j] &= ~(dfa->word_char[j] & dfa->sb_char[j]));
-             else
-#endif
-               for (j = 0; j < BITSET_WORDS; ++j)
-                 any_set |= (accepts[j] &= ~dfa->word_char[j]);
-             if (!any_set)
-               continue;
-           }
-       }
-
-      /* Then divide `accepts' into DFA states, or create a new
-        state.  Above, we make sure that accepts is not empty.  */
-      for (j = 0; j < ndests; ++j)
-       {
-         bitset_t intersec; /* Intersection sets, see below.  */
-         bitset_t remains;
-         /* Flags, see below.  */
-         bitset_word_t has_intersec, not_subset, not_consumed;
-
-         /* Optimization, skip if this state doesn't accept the character.  */
-         if (type == CHARACTER && !bitset_contain (dests_ch[j], node->opr.c))
-           continue;
-
-         /* Enumerate the intersection set of this state and `accepts'.  */
-         has_intersec = 0;
-         for (k = 0; k < BITSET_WORDS; ++k)
-           has_intersec |= intersec[k] = accepts[k] & dests_ch[j][k];
-         /* And skip if the intersection set is empty.  */
-         if (!has_intersec)
-           continue;
-
-         /* Then check if this state is a subset of `accepts'.  */
-         not_subset = not_consumed = 0;
-         for (k = 0; k < BITSET_WORDS; ++k)
-           {
-             not_subset |= remains[k] = ~accepts[k] & dests_ch[j][k];
-             not_consumed |= accepts[k] = accepts[k] & ~dests_ch[j][k];
-           }
-
-         /* If this state isn't a subset of `accepts', create a
-            new group state, which has the `remains'. */
-         if (not_subset)
-           {
-             bitset_copy (dests_ch[ndests], remains);
-             bitset_copy (dests_ch[j], intersec);
-             err = re_node_set_init_copy (dests_node + ndests, &dests_node[j]);
-             if (BE (err != REG_NOERROR, 0))
-               goto error_return;
-             ++ndests;
-           }
-
-         /* Put the position in the current group. */
-         ok = re_node_set_insert (&dests_node[j], cur_nodes->elems[i]);
-         if (BE (! ok, 0))
-           goto error_return;
-
-         /* If all characters are consumed, go to next node. */
-         if (!not_consumed)
-           break;
-       }
-      /* Some characters remain, create a new group. */
-      if (j == ndests)
-       {
-         bitset_copy (dests_ch[ndests], accepts);
-         err = re_node_set_init_1 (dests_node + ndests, cur_nodes->elems[i]);
-         if (BE (err != REG_NOERROR, 0))
-           goto error_return;
-         ++ndests;
-         bitset_empty (accepts);
-       }
-    }
-  return ndests;
- error_return:
-  for (j = 0; j < ndests; ++j)
-    re_node_set_free (dests_node + j);
-  return REG_MISSING;
-}
-
-#ifdef RE_ENABLE_I18N
-/* Check how many bytes the node `dfa->nodes[node_idx]' accepts.
-   Return the number of the bytes the node accepts.
-   STR_IDX is the current index of the input string.
-
-   This function handles the nodes which can accept one character, or
-   one collating element like '.', '[a-z]', opposite to the other nodes
-   can only accept one byte.  */
-
-static int
-internal_function
-check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx,
-                        const re_string_t *input, Idx str_idx)
-{
-  const re_token_t *node = dfa->nodes + node_idx;
-  int char_len, elem_len;
-  Idx i;
-
-  if (BE (node->type == OP_UTF8_PERIOD, 0))
-    {
-      unsigned char c = re_string_byte_at (input, str_idx), d;
-      if (BE (c < 0xc2, 1))
-       return 0;
-
-      if (str_idx + 2 > input->len)
-       return 0;
-
-      d = re_string_byte_at (input, str_idx + 1);
-      if (c < 0xe0)
-       return (d < 0x80 || d > 0xbf) ? 0 : 2;
-      else if (c < 0xf0)
-       {
-         char_len = 3;
-         if (c == 0xe0 && d < 0xa0)
-           return 0;
-       }
-      else if (c < 0xf8)
-       {
-         char_len = 4;
-         if (c == 0xf0 && d < 0x90)
-           return 0;
-       }
-      else if (c < 0xfc)
-       {
-         char_len = 5;
-         if (c == 0xf8 && d < 0x88)
-           return 0;
-       }
-      else if (c < 0xfe)
-       {
-         char_len = 6;
-         if (c == 0xfc && d < 0x84)
-           return 0;
-       }
-      else
-       return 0;
-
-      if (str_idx + char_len > input->len)
-       return 0;
-
-      for (i = 1; i < char_len; ++i)
-       {
-         d = re_string_byte_at (input, str_idx + i);
-         if (d < 0x80 || d > 0xbf)
-           return 0;
-       }
-      return char_len;
-    }
-
-  char_len = re_string_char_size_at (input, str_idx);
-  if (node->type == OP_PERIOD)
-    {
-      if (char_len <= 1)
-        return 0;
-      /* FIXME: I don't think this if is needed, as both '\n'
-        and '\0' are char_len == 1.  */
-      /* '.' accepts any one character except the following two cases.  */
-      if ((!(dfa->syntax & RE_DOT_NEWLINE) &&
-          re_string_byte_at (input, str_idx) == '\n') ||
-         ((dfa->syntax & RE_DOT_NOT_NULL) &&
-          re_string_byte_at (input, str_idx) == '\0'))
-       return 0;
-      return char_len;
-    }
-
-  elem_len = re_string_elem_size_at (input, str_idx);
-  if ((elem_len <= 1 && char_len <= 1) || char_len == 0)
-    return 0;
-
-  if (node->type == COMPLEX_BRACKET)
-    {
-      const re_charset_t *cset = node->opr.mbcset;
-# ifdef _LIBC
-      const unsigned char *pin
-       = ((const unsigned char *) re_string_get_buffer (input) + str_idx);
-      Idx j;
-      uint32_t nrules;
-# endif /* _LIBC */
-      int match_len = 0;
-      wchar_t wc = ((cset->nranges || cset->nchar_classes || cset->nmbchars)
-                   ? re_string_wchar_at (input, str_idx) : 0);
-
-      /* match with multibyte character?  */
-      for (i = 0; i < cset->nmbchars; ++i)
-       if (wc == cset->mbchars[i])
-         {
-           match_len = char_len;
-           goto check_node_accept_bytes_match;
-         }
-      /* match with character_class?  */
-      for (i = 0; i < cset->nchar_classes; ++i)
-       {
-         wctype_t wt = cset->char_classes[i];
-         if (__iswctype (wc, wt))
-           {
-             match_len = char_len;
-             goto check_node_accept_bytes_match;
-           }
-       }
-
-# ifdef _LIBC
-      nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
-      if (nrules != 0)
-       {
-         unsigned int in_collseq = 0;
-         const int32_t *table, *indirect;
-         const unsigned char *weights, *extra;
-         const char *collseqwc;
-         int32_t idx;
-         /* This #include defines a local function!  */
-#  include <locale/weight.h>
-
-         /* match with collating_symbol?  */
-         if (cset->ncoll_syms)
-           extra = (const unsigned char *)
-             _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB);
-         for (i = 0; i < cset->ncoll_syms; ++i)
-           {
-             const unsigned char *coll_sym = extra + cset->coll_syms[i];
-             /* Compare the length of input collating element and
-                the length of current collating element.  */
-             if (*coll_sym != elem_len)
-               continue;
-             /* Compare each bytes.  */
-             for (j = 0; j < *coll_sym; j++)
-               if (pin[j] != coll_sym[1 + j])
-                 break;
-             if (j == *coll_sym)
-               {
-                 /* Match if every bytes is equal.  */
-                 match_len = j;
-                 goto check_node_accept_bytes_match;
-               }
-           }
-
-         if (cset->nranges)
-           {
-             if (elem_len <= char_len)
-               {
-                 collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC);
-                 in_collseq = __collseq_table_lookup (collseqwc, wc);
-               }
-             else
-               in_collseq = find_collation_sequence_value (pin, elem_len);
-           }
-         /* match with range expression?  */
-         for (i = 0; i < cset->nranges; ++i)
-           if (cset->range_starts[i] <= in_collseq
-               && in_collseq <= cset->range_ends[i])
-             {
-               match_len = elem_len;
-               goto check_node_accept_bytes_match;
-             }
-
-         /* match with equivalence_class?  */
-         if (cset->nequiv_classes)
-           {
-             const unsigned char *cp = pin;
-             table = (const int32_t *)
-               _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
-             weights = (const unsigned char *)
-               _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB);
-             extra = (const unsigned char *)
-               _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
-             indirect = (const int32_t *)
-               _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB);
-             idx = findidx (&cp);
-             if (idx > 0)
-               for (i = 0; i < cset->nequiv_classes; ++i)
-                 {
-                   int32_t equiv_class_idx = cset->equiv_classes[i];
-                   size_t weight_len = weights[idx];
-                   if (weight_len == weights[equiv_class_idx])
-                     {
-                       Idx cnt = 0;
-                       while (cnt <= weight_len
-                              && (weights[equiv_class_idx + 1 + cnt]
-                                  == weights[idx + 1 + cnt]))
-                         ++cnt;
-                       if (cnt > weight_len)
-                         {
-                           match_len = elem_len;
-                           goto check_node_accept_bytes_match;
-                         }
-                     }
-                 }
-           }
-       }
-      else
-# endif /* _LIBC */
-       {
-         /* match with range expression?  */
-#if __GNUC__ >= 2 && ! (__STDC_VERSION__ < 199901L && __STRICT_ANSI__)
-         wchar_t cmp_buf[] = {L'\0', L'\0', wc, L'\0', L'\0', L'\0'};
-#else
-         wchar_t cmp_buf[] = {L'\0', L'\0', L'\0', L'\0', L'\0', L'\0'};
-         cmp_buf[2] = wc;
-#endif
-         for (i = 0; i < cset->nranges; ++i)
-           {
-             cmp_buf[0] = cset->range_starts[i];
-             cmp_buf[4] = cset->range_ends[i];
-             if (wcscoll (cmp_buf, cmp_buf + 2) <= 0
-                 && wcscoll (cmp_buf + 2, cmp_buf + 4) <= 0)
-               {
-                 match_len = char_len;
-                 goto check_node_accept_bytes_match;
-               }
-           }
-       }
-    check_node_accept_bytes_match:
-      if (!cset->non_match)
-       return match_len;
-      else
-       {
-         if (match_len > 0)
-           return 0;
-         else
-           return (elem_len > char_len) ? elem_len : char_len;
-       }
-    }
-  return 0;
-}
-
-# ifdef _LIBC
-static unsigned int
-internal_function
-find_collation_sequence_value (const unsigned char *mbs, size_t mbs_len)
-{
-  uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
-  if (nrules == 0)
-    {
-      if (mbs_len == 1)
-       {
-         /* No valid character.  Match it as a single byte character.  */
-         const unsigned char *collseq = (const unsigned char *)
-           _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB);
-         return collseq[mbs[0]];
-       }
-      return UINT_MAX;
-    }
-  else
-    {
-      int32_t idx;
-      const unsigned char *extra = (const unsigned char *)
-       _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB);
-      int32_t extrasize = (const unsigned char *)
-       _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB + 1) - extra;
-
-      for (idx = 0; idx < extrasize;)
-       {
-         int mbs_cnt;
-         bool found = false;
-         int32_t elem_mbs_len;
-         /* Skip the name of collating element name.  */
-         idx = idx + extra[idx] + 1;
-         elem_mbs_len = extra[idx++];
-         if (mbs_len == elem_mbs_len)
-           {
-             for (mbs_cnt = 0; mbs_cnt < elem_mbs_len; ++mbs_cnt)
-               if (extra[idx + mbs_cnt] != mbs[mbs_cnt])
-                 break;
-             if (mbs_cnt == elem_mbs_len)
-               /* Found the entry.  */
-               found = true;
-           }
-         /* Skip the byte sequence of the collating element.  */
-         idx += elem_mbs_len;
-         /* Adjust for the alignment.  */
-         idx = (idx + 3) & ~3;
-         /* Skip the collation sequence value.  */
-         idx += sizeof (uint32_t);
-         /* Skip the wide char sequence of the collating element.  */
-         idx = idx + sizeof (uint32_t) * (extra[idx] + 1);
-         /* If we found the entry, return the sequence value.  */
-         if (found)
-           return *(uint32_t *) (extra + idx);
-         /* Skip the collation sequence value.  */
-         idx += sizeof (uint32_t);
-       }
-      return UINT_MAX;
-    }
-}
-# endif /* _LIBC */
-#endif /* RE_ENABLE_I18N */
-
-/* Check whether the node accepts the byte which is IDX-th
-   byte of the INPUT.  */
-
-static bool
-internal_function
-check_node_accept (const re_match_context_t *mctx, const re_token_t *node,
-                  Idx idx)
-{
-  unsigned char ch;
-  ch = re_string_byte_at (&mctx->input, idx);
-  switch (node->type)
-    {
-    case CHARACTER:
-      if (node->opr.c != ch)
-        return false;
-      break;
-
-    case SIMPLE_BRACKET:
-      if (!bitset_contain (node->opr.sbcset, ch))
-        return false;
-      break;
-
-#ifdef RE_ENABLE_I18N
-    case OP_UTF8_PERIOD:
-      if (ch >= ASCII_CHARS)
-        return false;
-      /* FALLTHROUGH */
-#endif
-    case OP_PERIOD:
-      if ((ch == '\n' && !(mctx->dfa->syntax & RE_DOT_NEWLINE))
-         || (ch == '\0' && (mctx->dfa->syntax & RE_DOT_NOT_NULL)))
-       return false;
-      break;
-
-    default:
-      return false;
-    }
-
-  if (node->constraint)
-    {
-      /* The node has constraints.  Check whether the current context
-        satisfies the constraints.  */
-      unsigned int context = re_string_context_at (&mctx->input, idx,
-                                                  mctx->eflags);
-      if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context))
-       return false;
-    }
-
-  return true;
-}
-
-/* Extend the buffers, if the buffers have run out.  */
-
-static reg_errcode_t
-internal_function
-extend_buffers (re_match_context_t *mctx)
-{
-  reg_errcode_t ret;
-  re_string_t *pstr = &mctx->input;
-
-  /* Avoid overflow.  */
-  if (BE (SIZE_MAX / 2 / sizeof (re_dfastate_t *) <= pstr->bufs_len, 0))
-    return REG_ESPACE;
-
-  /* Double the lengthes of the buffers.  */
-  ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2);
-  if (BE (ret != REG_NOERROR, 0))
-    return ret;
-
-  if (mctx->state_log != NULL)
-    {
-      /* And double the length of state_log.  */
-      /* XXX We have no indication of the size of this buffer.  If this
-        allocation fail we have no indication that the state_log array
-        does not have the right size.  */
-      re_dfastate_t **new_array = re_realloc (mctx->state_log, re_dfastate_t *,
-                                             pstr->bufs_len + 1);
-      if (BE (new_array == NULL, 0))
-       return REG_ESPACE;
-      mctx->state_log = new_array;
-    }
-
-  /* Then reconstruct the buffers.  */
-  if (pstr->icase)
-    {
-#ifdef RE_ENABLE_I18N
-      if (pstr->mb_cur_max > 1)
-       {
-         ret = build_wcs_upper_buffer (pstr);
-         if (BE (ret != REG_NOERROR, 0))
-           return ret;
-       }
-      else
-#endif /* RE_ENABLE_I18N  */
-       build_upper_buffer (pstr);
-    }
-  else
-    {
-#ifdef RE_ENABLE_I18N
-      if (pstr->mb_cur_max > 1)
-       build_wcs_buffer (pstr);
-      else
-#endif /* RE_ENABLE_I18N  */
-       {
-         if (pstr->trans != NULL)
-           re_string_translate_buffer (pstr);
-       }
-    }
-  return REG_NOERROR;
-}
-
-\f
-/* Functions for matching context.  */
-
-/* Initialize MCTX.  */
-
-static reg_errcode_t
-internal_function
-match_ctx_init (re_match_context_t *mctx, int eflags, Idx n)
-{
-  mctx->eflags = eflags;
-  mctx->match_last = REG_MISSING;
-  if (n > 0)
-    {
-      /* Avoid overflow.  */
-      size_t max_object_size =
-       MAX (sizeof (struct re_backref_cache_entry),
-            sizeof (re_sub_match_top_t *));
-      if (BE (SIZE_MAX / max_object_size < n, 0))
-       return REG_ESPACE;
-
-      mctx->bkref_ents = re_malloc (struct re_backref_cache_entry, n);
-      mctx->sub_tops = re_malloc (re_sub_match_top_t *, n);
-      if (BE (mctx->bkref_ents == NULL || mctx->sub_tops == NULL, 0))
-       return REG_ESPACE;
-    }
-  /* Already zero-ed by the caller.
-     else
-       mctx->bkref_ents = NULL;
-     mctx->nbkref_ents = 0;
-     mctx->nsub_tops = 0;  */
-  mctx->abkref_ents = n;
-  mctx->max_mb_elem_len = 1;
-  mctx->asub_tops = n;
-  return REG_NOERROR;
-}
-
-/* Clean the entries which depend on the current input in MCTX.
-   This function must be invoked when the matcher changes the start index
-   of the input, or changes the input string.  */
-
-static void
-internal_function
-match_ctx_clean (re_match_context_t *mctx)
-{
-  Idx st_idx;
-  for (st_idx = 0; st_idx < mctx->nsub_tops; ++st_idx)
-    {
-      Idx sl_idx;
-      re_sub_match_top_t *top = mctx->sub_tops[st_idx];
-      for (sl_idx = 0; sl_idx < top->nlasts; ++sl_idx)
-       {
-         re_sub_match_last_t *last = top->lasts[sl_idx];
-         re_free (last->path.array);
-         re_free (last);
-       }
-      re_free (top->lasts);
-      if (top->path)
-       {
-         re_free (top->path->array);
-         re_free (top->path);
-       }
-      free (top);
-    }
-
-  mctx->nsub_tops = 0;
-  mctx->nbkref_ents = 0;
-}
-
-/* Free all the memory associated with MCTX.  */
-
-static void
-internal_function
-match_ctx_free (re_match_context_t *mctx)
-{
-  /* First, free all the memory associated with MCTX->SUB_TOPS.  */
-  match_ctx_clean (mctx);
-  re_free (mctx->sub_tops);
-  re_free (mctx->bkref_ents);
-}
-
-/* Add a new backreference entry to MCTX.
-   Note that we assume that caller never call this function with duplicate
-   entry, and call with STR_IDX which isn't smaller than any existing entry.
-*/
-
-static reg_errcode_t
-internal_function
-match_ctx_add_entry (re_match_context_t *mctx, Idx node, Idx str_idx, Idx from,
-                    Idx to)
-{
-  if (mctx->nbkref_ents >= mctx->abkref_ents)
-    {
-      struct re_backref_cache_entry* new_entry;
-      new_entry = re_realloc (mctx->bkref_ents, struct re_backref_cache_entry,
-                             mctx->abkref_ents * 2);
-      if (BE (new_entry == NULL, 0))
-       {
-         re_free (mctx->bkref_ents);
-         return REG_ESPACE;
-       }
-      mctx->bkref_ents = new_entry;
-      memset (mctx->bkref_ents + mctx->nbkref_ents, '\0',
-             sizeof (struct re_backref_cache_entry) * mctx->abkref_ents);
-      mctx->abkref_ents *= 2;
-    }
-  if (mctx->nbkref_ents > 0
-      && mctx->bkref_ents[mctx->nbkref_ents - 1].str_idx == str_idx)
-    mctx->bkref_ents[mctx->nbkref_ents - 1].more = 1;
-
-  mctx->bkref_ents[mctx->nbkref_ents].node = node;
-  mctx->bkref_ents[mctx->nbkref_ents].str_idx = str_idx;
-  mctx->bkref_ents[mctx->nbkref_ents].subexp_from = from;
-  mctx->bkref_ents[mctx->nbkref_ents].subexp_to = to;
-
-  /* This is a cache that saves negative results of check_dst_limits_calc_pos.
-     If bit N is clear, means that this entry won't epsilon-transition to
-     an OP_OPEN_SUBEXP or OP_CLOSE_SUBEXP for the N+1-th subexpression.  If
-     it is set, check_dst_limits_calc_pos_1 will recurse and try to find one
-     such node.
-
-     A backreference does not epsilon-transition unless it is empty, so set
-     to all zeros if FROM != TO.  */
-  mctx->bkref_ents[mctx->nbkref_ents].eps_reachable_subexps_map
-    = (from == to ? -1 : 0);
-
-  mctx->bkref_ents[mctx->nbkref_ents++].more = 0;
-  if (mctx->max_mb_elem_len < to - from)
-    mctx->max_mb_elem_len = to - from;
-  return REG_NOERROR;
-}
-
-/* Return the first entry with the same str_idx, or REG_MISSING if none is
-   found.  Note that MCTX->BKREF_ENTS is already sorted by MCTX->STR_IDX.  */
-
-static Idx
-internal_function
-search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx)
-{
-  Idx left, right, mid, last;
-  last = right = mctx->nbkref_ents;
-  for (left = 0; left < right;)
-    {
-      mid = (left + right) / 2;
-      if (mctx->bkref_ents[mid].str_idx < str_idx)
-       left = mid + 1;
-      else
-       right = mid;
-    }
-  if (left < last && mctx->bkref_ents[left].str_idx == str_idx)
-    return left;
-  else
-    return REG_MISSING;
-}
-
-/* Register the node NODE, whose type is OP_OPEN_SUBEXP, and which matches
-   at STR_IDX.  */
-
-static reg_errcode_t
-internal_function
-match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx)
-{
-#ifdef DEBUG
-  assert (mctx->sub_tops != NULL);
-  assert (mctx->asub_tops > 0);
-#endif
-  if (BE (mctx->nsub_tops == mctx->asub_tops, 0))
-    {
-      Idx new_asub_tops = mctx->asub_tops * 2;
-      re_sub_match_top_t **new_array = re_realloc (mctx->sub_tops,
-                                                  re_sub_match_top_t *,
-                                                  new_asub_tops);
-      if (BE (new_array == NULL, 0))
-       return REG_ESPACE;
-      mctx->sub_tops = new_array;
-      mctx->asub_tops = new_asub_tops;
-    }
-  mctx->sub_tops[mctx->nsub_tops] = calloc (1, sizeof (re_sub_match_top_t));
-  if (BE (mctx->sub_tops[mctx->nsub_tops] == NULL, 0))
-    return REG_ESPACE;
-  mctx->sub_tops[mctx->nsub_tops]->node = node;
-  mctx->sub_tops[mctx->nsub_tops++]->str_idx = str_idx;
-  return REG_NOERROR;
-}
-
-/* Register the node NODE, whose type is OP_CLOSE_SUBEXP, and which matches
-   at STR_IDX, whose corresponding OP_OPEN_SUBEXP is SUB_TOP.  */
-
-static re_sub_match_last_t *
-internal_function
-match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx)
-{
-  re_sub_match_last_t *new_entry;
-  if (BE (subtop->nlasts == subtop->alasts, 0))
-    {
-      Idx new_alasts = 2 * subtop->alasts + 1;
-      re_sub_match_last_t **new_array = re_realloc (subtop->lasts,
-                                                   re_sub_match_last_t *,
-                                                   new_alasts);
-      if (BE (new_array == NULL, 0))
-       return NULL;
-      subtop->lasts = new_array;
-      subtop->alasts = new_alasts;
-    }
-  new_entry = calloc (1, sizeof (re_sub_match_last_t));
-  if (BE (new_entry != NULL, 1))
-    {
-      subtop->lasts[subtop->nlasts] = new_entry;
-      new_entry->node = node;
-      new_entry->str_idx = str_idx;
-      ++subtop->nlasts;
-    }
-  return new_entry;
-}
-
-static void
-internal_function
-sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts,
-              re_dfastate_t **limited_sts, Idx last_node, Idx last_str_idx)
-{
-  sctx->sifted_states = sifted_sts;
-  sctx->limited_states = limited_sts;
-  sctx->last_node = last_node;
-  sctx->last_str_idx = last_str_idx;
-  re_node_set_init_empty (&sctx->limits);
-}
index 50f037c5af693668ba2b40d7e252871a7ef115b1..2ce9dc517035223c71096bbd12637c8866e0bc3a 100644 (file)
--- a/lib/rmt.h
+++ b/lib/rmt.h
@@ -61,7 +61,7 @@ extern bool force_local_option;
 
 #define rmtcreat(dev_name, mode, command) \
    (_remdev (dev_name) \
-    ? rmt_open__ (dev_name, 1 | O_CREAT, __REM_BIAS, command) \
+    ? rmt_open__ (dev_name, O_CREAT | O_WRONLY, __REM_BIAS, command) \
     : creat (dev_name, mode))
 
 #define rmtlstat(dev_name, muffer) \
diff --git a/lib/rpmatch.c b/lib/rpmatch.c
deleted file mode 100644 (file)
index 217e171..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-/* Determine whether string value is affirmation or negative response
-   according to current locale's data.
-
-   Copyright (C) 1996, 1998, 2000, 2002, 2003, 2006-2008 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 <stdlib.h>
-
-#include <stdbool.h>
-#include <stddef.h>
-
-#if ENABLE_NLS
-# include <sys/types.h>
-# include <limits.h>
-# include <string.h>
-# if HAVE_LANGINFO_YESEXPR
-#  include <langinfo.h>
-# endif
-# include <regex.h>
-# include "gettext.h"
-# define _(msgid) gettext (msgid)
-# define N_(msgid) gettext_noop (msgid)
-
-# if HAVE_LANGINFO_YESEXPR
-/* Return the localized regular expression pattern corresponding to
-   ENGLISH_PATTERN.  NL_INDEX can be used with nl_langinfo.
-   The resulting string may only be used until the next nl_langinfo call.  */
-static const char *
-localized_pattern (const char *english_pattern, nl_item nl_index,
-                  bool posixly_correct)
-{
-  const char *translated_pattern;
-
-  /* We prefer to get the patterns from a PO file.  It would be possible to
-     always use nl_langinfo (YESEXPR) instead of _("^[yY]"), and
-     nl_langinfo (NOEXPR) instead of _("^[nN]"), if we could assume that the
-     system's locale support is good.  But this is not the case e.g. on Cygwin.
-     The localizations of gnulib.pot are of better quality in general.
-     Also, if we use locale info from non-free systems that don't have a
-     'localedef' command, we deprive the users of the freedom to localize
-     this pattern for their preferred language.
-     But some programs, such as 'cp', 'mv', 'rm', 'find', 'xargs', are
-     specified by POSIX to use nl_langinfo (YESEXPR).  We implement this
-     behaviour if POSIXLY_CORRECT is set, for the sake of these programs.  */
-
-  /* If the user wants strict POSIX compliance, use nl_langinfo.  */
-  if (posixly_correct)
-    {
-      translated_pattern = nl_langinfo (nl_index);
-      /* Check against a broken system return value.  */
-      if (translated_pattern != NULL && translated_pattern[0] != '\0')
-       return translated_pattern;
-   }
-
-  /* Look in the gnulib message catalog.  */
-  translated_pattern = _(english_pattern);
-  if (translated_pattern == english_pattern)
-    {
-      /* The gnulib message catalog provides no translation.
-        Try the system's message catalog.  */
-      translated_pattern = nl_langinfo (nl_index);
-      /* Check against a broken system return value.  */
-      if (translated_pattern != NULL && translated_pattern[0] != '\0')
-       return translated_pattern;
-      /* Fall back to English.  */
-      translated_pattern = english_pattern;
-    }
-  return translated_pattern;
-}
-# else
-#  define localized_pattern(english_pattern,nl_index,posixly_correct) \
-     _(english_pattern)
-# endif
-
-static int
-try (const char *response, const char *pattern, char **lastp, regex_t *re)
-{
-  if (*lastp == NULL || strcmp (pattern, *lastp) != 0)
-    {
-      char *safe_pattern;
-
-      /* The pattern has changed.  */
-      if (*lastp != NULL)
-       {
-         /* Free the old compiled pattern.  */
-         regfree (re);
-         free (*lastp);
-         *lastp = NULL;
-       }
-      /* Put the PATTERN into safe memory before calling regcomp.
-        (regcomp may call nl_langinfo, overwriting PATTERN's storage.  */
-      safe_pattern = strdup (pattern);
-      if (safe_pattern == NULL)
-       return -1;
-      /* Compile the pattern and cache it for future runs.  */
-      if (regcomp (re, safe_pattern, REG_EXTENDED) != 0)
-       return -1;
-      *lastp = safe_pattern;
-    }
-
-  /* See if the regular expression matches RESPONSE.  */
-  return regexec (re, response, 0, NULL, 0) == 0;
-}
-#endif
-
-
-int
-rpmatch (const char *response)
-{
-#if ENABLE_NLS
-  /* Match against one of the response patterns, compiling the pattern
-     first if necessary.  */
-
-  /* We cache the response patterns and compiled regexps here.  */
-  static char *last_yesexpr, *last_noexpr;
-  static regex_t cached_yesre, cached_nore;
-
-# if HAVE_LANGINFO_YESEXPR
-  bool posixly_correct = (getenv ("POSIXLY_CORRECT") != NULL);
-# endif
-
-  const char *yesexpr, *noexpr;
-  int result;
-
-  /* TRANSLATORS: A regular expression testing for an affirmative answer
-     (english: "yes").  Testing the first character may be sufficient.
-     Take care to consider upper and lower case.
-     To enquire the regular expression that your system uses for this
-     purpose, you can use the command
-       locale -k LC_MESSAGES | grep '^yesexpr='  */
-  yesexpr = localized_pattern (N_("^[yY]"), YESEXPR, posixly_correct);
-  result = try (response, yesexpr, &last_yesexpr, &cached_yesre);
-  if (result < 0)
-    return -1;
-  if (result)
-    return 1;
-
-  /* TRANSLATORS: A regular expression testing for a negative answer
-     (english: "no").  Testing the first character may be sufficient.
-     Take care to consider upper and lower case.
-     To enquire the regular expression that your system uses for this
-     purpose, you can use the command
-       locale -k LC_MESSAGES | grep '^noexpr='  */
-  noexpr = localized_pattern (N_("^[nN]"), NOEXPR, posixly_correct);
-  result = try (response, noexpr, &last_noexpr, &cached_nore);
-  if (result < 0)
-    return -1;
-  if (result)
-    return 0;
-
-  return -1;
-#else
-  /* Test against "^[yY]" and "^[nN]", hardcoded to avoid requiring regex */
-  return (*response == 'y' || *response == 'Y' ? 1
-         : *response == 'n' || *response == 'N' ? 0 : -1);
-#endif
-}
index 51faf3ce91dbd50496705ff15338e87d58c39466..cb645db5d9a4156200d5350367c0fa95322b7c81 100644 (file)
@@ -425,7 +425,10 @@ rmt_open__ (const char *file_name, int open_mode, int bias,
   }
 
   /* FIXME: Should somewhat validate the decoding, here.  */
-
+  if (gethostbyname (remote_host) == NULL)
+    error (EXIT_ON_EXEC_ERROR, 0, _("Cannot connect to %s: resolve failed"),
+          remote_host);
+         
   if (remote_user && *remote_user == '\0')
     remote_user = 0;
 
@@ -570,7 +573,8 @@ rmt_read__ (int handle, char *buffer, size_t length)
 
   sprintf (command_buffer, "R%lu\n", (unsigned long) length);
   if (do_command (handle, command_buffer) == -1
-      || (status = get_status (handle)) == SAFE_READ_ERROR)
+      || (status = get_status (handle)) == SAFE_READ_ERROR
+      || status > length)
     return SAFE_READ_ERROR;
 
   for (counter = 0; counter < status; counter += rlen, buffer += rlen)
@@ -706,6 +710,12 @@ rmt_ioctl__ (int handle, int operation, char *argument)
            || (status = get_status (handle), status == -1))
          return -1;
 
+       if (status > sizeof (struct mtop))
+         {
+           errno = EOVERFLOW;
+           return -1;
+         }
+       
        for (; status > 0; status -= counter, argument += counter)
          {
            counter = safe_read (READ_SIDE (handle), argument, status);
diff --git a/lib/safe-read.c b/lib/safe-read.c
deleted file mode 100644 (file)
index 0cb1ede..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/* An interface to read and write that retries after interrupts.
-
-   Copyright (C) 1993, 1994, 1998, 2002, 2003, 2004, 2005, 2006 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.  */
-#ifdef SAFE_WRITE
-# include "safe-write.h"
-#else
-# include "safe-read.h"
-#endif
-
-/* Get ssize_t.  */
-#include <sys/types.h>
-#include <unistd.h>
-
-#include <errno.h>
-
-#ifdef EINTR
-# define IS_EINTR(x) ((x) == EINTR)
-#else
-# define IS_EINTR(x) 0
-#endif
-
-#include <limits.h>
-
-#ifdef SAFE_WRITE
-# define safe_rw safe_write
-# define rw write
-#else
-# define safe_rw safe_read
-# define rw read
-# undef const
-# define const /* empty */
-#endif
-
-/* Read(write) up to COUNT bytes at BUF from(to) descriptor FD, retrying if
-   interrupted.  Return the actual number of bytes read(written), zero for EOF,
-   or SAFE_READ_ERROR(SAFE_WRITE_ERROR) upon error.  */
-size_t
-safe_rw (int fd, void const *buf, size_t count)
-{
-  /* Work around a bug in Tru64 5.1.  Attempting to read more than
-     INT_MAX bytes fails with errno == EINVAL.  See
-     <http://lists.gnu.org/archive/html/bug-gnu-utils/2002-04/msg00010.html>.
-     When decreasing COUNT, keep it block-aligned.  */
-  enum { BUGGY_READ_MAXIMUM = INT_MAX & ~8191 };
-
-  for (;;)
-    {
-      ssize_t result = rw (fd, buf, count);
-
-      if (0 <= result)
-       return result;
-      else if (IS_EINTR (errno))
-       continue;
-      else if (errno == EINVAL && BUGGY_READ_MAXIMUM < count)
-       count = BUGGY_READ_MAXIMUM;
-      else
-       return result;
-    }
-}
diff --git a/lib/safe-read.h b/lib/safe-read.h
deleted file mode 100644 (file)
index ba19171..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* An interface to read() that retries after interrupts.
-   Copyright (C) 2002, 2006 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 <stddef.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#define SAFE_READ_ERROR ((size_t) -1)
-
-/* Read up to COUNT bytes at BUF from descriptor FD, retrying if interrupted.
-   Return the actual number of bytes read, zero for EOF, or SAFE_READ_ERROR
-   upon error.  */
-extern size_t safe_read (int fd, void *buf, size_t count);
-
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/lib/safe-write.c b/lib/safe-write.c
deleted file mode 100644 (file)
index b644f7c..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/* An interface to write that retries after interrupts.
-   Copyright (C) 2002 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/>.  */
-
-#define SAFE_WRITE
-#include "safe-read.c"
diff --git a/lib/safe-write.h b/lib/safe-write.h
deleted file mode 100644 (file)
index da036a9..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/* An interface to write() that retries after interrupts.
-   Copyright (C) 2002 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 <stddef.h>
-
-#define SAFE_WRITE_ERROR ((size_t) -1)
-
-/* Write up to COUNT bytes at BUF to descriptor FD, retrying if interrupted.
-   Return the actual number of bytes written, zero for EOF, or SAFE_WRITE_ERROR
-   upon error.  */
-extern size_t safe_write (int fd, const void *buf, size_t count);
diff --git a/lib/same-inode.h b/lib/same-inode.h
deleted file mode 100644 (file)
index 0632711..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Determine whether two stat buffers refer to the same file.
-
-   Copyright (C) 2006 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 SAME_INODE_H
-# define SAME_INODE_H 1
-
-# define SAME_INODE(Stat_buf_1, Stat_buf_2) \
-   ((Stat_buf_1).st_ino == (Stat_buf_2).st_ino \
-    && (Stat_buf_1).st_dev == (Stat_buf_2).st_dev)
-
-#endif
diff --git a/lib/save-cwd.c b/lib/save-cwd.c
deleted file mode 100644 (file)
index e158e8b..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/* save-cwd.c -- Save and restore current working directory.
-
-   Copyright (C) 1995, 1997, 1998, 2003, 2004, 2005, 2006 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.  */
-
-#include <config.h>
-
-#include "save-cwd.h"
-
-#include <errno.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include "chdir-long.h"
-#include "fcntl--.h"
-#include "xgetcwd.h"
-
-/* On systems without the fchdir function (WOE), pretend that open
-   always returns -1 so that save_cwd resorts to using xgetcwd.
-   Since chdir_long requires fchdir, use chdir instead.  */
-#if !HAVE_FCHDIR
-# undef open
-# define open(File, Flags) (-1)
-# undef fchdir
-# define fchdir(Fd) (abort (), -1)
-# undef chdir_long
-# define chdir_long(Dir) chdir (Dir)
-#endif
-
-/* Record the location of the current working directory in CWD so that
-   the program may change to other directories and later use restore_cwd
-   to return to the recorded location.  This function may allocate
-   space using malloc (via xgetcwd) or leave a file descriptor open;
-   use free_cwd to perform the necessary free or close.  Upon failure,
-   no memory is allocated, any locally opened file descriptors are
-   closed;  return non-zero -- in that case, free_cwd need not be
-   called, but doing so is ok.  Otherwise, return zero.
-
-   The `raison d'etre' for this interface is that the working directory
-   is sometimes inaccessible, and getcwd is not robust or as efficient.
-   So, we prefer to use the open/fchdir approach, but fall back on
-   getcwd if necessary.
-
-   Some systems lack fchdir altogether: e.g., OS/2, pre-2001 Cygwin,
-   SCO Xenix.  Also, SunOS 4 and Irix 5.3 provide the function, yet it
-   doesn't work for partitions on which auditing is enabled.  If
-   you're still using an obsolete system with these problems, please
-   send email to the maintainer of this code.  */
-
-int
-save_cwd (struct saved_cwd *cwd)
-{
-  cwd->name = NULL;
-
-  cwd->desc = open (".", O_RDONLY);
-  if (cwd->desc < 0)
-    {
-      cwd->name = xgetcwd ();
-      return cwd->name ? 0 : -1;
-    }
-
-  return 0;
-}
-
-/* Change to recorded location, CWD, in directory hierarchy.
-   Upon failure, return -1 (errno is set by chdir or fchdir).
-   Upon success, return zero.  */
-
-int
-restore_cwd (const struct saved_cwd *cwd)
-{
-  if (0 <= cwd->desc)
-    return fchdir (cwd->desc);
-  else
-    return chdir_long (cwd->name);
-}
-
-void
-free_cwd (struct saved_cwd *cwd)
-{
-  if (cwd->desc >= 0)
-    close (cwd->desc);
-  free (cwd->name);
-}
diff --git a/lib/save-cwd.h b/lib/save-cwd.h
deleted file mode 100644 (file)
index e23eb72..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Save and restore current working directory.
-
-   Copyright (C) 1995, 1997, 1998, 2003 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.  */
-
-#ifndef SAVE_CWD_H
-# define SAVE_CWD_H 1
-
-struct saved_cwd
-  {
-    int desc;
-    char *name;
-  };
-
-int save_cwd (struct saved_cwd *cwd);
-int restore_cwd (const struct saved_cwd *cwd);
-void free_cwd (struct saved_cwd *cwd);
-
-#endif /* SAVE_CWD_H */
diff --git a/lib/savedir.c b/lib/savedir.c
deleted file mode 100644 (file)
index b837414..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/* savedir.c -- save the list of files in a directory in a string
-
-   Copyright (C) 1990, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-   2006 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 David MacKenzie <djm@gnu.ai.mit.edu>. */
-
-#include <config.h>
-
-#include "savedir.h"
-
-#include <sys/types.h>
-
-#include <errno.h>
-
-#include <dirent.h>
-#ifndef _D_EXACT_NAMLEN
-# define _D_EXACT_NAMLEN(dp)   strlen ((dp)->d_name)
-#endif
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "openat.h"
-#include "xalloc.h"
-
-#ifndef NAME_SIZE_DEFAULT
-# define NAME_SIZE_DEFAULT 512
-#endif
-
-/* The results of opendir() in this file are not used with dirfd and fchdir,
-   therefore save some unnecessary work in fchdir.c.  */
-#undef opendir
-#undef closedir
-
-/* Return a freshly allocated string containing the file names
-   in directory DIRP, separated by '\0' characters;
-   the end is marked by two '\0' characters in a row.
-   Return NULL (setting errno) if DIRP cannot be read or closed.
-   If DIRP is NULL, return NULL without affecting errno.  */
-
-static char *
-savedirstream (DIR *dirp)
-{
-  char *name_space;
-  size_t allocated = NAME_SIZE_DEFAULT;
-  size_t used = 0;
-  int save_errno;
-
-  if (dirp == NULL)
-    return NULL;
-
-  name_space = xmalloc (allocated);
-
-  for (;;)
-    {
-      struct dirent const *dp;
-      char const *entry;
-
-      errno = 0;
-      dp = readdir (dirp);
-      if (! dp)
-       break;
-
-      /* Skip "", ".", and "..".  "" is returned by at least one buggy
-         implementation: Solaris 2.4 readdir on NFS file systems.  */
-      entry = dp->d_name;
-      if (entry[entry[0] != '.' ? 0 : entry[1] != '.' ? 1 : 2] != '\0')
-       {
-         size_t entry_size = _D_EXACT_NAMLEN (dp) + 1;
-         if (used + entry_size < used)
-           xalloc_die ();
-         if (allocated <= used + entry_size)
-           {
-             do
-               {
-                 if (2 * allocated < allocated)
-                   xalloc_die ();
-                 allocated *= 2;
-               }
-             while (allocated <= used + entry_size);
-
-             name_space = xrealloc (name_space, allocated);
-           }
-         memcpy (name_space + used, entry, entry_size);
-         used += entry_size;
-       }
-    }
-  name_space[used] = '\0';
-  save_errno = errno;
-  if (closedir (dirp) != 0)
-    save_errno = errno;
-  if (save_errno != 0)
-    {
-      free (name_space);
-      errno = save_errno;
-      return NULL;
-    }
-  return name_space;
-}
-
-/* Return a freshly allocated string containing the file names
-   in directory DIR, separated by '\0' characters;
-   the end is marked by two '\0' characters in a row.
-   Return NULL (setting errno) if DIR cannot be opened, read, or closed.  */
-
-char *
-savedir (char const *dir)
-{
-  return savedirstream (opendir (dir));
-}
-
-/* Return a freshly allocated string containing the file names
-   in directory FD, separated by '\0' characters;
-   the end is marked by two '\0' characters in a row.
-   Return NULL (setting errno) if FD cannot be read or closed.  */
-
-char *
-fdsavedir (int fd)
-{
-  return savedirstream (fdopendir (fd));
-}
diff --git a/lib/savedir.h b/lib/savedir.h
deleted file mode 100644 (file)
index 0c69641..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Save the list of files in a directory in a string.
-
-   Copyright (C) 1997, 1999, 2001, 2003, 2005 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 David MacKenzie <djm@gnu.ai.mit.edu>. */
-
-#if !defined SAVEDIR_H_
-# define SAVEDIR_H_
-
-char *savedir (char const *dir);
-char *fdsavedir (int fd);
-
-#endif
diff --git a/lib/setenv.c b/lib/setenv.c
deleted file mode 100644 (file)
index 83b52b8..0000000
+++ /dev/null
@@ -1,330 +0,0 @@
-/* Copyright (C) 1992,1995-1999,2000-2003,2005-2008 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
-   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 !_LIBC
-# include <config.h>
-#endif
-#include <alloca.h>
-
-/* Specification.  */
-#include <stdlib.h>
-
-#include <errno.h>
-#ifndef __set_errno
-# define __set_errno(ev) ((errno) = (ev))
-#endif
-
-#include <string.h>
-#if _LIBC || HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#if _LIBC || !HAVE_SETENV
-
-#if !_LIBC
-# include "malloca.h"
-#endif
-
-#if !_LIBC
-# define __environ     environ
-#endif
-
-#if _LIBC
-/* This lock protects against simultaneous modifications of `environ'.  */
-# include <bits/libc-lock.h>
-__libc_lock_define_initialized (static, envlock)
-# define LOCK  __libc_lock_lock (envlock)
-# define UNLOCK        __libc_lock_unlock (envlock)
-#else
-# define LOCK
-# define UNLOCK
-#endif
-
-/* In the GNU C library we must keep the namespace clean.  */
-#ifdef _LIBC
-# define setenv __setenv
-# define clearenv __clearenv
-# define tfind __tfind
-# define tsearch __tsearch
-#endif
-
-/* In the GNU C library implementation we try to be more clever and
-   allow arbitrarily many changes of the environment given that the used
-   values are from a small set.  Outside glibc this will eat up all
-   memory after a while.  */
-#if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \
-                     && defined __GNUC__)
-# define USE_TSEARCH   1
-# include <search.h>
-typedef int (*compar_fn_t) (const void *, const void *);
-
-/* This is a pointer to the root of the search tree with the known
-   values.  */
-static void *known_values;
-
-# define KNOWN_VALUE(Str) \
-  ({                                                                         \
-    void *value = tfind (Str, &known_values, (compar_fn_t) strcmp);          \
-    value != NULL ? *(char **) value : NULL;                                 \
-  })
-# define STORE_VALUE(Str) \
-  tsearch (Str, &known_values, (compar_fn_t) strcmp)
-
-#else
-# undef USE_TSEARCH
-
-# define KNOWN_VALUE(Str) NULL
-# define STORE_VALUE(Str) do { } while (0)
-
-#endif
-
-
-/* If this variable is not a null pointer we allocated the current
-   environment.  */
-static char **last_environ;
-
-
-/* This function is used by `setenv' and `putenv'.  The difference between
-   the two functions is that for the former must create a new string which
-   is then placed in the environment, while the argument of `putenv'
-   must be used directly.  This is all complicated by the fact that we try
-   to reuse values once generated for a `setenv' call since we can never
-   free the strings.  */
-int
-__add_to_environ (const char *name, const char *value, const char *combined,
-                 int replace)
-{
-  register char **ep;
-  register size_t size;
-  const size_t namelen = strlen (name);
-  const size_t vallen = value != NULL ? strlen (value) + 1 : 0;
-
-  LOCK;
-
-  /* We have to get the pointer now that we have the lock and not earlier
-     since another thread might have created a new environment.  */
-  ep = __environ;
-
-  size = 0;
-  if (ep != NULL)
-    {
-      for (; *ep != NULL; ++ep)
-       if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=')
-         break;
-       else
-         ++size;
-    }
-
-  if (ep == NULL || *ep == NULL)
-    {
-      char **new_environ;
-#ifdef USE_TSEARCH
-      char *new_value;
-#endif
-
-      /* We allocated this space; we can extend it.  */
-      new_environ =
-       (char **) (last_environ == NULL
-                  ? malloc ((size + 2) * sizeof (char *))
-                  : realloc (last_environ, (size + 2) * sizeof (char *)));
-      if (new_environ == NULL)
-       {
-         UNLOCK;
-         return -1;
-       }
-
-      /* If the whole entry is given add it.  */
-      if (combined != NULL)
-       /* We must not add the string to the search tree since it belongs
-          to the user.  */
-       new_environ[size] = (char *) combined;
-      else
-       {
-         /* See whether the value is already known.  */
-#ifdef USE_TSEARCH
-# ifdef _LIBC
-         new_value = (char *) alloca (namelen + 1 + vallen);
-         __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1),
-                    value, vallen);
-# else
-         new_value = (char *) malloca (namelen + 1 + vallen);
-         if (new_value == NULL)
-           {
-             __set_errno (ENOMEM);
-             UNLOCK;
-             return -1;
-           }
-         memcpy (new_value, name, namelen);
-         new_value[namelen] = '=';
-         memcpy (&new_value[namelen + 1], value, vallen);
-# endif
-
-         new_environ[size] = KNOWN_VALUE (new_value);
-         if (new_environ[size] == NULL)
-#endif
-           {
-             new_environ[size] = (char *) malloc (namelen + 1 + vallen);
-             if (new_environ[size] == NULL)
-               {
-#if defined USE_TSEARCH && !defined _LIBC
-                 freea (new_value);
-#endif
-                 __set_errno (ENOMEM);
-                 UNLOCK;
-                 return -1;
-               }
-
-#ifdef USE_TSEARCH
-             memcpy (new_environ[size], new_value, namelen + 1 + vallen);
-#else
-             memcpy (new_environ[size], name, namelen);
-             new_environ[size][namelen] = '=';
-             memcpy (&new_environ[size][namelen + 1], value, vallen);
-#endif
-             /* And save the value now.  We cannot do this when we remove
-                the string since then we cannot decide whether it is a
-                user string or not.  */
-             STORE_VALUE (new_environ[size]);
-           }
-#if defined USE_TSEARCH && !defined _LIBC
-         freea (new_value);
-#endif
-       }
-
-      if (__environ != last_environ)
-       memcpy ((char *) new_environ, (char *) __environ,
-               size * sizeof (char *));
-
-      new_environ[size + 1] = NULL;
-
-      last_environ = __environ = new_environ;
-    }
-  else if (replace)
-    {
-      char *np;
-
-      /* Use the user string if given.  */
-      if (combined != NULL)
-       np = (char *) combined;
-      else
-       {
-#ifdef USE_TSEARCH
-         char *new_value;
-# ifdef _LIBC
-         new_value = alloca (namelen + 1 + vallen);
-         __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1),
-                    value, vallen);
-# else
-         new_value = malloca (namelen + 1 + vallen);
-         if (new_value == NULL)
-           {
-             __set_errno (ENOMEM);
-             UNLOCK;
-             return -1;
-           }
-         memcpy (new_value, name, namelen);
-         new_value[namelen] = '=';
-         memcpy (&new_value[namelen + 1], value, vallen);
-# endif
-
-         np = KNOWN_VALUE (new_value);
-         if (np == NULL)
-#endif
-           {
-             np = malloc (namelen + 1 + vallen);
-             if (np == NULL)
-               {
-#if defined USE_TSEARCH && !defined _LIBC
-                 freea (new_value);
-#endif
-                 __set_errno (ENOMEM);
-                 UNLOCK;
-                 return -1;
-               }
-
-#ifdef USE_TSEARCH
-             memcpy (np, new_value, namelen + 1 + vallen);
-#else
-             memcpy (np, name, namelen);
-             np[namelen] = '=';
-             memcpy (&np[namelen + 1], value, vallen);
-#endif
-             /* And remember the value.  */
-             STORE_VALUE (np);
-           }
-#if defined USE_TSEARCH && !defined _LIBC
-         freea (new_value);
-#endif
-       }
-
-      *ep = np;
-    }
-
-  UNLOCK;
-
-  return 0;
-}
-
-int
-setenv (const char *name, const char *value, int replace)
-{
-  return __add_to_environ (name, value, NULL, replace);
-}
-
-/* The `clearenv' was planned to be added to POSIX.1 but probably
-   never made it.  Nevertheless the POSIX.9 standard (POSIX bindings
-   for Fortran 77) requires this function.  */
-int
-clearenv (void)
-{
-  LOCK;
-
-  if (__environ == last_environ && __environ != NULL)
-    {
-      /* We allocated this environment so we can free it.  */
-      free (__environ);
-      last_environ = NULL;
-    }
-
-  /* Clear the environment pointer removes the whole environment.  */
-  __environ = NULL;
-
-  UNLOCK;
-
-  return 0;
-}
-
-#ifdef _LIBC
-static void
-free_mem (void)
-{
-  /* Remove all traces.  */
-  clearenv ();
-
-  /* Now remove the search tree.  */
-  __tdestroy (known_values, free);
-  known_values = NULL;
-}
-text_set_element (__libc_subfreeres, free_mem);
-
-
-# undef setenv
-# undef clearenv
-weak_alias (__setenv, setenv)
-weak_alias (__clearenv, clearenv)
-#endif
-
-#endif /* _LIBC || !HAVE_SETENV */
diff --git a/lib/size_max.h b/lib/size_max.h
deleted file mode 100644 (file)
index 09e6071..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* size_max.h -- declare SIZE_MAX through system headers
-   Copyright (C) 2005-2006 Free Software Foundation, Inc.
-   Written by Simon Josefsson.
-
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef GNULIB_SIZE_MAX_H
-#define GNULIB_SIZE_MAX_H
-
-/* Get SIZE_MAX declaration on systems like Solaris 7/8/9.  */
-# include <limits.h>
-/* Get SIZE_MAX declaration on systems like glibc 2.  */
-# if HAVE_STDINT_H
-#  include <stdint.h>
-# endif
-/* On systems where these include files don't define it, SIZE_MAX is defined
-   in config.h.  */
-
-#endif /* GNULIB_SIZE_MAX_H */
diff --git a/lib/sleep.c b/lib/sleep.c
deleted file mode 100644 (file)
index 9c56b9b..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Pausing execution of the current thread.
-   Copyright (C) 2007 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 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>
-
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-
-# define WIN32_LEAN_AND_MEAN  /* avoid including junk */
-# include <windows.h>
-
-unsigned int
-sleep (unsigned int seconds)
-{
-  unsigned int remaining;
-
-  /* Sleep for 1 second many times, because
-       1. Sleep is not interruptiple by Ctrl-C,
-       2. we want to avoid arithmetic overflow while multiplying with 1000.  */
-  for (remaining = seconds; remaining > 0; remaining--)
-    Sleep (1000);
-
-  return remaining;
-}
-
-#else
-
- #error "Please port gnulib sleep.c to your platform, possibly using usleep() or select(), then report this to bug-gnulib."
-
-#endif
diff --git a/lib/snprintf.c b/lib/snprintf.c
deleted file mode 100644 (file)
index 6ebdaf3..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Formatted output to strings.
-   Copyright (C) 2004, 2006-2008 Free Software Foundation, Inc.
-   Written by Simon Josefsson and Paul Eggert.
-
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include <stdio.h>
-
-#include <errno.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "vasnprintf.h"
-
-/* Print formatted output to string STR.  Similar to sprintf, but
-   additional length SIZE limit how much is written into STR.  Returns
-   string length of formatted string (which may be larger than SIZE).
-   STR may be NULL, in which case nothing will be written.  On error,
-   return a negative value.  */
-int
-snprintf (char *str, size_t size, const char *format, ...)
-{
-  char *output;
-  size_t len;
-  size_t lenbuf = size;
-  va_list args;
-
-  va_start (args, format);
-  output = vasnprintf (str, &lenbuf, format, args);
-  len = lenbuf;
-  va_end (args);
-
-  if (!output)
-    return -1;
-
-  if (output != str)
-    {
-      if (size)
-       {
-         size_t pruned_len = (len < size ? len : size - 1);
-         memcpy (str, output, pruned_len);
-         str[pruned_len] = '\0';
-       }
-
-      free (output);
-    }
-
-  if (INT_MAX < len)
-    {
-      errno = EOVERFLOW;
-      return -1;
-    }
-
-  return len;
-}
diff --git a/lib/stat-macros.h b/lib/stat-macros.h
deleted file mode 100644 (file)
index 690216c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/* All the mode bits that can be affected by chmod.  */
-#define CHMOD_MODE_BITS \
-  (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
diff --git a/lib/stat-time.h b/lib/stat-time.h
deleted file mode 100644 (file)
index 8957ab4..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/* stat-related time functions.
-
-   Copyright (C) 2005, 2007 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 STAT_TIME_H
-#define STAT_TIME_H 1
-
-#include <sys/stat.h>
-#include <time.h>
-
-/* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type
-   struct timespec, if available.  If not, then STAT_TIMESPEC_NS (ST,
-   ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST,
-   if available.  ST_XTIM can be st_atim, st_ctim, st_mtim, or st_birthtim
-   for access, status change, data modification, or birth (creation)
-   time respectively.
-
-   These macros are private to stat-time.h.  */
-#if defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC
-# ifdef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC
-#  define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim)
-# else
-#  define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.tv_nsec)
-# endif
-#elif defined HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC
-# define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim##espec)
-#elif defined HAVE_STRUCT_STAT_ST_ATIMENSEC
-# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim##ensec)
-#elif defined HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC
-# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.st__tim.tv_nsec)
-#endif
-
-/* Return the nanosecond component of *ST's access time.  */
-static inline long int
-get_stat_atime_ns (struct stat const *st)
-{
-# if defined STAT_TIMESPEC
-  return STAT_TIMESPEC (st, st_atim).tv_nsec;
-# elif defined STAT_TIMESPEC_NS
-  return STAT_TIMESPEC_NS (st, st_atim);
-# else
-  return 0;
-# endif
-}
-
-/* Return the nanosecond component of *ST's status change time.  */
-static inline long int
-get_stat_ctime_ns (struct stat const *st)
-{
-# if defined STAT_TIMESPEC
-  return STAT_TIMESPEC (st, st_ctim).tv_nsec;
-# elif defined STAT_TIMESPEC_NS
-  return STAT_TIMESPEC_NS (st, st_ctim);
-# else
-  return 0;
-# endif
-}
-
-/* Return the nanosecond component of *ST's data modification time.  */
-static inline long int
-get_stat_mtime_ns (struct stat const *st)
-{
-# if defined STAT_TIMESPEC
-  return STAT_TIMESPEC (st, st_mtim).tv_nsec;
-# elif defined STAT_TIMESPEC_NS
-  return STAT_TIMESPEC_NS (st, st_mtim);
-# else
-  return 0;
-# endif
-}
-
-/* Return the nanosecond component of *ST's birth time.  */
-static inline long int
-get_stat_birthtime_ns (struct stat const *st)
-{
-# if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC
-  return STAT_TIMESPEC (st, st_birthtim).tv_nsec;
-# elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC
-  return STAT_TIMESPEC_NS (st, st_birthtim);
-# else
-  /* Avoid a "parameter unused" warning.  */
-  (void) st;
-  return 0;
-# endif
-}
-
-/* Return *ST's access time.  */
-static inline struct timespec
-get_stat_atime (struct stat const *st)
-{
-#ifdef STAT_TIMESPEC
-  return STAT_TIMESPEC (st, st_atim);
-#else
-  struct timespec t;
-  t.tv_sec = st->st_atime;
-  t.tv_nsec = get_stat_atime_ns (st);
-  return t;
-#endif
-}
-
-/* Return *ST's status change time.  */
-static inline struct timespec
-get_stat_ctime (struct stat const *st)
-{
-#ifdef STAT_TIMESPEC
-  return STAT_TIMESPEC (st, st_ctim);
-#else
-  struct timespec t;
-  t.tv_sec = st->st_ctime;
-  t.tv_nsec = get_stat_ctime_ns (st);
-  return t;
-#endif
-}
-
-/* Return *ST's data modification time.  */
-static inline struct timespec
-get_stat_mtime (struct stat const *st)
-{
-#ifdef STAT_TIMESPEC
-  return STAT_TIMESPEC (st, st_mtim);
-#else
-  struct timespec t;
-  t.tv_sec = st->st_mtime;
-  t.tv_nsec = get_stat_mtime_ns (st);
-  return t;
-#endif
-}
-
-/* Return *ST's birth time, if available; otherwise return a value
-   with negative tv_nsec.  */
-static inline struct timespec
-get_stat_birthtime (struct stat const *st)
-{
-  struct timespec t;
-
-#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \
-     || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC)
-  t = STAT_TIMESPEC (st, st_birthtim);
-#elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC
-  t.tv_sec = st->st_birthtime;
-  t.tv_nsec = st->st_birthtimensec;
-#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-  /* Woe32 native platforms (but not Cygwin) put the "file creation
-     time" in st_ctime (!).  See
-     <http://msdn2.microsoft.com/de-de/library/14h5k7ff(VS.80).aspx>.  */
-  t.tv_sec = st->st_ctime;
-  t.tv_nsec = 0;
-#else
-  /* Birth time is not supported.  Set tv_sec to avoid undefined behavior.  */
-  t.tv_sec = -1;
-  t.tv_nsec = -1;
-  /* Avoid a "parameter unused" warning.  */
-  (void) st;
-#endif
-
-#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \
-     || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC \
-     || defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC)
-  /* FreeBSD and NetBSD sometimes signal the absence of knowledge by
-     using zero.  Attempt to work around this problem.  Alas, this can
-     report failure even for valid time stamps.  Also, NetBSD
-     sometimes returns junk in the birth time fields; work around this
-     bug if it it is detected.  There's no need to detect negative
-     tv_nsec junk as negative tv_nsec already indicates an error.  */
-  if (t.tv_sec == 0 || 1000000000 <= t.tv_nsec)
-    t.tv_nsec = -1;
-#endif
-
-  return t;
-}
-
-#endif
diff --git a/lib/stdarg.in.h b/lib/stdarg.in.h
deleted file mode 100644 (file)
index 6e1d4b5..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Substitute for and wrapper around <stdarg.h>.
-   Copyright (C) 2008 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _GL_STDARG_H
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-
-/* The include_next requires a split double-inclusion guard.  */
-#@INCLUDE_NEXT@ @NEXT_STDARG_H@
-
-#ifndef _GL_STDARG_H
-#define _GL_STDARG_H
-
-#ifndef va_copy
-# define va_copy(a,b) ((a) = (b))
-#endif
-
-#endif /* _GL_STDARG_H */
-#endif /* _GL_STDARG_H */
diff --git a/lib/stdbool.in.h b/lib/stdbool.in.h
deleted file mode 100644 (file)
index d95f723..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Copyright (C) 2001-2003, 2006-2008 Free Software Foundation, Inc.
-   Written by Bruno Haible <haible@clisp.cons.org>, 2001.
-
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _GL_STDBOOL_H
-#define _GL_STDBOOL_H
-
-/* ISO C 99 <stdbool.h> for platforms that lack it.  */
-
-/* Usage suggestions:
-
-   Programs that use <stdbool.h> should be aware of some limitations
-   and standards compliance issues.
-
-   Standards compliance:
-
-       - <stdbool.h> must be #included before 'bool', 'false', 'true'
-         can be used.
-
-       - You cannot assume that sizeof (bool) == 1.
-
-       - Programs should not undefine the macros bool, true, and false,
-         as C99 lists that as an "obsolescent feature".
-
-   Limitations of this substitute, when used in a C89 environment:
-
-       - <stdbool.h> must be #included before the '_Bool' type can be used.
-
-       - You cannot assume that _Bool is a typedef; it might be a macro.
-
-       - Bit-fields of type 'bool' are not supported.  Portable code
-         should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'.
-
-       - In C99, casts and automatic conversions to '_Bool' or 'bool' are
-         performed in such a way that every nonzero value gets converted
-         to 'true', and zero gets converted to 'false'.  This doesn't work
-         with this substitute.  With this substitute, only the values 0 and 1
-         give the expected result when converted to _Bool' or 'bool'.
-
-   Also, it is suggested that programs use 'bool' rather than '_Bool';
-   this isn't required, but 'bool' is more common.  */
-
-
-/* 7.16. Boolean type and values */
-
-/* BeOS <sys/socket.h> already #defines false 0, true 1.  We use the same
-   definitions below, but temporarily we have to #undef them.  */
-#if defined __BEOS__ && !defined __HAIKU__
-# include <OS.h> /* defines bool but not _Bool */
-# undef false
-# undef true
-#endif
-
-/* For the sake of symbolic names in gdb, we define true and false as
-   enum constants, not only as macros.
-   It is tempting to write
-      typedef enum { false = 0, true = 1 } _Bool;
-   so that gdb prints values of type 'bool' symbolically. But if we do
-   this, values of type '_Bool' may promote to 'int' or 'unsigned int'
-   (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int'
-   (see ISO C 99 6.3.1.1.(2)).  So we add a negative value to the
-   enum; this ensures that '_Bool' promotes to 'int'.  */
-#if defined __cplusplus || (defined __BEOS__ && !defined __HAIKU__)
-  /* A compiler known to have 'bool'.  */
-  /* If the compiler already has both 'bool' and '_Bool', we can assume they
-     are the same types.  */
-# if !@HAVE__BOOL@
-typedef bool _Bool;
-# endif
-#else
-# if !defined __GNUC__
-   /* If @HAVE__BOOL@:
-        Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when
-        the built-in _Bool type is used.  See
-          http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
-          http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
-          http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
-        Similar bugs are likely with other compilers as well; this file
-        wouldn't be used if <stdbool.h> was working.
-        So we override the _Bool type.
-      If !@HAVE__BOOL@:
-        Need to define _Bool ourselves. As 'signed char' or as an enum type?
-        Use of a typedef, with SunPRO C, leads to a stupid
-          "warning: _Bool is a keyword in ISO C99".
-        Use of an enum type, with IRIX cc, leads to a stupid
-          "warning(1185): enumerated type mixed with another type".
-        Even the existence of an enum type, without a typedef,
-          "Invalid enumerator. (badenum)" with HP-UX cc on Tru64.
-        The only benefit of the enum, debuggability, is not important
-        with these compilers.  So use 'signed char' and no enum.  */
-#  define _Bool signed char
-# else
-   /* With this compiler, trust the _Bool type if the compiler has it.  */
-#  if !@HAVE__BOOL@
-typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool;
-#  endif
-# endif
-#endif
-#define bool _Bool
-
-/* The other macros must be usable in preprocessor directives.  */
-#define false 0
-#define true 1
-#define __bool_true_false_are_defined 1
-
-#endif /* _GL_STDBOOL_H */
diff --git a/lib/stdint.in.h b/lib/stdint.in.h
deleted file mode 100644 (file)
index 74d4d3c..0000000
+++ /dev/null
@@ -1,569 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Copyright (C) 2001-2002, 2004-2009 Free Software Foundation, Inc.
-   Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
-   This file is part of gnulib.
-
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/*
- * ISO C 99 <stdint.h> for platforms that lack it.
- * <http://www.opengroup.org/susv3xbd/stdint.h.html>
- */
-
-#ifndef _GL_STDINT_H
-
-/* When including a system file that in turn includes <inttypes.h>,
-   use the system <inttypes.h>, not our substitute.  This avoids
-   problems with (for example) VMS, whose <sys/bitypes.h> includes
-   <inttypes.h>.  */
-#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
-
-/* Get those types that are already defined in other system include
-   files, so that we can "#define int8_t signed char" below without
-   worrying about a later system include file containing a "typedef
-   signed char int8_t;" that will get messed up by our macro.  Our
-   macros should all be consistent with the system versions, except
-   for the "fast" types and macros, which we recommend against using
-   in public interfaces due to compiler differences.  */
-
-#if @HAVE_STDINT_H@
-# if defined __sgi && ! defined __c99
-   /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users
-      with "This header file is to be used only for c99 mode compilations"
-      diagnostics.  */
-#  define __STDINT_H__
-# endif
-  /* Other systems may have an incomplete or buggy <stdint.h>.
-     Include it before <inttypes.h>, since any "#include <stdint.h>"
-     in <inttypes.h> would reinclude us, skipping our contents because
-     _GL_STDINT_H is defined.
-     The include_next requires a split double-inclusion guard.  */
-# if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-# endif
-# @INCLUDE_NEXT@ @NEXT_STDINT_H@
-#endif
-
-#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-#define _GL_STDINT_H
-
-/* <sys/types.h> defines some of the stdint.h types as well, on glibc,
-   IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).
-   AIX 5.2 <sys/types.h> isn't needed and causes troubles.
-   MacOS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but
-   relies on the system <stdint.h> definitions, so include
-   <sys/types.h> after @NEXT_STDINT_H@.  */
-#if @HAVE_SYS_TYPES_H@ && ! defined _AIX
-# include <sys/types.h>
-#endif
-
-/* Get LONG_MIN, LONG_MAX, ULONG_MAX.  */
-#include <limits.h>
-
-#if @HAVE_INTTYPES_H@
-  /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines
-     int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__.
-     <inttypes.h> also defines intptr_t and uintptr_t.  */
-# include <inttypes.h>
-#elif @HAVE_SYS_INTTYPES_H@
-  /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
-     the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX.  */
-# include <sys/inttypes.h>
-#endif
-
-#if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__
-  /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines
-     int{8,16,32,64}_t and __BIT_TYPES_DEFINED__.  In libc5 >= 5.2.2 it is
-     included by <sys/types.h>.  */
-# include <sys/bitypes.h>
-#endif
-
-#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
-
-/* Minimum and maximum values for a integer type under the usual assumption.
-   Return an unspecified value if BITS == 0, adding a check to pacify
-   picky compilers.  */
-
-#define _STDINT_MIN(signed, bits, zero) \
-  ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero))
-
-#define _STDINT_MAX(signed, bits, zero) \
-  ((signed) \
-   ? ~ _STDINT_MIN (signed, bits, zero) \
-   : /* The expression for the unsigned case.  The subtraction of (signed) \
-       is a nop in the unsigned case and avoids "signed integer overflow" \
-       warnings in the signed case.  */ \
-     ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
-
-/* 7.18.1.1. Exact-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits.  */
-
-#undef int8_t
-#undef uint8_t
-typedef signed char gl_int8_t;
-typedef unsigned char gl_uint8_t;
-#define int8_t gl_int8_t
-#define uint8_t gl_uint8_t
-
-#undef int16_t
-#undef uint16_t
-typedef short int gl_int16_t;
-typedef unsigned short int gl_uint16_t;
-#define int16_t gl_int16_t
-#define uint16_t gl_uint16_t
-
-#undef int32_t
-#undef uint32_t
-typedef int gl_int32_t;
-typedef unsigned int gl_uint32_t;
-#define int32_t gl_int32_t
-#define uint32_t gl_uint32_t
-
-/* Do not undefine int64_t if gnulib is not being used with 64-bit
-   types, since otherwise it breaks platforms like Tandem/NSK.  */
-#if LONG_MAX >> 31 >> 31 == 1
-# undef int64_t
-typedef long int gl_int64_t;
-# define int64_t gl_int64_t
-# define GL_INT64_T
-#elif defined _MSC_VER
-# undef int64_t
-typedef __int64 gl_int64_t;
-# define int64_t gl_int64_t
-# define GL_INT64_T
-#elif @HAVE_LONG_LONG_INT@
-# undef int64_t
-typedef long long int gl_int64_t;
-# define int64_t gl_int64_t
-# define GL_INT64_T
-#endif
-
-#if ULONG_MAX >> 31 >> 31 >> 1 == 1
-# undef uint64_t
-typedef unsigned long int gl_uint64_t;
-# define uint64_t gl_uint64_t
-# define GL_UINT64_T
-#elif defined _MSC_VER
-# undef uint64_t
-typedef unsigned __int64 gl_uint64_t;
-# define uint64_t gl_uint64_t
-# define GL_UINT64_T
-#elif @HAVE_UNSIGNED_LONG_LONG_INT@
-# undef uint64_t
-typedef unsigned long long int gl_uint64_t;
-# define uint64_t gl_uint64_t
-# define GL_UINT64_T
-#endif
-
-/* Avoid collision with Solaris 2.5.1 <pthread.h> etc.  */
-#define _UINT8_T
-#define _UINT32_T
-#define _UINT64_T
-
-
-/* 7.18.1.2. Minimum-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
-   are the same as the corresponding N_t types.  */
-
-#undef int_least8_t
-#undef uint_least8_t
-#undef int_least16_t
-#undef uint_least16_t
-#undef int_least32_t
-#undef uint_least32_t
-#undef int_least64_t
-#undef uint_least64_t
-#define int_least8_t int8_t
-#define uint_least8_t uint8_t
-#define int_least16_t int16_t
-#define uint_least16_t uint16_t
-#define int_least32_t int32_t
-#define uint_least32_t uint32_t
-#ifdef GL_INT64_T
-# define int_least64_t int64_t
-#endif
-#ifdef GL_UINT64_T
-# define uint_least64_t uint64_t
-#endif
-
-/* 7.18.1.3. Fastest minimum-width integer types */
-
-/* Note: Other <stdint.h> substitutes may define these types differently.
-   It is not recommended to use these types in public header files. */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
-   are taken from the same list of types.  Assume that 'long int'
-   is fast enough for all narrower integers.  */
-
-#undef int_fast8_t
-#undef uint_fast8_t
-#undef int_fast16_t
-#undef uint_fast16_t
-#undef int_fast32_t
-#undef uint_fast32_t
-#undef int_fast64_t
-#undef uint_fast64_t
-typedef long int gl_int_fast8_t;
-typedef unsigned long int gl_uint_fast8_t;
-typedef long int gl_int_fast16_t;
-typedef unsigned long int gl_uint_fast16_t;
-typedef long int gl_int_fast32_t;
-typedef unsigned long int gl_uint_fast32_t;
-#define int_fast8_t gl_int_fast8_t
-#define uint_fast8_t gl_uint_fast8_t
-#define int_fast16_t gl_int_fast16_t
-#define uint_fast16_t gl_uint_fast16_t
-#define int_fast32_t gl_int_fast32_t
-#define uint_fast32_t gl_uint_fast32_t
-#ifdef GL_INT64_T
-# define int_fast64_t int64_t
-#endif
-#ifdef GL_UINT64_T
-# define uint_fast64_t uint64_t
-#endif
-
-/* 7.18.1.4. Integer types capable of holding object pointers */
-
-#undef intptr_t
-#undef uintptr_t
-typedef long int gl_intptr_t;
-typedef unsigned long int gl_uintptr_t;
-#define intptr_t gl_intptr_t
-#define uintptr_t gl_uintptr_t
-
-/* 7.18.1.5. Greatest-width integer types */
-
-/* Note: These types are compiler dependent. It may be unwise to use them in
-   public header files. */
-
-#undef intmax_t
-#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
-typedef long long int gl_intmax_t;
-# define intmax_t gl_intmax_t
-#elif defined GL_INT64_T
-# define intmax_t int64_t
-#else
-typedef long int gl_intmax_t;
-# define intmax_t gl_intmax_t
-#endif
-
-#undef uintmax_t
-#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
-typedef unsigned long long int gl_uintmax_t;
-# define uintmax_t gl_uintmax_t
-#elif defined GL_UINT64_T
-# define uintmax_t uint64_t
-#else
-typedef unsigned long int gl_uintmax_t;
-# define uintmax_t gl_uintmax_t
-#endif
-
-/* Verify that intmax_t and uintmax_t have the same size.  Too much code
-   breaks if this is not the case.  If this check fails, the reason is likely
-   to be found in the autoconf macros.  */
-typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) - 1];
-
-/* 7.18.2. Limits of specified-width integer types */
-
-#if ! defined __cplusplus || defined __STDC_LIMIT_MACROS
-
-/* 7.18.2.1. Limits of exact-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits.  */
-
-#undef INT8_MIN
-#undef INT8_MAX
-#undef UINT8_MAX
-#define INT8_MIN  (~ INT8_MAX)
-#define INT8_MAX  127
-#define UINT8_MAX  255
-
-#undef INT16_MIN
-#undef INT16_MAX
-#undef UINT16_MAX
-#define INT16_MIN  (~ INT16_MAX)
-#define INT16_MAX  32767
-#define UINT16_MAX  65535
-
-#undef INT32_MIN
-#undef INT32_MAX
-#undef UINT32_MAX
-#define INT32_MIN  (~ INT32_MAX)
-#define INT32_MAX  2147483647
-#define UINT32_MAX  4294967295U
-
-#undef INT64_MIN
-#undef INT64_MAX
-#ifdef GL_INT64_T
-/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0
-   evaluates the latter incorrectly in preprocessor expressions.  */
-# define INT64_MIN  (- INTMAX_C (1) << 63)
-# define INT64_MAX  INTMAX_C (9223372036854775807)
-#endif
-
-#undef UINT64_MAX
-#ifdef GL_UINT64_T
-# define UINT64_MAX  UINTMAX_C (18446744073709551615)
-#endif
-
-/* 7.18.2.2. Limits of minimum-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
-   are the same as the corresponding N_t types.  */
-
-#undef INT_LEAST8_MIN
-#undef INT_LEAST8_MAX
-#undef UINT_LEAST8_MAX
-#define INT_LEAST8_MIN  INT8_MIN
-#define INT_LEAST8_MAX  INT8_MAX
-#define UINT_LEAST8_MAX  UINT8_MAX
-
-#undef INT_LEAST16_MIN
-#undef INT_LEAST16_MAX
-#undef UINT_LEAST16_MAX
-#define INT_LEAST16_MIN  INT16_MIN
-#define INT_LEAST16_MAX  INT16_MAX
-#define UINT_LEAST16_MAX  UINT16_MAX
-
-#undef INT_LEAST32_MIN
-#undef INT_LEAST32_MAX
-#undef UINT_LEAST32_MAX
-#define INT_LEAST32_MIN  INT32_MIN
-#define INT_LEAST32_MAX  INT32_MAX
-#define UINT_LEAST32_MAX  UINT32_MAX
-
-#undef INT_LEAST64_MIN
-#undef INT_LEAST64_MAX
-#ifdef GL_INT64_T
-# define INT_LEAST64_MIN  INT64_MIN
-# define INT_LEAST64_MAX  INT64_MAX
-#endif
-
-#undef UINT_LEAST64_MAX
-#ifdef GL_UINT64_T
-# define UINT_LEAST64_MAX  UINT64_MAX
-#endif
-
-/* 7.18.2.3. Limits of fastest minimum-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
-   are taken from the same list of types.  */
-
-#undef INT_FAST8_MIN
-#undef INT_FAST8_MAX
-#undef UINT_FAST8_MAX
-#define INT_FAST8_MIN  LONG_MIN
-#define INT_FAST8_MAX  LONG_MAX
-#define UINT_FAST8_MAX  ULONG_MAX
-
-#undef INT_FAST16_MIN
-#undef INT_FAST16_MAX
-#undef UINT_FAST16_MAX
-#define INT_FAST16_MIN  LONG_MIN
-#define INT_FAST16_MAX  LONG_MAX
-#define UINT_FAST16_MAX  ULONG_MAX
-
-#undef INT_FAST32_MIN
-#undef INT_FAST32_MAX
-#undef UINT_FAST32_MAX
-#define INT_FAST32_MIN  LONG_MIN
-#define INT_FAST32_MAX  LONG_MAX
-#define UINT_FAST32_MAX  ULONG_MAX
-
-#undef INT_FAST64_MIN
-#undef INT_FAST64_MAX
-#ifdef GL_INT64_T
-# define INT_FAST64_MIN  INT64_MIN
-# define INT_FAST64_MAX  INT64_MAX
-#endif
-
-#undef UINT_FAST64_MAX
-#ifdef GL_UINT64_T
-# define UINT_FAST64_MAX  UINT64_MAX
-#endif
-
-/* 7.18.2.4. Limits of integer types capable of holding object pointers */
-
-#undef INTPTR_MIN
-#undef INTPTR_MAX
-#undef UINTPTR_MAX
-#define INTPTR_MIN  LONG_MIN
-#define INTPTR_MAX  LONG_MAX
-#define UINTPTR_MAX  ULONG_MAX
-
-/* 7.18.2.5. Limits of greatest-width integer types */
-
-#undef INTMAX_MIN
-#undef INTMAX_MAX
-#ifdef INT64_MAX
-# define INTMAX_MIN  INT64_MIN
-# define INTMAX_MAX  INT64_MAX
-#else
-# define INTMAX_MIN  INT32_MIN
-# define INTMAX_MAX  INT32_MAX
-#endif
-
-#undef UINTMAX_MAX
-#ifdef UINT64_MAX
-# define UINTMAX_MAX  UINT64_MAX
-#else
-# define UINTMAX_MAX  UINT32_MAX
-#endif
-
-/* 7.18.3. Limits of other integer types */
-
-/* ptrdiff_t limits */
-#undef PTRDIFF_MIN
-#undef PTRDIFF_MAX
-#if @APPLE_UNIVERSAL_BUILD@
-# if _LP64
-#  define PTRDIFF_MIN  _STDINT_MIN (1, 64, 0l)
-#  define PTRDIFF_MAX  _STDINT_MAX (1, 64, 0l)
-# else
-#  define PTRDIFF_MIN  _STDINT_MIN (1, 32, 0)
-#  define PTRDIFF_MAX  _STDINT_MAX (1, 32, 0)
-# endif
-#else
-# define PTRDIFF_MIN  \
-    _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
-# define PTRDIFF_MAX  \
-    _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
-#endif
-
-/* sig_atomic_t limits */
-#undef SIG_ATOMIC_MIN
-#undef SIG_ATOMIC_MAX
-#define SIG_ATOMIC_MIN  \
-   _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
-               0@SIG_ATOMIC_T_SUFFIX@)
-#define SIG_ATOMIC_MAX  \
-   _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
-               0@SIG_ATOMIC_T_SUFFIX@)
-
-
-/* size_t limit */
-#undef SIZE_MAX
-#if @APPLE_UNIVERSAL_BUILD@
-# if _LP64
-#  define SIZE_MAX  _STDINT_MAX (0, 64, 0ul)
-# else
-#  define SIZE_MAX  _STDINT_MAX (0, 32, 0ul)
-# endif
-#else
-# define SIZE_MAX  _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@)
-#endif
-
-/* wchar_t limits */
-/* Get WCHAR_MIN, WCHAR_MAX.
-   This include is not on the top, above, because on OSF/1 4.0 we have a sequence of nested
-   includes <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes
-   <stdint.h> and assumes its types are already defined.  */
-#if ! (defined WCHAR_MIN && defined WCHAR_MAX)
-# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
-# include <wchar.h>
-# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
-#endif
-#undef WCHAR_MIN
-#undef WCHAR_MAX
-#define WCHAR_MIN  \
-   _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
-#define WCHAR_MAX  \
-   _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
-
-/* wint_t limits */
-#undef WINT_MIN
-#undef WINT_MAX
-#define WINT_MIN  \
-   _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
-#define WINT_MAX  \
-   _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
-
-#endif /* !defined __cplusplus || defined __STDC_LIMIT_MACROS */
-
-/* 7.18.4. Macros for integer constants */
-
-#if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS
-
-/* 7.18.4.1. Macros for minimum-width integer constants */
-/* According to ISO C 99 Technical Corrigendum 1 */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits, and int is 32 bits.  */
-
-#undef INT8_C
-#undef UINT8_C
-#define INT8_C(x) x
-#define UINT8_C(x) x
-
-#undef INT16_C
-#undef UINT16_C
-#define INT16_C(x) x
-#define UINT16_C(x) x
-
-#undef INT32_C
-#undef UINT32_C
-#define INT32_C(x) x
-#define UINT32_C(x) x ## U
-
-#undef INT64_C
-#undef UINT64_C
-#if LONG_MAX >> 31 >> 31 == 1
-# define INT64_C(x) x##L
-#elif defined _MSC_VER
-# define INT64_C(x) x##i64
-#elif @HAVE_LONG_LONG_INT@
-# define INT64_C(x) x##LL
-#endif
-#if ULONG_MAX >> 31 >> 31 >> 1 == 1
-# define UINT64_C(x) x##UL
-#elif defined _MSC_VER
-# define UINT64_C(x) x##ui64
-#elif @HAVE_UNSIGNED_LONG_LONG_INT@
-# define UINT64_C(x) x##ULL
-#endif
-
-/* 7.18.4.2. Macros for greatest-width integer constants */
-
-#undef INTMAX_C
-#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
-# define INTMAX_C(x)   x##LL
-#elif defined GL_INT64_T
-# define INTMAX_C(x)   INT64_C(x)
-#else
-# define INTMAX_C(x)   x##L
-#endif
-
-#undef UINTMAX_C
-#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
-# define UINTMAX_C(x)  x##ULL
-#elif defined GL_UINT64_T
-# define UINTMAX_C(x)  UINT64_C(x)
-#else
-# define UINTMAX_C(x)  x##UL
-#endif
-
-#endif /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */
-
-#endif /* _GL_STDINT_H */
-#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */
diff --git a/lib/stdio-impl.h b/lib/stdio-impl.h
deleted file mode 100644 (file)
index c803e88..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/* Implementation details of FILE streams.
-   Copyright (C) 2007-2008 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/>.  */
-
-/* Many stdio implementations have the same logic and therefore can share
-   the same implementation of stdio extension API, except that some fields
-   have different naming conventions, or their access requires some casts.  */
-
-
-/* BSD stdio derived implementations.  */
-
-#if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */
-
-# if defined __DragonFly__          /* DragonFly */
-  /* See <http://www.dragonflybsd.org/cvsweb/src/lib/libc/stdio/priv_stdio.h?rev=HEAD&content-type=text/x-cvsweb-markup>.  */
-#  define fp_ ((struct { struct __FILE_public pub; \
-                        struct { unsigned char *_base; int _size; } _bf; \
-                        void *cookie; \
-                        void *_close; \
-                        void *_read; \
-                        void *_seek; \
-                        void *_write; \
-                        struct { unsigned char *_base; int _size; } _ub; \
-                        int _ur; \
-                        unsigned char _ubuf[3]; \
-                        unsigned char _nbuf[1]; \
-                        struct { unsigned char *_base; int _size; } _lb; \
-                        int _blksize; \
-                        fpos_t _offset; \
-                        /* More fields, not relevant here.  */ \
-                      } *) fp)
-  /* See <http://www.dragonflybsd.org/cvsweb/src/include/stdio.h?rev=HEAD&content-type=text/x-cvsweb-markup>.  */
-#  define _p pub._p
-#  define _flags pub._flags
-#  define _r pub._r
-#  define _w pub._w
-# else
-#  define fp_ fp
-# endif
-
-# if defined __NetBSD__ || defined __OpenBSD__ /* NetBSD, OpenBSD */
-  /* See <http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
-     and <http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup> */
-  struct __sfileext
-    {
-      struct  __sbuf _ub; /* ungetc buffer */
-      /* More fields, not relevant here.  */
-    };
-#  define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub
-# else                                         /* FreeBSD, DragonFly, MacOS X, Cygwin */
-#  define fp_ub fp_->_ub
-# endif
-
-# define HASUB(fp) (fp_ub._base != NULL)
-
-#endif
-
-
-/* SystemV derived implementations.  */
-
-#if defined _IOERR
-
-# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */
-#  define fp_ ((struct { unsigned char *_ptr; \
-                        unsigned char *_base; \
-                        unsigned char *_end; \
-                        long _cnt; \
-                        int _file; \
-                        unsigned int _flag; \
-                      } *) fp)
-# else
-#  define fp_ fp
-# endif
-
-# if defined _SCO_DS                /* OpenServer */
-#  define _cnt __cnt
-#  define _ptr __ptr
-#  define _base __base
-#  define _flag __flag
-# endif
-
-#endif
diff --git a/lib/stdio-write.c b/lib/stdio-write.c
deleted file mode 100644 (file)
index f1d0fcb..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/* POSIX compatible FILE stream write function.
-   Copyright (C) 2008 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2008.
-
-   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 <stdio.h>
-
-/* Replace these functions only if module 'sigpipe' is requested.  */
-#if GNULIB_SIGPIPE
-
-/* On native Windows platforms, SIGPIPE does not exist.  When write() is
-   called on a pipe with no readers, WriteFile() fails with error
-   GetLastError() = ERROR_NO_DATA, and write() in consequence fails with
-   error EINVAL.  This write() function is at the basis of the function
-   which flushes the buffer of a FILE stream.  */
-
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-
-#  include <errno.h>
-#  include <signal.h>
-#  include <io.h>
-
-#  define WIN32_LEAN_AND_MEAN  /* avoid including junk */
-#  include <windows.h>
-
-#  define CALL_WITH_SIGPIPE_EMULATION(RETTYPE, EXPRESSION, FAILED) \
-  if (ferror (stream))                                                       \
-    return (EXPRESSION);                                                     \
-  else                                                                       \
-    {                                                                        \
-      RETTYPE ret;                                                           \
-      SetLastError (0);                                                              \
-      ret = (EXPRESSION);                                                    \
-      if (FAILED && GetLastError () == ERROR_NO_DATA && ferror (stream))      \
-       {                                                                     \
-         int fd = fileno (stream);                                           \
-         if (fd >= 0                                                         \
-             && GetFileType ((HANDLE) _get_osfhandle (fd)) == FILE_TYPE_PIPE)\
-           {                                                                 \
-             /* Try to raise signal SIGPIPE.  */                             \
-             raise (SIGPIPE);                                                \
-             /* If it is currently blocked or ignored, change errno from     \
-                EINVAL to EPIPE.  */                                         \
-             errno = EPIPE;                                                  \
-           }                                                                 \
-       }                                                                     \
-      return ret;                                                            \
-    }
-
-#  if !REPLACE_PRINTF_POSIX /* avoid collision with printf.c */
-int
-printf (const char *format, ...)
-{
-  int retval;
-  va_list args;
-
-  va_start (args, format);
-  retval = vfprintf (stdout, format, args);
-  va_end (args);
-
-  return retval;
-}
-#  endif
-
-#  if !REPLACE_FPRINTF_POSIX /* avoid collision with fprintf.c */
-int
-fprintf (FILE *stream, const char *format, ...)
-{
-  int retval;
-  va_list args;
-
-  va_start (args, format);
-  retval = vfprintf (stream, format, args);
-  va_end (args);
-
-  return retval;
-}
-#  endif
-
-#  if !REPLACE_VFPRINTF_POSIX /* avoid collision with vprintf.c */
-int
-vprintf (const char *format, va_list args)
-{
-  return vfprintf (stdout, format, args);
-}
-#  endif
-
-#  if !REPLACE_VPRINTF_POSIX /* avoid collision with vfprintf.c */
-int
-vfprintf (FILE *stream, const char *format, va_list args)
-#undef vfprintf
-{
-  CALL_WITH_SIGPIPE_EMULATION (int, vfprintf (stream, format, args), ret == EOF)
-}
-#  endif
-
-int
-putchar (int c)
-{
-  return fputc (c, stdout);
-}
-
-int
-fputc (int c, FILE *stream)
-#undef fputc
-{
-  CALL_WITH_SIGPIPE_EMULATION (int, fputc (c, stream), ret == EOF)
-}
-
-int
-fputs (const char *string, FILE *stream)
-#undef fputs
-{
-  CALL_WITH_SIGPIPE_EMULATION (int, fputs (string, stream), ret == EOF)
-}
-
-int
-puts (const char *string)
-#undef puts
-{
-  FILE *stream = stdout;
-  CALL_WITH_SIGPIPE_EMULATION (int, puts (string), ret == EOF)
-}
-
-size_t
-fwrite (const void *ptr, size_t s, size_t n, FILE *stream)
-#undef fwrite
-{
-  CALL_WITH_SIGPIPE_EMULATION (size_t, fwrite (ptr, s, n, stream), ret < n)
-}
-
-# endif
-#endif
diff --git a/lib/stdio.in.h b/lib/stdio.in.h
deleted file mode 100644 (file)
index 863b903..0000000
+++ /dev/null
@@ -1,526 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* A GNU-like <stdio.h>.
-
-   Copyright (C) 2004, 2007-2008 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-
-#if defined __need_FILE || defined __need___FILE
-/* Special invocation convention inside glibc header files.  */
-
-#@INCLUDE_NEXT@ @NEXT_STDIO_H@
-
-#else
-/* Normal invocation convention.  */
-
-#ifndef _GL_STDIO_H
-
-/* The include_next requires a split double-inclusion guard.  */
-#@INCLUDE_NEXT@ @NEXT_STDIO_H@
-
-#ifndef _GL_STDIO_H
-#define _GL_STDIO_H
-
-#include <stdarg.h>
-#include <stddef.h>
-
-#if (@GNULIB_FSEEKO@ && @REPLACE_FSEEKO@) \
-  || (@GNULIB_FTELLO@ && @REPLACE_FTELLO@) \
-  || (@GNULIB_GETDELIM@ && !@HAVE_DECL_GETDELIM@) \
-  || (@GNULIB_GETLINE@ && (!@HAVE_DECL_GETLINE@ || @REPLACE_GETLINE@))
-/* Get off_t and ssize_t.  */
-# include <sys/types.h>
-#endif
-
-#ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
-#  define __attribute__(Spec) /* empty */
-# endif
-/* The __-protected variants of `format' and `printf' attributes
-   are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-#  define __format__ format
-#  define __printf__ printf
-# endif
-#endif
-
-
-/* The definition of GL_LINK_WARNING is copied here.  */
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#if @GNULIB_FPRINTF_POSIX@
-# if @REPLACE_FPRINTF@
-#  define fprintf rpl_fprintf
-extern int fprintf (FILE *fp, const char *format, ...)
-       __attribute__ ((__format__ (__printf__, 2, 3)));
-# endif
-#elif @GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
-# define fprintf rpl_fprintf
-extern int fprintf (FILE *fp, const char *format, ...)
-       __attribute__ ((__format__ (__printf__, 2, 3)));
-#elif defined GNULIB_POSIXCHECK
-# undef fprintf
-# define fprintf \
-    (GL_LINK_WARNING ("fprintf is not always POSIX compliant - " \
-                      "use gnulib module fprintf-posix for portable " \
-                      "POSIX compliance"), \
-     fprintf)
-#endif
-
-#if @GNULIB_VFPRINTF_POSIX@
-# if @REPLACE_VFPRINTF@
-#  define vfprintf rpl_vfprintf
-extern int vfprintf (FILE *fp, const char *format, va_list args)
-       __attribute__ ((__format__ (__printf__, 2, 0)));
-# endif
-#elif @GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
-# define vfprintf rpl_vfprintf
-extern int vfprintf (FILE *fp, const char *format, va_list args)
-       __attribute__ ((__format__ (__printf__, 2, 0)));
-#elif defined GNULIB_POSIXCHECK
-# undef vfprintf
-# define vfprintf(s,f,a) \
-    (GL_LINK_WARNING ("vfprintf is not always POSIX compliant - " \
-                      "use gnulib module vfprintf-posix for portable " \
-                      "POSIX compliance"), \
-     vfprintf (s, f, a))
-#endif
-
-#if @GNULIB_PRINTF_POSIX@
-# if @REPLACE_PRINTF@
-/* Don't break __attribute__((format(printf,M,N))).  */
-#  define printf __printf__
-extern int printf (const char *format, ...)
-       __attribute__ ((__format__ (__printf__, 1, 2)));
-# endif
-#elif @GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
-/* Don't break __attribute__((format(printf,M,N))).  */
-# define printf __printf__
-extern int printf (const char *format, ...)
-       __attribute__ ((__format__ (__printf__, 1, 2)));
-#elif defined GNULIB_POSIXCHECK
-# undef printf
-# define printf \
-    (GL_LINK_WARNING ("printf is not always POSIX compliant - " \
-                      "use gnulib module printf-posix for portable " \
-                      "POSIX compliance"), \
-     printf)
-/* Don't break __attribute__((format(printf,M,N))).  */
-# define format(kind,m,n) format (__##kind##__, m, n)
-# define __format__(kind,m,n) __format__ (__##kind##__, m, n)
-# define ____printf____ __printf__
-# define ____scanf____ __scanf__
-# define ____strftime____ __strftime__
-# define ____strfmon____ __strfmon__
-#endif
-
-#if @GNULIB_VPRINTF_POSIX@
-# if @REPLACE_VPRINTF@
-#  define vprintf rpl_vprintf
-extern int vprintf (const char *format, va_list args)
-       __attribute__ ((__format__ (__printf__, 1, 0)));
-# endif
-#elif @GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
-# define vprintf rpl_vprintf
-extern int vprintf (const char *format, va_list args)
-       __attribute__ ((__format__ (__printf__, 1, 0)));
-#elif defined GNULIB_POSIXCHECK
-# undef vprintf
-# define vprintf(f,a) \
-    (GL_LINK_WARNING ("vprintf is not always POSIX compliant - " \
-                      "use gnulib module vprintf-posix for portable " \
-                      "POSIX compliance"), \
-     vprintf (f, a))
-#endif
-
-#if @GNULIB_SNPRINTF@
-# if @REPLACE_SNPRINTF@
-#  define snprintf rpl_snprintf
-# endif
-# if @REPLACE_SNPRINTF@ || !@HAVE_DECL_SNPRINTF@
-extern int snprintf (char *str, size_t size, const char *format, ...)
-       __attribute__ ((__format__ (__printf__, 3, 4)));
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef snprintf
-# define snprintf \
-    (GL_LINK_WARNING ("snprintf is unportable - " \
-                      "use gnulib module snprintf for portability"), \
-     snprintf)
-#endif
-
-#if @GNULIB_VSNPRINTF@
-# if @REPLACE_VSNPRINTF@
-#  define vsnprintf rpl_vsnprintf
-# endif
-# if @REPLACE_VSNPRINTF@ || !@HAVE_DECL_VSNPRINTF@
-extern int vsnprintf (char *str, size_t size, const char *format, va_list args)
-       __attribute__ ((__format__ (__printf__, 3, 0)));
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef vsnprintf
-# define vsnprintf(b,s,f,a) \
-    (GL_LINK_WARNING ("vsnprintf is unportable - " \
-                      "use gnulib module vsnprintf for portability"), \
-     vsnprintf (b, s, f, a))
-#endif
-
-#if @GNULIB_SPRINTF_POSIX@
-# if @REPLACE_SPRINTF@
-#  define sprintf rpl_sprintf
-extern int sprintf (char *str, const char *format, ...)
-       __attribute__ ((__format__ (__printf__, 2, 3)));
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef sprintf
-# define sprintf \
-    (GL_LINK_WARNING ("sprintf is not always POSIX compliant - " \
-                      "use gnulib module sprintf-posix for portable " \
-                      "POSIX compliance"), \
-     sprintf)
-#endif
-
-#if @GNULIB_VSPRINTF_POSIX@
-# if @REPLACE_VSPRINTF@
-#  define vsprintf rpl_vsprintf
-extern int vsprintf (char *str, const char *format, va_list args)
-       __attribute__ ((__format__ (__printf__, 2, 0)));
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef vsprintf
-# define vsprintf(b,f,a) \
-    (GL_LINK_WARNING ("vsprintf is not always POSIX compliant - " \
-                      "use gnulib module vsprintf-posix for portable " \
-                      "POSIX compliance"), \
-     vsprintf (b, f, a))
-#endif
-
-#if @GNULIB_DPRINTF@
-# if @REPLACE_DPRINTF@
-#  define dprintf rpl_dprintf
-# endif
-# if @REPLACE_DPRINTF@ || !@HAVE_DPRINTF@
-extern int dprintf (int fd, const char *format, ...)
-       __attribute__ ((__format__ (__printf__, 2, 3)));
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef dprintf
-# define dprintf(d,f,a) \
-    (GL_LINK_WARNING ("dprintf is unportable - " \
-                      "use gnulib module dprintf for portability"), \
-     dprintf (d, f, a))
-#endif
-
-#if @GNULIB_VDPRINTF@
-# if @REPLACE_VDPRINTF@
-#  define vdprintf rpl_vdprintf
-# endif
-# if @REPLACE_VDPRINTF@ || !@HAVE_VDPRINTF@
-extern int vdprintf (int fd, const char *format, va_list args)
-       __attribute__ ((__format__ (__printf__, 2, 0)));
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef vdprintf
-# define vdprintf(d,f,a) \
-    (GL_LINK_WARNING ("vdprintf is unportable - " \
-                      "use gnulib module vdprintf for portability"), \
-     vdprintf (d, f, a))
-#endif
-
-#if @GNULIB_VASPRINTF@
-# if @REPLACE_VASPRINTF@
-#  define asprintf rpl_asprintf
-#  define vasprintf rpl_vasprintf
-# endif
-# if @REPLACE_VASPRINTF@ || !@HAVE_VASPRINTF@
-  /* Write formatted output to a string dynamically allocated with malloc().
-     If the memory allocation succeeds, store the address of the string in
-     *RESULT and return the number of resulting bytes, excluding the trailing
-     NUL.  Upon memory allocation error, or some other error, return -1.  */
-  extern int asprintf (char **result, const char *format, ...)
-    __attribute__ ((__format__ (__printf__, 2, 3)));
-  extern int vasprintf (char **result, const char *format, va_list args)
-    __attribute__ ((__format__ (__printf__, 2, 0)));
-# endif
-#endif
-
-#if @GNULIB_OBSTACK_PRINTF@
-# if @REPLACE_OBSTACK_PRINTF@
-#  define obstack_printf rpl_osbtack_printf
-#  define obstack_vprintf rpl_obstack_vprintf
-# endif
-# if @REPLACE_OBSTACK_PRINTF@ || !@HAVE_DECL_OBSTACK_PRINTF@
-  struct obstack;
-  /* Grow an obstack with formatted output.  Return the number of
-     bytes added to OBS.  No trailing nul byte is added, and the
-     object should be closed with obstack_finish before use.  Upon
-     memory allocation error, call obstack_alloc_failed_handler.  Upon
-     other error, return -1.  */
-  extern int obstack_printf (struct obstack *obs, const char *format, ...)
-    __attribute__ ((__format__ (__printf__, 2, 3)));
-  extern int obstack_vprintf (struct obstack *obs, const char *format,
-                             va_list args)
-    __attribute__ ((__format__ (__printf__, 2, 0)));
-# endif
-#endif
-
-#if @GNULIB_FOPEN@
-# if @REPLACE_FOPEN@
-#  undef fopen
-#  define fopen rpl_fopen
-extern FILE * fopen (const char *filename, const char *mode);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef fopen
-# define fopen(f,m) \
-   (GL_LINK_WARNING ("fopen on Win32 platforms is not POSIX compatible - " \
-                     "use gnulib module fopen for portability"), \
-    fopen (f, m))
-#endif
-
-#if @GNULIB_FREOPEN@
-# if @REPLACE_FREOPEN@
-#  undef freopen
-#  define freopen rpl_freopen
-extern FILE * freopen (const char *filename, const char *mode, FILE *stream);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef freopen
-# define freopen(f,m,s) \
-   (GL_LINK_WARNING ("freopen on Win32 platforms is not POSIX compatible - " \
-                     "use gnulib module freopen for portability"), \
-    freopen (f, m, s))
-#endif
-
-#if @GNULIB_FSEEKO@
-# if @REPLACE_FSEEKO@
-/* Provide fseek, fseeko functions that are aware of a preceding
-   fflush(), and which detect pipes.  */
-#  define fseeko rpl_fseeko
-extern int fseeko (FILE *fp, off_t offset, int whence);
-#  define fseek(fp, offset, whence) fseeko (fp, (off_t)(offset), whence)
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef fseeko
-# define fseeko(f,o,w) \
-   (GL_LINK_WARNING ("fseeko is unportable - " \
-                     "use gnulib module fseeko for portability"), \
-    fseeko (f, o, w))
-#endif
-
-#if @GNULIB_FSEEK@ && @REPLACE_FSEEK@
-extern int rpl_fseek (FILE *fp, long offset, int whence);
-# undef fseek
-# if defined GNULIB_POSIXCHECK
-#  define fseek(f,o,w) \
-     (GL_LINK_WARNING ("fseek cannot handle files larger than 4 GB " \
-                       "on 32-bit platforms - " \
-                       "use fseeko function for handling of large files"), \
-      rpl_fseek (f, o, w))
-# else
-#  define fseek rpl_fseek
-# endif
-#elif defined GNULIB_POSIXCHECK
-# ifndef fseek
-#  define fseek(f,o,w) \
-     (GL_LINK_WARNING ("fseek cannot handle files larger than 4 GB " \
-                       "on 32-bit platforms - " \
-                       "use fseeko function for handling of large files"), \
-      fseek (f, o, w))
-# endif
-#endif
-
-#if @GNULIB_FTELLO@
-# if @REPLACE_FTELLO@
-#  define ftello rpl_ftello
-extern off_t ftello (FILE *fp);
-#  define ftell(fp) ftello (fp)
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef ftello
-# define ftello(f) \
-   (GL_LINK_WARNING ("ftello is unportable - " \
-                     "use gnulib module ftello for portability"), \
-    ftello (f))
-#endif
-
-#if @GNULIB_FTELL@ && @REPLACE_FTELL@
-extern long rpl_ftell (FILE *fp);
-# undef ftell
-# if GNULIB_POSIXCHECK
-#  define ftell(f) \
-     (GL_LINK_WARNING ("ftell cannot handle files larger than 4 GB " \
-                       "on 32-bit platforms - " \
-                       "use ftello function for handling of large files"), \
-      rpl_ftell (f))
-# else
-#  define ftell rpl_ftell
-# endif
-#elif defined GNULIB_POSIXCHECK
-# ifndef ftell
-#  define ftell(f) \
-     (GL_LINK_WARNING ("ftell cannot handle files larger than 4 GB " \
-                       "on 32-bit platforms - " \
-                       "use ftello function for handling of large files"), \
-      ftell (f))
-# endif
-#endif
-
-#if @GNULIB_FFLUSH@
-# if @REPLACE_FFLUSH@
-#  define fflush rpl_fflush
-  /* Flush all pending data on STREAM according to POSIX rules.  Both
-     output and seekable input streams are supported.
-     Note! LOSS OF DATA can occur if fflush is applied on an input stream
-     that is _not_seekable_ or on an update stream that is _not_seekable_
-     and in which the most recent operation was input.  Seekability can
-     be tested with lseek(fileno(fp),0,SEEK_CUR).  */
-  extern int fflush (FILE *gl_stream);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef fflush
-# define fflush(f) \
-   (GL_LINK_WARNING ("fflush is not always POSIX compliant - " \
-                     "use gnulib module fflush for portable " \
-                     "POSIX compliance"), \
-    fflush (f))
-#endif
-
-#if @GNULIB_FCLOSE@
-# if @REPLACE_FCLOSE@
-#  define fclose rpl_fclose
-  /* Close STREAM and its underlying file descriptor.  */
-extern int fclose (FILE *stream);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef fclose
-# define fclose(f) \
-   (GL_LINK_WARNING ("fclose is not always POSIX compliant - " \
-                     "use gnulib module fclose for portable " \
-                     "POSIX compliance"), \
-    fclose (f))
-#endif
-
-#if @GNULIB_FPUTC@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
-# undef fputc
-# define fputc rpl_fputc
-extern int fputc (int c, FILE *stream);
-#endif
-
-#if @GNULIB_PUTC@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
-# undef putc
-# define putc rpl_fputc
-extern int putc (int c, FILE *stream);
-#endif
-
-#if @GNULIB_PUTCHAR@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
-# undef putchar
-# define putchar rpl_putchar
-extern int putchar (int c);
-#endif
-
-#if @GNULIB_FPUTS@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
-# undef fputs
-# define fputs rpl_fputs
-extern int fputs (const char *string, FILE *stream);
-#endif
-
-#if @GNULIB_PUTS@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
-# undef puts
-# define puts rpl_puts
-extern int puts (const char *string);
-#endif
-
-#if @GNULIB_FWRITE@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@
-# undef fwrite
-# define fwrite rpl_fwrite
-extern size_t fwrite (const void *ptr, size_t s, size_t n, FILE *stream);
-#endif
-
-#if @GNULIB_GETDELIM@
-# if !@HAVE_DECL_GETDELIM@
-/* Read input, up to (and including) the next occurrence of DELIMITER, from
-   STREAM, store it in *LINEPTR (and NUL-terminate it).
-   *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE
-   bytes of space.  It is realloc'd as necessary.
-   Return the number of bytes read and stored at *LINEPTR (not including the
-   NUL terminator), or -1 on error or EOF.  */
-extern ssize_t getdelim (char **lineptr, size_t *linesize, int delimiter,
-                        FILE *stream);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef getdelim
-# define getdelim(l, s, d, f)                                      \
-  (GL_LINK_WARNING ("getdelim is unportable - "                            \
-                   "use gnulib module getdelim for portability"),  \
-   getdelim (l, s, d, f))
-#endif
-
-#if @GNULIB_GETLINE@
-# if @REPLACE_GETLINE@
-#  undef getline
-#  define getline rpl_getline
-# endif
-# if !@HAVE_DECL_GETLINE@ || @REPLACE_GETLINE@
-/* Read a line, up to (and including) the next newline, from STREAM, store it
-   in *LINEPTR (and NUL-terminate it).
-   *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE
-   bytes of space.  It is realloc'd as necessary.
-   Return the number of bytes read and stored at *LINEPTR (not including the
-   NUL terminator), or -1 on error or EOF.  */
-extern ssize_t getline (char **lineptr, size_t *linesize, FILE *stream);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef getline
-# define getline(l, s, f)                                              \
-  (GL_LINK_WARNING ("getline is unportable - "                         \
-                   "use gnulib module getline for portability"),       \
-   getline (l, s, f))
-#endif
-
-#if @GNULIB_PERROR@
-# if @REPLACE_PERROR@
-#  define perror rpl_perror
-/* Print a message to standard error, describing the value of ERRNO,
-   (if STRING is not NULL and not empty) prefixed with STRING and ": ",
-   and terminated with a newline.  */
-extern void perror (const char *string);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef perror
-# define perror(s) \
-    (GL_LINK_WARNING ("perror is not always POSIX compliant - " \
-                      "use gnulib module perror for portability"), \
-     perror (s))
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _GL_STDIO_H */
-#endif /* _GL_STDIO_H */
-#endif
diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h
deleted file mode 100644 (file)
index f99767f..0000000
+++ /dev/null
@@ -1,383 +0,0 @@
-/* A GNU-like <stdlib.h>.
-
-   Copyright (C) 1995, 2001-2004, 2006-2009 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
-
-#if defined __need_malloc_and_calloc
-/* Special invocation convention inside glibc header files.  */
-
-#@INCLUDE_NEXT@ @NEXT_STDLIB_H@
-
-#else
-/* Normal invocation convention.  */
-
-#ifndef _GL_STDLIB_H
-
-/* The include_next requires a split double-inclusion guard.  */
-#@INCLUDE_NEXT@ @NEXT_STDLIB_H@
-
-#ifndef _GL_STDLIB_H
-#define _GL_STDLIB_H
-
-
-/* Solaris declares getloadavg() in <sys/loadavg.h>.  */
-#if @GNULIB_GETLOADAVG@ && @HAVE_SYS_LOADAVG_H@
-# include <sys/loadavg.h>
-#endif
-
-/* OSF/1 5.1 declares 'struct random_data' in <random.h>, which is included
-   from <stdlib.h> if _REENTRANT is defined.  Include it always.  */
-#if @HAVE_RANDOM_H@
-# include <random.h>
-#endif
-
-#if @GNULIB_RANDOM_R@ || !@HAVE_STRUCT_RANDOM_DATA@
-# include <stdint.h>
-#endif
-
-#if !@HAVE_STRUCT_RANDOM_DATA@
-struct random_data
-{
-  int32_t *fptr;               /* Front pointer.  */
-  int32_t *rptr;               /* Rear pointer.  */
-  int32_t *state;              /* Array of state values.  */
-  int rand_type;               /* Type of random number generator.  */
-  int rand_deg;                        /* Degree of random number generator.  */
-  int rand_sep;                        /* Distance between front and rear.  */
-  int32_t *end_ptr;            /* Pointer behind state table.  */
-};
-#endif
-
-/* The definition of GL_LINK_WARNING is copied here.  */
-
-
-/* Some systems do not define EXIT_*, despite otherwise supporting C89.  */
-#ifndef EXIT_SUCCESS
-# define EXIT_SUCCESS 0
-#endif
-/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere
-   with proper operation of xargs.  */
-#ifndef EXIT_FAILURE
-# define EXIT_FAILURE 1
-#elif EXIT_FAILURE != 1
-# undef EXIT_FAILURE
-# define EXIT_FAILURE 1
-#endif
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#if @GNULIB_MALLOC_POSIX@
-# if !@HAVE_MALLOC_POSIX@
-#  undef malloc
-#  define malloc rpl_malloc
-extern void * malloc (size_t size);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef malloc
-# define malloc(s) \
-    (GL_LINK_WARNING ("malloc is not POSIX compliant everywhere - " \
-                      "use gnulib module malloc-posix for portability"), \
-     malloc (s))
-#endif
-
-
-#if @GNULIB_REALLOC_POSIX@
-# if !@HAVE_REALLOC_POSIX@
-#  undef realloc
-#  define realloc rpl_realloc
-extern void * realloc (void *ptr, size_t size);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef realloc
-# define realloc(p,s) \
-    (GL_LINK_WARNING ("realloc is not POSIX compliant everywhere - " \
-                      "use gnulib module realloc-posix for portability"), \
-     realloc (p, s))
-#endif
-
-
-#if @GNULIB_CALLOC_POSIX@
-# if !@HAVE_CALLOC_POSIX@
-#  undef calloc
-#  define calloc rpl_calloc
-extern void * calloc (size_t nmemb, size_t size);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef calloc
-# define calloc(n,s) \
-    (GL_LINK_WARNING ("calloc is not POSIX compliant everywhere - " \
-                      "use gnulib module calloc-posix for portability"), \
-     calloc (n, s))
-#endif
-
-
-#if @GNULIB_ATOLL@
-# if !@HAVE_ATOLL@
-/* Parse a signed decimal integer.
-   Returns the value of the integer.  Errors are not detected.  */
-extern long long atoll (const char *string);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef atoll
-# define atoll(s) \
-    (GL_LINK_WARNING ("atoll is unportable - " \
-                      "use gnulib module atoll for portability"), \
-     atoll (s))
-#endif
-
-
-#if @GNULIB_GETLOADAVG@
-# if !@HAVE_DECL_GETLOADAVG@
-/* Store max(NELEM,3) load average numbers in LOADAVG[].
-   The three numbers are the load average of the last 1 minute, the last 5
-   minutes, and the last 15 minutes, respectively.
-   LOADAVG is an array of NELEM numbers.  */
-extern int getloadavg (double loadavg[], int nelem);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef getloadavg
-# define getloadavg(l,n) \
-    (GL_LINK_WARNING ("getloadavg is not portable - " \
-                      "use gnulib module getloadavg for portability"), \
-     getloadavg (l, n))
-#endif
-
-
-#if @GNULIB_GETSUBOPT@
-/* Assuming *OPTIONP is a comma separated list of elements of the form
-   "token" or "token=value", getsubopt parses the first of these elements.
-   If the first element refers to a "token" that is member of the given
-   NULL-terminated array of tokens:
-     - It replaces the comma with a NUL byte, updates *OPTIONP to point past
-       the first option and the comma, sets *VALUEP to the value of the
-       element (or NULL if it doesn't contain an "=" sign),
-     - It returns the index of the "token" in the given array of tokens.
-   Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined.
-   For more details see the POSIX:2001 specification.
-   http://www.opengroup.org/susv3xsh/getsubopt.html */
-# if !@HAVE_GETSUBOPT@
-extern int getsubopt (char **optionp, char *const *tokens, char **valuep);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef getsubopt
-# define getsubopt(o,t,v) \
-    (GL_LINK_WARNING ("getsubopt is unportable - " \
-                      "use gnulib module getsubopt for portability"), \
-     getsubopt (o, t, v))
-#endif
-
-
-#if @GNULIB_MKDTEMP@
-# if !@HAVE_MKDTEMP@
-/* Create a unique temporary directory from TEMPLATE.
-   The last six characters of TEMPLATE must be "XXXXXX";
-   they are replaced with a string that makes the directory name unique.
-   Returns TEMPLATE, or a null pointer if it cannot get a unique name.
-   The directory is created mode 700.  */
-extern char * mkdtemp (char * /*template*/);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef mkdtemp
-# define mkdtemp(t) \
-    (GL_LINK_WARNING ("mkdtemp is unportable - " \
-                      "use gnulib module mkdtemp for portability"), \
-     mkdtemp (t))
-#endif
-
-
-#if @GNULIB_MKSTEMP@
-# if @REPLACE_MKSTEMP@
-/* Create a unique temporary file from TEMPLATE.
-   The last six characters of TEMPLATE must be "XXXXXX";
-   they are replaced with a string that makes the file name unique.
-   The file is then created, ensuring it didn't exist before.
-   The file is created read-write (mask at least 0600 & ~umask), but it may be
-   world-readable and world-writable (mask 0666 & ~umask), depending on the
-   implementation.
-   Returns the open file descriptor if successful, otherwise -1 and errno
-   set.  */
-#  define mkstemp rpl_mkstemp
-extern int mkstemp (char * /*template*/);
-# else
-/* On MacOS X 10.3, only <unistd.h> declares mkstemp.  */
-#  include <unistd.h>
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef mkstemp
-# define mkstemp(t) \
-    (GL_LINK_WARNING ("mkstemp is unportable - " \
-                      "use gnulib module mkstemp for portability"), \
-     mkstemp (t))
-#endif
-
-
-#if @GNULIB_PUTENV@
-# if @REPLACE_PUTENV@
-#  undef putenv
-#  define putenv rpl_putenv
-extern int putenv (char *string);
-# endif
-#endif
-
-
-#if @GNULIB_RANDOM_R@
-# if !@HAVE_RANDOM_R@
-
-#  ifndef RAND_MAX
-#   define RAND_MAX 2147483647
-#  endif
-
-int srandom_r (unsigned int seed, struct random_data *rand_state);
-int initstate_r (unsigned int seed, char *buf, size_t buf_size,
-                struct random_data *rand_state);
-int setstate_r (char *arg_state, struct random_data *rand_state);
-int random_r (struct random_data *buf, int32_t *result);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef random_r
-# define random_r(b,r)                           \
-    (GL_LINK_WARNING ("random_r is unportable - " \
-                      "use gnulib module random_r for portability"), \
-     random_r (b,r))
-# undef initstate_r
-# define initstate_r(s,b,sz,r)                      \
-    (GL_LINK_WARNING ("initstate_r is unportable - " \
-                      "use gnulib module random_r for portability"), \
-     initstate_r (s,b,sz,r))
-# undef srandom_r
-# define srandom_r(s,r)                                   \
-    (GL_LINK_WARNING ("srandom_r is unportable - " \
-                      "use gnulib module random_r for portability"), \
-     srandom_r (s,r))
-# undef setstate_r
-# define setstate_r(a,r)                                   \
-    (GL_LINK_WARNING ("setstate_r is unportable - " \
-                      "use gnulib module random_r for portability"), \
-     setstate_r (a,r))
-#endif
-
-
-#if @GNULIB_RPMATCH@
-# if !@HAVE_RPMATCH@
-/* Test a user response to a question.
-   Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear.  */
-extern int rpmatch (const char *response);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef rpmatch
-# define rpmatch(r) \
-    (GL_LINK_WARNING ("rpmatch is unportable - " \
-                      "use gnulib module rpmatch for portability"), \
-     rpmatch (r))
-#endif
-
-
-#if @GNULIB_SETENV@
-# if !@HAVE_SETENV@
-/* Set NAME to VALUE in the environment.
-   If REPLACE is nonzero, overwrite an existing value.  */
-extern int setenv (const char *name, const char *value, int replace);
-# endif
-#endif
-
-
-#if @GNULIB_UNSETENV@
-# if @HAVE_UNSETENV@
-#  if @VOID_UNSETENV@
-/* On some systems, unsetenv() returns void.
-   This is the case for MacOS X 10.3, FreeBSD 4.8, NetBSD 1.6, OpenBSD 3.4.  */
-#   define unsetenv(name) ((unsetenv)(name), 0)
-#  endif
-# else
-/* Remove the variable NAME from the environment.  */
-extern int unsetenv (const char *name);
-# endif
-#endif
-
-
-#if @GNULIB_STRTOD@
-# if @REPLACE_STRTOD@
-#  define strtod rpl_strtod
-# endif
-# if !@HAVE_STRTOD@ || @REPLACE_STRTOD@
- /* Parse a double from STRING, updating ENDP if appropriate.  */
-extern double strtod (const char *str, char **endp);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strtod
-# define strtod(s, e)                           \
-    (GL_LINK_WARNING ("strtod is unportable - " \
-                      "use gnulib module strtod for portability"), \
-     strtod (s, e))
-#endif
-
-
-#if @GNULIB_STRTOLL@
-# if !@HAVE_STRTOLL@
-/* Parse a signed integer whose textual representation starts at STRING.
-   The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
-   it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
-   "0x").
-   If ENDPTR is not NULL, the address of the first byte after the integer is
-   stored in *ENDPTR.
-   Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set
-   to ERANGE.  */
-extern long long strtoll (const char *string, char **endptr, int base);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strtoll
-# define strtoll(s,e,b) \
-    (GL_LINK_WARNING ("strtoll is unportable - " \
-                      "use gnulib module strtoll for portability"), \
-     strtoll (s, e, b))
-#endif
-
-
-#if @GNULIB_STRTOULL@
-# if !@HAVE_STRTOULL@
-/* Parse an unsigned integer whose textual representation starts at STRING.
-   The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
-   it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
-   "0x").
-   If ENDPTR is not NULL, the address of the first byte after the integer is
-   stored in *ENDPTR.
-   Upon overflow, the return value is ULLONG_MAX, and errno is set to
-   ERANGE.  */
-extern unsigned long long strtoull (const char *string, char **endptr, int base);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strtoull
-# define strtoull(s,e,b) \
-    (GL_LINK_WARNING ("strtoull is unportable - " \
-                      "use gnulib module strtoull for portability"), \
-     strtoull (s, e, b))
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _GL_STDLIB_H */
-#endif /* _GL_STDLIB_H */
-#endif
diff --git a/lib/stpcpy.c b/lib/stpcpy.c
deleted file mode 100644 (file)
index 1e70013..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/* stpcpy.c -- copy a string and return pointer to end of new string
-   Copyright (C) 1992, 1995, 1997-1998, 2006 Free Software Foundation, Inc.
-
-   NOTE: The canonical source of this file is maintained with the GNU C Library.
-   Bugs can be reported to bug-glibc@prep.ai.mit.edu.
-
-   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 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>
-
-#include <string.h>
-
-#undef __stpcpy
-#ifdef _LIBC
-# undef stpcpy
-#endif
-
-#ifndef weak_alias
-# define __stpcpy stpcpy
-#endif
-
-/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST.  */
-char *
-__stpcpy (char *dest, const char *src)
-{
-  register char *d = dest;
-  register const char *s = src;
-
-  do
-    *d++ = *s;
-  while (*s++ != '\0');
-
-  return d - 1;
-}
-#ifdef weak_alias
-weak_alias (__stpcpy, stpcpy)
-#endif
diff --git a/lib/strcasecmp.c b/lib/strcasecmp.c
deleted file mode 100644 (file)
index 82270ac..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Case-insensitive string comparison function.
-   Copyright (C) 1998-1999, 2005-2007 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include <string.h>
-
-#include <ctype.h>
-#include <limits.h>
-
-#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
-
-/* 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.
-   Note: This function does not work with multibyte strings!  */
-
-int
-strcasecmp (const char *s1, const char *s2)
-{
-  const unsigned char *p1 = (const unsigned char *) s1;
-  const unsigned char *p2 = (const unsigned char *) s2;
-  unsigned char c1, c2;
-
-  if (p1 == p2)
-    return 0;
-
-  do
-    {
-      c1 = TOLOWER (*p1);
-      c2 = TOLOWER (*p2);
-
-      if (c1 == '\0')
-       break;
-
-      ++p1;
-      ++p2;
-    }
-  while (c1 == c2);
-
-  if (UCHAR_MAX <= INT_MAX)
-    return c1 - c2;
-  else
-    /* On machines where 'char' and 'int' are types of the same size, the
-       difference of two 'unsigned char' values - including the sign bit -
-       doesn't fit in an 'int'.  */
-    return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
-}
diff --git a/lib/strchrnul.c b/lib/strchrnul.c
deleted file mode 100644 (file)
index 5ed237c..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/* Searching in a string.
-   Copyright (C) 2003, 2007, 2008 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 <string.h>
-
-/* Find the first occurrence of C in S or the final NUL byte.  */
-char *
-strchrnul (const char *s, int c_in)
-{
-  /* On 32-bit hardware, choosing longword to be a 32-bit unsigned
-     long instead of a 64-bit uintmax_t tends to give better
-     performance.  On 64-bit hardware, unsigned long is generally 64
-     bits already.  Change this typedef to experiment with
-     performance.  */
-  typedef unsigned long int longword;
-
-  const unsigned char *char_ptr;
-  const longword *longword_ptr;
-  longword repeated_one;
-  longword repeated_c;
-  unsigned char c;
-
-  c = (unsigned char) c_in;
-  if (!c)
-    return rawmemchr (s, 0);
-
-  /* Handle the first few bytes by reading one byte at a time.
-     Do this until CHAR_PTR is aligned on a longword boundary.  */
-  for (char_ptr = (const unsigned char *) s;
-       (size_t) char_ptr % sizeof (longword) != 0;
-       ++char_ptr)
-    if (!*char_ptr || *char_ptr == c)
-      return (char *) char_ptr;
-
-  longword_ptr = (const longword *) char_ptr;
-
-  /* All these elucidatory comments refer to 4-byte longwords,
-     but the theory applies equally well to any size longwords.  */
-
-  /* Compute auxiliary longword values:
-     repeated_one is a value which has a 1 in every byte.
-     repeated_c has c in every byte.  */
-  repeated_one = 0x01010101;
-  repeated_c = c | (c << 8);
-  repeated_c |= repeated_c << 16;
-  if (0xffffffffU < (longword) -1)
-    {
-      repeated_one |= repeated_one << 31 << 1;
-      repeated_c |= repeated_c << 31 << 1;
-      if (8 < sizeof (longword))
-        {
-          size_t i;
-
-          for (i = 64; i < sizeof (longword) * 8; i *= 2)
-            {
-              repeated_one |= repeated_one << i;
-              repeated_c |= repeated_c << i;
-            }
-        }
-    }
-
-  /* Instead of the traditional loop which tests each byte, we will
-     test a longword at a time.  The tricky part is testing if *any of
-     the four* bytes in the longword in question are equal to NUL or
-     c.  We first use an xor with repeated_c.  This reduces the task
-     to testing whether *any of the four* bytes in longword1 or
-     longword2 is zero.
-
-     Let's consider longword1.  We compute tmp =
-       ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7).
-     That is, we perform the following operations:
-       1. Subtract repeated_one.
-       2. & ~longword1.
-       3. & a mask consisting of 0x80 in every byte.
-     Consider what happens in each byte:
-       - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff,
-         and step 3 transforms it into 0x80.  A carry can also be propagated
-         to more significant bytes.
-       - If a byte of longword1 is nonzero, let its lowest 1 bit be at
-         position k (0 <= k <= 7); so the lowest k bits are 0.  After step 1,
-         the byte ends in a single bit of value 0 and k bits of value 1.
-         After step 2, the result is just k bits of value 1: 2^k - 1.  After
-         step 3, the result is 0.  And no carry is produced.
-     So, if longword1 has only non-zero bytes, tmp is zero.
-     Whereas if longword1 has a zero byte, call j the position of the least
-     significant zero byte.  Then the result has a zero at positions 0, ...,
-     j-1 and a 0x80 at position j.  We cannot predict the result at the more
-     significant bytes (positions j+1..3), but it does not matter since we
-     already have a non-zero bit at position 8*j+7.
-
-     The test whether any byte in longword1 or longword2 is zero is equivalent
-     to testing whether tmp1 is nonzero or tmp2 is nonzero.  We can combine
-     this into a single test, whether (tmp1 | tmp2) is nonzero.
-
-     This test can read more than one byte beyond the end of a string,
-     depending on where the terminating NUL is encountered.  However,
-     this is considered safe since the initialization phase ensured
-     that the read will be aligned, therefore, the read will not cross
-     page boundaries and will not cause a fault.  */
-
-  while (1)
-    {
-      longword longword1 = *longword_ptr ^ repeated_c;
-      longword longword2 = *longword_ptr;
-
-      if (((((longword1 - repeated_one) & ~longword1)
-            | ((longword2 - repeated_one) & ~longword2))
-           & (repeated_one << 7)) != 0)
-        break;
-      longword_ptr++;
-    }
-
-  char_ptr = (const unsigned char *) longword_ptr;
-
-  /* At this point, we know that one of the sizeof (longword) bytes
-     starting at char_ptr is == 0 or == c.  On little-endian machines,
-     we could determine the first such byte without any further memory
-     accesses, just by looking at the tmp result from the last loop
-     iteration.  But this does not work on big-endian machines.
-     Choose code that works in both cases.  */
-
-  char_ptr = (unsigned char *) longword_ptr;
-  while (*char_ptr && (*char_ptr != c))
-    char_ptr++;
-  return (char *) char_ptr;
-}
diff --git a/lib/strchrnul.valgrind b/lib/strchrnul.valgrind
deleted file mode 100644 (file)
index b14fa13..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# Suppress a valgrind message about use of uninitialized memory in strchrnul().
-# This use is OK because it provides only a speedup.
-{
-    strchrnul-value4
-    Memcheck:Value4
-    fun:strchrnul
-}
-{
-    strchrnul-value8
-    Memcheck:Value8
-    fun:strchrnul
-}
diff --git a/lib/strdup.c b/lib/strdup.c
deleted file mode 100644 (file)
index faa2aee..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Copyright (C) 1991, 1996, 1997, 1998, 2002, 2003, 2004, 2006, 2007 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
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _LIBC
-# include <config.h>
-#endif
-
-/* Get specification.  */
-#include <string.h>
-
-#include <stdlib.h>
-
-#undef __strdup
-#ifdef _LIBC
-# undef strdup
-#endif
-
-#ifndef weak_alias
-# define __strdup strdup
-#endif
-
-/* Duplicate S, returning an identical malloc'd string.  */
-char *
-__strdup (const char *s)
-{
-  size_t len = strlen (s) + 1;
-  void *new = malloc (len);
-
-  if (new == NULL)
-    return NULL;
-
-  return (char *) memcpy (new, s, len);
-}
-#ifdef libc_hidden_def
-libc_hidden_def (__strdup)
-#endif
-#ifdef weak_alias
-weak_alias (__strdup, strdup)
-#endif
diff --git a/lib/streq.h b/lib/streq.h
deleted file mode 100644 (file)
index e3b0c3f..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Optimized string comparison.
-   Copyright (C) 2001-2002, 2007 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
-   Lesser 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>.  */
-
-#ifndef _GL_STREQ_H
-#define _GL_STREQ_H
-
-#include <string.h>
-
-/* STREQ allows to optimize string comparison with a small literal string.
-     STREQ (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
-   is semantically equivalent to
-     strcmp (s, "EUC-KR") == 0
-   just faster.  */
-
-/* Help GCC to generate good code for string comparisons with
-   immediate strings. */
-#if defined (__GNUC__) && defined (__OPTIMIZE__)
-
-static inline int
-streq9 (const char *s1, const char *s2)
-{
-  return strcmp (s1 + 9, s2 + 9) == 0;
-}
-
-static inline int
-streq8 (const char *s1, const char *s2, char s28)
-{
-  if (s1[8] == s28)
-    {
-      if (s28 == 0)
-        return 1;
-      else
-        return streq9 (s1, s2);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq7 (const char *s1, const char *s2, char s27, char s28)
-{
-  if (s1[7] == s27)
-    {
-      if (s27 == 0)
-        return 1;
-      else
-        return streq8 (s1, s2, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq6 (const char *s1, const char *s2, char s26, char s27, char s28)
-{
-  if (s1[6] == s26)
-    {
-      if (s26 == 0)
-        return 1;
-      else
-        return streq7 (s1, s2, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28)
-{
-  if (s1[5] == s25)
-    {
-      if (s25 == 0)
-        return 1;
-      else
-        return streq6 (s1, s2, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[4] == s24)
-    {
-      if (s24 == 0)
-        return 1;
-      else
-        return streq5 (s1, s2, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[3] == s23)
-    {
-      if (s23 == 0)
-        return 1;
-      else
-        return streq4 (s1, s2, s24, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[2] == s22)
-    {
-      if (s22 == 0)
-        return 1;
-      else
-        return streq3 (s1, s2, s23, s24, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[1] == s21)
-    {
-      if (s21 == 0)
-        return 1;
-      else
-        return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq0 (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 (s1[0] == s20)
-    {
-      if (s20 == 0)
-        return 1;
-      else
-        return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-#define STREQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
-  streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28)
-
-#else
-
-#define STREQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
-  (strcmp (s1, s2) == 0)
-
-#endif
-
-#endif /* _GL_STREQ_H */
diff --git a/lib/strerror.c b/lib/strerror.c
deleted file mode 100644 (file)
index 798d854..0000000
+++ /dev/null
@@ -1,341 +0,0 @@
-/* strerror.c --- POSIX compatible system error routine
-
-   Copyright (C) 2007-2009 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>
-
-#include <string.h>
-
-#if REPLACE_STRERROR
-
-# include <errno.h>
-# include <stdio.h>
-
-# if GNULIB_defined_ESOCK /* native Windows platforms */
-#  if HAVE_WINSOCK2_H
-#   include <winsock2.h>
-#  endif
-# endif
-
-# include "intprops.h"
-
-# undef strerror
-# if ! HAVE_DECL_STRERROR
-#  define strerror(n) NULL
-# endif
-
-char *
-rpl_strerror (int n)
-{
-  char const *msg = NULL;
-  /* These error messages are taken from glibc/sysdeps/gnu/errlist.c.  */
-  switch (n)
-    {
-# if GNULIB_defined_ETXTBSY
-    case ETXTBSY:
-      msg = "Text file busy";
-      break;
-# endif
-
-# if GNULIB_defined_ESOCK /* native Windows platforms */
-    /* EWOULDBLOCK is the same as EAGAIN.  */
-    case EINPROGRESS:
-      msg = "Operation now in progress";
-      break;
-    case EALREADY:
-      msg = "Operation already in progress";
-      break;
-    case ENOTSOCK:
-      msg = "Socket operation on non-socket";
-      break;
-    case EDESTADDRREQ:
-      msg = "Destination address required";
-      break;
-    case EMSGSIZE:
-      msg = "Message too long";
-      break;
-    case EPROTOTYPE:
-      msg = "Protocol wrong type for socket";
-      break;
-    case ENOPROTOOPT:
-      msg = "Protocol not available";
-      break;
-    case EPROTONOSUPPORT:
-      msg = "Protocol not supported";
-      break;
-    case ESOCKTNOSUPPORT:
-      msg = "Socket type not supported";
-      break;
-    case EOPNOTSUPP:
-      msg = "Operation not supported";
-      break;
-    case EPFNOSUPPORT:
-      msg = "Protocol family not supported";
-      break;
-    case EAFNOSUPPORT:
-      msg = "Address family not supported by protocol";
-      break;
-    case EADDRINUSE:
-      msg = "Address already in use";
-      break;
-    case EADDRNOTAVAIL:
-      msg = "Cannot assign requested address";
-      break;
-    case ENETDOWN:
-      msg = "Network is down";
-      break;
-    case ENETUNREACH:
-      msg = "Network is unreachable";
-      break;
-    case ENETRESET:
-      msg = "Network dropped connection on reset";
-      break;
-    case ECONNABORTED:
-      msg = "Software caused connection abort";
-      break;
-    case ECONNRESET:
-      msg = "Connection reset by peer";
-      break;
-    case ENOBUFS:
-      msg = "No buffer space available";
-      break;
-    case EISCONN:
-      msg = "Transport endpoint is already connected";
-      break;
-    case ENOTCONN:
-      msg = "Transport endpoint is not connected";
-      break;
-    case ESHUTDOWN:
-      msg = "Cannot send after transport endpoint shutdown";
-      break;
-    case ETOOMANYREFS:
-      msg = "Too many references: cannot splice";
-      break;
-    case ETIMEDOUT:
-      msg = "Connection timed out";
-      break;
-    case ECONNREFUSED:
-      msg = "Connection refused";
-      break;
-    case ELOOP:
-      msg = "Too many levels of symbolic links";
-      break;
-    case EHOSTDOWN:
-      msg = "Host is down";
-      break;
-    case EHOSTUNREACH:
-      msg = "No route to host";
-      break;
-    case EPROCLIM:
-      msg = "Too many processes";
-      break;
-    case EUSERS:
-      msg = "Too many users";
-      break;
-    case EDQUOT:
-      msg = "Disk quota exceeded";
-      break;
-    case ESTALE:
-      msg = "Stale NFS file handle";
-      break;
-    case EREMOTE:
-      msg = "Object is remote";
-      break;
-#  if HAVE_WINSOCK2_H
-    /* WSA_INVALID_HANDLE maps to EBADF */
-    /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */
-    /* WSA_INVALID_PARAMETER maps to EINVAL */
-    case WSA_OPERATION_ABORTED:
-      msg = "Overlapped operation aborted";
-      break;
-    case WSA_IO_INCOMPLETE:
-      msg = "Overlapped I/O event object not in signaled state";
-      break;
-    case WSA_IO_PENDING:
-      msg = "Overlapped operations will complete later";
-      break;
-    /* WSAEINTR maps to EINTR */
-    /* WSAEBADF maps to EBADF */
-    /* WSAEACCES maps to EACCES */
-    /* WSAEFAULT maps to EFAULT */
-    /* WSAEINVAL maps to EINVAL */
-    /* WSAEMFILE maps to EMFILE */
-    /* WSAEWOULDBLOCK maps to EWOULDBLOCK */
-    /* WSAEINPROGRESS is EINPROGRESS */
-    /* WSAEALREADY is EALREADY */
-    /* WSAENOTSOCK is ENOTSOCK */
-    /* WSAEDESTADDRREQ is EDESTADDRREQ */
-    /* WSAEMSGSIZE is EMSGSIZE */
-    /* WSAEPROTOTYPE is EPROTOTYPE */
-    /* WSAENOPROTOOPT is ENOPROTOOPT */
-    /* WSAEPROTONOSUPPORT is EPROTONOSUPPORT */
-    /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */
-    /* WSAEOPNOTSUPP is EOPNOTSUPP */
-    /* WSAEPFNOSUPPORT is EPFNOSUPPORT */
-    /* WSAEAFNOSUPPORT is EAFNOSUPPORT */
-    /* WSAEADDRINUSE is EADDRINUSE */
-    /* WSAEADDRNOTAVAIL is EADDRNOTAVAIL */
-    /* WSAENETDOWN is ENETDOWN */
-    /* WSAENETUNREACH is ENETUNREACH */
-    /* WSAENETRESET is ENETRESET */
-    /* WSAECONNABORTED is ECONNABORTED */
-    /* WSAECONNRESET is ECONNRESET */
-    /* WSAENOBUFS is ENOBUFS */
-    /* WSAEISCONN is EISCONN */
-    /* WSAENOTCONN is ENOTCONN */
-    /* WSAESHUTDOWN is ESHUTDOWN */
-    /* WSAETOOMANYREFS is ETOOMANYREFS */
-    /* WSAETIMEDOUT is ETIMEDOUT */
-    /* WSAECONNREFUSED is ECONNREFUSED */
-    /* WSAELOOP is ELOOP */
-    /* WSAENAMETOOLONG maps to ENAMETOOLONG */
-    /* WSAEHOSTDOWN is EHOSTDOWN */
-    /* WSAEHOSTUNREACH is EHOSTUNREACH */
-    /* WSAENOTEMPTY maps to ENOTEMPTY */
-    /* WSAEPROCLIM is EPROCLIM */
-    /* WSAEUSERS is EUSERS */
-    /* WSAEDQUOT is EDQUOT */
-    /* WSAESTALE is ESTALE */
-    /* WSAEREMOTE is EREMOTE */
-    case WSASYSNOTREADY:
-      msg = "Network subsystem is unavailable";
-      break;
-    case WSAVERNOTSUPPORTED:
-      msg = "Winsock.dll version out of range";
-      break;
-    case WSANOTINITIALISED:
-      msg = "Successful WSAStartup not yet performed";
-      break;
-    case WSAEDISCON:
-      msg = "Graceful shutdown in progress";
-      break;
-    case WSAENOMORE: case WSA_E_NO_MORE:
-      msg = "No more results";
-      break;
-    case WSAECANCELLED: case WSA_E_CANCELLED:
-      msg = "Call was canceled";
-      break;
-    case WSAEINVALIDPROCTABLE:
-      msg = "Procedure call table is invalid";
-      break;
-    case WSAEINVALIDPROVIDER:
-      msg = "Service provider is invalid";
-      break;
-    case WSAEPROVIDERFAILEDINIT:
-      msg = "Service provider failed to initialize";
-      break;
-    case WSASYSCALLFAILURE:
-      msg = "System call failure";
-      break;
-    case WSASERVICE_NOT_FOUND:
-      msg = "Service not found";
-      break;
-    case WSATYPE_NOT_FOUND:
-      msg = "Class type not found";
-      break;
-    case WSAEREFUSED:
-      msg = "Database query was refused";
-      break;
-    case WSAHOST_NOT_FOUND:
-      msg = "Host not found";
-      break;
-    case WSATRY_AGAIN:
-      msg = "Nonauthoritative host not found";
-      break;
-    case WSANO_RECOVERY:
-      msg = "Nonrecoverable error";
-      break;
-    case WSANO_DATA:
-      msg = "Valid name, no data record of requested type";
-      break;
-    /* WSA_QOS_* omitted */
-#  endif
-# endif
-
-# if GNULIB_defined_ENOMSG
-    case ENOMSG:
-      msg = "No message of desired type";
-      break;
-# endif
-
-# if GNULIB_defined_EIDRM
-    case EIDRM:
-      msg = "Identifier removed";
-      break;
-# endif
-
-# if GNULIB_defined_ENOLINK
-    case ENOLINK:
-      msg = "Link has been severed";
-      break;
-# endif
-
-# if GNULIB_defined_EPROTO
-    case EPROTO:
-      msg = "Protocol error";
-      break;
-# endif
-
-# if GNULIB_defined_EMULTIHOP
-    case EMULTIHOP:
-      msg = "Multihop attempted";
-      break;
-# endif
-
-# if GNULIB_defined_EBADMSG
-    case EBADMSG:
-      msg = "Bad message";
-      break;
-# endif
-
-# if GNULIB_defined_EOVERFLOW
-    case EOVERFLOW:
-      msg = "Value too large for defined data type";
-      break;
-# endif
-
-# if GNULIB_defined_ENOTSUP
-    case ENOTSUP:
-      msg = "Not supported";
-      break;
-# endif
-
-# if GNULIB_defined_
-    case ECANCELED:
-      msg = "Operation canceled";
-      break;
-# endif
-    }
-
-  if (msg)
-    return (char *) msg;
-
-  {
-    char *result = strerror (n);
-
-    if (result == NULL || result[0] == '\0')
-      {
-       static char const fmt[] = "Unknown error (%d)";
-       static char msg_buf[sizeof fmt + INT_STRLEN_BOUND (n)];
-       sprintf (msg_buf, fmt, n);
-       return msg_buf;
-      }
-
-    return result;
-  }
-}
-
-#endif
diff --git a/lib/string.in.h b/lib/string.in.h
deleted file mode 100644 (file)
index a300dad..0000000
+++ /dev/null
@@ -1,607 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* A GNU-like <string.h>.
-
-   Copyright (C) 1995-1996, 2001-2008 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _GL_STRING_H
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-
-/* The include_next requires a split double-inclusion guard.  */
-#@INCLUDE_NEXT@ @NEXT_STRING_H@
-
-#ifndef _GL_STRING_H
-#define _GL_STRING_H
-
-
-#ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
-#  define __attribute__(Spec) /* empty */
-# endif
-/* The attribute __pure__ was added in gcc 2.96.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96)
-#  define __pure__ /* empty */
-# endif
-#endif
-
-
-/* The definition of GL_LINK_WARNING is copied here.  */
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Return the first occurrence of NEEDLE in HAYSTACK.  */
-#if @GNULIB_MEMMEM@
-# if @REPLACE_MEMMEM@
-#  define memmem rpl_memmem
-# endif
-# if ! @HAVE_DECL_MEMMEM@ || @REPLACE_MEMMEM@
-extern void *memmem (void const *__haystack, size_t __haystack_len,
-                    void const *__needle, size_t __needle_len)
-  __attribute__ ((__pure__));
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef memmem
-# define memmem(a,al,b,bl) \
-    (GL_LINK_WARNING ("memmem is unportable and often quadratic - " \
-                      "use gnulib module memmem-simple for portability, " \
-                      "and module memmem for speed" ), \
-     memmem (a, al, b, bl))
-#endif
-
-/* Copy N bytes of SRC to DEST, return pointer to bytes after the
-   last written byte.  */
-#if @GNULIB_MEMPCPY@
-# if ! @HAVE_MEMPCPY@
-extern void *mempcpy (void *restrict __dest, void const *restrict __src,
-                     size_t __n);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef mempcpy
-# define mempcpy(a,b,n) \
-    (GL_LINK_WARNING ("mempcpy is unportable - " \
-                      "use gnulib module mempcpy for portability"), \
-     mempcpy (a, b, n))
-#endif
-
-/* Search backwards through a block for a byte (specified as an int).  */
-#if @GNULIB_MEMRCHR@
-# if ! @HAVE_DECL_MEMRCHR@
-extern void *memrchr (void const *, int, size_t)
-  __attribute__ ((__pure__));
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef memrchr
-# define memrchr(a,b,c) \
-    (GL_LINK_WARNING ("memrchr is unportable - " \
-                      "use gnulib module memrchr for portability"), \
-     memrchr (a, b, c))
-#endif
-
-/* Find the first occurrence of C in S.  More efficient than
-   memchr(S,C,N), at the expense of undefined behavior if C does not
-   occur within N bytes.  */
-#if @GNULIB_RAWMEMCHR@
-# if ! @HAVE_RAWMEMCHR@
-extern void *rawmemchr (void const *__s, int __c_in)
-  __attribute__ ((__pure__));
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef rawmemchr
-# define rawmemchr(a,b) \
-    (GL_LINK_WARNING ("rawmemchr is unportable - " \
-                      "use gnulib module rawmemchr for portability"), \
-     rawmemchr (a, b))
-#endif
-
-/* Copy SRC to DST, returning the address of the terminating '\0' in DST.  */
-#if @GNULIB_STPCPY@
-# if ! @HAVE_STPCPY@
-extern char *stpcpy (char *restrict __dst, char const *restrict __src);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef stpcpy
-# define stpcpy(a,b) \
-    (GL_LINK_WARNING ("stpcpy is unportable - " \
-                      "use gnulib module stpcpy for portability"), \
-     stpcpy (a, b))
-#endif
-
-/* Copy no more than N bytes of SRC to DST, returning a pointer past the
-   last non-NUL byte written into DST.  */
-#if @GNULIB_STPNCPY@
-# if ! @HAVE_STPNCPY@
-#  define stpncpy gnu_stpncpy
-extern char *stpncpy (char *restrict __dst, char const *restrict __src,
-                     size_t __n);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef stpncpy
-# define stpncpy(a,b,n) \
-    (GL_LINK_WARNING ("stpncpy is unportable - " \
-                      "use gnulib module stpncpy for portability"), \
-     stpncpy (a, b, n))
-#endif
-
-#if defined GNULIB_POSIXCHECK
-/* strchr() does not work with multibyte strings if the locale encoding is
-   GB18030 and the character to be searched is a digit.  */
-# undef strchr
-# define strchr(s,c) \
-    (GL_LINK_WARNING ("strchr cannot work correctly on character strings " \
-                      "in some multibyte locales - " \
-                      "use mbschr if you care about internationalization"), \
-     strchr (s, c))
-#endif
-
-/* Find the first occurrence of C in S or the final NUL byte.  */
-#if @GNULIB_STRCHRNUL@
-# if ! @HAVE_STRCHRNUL@
-extern char *strchrnul (char const *__s, int __c_in)
-  __attribute__ ((__pure__));
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strchrnul
-# define strchrnul(a,b) \
-    (GL_LINK_WARNING ("strchrnul is unportable - " \
-                      "use gnulib module strchrnul for portability"), \
-     strchrnul (a, b))
-#endif
-
-/* Duplicate S, returning an identical malloc'd string.  */
-#if @GNULIB_STRDUP@
-# if @REPLACE_STRDUP@
-#  undef strdup
-#  define strdup rpl_strdup
-# endif
-# if !(@HAVE_DECL_STRDUP@ || defined strdup) || @REPLACE_STRDUP@
-extern char *strdup (char const *__s);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strdup
-# define strdup(a) \
-    (GL_LINK_WARNING ("strdup is unportable - " \
-                      "use gnulib module strdup for portability"), \
-     strdup (a))
-#endif
-
-/* Return a newly allocated copy of at most N bytes of STRING.  */
-#if @GNULIB_STRNDUP@
-# if ! @HAVE_STRNDUP@
-#  undef strndup
-#  define strndup rpl_strndup
-# endif
-# if ! @HAVE_STRNDUP@ || ! @HAVE_DECL_STRNDUP@
-extern char *strndup (char const *__string, size_t __n);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strndup
-# define strndup(a,n) \
-    (GL_LINK_WARNING ("strndup is unportable - " \
-                      "use gnulib module strndup for portability"), \
-     strndup (a, n))
-#endif
-
-/* Find the length (number of bytes) of STRING, but scan at most
-   MAXLEN bytes.  If no '\0' terminator is found in that many bytes,
-   return MAXLEN.  */
-#if @GNULIB_STRNLEN@
-# if ! @HAVE_DECL_STRNLEN@
-extern size_t strnlen (char const *__string, size_t __maxlen)
-  __attribute__ ((__pure__));
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strnlen
-# define strnlen(a,n) \
-    (GL_LINK_WARNING ("strnlen is unportable - " \
-                      "use gnulib module strnlen for portability"), \
-     strnlen (a, n))
-#endif
-
-#if defined GNULIB_POSIXCHECK
-/* strcspn() assumes the second argument is a list of single-byte characters.
-   Even in this simple case, it does not work with multibyte strings if the
-   locale encoding is GB18030 and one of the characters to be searched is a
-   digit.  */
-# undef strcspn
-# define strcspn(s,a) \
-    (GL_LINK_WARNING ("strcspn cannot work correctly on character strings " \
-                      "in multibyte locales - " \
-                      "use mbscspn if you care about internationalization"), \
-     strcspn (s, a))
-#endif
-
-/* Find the first occurrence in S of any character in ACCEPT.  */
-#if @GNULIB_STRPBRK@
-# if ! @HAVE_STRPBRK@
-extern char *strpbrk (char const *__s, char const *__accept)
-  __attribute__ ((__pure__));
-# endif
-# if defined GNULIB_POSIXCHECK
-/* strpbrk() assumes the second argument is a list of single-byte characters.
-   Even in this simple case, it does not work with multibyte strings if the
-   locale encoding is GB18030 and one of the characters to be searched is a
-   digit.  */
-#  undef strpbrk
-#  define strpbrk(s,a) \
-     (GL_LINK_WARNING ("strpbrk cannot work correctly on character strings " \
-                       "in multibyte locales - " \
-                       "use mbspbrk if you care about internationalization"), \
-      strpbrk (s, a))
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strpbrk
-# define strpbrk(s,a) \
-    (GL_LINK_WARNING ("strpbrk is unportable - " \
-                      "use gnulib module strpbrk for portability"), \
-     strpbrk (s, a))
-#endif
-
-#if defined GNULIB_POSIXCHECK
-/* strspn() assumes the second argument is a list of single-byte characters.
-   Even in this simple case, it cannot work with multibyte strings.  */
-# undef strspn
-# define strspn(s,a) \
-    (GL_LINK_WARNING ("strspn cannot work correctly on character strings " \
-                      "in multibyte locales - " \
-                      "use mbsspn if you care about internationalization"), \
-     strspn (s, a))
-#endif
-
-#if defined GNULIB_POSIXCHECK
-/* strrchr() does not work with multibyte strings if the locale encoding is
-   GB18030 and the character to be searched is a digit.  */
-# undef strrchr
-# define strrchr(s,c) \
-    (GL_LINK_WARNING ("strrchr cannot work correctly on character strings " \
-                      "in some multibyte locales - " \
-                      "use mbsrchr if you care about internationalization"), \
-     strrchr (s, c))
-#endif
-
-/* Search the next delimiter (char listed in DELIM) starting at *STRINGP.
-   If one is found, overwrite it with a NUL, and advance *STRINGP
-   to point to the next char after it.  Otherwise, set *STRINGP to NULL.
-   If *STRINGP was already NULL, nothing happens.
-   Return the old value of *STRINGP.
-
-   This is a variant of strtok() that is multithread-safe and supports
-   empty fields.
-
-   Caveat: It modifies the original string.
-   Caveat: These functions cannot be used on constant strings.
-   Caveat: The identity of the delimiting character is lost.
-   Caveat: It doesn't work with multibyte strings unless all of the delimiter
-           characters are ASCII characters < 0x30.
-
-   See also strtok_r().  */
-#if @GNULIB_STRSEP@
-# if ! @HAVE_STRSEP@
-extern char *strsep (char **restrict __stringp, char const *restrict __delim);
-# endif
-# if defined GNULIB_POSIXCHECK
-#  undef strsep
-#  define strsep(s,d) \
-     (GL_LINK_WARNING ("strsep cannot work correctly on character strings " \
-                       "in multibyte locales - " \
-                       "use mbssep if you care about internationalization"), \
-      strsep (s, d))
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strsep
-# define strsep(s,d) \
-    (GL_LINK_WARNING ("strsep is unportable - " \
-                      "use gnulib module strsep for portability"), \
-     strsep (s, d))
-#endif
-
-#if @GNULIB_STRSTR@
-# if @REPLACE_STRSTR@
-#  define strstr rpl_strstr
-char *strstr (const char *haystack, const char *needle)
-  __attribute__ ((__pure__));
-# endif
-#elif defined GNULIB_POSIXCHECK
-/* strstr() does not work with multibyte strings if the locale encoding is
-   different from UTF-8:
-   POSIX says that it operates on "strings", and "string" in POSIX is defined
-   as a sequence of bytes, not of characters.  */
-# undef strstr
-# define strstr(a,b) \
-    (GL_LINK_WARNING ("strstr is quadratic on many systems, and cannot " \
-                      "work correctly on character strings in most "    \
-                      "multibyte locales - " \
-                      "use mbsstr if you care about internationalization, " \
-                      "or use strstr if you care about speed"), \
-     strstr (a, b))
-#endif
-
-/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive
-   comparison.  */
-#if @GNULIB_STRCASESTR@
-# if @REPLACE_STRCASESTR@
-#  define strcasestr rpl_strcasestr
-# endif
-# if ! @HAVE_STRCASESTR@ || @REPLACE_STRCASESTR@
-extern char *strcasestr (const char *haystack, const char *needle)
-  __attribute__ ((__pure__));
-# endif
-#elif defined GNULIB_POSIXCHECK
-/* strcasestr() does not work with multibyte strings:
-   It is a glibc extension, and glibc implements it only for unibyte
-   locales.  */
-# undef strcasestr
-# define strcasestr(a,b) \
-    (GL_LINK_WARNING ("strcasestr does work correctly on character strings " \
-                      "in multibyte locales - " \
-                      "use mbscasestr if you care about " \
-                      "internationalization, or use c-strcasestr if you want " \
-                      "a locale independent function"), \
-     strcasestr (a, b))
-#endif
-
-/* Parse S into tokens separated by characters in DELIM.
-   If S is NULL, the saved pointer in SAVE_PTR is used as
-   the next starting point.  For example:
-       char s[] = "-abc-=-def";
-       char *sp;
-       x = strtok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
-       x = strtok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
-       x = strtok_r(NULL, "=", &sp);   // x = NULL
-               // s = "abc\0-def\0"
-
-   This is a variant of strtok() that is multithread-safe.
-
-   For the POSIX documentation for this function, see:
-   http://www.opengroup.org/susv3xsh/strtok.html
-
-   Caveat: It modifies the original string.
-   Caveat: These functions cannot be used on constant strings.
-   Caveat: The identity of the delimiting character is lost.
-   Caveat: It doesn't work with multibyte strings unless all of the delimiter
-           characters are ASCII characters < 0x30.
-
-   See also strsep().  */
-#if @GNULIB_STRTOK_R@
-# if ! @HAVE_DECL_STRTOK_R@
-extern char *strtok_r (char *restrict s, char const *restrict delim,
-                      char **restrict save_ptr);
-# endif
-# if defined GNULIB_POSIXCHECK
-#  undef strtok_r
-#  define strtok_r(s,d,p) \
-     (GL_LINK_WARNING ("strtok_r cannot work correctly on character strings " \
-                       "in multibyte locales - " \
-                       "use mbstok_r if you care about internationalization"), \
-      strtok_r (s, d, p))
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strtok_r
-# define strtok_r(s,d,p) \
-    (GL_LINK_WARNING ("strtok_r is unportable - " \
-                      "use gnulib module strtok_r for portability"), \
-     strtok_r (s, d, p))
-#endif
-
-
-/* The following functions are not specified by POSIX.  They are gnulib
-   extensions.  */
-
-#if @GNULIB_MBSLEN@
-/* Return the number of multibyte characters in the character string STRING.
-   This considers multibyte characters, unlike strlen, which counts bytes.  */
-extern size_t mbslen (const char *string);
-#endif
-
-#if @GNULIB_MBSNLEN@
-/* Return the number of multibyte characters in the character string starting
-   at STRING and ending at STRING + LEN.  */
-extern size_t mbsnlen (const char *string, size_t len);
-#endif
-
-#if @GNULIB_MBSCHR@
-/* Locate the first single-byte character C in the character string STRING,
-   and return a pointer to it.  Return NULL if C is not found in STRING.
-   Unlike strchr(), this function works correctly in multibyte locales with
-   encodings such as GB18030.  */
-# define mbschr rpl_mbschr /* avoid collision with HP-UX function */
-extern char * mbschr (const char *string, int c);
-#endif
-
-#if @GNULIB_MBSRCHR@
-/* Locate the last single-byte character C in the character string STRING,
-   and return a pointer to it.  Return NULL if C is not found in STRING.
-   Unlike strrchr(), this function works correctly in multibyte locales with
-   encodings such as GB18030.  */
-# define mbsrchr rpl_mbsrchr /* avoid collision with HP-UX function */
-extern char * mbsrchr (const char *string, int c);
-#endif
-
-#if @GNULIB_MBSSTR@
-/* Find the first occurrence of the character string NEEDLE in the character
-   string HAYSTACK.  Return NULL if NEEDLE is not found in HAYSTACK.
-   Unlike strstr(), this function works correctly in multibyte locales with
-   encodings different from UTF-8.  */
-extern char * mbsstr (const char *haystack, const char *needle);
-#endif
-
-#if @GNULIB_MBSCASECMP@
-/* Compare the character 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.
-   Note: This function may, in multibyte locales, return 0 for strings of
-   different lengths!
-   Unlike strcasecmp(), this function works correctly in multibyte locales.  */
-extern int mbscasecmp (const char *s1, const char *s2);
-#endif
-
-#if @GNULIB_MBSNCASECMP@
-/* Compare the initial segment of the character string S1 consisting of at most
-   N characters with the initial segment of the character string S2 consisting
-   of at most N characters, ignoring case, returning less than, equal to or
-   greater than zero if the initial segment of S1 is lexicographically less
-   than, equal to or greater than the initial segment of S2.
-   Note: This function may, in multibyte locales, return 0 for initial segments
-   of different lengths!
-   Unlike strncasecmp(), this function works correctly in multibyte locales.
-   But beware that N is not a byte count but a character count!  */
-extern int mbsncasecmp (const char *s1, const char *s2, size_t n);
-#endif
-
-#if @GNULIB_MBSPCASECMP@
-/* Compare the initial segment of the character string STRING consisting of
-   at most mbslen (PREFIX) characters with the character string PREFIX,
-   ignoring case, returning less than, equal to or greater than zero if this
-   initial segment is lexicographically less than, equal to or greater than
-   PREFIX.
-   Note: This function may, in multibyte locales, return 0 if STRING is of
-   smaller length than PREFIX!
-   Unlike strncasecmp(), this function works correctly in multibyte
-   locales.  */
-extern char * mbspcasecmp (const char *string, const char *prefix);
-#endif
-
-#if @GNULIB_MBSCASESTR@
-/* Find the first occurrence of the character string NEEDLE in the character
-   string HAYSTACK, using case-insensitive comparison.
-   Note: This function may, in multibyte locales, return success even if
-   strlen (haystack) < strlen (needle) !
-   Unlike strcasestr(), this function works correctly in multibyte locales.  */
-extern char * mbscasestr (const char *haystack, const char *needle);
-#endif
-
-#if @GNULIB_MBSCSPN@
-/* Find the first occurrence in the character string STRING of any character
-   in the character string ACCEPT.  Return the number of bytes from the
-   beginning of the string to this occurrence, or to the end of the string
-   if none exists.
-   Unlike strcspn(), this function works correctly in multibyte locales.  */
-extern size_t mbscspn (const char *string, const char *accept);
-#endif
-
-#if @GNULIB_MBSPBRK@
-/* Find the first occurrence in the character string STRING of any character
-   in the character string ACCEPT.  Return the pointer to it, or NULL if none
-   exists.
-   Unlike strpbrk(), this function works correctly in multibyte locales.  */
-# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */
-extern char * mbspbrk (const char *string, const char *accept);
-#endif
-
-#if @GNULIB_MBSSPN@
-/* Find the first occurrence in the character string STRING of any character
-   not in the character string REJECT.  Return the number of bytes from the
-   beginning of the string to this occurrence, or to the end of the string
-   if none exists.
-   Unlike strspn(), this function works correctly in multibyte locales.  */
-extern size_t mbsspn (const char *string, const char *reject);
-#endif
-
-#if @GNULIB_MBSSEP@
-/* Search the next delimiter (multibyte character listed in the character
-   string DELIM) starting at the character string *STRINGP.
-   If one is found, overwrite it with a NUL, and advance *STRINGP to point
-   to the next multibyte character after it.  Otherwise, set *STRINGP to NULL.
-   If *STRINGP was already NULL, nothing happens.
-   Return the old value of *STRINGP.
-
-   This is a variant of mbstok_r() that supports empty fields.
-
-   Caveat: It modifies the original string.
-   Caveat: These functions cannot be used on constant strings.
-   Caveat: The identity of the delimiting character is lost.
-
-   See also mbstok_r().  */
-extern char * mbssep (char **stringp, const char *delim);
-#endif
-
-#if @GNULIB_MBSTOK_R@
-/* Parse the character string STRING into tokens separated by characters in
-   the character string DELIM.
-   If STRING is NULL, the saved pointer in SAVE_PTR is used as
-   the next starting point.  For example:
-       char s[] = "-abc-=-def";
-       char *sp;
-       x = mbstok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
-       x = mbstok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
-       x = mbstok_r(NULL, "=", &sp);   // x = NULL
-               // s = "abc\0-def\0"
-
-   Caveat: It modifies the original string.
-   Caveat: These functions cannot be used on constant strings.
-   Caveat: The identity of the delimiting character is lost.
-
-   See also mbssep().  */
-extern char * mbstok_r (char *string, const char *delim, char **save_ptr);
-#endif
-
-/* Map any int, typically from errno, into an error message.  */
-#if @GNULIB_STRERROR@
-# if @REPLACE_STRERROR@
-#  undef strerror
-#  define strerror rpl_strerror
-extern char *strerror (int);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strerror
-# define strerror(e) \
-    (GL_LINK_WARNING ("strerror is unportable - " \
-                      "use gnulib module strerror to guarantee non-NULL result"), \
-     strerror (e))
-#endif
-
-#if @GNULIB_STRSIGNAL@
-# if @REPLACE_STRSIGNAL@
-#  define strsignal rpl_strsignal
-# endif
-# if ! @HAVE_DECL_STRSIGNAL@ || @REPLACE_STRSIGNAL@
-extern char *strsignal (int __sig);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strsignal
-# define strsignal(a) \
-    (GL_LINK_WARNING ("strsignal is unportable - " \
-                      "use gnulib module strsignal for portability"), \
-     strsignal (a))
-#endif
-
-#if @GNULIB_STRVERSCMP@
-# if !@HAVE_STRVERSCMP@
-extern int strverscmp (const char *, const char *);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef strverscmp
-# define strverscmp(a, b) \
-    (GL_LINK_WARNING ("strverscmp is unportable - " \
-                      "use gnulib module strverscmp for portability"), \
-     strverscmp (a, b))
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _GL_STRING_H */
-#endif /* _GL_STRING_H */
diff --git a/lib/strings.in.h b/lib/strings.in.h
deleted file mode 100644 (file)
index 33070df..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* A substitute <strings.h>.
-
-   Copyright (C) 2007-2008 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _GL_STRINGS_H
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-
-/* The include_next requires a split double-inclusion guard.  */
-#@INCLUDE_NEXT@ @NEXT_STRINGS_H@
-
-#ifndef _GL_STRINGS_H
-#define _GL_STRINGS_H
-
-
-/* The definition of GL_LINK_WARNING is copied here.  */
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* 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.
-   Note: This function does not work in multibyte locales.  */
-#if ! @HAVE_STRCASECMP@
-extern int strcasecmp (char const *s1, char const *s2);
-#endif
-#if defined GNULIB_POSIXCHECK
-/* strcasecmp() does not work with multibyte strings:
-   POSIX says that it operates on "strings", and "string" in POSIX is defined
-   as a sequence of bytes, not of characters.   */
-# undef strcasecmp
-# define strcasecmp(a,b) \
-    (GL_LINK_WARNING ("strcasecmp cannot work correctly on character strings " \
-                      "in multibyte locales - " \
-                      "use mbscasecmp if you care about " \
-                      "internationalization, or use c_strcasecmp (from " \
-                      "gnulib module c-strcase) if you want a locale " \
-                      "independent function"), \
-     strcasecmp (a, b))
-#endif
-
-/* Compare no more than N bytes 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.
-   Note: This function cannot work correctly in multibyte locales.  */
-#if ! @HAVE_DECL_STRNCASECMP@
-extern int strncasecmp (char const *s1, char const *s2, size_t n);
-#endif
-#if defined GNULIB_POSIXCHECK
-/* strncasecmp() does not work with multibyte strings:
-   POSIX says that it operates on "strings", and "string" in POSIX is defined
-   as a sequence of bytes, not of characters.  */
-# undef strncasecmp
-# define strncasecmp(a,b,n) \
-    (GL_LINK_WARNING ("strncasecmp cannot work correctly on character " \
-                      "strings in multibyte locales - " \
-                      "use mbsncasecmp or mbspcasecmp if you care about " \
-                      "internationalization, or use c_strncasecmp (from " \
-                      "gnulib module c-strcase) if you want a locale " \
-                      "independent function"), \
-     strncasecmp (a, b, n))
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _GL_STRING_H */
-#endif /* _GL_STRING_H */
diff --git a/lib/stripslash.c b/lib/stripslash.c
deleted file mode 100644 (file)
index 4084410..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/* stripslash.c -- remove redundant trailing slashes from a file name
-
-   Copyright (C) 1990, 2001, 2003-2006 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>
-
-#include "dirname.h"
-
-/* Remove trailing slashes from FILE.  Return true if a trailing slash
-   was removed.  This is useful when using file name completion from a
-   shell that adds a "/" after directory names (such as tcsh and
-   bash), because on symlinks to directories, several system calls
-   have different semantics according to whether a trailing slash is
-   present.  */
-
-bool
-strip_trailing_slashes (char *file)
-{
-  char *base = last_component (file);
-  char *base_lim;
-  bool had_slash;
-
-  /* last_component returns "" for file system roots, but we need to turn
-     `///' into `/'.  */
-  if (! *base)
-    base = file;
-  base_lim = base + base_len (base);
-  had_slash = (*base_lim != '\0');
-  *base_lim = '\0';
-  return had_slash;
-}
diff --git a/lib/strncasecmp.c b/lib/strncasecmp.c
deleted file mode 100644 (file)
index c26b75e..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* strncasecmp.c -- case insensitive string comparator
-   Copyright (C) 1998-1999, 2005-2007 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include <string.h>
-
-#include <ctype.h>
-#include <limits.h>
-
-#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
-
-/* Compare no more than N bytes 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.
-   Note: This function cannot work correctly in multibyte locales.  */
-
-int
-strncasecmp (const char *s1, const char *s2, size_t n)
-{
-  register const unsigned char *p1 = (const unsigned char *) s1;
-  register const unsigned char *p2 = (const unsigned char *) s2;
-  unsigned char c1, c2;
-
-  if (p1 == p2 || n == 0)
-    return 0;
-
-  do
-    {
-      c1 = TOLOWER (*p1);
-      c2 = TOLOWER (*p2);
-
-      if (--n == 0 || c1 == '\0')
-       break;
-
-      ++p1;
-      ++p2;
-    }
-  while (c1 == c2);
-
-  if (UCHAR_MAX <= INT_MAX)
-    return c1 - c2;
-  else
-    /* On machines where 'char' and 'int' are types of the same size, the
-       difference of two 'unsigned char' values - including the sign bit -
-       doesn't fit in an 'int'.  */
-    return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0);
-}
diff --git a/lib/strndup.c b/lib/strndup.c
deleted file mode 100644 (file)
index 239c625..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* A replacement function, for systems that lack strndup.
-
-   Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2005, 2006, 2007
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#include <config.h>
-
-#include <string.h>
-
-#include <stdlib.h>
-
-char *
-strndup (char const *s, size_t n)
-{
-  size_t len = strnlen (s, n);
-  char *new = malloc (len + 1);
-
-  if (new == NULL)
-    return NULL;
-
-  new[len] = '\0';
-  return memcpy (new, s, len);
-}
diff --git a/lib/strnlen.c b/lib/strnlen.c
deleted file mode 100644 (file)
index dec9587..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Find the length of STRING, but scan at most MAXLEN characters.
-   Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
-   Written by Simon Josefsson.
-
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#include <config.h>
-
-#include <string.h>
-
-/* Find the length of STRING, but scan at most MAXLEN characters.
-   If no '\0' terminator is found in that many characters, return MAXLEN.  */
-
-size_t
-strnlen (const char *string, size_t maxlen)
-{
-  const char *end = memchr (string, '\0', maxlen);
-  return end ? (size_t) (end - string) : maxlen;
-}
diff --git a/lib/strnlen1.c b/lib/strnlen1.c
deleted file mode 100644 (file)
index 752d4fe..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
-   Copyright (C) 2005-2006 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 "strnlen1.h"
-
-#include <string.h>
-
-/* 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.  */
-size_t
-strnlen1 (const char *string, size_t maxlen)
-{
-  const char *end = (const char *) memchr (string, '\0', maxlen);
-  if (end != NULL)
-    return end - string + 1;
-  else
-    return maxlen;
-}
diff --git a/lib/strnlen1.h b/lib/strnlen1.h
deleted file mode 100644 (file)
index c0ea357..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Find the length of STRING + 1, but scan at most MAXLEN bytes.
-   Copyright (C) 2005 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 _STRNLEN1_H
-#define _STRNLEN1_H
-
-#include <stddef.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#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
-}
-#endif
-
-
-#endif /* _STRNLEN1_H */
diff --git a/lib/strtoimax.c b/lib/strtoimax.c
deleted file mode 100644 (file)
index ab9bcff..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Convert string representation of a number into an intmax_t value.
-
-   Copyright (C) 1999, 2001, 2002, 2003, 2004, 2006 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. */
-
-#include <config.h>
-
-/* Verify interface.  */
-#include <inttypes.h>
-
-#include <stdlib.h>
-
-#include "verify.h"
-
-#ifdef UNSIGNED
-# ifndef HAVE_DECL_STRTOULL
-"this configure-time declaration test was not run"
-# endif
-# if !HAVE_DECL_STRTOULL && HAVE_UNSIGNED_LONG_LONG_INT
-unsigned long long int strtoull (char const *, char **, int);
-# endif
-
-#else
-
-# ifndef HAVE_DECL_STRTOLL
-"this configure-time declaration test was not run"
-# endif
-# if !HAVE_DECL_STRTOLL && HAVE_LONG_LONG_INT
-long long int strtoll (char const *, char **, int);
-# endif
-#endif
-
-#ifdef UNSIGNED
-# define Have_long_long HAVE_UNSIGNED_LONG_LONG_INT
-# define Int uintmax_t
-# define Unsigned unsigned
-# define strtoimax strtoumax
-# define strtol strtoul
-# define strtoll strtoull
-#else
-# define Have_long_long HAVE_LONG_LONG_INT
-# define Int intmax_t
-# define Unsigned
-#endif
-
-Int
-strtoimax (char const *ptr, char **endptr, int base)
-{
-#if Have_long_long
-  verify (sizeof (Int) == sizeof (Unsigned long int)
-         || sizeof (Int) == sizeof (Unsigned long long int));
-
-  if (sizeof (Int) != sizeof (Unsigned long int))
-    return strtoll (ptr, endptr, base);
-#else
-  verify (sizeof (Int) == sizeof (Unsigned long int));
-#endif
-
-  return strtol (ptr, endptr, base);
-}
diff --git a/lib/strtol.c b/lib/strtol.c
deleted file mode 100644 (file)
index 0b2c82a..0000000
+++ /dev/null
@@ -1,435 +0,0 @@
-/* Convert string representation of a number into an integer value.
-
-   Copyright (C) 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2003, 2005,
-   2006, 2007
-   Free Software Foundation, Inc.
-
-   NOTE: The canonical source of this file is maintained with the GNU C
-   Library.  Bugs can be reported to bug-glibc@gnu.org.
-
-   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 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/>.  */
-
-#ifdef _LIBC
-# define USE_NUMBER_GROUPING
-#else
-# include <config.h>
-#endif
-
-#include <ctype.h>
-#include <errno.h>
-#ifndef __set_errno
-# define __set_errno(Val) errno = (Val)
-#endif
-
-#include <limits.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef USE_NUMBER_GROUPING
-# include "../locale/localeinfo.h"
-#endif
-
-/* Nonzero if we are defining `strtoul' or `strtoull', operating on
-   unsigned integers.  */
-#ifndef UNSIGNED
-# define UNSIGNED 0
-# define INT LONG int
-#else
-# define INT unsigned LONG int
-#endif
-
-/* Determine the name.  */
-#ifdef USE_IN_EXTENDED_LOCALE_MODEL
-# if UNSIGNED
-#  ifdef USE_WIDE_CHAR
-#   ifdef QUAD
-#    define strtol __wcstoull_l
-#   else
-#    define strtol __wcstoul_l
-#   endif
-#  else
-#   ifdef QUAD
-#    define strtol __strtoull_l
-#   else
-#    define strtol __strtoul_l
-#   endif
-#  endif
-# else
-#  ifdef USE_WIDE_CHAR
-#   ifdef QUAD
-#    define strtol __wcstoll_l
-#   else
-#    define strtol __wcstol_l
-#   endif
-#  else
-#   ifdef QUAD
-#    define strtol __strtoll_l
-#   else
-#    define strtol __strtol_l
-#   endif
-#  endif
-# endif
-#else
-# if UNSIGNED
-#  ifdef USE_WIDE_CHAR
-#   ifdef QUAD
-#    define strtol wcstoull
-#   else
-#    define strtol wcstoul
-#   endif
-#  else
-#   ifdef QUAD
-#    define strtol strtoull
-#   else
-#    define strtol strtoul
-#   endif
-#  endif
-# else
-#  ifdef USE_WIDE_CHAR
-#   ifdef QUAD
-#    define strtol wcstoll
-#   else
-#    define strtol wcstol
-#   endif
-#  else
-#   ifdef QUAD
-#    define strtol strtoll
-#   endif
-#  endif
-# endif
-#endif
-
-/* If QUAD is defined, we are defining `strtoll' or `strtoull',
-   operating on `long long int's.  */
-#ifdef QUAD
-# define LONG long long
-# define STRTOL_LONG_MIN LONG_LONG_MIN
-# define STRTOL_LONG_MAX LONG_LONG_MAX
-# define STRTOL_ULONG_MAX ULONG_LONG_MAX
-
-/* The extra casts in the following macros work around compiler bugs,
-   e.g., in Cray C 5.0.3.0.  */
-
-/* True if negative values of the signed integer type T use two's
-   complement, ones' complement, or signed magnitude representation,
-   respectively.  Much GNU code assumes two's complement, but some
-   people like to be portable to all possible C hosts.  */
-# define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
-# define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
-# define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
-
-/* True if the arithmetic type T is signed.  */
-# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
-
-/* The maximum and minimum values for the integer type T.  These
-   macros have undefined behavior if T is signed and has padding bits.
-   If this is a problem for you, please let us know how to fix it for
-   your host.  */
-# define TYPE_MINIMUM(t) \
-   ((t) (! TYPE_SIGNED (t) \
-        ? (t) 0 \
-        : TYPE_SIGNED_MAGNITUDE (t) \
-        ? ~ (t) 0 \
-        : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
-# define TYPE_MAXIMUM(t) \
-   ((t) (! TYPE_SIGNED (t) \
-        ? (t) -1 \
-        : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
-
-# ifndef ULONG_LONG_MAX
-#  define ULONG_LONG_MAX TYPE_MAXIMUM (unsigned long long)
-# endif
-# ifndef LONG_LONG_MAX
-#  define LONG_LONG_MAX TYPE_MAXIMUM (long long int)
-# endif
-# ifndef LONG_LONG_MIN
-#  define LONG_LONG_MIN TYPE_MINIMUM (long long int)
-# endif
-
-# if __GNUC__ == 2 && __GNUC_MINOR__ < 7
-   /* Work around gcc bug with using this constant.  */
-   static const unsigned long long int maxquad = ULONG_LONG_MAX;
-#  undef STRTOL_ULONG_MAX
-#  define STRTOL_ULONG_MAX maxquad
-# endif
-#else
-# define LONG long
-# define STRTOL_LONG_MIN LONG_MIN
-# define STRTOL_LONG_MAX LONG_MAX
-# define STRTOL_ULONG_MAX ULONG_MAX
-#endif
-
-
-/* We use this code also for the extended locale handling where the
-   function gets as an additional argument the locale which has to be
-   used.  To access the values we have to redefine the _NL_CURRENT
-   macro.  */
-#ifdef USE_IN_EXTENDED_LOCALE_MODEL
-# undef _NL_CURRENT
-# define _NL_CURRENT(category, item) \
-  (current->values[_NL_ITEM_INDEX (item)].string)
-# define LOCALE_PARAM , loc
-# define LOCALE_PARAM_PROTO , __locale_t loc
-#else
-# define LOCALE_PARAM
-# define LOCALE_PARAM_PROTO
-#endif
-
-#include <wchar.h>
-
-#ifdef USE_WIDE_CHAR
-# include <wctype.h>
-# define L_(Ch) L##Ch
-# define UCHAR_TYPE wint_t
-# define STRING_TYPE wchar_t
-# ifdef USE_IN_EXTENDED_LOCALE_MODEL
-#  define ISSPACE(Ch) __iswspace_l ((Ch), loc)
-#  define ISALPHA(Ch) __iswalpha_l ((Ch), loc)
-#  define TOUPPER(Ch) __towupper_l ((Ch), loc)
-# else
-#  define ISSPACE(Ch) iswspace (Ch)
-#  define ISALPHA(Ch) iswalpha (Ch)
-#  define TOUPPER(Ch) towupper (Ch)
-# endif
-#else
-# define L_(Ch) Ch
-# define UCHAR_TYPE unsigned char
-# define STRING_TYPE char
-# ifdef USE_IN_EXTENDED_LOCALE_MODEL
-#  define ISSPACE(Ch) __isspace_l ((Ch), loc)
-#  define ISALPHA(Ch) __isalpha_l ((Ch), loc)
-#  define TOUPPER(Ch) __toupper_l ((Ch), loc)
-# else
-#  define ISSPACE(Ch) isspace (Ch)
-#  define ISALPHA(Ch) isalpha (Ch)
-#  define TOUPPER(Ch) toupper (Ch)
-# endif
-#endif
-
-#define INTERNAL(X) INTERNAL1(X)
-#define INTERNAL1(X) __##X##_internal
-#define WEAKNAME(X) WEAKNAME1(X)
-
-#ifdef USE_NUMBER_GROUPING
-/* This file defines a function to check for correct grouping.  */
-# include "grouping.h"
-#endif
-
-
-
-/* Convert NPTR to an `unsigned long int' or `long int' in base BASE.
-   If BASE is 0 the base is determined by the presence of a leading
-   zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal.
-   If BASE is < 2 or > 36, it is reset to 10.
-   If ENDPTR is not NULL, a pointer to the character after the last
-   one converted is stored in *ENDPTR.  */
-
-INT
-INTERNAL (strtol) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
-                  int base, int group LOCALE_PARAM_PROTO)
-{
-  int negative;
-  register unsigned LONG int cutoff;
-  register unsigned int cutlim;
-  register unsigned LONG int i;
-  register const STRING_TYPE *s;
-  register UCHAR_TYPE c;
-  const STRING_TYPE *save, *end;
-  int overflow;
-
-#ifdef USE_NUMBER_GROUPING
-# ifdef USE_IN_EXTENDED_LOCALE_MODEL
-  struct locale_data *current = loc->__locales[LC_NUMERIC];
-# endif
-  /* The thousands character of the current locale.  */
-  wchar_t thousands = L'\0';
-  /* The numeric grouping specification of the current locale,
-     in the format described in <locale.h>.  */
-  const char *grouping;
-
-  if (group)
-    {
-      grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
-      if (*grouping <= 0 || *grouping == CHAR_MAX)
-       grouping = NULL;
-      else
-       {
-         /* Figure out the thousands separator character.  */
-# if defined _LIBC || defined _HAVE_BTOWC
-         thousands = __btowc (*_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP));
-         if (thousands == WEOF)
-           thousands = L'\0';
-# endif
-         if (thousands == L'\0')
-           grouping = NULL;
-       }
-    }
-  else
-    grouping = NULL;
-#endif
-
-  if (base < 0 || base == 1 || base > 36)
-    {
-      __set_errno (EINVAL);
-      return 0;
-    }
-
-  save = s = nptr;
-
-  /* Skip white space.  */
-  while (ISSPACE (*s))
-    ++s;
-  if (*s == L_('\0'))
-    goto noconv;
-
-  /* Check for a sign.  */
-  if (*s == L_('-'))
-    {
-      negative = 1;
-      ++s;
-    }
-  else if (*s == L_('+'))
-    {
-      negative = 0;
-      ++s;
-    }
-  else
-    negative = 0;
-
-  /* Recognize number prefix and if BASE is zero, figure it out ourselves.  */
-  if (*s == L_('0'))
-    {
-      if ((base == 0 || base == 16) && TOUPPER (s[1]) == L_('X'))
-       {
-         s += 2;
-         base = 16;
-       }
-      else if (base == 0)
-       base = 8;
-    }
-  else if (base == 0)
-    base = 10;
-
-  /* Save the pointer so we can check later if anything happened.  */
-  save = s;
-
-#ifdef USE_NUMBER_GROUPING
-  if (group)
-    {
-      /* Find the end of the digit string and check its grouping.  */
-      end = s;
-      for (c = *end; c != L_('\0'); c = *++end)
-       if ((wchar_t) c != thousands
-           && ((wchar_t) c < L_('0') || (wchar_t) c > L_('9'))
-           && (!ISALPHA (c) || (int) (TOUPPER (c) - L_('A') + 10) >= base))
-         break;
-      if (*s == thousands)
-       end = s;
-      else
-       end = correctly_grouped_prefix (s, end, thousands, grouping);
-    }
-  else
-#endif
-    end = NULL;
-
-  cutoff = STRTOL_ULONG_MAX / (unsigned LONG int) base;
-  cutlim = STRTOL_ULONG_MAX % (unsigned LONG int) base;
-
-  overflow = 0;
-  i = 0;
-  for (c = *s; c != L_('\0'); c = *++s)
-    {
-      if (s == end)
-       break;
-      if (c >= L_('0') && c <= L_('9'))
-       c -= L_('0');
-      else if (ISALPHA (c))
-       c = TOUPPER (c) - L_('A') + 10;
-      else
-       break;
-      if ((int) c >= base)
-       break;
-      /* Check for overflow.  */
-      if (i > cutoff || (i == cutoff && c > cutlim))
-       overflow = 1;
-      else
-       {
-         i *= (unsigned LONG int) base;
-         i += c;
-       }
-    }
-
-  /* Check if anything actually happened.  */
-  if (s == save)
-    goto noconv;
-
-  /* Store in ENDPTR the address of one character
-     past the last character we converted.  */
-  if (endptr != NULL)
-    *endptr = (STRING_TYPE *) s;
-
-#if !UNSIGNED
-  /* Check for a value that is within the range of
-     `unsigned LONG int', but outside the range of `LONG int'.  */
-  if (overflow == 0
-      && i > (negative
-             ? -((unsigned LONG int) (STRTOL_LONG_MIN + 1)) + 1
-             : (unsigned LONG int) STRTOL_LONG_MAX))
-    overflow = 1;
-#endif
-
-  if (overflow)
-    {
-      __set_errno (ERANGE);
-#if UNSIGNED
-      return STRTOL_ULONG_MAX;
-#else
-      return negative ? STRTOL_LONG_MIN : STRTOL_LONG_MAX;
-#endif
-    }
-
-  /* Return the result of the appropriate sign.  */
-  return negative ? -i : i;
-
-noconv:
-  /* We must handle a special case here: the base is 0 or 16 and the
-     first two characters are '0' and 'x', but the rest are no
-     hexadecimal digits.  This is no error case.  We return 0 and
-     ENDPTR points to the `x`.  */
-  if (endptr != NULL)
-    {
-      if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X')
-         && save[-2] == L_('0'))
-       *endptr = (STRING_TYPE *) &save[-1];
-      else
-       /*  There was no number to convert.  */
-       *endptr = (STRING_TYPE *) nptr;
-    }
-
-  return 0L;
-}
-\f
-/* External user entry point.  */
-
-
-INT
-#ifdef weak_function
-weak_function
-#endif
-strtol (const STRING_TYPE *nptr, STRING_TYPE **endptr,
-       int base LOCALE_PARAM_PROTO)
-{
-  return INTERNAL (strtol) (nptr, endptr, base, 0 LOCALE_PARAM);
-}
diff --git a/lib/strtoll.c b/lib/strtoll.c
deleted file mode 100644 (file)
index ccc99cb..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Function to parse a `long long int' from text.
-   Copyright (C) 1995, 1996, 1997, 1999, 2001 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
-   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/>.  */
-
-#define        QUAD    1
-
-#include <strtol.c>
-
-#ifdef _LIBC
-# ifdef SHARED
-#  include <shlib-compat.h>
-
-#  if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
-compat_symbol (libc, __strtoll_internal, __strtoq_internal, GLIBC_2_0);
-#  endif
-
-# endif
-weak_alias (strtoll, strtoq)
-#endif
diff --git a/lib/strtoul.c b/lib/strtoul.c
deleted file mode 100644 (file)
index 88dbfc0..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Copyright (C) 1991, 1997 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
-   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/>.  */
-
-#define        UNSIGNED        1
-
-#include "strtol.c"
diff --git a/lib/strtoull.c b/lib/strtoull.c
deleted file mode 100644 (file)
index eda4a70..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Function to parse an `unsigned long long int' from text.
-   Copyright (C) 1995, 1996, 1997, 1999 Free Software Foundation, Inc.
-   NOTE: The canonical source of this file is maintained with the GNU C
-   Library.  Bugs can be reported to bug-glibc@gnu.org.
-
-   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 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/>.  */
-
-#define QUAD 1
-
-#include "strtoul.c"
-
-#ifdef _LIBC
-strong_alias (__strtoull_internal, __strtouq_internal)
-weak_alias (strtoull, strtouq)
-#endif
diff --git a/lib/strtoumax.c b/lib/strtoumax.c
deleted file mode 100644 (file)
index dc395d6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define UNSIGNED 1
-#include "strtoimax.c"
diff --git a/lib/sys_stat.in.h b/lib/sys_stat.in.h
deleted file mode 100644 (file)
index ff42af7..0000000
+++ /dev/null
@@ -1,363 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Provide a more complete sys/stat header file.
-   Copyright (C) 2005-2009 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* Written by Eric Blake, Paul Eggert, and Jim Meyering.  */
-
-/* This file is supposed to be used on platforms where <sys/stat.h> is
-   incomplete.  It is intended to provide definitions and prototypes
-   needed by an application.  Start with what the system provides.  */
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-
-#if defined __need_system_sys_stat_h
-/* Special invocation convention.  */
-
-#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
-
-#else
-/* Normal invocation convention.  */
-
-#ifndef _GL_SYS_STAT_H
-
-/* Get nlink_t.  */
-#include <sys/types.h>
-
-/* The include_next requires a split double-inclusion guard.  */
-#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
-
-#ifndef _GL_SYS_STAT_H
-#define _GL_SYS_STAT_H
-
-/* The definition of GL_LINK_WARNING is copied here.  */
-
-/* Before doing "#define mkdir rpl_mkdir" below, we need to include all
-   headers that may declare mkdir().  */
-#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-# include <io.h>
-#endif
-
-#ifndef S_IFMT
-# define S_IFMT 0170000
-#endif
-
-#if STAT_MACROS_BROKEN
-# undef S_ISBLK
-# undef S_ISCHR
-# undef S_ISDIR
-# undef S_ISFIFO
-# undef S_ISLNK
-# undef S_ISNAM
-# undef S_ISMPB
-# undef S_ISMPC
-# undef S_ISNWK
-# undef S_ISREG
-# undef S_ISSOCK
-#endif
-
-#ifndef S_ISBLK
-# ifdef S_IFBLK
-#  define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
-# else
-#  define S_ISBLK(m) 0
-# endif
-#endif
-
-#ifndef S_ISCHR
-# ifdef S_IFCHR
-#  define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
-# else
-#  define S_ISCHR(m) 0
-# endif
-#endif
-
-#ifndef S_ISDIR
-# ifdef S_IFDIR
-#  define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
-# else
-#  define S_ISDIR(m) 0
-# endif
-#endif
-
-#ifndef S_ISDOOR /* Solaris 2.5 and up */
-# define S_ISDOOR(m) 0
-#endif
-
-#ifndef S_ISFIFO
-# ifdef S_IFIFO
-#  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
-# else
-#  define S_ISFIFO(m) 0
-# endif
-#endif
-
-#ifndef S_ISLNK
-# ifdef S_IFLNK
-#  define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
-# else
-#  define S_ISLNK(m) 0
-# endif
-#endif
-
-#ifndef S_ISMPB /* V7 */
-# ifdef S_IFMPB
-#  define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
-#  define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
-# else
-#  define S_ISMPB(m) 0
-#  define S_ISMPC(m) 0
-# endif
-#endif
-
-#ifndef S_ISNAM /* Xenix */
-# ifdef S_IFNAM
-#  define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
-# else
-#  define S_ISNAM(m) 0
-# endif
-#endif
-
-#ifndef S_ISNWK /* HP/UX */
-# ifdef S_IFNWK
-#  define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
-# else
-#  define S_ISNWK(m) 0
-# endif
-#endif
-
-#ifndef S_ISPORT /* Solaris 10 and up */
-# define S_ISPORT(m) 0
-#endif
-
-#ifndef S_ISREG
-# ifdef S_IFREG
-#  define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
-# else
-#  define S_ISREG(m) 0
-# endif
-#endif
-
-#ifndef S_ISSOCK
-# ifdef S_IFSOCK
-#  define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
-# else
-#  define S_ISSOCK(m) 0
-# endif
-#endif
-
-
-#ifndef S_TYPEISMQ
-# define S_TYPEISMQ(p) 0
-#endif
-
-#ifndef S_TYPEISTMO
-# define S_TYPEISTMO(p) 0
-#endif
-
-
-#ifndef S_TYPEISSEM
-# ifdef S_INSEM
-#  define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM)
-# else
-#  define S_TYPEISSEM(p) 0
-# endif
-#endif
-
-#ifndef S_TYPEISSHM
-# ifdef S_INSHD
-#  define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD)
-# else
-#  define S_TYPEISSHM(p) 0
-# endif
-#endif
-
-/* high performance ("contiguous data") */
-#ifndef S_ISCTG
-# define S_ISCTG(p) 0
-#endif
-
-/* Cray DMF (data migration facility): off line, with data  */
-#ifndef S_ISOFD
-# define S_ISOFD(p) 0
-#endif
-
-/* Cray DMF (data migration facility): off line, with no data  */
-#ifndef S_ISOFL
-# define S_ISOFL(p) 0
-#endif
-
-/* 4.4BSD whiteout */
-#ifndef S_ISWHT
-# define S_ISWHT(m) 0
-#endif
-
-/* If any of the following are undefined,
-   define them to their de facto standard values.  */
-#if !S_ISUID
-# define S_ISUID 04000
-#endif
-#if !S_ISGID
-# define S_ISGID 02000
-#endif
-
-/* S_ISVTX is a common extension to POSIX.  */
-#ifndef S_ISVTX
-# define S_ISVTX 01000
-#endif
-
-#if !S_IRUSR && S_IREAD
-# define S_IRUSR S_IREAD
-#endif
-#if !S_IRUSR
-# define S_IRUSR 00400
-#endif
-#if !S_IRGRP
-# define S_IRGRP (S_IRUSR >> 3)
-#endif
-#if !S_IROTH
-# define S_IROTH (S_IRUSR >> 6)
-#endif
-
-#if !S_IWUSR && S_IWRITE
-# define S_IWUSR S_IWRITE
-#endif
-#if !S_IWUSR
-# define S_IWUSR 00200
-#endif
-#if !S_IWGRP
-# define S_IWGRP (S_IWUSR >> 3)
-#endif
-#if !S_IWOTH
-# define S_IWOTH (S_IWUSR >> 6)
-#endif
-
-#if !S_IXUSR && S_IEXEC
-# define S_IXUSR S_IEXEC
-#endif
-#if !S_IXUSR
-# define S_IXUSR 00100
-#endif
-#if !S_IXGRP
-# define S_IXGRP (S_IXUSR >> 3)
-#endif
-#if !S_IXOTH
-# define S_IXOTH (S_IXUSR >> 6)
-#endif
-
-#if !S_IRWXU
-# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
-#endif
-#if !S_IRWXG
-# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
-#endif
-#if !S_IRWXO
-# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
-#endif
-
-/* S_IXUGO is a common extension to POSIX.  */
-#if !S_IXUGO
-# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
-#endif
-
-#ifndef S_IRWXUGO
-# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
-#endif
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#if @GNULIB_LSTAT@
-# if ! @HAVE_LSTAT@
-/* mingw does not support symlinks, therefore it does not have lstat.  But
-   without links, stat does just fine.  */
-#  define lstat stat
-# elif @REPLACE_LSTAT@
-#  undef lstat
-#  define lstat rpl_lstat
-extern int rpl_lstat (const char *name, struct stat *buf);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef lstat
-# define lstat(p,b)                                                    \
-  (GL_LINK_WARNING ("lstat is unportable - "                           \
-                   "use gnulib module lstat for portability"),         \
-   lstat (p, b))
-#endif
-
-
-#if @REPLACE_MKDIR@
-# undef mkdir
-# define mkdir rpl_mkdir
-extern int mkdir (char const *name, mode_t mode);
-#else
-/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
-   Additionally, it declares _mkdir (and depending on compile flags, an
-   alias mkdir), only in the nonstandard <io.h>, which is included above.  */
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-
-static inline int
-rpl_mkdir (char const *name, mode_t mode)
-{
-  return _mkdir (name);
-}
-
-#  define mkdir rpl_mkdir
-# endif
-#endif
-
-
-/* Declare BSD extensions.  */
-
-#if @GNULIB_LCHMOD@
-/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME
-   denotes a symbolic link.  */
-# if !@HAVE_LCHMOD@
-/* The lchmod replacement follows symbolic links.  Callers should take
-   this into account; lchmod should be applied only to arguments that
-   are known to not be symbolic links.  On hosts that lack lchmod,
-   this can lead to race conditions between the check and the
-   invocation of lchmod, but we know of no workarounds that are
-   reliable in general.  You might try requesting support for lchmod
-   from your operating system supplier.  */
-#  define lchmod chmod
-# endif
-# if 0 /* assume already declared */
-extern int lchmod (const char *filename, mode_t mode);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef lchmod
-# define lchmod(f,m) \
-    (GL_LINK_WARNING ("lchmod is unportable - " \
-                      "use gnulib module lchmod for portability"), \
-     lchmod (f, m))
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _GL_SYS_STAT_H */
-#endif /* _GL_SYS_STAT_H */
-#endif
diff --git a/lib/sys_time.in.h b/lib/sys_time.in.h
deleted file mode 100644 (file)
index 6db7ba8..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Provide a more complete sys/time.h.
-
-   Copyright (C) 2007-2008 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* Written by Paul Eggert.  */
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-
-#if defined _GL_SYS_TIME_H
-
-/* Simply delegate to the system's header, without adding anything.  */
-# if @HAVE_SYS_TIME_H@
-#  @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@
-# endif
-
-#else
-
-# define _GL_SYS_TIME_H
-
-# if @HAVE_SYS_TIME_H@
-#  @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@
-# else
-#  include <time.h>
-# endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-# if ! @HAVE_STRUCT_TIMEVAL@
-struct timeval
-{
-  time_t tv_sec;
-  long int tv_usec;
-};
-# endif
-
-# if @REPLACE_GETTIMEOFDAY@
-#  undef gettimeofday
-#  define gettimeofday rpl_gettimeofday
-int gettimeofday (struct timeval *restrict, void *restrict);
-# endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _GL_SYS_TIME_H */
diff --git a/lib/sysexits.in.h b/lib/sysexits.in.h
deleted file mode 100644 (file)
index 73da88d..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/* exit() exit codes for some BSD system programs.
-   Copyright (C) 2003, 2006-2008 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 Simon Josefsson based on sysexits(3) man page */
-
-#ifndef _GL_SYSEXITS_H
-
-#if @HAVE_SYSEXITS_H@
-
-# if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-# endif
-
-/* IRIX 6.5 has an <unistd.h> that defines a macro EX_OK with a nonzero
-   value.  Override it.  See
-   <http://lists.gnu.org/archive/html/bug-gnulib/2007-03/msg00361.html>  */
-# ifdef __sgi
-#  include <unistd.h>
-#  undef EX_OK
-# endif
-
-/* The include_next requires a split double-inclusion guard.  */
-# @INCLUDE_NEXT@ @NEXT_SYSEXITS_H@
-
-/* HP-UX 11 <sysexits.h> ends at EX_NOPERM.  */
-# ifndef EX_CONFIG
-#  define EX_CONFIG 78
-# endif
-
-#endif
-
-#ifndef _GL_SYSEXITS_H
-#define _GL_SYSEXITS_H
-
-#if !@HAVE_SYSEXITS_H@
-
-# define EX_OK 0 /* same value as EXIT_SUCCESS */
-
-# define EX_USAGE 64
-# define EX_DATAERR 65
-# define EX_NOINPUT 66
-# define EX_NOUSER 67
-# define EX_NOHOST 68
-# define EX_UNAVAILABLE 69
-# define EX_SOFTWARE 70
-# define EX_OSERR 71
-# define EX_OSFILE 72
-# define EX_CANTCREAT 73
-# define EX_IOERR 74
-# define EX_TEMPFAIL 75
-# define EX_PROTOCOL 76
-# define EX_NOPERM 77
-# define EX_CONFIG 78
-
-#endif
-
-#endif /* _GL_SYSEXITS_H */
-#endif /* _GL_SYSEXITS_H */
diff --git a/lib/tempname.c b/lib/tempname.c
deleted file mode 100644 (file)
index 5a3a326..0000000
+++ /dev/null
@@ -1,314 +0,0 @@
-/* tempname.c - generate the name of a temporary file.
-
-   Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2005, 2006, 2007 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/>.  */
-
-/* Extracted from glibc sysdeps/posix/tempname.c.  See also tmpdir.c.  */
-
-#if !_LIBC
-# include <config.h>
-# include "tempname.h"
-#endif
-
-#include <sys/types.h>
-#include <assert.h>
-
-#include <errno.h>
-#ifndef __set_errno
-# define __set_errno(Val) errno = (Val)
-#endif
-
-#include <stdio.h>
-#ifndef P_tmpdir
-# define P_tmpdir "/tmp"
-#endif
-#ifndef TMP_MAX
-# define TMP_MAX 238328
-#endif
-#ifndef __GT_FILE
-# define __GT_FILE     0
-# define __GT_BIGFILE  1
-# define __GT_DIR      2
-# define __GT_NOCREATE 3
-#endif
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <fcntl.h>
-#include <sys/time.h>
-#include <stdint.h>
-#include <unistd.h>
-
-#include <sys/stat.h>
-
-#if _LIBC
-# define struct_stat64 struct stat64
-# define small_open __open
-# define large_open __open64
-#else
-# define struct_stat64 struct stat
-# define small_open open
-# define large_open open
-# define __gen_tempname gen_tempname
-# define __getpid getpid
-# define __gettimeofday gettimeofday
-# define __mkdir mkdir
-# define __lxstat64(version, file, buf) lstat (file, buf)
-# define __xstat64(version, file, buf) stat (file, buf)
-#endif
-
-#if ! (HAVE___SECURE_GETENV || _LIBC)
-# define __secure_getenv getenv
-#endif
-
-#ifdef _LIBC
-# include <hp-timing.h>
-# if HP_TIMING_AVAIL
-#  define RANDOM_BITS(Var) \
-  if (__builtin_expect (value == UINT64_C (0), 0))                           \
-    {                                                                        \
-      /* If this is the first time this function is used initialize          \
-        the variable we accumulate the value in to some somewhat             \
-        random value.  If we'd not do this programs at startup time          \
-        might have a reduced set of possible names, at least on slow         \
-        machines.  */                                                        \
-      struct timeval tv;                                                     \
-      __gettimeofday (&tv, NULL);                                            \
-      value = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec;                     \
-    }                                                                        \
-  HP_TIMING_NOW (Var)
-# endif
-#endif
-
-/* Use the widest available unsigned type if uint64_t is not
-   available.  The algorithm below extracts a number less than 62**6
-   (approximately 2**35.725) from uint64_t, so ancient hosts where
-   uintmax_t is only 32 bits lose about 3.725 bits of randomness,
-   which is better than not having mkstemp at all.  */
-#if !defined UINT64_MAX && !defined uint64_t
-# define uint64_t uintmax_t
-#endif
-
-#if _LIBC
-/* Return nonzero if DIR is an existent directory.  */
-static int
-direxists (const char *dir)
-{
-  struct_stat64 buf;
-  return __xstat64 (_STAT_VER, dir, &buf) == 0 && S_ISDIR (buf.st_mode);
-}
-
-/* Path search algorithm, for tmpnam, tmpfile, etc.  If DIR is
-   non-null and exists, uses it; otherwise uses the first of $TMPDIR,
-   P_tmpdir, /tmp that exists.  Copies into TMPL a template suitable
-   for use with mk[s]temp.  Will fail (-1) if DIR is non-null and
-   doesn't exist, none of the searched dirs exists, or there's not
-   enough space in TMPL. */
-int
-__path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx,
-              int try_tmpdir)
-{
-  const char *d;
-  size_t dlen, plen;
-
-  if (!pfx || !pfx[0])
-    {
-      pfx = "file";
-      plen = 4;
-    }
-  else
-    {
-      plen = strlen (pfx);
-      if (plen > 5)
-       plen = 5;
-    }
-
-  if (try_tmpdir)
-    {
-      d = __secure_getenv ("TMPDIR");
-      if (d != NULL && direxists (d))
-       dir = d;
-      else if (dir != NULL && direxists (dir))
-       /* nothing */ ;
-      else
-       dir = NULL;
-    }
-  if (dir == NULL)
-    {
-      if (direxists (P_tmpdir))
-       dir = P_tmpdir;
-      else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp"))
-       dir = "/tmp";
-      else
-       {
-         __set_errno (ENOENT);
-         return -1;
-       }
-    }
-
-  dlen = strlen (dir);
-  while (dlen > 1 && dir[dlen - 1] == '/')
-    dlen--;                    /* remove trailing slashes */
-
-  /* check we have room for "${dir}/${pfx}XXXXXX\0" */
-  if (tmpl_len < dlen + 1 + plen + 6 + 1)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  sprintf (tmpl, "%.*s/%.*sXXXXXX", (int) dlen, dir, (int) plen, pfx);
-  return 0;
-}
-#endif /* _LIBC */
-
-/* These are the characters used in temporary file names.  */
-static const char letters[] =
-"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
-
-/* Generate a temporary file name based on TMPL.  TMPL must match the
-   rules for mk[s]temp (i.e. end in "XXXXXX").  The name constructed
-   does not exist at the time of the call to __gen_tempname.  TMPL is
-   overwritten with the result.
-
-   KIND may be one of:
-   __GT_NOCREATE:      simply verify that the name does not exist
-                       at the time of the call.
-   __GT_FILE:          create the file using open(O_CREAT|O_EXCL)
-                       and return a read-write fd.  The file is mode 0600.
-   __GT_BIGFILE:       same as __GT_FILE but use open64().
-   __GT_DIR:           create a directory, which will be mode 0700.
-
-   We use a clever algorithm to get hard-to-predict names. */
-int
-__gen_tempname (char *tmpl, int kind)
-{
-  int len;
-  char *XXXXXX;
-  static uint64_t value;
-  uint64_t random_time_bits;
-  unsigned int count;
-  int fd = -1;
-  int save_errno = errno;
-  struct_stat64 st;
-
-  /* A lower bound on the number of temporary files to attempt to
-     generate.  The maximum total number of temporary file names that
-     can exist for a given template is 62**6.  It should never be
-     necessary to try all these combinations.  Instead if a reasonable
-     number of names is tried (we define reasonable as 62**3) fail to
-     give the system administrator the chance to remove the problems.  */
-#define ATTEMPTS_MIN (62 * 62 * 62)
-
-  /* The number of times to attempt to generate a temporary file.  To
-     conform to POSIX, this must be no smaller than TMP_MAX.  */
-#if ATTEMPTS_MIN < TMP_MAX
-  unsigned int attempts = TMP_MAX;
-#else
-  unsigned int attempts = ATTEMPTS_MIN;
-#endif
-
-  len = strlen (tmpl);
-  if (len < 6 || strcmp (&tmpl[len - 6], "XXXXXX"))
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  /* This is where the Xs start.  */
-  XXXXXX = &tmpl[len - 6];
-
-  /* Get some more or less random data.  */
-#ifdef RANDOM_BITS
-  RANDOM_BITS (random_time_bits);
-#else
-  {
-    struct timeval tv;
-    __gettimeofday (&tv, NULL);
-    random_time_bits = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec;
-  }
-#endif
-  value += random_time_bits ^ __getpid ();
-
-  for (count = 0; count < attempts; value += 7777, ++count)
-    {
-      uint64_t v = value;
-
-      /* Fill in the random bits.  */
-      XXXXXX[0] = letters[v % 62];
-      v /= 62;
-      XXXXXX[1] = letters[v % 62];
-      v /= 62;
-      XXXXXX[2] = letters[v % 62];
-      v /= 62;
-      XXXXXX[3] = letters[v % 62];
-      v /= 62;
-      XXXXXX[4] = letters[v % 62];
-      v /= 62;
-      XXXXXX[5] = letters[v % 62];
-
-      switch (kind)
-       {
-       case __GT_FILE:
-         fd = small_open (tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
-         break;
-
-       case __GT_BIGFILE:
-         fd = large_open (tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
-         break;
-
-       case __GT_DIR:
-         fd = __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR);
-         break;
-
-       case __GT_NOCREATE:
-         /* This case is backward from the other three.  __gen_tempname
-            succeeds if __xstat fails because the name does not exist.
-            Note the continue to bypass the common logic at the bottom
-            of the loop.  */
-         if (__lxstat64 (_STAT_VER, tmpl, &st) < 0)
-           {
-             if (errno == ENOENT)
-               {
-                 __set_errno (save_errno);
-                 return 0;
-               }
-             else
-               /* Give up now. */
-               return -1;
-           }
-         continue;
-
-       default:
-         assert (! "invalid KIND in __gen_tempname");
-       }
-
-      if (fd >= 0)
-       {
-         __set_errno (save_errno);
-         return fd;
-       }
-      else if (errno != EEXIST)
-       return -1;
-    }
-
-  /* We got out of the loop because we ran out of combinations to try.  */
-  __set_errno (EEXIST);
-  return -1;
-}
diff --git a/lib/tempname.h b/lib/tempname.h
deleted file mode 100644 (file)
index 74da03b..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Create a temporary file or directory.
-
-   Copyright (C) 2006 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/>.  */
-
-/* header written by Eric Blake */
-
-/* In gnulib, always prefer large files.  GT_FILE maps to
-   __GT_BIGFILE, not __GT_FILE, for a reason.  */
-#define GT_FILE                1
-#define GT_DIR         2
-#define GT_NOCREATE    3
-
-/* Generate a temporary file name based on TMPL.  TMPL must match the
-   rules for mk[s]temp (i.e. end in "XXXXXX").  The name constructed
-   does not exist at the time of the call to gen_tempname.  TMPL is
-   overwritten with the result.
-
-   KIND may be one of:
-   GT_NOCREATE:                simply verify that the name does not exist
-                       at the time of the call.
-   GT_FILE:            create a large file using open(O_CREAT|O_EXCL)
-                       and return a read-write fd.  The file is mode 0600.
-   GT_DIR:             create a directory, which will be mode 0700.
-
-   We use a clever algorithm to get hard-to-predict names. */
-extern int gen_tempname (char *tmpl, int kind);
diff --git a/lib/time.in.h b/lib/time.in.h
deleted file mode 100644 (file)
index 4eb9cc5..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* A more-standard <time.h>.
-
-   Copyright (C) 2007-2008 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-
-/* Don't get in the way of glibc when it includes time.h merely to
-   declare a few standard symbols, rather than to declare all the
-   symbols.  Also, Solaris 8 <time.h> eventually includes itself
-   recursively; if that is happening, just include the system <time.h>
-   without adding our own declarations.  */
-#if (defined __need_time_t || defined __need_clock_t \
-     || defined __need_timespec \
-     || defined _GL_TIME_H)
-
-# @INCLUDE_NEXT@ @NEXT_TIME_H@
-
-#else
-
-# define _GL_TIME_H
-
-# @INCLUDE_NEXT@ @NEXT_TIME_H@
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-/* Some systems don't define struct timespec (e.g., AIX 4.1, Ultrix 4.3).
-   Or they define it with the wrong member names or define it in <sys/time.h>
-   (e.g., FreeBSD circa 1997).  */
-# if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@
-#  if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
-#   include <sys/time.h>
-#  else
-#   undef timespec
-#   define timespec rpl_timespec
-struct timespec
-{
-  time_t tv_sec;
-  long int tv_nsec;
-};
-#  endif
-# endif
-
-/* Sleep for at least RQTP seconds unless interrupted,  If interrupted,
-   return -1 and store the remaining time into RMTP.  See
-   <http://www.opengroup.org/susv3xsh/nanosleep.html>.  */
-# if @REPLACE_NANOSLEEP@
-#  define nanosleep rpl_nanosleep
-int nanosleep (struct timespec const *__rqtp, struct timespec *__rmtp);
-# endif
-
-/* Convert TIMER to RESULT, assuming local time and UTC respectively.  See
-   <http://www.opengroup.org/susv3xsh/localtime_r.html> and
-   <http://www.opengroup.org/susv3xsh/gmtime_r.html>.  */
-# if @REPLACE_LOCALTIME_R@
-#  undef localtime_r
-#  define localtime_r rpl_localtime_r
-#  undef gmtime_r
-#  define gmtime_r rpl_gmtime_r
-struct tm *localtime_r (time_t const *restrict __timer,
-                       struct tm *restrict __result);
-struct tm *gmtime_r (time_t const *restrict __timer,
-                    struct tm *restrict __result);
-# endif
-
-/* Parse BUF as a time stamp, assuming FORMAT specifies its layout, and store
-   the resulting broken-down time into TM.  See
-   <http://www.opengroup.org/susv3xsh/strptime.html>.  */
-# if @REPLACE_STRPTIME@
-#  undef strptime
-#  define strptime rpl_strptime
-char *strptime (char const *restrict __buf, char const *restrict __format,
-               struct tm *restrict __tm);
-# endif
-
-/* Convert TM to a time_t value, assuming UTC.  */
-# if @REPLACE_TIMEGM@
-#  undef timegm
-#  define timegm rpl_timegm
-time_t timegm (struct tm *__tm);
-# endif
-
-/* Encourage applications to avoid unsafe functions that can overrun
-   buffers when given outlandish struct tm values.  Portable
-   applications should use strftime (or even sprintf) instead.  */
-# if GNULIB_PORTCHECK
-#  undef asctime
-#  define asctime eschew_asctime
-#  undef asctime_r
-#  define asctime_r eschew_asctime_r
-#  undef ctime
-#  define ctime eschew_ctime
-#  undef ctime_r
-#  define ctime_r eschew_ctime_r
-# endif
-
-# ifdef __cplusplus
-}
-# endif
-
-#endif
diff --git a/lib/time_r.c b/lib/time_r.c
deleted file mode 100644 (file)
index 35b0ed4..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Reentrant time functions like localtime_r.
-
-   Copyright (C) 2003, 2006, 2007 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* Written by Paul Eggert.  */
-
-#include <config.h>
-
-#include <time.h>
-
-#include <string.h>
-
-static struct tm *
-copy_tm_result (struct tm *dest, struct tm const *src)
-{
-  if (! src)
-    return 0;
-  *dest = *src;
-  return dest;
-}
-
-
-struct tm *
-gmtime_r (time_t const * restrict t, struct tm * restrict tp)
-{
-  return copy_tm_result (tp, gmtime (t));
-}
-
-struct tm *
-localtime_r (time_t const * restrict t, struct tm * restrict tp)
-{
-  return copy_tm_result (tp, localtime (t));
-}
diff --git a/lib/timespec.h b/lib/timespec.h
deleted file mode 100644 (file)
index 3f51db8..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/* timespec -- System time interface
-
-   Copyright (C) 2000, 2002, 2004, 2005, 2007 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 ! defined TIMESPEC_H
-# define TIMESPEC_H
-
-# include <time.h>
-
-/* Return negative, zero, positive if A < B, A == B, A > B, respectively.
-   Assume the nanosecond components are in range, or close to it.  */
-static inline int
-timespec_cmp (struct timespec a, struct timespec b)
-{
-  return (a.tv_sec < b.tv_sec ? -1
-         : a.tv_sec > b.tv_sec ? 1
-         : a.tv_nsec - b.tv_nsec);
-}
-
-void gettime (struct timespec *);
-int settime (struct timespec const *);
-
-#endif
diff --git a/lib/uinttostr.c b/lib/uinttostr.c
deleted file mode 100644 (file)
index 52d288e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#define inttostr uinttostr
-#define inttype unsigned int
-#include "inttostr.c"
diff --git a/lib/umaxtostr.c b/lib/umaxtostr.c
deleted file mode 100644 (file)
index 4f49a7f..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#define inttostr umaxtostr
-#define inttype uintmax_t
-#include "inttostr.c"
diff --git a/lib/unistd--.h b/lib/unistd--.h
deleted file mode 100644 (file)
index 1a7fd78..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Like unistd.h, but redefine some names to avoid glitches.
-
-   Copyright (C) 2005 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.  */
-
-#include <unistd.h>
-#include "unistd-safer.h"
-
-#undef dup
-#define dup dup_safer
-
-#undef pipe
-#define pipe pipe_safer
diff --git a/lib/unistd-safer.h b/lib/unistd-safer.h
deleted file mode 100644 (file)
index 033e857..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Invoke unistd-like functions, but avoid some glitches.
-
-   Copyright (C) 2001, 2003, 2005 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.  */
-
-int dup_safer (int);
-int fd_safer (int);
-int pipe_safer (int[2]);
diff --git a/lib/unistd.in.h b/lib/unistd.in.h
deleted file mode 100644 (file)
index da1d133..0000000
+++ /dev/null
@@ -1,584 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Substitute for and wrapper around <unistd.h>.
-   Copyright (C) 2003-2009 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _GL_UNISTD_H
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-
-/* The include_next requires a split double-inclusion guard.  */
-#if @HAVE_UNISTD_H@
-# @INCLUDE_NEXT@ @NEXT_UNISTD_H@
-#endif
-
-#ifndef _GL_UNISTD_H
-#define _GL_UNISTD_H
-
-/* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>.  */
-#if !(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET)
-# include <stdio.h>
-#endif
-
-/* mingw fails to declare _exit in <unistd.h>.  */
-/* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>.  */
-#include <stdlib.h>
-
-#if @GNULIB_WRITE@ && @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@
-/* Get ssize_t.  */
-# include <sys/types.h>
-#endif
-
-#if @GNULIB_GETHOSTNAME@
-/* Get all possible declarations of gethostname().  */
-# if @UNISTD_H_HAVE_WINSOCK2_H@
-#  include <winsock2.h>
-#  if !defined _GL_SYS_SOCKET_H
-#   undef socket
-#   define socket              socket_used_without_including_sys_socket_h
-#   undef connect
-#   define connect             connect_used_without_including_sys_socket_h
-#   undef accept
-#   define accept              accept_used_without_including_sys_socket_h
-#   undef bind
-#   define bind                        bind_used_without_including_sys_socket_h
-#   undef getpeername
-#   define getpeername         getpeername_used_without_including_sys_socket_h
-#   undef getsockname
-#   define getsockname         getsockname_used_without_including_sys_socket_h
-#   undef getsockopt
-#   define getsockopt          getsockopt_used_without_including_sys_socket_h
-#   undef listen
-#   define listen              listen_used_without_including_sys_socket_h
-#   undef recv
-#   define recv                        recv_used_without_including_sys_socket_h
-#   undef send
-#   define send                        send_used_without_including_sys_socket_h
-#   undef recvfrom
-#   define recvfrom            recvfrom_used_without_including_sys_socket_h
-#   undef sendto
-#   define sendto              sendto_used_without_including_sys_socket_h
-#   undef setsockopt
-#   define setsockopt          setsockopt_used_without_including_sys_socket_h
-#   undef shutdown
-#   define shutdown            shutdown_used_without_including_sys_socket_h
-#  endif
-#  if !defined _GL_SYS_SELECT_H
-#   undef select
-#   define select              select_used_without_including_sys_select_h
-#  endif
-# endif
-#endif
-
-/* The definition of GL_LINK_WARNING is copied here.  */
-
-
-/* OS/2 EMX lacks these macros.  */
-#ifndef STDIN_FILENO
-# define STDIN_FILENO 0
-#endif
-#ifndef STDOUT_FILENO
-# define STDOUT_FILENO 1
-#endif
-#ifndef STDERR_FILENO
-# define STDERR_FILENO 2
-#endif
-
-/* Declare overridden functions.  */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#if @GNULIB_CHOWN@
-# if @REPLACE_CHOWN@
-#  ifndef REPLACE_CHOWN
-#   define REPLACE_CHOWN 1
-#  endif
-#  if REPLACE_CHOWN
-/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
-   to GID (if GID is not -1).  Follow symbolic links.
-   Return 0 if successful, otherwise -1 and errno set.
-   See the POSIX:2001 specification
-   <http://www.opengroup.org/susv3xsh/chown.html>.  */
-#   define chown rpl_chown
-extern int chown (const char *file, uid_t uid, gid_t gid);
-#  endif
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef chown
-# define chown(f,u,g) \
-    (GL_LINK_WARNING ("chown fails to follow symlinks on some systems and " \
-                      "doesn't treat a uid or gid of -1 on some systems - " \
-                      "use gnulib module chown for portability"), \
-     chown (f, u, g))
-#endif
-
-
-#if @GNULIB_CLOSE@
-# if @UNISTD_H_HAVE_WINSOCK2_H@
-/* Need a gnulib internal function.  */
-#  define HAVE__GL_CLOSE_FD_MAYBE_SOCKET 1
-# endif
-# if @REPLACE_CLOSE@
-/* Automatically included by modules that need a replacement for close.  */
-#  undef close
-#  define close rpl_close
-extern int close (int);
-# endif
-#elif @UNISTD_H_HAVE_WINSOCK2_H@
-# undef close
-# define close close_used_without_requesting_gnulib_module_close
-#elif defined GNULIB_POSIXCHECK
-# undef close
-# define close(f) \
-    (GL_LINK_WARNING ("close does not portably work on sockets - " \
-                      "use gnulib module close for portability"), \
-     close (f))
-#endif
-
-
-#if @GNULIB_DUP2@
-# if !@HAVE_DUP2@
-/* Copy the file descriptor OLDFD into file descriptor NEWFD.  Do nothing if
-   NEWFD = OLDFD, otherwise close NEWFD first if it is open.
-   Return 0 if successful, otherwise -1 and errno set.
-   See the POSIX:2001 specification
-   <http://www.opengroup.org/susv3xsh/dup2.html>.  */
-extern int dup2 (int oldfd, int newfd);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef dup2
-# define dup2(o,n) \
-    (GL_LINK_WARNING ("dup2 is unportable - " \
-                      "use gnulib module dup2 for portability"), \
-     dup2 (o, n))
-#endif
-
-
-#if @GNULIB_ENVIRON@
-# if !@HAVE_DECL_ENVIRON@
-/* Set of environment variables and values.  An array of strings of the form
-   "VARIABLE=VALUE", terminated with a NULL.  */
-#  if defined __APPLE__ && defined __MACH__
-#   include <crt_externs.h>
-#   define environ (*_NSGetEnviron ())
-#  else
-extern char **environ;
-#  endif
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef environ
-# define environ \
-    (GL_LINK_WARNING ("environ is unportable - " \
-                      "use gnulib module environ for portability"), \
-     environ)
-#endif
-
-
-#if @GNULIB_EUIDACCESS@
-# if !@HAVE_EUIDACCESS@
-/* Like access(), except that is uses the effective user id and group id of
-   the current process.  */
-extern int euidaccess (const char *filename, int mode);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef euidaccess
-# define euidaccess(f,m) \
-    (GL_LINK_WARNING ("euidaccess is unportable - " \
-                      "use gnulib module euidaccess for portability"), \
-     euidaccess (f, m))
-#endif
-
-
-#if @GNULIB_FCHDIR@
-# if @REPLACE_FCHDIR@
-
-/* Change the process' current working directory to the directory on which
-   the given file descriptor is open.
-   Return 0 if successful, otherwise -1 and errno set.
-   See the POSIX:2001 specification
-   <http://www.opengroup.org/susv3xsh/fchdir.html>.  */
-extern int fchdir (int /*fd*/);
-
-#  define dup rpl_dup
-extern int dup (int);
-#  define dup2 rpl_dup2
-extern int dup2 (int, int);
-
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef fchdir
-# define fchdir(f) \
-    (GL_LINK_WARNING ("fchdir is unportable - " \
-                      "use gnulib module fchdir for portability"), \
-     fchdir (f))
-#endif
-
-
-#if @GNULIB_FSYNC@
-/* Synchronize changes to a file.
-   Return 0 if successful, otherwise -1 and errno set.
-   See POSIX:2001 specification
-   <http://www.opengroup.org/susv3xsh/fsync.html>.  */
-# if !@HAVE_FSYNC@
-extern int fsync (int fd);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef fsync
-# define fsync(fd) \
-    (GL_LINK_WARNING ("fsync is unportable - " \
-                      "use gnulib module fsync for portability"), \
-     fsync (fd))
-#endif
-
-
-#if @GNULIB_FTRUNCATE@
-# if !@HAVE_FTRUNCATE@
-/* Change the size of the file to which FD is opened to become equal to LENGTH.
-   Return 0 if successful, otherwise -1 and errno set.
-   See the POSIX:2001 specification
-   <http://www.opengroup.org/susv3xsh/ftruncate.html>.  */
-extern int ftruncate (int fd, off_t length);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef ftruncate
-# define ftruncate(f,l) \
-    (GL_LINK_WARNING ("ftruncate is unportable - " \
-                      "use gnulib module ftruncate for portability"), \
-     ftruncate (f, l))
-#endif
-
-
-#if @GNULIB_GETCWD@
-/* Include the headers that might declare getcwd so that they will not
-   cause confusion if included after this file.  */
-# include <stdlib.h>
-# if @REPLACE_GETCWD@
-/* Get the name of the current working directory, and put it in SIZE bytes
-   of BUF.
-   Return BUF if successful, or NULL if the directory couldn't be determined
-   or SIZE was too small.
-   See the POSIX:2001 specification
-   <http://www.opengroup.org/susv3xsh/getcwd.html>.
-   Additionally, the gnulib module 'getcwd' guarantees the following GNU
-   extension: If BUF is NULL, an array is allocated with 'malloc'; the array
-   is SIZE bytes long, unless SIZE == 0, in which case it is as big as
-   necessary.  */
-#  define getcwd rpl_getcwd
-extern char * getcwd (char *buf, size_t size);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef getcwd
-# define getcwd(b,s) \
-    (GL_LINK_WARNING ("getcwd is unportable - " \
-                      "use gnulib module getcwd for portability"), \
-     getcwd (b, s))
-#endif
-
-
-#if @GNULIB_GETDOMAINNAME@
-/* Return the NIS domain name of the machine.
-   WARNING! The NIS domain name is unrelated to the fully qualified host name
-            of the machine.  It is also unrelated to email addresses.
-   WARNING! The NIS domain name is usually the empty string or "(none)" when
-            not using NIS.
-
-   Put up to LEN bytes of the NIS domain name into NAME.
-   Null terminate it if the name is shorter than LEN.
-   If the NIS domain name is longer than LEN, set errno = EINVAL and return -1.
-   Return 0 if successful, otherwise set errno and return -1.  */
-# if !@HAVE_GETDOMAINNAME@
-extern int getdomainname(char *name, size_t len);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef getdomainname
-# define getdomainname(n,l) \
-    (GL_LINK_WARNING ("getdomainname is unportable - " \
-                      "use gnulib module getdomainname for portability"), \
-     getdomainname (n, l))
-#endif
-
-
-#if @GNULIB_GETDTABLESIZE@
-# if !@HAVE_GETDTABLESIZE@
-/* Return the maximum number of file descriptors in the current process.  */
-extern int getdtablesize (void);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef getdtablesize
-# define getdtablesize() \
-    (GL_LINK_WARNING ("getdtablesize is unportable - " \
-                      "use gnulib module getdtablesize for portability"), \
-     getdtablesize ())
-#endif
-
-
-#if @GNULIB_GETHOSTNAME@
-/* Return the standard host name of the machine.
-   WARNING! The host name may or may not be fully qualified.
-
-   Put up to LEN bytes of the host name into NAME.
-   Null terminate it if the name is shorter than LEN.
-   If the host name is longer than LEN, set errno = EINVAL and return -1.
-   Return 0 if successful, otherwise set errno and return -1.  */
-# if @UNISTD_H_HAVE_WINSOCK2_H@
-#  undef gethostname
-#  define gethostname rpl_gethostname
-# endif
-# if @UNISTD_H_HAVE_WINSOCK2_H@ || !@HAVE_GETHOSTNAME@
-extern int gethostname(char *name, size_t len);
-# endif
-#elif @UNISTD_H_HAVE_WINSOCK2_H@
-# undef gethostname
-# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname
-#elif defined GNULIB_POSIXCHECK
-# undef gethostname
-# define gethostname(n,l) \
-    (GL_LINK_WARNING ("gethostname is unportable - " \
-                      "use gnulib module gethostname for portability"), \
-     gethostname (n, l))
-#endif
-
-
-#if @GNULIB_GETLOGIN_R@
-/* Copies the user's login name to NAME.
-   The array pointed to by NAME has room for SIZE bytes.
-
-   Returns 0 if successful.  Upon error, an error number is returned, or -1 in
-   the case that the login name cannot be found but no specific error is
-   provided (this case is hopefully rare but is left open by the POSIX spec).
-
-   See <http://www.opengroup.org/susv3xsh/getlogin.html>.
- */
-# if !@HAVE_DECL_GETLOGIN_R@
-#  include <stddef.h>
-extern int getlogin_r (char *name, size_t size);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef getlogin_r
-# define getlogin_r(n,s) \
-    (GL_LINK_WARNING ("getlogin_r is unportable - " \
-                      "use gnulib module getlogin_r for portability"), \
-     getlogin_r (n, s))
-#endif
-
-
-#if @GNULIB_GETPAGESIZE@
-# if @REPLACE_GETPAGESIZE@
-#  define getpagesize rpl_getpagesize
-extern int getpagesize (void);
-# elif !@HAVE_GETPAGESIZE@
-/* This is for POSIX systems.  */
-#  if !defined getpagesize && defined _SC_PAGESIZE
-#   if ! (defined __VMS && __VMS_VER < 70000000)
-#    define getpagesize() sysconf (_SC_PAGESIZE)
-#   endif
-#  endif
-/* This is for older VMS.  */
-#  if !defined getpagesize && defined __VMS
-#   ifdef __ALPHA
-#    define getpagesize() 8192
-#   else
-#    define getpagesize() 512
-#   endif
-#  endif
-/* This is for BeOS.  */
-#  if !defined getpagesize && @HAVE_OS_H@
-#   include <OS.h>
-#   if defined B_PAGE_SIZE
-#    define getpagesize() B_PAGE_SIZE
-#   endif
-#  endif
-/* This is for AmigaOS4.0.  */
-#  if !defined getpagesize && defined __amigaos4__
-#   define getpagesize() 2048
-#  endif
-/* This is for older Unix systems.  */
-#  if !defined getpagesize && @HAVE_SYS_PARAM_H@
-#   include <sys/param.h>
-#   ifdef EXEC_PAGESIZE
-#    define getpagesize() EXEC_PAGESIZE
-#   else
-#    ifdef NBPG
-#     ifndef CLSIZE
-#      define CLSIZE 1
-#     endif
-#     define getpagesize() (NBPG * CLSIZE)
-#    else
-#     ifdef NBPC
-#      define getpagesize() NBPC
-#     endif
-#    endif
-#   endif
-#  endif
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef getpagesize
-# define getpagesize() \
-    (GL_LINK_WARNING ("getpagesize is unportable - " \
-                      "use gnulib module getpagesize for portability"), \
-     getpagesize ())
-#endif
-
-
-#if @GNULIB_GETUSERSHELL@
-# if !@HAVE_GETUSERSHELL@
-/* Return the next valid login shell on the system, or NULL when the end of
-   the list has been reached.  */
-extern char *getusershell (void);
-/* Rewind to pointer that is advanced at each getusershell() call.  */
-extern void setusershell (void);
-/* Free the pointer that is advanced at each getusershell() call and
-   associated resources.  */
-extern void endusershell (void);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef getusershell
-# define getusershell() \
-    (GL_LINK_WARNING ("getusershell is unportable - " \
-                      "use gnulib module getusershell for portability"), \
-     getusershell ())
-# undef setusershell
-# define setusershell() \
-    (GL_LINK_WARNING ("setusershell is unportable - " \
-                      "use gnulib module getusershell for portability"), \
-     setusershell ())
-# undef endusershell
-# define endusershell() \
-    (GL_LINK_WARNING ("endusershell is unportable - " \
-                      "use gnulib module getusershell for portability"), \
-     endusershell ())
-#endif
-
-
-#if @GNULIB_LCHOWN@
-# if @REPLACE_LCHOWN@
-/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
-   to GID (if GID is not -1).  Do not follow symbolic links.
-   Return 0 if successful, otherwise -1 and errno set.
-   See the POSIX:2001 specification
-   <http://www.opengroup.org/susv3xsh/lchown.html>.  */
-#  define lchown rpl_lchown
-extern int lchown (char const *file, uid_t owner, gid_t group);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef lchown
-# define lchown(f,u,g) \
-    (GL_LINK_WARNING ("lchown is unportable to pre-POSIX.1-2001 " \
-                      "systems - use gnulib module lchown for portability"), \
-     lchown (f, u, g))
-#endif
-
-
-#if @GNULIB_LINK@
-/* Create a new hard link for an existing file.
-   Return 0 if successful, otherwise -1 and errno set.
-   See POSIX:2001 specification
-   <http://www.opengroup.org/susv3xsh/link.html>.  */
-# if !@HAVE_LINK@
-extern int link (const char *path1, const char *path2);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef link
-# define link(path1,path2) \
-    (GL_LINK_WARNING ("link is unportable - " \
-                      "use gnulib module link for portability"), \
-     link (path1, path2))
-#endif
-
-
-#if @GNULIB_LSEEK@
-# if @REPLACE_LSEEK@
-/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END.
-   Return the new offset if successful, otherwise -1 and errno set.
-   See the POSIX:2001 specification
-   <http://www.opengroup.org/susv3xsh/lseek.html>.  */
-#  define lseek rpl_lseek
-   extern off_t lseek (int fd, off_t offset, int whence);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef lseek
-# define lseek(f,o,w) \
-    (GL_LINK_WARNING ("lseek does not fail with ESPIPE on pipes on some " \
-                      "systems - use gnulib module lseek for portability"), \
-     lseek (f, o, w))
-#endif
-
-
-#if @GNULIB_READLINK@
-/* Read the contents of the symbolic link FILE and place the first BUFSIZE
-   bytes of it into BUF.  Return the number of bytes placed into BUF if
-   successful, otherwise -1 and errno set.
-   See the POSIX:2001 specification
-   <http://www.opengroup.org/susv3xsh/readlink.html>.  */
-# if !@HAVE_READLINK@
-#  include <stddef.h>
-extern int readlink (const char *file, char *buf, size_t bufsize);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef readlink
-# define readlink(f,b,s) \
-    (GL_LINK_WARNING ("readlink is unportable - " \
-                      "use gnulib module readlink for portability"), \
-     readlink (f, b, s))
-#endif
-
-
-#if @GNULIB_SLEEP@
-/* Pause the execution of the current thread for N seconds.
-   Returns the number of seconds left to sleep.
-   See the POSIX:2001 specification
-   <http://www.opengroup.org/susv3xsh/sleep.html>.  */
-# if !@HAVE_SLEEP@
-extern unsigned int sleep (unsigned int n);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef sleep
-# define sleep(n) \
-    (GL_LINK_WARNING ("sleep is unportable - " \
-                      "use gnulib module sleep for portability"), \
-     sleep (n))
-#endif
-
-
-#if @GNULIB_WRITE@ && @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@
-/* Write up to COUNT bytes starting at BUF to file descriptor FD.
-   See the POSIX:2001 specification
-   <http://www.opengroup.org/susv3xsh/write.html>.  */
-# undef write
-# define write rpl_write
-extern ssize_t write (int fd, const void *buf, size_t count);
-#endif
-
-
-#ifdef FCHDIR_REPLACEMENT
-/* gnulib internal function.  */
-extern void _gl_unregister_fd (int fd);
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _GL_UNISTD_H */
-#endif /* _GL_UNISTD_H */
diff --git a/lib/unitypes.h b/lib/unitypes.h
deleted file mode 100644 (file)
index aa96393..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Elementary types for the GNU UniString library.
-   Copyright (C) 2002, 2005-2006 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
-   Lesser 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 _UNITYPES_H
-#define _UNITYPES_H
-
-/* Get uint8_t, uint16_t, uint32_t.  */
-#include <stdint.h>
-
-/* Type representing a Unicode character.  */
-typedef uint32_t ucs4_t;
-
-#endif /* _UNITYPES_H */
diff --git a/lib/uniwidth.h b/lib/uniwidth.h
deleted file mode 100644 (file)
index 81e7b92..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Display width functions.
-   Copyright (C) 2001-2002, 2005, 2007 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
-   Lesser 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 _UNIWIDTH_H
-#define _UNIWIDTH_H
-
-#include "unitypes.h"
-
-/* Get size_t.  */
-#include <stddef.h>
-
-/* Get locale_charset() declaration.  */
-#include "localcharset.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Display width.  */
-
-/* These functions are locale dependent.  The encoding argument identifies
-   the encoding (e.g. "ISO-8859-2" for Polish).  */
-
-/* Determine number of column positions required for UC.  */
-extern int
-       uc_width (ucs4_t uc, const char *encoding);
-
-/* Determine number of column positions required for first N units
-   (or fewer if S ends before this) in S.  */
-extern int
-       u8_width (const uint8_t *s, size_t n, const char *encoding);
-extern int
-       u16_width (const uint16_t *s, size_t n, const char *encoding);
-extern int
-       u32_width (const uint32_t *s, size_t n, const char *encoding);
-
-/* Determine number of column positions required for S.  */
-extern int
-       u8_strwidth (const uint8_t *s, const char *encoding);
-extern int
-       u16_strwidth (const uint16_t *s, const char *encoding);
-extern int
-       u32_strwidth (const uint32_t *s, const char *encoding);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _UNIWIDTH_H */
diff --git a/lib/uniwidth/cjk.h b/lib/uniwidth/cjk.h
deleted file mode 100644 (file)
index c4ed036..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Test for CJK encoding.
-   Copyright (C) 2001-2002, 2005-2007 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2002.
-
-   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
-   Lesser 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 "streq.h"
-
-static int
-is_cjk_encoding (const char *encoding)
-{
-  if (0
-      /* Legacy Japanese encodings */
-      || STREQ (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)
-      /* Legacy Chinese encodings */
-      || STREQ (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0)
-      || STREQ (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0)
-      || STREQ (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)
-      || STREQ (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)
-      /* Legacy Korean encodings */
-      || STREQ (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
-      || STREQ (encoding, "CP949", 'C', 'P', '9', '4', '9', 0, 0, 0, 0)
-      || STREQ (encoding, "JOHAB", 'J', 'O', 'H', 'A', 'B', 0, 0, 0, 0))
-    return 1;
-  return 0;
-}
diff --git a/lib/uniwidth/width.c b/lib/uniwidth/width.c
deleted file mode 100644 (file)
index 0c29da6..0000000
+++ /dev/null
@@ -1,361 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Determine display width of Unicode character.
-   Copyright (C) 2001-2002, 2006-2009 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2002.
-
-   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
-   Lesser 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 "uniwidth.h"
-
-#include "cjk.h"
-
-/*
- * Non-spacing attribute table.
- * Consists of:
- * - Non-spacing characters; generated from PropList.txt or
- *   "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt"
- * - Format control characters; generated from
- *   "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt"
- * - Zero width characters; generated from
- *   "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt"
- */
-static const unsigned char nonspacing_table_data[26*64] = {
-  /* 0x0000-0x01ff */
-  0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */
-  0xff, 0xff, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, /* 0x0080-0x00bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00c0-0x00ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x013f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0140-0x017f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x01bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0-0x01ff */
-  /* 0x0200-0x03ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200-0x023f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240-0x027f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280-0x02bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c0-0x02ff */
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0300-0x033f */
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x0340-0x037f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0380-0x03bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x03c0-0x03ff */
-  /* 0x0400-0x05ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0400-0x043f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0440-0x047f */
-  0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0480-0x04bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04c0-0x04ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0500-0x053f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0540-0x057f */
-  0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */
-  0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */
-  /* 0x0600-0x07ff */
-  0x0f, 0x00, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */
-  0x00, 0xf8, 0xff, 0x7f, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */
-  0x00, 0x00, 0xc0, 0xff, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */
-  0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */
-  0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */
-  0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x07c0-0x07ff */
-  /* 0x0800-0x09ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0800-0x083f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08c0-0x08ff */
-  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0900-0x093f */
-  0xfe, 0x21, 0x1e, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */
-  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */
-  0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x09c0-0x09ff */
-  /* 0x0a00-0x0bff */
-  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a00-0x0a3f */
-  0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, /* 0x0a40-0x0a7f */
-  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a80-0x0abf */
-  0xbe, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0ac0-0x0aff */
-  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0x0b00-0x0b3f */
-  0x1e, 0x20, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0b40-0x0b7f */
-  0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b80-0x0bbf */
-  0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0bc0-0x0bff */
-  /* 0x0c00-0x0dff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x0c00-0x0c3f */
-  0xc1, 0x3d, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */
-  0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d00-0x0d3f */
-  0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0d40-0x0d7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d80-0x0dbf */
-  0x00, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0dc0-0x0dff */
-  /* 0x0e00-0x0fff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x07, /* 0x0e00-0x0e3f */
-  0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e40-0x0e7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1b, /* 0x0e80-0x0ebf */
-  0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0ec0-0x0eff */
-  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x02, /* 0x0f00-0x0f3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, /* 0x0f40-0x0f7f */
-  0xdf, 0x00, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x1f, /* 0x0f80-0x0fbf */
-  0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0fc0-0x0fff */
-  /* 0x1000-0x11ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfd, 0x66, /* 0x1000-0x103f */
-  0x00, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x1e, 0x00, /* 0x1040-0x107f */
-  0x64, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1080-0x10bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c0-0x10ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1100-0x113f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1140-0x117f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1180-0x11bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c0-0x11ff */
-  /* 0x1200-0x13ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1200-0x123f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1240-0x127f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1280-0x12bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x12c0-0x12ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1300-0x133f */
-  0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, /* 0x1340-0x137f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1380-0x13bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13c0-0x13ff */
-  /* 0x1600-0x17ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1600-0x163f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1640-0x167f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1680-0x16bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16c0-0x16ff */
-  0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, /* 0x1700-0x173f */
-  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1740-0x177f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, /* 0x1780-0x17bf */
-  0x40, 0xfe, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x17c0-0x17ff */
-  /* 0x1800-0x19ff */
-  0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* 0x1880-0x18bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18c0-0x18ff */
-  0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0e, /* 0x1900-0x193f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1940-0x197f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1980-0x19bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x19c0-0x19ff */
-  /* 0x1a00-0x1bff */
-  0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a40-0x1a7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a80-0x1abf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ac0-0x1aff */
-  0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x17, /* 0x1b00-0x1b3f */
-  0x04, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x1b40-0x1b7f */
-  0x03, 0x00, 0x00, 0x00, 0x3c, 0x03, 0x00, 0x00, /* 0x1b80-0x1bbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc0-0x1bff */
-  /* 0x1c00-0x1dff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xcf, 0x00, /* 0x1c00-0x1c3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c40-0x1c7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c80-0x1cbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1cc0-0x1cff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d00-0x1d3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d40-0x1d7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d80-0x1dbf */
-  0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xc0, /* 0x1dc0-0x1dff */
-  /* 0x2000-0x21ff */
-  0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */
-  0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, /* 0x2040-0x207f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */
-  0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, /* 0x20c0-0x20ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2100-0x213f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2140-0x217f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2180-0x21bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x21c0-0x21ff */
-  /* 0x2c00-0x2dff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c00-0x2c3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c40-0x2c7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c80-0x2cbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2cc0-0x2cff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d00-0x2d3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d40-0x2d7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d80-0x2dbf */
-  0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x2dc0-0x2dff */
-  /* 0x3000-0x31ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, /* 0x3000-0x303f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3040-0x307f */
-  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, /* 0x3080-0x30bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30c0-0x30ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3100-0x313f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3140-0x317f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3180-0x31bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x31c0-0x31ff */
-  /* 0xa600-0xa7ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa600-0xa63f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x30, /* 0xa640-0xa67f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa680-0xa6bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa6c0-0xa6ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa700-0xa73f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa740-0xa77f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa780-0xa7bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa7c0-0xa7ff */
-  /* 0xa800-0xa9ff */
-  0x44, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0xa800-0xa83f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa840-0xa87f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa880-0xa8bf */
-  0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8c0-0xa8ff */
-  0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, /* 0xa900-0xa93f */
-  0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa980-0xa9bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */
-  /* 0xaa00-0xabff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x66, 0x00, /* 0xaa00-0xaa3f */
-  0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa40-0xaa7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa80-0xaabf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaac0-0xaaff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab00-0xab3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab40-0xab7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab80-0xabbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xabc0-0xabff */
-  /* 0xfa00-0xfbff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa00-0xfa3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa40-0xfa7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa80-0xfabf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfac0-0xfaff */
-  0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0xfb00-0xfb3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb40-0xfb7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb80-0xfbbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfbc0-0xfbff */
-  /* 0xfe00-0xffff */
-  0xff, 0xff, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, /* 0xfe00-0xfe3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe40-0xfe7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe80-0xfebf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xfec0-0xfeff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */
-  /* 0x10000-0x101ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10000-0x1003f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10040-0x1007f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10080-0x100bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100c0-0x100ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10100-0x1013f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10140-0x1017f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10180-0x101bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* 0x101c0-0x101ff */
-  /* 0x10a00-0x10bff */
-  0x6e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x10a00-0x10a3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a40-0x10a7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a80-0x10abf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10ac0-0x10aff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b00-0x10b3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b40-0x10b7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b80-0x10bbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10bc0-0x10bff */
-  /* 0x1d000-0x1d1ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */
-  0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0xf8, /* 0x1d140-0x1d17f */
-  0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d1c0-0x1d1ff */
-  /* 0x1d200-0x1d3ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d200-0x1d23f */
-  0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d240-0x1d27f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d280-0x1d2bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d2c0-0x1d2ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d300-0x1d33f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d340-0x1d37f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d380-0x1d3bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  /* 0x1d3c0-0x1d3ff */
-};
-static const signed char nonspacing_table_ind[240] = {
-   0,  1,  2,  3,  4,  5,  6,  7, /* 0x0000-0x0fff */
-   8,  9, -1, 10, 11, 12, 13, -1, /* 0x1000-0x1fff */
-  14, -1, -1, -1, -1, -1, 15, -1, /* 0x2000-0x2fff */
-  16, -1, -1, -1, -1, -1, -1, -1, /* 0x3000-0x3fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x4000-0x4fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x5000-0x5fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x6000-0x6fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x7000-0x7fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x8000-0x8fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x9000-0x9fff */
-  -1, -1, -1, 17, 18, 19, -1, -1, /* 0xa000-0xafff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb000-0xbfff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd000-0xdfff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */
-  -1, -1, -1, -1, -1, 20, -1, 21, /* 0xf000-0xffff */
-  22, -1, -1, -1, -1, 23, -1, -1, /* 0x10000-0x10fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x11000-0x11fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x16000-0x16fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1b000-0x1bfff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1c000-0x1cfff */
-  24, 25, -1, -1, -1, -1, -1, -1  /* 0x1d000-0x1dfff */
-};
-
-/* Determine number of column positions required for UC.  */
-int
-uc_width (ucs4_t uc, const char *encoding)
-{
-  /* Test for non-spacing or control character.  */
-  if ((uc >> 9) < 240)
-    {
-      int ind = nonspacing_table_ind[uc >> 9];
-      if (ind >= 0)
-       if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1)
-         {
-           if (uc > 0 && uc < 0xa0)
-             return -1;
-           else
-             return 0;
-         }
-    }
-  else if ((uc >> 9) == (0xe0000 >> 9))
-    {
-      if (uc >= 0xe0100)
-       {
-         if (uc <= 0xe01ef)
-           return 0;
-       }
-      else
-       {
-         if (uc >= 0xe0020 ? uc <= 0xe007f : uc == 0xe0001)
-           return 0;
-       }
-    }
-  /* Test for double-width character.
-   * Generated from "grep '^....;[WF]' EastAsianWidth.txt"
-   * and            "grep '^....;[^WF]' EastAsianWidth.txt"
-   */
-  if (uc >= 0x1100
-      && ((uc < 0x1160) /* Hangul Jamo */
-         || (uc >= 0x2329 && uc < 0x232b) /* Angle Brackets */
-         || (uc >= 0x2e80 && uc < 0xa4d0  /* CJK ... Yi */
-             && !(uc == 0x303f) && !(uc >= 0x4dc0 && uc < 0x4e00))
-         || (uc >= 0xac00 && uc < 0xd7a4) /* Hangul Syllables */
-         || (uc >= 0xf900 && uc < 0xfb00) /* CJK Compatibility Ideographs */
-         || (uc >= 0xfe10 && uc < 0xfe20) /* Presentation Forms for Vertical */
-         || (uc >= 0xfe30 && uc < 0xfe70) /* CJK Compatibility Forms */
-         || (uc >= 0xff00 && uc < 0xff61) /* Fullwidth Forms */
-         || (uc >= 0xffe0 && uc < 0xffe7) /* Fullwidth Signs */
-         || (uc >= 0x20000 && uc <= 0x2a6d6) /* CJK */
-         || (uc >= 0x2f800 && uc <= 0x2fa1d) /* CJK Compatibility Ideographs */
-     )   )
-    return 2;
-  /* In ancient CJK encodings, Cyrillic and most other characters are
-     double-width as well.  */
-  if (uc >= 0x00A1 && uc < 0xFF61 && uc != 0x20A9
-      && is_cjk_encoding (encoding))
-    return 2;
-  return 1;
-}
diff --git a/lib/unlinkdir.c b/lib/unlinkdir.c
deleted file mode 100644 (file)
index 12e669e..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/* unlinkdir.c - determine (and maybe change) whether we can unlink directories
-
-   Copyright (C) 2005, 2006 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 and Jim Meyering.  */
-
-#include <config.h>
-
-#include "unlinkdir.h"
-
-#if HAVE_PRIV_H
-# include <priv.h>
-#endif
-#include <unistd.h>
-
-#if ! UNLINK_CANNOT_UNLINK_DIR
-
-/* Return true if we cannot unlink directories, false if we might be
-   able to unlink directories.  If possible, tell the kernel we don't
-   want to be able to unlink directories, so that we can return true.  */
-
-bool
-cannot_unlink_dir (void)
-{
-  static bool initialized;
-  static bool cannot;
-
-  if (! initialized)
-    {
-# if defined PRIV_EFFECTIVE && defined PRIV_SYS_LINKDIR
-      /* We might be able to unlink directories if we cannot
-        determine our privileges, or if we have the
-        PRIV_SYS_LINKDIR privilege and cannot delete it.  */
-      priv_set_t *pset = priv_allocset ();
-      if (pset)
-       {
-         cannot =
-           (getppriv (PRIV_EFFECTIVE, pset) == 0
-            && (! priv_ismember (pset, PRIV_SYS_LINKDIR)
-                || (priv_delset (pset, PRIV_SYS_LINKDIR) == 0
-                    && setppriv (PRIV_SET, PRIV_EFFECTIVE, pset) == 0)));
-         priv_freeset (pset);
-       }
-# else
-      /* In traditional Unix, only root can unlink directories.  */
-      cannot = (geteuid () != 0);
-# endif
-      initialized = true;
-    }
-
-  return cannot;
-}
-
-#endif
diff --git a/lib/unlinkdir.h b/lib/unlinkdir.h
deleted file mode 100644 (file)
index 10c4e5f..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/* unlinkdir.h - determine (and maybe change) whether we can unlink directories
-
-   Copyright (C) 2005 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 and Jim Meyering.  */
-
-#include <stdbool.h>
-
-#if UNLINK_CANNOT_UNLINK_DIR
-# define cannot_unlink_dir() true
-#else
-bool cannot_unlink_dir (void);
-#endif
diff --git a/lib/unlocked-io.h b/lib/unlocked-io.h
deleted file mode 100644 (file)
index 6b2939e..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/* Prefer faster, non-thread-safe stdio functions if available.
-
-   Copyright (C) 2001, 2002, 2003, 2004 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.  */
-
-#ifndef UNLOCKED_IO_H
-# define UNLOCKED_IO_H 1
-
-/* These are wrappers for functions/macros from the GNU C library, and
-   from other C libraries supporting POSIX's optional thread-safe functions.
-
-   The standard I/O functions are thread-safe.  These *_unlocked ones are
-   more efficient but not thread-safe.  That they're not thread-safe is
-   fine since all of the applications in this package are single threaded.
-
-   Also, some code that is shared with the GNU C library may invoke
-   the *_unlocked functions directly.  On hosts that lack those
-   functions, invoke the non-thread-safe versions instead.  */
-
-# include <stdio.h>
-
-# if HAVE_DECL_CLEARERR_UNLOCKED
-#  undef clearerr
-#  define clearerr(x) clearerr_unlocked (x)
-# else
-#  define clearerr_unlocked(x) clearerr (x)
-# endif
-
-# if HAVE_DECL_FEOF_UNLOCKED
-#  undef feof
-#  define feof(x) feof_unlocked (x)
-# else
-#  define feof_unlocked(x) feof (x)
-# endif
-
-# if HAVE_DECL_FERROR_UNLOCKED
-#  undef ferror
-#  define ferror(x) ferror_unlocked (x)
-# else
-#  define ferror_unlocked(x) ferror (x)
-# endif
-
-# if HAVE_DECL_FFLUSH_UNLOCKED
-#  undef fflush
-#  define fflush(x) fflush_unlocked (x)
-# else
-#  define fflush_unlocked(x) fflush (x)
-# endif
-
-# if HAVE_DECL_FGETS_UNLOCKED
-#  undef fgets
-#  define fgets(x,y,z) fgets_unlocked (x,y,z)
-# else
-#  define fgets_unlocked(x,y,z) fgets (x,y,z)
-# endif
-
-# if HAVE_DECL_FPUTC_UNLOCKED
-#  undef fputc
-#  define fputc(x,y) fputc_unlocked (x,y)
-# else
-#  define fputc_unlocked(x,y) fputc (x,y)
-# endif
-
-# if HAVE_DECL_FPUTS_UNLOCKED
-#  undef fputs
-#  define fputs(x,y) fputs_unlocked (x,y)
-# else
-#  define fputs_unlocked(x,y) fputs (x,y)
-# endif
-
-# if HAVE_DECL_FREAD_UNLOCKED
-#  undef fread
-#  define fread(w,x,y,z) fread_unlocked (w,x,y,z)
-# else
-#  define fread_unlocked(w,x,y,z) fread (w,x,y,z)
-# endif
-
-# if HAVE_DECL_FWRITE_UNLOCKED
-#  undef fwrite
-#  define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
-# else
-#  define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z)
-# endif
-
-# if HAVE_DECL_GETC_UNLOCKED
-#  undef getc
-#  define getc(x) getc_unlocked (x)
-# else
-#  define getc_unlocked(x) getc (x)
-# endif
-
-# if HAVE_DECL_GETCHAR_UNLOCKED
-#  undef getchar
-#  define getchar() getchar_unlocked ()
-# else
-#  define getchar_unlocked() getchar ()
-# endif
-
-# if HAVE_DECL_PUTC_UNLOCKED
-#  undef putc
-#  define putc(x,y) putc_unlocked (x,y)
-# else
-#  define putc_unlocked(x,y) putc (x,y)
-# endif
-
-# if HAVE_DECL_PUTCHAR_UNLOCKED
-#  undef putchar
-#  define putchar(x) putchar_unlocked (x)
-# else
-#  define putchar_unlocked(x) putchar (x)
-# endif
-
-# undef flockfile
-# define flockfile(x) ((void) 0)
-
-# undef ftrylockfile
-# define ftrylockfile(x) 0
-
-# undef funlockfile
-# define funlockfile(x) ((void) 0)
-
-#endif /* UNLOCKED_IO_H */
diff --git a/lib/unsetenv.c b/lib/unsetenv.c
deleted file mode 100644 (file)
index 73ea878..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/* Copyright (C) 1992,1995-1999,2000-2002,2005-2008 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
-   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 <stdlib.h>
-
-#include <errno.h>
-#if !_LIBC
-# define __set_errno(ev) ((errno) = (ev))
-#endif
-
-#include <string.h>
-#include <unistd.h>
-
-#if !_LIBC
-# define __environ     environ
-#endif
-
-#if _LIBC
-/* This lock protects against simultaneous modifications of `environ'.  */
-# include <bits/libc-lock.h>
-__libc_lock_define_initialized (static, envlock)
-# define LOCK  __libc_lock_lock (envlock)
-# define UNLOCK        __libc_lock_unlock (envlock)
-#else
-# define LOCK
-# define UNLOCK
-#endif
-
-/* In the GNU C library we must keep the namespace clean.  */
-#ifdef _LIBC
-# define unsetenv __unsetenv
-#endif
-
-
-int
-unsetenv (const char *name)
-{
-  size_t len;
-  char **ep;
-
-  if (name == NULL || *name == '\0' || strchr (name, '=') != NULL)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  len = strlen (name);
-
-  LOCK;
-
-  ep = __environ;
-  while (*ep != NULL)
-    if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
-      {
-       /* Found it.  Remove this pointer by moving later ones back.  */
-       char **dp = ep;
-
-       do
-         dp[0] = dp[1];
-       while (*dp++);
-       /* Continue the loop in case NAME appears again.  */
-      }
-    else
-      ++ep;
-
-  UNLOCK;
-
-  return 0;
-}
-
-#ifdef _LIBC
-# undef unsetenv
-weak_alias (__unsetenv, unsetenv)
-#endif
diff --git a/lib/utime.c b/lib/utime.c
deleted file mode 100644 (file)
index 9ddb8b8..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Copyright (C) 1998, 2001, 2002, 2003, 2004, 2006 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 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/>.  */
-
-/* derived from a function in touch.c */
-
-#include <config.h>
-#undef utime
-
-#include <sys/types.h>
-
-#ifdef HAVE_UTIME_H
-# include <utime.h>
-#endif
-
-#if !HAVE_UTIMES_NULL
-# include <sys/stat.h>
-# include <fcntl.h>
-#endif
-
-#include <unistd.h>
-#include <errno.h>
-
-#include "full-write.h"
-#include "safe-read.h"
-
-/* Some systems (even some that do have <utime.h>) don't declare this
-   structure anywhere.  */
-#ifndef HAVE_STRUCT_UTIMBUF
-struct utimbuf
-{
-  long actime;
-  long modtime;
-};
-#endif
-
-/* The results of open() in this file are not used with fchdir,
-   therefore save some unnecessary work in fchdir.c.  */
-#undef open
-#undef close
-
-/* Emulate utime (file, NULL) for systems (like 4.3BSD) that do not
-   interpret it to set the access and modification times of FILE to
-   the current time.  Return 0 if successful, -1 if not. */
-
-static int
-utime_null (const char *file)
-{
-#if HAVE_UTIMES_NULL
-  return utimes (file, 0);
-#else
-  int fd;
-  char c;
-  int status = 0;
-  struct stat st;
-  int saved_errno = 0;
-
-  fd = open (file, O_RDWR);
-  if (fd < 0
-      || fstat (fd, &st) < 0
-      || safe_read (fd, &c, sizeof c) == SAFE_READ_ERROR
-      || lseek (fd, (off_t) 0, SEEK_SET) < 0
-      || full_write (fd, &c, sizeof c) != sizeof c
-      /* Maybe do this -- it's necessary on SunOS 4.1.3 with some combination
-        of patches, but that system doesn't use this code: it has utimes.
-        || fsync (fd) < 0
-      */
-      || (st.st_size == 0 && ftruncate (fd, st.st_size) < 0))
-    {
-      saved_errno = errno;
-      status = -1;
-    }
-
-  if (0 <= fd)
-    {
-      if (close (fd) < 0)
-       status = -1;
-
-      /* If there was a prior failure, use the saved errno value.
-        But if the only failure was in the close, don't change errno.  */
-      if (saved_errno)
-       errno = saved_errno;
-    }
-
-  return status;
-#endif
-}
-
-int
-rpl_utime (const char *file, const struct utimbuf *times)
-{
-  if (times)
-    return utime (file, times);
-
-  return utime_null (file);
-}
diff --git a/lib/utimens.c b/lib/utimens.c
deleted file mode 100644 (file)
index 708de10..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-/* Set file access and modification times.
-
-   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 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 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.  */
-
-/* derived from a function in touch.c */
-
-#include <config.h>
-
-#include "utimens.h"
-
-#include <errno.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <unistd.h>
-
-#if HAVE_UTIME_H
-# include <utime.h>
-#endif
-
-/* Some systems (even some that do have <utime.h>) don't declare this
-   structure anywhere.  */
-#ifndef HAVE_STRUCT_UTIMBUF
-struct utimbuf
-{
-  long actime;
-  long modtime;
-};
-#endif
-
-/* Some systems don't have ENOSYS.  */
-#ifndef ENOSYS
-# ifdef ENOTSUP
-#  define ENOSYS ENOTSUP
-# else
-/* Some systems don't have ENOTSUP either.  */
-#  define ENOSYS EINVAL
-# endif
-#endif
-
-#ifndef __attribute__
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
-#  define __attribute__(x)
-# endif
-#endif
-
-#ifndef ATTRIBUTE_UNUSED
-# define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
-#endif
-
-/* Set the access and modification time stamps of FD (a.k.a. FILE) to be
-   TIMESPEC[0] and TIMESPEC[1], respectively.
-   FD must be either negative -- in which case it is ignored --
-   or a file descriptor that is open on FILE.
-   If FD is nonnegative, then FILE can be NULL, which means
-   use just futimes (or equivalent) instead of utimes (or equivalent),
-   and fail if on an old system without futimes (or equivalent).
-   If TIMESPEC is null, set the time stamps to the current time.
-   Return 0 on success, -1 (setting errno) on failure.  */
-
-int
-gl_futimens (int fd ATTRIBUTE_UNUSED,
-            char const *file, struct timespec const timespec[2])
-{
-  /* Some Linux-based NFS clients are buggy, and mishandle time stamps
-     of files in NFS file systems in some cases.  We have no
-     configure-time test for this, but please see
-     <http://bugs.gentoo.org/show_bug.cgi?id=132673> for references to
-     some of the problems with Linux 2.6.16.  If this affects you,
-     compile with -DHAVE_BUGGY_NFS_TIME_STAMPS; this is reported to
-     help in some cases, albeit at a cost in performance.  But you
-     really should upgrade your kernel to a fixed version, since the
-     problem affects many applications.  */
-
-#if HAVE_BUGGY_NFS_TIME_STAMPS
-  if (fd < 0)
-    sync ();
-  else
-    fsync (fd);
-#endif
-
-  /* POSIX 200x added two interfaces to set file timestamps with
-     nanosecond resolution.  We provide a fallback for ENOSYS (for
-     example, compiling against Linux 2.6.25 kernel headers and glibc
-     2.7, but running on Linux 2.6.18 kernel).  */
-#if HAVE_UTIMENSAT
-  if (fd < 0)
-    {
-      int result = utimensat (AT_FDCWD, file, timespec, 0);
-# ifdef __linux__
-      /* Work around what might be a kernel bug:
-         http://bugzilla.redhat.com/442352
-         http://bugzilla.redhat.com/449910
-         It appears that utimensat can mistakenly return 280 rather
-         than -1 upon failure.
-         FIXME: remove in 2010 or whenever the offending kernels
-         are no longer in common use.  */
-      if (0 < result)
-        errno = ENOSYS;
-# endif
-
-      if (result == 0 || errno != ENOSYS)
-        return result;
-    }
-#endif
-#if HAVE_FUTIMENS
-  {
-    int result = futimens (fd, timespec);
-# ifdef __linux__
-    /* Work around the same bug as above.  */
-    if (0 < result)
-      errno = ENOSYS;
-# endif
-    if (result == 0 || errno != ENOSYS)
-      return result;
-  }
-#endif
-
-  /* The platform lacks an interface to set file timestamps with
-     nanosecond resolution, so do the best we can, discarding any
-     fractional part of the timestamp.  */
-  {
-#if HAVE_FUTIMESAT || HAVE_WORKING_UTIMES
-    struct timeval timeval[2];
-    struct timeval const *t;
-    if (timespec)
-      {
-       timeval[0].tv_sec = timespec[0].tv_sec;
-       timeval[0].tv_usec = timespec[0].tv_nsec / 1000;
-       timeval[1].tv_sec = timespec[1].tv_sec;
-       timeval[1].tv_usec = timespec[1].tv_nsec / 1000;
-       t = timeval;
-      }
-    else
-      t = NULL;
-
-    if (fd < 0)
-      {
-# if HAVE_FUTIMESAT
-       return futimesat (AT_FDCWD, file, t);
-# endif
-      }
-    else
-      {
-       /* If futimesat or futimes fails here, don't try to speed things
-          up by returning right away.  glibc can incorrectly fail with
-          errno == ENOENT if /proc isn't mounted.  Also, Mandrake 10.0
-          in high security mode doesn't allow ordinary users to read
-          /proc/self, so glibc incorrectly fails with errno == EACCES.
-          If errno == EIO, EPERM, or EROFS, it's probably safe to fail
-          right away, but these cases are rare enough that they're not
-          worth optimizing, and who knows what other messed-up systems
-          are out there?  So play it safe and fall back on the code
-          below.  */
-# if HAVE_FUTIMESAT
-       if (futimesat (fd, NULL, t) == 0)
-         return 0;
-# elif HAVE_FUTIMES
-       if (futimes (fd, t) == 0)
-         return 0;
-# endif
-      }
-#endif /* HAVE_FUTIMESAT || HAVE_WORKING_UTIMES */
-
-    if (!file)
-      {
-#if ! (HAVE_FUTIMESAT || (HAVE_WORKING_UTIMES && HAVE_FUTIMES))
-       errno = ENOSYS;
-#endif
-
-       /* Prefer EBADF to ENOSYS if both error numbers apply.  */
-       if (errno == ENOSYS)
-         {
-           int fd2 = dup (fd);
-           int dup_errno = errno;
-           if (0 <= fd2)
-             close (fd2);
-           errno = (fd2 < 0 && dup_errno == EBADF ? EBADF : ENOSYS);
-         }
-
-       return -1;
-      }
-
-#if HAVE_WORKING_UTIMES
-    return utimes (file, t);
-#else
-    {
-      struct utimbuf utimbuf;
-      struct utimbuf const *ut;
-      if (timespec)
-       {
-         utimbuf.actime = timespec[0].tv_sec;
-         utimbuf.modtime = timespec[1].tv_sec;
-         ut = &utimbuf;
-       }
-      else
-       ut = NULL;
-
-      return utime (file, ut);
-    }
-#endif /* !HAVE_WORKING_UTIMES */
-  }
-}
-
-/* Set the access and modification time stamps of FILE to be
-   TIMESPEC[0] and TIMESPEC[1], respectively.  */
-int
-utimens (char const *file, struct timespec const timespec[2])
-{
-  return gl_futimens (-1, file, timespec);
-}
diff --git a/lib/utimens.h b/lib/utimens.h
deleted file mode 100644 (file)
index 169521d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#include <time.h>
-int gl_futimens (int, char const *, struct timespec const [2]);
-int utimens (char const *, struct timespec const [2]);
diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c
deleted file mode 100644 (file)
index 426b7c5..0000000
+++ /dev/null
@@ -1,4889 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* vsprintf with automatic memory allocation.
-   Copyright (C) 1999, 2002-2008 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* This file can be parametrized with the following macros:
-     VASNPRINTF         The name of the function being defined.
-     FCHAR_T            The element type of the format string.
-     DCHAR_T            The element type of the destination (result) string.
-     FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters
-                        in the format string are ASCII. MUST be set if
-                        FCHAR_T and DCHAR_T are not the same type.
-     DIRECTIVE          Structure denoting a format directive.
-                        Depends on FCHAR_T.
-     DIRECTIVES         Structure denoting the set of format directives of a
-                        format string.  Depends on FCHAR_T.
-     PRINTF_PARSE       Function that parses a format string.
-                        Depends on FCHAR_T.
-     DCHAR_CPY          memcpy like function for DCHAR_T[] arrays.
-     DCHAR_SET          memset like function for DCHAR_T[] arrays.
-     DCHAR_MBSNLEN      mbsnlen like function for DCHAR_T[] arrays.
-     SNPRINTF           The system's snprintf (or similar) function.
-                        This may be either snprintf or swprintf.
-     TCHAR_T            The element type of the argument and result string
-                        of the said SNPRINTF function.  This may be either
-                        char or wchar_t.  The code exploits that
-                        sizeof (TCHAR_T) | sizeof (DCHAR_T) and
-                        alignof (TCHAR_T) <= alignof (DCHAR_T).
-     DCHAR_IS_TCHAR     Set to 1 if DCHAR_T and TCHAR_T are the same type.
-     DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[].
-     DCHAR_IS_UINT8_T   Set to 1 if DCHAR_T is uint8_t.
-     DCHAR_IS_UINT16_T  Set to 1 if DCHAR_T is uint16_t.
-     DCHAR_IS_UINT32_T  Set to 1 if DCHAR_T is uint32_t.  */
-
-/* Tell glibc's <stdio.h> to provide a prototype for snprintf().
-   This must come before <config.h> because <config.h> may include
-   <features.h>, and once <features.h> has been included, it's too late.  */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE    1
-#endif
-
-#ifndef VASNPRINTF
-# include <config.h>
-#endif
-#ifndef IN_LIBINTL
-# include <alloca.h>
-#endif
-
-/* Specification.  */
-#ifndef VASNPRINTF
-# if WIDE_CHAR_VERSION
-#  include "vasnwprintf.h"
-# else
-#  include "vasnprintf.h"
-# endif
-#endif
-
-#include <locale.h>    /* localeconv() */
-#include <stdio.h>     /* snprintf(), sprintf() */
-#include <stdlib.h>    /* abort(), malloc(), realloc(), free() */
-#include <string.h>    /* memcpy(), strlen() */
-#include <errno.h>     /* errno */
-#include <limits.h>    /* CHAR_BIT */
-#include <float.h>     /* DBL_MAX_EXP, LDBL_MAX_EXP */
-#if HAVE_NL_LANGINFO
-# include <langinfo.h>
-#endif
-#ifndef VASNPRINTF
-# if WIDE_CHAR_VERSION
-#  include "wprintf-parse.h"
-# else
-#  include "printf-parse.h"
-# endif
-#endif
-
-/* Checked size_t computations.  */
-#include "xsize.h"
-
-#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL
-# include <math.h>
-# include "float+.h"
-#endif
-
-#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL
-# include <math.h>
-# include "isnand-nolibm.h"
-#endif
-
-#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL
-# include <math.h>
-# include "isnanl-nolibm.h"
-# include "fpucw.h"
-#endif
-
-#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL
-# include <math.h>
-# include "isnand-nolibm.h"
-# include "printf-frexp.h"
-#endif
-
-#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL
-# include <math.h>
-# include "isnanl-nolibm.h"
-# include "printf-frexpl.h"
-# include "fpucw.h"
-#endif
-
-#if HAVE_WCHAR_T
-# if HAVE_WCSLEN
-#  define local_wcslen wcslen
-# else
-   /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid
-      a dependency towards this library, here is a local substitute.
-      Define this substitute only once, even if this file is included
-      twice in the same compilation unit.  */
-#  ifndef local_wcslen_defined
-#   define local_wcslen_defined 1
-static size_t
-local_wcslen (const wchar_t *s)
-{
-  const wchar_t *ptr;
-
-  for (ptr = s; *ptr != (wchar_t) 0; ptr++)
-    ;
-  return ptr - s;
-}
-#  endif
-# endif
-#endif
-
-/* Default parameters.  */
-#ifndef VASNPRINTF
-# if WIDE_CHAR_VERSION
-#  define VASNPRINTF vasnwprintf
-#  define FCHAR_T wchar_t
-#  define DCHAR_T wchar_t
-#  define TCHAR_T wchar_t
-#  define DCHAR_IS_TCHAR 1
-#  define DIRECTIVE wchar_t_directive
-#  define DIRECTIVES wchar_t_directives
-#  define PRINTF_PARSE wprintf_parse
-#  define DCHAR_CPY wmemcpy
-# else
-#  define VASNPRINTF vasnprintf
-#  define FCHAR_T char
-#  define DCHAR_T char
-#  define TCHAR_T char
-#  define DCHAR_IS_TCHAR 1
-#  define DIRECTIVE char_directive
-#  define DIRECTIVES char_directives
-#  define PRINTF_PARSE printf_parse
-#  define DCHAR_CPY memcpy
-# endif
-#endif
-#if WIDE_CHAR_VERSION
-  /* TCHAR_T is wchar_t.  */
-# define USE_SNPRINTF 1
-# if HAVE_DECL__SNWPRINTF
-   /* On Windows, the function swprintf() has a different signature than
-      on Unix; we use the _snwprintf() function instead.  */
-#  define SNPRINTF _snwprintf
-# else
-   /* Unix.  */
-#  define SNPRINTF swprintf
-# endif
-#else
-  /* TCHAR_T is char.  */
-  /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'.
-     But don't use it on BeOS, since BeOS snprintf produces no output if the
-     size argument is >= 0x3000000.
-     Also don't use it on Linux libc5, since there snprintf with size = 1
-     writes any output without bounds, like sprintf.  */
-# if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ && !(__GNU_LIBRARY__ == 1)
-#  define USE_SNPRINTF 1
-# else
-#  define USE_SNPRINTF 0
-# endif
-# if HAVE_DECL__SNPRINTF
-   /* Windows.  */
-#  define SNPRINTF _snprintf
-# else
-   /* Unix.  */
-#  define SNPRINTF snprintf
-   /* Here we need to call the native snprintf, not rpl_snprintf.  */
-#  undef snprintf
-# endif
-#endif
-/* Here we need to call the native sprintf, not rpl_sprintf.  */
-#undef sprintf
-
-/* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized"
-   warnings in this file.  Use -Dlint to suppress them.  */
-#ifdef lint
-# define IF_LINT(Code) Code
-#else
-# define IF_LINT(Code) /* empty */
-#endif
-
-/* Avoid some warnings from "gcc -Wshadow".
-   This file doesn't use the exp() and remainder() functions.  */
-#undef exp
-#define exp expo
-#undef remainder
-#define remainder rem
-
-#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL
-/* Determine the decimal-point character according to the current locale.  */
-# ifndef decimal_point_char_defined
-#  define decimal_point_char_defined 1
-static char
-decimal_point_char ()
-{
-  const char *point;
-  /* Determine it in a multithread-safe way.  We know nl_langinfo is
-     multithread-safe on glibc systems, but is not required to be multithread-
-     safe by POSIX.  sprintf(), however, is multithread-safe.  localeconv()
-     is rarely multithread-safe.  */
-#  if HAVE_NL_LANGINFO && __GLIBC__
-  point = nl_langinfo (RADIXCHAR);
-#  elif 1
-  char pointbuf[5];
-  sprintf (pointbuf, "%#.0f", 1.0);
-  point = &pointbuf[1];
-#  else
-  point = localeconv () -> decimal_point;
-#  endif
-  /* The decimal point is always a single byte: either '.' or ','.  */
-  return (point[0] != '\0' ? point[0] : '.');
-}
-# endif
-#endif
-
-#if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL
-
-/* Equivalent to !isfinite(x) || x == 0, but does not require libm.  */
-static int
-is_infinite_or_zero (double x)
-{
-  return isnand (x) || x + x == x;
-}
-
-#endif
-
-#if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL
-
-/* Equivalent to !isfinite(x) || x == 0, but does not require libm.  */
-static int
-is_infinite_or_zerol (long double x)
-{
-  return isnanl (x) || x + x == x;
-}
-
-#endif
-
-#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL
-
-/* Converting 'long double' to decimal without rare rounding bugs requires
-   real bignums.  We use the naming conventions of GNU gmp, but vastly simpler
-   (and slower) algorithms.  */
-
-typedef unsigned int mp_limb_t;
-# define GMP_LIMB_BITS 32
-typedef int mp_limb_verify[2 * (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS) - 1];
-
-typedef unsigned long long mp_twolimb_t;
-# define GMP_TWOLIMB_BITS 64
-typedef int mp_twolimb_verify[2 * (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS) - 1];
-
-/* Representation of a bignum >= 0.  */
-typedef struct
-{
-  size_t nlimbs;
-  mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc().  */
-} mpn_t;
-
-/* Compute the product of two bignums >= 0.
-   Return the allocated memory in case of success, NULL in case of memory
-   allocation failure.  */
-static void *
-multiply (mpn_t src1, mpn_t src2, mpn_t *dest)
-{
-  const mp_limb_t *p1;
-  const mp_limb_t *p2;
-  size_t len1;
-  size_t len2;
-
-  if (src1.nlimbs <= src2.nlimbs)
-    {
-      len1 = src1.nlimbs;
-      p1 = src1.limbs;
-      len2 = src2.nlimbs;
-      p2 = src2.limbs;
-    }
-  else
-    {
-      len1 = src2.nlimbs;
-      p1 = src2.limbs;
-      len2 = src1.nlimbs;
-      p2 = src1.limbs;
-    }
-  /* Now 0 <= len1 <= len2.  */
-  if (len1 == 0)
-    {
-      /* src1 or src2 is zero.  */
-      dest->nlimbs = 0;
-      dest->limbs = (mp_limb_t *) malloc (1);
-    }
-  else
-    {
-      /* Here 1 <= len1 <= len2.  */
-      size_t dlen;
-      mp_limb_t *dp;
-      size_t k, i, j;
-
-      dlen = len1 + len2;
-      dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t));
-      if (dp == NULL)
-       return NULL;
-      for (k = len2; k > 0; )
-       dp[--k] = 0;
-      for (i = 0; i < len1; i++)
-       {
-         mp_limb_t digit1 = p1[i];
-         mp_twolimb_t carry = 0;
-         for (j = 0; j < len2; j++)
-           {
-             mp_limb_t digit2 = p2[j];
-             carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2;
-             carry += dp[i + j];
-             dp[i + j] = (mp_limb_t) carry;
-             carry = carry >> GMP_LIMB_BITS;
-           }
-         dp[i + len2] = (mp_limb_t) carry;
-       }
-      /* Normalise.  */
-      while (dlen > 0 && dp[dlen - 1] == 0)
-       dlen--;
-      dest->nlimbs = dlen;
-      dest->limbs = dp;
-    }
-  return dest->limbs;
-}
-
-/* Compute the quotient of a bignum a >= 0 and a bignum b > 0.
-   a is written as  a = q * b + r  with 0 <= r < b.  q is the quotient, r
-   the remainder.
-   Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd,
-   q is incremented.
-   Return the allocated memory in case of success, NULL in case of memory
-   allocation failure.  */
-static void *
-divide (mpn_t a, mpn_t b, mpn_t *q)
-{
-  /* Algorithm:
-     First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]]
-     with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS).
-     If m<n, then q:=0 and r:=a.
-     If m>=n=1, perform a single-precision division:
-       r:=0, j:=m,
-       while j>0 do
-         {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j =
-               = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r<b[0]<beta}
-         j:=j-1, r:=r*beta+a[j], q[j]:=floor(r/b[0]), r:=r-b[0]*q[j].
-       Normalise [q[m-1],...,q[0]], yields q.
-     If m>=n>1, perform a multiple-precision division:
-       We have a/b < beta^(m-n+1).
-       s:=intDsize-1-(hightest bit in b[n-1]), 0<=s<intDsize.
-       Shift a and b left by s bits, copying them. r:=a.
-       r=[r[m],...,r[0]], b=[b[n-1],...,b[0]] with b[n-1]>=beta/2.
-       For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).}
-         Compute q* :
-           q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]).
-           In case of overflow (q* >= beta) set q* := beta-1.
-           Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2]
-           and c3 := b[n-2] * q*.
-           {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow
-            occurred.  Furthermore 0 <= c3 < beta^2.
-            If there was overflow and
-            r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2,
-            the next test can be skipped.}
-           While c3 > c2, {Here 0 <= c2 < c3 < beta^2}
-             Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2].
-           If q* > 0:
-             Put r := r - b * q* * beta^j. In detail:
-               [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]].
-               hence: u:=0, for i:=0 to n-1 do
-                              u := u + q* * b[i],
-                              r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry),
-                              u:=u div beta (+ 1, if carry in subtraction)
-                      r[n+j]:=r[n+j]-u.
-               {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1
-                               < q* + 1 <= beta,
-                the carry u does not overflow.}
-             If a negative carry occurs, put q* := q* - 1
-               and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]].
-         Set q[j] := q*.
-       Normalise [q[m-n],..,q[0]]; this yields the quotient q.
-       Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the
-       rest r.
-       The room for q[j] can be allocated at the memory location of r[n+j].
-     Finally, round-to-even:
-       Shift r left by 1 bit.
-       If r > b or if r = b and q[0] is odd, q := q+1.
-   */
-  const mp_limb_t *a_ptr = a.limbs;
-  size_t a_len = a.nlimbs;
-  const mp_limb_t *b_ptr = b.limbs;
-  size_t b_len = b.nlimbs;
-  mp_limb_t *roomptr;
-  mp_limb_t *tmp_roomptr = NULL;
-  mp_limb_t *q_ptr;
-  size_t q_len;
-  mp_limb_t *r_ptr;
-  size_t r_len;
-
-  /* Allocate room for a_len+2 digits.
-     (Need a_len+1 digits for the real division and 1 more digit for the
-     final rounding of q.)  */
-  roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t));
-  if (roomptr == NULL)
-    return NULL;
-
-  /* Normalise a.  */
-  while (a_len > 0 && a_ptr[a_len - 1] == 0)
-    a_len--;
-
-  /* Normalise b.  */
-  for (;;)
-    {
-      if (b_len == 0)
-       /* Division by zero.  */
-       abort ();
-      if (b_ptr[b_len - 1] == 0)
-       b_len--;
-      else
-       break;
-    }
-
-  /* Here m = a_len >= 0 and n = b_len > 0.  */
-
-  if (a_len < b_len)
-    {
-      /* m<n: trivial case.  q=0, r := copy of a.  */
-      r_ptr = roomptr;
-      r_len = a_len;
-      memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t));
-      q_ptr = roomptr + a_len;
-      q_len = 0;
-    }
-  else if (b_len == 1)
-    {
-      /* n=1: single precision division.
-        beta^(m-1) <= a < beta^m  ==>  beta^(m-2) <= a/b < beta^m  */
-      r_ptr = roomptr;
-      q_ptr = roomptr + 1;
-      {
-       mp_limb_t den = b_ptr[0];
-       mp_limb_t remainder = 0;
-       const mp_limb_t *sourceptr = a_ptr + a_len;
-       mp_limb_t *destptr = q_ptr + a_len;
-       size_t count;
-       for (count = a_len; count > 0; count--)
-         {
-           mp_twolimb_t num =
-             ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr;
-           *--destptr = num / den;
-           remainder = num % den;
-         }
-       /* Normalise and store r.  */
-       if (remainder > 0)
-         {
-           r_ptr[0] = remainder;
-           r_len = 1;
-         }
-       else
-         r_len = 0;
-       /* Normalise q.  */
-       q_len = a_len;
-       if (q_ptr[q_len - 1] == 0)
-         q_len--;
-      }
-    }
-  else
-    {
-      /* n>1: multiple precision division.
-        beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n  ==>
-        beta^(m-n-1) <= a/b < beta^(m-n+1).  */
-      /* Determine s.  */
-      size_t s;
-      {
-       mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */
-       s = 31;
-       if (msd >= 0x10000)
-         {
-           msd = msd >> 16;
-           s -= 16;
-         }
-       if (msd >= 0x100)
-         {
-           msd = msd >> 8;
-           s -= 8;
-         }
-       if (msd >= 0x10)
-         {
-           msd = msd >> 4;
-           s -= 4;
-         }
-       if (msd >= 0x4)
-         {
-           msd = msd >> 2;
-           s -= 2;
-         }
-       if (msd >= 0x2)
-         {
-           msd = msd >> 1;
-           s -= 1;
-         }
-      }
-      /* 0 <= s < GMP_LIMB_BITS.
-        Copy b, shifting it left by s bits.  */
-      if (s > 0)
-       {
-         tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t));
-         if (tmp_roomptr == NULL)
-           {
-             free (roomptr);
-             return NULL;
-           }
-         {
-           const mp_limb_t *sourceptr = b_ptr;
-           mp_limb_t *destptr = tmp_roomptr;
-           mp_twolimb_t accu = 0;
-           size_t count;
-           for (count = b_len; count > 0; count--)
-             {
-               accu += (mp_twolimb_t) *sourceptr++ << s;
-               *destptr++ = (mp_limb_t) accu;
-               accu = accu >> GMP_LIMB_BITS;
-             }
-           /* accu must be zero, since that was how s was determined.  */
-           if (accu != 0)
-             abort ();
-         }
-         b_ptr = tmp_roomptr;
-       }
-      /* Copy a, shifting it left by s bits, yields r.
-        Memory layout:
-        At the beginning: r = roomptr[0..a_len],
-        at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len]  */
-      r_ptr = roomptr;
-      if (s == 0)
-       {
-         memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t));
-         r_ptr[a_len] = 0;
-       }
-      else
-       {
-         const mp_limb_t *sourceptr = a_ptr;
-         mp_limb_t *destptr = r_ptr;
-         mp_twolimb_t accu = 0;
-         size_t count;
-         for (count = a_len; count > 0; count--)
-           {
-             accu += (mp_twolimb_t) *sourceptr++ << s;
-             *destptr++ = (mp_limb_t) accu;
-             accu = accu >> GMP_LIMB_BITS;
-           }
-         *destptr++ = (mp_limb_t) accu;
-       }
-      q_ptr = roomptr + b_len;
-      q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */
-      {
-       size_t j = a_len - b_len; /* m-n */
-       mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */
-       mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */
-       mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */
-         ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd;
-       /* Division loop, traversed m-n+1 times.
-          j counts down, b is unchanged, beta/2 <= b[n-1] < beta.  */
-       for (;;)
-         {
-           mp_limb_t q_star;
-           mp_limb_t c1;
-           if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */
-             {
-               /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow.  */
-               mp_twolimb_t num =
-                 ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS)
-                 | r_ptr[j + b_len - 1];
-               q_star = num / b_msd;
-               c1 = num % b_msd;
-             }
-           else
-             {
-               /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1].  */
-               q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */
-               /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta
-                  <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta
-                  <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta)
-                       {<= beta !}.
-                  If yes, jump directly to the subtraction loop.
-                  (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta
-                   <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */
-               if (r_ptr[j + b_len] > b_msd
-                   || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd)
-                 /* r[j+n] >= b[n-1]+1 or
-                    r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a
-                    carry.  */
-                 goto subtract;
-             }
-           /* q_star = q*,
-              c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, <beta).  */
-           {
-             mp_twolimb_t c2 = /* c1*beta+r[j+n-2] */
-               ((mp_twolimb_t) c1 << GMP_LIMB_BITS) | r_ptr[j + b_len - 2];
-             mp_twolimb_t c3 = /* b[n-2] * q* */
-               (mp_twolimb_t) b_2msd * (mp_twolimb_t) q_star;
-             /* While c2 < c3, increase c2 and decrease c3.
-                Consider c3-c2.  While it is > 0, decrease it by
-                b[n-1]*beta+b[n-2].  Because of b[n-1]*beta+b[n-2] >= beta^2/2
-                this can happen only twice.  */
-             if (c3 > c2)
-               {
-                 q_star = q_star - 1; /* q* := q* - 1 */
-                 if (c3 - c2 > b_msdd)
-                   q_star = q_star - 1; /* q* := q* - 1 */
-               }
-           }
-           if (q_star > 0)
-             subtract:
-             {
-               /* Subtract r := r - b * q* * beta^j.  */
-               mp_limb_t cr;
-               {
-                 const mp_limb_t *sourceptr = b_ptr;
-                 mp_limb_t *destptr = r_ptr + j;
-                 mp_twolimb_t carry = 0;
-                 size_t count;
-                 for (count = b_len; count > 0; count--)
-                   {
-                     /* Here 0 <= carry <= q*.  */
-                     carry =
-                       carry
-                       + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++
-                       + (mp_limb_t) ~(*destptr);
-                     /* Here 0 <= carry <= beta*q* + beta-1.  */
-                     *destptr++ = ~(mp_limb_t) carry;
-                     carry = carry >> GMP_LIMB_BITS; /* <= q* */
-                   }
-                 cr = (mp_limb_t) carry;
-               }
-               /* Subtract cr from r_ptr[j + b_len], then forget about
-                  r_ptr[j + b_len].  */
-               if (cr > r_ptr[j + b_len])
-                 {
-                   /* Subtraction gave a carry.  */
-                   q_star = q_star - 1; /* q* := q* - 1 */
-                   /* Add b back.  */
-                   {
-                     const mp_limb_t *sourceptr = b_ptr;
-                     mp_limb_t *destptr = r_ptr + j;
-                     mp_limb_t carry = 0;
-                     size_t count;
-                     for (count = b_len; count > 0; count--)
-                       {
-                         mp_limb_t source1 = *sourceptr++;
-                         mp_limb_t source2 = *destptr;
-                         *destptr++ = source1 + source2 + carry;
-                         carry =
-                           (carry
-                            ? source1 >= (mp_limb_t) ~source2
-                            : source1 > (mp_limb_t) ~source2);
-                       }
-                   }
-                   /* Forget about the carry and about r[j+n].  */
-                 }
-             }
-           /* q* is determined.  Store it as q[j].  */
-           q_ptr[j] = q_star;
-           if (j == 0)
-             break;
-           j--;
-         }
-      }
-      r_len = b_len;
-      /* Normalise q.  */
-      if (q_ptr[q_len - 1] == 0)
-       q_len--;
-# if 0 /* Not needed here, since we need r only to compare it with b/2, and
-         b is shifted left by s bits.  */
-      /* Shift r right by s bits.  */
-      if (s > 0)
-       {
-         mp_limb_t ptr = r_ptr + r_len;
-         mp_twolimb_t accu = 0;
-         size_t count;
-         for (count = r_len; count > 0; count--)
-           {
-             accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS;
-             accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s);
-             *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS);
-           }
-       }
-# endif
-      /* Normalise r.  */
-      while (r_len > 0 && r_ptr[r_len - 1] == 0)
-       r_len--;
-    }
-  /* Compare r << 1 with b.  */
-  if (r_len > b_len)
-    goto increment_q;
-  {
-    size_t i;
-    for (i = b_len;;)
-      {
-       mp_limb_t r_i =
-         (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0)
-         | (i < r_len ? r_ptr[i] << 1 : 0);
-       mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0);
-       if (r_i > b_i)
-         goto increment_q;
-       if (r_i < b_i)
-         goto keep_q;
-       if (i == 0)
-         break;
-       i--;
-      }
-  }
-  if (q_len > 0 && ((q_ptr[0] & 1) != 0))
-    /* q is odd.  */
-    increment_q:
-    {
-      size_t i;
-      for (i = 0; i < q_len; i++)
-       if (++(q_ptr[i]) != 0)
-         goto keep_q;
-      q_ptr[q_len++] = 1;
-    }
-  keep_q:
-  if (tmp_roomptr != NULL)
-    free (tmp_roomptr);
-  q->limbs = q_ptr;
-  q->nlimbs = q_len;
-  return roomptr;
-}
-
-/* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal
-   representation.
-   Destroys the contents of a.
-   Return the allocated memory - containing the decimal digits in low-to-high
-   order, terminated with a NUL character - in case of success, NULL in case
-   of memory allocation failure.  */
-static char *
-convert_to_decimal (mpn_t a, size_t extra_zeroes)
-{
-  mp_limb_t *a_ptr = a.limbs;
-  size_t a_len = a.nlimbs;
-  /* 0.03345 is slightly larger than log(2)/(9*log(10)).  */
-  size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1);
-  char *c_ptr = (char *) malloc (xsum (c_len, extra_zeroes));
-  if (c_ptr != NULL)
-    {
-      char *d_ptr = c_ptr;
-      for (; extra_zeroes > 0; extra_zeroes--)
-       *d_ptr++ = '0';
-      while (a_len > 0)
-       {
-         /* Divide a by 10^9, in-place.  */
-         mp_limb_t remainder = 0;
-         mp_limb_t *ptr = a_ptr + a_len;
-         size_t count;
-         for (count = a_len; count > 0; count--)
-           {
-             mp_twolimb_t num =
-               ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr;
-             *ptr = num / 1000000000;
-             remainder = num % 1000000000;
-           }
-         /* Store the remainder as 9 decimal digits.  */
-         for (count = 9; count > 0; count--)
-           {
-             *d_ptr++ = '0' + (remainder % 10);
-             remainder = remainder / 10;
-           }
-         /* Normalize a.  */
-         if (a_ptr[a_len - 1] == 0)
-           a_len--;
-       }
-      /* Remove leading zeroes.  */
-      while (d_ptr > c_ptr && d_ptr[-1] == '0')
-       d_ptr--;
-      /* But keep at least one zero.  */
-      if (d_ptr == c_ptr)
-       *d_ptr++ = '0';
-      /* Terminate the string.  */
-      *d_ptr = '\0';
-    }
-  return c_ptr;
-}
-
-# if NEED_PRINTF_LONG_DOUBLE
-
-/* Assuming x is finite and >= 0:
-   write x as x = 2^e * m, where m is a bignum.
-   Return the allocated memory in case of success, NULL in case of memory
-   allocation failure.  */
-static void *
-decode_long_double (long double x, int *ep, mpn_t *mp)
-{
-  mpn_t m;
-  int exp;
-  long double y;
-  size_t i;
-
-  /* Allocate memory for result.  */
-  m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS;
-  m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t));
-  if (m.limbs == NULL)
-    return NULL;
-  /* Split into exponential part and mantissa.  */
-  y = frexpl (x, &exp);
-  if (!(y >= 0.0L && y < 1.0L))
-    abort ();
-  /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * LDBL_MANT_BIT), and the
-     latter is an integer.  */
-  /* Convert the mantissa (y * LDBL_MANT_BIT) to a sequence of limbs.
-     I'm not sure whether it's safe to cast a 'long double' value between
-     2^31 and 2^32 to 'unsigned int', therefore play safe and cast only
-     'long double' values between 0 and 2^16 (to 'unsigned int' or 'int',
-     doesn't matter).  */
-#  if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0
-#   if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2
-    {
-      mp_limb_t hi, lo;
-      y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2));
-      hi = (int) y;
-      y -= hi;
-      if (!(y >= 0.0L && y < 1.0L))
-       abort ();
-      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
-      lo = (int) y;
-      y -= lo;
-      if (!(y >= 0.0L && y < 1.0L))
-       abort ();
-      m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo;
-    }
-#   else
-    {
-      mp_limb_t d;
-      y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS);
-      d = (int) y;
-      y -= d;
-      if (!(y >= 0.0L && y < 1.0L))
-       abort ();
-      m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d;
-    }
-#   endif
-#  endif
-  for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; )
-    {
-      mp_limb_t hi, lo;
-      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
-      hi = (int) y;
-      y -= hi;
-      if (!(y >= 0.0L && y < 1.0L))
-       abort ();
-      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
-      lo = (int) y;
-      y -= lo;
-      if (!(y >= 0.0L && y < 1.0L))
-       abort ();
-      m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo;
-    }
-#if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess
-         precision.  */
-  if (!(y == 0.0L))
-    abort ();
-#endif
-  /* Normalise.  */
-  while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0)
-    m.nlimbs--;
-  *mp = m;
-  *ep = exp - LDBL_MANT_BIT;
-  return m.limbs;
-}
-
-# endif
-
-# if NEED_PRINTF_DOUBLE
-
-/* Assuming x is finite and >= 0:
-   write x as x = 2^e * m, where m is a bignum.
-   Return the allocated memory in case of success, NULL in case of memory
-   allocation failure.  */
-static void *
-decode_double (double x, int *ep, mpn_t *mp)
-{
-  mpn_t m;
-  int exp;
-  double y;
-  size_t i;
-
-  /* Allocate memory for result.  */
-  m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS;
-  m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t));
-  if (m.limbs == NULL)
-    return NULL;
-  /* Split into exponential part and mantissa.  */
-  y = frexp (x, &exp);
-  if (!(y >= 0.0 && y < 1.0))
-    abort ();
-  /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * DBL_MANT_BIT), and the
-     latter is an integer.  */
-  /* Convert the mantissa (y * DBL_MANT_BIT) to a sequence of limbs.
-     I'm not sure whether it's safe to cast a 'double' value between
-     2^31 and 2^32 to 'unsigned int', therefore play safe and cast only
-     'double' values between 0 and 2^16 (to 'unsigned int' or 'int',
-     doesn't matter).  */
-#  if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0
-#   if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2
-    {
-      mp_limb_t hi, lo;
-      y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2));
-      hi = (int) y;
-      y -= hi;
-      if (!(y >= 0.0 && y < 1.0))
-       abort ();
-      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
-      lo = (int) y;
-      y -= lo;
-      if (!(y >= 0.0 && y < 1.0))
-       abort ();
-      m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo;
-    }
-#   else
-    {
-      mp_limb_t d;
-      y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS);
-      d = (int) y;
-      y -= d;
-      if (!(y >= 0.0 && y < 1.0))
-       abort ();
-      m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d;
-    }
-#   endif
-#  endif
-  for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; )
-    {
-      mp_limb_t hi, lo;
-      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
-      hi = (int) y;
-      y -= hi;
-      if (!(y >= 0.0 && y < 1.0))
-       abort ();
-      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
-      lo = (int) y;
-      y -= lo;
-      if (!(y >= 0.0 && y < 1.0))
-       abort ();
-      m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo;
-    }
-  if (!(y == 0.0))
-    abort ();
-  /* Normalise.  */
-  while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0)
-    m.nlimbs--;
-  *mp = m;
-  *ep = exp - DBL_MANT_BIT;
-  return m.limbs;
-}
-
-# endif
-
-/* Assuming x = 2^e * m is finite and >= 0, and n is an integer:
-   Returns the decimal representation of round (x * 10^n).
-   Return the allocated memory - containing the decimal digits in low-to-high
-   order, terminated with a NUL character - in case of success, NULL in case
-   of memory allocation failure.  */
-static char *
-scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n)
-{
-  int s;
-  size_t extra_zeroes;
-  unsigned int abs_n;
-  unsigned int abs_s;
-  mp_limb_t *pow5_ptr;
-  size_t pow5_len;
-  unsigned int s_limbs;
-  unsigned int s_bits;
-  mpn_t pow5;
-  mpn_t z;
-  void *z_memory;
-  char *digits;
-
-  if (memory == NULL)
-    return NULL;
-  /* x = 2^e * m, hence
-     y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m)
-       = round (2^s * 5^n * m).  */
-  s = e + n;
-  extra_zeroes = 0;
-  /* Factor out a common power of 10 if possible.  */
-  if (s > 0 && n > 0)
-    {
-      extra_zeroes = (s < n ? s : n);
-      s -= extra_zeroes;
-      n -= extra_zeroes;
-    }
-  /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes.
-     Before converting to decimal, we need to compute
-     z = round (2^s * 5^n * m).  */
-  /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same
-     sign.  2.322 is slightly larger than log(5)/log(2).  */
-  abs_n = (n >= 0 ? n : -n);
-  abs_s = (s >= 0 ? s : -s);
-  pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1
-                                   + abs_s / GMP_LIMB_BITS + 1)
-                                  * sizeof (mp_limb_t));
-  if (pow5_ptr == NULL)
-    {
-      free (memory);
-      return NULL;
-    }
-  /* Initialize with 1.  */
-  pow5_ptr[0] = 1;
-  pow5_len = 1;
-  /* Multiply with 5^|n|.  */
-  if (abs_n > 0)
-    {
-      static mp_limb_t const small_pow5[13 + 1] =
-       {
-         1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625,
-         48828125, 244140625, 1220703125
-       };
-      unsigned int n13;
-      for (n13 = 0; n13 <= abs_n; n13 += 13)
-       {
-         mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13];
-         size_t j;
-         mp_twolimb_t carry = 0;
-         for (j = 0; j < pow5_len; j++)
-           {
-             mp_limb_t digit2 = pow5_ptr[j];
-             carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2;
-             pow5_ptr[j] = (mp_limb_t) carry;
-             carry = carry >> GMP_LIMB_BITS;
-           }
-         if (carry > 0)
-           pow5_ptr[pow5_len++] = (mp_limb_t) carry;
-       }
-    }
-  s_limbs = abs_s / GMP_LIMB_BITS;
-  s_bits = abs_s % GMP_LIMB_BITS;
-  if (n >= 0 ? s >= 0 : s <= 0)
-    {
-      /* Multiply with 2^|s|.  */
-      if (s_bits > 0)
-       {
-         mp_limb_t *ptr = pow5_ptr;
-         mp_twolimb_t accu = 0;
-         size_t count;
-         for (count = pow5_len; count > 0; count--)
-           {
-             accu += (mp_twolimb_t) *ptr << s_bits;
-             *ptr++ = (mp_limb_t) accu;
-             accu = accu >> GMP_LIMB_BITS;
-           }
-         if (accu > 0)
-           {
-             *ptr = (mp_limb_t) accu;
-             pow5_len++;
-           }
-       }
-      if (s_limbs > 0)
-       {
-         size_t count;
-         for (count = pow5_len; count > 0;)
-           {
-             count--;
-             pow5_ptr[s_limbs + count] = pow5_ptr[count];
-           }
-         for (count = s_limbs; count > 0;)
-           {
-             count--;
-             pow5_ptr[count] = 0;
-           }
-         pow5_len += s_limbs;
-       }
-      pow5.limbs = pow5_ptr;
-      pow5.nlimbs = pow5_len;
-      if (n >= 0)
-       {
-         /* Multiply m with pow5.  No division needed.  */
-         z_memory = multiply (m, pow5, &z);
-       }
-      else
-       {
-         /* Divide m by pow5 and round.  */
-         z_memory = divide (m, pow5, &z);
-       }
-    }
-  else
-    {
-      pow5.limbs = pow5_ptr;
-      pow5.nlimbs = pow5_len;
-      if (n >= 0)
-       {
-         /* n >= 0, s < 0.
-            Multiply m with pow5, then divide by 2^|s|.  */
-         mpn_t numerator;
-         mpn_t denominator;
-         void *tmp_memory;
-         tmp_memory = multiply (m, pow5, &numerator);
-         if (tmp_memory == NULL)
-           {
-             free (pow5_ptr);
-             free (memory);
-             return NULL;
-           }
-         /* Construct 2^|s|.  */
-         {
-           mp_limb_t *ptr = pow5_ptr + pow5_len;
-           size_t i;
-           for (i = 0; i < s_limbs; i++)
-             ptr[i] = 0;
-           ptr[s_limbs] = (mp_limb_t) 1 << s_bits;
-           denominator.limbs = ptr;
-           denominator.nlimbs = s_limbs + 1;
-         }
-         z_memory = divide (numerator, denominator, &z);
-         free (tmp_memory);
-       }
-      else
-       {
-         /* n < 0, s > 0.
-            Multiply m with 2^s, then divide by pow5.  */
-         mpn_t numerator;
-         mp_limb_t *num_ptr;
-         num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1)
-                                         * sizeof (mp_limb_t));
-         if (num_ptr == NULL)
-           {
-             free (pow5_ptr);
-             free (memory);
-             return NULL;
-           }
-         {
-           mp_limb_t *destptr = num_ptr;
-           {
-             size_t i;
-             for (i = 0; i < s_limbs; i++)
-               *destptr++ = 0;
-           }
-           if (s_bits > 0)
-             {
-               const mp_limb_t *sourceptr = m.limbs;
-               mp_twolimb_t accu = 0;
-               size_t count;
-               for (count = m.nlimbs; count > 0; count--)
-                 {
-                   accu += (mp_twolimb_t) *sourceptr++ << s_bits;
-                   *destptr++ = (mp_limb_t) accu;
-                   accu = accu >> GMP_LIMB_BITS;
-                 }
-               if (accu > 0)
-                 *destptr++ = (mp_limb_t) accu;
-             }
-           else
-             {
-               const mp_limb_t *sourceptr = m.limbs;
-               size_t count;
-               for (count = m.nlimbs; count > 0; count--)
-                 *destptr++ = *sourceptr++;
-             }
-           numerator.limbs = num_ptr;
-           numerator.nlimbs = destptr - num_ptr;
-         }
-         z_memory = divide (numerator, pow5, &z);
-         free (num_ptr);
-       }
-    }
-  free (pow5_ptr);
-  free (memory);
-
-  /* Here y = round (x * 10^n) = z * 10^extra_zeroes.  */
-
-  if (z_memory == NULL)
-    return NULL;
-  digits = convert_to_decimal (z, extra_zeroes);
-  free (z_memory);
-  return digits;
-}
-
-# if NEED_PRINTF_LONG_DOUBLE
-
-/* Assuming x is finite and >= 0, and n is an integer:
-   Returns the decimal representation of round (x * 10^n).
-   Return the allocated memory - containing the decimal digits in low-to-high
-   order, terminated with a NUL character - in case of success, NULL in case
-   of memory allocation failure.  */
-static char *
-scale10_round_decimal_long_double (long double x, int n)
-{
-  int e IF_LINT(= 0);
-  mpn_t m;
-  void *memory = decode_long_double (x, &e, &m);
-  return scale10_round_decimal_decoded (e, m, memory, n);
-}
-
-# endif
-
-# if NEED_PRINTF_DOUBLE
-
-/* Assuming x is finite and >= 0, and n is an integer:
-   Returns the decimal representation of round (x * 10^n).
-   Return the allocated memory - containing the decimal digits in low-to-high
-   order, terminated with a NUL character - in case of success, NULL in case
-   of memory allocation failure.  */
-static char *
-scale10_round_decimal_double (double x, int n)
-{
-  int e IF_LINT(= 0);
-  mpn_t m;
-  void *memory = decode_double (x, &e, &m);
-  return scale10_round_decimal_decoded (e, m, memory, n);
-}
-
-# endif
-
-# if NEED_PRINTF_LONG_DOUBLE
-
-/* Assuming x is finite and > 0:
-   Return an approximation for n with 10^n <= x < 10^(n+1).
-   The approximation is usually the right n, but may be off by 1 sometimes.  */
-static int
-floorlog10l (long double x)
-{
-  int exp;
-  long double y;
-  double z;
-  double l;
-
-  /* Split into exponential part and mantissa.  */
-  y = frexpl (x, &exp);
-  if (!(y >= 0.0L && y < 1.0L))
-    abort ();
-  if (y == 0.0L)
-    return INT_MIN;
-  if (y < 0.5L)
-    {
-      while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2))))
-       {
-         y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2));
-         exp -= GMP_LIMB_BITS;
-       }
-      if (y < (1.0L / (1 << 16)))
-       {
-         y *= 1.0L * (1 << 16);
-         exp -= 16;
-       }
-      if (y < (1.0L / (1 << 8)))
-       {
-         y *= 1.0L * (1 << 8);
-         exp -= 8;
-       }
-      if (y < (1.0L / (1 << 4)))
-       {
-         y *= 1.0L * (1 << 4);
-         exp -= 4;
-       }
-      if (y < (1.0L / (1 << 2)))
-       {
-         y *= 1.0L * (1 << 2);
-         exp -= 2;
-       }
-      if (y < (1.0L / (1 << 1)))
-       {
-         y *= 1.0L * (1 << 1);
-         exp -= 1;
-       }
-    }
-  if (!(y >= 0.5L && y < 1.0L))
-    abort ();
-  /* Compute an approximation for l = log2(x) = exp + log2(y).  */
-  l = exp;
-  z = y;
-  if (z < 0.70710678118654752444)
-    {
-      z *= 1.4142135623730950488;
-      l -= 0.5;
-    }
-  if (z < 0.8408964152537145431)
-    {
-      z *= 1.1892071150027210667;
-      l -= 0.25;
-    }
-  if (z < 0.91700404320467123175)
-    {
-      z *= 1.0905077326652576592;
-      l -= 0.125;
-    }
-  if (z < 0.9576032806985736469)
-    {
-      z *= 1.0442737824274138403;
-      l -= 0.0625;
-    }
-  /* Now 0.95 <= z <= 1.01.  */
-  z = 1 - z;
-  /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...)
-     Four terms are enough to get an approximation with error < 10^-7.  */
-  l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25)));
-  /* Finally multiply with log(2)/log(10), yields an approximation for
-     log10(x).  */
-  l *= 0.30102999566398119523;
-  /* Round down to the next integer.  */
-  return (int) l + (l < 0 ? -1 : 0);
-}
-
-# endif
-
-# if NEED_PRINTF_DOUBLE
-
-/* Assuming x is finite and > 0:
-   Return an approximation for n with 10^n <= x < 10^(n+1).
-   The approximation is usually the right n, but may be off by 1 sometimes.  */
-static int
-floorlog10 (double x)
-{
-  int exp;
-  double y;
-  double z;
-  double l;
-
-  /* Split into exponential part and mantissa.  */
-  y = frexp (x, &exp);
-  if (!(y >= 0.0 && y < 1.0))
-    abort ();
-  if (y == 0.0)
-    return INT_MIN;
-  if (y < 0.5)
-    {
-      while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2))))
-       {
-         y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2));
-         exp -= GMP_LIMB_BITS;
-       }
-      if (y < (1.0 / (1 << 16)))
-       {
-         y *= 1.0 * (1 << 16);
-         exp -= 16;
-       }
-      if (y < (1.0 / (1 << 8)))
-       {
-         y *= 1.0 * (1 << 8);
-         exp -= 8;
-       }
-      if (y < (1.0 / (1 << 4)))
-       {
-         y *= 1.0 * (1 << 4);
-         exp -= 4;
-       }
-      if (y < (1.0 / (1 << 2)))
-       {
-         y *= 1.0 * (1 << 2);
-         exp -= 2;
-       }
-      if (y < (1.0 / (1 << 1)))
-       {
-         y *= 1.0 * (1 << 1);
-         exp -= 1;
-       }
-    }
-  if (!(y >= 0.5 && y < 1.0))
-    abort ();
-  /* Compute an approximation for l = log2(x) = exp + log2(y).  */
-  l = exp;
-  z = y;
-  if (z < 0.70710678118654752444)
-    {
-      z *= 1.4142135623730950488;
-      l -= 0.5;
-    }
-  if (z < 0.8408964152537145431)
-    {
-      z *= 1.1892071150027210667;
-      l -= 0.25;
-    }
-  if (z < 0.91700404320467123175)
-    {
-      z *= 1.0905077326652576592;
-      l -= 0.125;
-    }
-  if (z < 0.9576032806985736469)
-    {
-      z *= 1.0442737824274138403;
-      l -= 0.0625;
-    }
-  /* Now 0.95 <= z <= 1.01.  */
-  z = 1 - z;
-  /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...)
-     Four terms are enough to get an approximation with error < 10^-7.  */
-  l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25)));
-  /* Finally multiply with log(2)/log(10), yields an approximation for
-     log10(x).  */
-  l *= 0.30102999566398119523;
-  /* Round down to the next integer.  */
-  return (int) l + (l < 0 ? -1 : 0);
-}
-
-# endif
-
-/* Tests whether a string of digits consists of exactly PRECISION zeroes and
-   a single '1' digit.  */
-static int
-is_borderline (const char *digits, size_t precision)
-{
-  for (; precision > 0; precision--, digits++)
-    if (*digits != '0')
-      return 0;
-  if (*digits != '1')
-    return 0;
-  digits++;
-  return *digits == '\0';
-}
-
-#endif
-
-DCHAR_T *
-VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
-           const FCHAR_T *format, va_list args)
-{
-  DIRECTIVES d;
-  arguments a;
-
-  if (PRINTF_PARSE (format, &d, &a) < 0)
-    /* errno is already set.  */
-    return NULL;
-
-#define CLEANUP() \
-  free (d.dir);                                                                \
-  if (a.arg)                                                           \
-    free (a.arg);
-
-  if (PRINTF_FETCHARGS (args, &a) < 0)
-    {
-      CLEANUP ();
-      errno = EINVAL;
-      return NULL;
-    }
-
-  {
-    size_t buf_neededlength;
-    TCHAR_T *buf;
-    TCHAR_T *buf_malloced;
-    const FCHAR_T *cp;
-    size_t i;
-    DIRECTIVE *dp;
-    /* Output string accumulator.  */
-    DCHAR_T *result;
-    size_t allocated;
-    size_t length;
-
-    /* Allocate a small buffer that will hold a directive passed to
-       sprintf or snprintf.  */
-    buf_neededlength =
-      xsum4 (7, d.max_width_length, d.max_precision_length, 6);
-#if HAVE_ALLOCA
-    if (buf_neededlength < 4000 / sizeof (TCHAR_T))
-      {
-       buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T));
-       buf_malloced = NULL;
-      }
-    else
-#endif
-      {
-       size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T));
-       if (size_overflow_p (buf_memsize))
-         goto out_of_memory_1;
-       buf = (TCHAR_T *) malloc (buf_memsize);
-       if (buf == NULL)
-         goto out_of_memory_1;
-       buf_malloced = buf;
-      }
-
-    if (resultbuf != NULL)
-      {
-       result = resultbuf;
-       allocated = *lengthp;
-      }
-    else
-      {
-       result = NULL;
-       allocated = 0;
-      }
-    length = 0;
-    /* Invariants:
-       result is either == resultbuf or == NULL or malloc-allocated.
-       If length > 0, then result != NULL.  */
-
-    /* Ensures that allocated >= needed.  Aborts through a jump to
-       out_of_memory if needed is SIZE_MAX or otherwise too big.  */
-#define ENSURE_ALLOCATION(needed) \
-    if ((needed) > allocated)                                               \
-      {                                                                             \
-       size_t memory_size;                                                  \
-       DCHAR_T *memory;                                                     \
-                                                                            \
-       allocated = (allocated > 0 ? xtimes (allocated, 2) : 12);            \
-       if ((needed) > allocated)                                            \
-         allocated = (needed);                                              \
-       memory_size = xtimes (allocated, sizeof (DCHAR_T));                  \
-       if (size_overflow_p (memory_size))                                   \
-         goto out_of_memory;                                                \
-       if (result == resultbuf || result == NULL)                           \
-         memory = (DCHAR_T *) malloc (memory_size);                         \
-       else                                                                 \
-         memory = (DCHAR_T *) realloc (result, memory_size);                \
-       if (memory == NULL)                                                  \
-         goto out_of_memory;                                                \
-       if (result == resultbuf && length > 0)                               \
-         DCHAR_CPY (memory, result, length);                                \
-       result = memory;                                                     \
-      }
-
-    for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++)
-      {
-       if (cp != dp->dir_start)
-         {
-           size_t n = dp->dir_start - cp;
-           size_t augmented_length = xsum (length, n);
-
-           ENSURE_ALLOCATION (augmented_length);
-           /* This copies a piece of FCHAR_T[] into a DCHAR_T[].  Here we
-              need that the format string contains only ASCII characters
-              if FCHAR_T and DCHAR_T are not the same type.  */
-           if (sizeof (FCHAR_T) == sizeof (DCHAR_T))
-             {
-               DCHAR_CPY (result + length, (const DCHAR_T *) cp, n);
-               length = augmented_length;
-             }
-           else
-             {
-               do
-                 result[length++] = (unsigned char) *cp++;
-               while (--n > 0);
-             }
-         }
-       if (i == d.count)
-         break;
-
-       /* Execute a single directive.  */
-       if (dp->conversion == '%')
-         {
-           size_t augmented_length;
-
-           if (!(dp->arg_index == ARG_NONE))
-             abort ();
-           augmented_length = xsum (length, 1);
-           ENSURE_ALLOCATION (augmented_length);
-           result[length] = '%';
-           length = augmented_length;
-         }
-       else
-         {
-           if (!(dp->arg_index != ARG_NONE))
-             abort ();
-
-           if (dp->conversion == 'n')
-             {
-               switch (a.arg[dp->arg_index].type)
-                 {
-                 case TYPE_COUNT_SCHAR_POINTER:
-                   *a.arg[dp->arg_index].a.a_count_schar_pointer = length;
-                   break;
-                 case TYPE_COUNT_SHORT_POINTER:
-                   *a.arg[dp->arg_index].a.a_count_short_pointer = length;
-                   break;
-                 case TYPE_COUNT_INT_POINTER:
-                   *a.arg[dp->arg_index].a.a_count_int_pointer = length;
-                   break;
-                 case TYPE_COUNT_LONGINT_POINTER:
-                   *a.arg[dp->arg_index].a.a_count_longint_pointer = length;
-                   break;
-#if HAVE_LONG_LONG_INT
-                 case TYPE_COUNT_LONGLONGINT_POINTER:
-                   *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length;
-                   break;
-#endif
-                 default:
-                   abort ();
-                 }
-             }
-#if ENABLE_UNISTDIO
-           /* The unistdio extensions.  */
-           else if (dp->conversion == 'U')
-             {
-               arg_type type = a.arg[dp->arg_index].type;
-               int flags = dp->flags;
-               int has_width;
-               size_t width;
-               int has_precision;
-               size_t precision;
-
-               has_width = 0;
-               width = 0;
-               if (dp->width_start != dp->width_end)
-                 {
-                   if (dp->width_arg_index != ARG_NONE)
-                     {
-                       int arg;
-
-                       if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
-                         abort ();
-                       arg = a.arg[dp->width_arg_index].a.a_int;
-                       if (arg < 0)
-                         {
-                           /* "A negative field width is taken as a '-' flag
-                               followed by a positive field width."  */
-                           flags |= FLAG_LEFT;
-                           width = (unsigned int) (-arg);
-                         }
-                       else
-                         width = arg;
-                     }
-                   else
-                     {
-                       const FCHAR_T *digitp = dp->width_start;
-
-                       do
-                         width = xsum (xtimes (width, 10), *digitp++ - '0');
-                       while (digitp != dp->width_end);
-                     }
-                   has_width = 1;
-                 }
-
-               has_precision = 0;
-               precision = 0;
-               if (dp->precision_start != dp->precision_end)
-                 {
-                   if (dp->precision_arg_index != ARG_NONE)
-                     {
-                       int arg;
-
-                       if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
-                         abort ();
-                       arg = a.arg[dp->precision_arg_index].a.a_int;
-                       /* "A negative precision is taken as if the precision
-                           were omitted."  */
-                       if (arg >= 0)
-                         {
-                           precision = arg;
-                           has_precision = 1;
-                         }
-                     }
-                   else
-                     {
-                       const FCHAR_T *digitp = dp->precision_start + 1;
-
-                       precision = 0;
-                       while (digitp != dp->precision_end)
-                         precision = xsum (xtimes (precision, 10), *digitp++ - '0');
-                       has_precision = 1;
-                     }
-                 }
-
-               switch (type)
-                 {
-                 case TYPE_U8_STRING:
-                   {
-                     const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string;
-                     const uint8_t *arg_end;
-                     size_t characters;
-
-                     if (has_precision)
-                       {
-                         /* Use only PRECISION characters, from the left.  */
-                         arg_end = arg;
-                         characters = 0;
-                         for (; precision > 0; precision--)
-                           {
-                             int count = u8_strmblen (arg_end);
-                             if (count == 0)
-                               break;
-                             if (count < 0)
-                               {
-                                 if (!(result == resultbuf || result == NULL))
-                                   free (result);
-                                 if (buf_malloced != NULL)
-                                   free (buf_malloced);
-                                 CLEANUP ();
-                                 errno = EILSEQ;
-                                 return NULL;
-                               }
-                             arg_end += count;
-                             characters++;
-                           }
-                       }
-                     else if (has_width)
-                       {
-                         /* Use the entire string, and count the number of
-                            characters.  */
-                         arg_end = arg;
-                         characters = 0;
-                         for (;;)
-                           {
-                             int count = u8_strmblen (arg_end);
-                             if (count == 0)
-                               break;
-                             if (count < 0)
-                               {
-                                 if (!(result == resultbuf || result == NULL))
-                                   free (result);
-                                 if (buf_malloced != NULL)
-                                   free (buf_malloced);
-                                 CLEANUP ();
-                                 errno = EILSEQ;
-                                 return NULL;
-                               }
-                             arg_end += count;
-                             characters++;
-                           }
-                       }
-                     else
-                       {
-                         /* Use the entire string.  */
-                         arg_end = arg + u8_strlen (arg);
-                         /* The number of characters doesn't matter.  */
-                         characters = 0;
-                       }
-
-                     if (has_width && width > characters
-                         && !(dp->flags & FLAG_LEFT))
-                       {
-                         size_t n = width - characters;
-                         ENSURE_ALLOCATION (xsum (length, n));
-                         DCHAR_SET (result + length, ' ', n);
-                         length += n;
-                       }
-
-# if DCHAR_IS_UINT8_T
-                     {
-                       size_t n = arg_end - arg;
-                       ENSURE_ALLOCATION (xsum (length, n));
-                       DCHAR_CPY (result + length, arg, n);
-                       length += n;
-                     }
-# else
-                     { /* Convert.  */
-                       DCHAR_T *converted = result + length;
-                       size_t converted_len = allocated - length;
-#  if DCHAR_IS_TCHAR
-                       /* Convert from UTF-8 to locale encoding.  */
-                       if (u8_conv_to_encoding (locale_charset (),
-                                                iconveh_question_mark,
-                                                arg, arg_end - arg, NULL,
-                                                &converted, &converted_len)
-                           < 0)
-#  else
-                       /* Convert from UTF-8 to UTF-16/UTF-32.  */
-                       converted =
-                         U8_TO_DCHAR (arg, arg_end - arg,
-                                      converted, &converted_len);
-                       if (converted == NULL)
-#  endif
-                         {
-                           int saved_errno = errno;
-                           if (!(result == resultbuf || result == NULL))
-                             free (result);
-                           if (buf_malloced != NULL)
-                             free (buf_malloced);
-                           CLEANUP ();
-                           errno = saved_errno;
-                           return NULL;
-                         }
-                       if (converted != result + length)
-                         {
-                           ENSURE_ALLOCATION (xsum (length, converted_len));
-                           DCHAR_CPY (result + length, converted, converted_len);
-                           free (converted);
-                         }
-                       length += converted_len;
-                     }
-# endif
-
-                     if (has_width && width > characters
-                         && (dp->flags & FLAG_LEFT))
-                       {
-                         size_t n = width - characters;
-                         ENSURE_ALLOCATION (xsum (length, n));
-                         DCHAR_SET (result + length, ' ', n);
-                         length += n;
-                       }
-                   }
-                   break;
-
-                 case TYPE_U16_STRING:
-                   {
-                     const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string;
-                     const uint16_t *arg_end;
-                     size_t characters;
-
-                     if (has_precision)
-                       {
-                         /* Use only PRECISION characters, from the left.  */
-                         arg_end = arg;
-                         characters = 0;
-                         for (; precision > 0; precision--)
-                           {
-                             int count = u16_strmblen (arg_end);
-                             if (count == 0)
-                               break;
-                             if (count < 0)
-                               {
-                                 if (!(result == resultbuf || result == NULL))
-                                   free (result);
-                                 if (buf_malloced != NULL)
-                                   free (buf_malloced);
-                                 CLEANUP ();
-                                 errno = EILSEQ;
-                                 return NULL;
-                               }
-                             arg_end += count;
-                             characters++;
-                           }
-                       }
-                     else if (has_width)
-                       {
-                         /* Use the entire string, and count the number of
-                            characters.  */
-                         arg_end = arg;
-                         characters = 0;
-                         for (;;)
-                           {
-                             int count = u16_strmblen (arg_end);
-                             if (count == 0)
-                               break;
-                             if (count < 0)
-                               {
-                                 if (!(result == resultbuf || result == NULL))
-                                   free (result);
-                                 if (buf_malloced != NULL)
-                                   free (buf_malloced);
-                                 CLEANUP ();
-                                 errno = EILSEQ;
-                                 return NULL;
-                               }
-                             arg_end += count;
-                             characters++;
-                           }
-                       }
-                     else
-                       {
-                         /* Use the entire string.  */
-                         arg_end = arg + u16_strlen (arg);
-                         /* The number of characters doesn't matter.  */
-                         characters = 0;
-                       }
-
-                     if (has_width && width > characters
-                         && !(dp->flags & FLAG_LEFT))
-                       {
-                         size_t n = width - characters;
-                         ENSURE_ALLOCATION (xsum (length, n));
-                         DCHAR_SET (result + length, ' ', n);
-                         length += n;
-                       }
-
-# if DCHAR_IS_UINT16_T
-                     {
-                       size_t n = arg_end - arg;
-                       ENSURE_ALLOCATION (xsum (length, n));
-                       DCHAR_CPY (result + length, arg, n);
-                       length += n;
-                     }
-# else
-                     { /* Convert.  */
-                       DCHAR_T *converted = result + length;
-                       size_t converted_len = allocated - length;
-#  if DCHAR_IS_TCHAR
-                       /* Convert from UTF-16 to locale encoding.  */
-                       if (u16_conv_to_encoding (locale_charset (),
-                                                 iconveh_question_mark,
-                                                 arg, arg_end - arg, NULL,
-                                                 &converted, &converted_len)
-                           < 0)
-#  else
-                       /* Convert from UTF-16 to UTF-8/UTF-32.  */
-                       converted =
-                         U16_TO_DCHAR (arg, arg_end - arg,
-                                       converted, &converted_len);
-                       if (converted == NULL)
-#  endif
-                         {
-                           int saved_errno = errno;
-                           if (!(result == resultbuf || result == NULL))
-                             free (result);
-                           if (buf_malloced != NULL)
-                             free (buf_malloced);
-                           CLEANUP ();
-                           errno = saved_errno;
-                           return NULL;
-                         }
-                       if (converted != result + length)
-                         {
-                           ENSURE_ALLOCATION (xsum (length, converted_len));
-                           DCHAR_CPY (result + length, converted, converted_len);
-                           free (converted);
-                         }
-                       length += converted_len;
-                     }
-# endif
-
-                     if (has_width && width > characters
-                         && (dp->flags & FLAG_LEFT))
-                       {
-                         size_t n = width - characters;
-                         ENSURE_ALLOCATION (xsum (length, n));
-                         DCHAR_SET (result + length, ' ', n);
-                         length += n;
-                       }
-                   }
-                   break;
-
-                 case TYPE_U32_STRING:
-                   {
-                     const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string;
-                     const uint32_t *arg_end;
-                     size_t characters;
-
-                     if (has_precision)
-                       {
-                         /* Use only PRECISION characters, from the left.  */
-                         arg_end = arg;
-                         characters = 0;
-                         for (; precision > 0; precision--)
-                           {
-                             int count = u32_strmblen (arg_end);
-                             if (count == 0)
-                               break;
-                             if (count < 0)
-                               {
-                                 if (!(result == resultbuf || result == NULL))
-                                   free (result);
-                                 if (buf_malloced != NULL)
-                                   free (buf_malloced);
-                                 CLEANUP ();
-                                 errno = EILSEQ;
-                                 return NULL;
-                               }
-                             arg_end += count;
-                             characters++;
-                           }
-                       }
-                     else if (has_width)
-                       {
-                         /* Use the entire string, and count the number of
-                            characters.  */
-                         arg_end = arg;
-                         characters = 0;
-                         for (;;)
-                           {
-                             int count = u32_strmblen (arg_end);
-                             if (count == 0)
-                               break;
-                             if (count < 0)
-                               {
-                                 if (!(result == resultbuf || result == NULL))
-                                   free (result);
-                                 if (buf_malloced != NULL)
-                                   free (buf_malloced);
-                                 CLEANUP ();
-                                 errno = EILSEQ;
-                                 return NULL;
-                               }
-                             arg_end += count;
-                             characters++;
-                           }
-                       }
-                     else
-                       {
-                         /* Use the entire string.  */
-                         arg_end = arg + u32_strlen (arg);
-                         /* The number of characters doesn't matter.  */
-                         characters = 0;
-                       }
-
-                     if (has_width && width > characters
-                         && !(dp->flags & FLAG_LEFT))
-                       {
-                         size_t n = width - characters;
-                         ENSURE_ALLOCATION (xsum (length, n));
-                         DCHAR_SET (result + length, ' ', n);
-                         length += n;
-                       }
-
-# if DCHAR_IS_UINT32_T
-                     {
-                       size_t n = arg_end - arg;
-                       ENSURE_ALLOCATION (xsum (length, n));
-                       DCHAR_CPY (result + length, arg, n);
-                       length += n;
-                     }
-# else
-                     { /* Convert.  */
-                       DCHAR_T *converted = result + length;
-                       size_t converted_len = allocated - length;
-#  if DCHAR_IS_TCHAR
-                       /* Convert from UTF-32 to locale encoding.  */
-                       if (u32_conv_to_encoding (locale_charset (),
-                                                 iconveh_question_mark,
-                                                 arg, arg_end - arg, NULL,
-                                                 &converted, &converted_len)
-                           < 0)
-#  else
-                       /* Convert from UTF-32 to UTF-8/UTF-16.  */
-                       converted =
-                         U32_TO_DCHAR (arg, arg_end - arg,
-                                       converted, &converted_len);
-                       if (converted == NULL)
-#  endif
-                         {
-                           int saved_errno = errno;
-                           if (!(result == resultbuf || result == NULL))
-                             free (result);
-                           if (buf_malloced != NULL)
-                             free (buf_malloced);
-                           CLEANUP ();
-                           errno = saved_errno;
-                           return NULL;
-                         }
-                       if (converted != result + length)
-                         {
-                           ENSURE_ALLOCATION (xsum (length, converted_len));
-                           DCHAR_CPY (result + length, converted, converted_len);
-                           free (converted);
-                         }
-                       length += converted_len;
-                     }
-# endif
-
-                     if (has_width && width > characters
-                         && (dp->flags & FLAG_LEFT))
-                       {
-                         size_t n = width - characters;
-                         ENSURE_ALLOCATION (xsum (length, n));
-                         DCHAR_SET (result + length, ' ', n);
-                         length += n;
-                       }
-                   }
-                   break;
-
-                 default:
-                   abort ();
-                 }
-             }
-#endif
-#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL
-           else if ((dp->conversion == 'a' || dp->conversion == 'A')
-# if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE))
-                    && (0
-#  if NEED_PRINTF_DOUBLE
-                        || a.arg[dp->arg_index].type == TYPE_DOUBLE
-#  endif
-#  if NEED_PRINTF_LONG_DOUBLE
-                        || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
-#  endif
-                       )
-# endif
-                   )
-             {
-               arg_type type = a.arg[dp->arg_index].type;
-               int flags = dp->flags;
-               int has_width;
-               size_t width;
-               int has_precision;
-               size_t precision;
-               size_t tmp_length;
-               DCHAR_T tmpbuf[700];
-               DCHAR_T *tmp;
-               DCHAR_T *pad_ptr;
-               DCHAR_T *p;
-
-               has_width = 0;
-               width = 0;
-               if (dp->width_start != dp->width_end)
-                 {
-                   if (dp->width_arg_index != ARG_NONE)
-                     {
-                       int arg;
-
-                       if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
-                         abort ();
-                       arg = a.arg[dp->width_arg_index].a.a_int;
-                       if (arg < 0)
-                         {
-                           /* "A negative field width is taken as a '-' flag
-                               followed by a positive field width."  */
-                           flags |= FLAG_LEFT;
-                           width = (unsigned int) (-arg);
-                         }
-                       else
-                         width = arg;
-                     }
-                   else
-                     {
-                       const FCHAR_T *digitp = dp->width_start;
-
-                       do
-                         width = xsum (xtimes (width, 10), *digitp++ - '0');
-                       while (digitp != dp->width_end);
-                     }
-                   has_width = 1;
-                 }
-
-               has_precision = 0;
-               precision = 0;
-               if (dp->precision_start != dp->precision_end)
-                 {
-                   if (dp->precision_arg_index != ARG_NONE)
-                     {
-                       int arg;
-
-                       if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
-                         abort ();
-                       arg = a.arg[dp->precision_arg_index].a.a_int;
-                       /* "A negative precision is taken as if the precision
-                           were omitted."  */
-                       if (arg >= 0)
-                         {
-                           precision = arg;
-                           has_precision = 1;
-                         }
-                     }
-                   else
-                     {
-                       const FCHAR_T *digitp = dp->precision_start + 1;
-
-                       precision = 0;
-                       while (digitp != dp->precision_end)
-                         precision = xsum (xtimes (precision, 10), *digitp++ - '0');
-                       has_precision = 1;
-                     }
-                 }
-
-               /* Allocate a temporary buffer of sufficient size.  */
-               if (type == TYPE_LONGDOUBLE)
-                 tmp_length =
-                   (unsigned int) ((LDBL_DIG + 1)
-                                   * 0.831 /* decimal -> hexadecimal */
-                                  )
-                   + 1; /* turn floor into ceil */
-               else
-                 tmp_length =
-                   (unsigned int) ((DBL_DIG + 1)
-                                   * 0.831 /* decimal -> hexadecimal */
-                                  )
-                   + 1; /* turn floor into ceil */
-               if (tmp_length < precision)
-                 tmp_length = precision;
-               /* Account for sign, decimal point etc. */
-               tmp_length = xsum (tmp_length, 12);
-
-               if (tmp_length < width)
-                 tmp_length = width;
-
-               tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
-
-               if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T))
-                 tmp = tmpbuf;
-               else
-                 {
-                   size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T));
-
-                   if (size_overflow_p (tmp_memsize))
-                     /* Overflow, would lead to out of memory.  */
-                     goto out_of_memory;
-                   tmp = (DCHAR_T *) malloc (tmp_memsize);
-                   if (tmp == NULL)
-                     /* Out of memory.  */
-                     goto out_of_memory;
-                 }
-
-               pad_ptr = NULL;
-               p = tmp;
-               if (type == TYPE_LONGDOUBLE)
-                 {
-# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE
-                   long double arg = a.arg[dp->arg_index].a.a_longdouble;
-
-                   if (isnanl (arg))
-                     {
-                       if (dp->conversion == 'A')
-                         {
-                           *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
-                         }
-                       else
-                         {
-                           *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
-                         }
-                     }
-                   else
-                     {
-                       int sign = 0;
-                       DECL_LONG_DOUBLE_ROUNDING
-
-                       BEGIN_LONG_DOUBLE_ROUNDING ();
-
-                       if (signbit (arg)) /* arg < 0.0L or negative zero */
-                         {
-                           sign = -1;
-                           arg = -arg;
-                         }
-
-                       if (sign < 0)
-                         *p++ = '-';
-                       else if (flags & FLAG_SHOWSIGN)
-                         *p++ = '+';
-                       else if (flags & FLAG_SPACE)
-                         *p++ = ' ';
-
-                       if (arg > 0.0L && arg + arg == arg)
-                         {
-                           if (dp->conversion == 'A')
-                             {
-                               *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
-                             }
-                           else
-                             {
-                               *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
-                             }
-                         }
-                       else
-                         {
-                           int exponent;
-                           long double mantissa;
-
-                           if (arg > 0.0L)
-                             mantissa = printf_frexpl (arg, &exponent);
-                           else
-                             {
-                               exponent = 0;
-                               mantissa = 0.0L;
-                             }
-
-                           if (has_precision
-                               && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1)
-                             {
-                               /* Round the mantissa.  */
-                               long double tail = mantissa;
-                               size_t q;
-
-                               for (q = precision; ; q--)
-                                 {
-                                   int digit = (int) tail;
-                                   tail -= digit;
-                                   if (q == 0)
-                                     {
-                                       if (digit & 1 ? tail >= 0.5L : tail > 0.5L)
-                                         tail = 1 - tail;
-                                       else
-                                         tail = - tail;
-                                       break;
-                                     }
-                                   tail *= 16.0L;
-                                 }
-                               if (tail != 0.0L)
-                                 for (q = precision; q > 0; q--)
-                                   tail *= 0.0625L;
-                               mantissa += tail;
-                             }
-
-                           *p++ = '0';
-                           *p++ = dp->conversion - 'A' + 'X';
-                           pad_ptr = p;
-                           {
-                             int digit;
-
-                             digit = (int) mantissa;
-                             mantissa -= digit;
-                             *p++ = '0' + digit;
-                             if ((flags & FLAG_ALT)
-                                 || mantissa > 0.0L || precision > 0)
-                               {
-                                 *p++ = decimal_point_char ();
-                                 /* This loop terminates because we assume
-                                    that FLT_RADIX is a power of 2.  */
-                                 while (mantissa > 0.0L)
-                                   {
-                                     mantissa *= 16.0L;
-                                     digit = (int) mantissa;
-                                     mantissa -= digit;
-                                     *p++ = digit
-                                            + (digit < 10
-                                               ? '0'
-                                               : dp->conversion - 10);
-                                     if (precision > 0)
-                                       precision--;
-                                   }
-                                 while (precision > 0)
-                                   {
-                                     *p++ = '0';
-                                     precision--;
-                                   }
-                               }
-                             }
-                             *p++ = dp->conversion - 'A' + 'P';
-#  if WIDE_CHAR_VERSION
-                             {
-                               static const wchar_t decimal_format[] =
-                                 { '%', '+', 'd', '\0' };
-                               SNPRINTF (p, 6 + 1, decimal_format, exponent);
-                             }
-                             while (*p != '\0')
-                               p++;
-#  else
-                             if (sizeof (DCHAR_T) == 1)
-                               {
-                                 sprintf ((char *) p, "%+d", exponent);
-                                 while (*p != '\0')
-                                   p++;
-                               }
-                             else
-                               {
-                                 char expbuf[6 + 1];
-                                 const char *ep;
-                                 sprintf (expbuf, "%+d", exponent);
-                                 for (ep = expbuf; (*p = *ep) != '\0'; ep++)
-                                   p++;
-                               }
-#  endif
-                         }
-
-                       END_LONG_DOUBLE_ROUNDING ();
-                     }
-# else
-                   abort ();
-# endif
-                 }
-               else
-                 {
-# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE
-                   double arg = a.arg[dp->arg_index].a.a_double;
-
-                   if (isnand (arg))
-                     {
-                       if (dp->conversion == 'A')
-                         {
-                           *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
-                         }
-                       else
-                         {
-                           *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
-                         }
-                     }
-                   else
-                     {
-                       int sign = 0;
-
-                       if (signbit (arg)) /* arg < 0.0 or negative zero */
-                         {
-                           sign = -1;
-                           arg = -arg;
-                         }
-
-                       if (sign < 0)
-                         *p++ = '-';
-                       else if (flags & FLAG_SHOWSIGN)
-                         *p++ = '+';
-                       else if (flags & FLAG_SPACE)
-                         *p++ = ' ';
-
-                       if (arg > 0.0 && arg + arg == arg)
-                         {
-                           if (dp->conversion == 'A')
-                             {
-                               *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
-                             }
-                           else
-                             {
-                               *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
-                             }
-                         }
-                       else
-                         {
-                           int exponent;
-                           double mantissa;
-
-                           if (arg > 0.0)
-                             mantissa = printf_frexp (arg, &exponent);
-                           else
-                             {
-                               exponent = 0;
-                               mantissa = 0.0;
-                             }
-
-                           if (has_precision
-                               && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1)
-                             {
-                               /* Round the mantissa.  */
-                               double tail = mantissa;
-                               size_t q;
-
-                               for (q = precision; ; q--)
-                                 {
-                                   int digit = (int) tail;
-                                   tail -= digit;
-                                   if (q == 0)
-                                     {
-                                       if (digit & 1 ? tail >= 0.5 : tail > 0.5)
-                                         tail = 1 - tail;
-                                       else
-                                         tail = - tail;
-                                       break;
-                                     }
-                                   tail *= 16.0;
-                                 }
-                               if (tail != 0.0)
-                                 for (q = precision; q > 0; q--)
-                                   tail *= 0.0625;
-                               mantissa += tail;
-                             }
-
-                           *p++ = '0';
-                           *p++ = dp->conversion - 'A' + 'X';
-                           pad_ptr = p;
-                           {
-                             int digit;
-
-                             digit = (int) mantissa;
-                             mantissa -= digit;
-                             *p++ = '0' + digit;
-                             if ((flags & FLAG_ALT)
-                                 || mantissa > 0.0 || precision > 0)
-                               {
-                                 *p++ = decimal_point_char ();
-                                 /* This loop terminates because we assume
-                                    that FLT_RADIX is a power of 2.  */
-                                 while (mantissa > 0.0)
-                                   {
-                                     mantissa *= 16.0;
-                                     digit = (int) mantissa;
-                                     mantissa -= digit;
-                                     *p++ = digit
-                                            + (digit < 10
-                                               ? '0'
-                                               : dp->conversion - 10);
-                                     if (precision > 0)
-                                       precision--;
-                                   }
-                                 while (precision > 0)
-                                   {
-                                     *p++ = '0';
-                                     precision--;
-                                   }
-                               }
-                             }
-                             *p++ = dp->conversion - 'A' + 'P';
-#  if WIDE_CHAR_VERSION
-                             {
-                               static const wchar_t decimal_format[] =
-                                 { '%', '+', 'd', '\0' };
-                               SNPRINTF (p, 6 + 1, decimal_format, exponent);
-                             }
-                             while (*p != '\0')
-                               p++;
-#  else
-                             if (sizeof (DCHAR_T) == 1)
-                               {
-                                 sprintf ((char *) p, "%+d", exponent);
-                                 while (*p != '\0')
-                                   p++;
-                               }
-                             else
-                               {
-                                 char expbuf[6 + 1];
-                                 const char *ep;
-                                 sprintf (expbuf, "%+d", exponent);
-                                 for (ep = expbuf; (*p = *ep) != '\0'; ep++)
-                                   p++;
-                               }
-#  endif
-                         }
-                     }
-# else
-                   abort ();
-# endif
-                 }
-               /* The generated string now extends from tmp to p, with the
-                  zero padding insertion point being at pad_ptr.  */
-               if (has_width && p - tmp < width)
-                 {
-                   size_t pad = width - (p - tmp);
-                   DCHAR_T *end = p + pad;
-
-                   if (flags & FLAG_LEFT)
-                     {
-                       /* Pad with spaces on the right.  */
-                       for (; pad > 0; pad--)
-                         *p++ = ' ';
-                     }
-                   else if ((flags & FLAG_ZERO) && pad_ptr != NULL)
-                     {
-                       /* Pad with zeroes.  */
-                       DCHAR_T *q = end;
-
-                       while (p > pad_ptr)
-                         *--q = *--p;
-                       for (; pad > 0; pad--)
-                         *p++ = '0';
-                     }
-                   else
-                     {
-                       /* Pad with spaces on the left.  */
-                       DCHAR_T *q = end;
-
-                       while (p > tmp)
-                         *--q = *--p;
-                       for (; pad > 0; pad--)
-                         *p++ = ' ';
-                     }
-
-                   p = end;
-                 }
-
-               {
-                 size_t count = p - tmp;
-
-                 if (count >= tmp_length)
-                   /* tmp_length was incorrectly calculated - fix the
-                      code above!  */
-                   abort ();
-
-                 /* Make room for the result.  */
-                 if (count >= allocated - length)
-                   {
-                     size_t n = xsum (length, count);
-
-                     ENSURE_ALLOCATION (n);
-                   }
-
-                 /* Append the result.  */
-                 memcpy (result + length, tmp, count * sizeof (DCHAR_T));
-                 if (tmp != tmpbuf)
-                   free (tmp);
-                 length += count;
-               }
-             }
-#endif
-#if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL
-           else if ((dp->conversion == 'f' || dp->conversion == 'F'
-                     || dp->conversion == 'e' || dp->conversion == 'E'
-                     || dp->conversion == 'g' || dp->conversion == 'G'
-                     || dp->conversion == 'a' || dp->conversion == 'A')
-                    && (0
-# if NEED_PRINTF_DOUBLE
-                        || a.arg[dp->arg_index].type == TYPE_DOUBLE
-# elif NEED_PRINTF_INFINITE_DOUBLE
-                        || (a.arg[dp->arg_index].type == TYPE_DOUBLE
-                            /* The systems (mingw) which produce wrong output
-                               for Inf, -Inf, and NaN also do so for -0.0.
-                               Therefore we treat this case here as well.  */
-                            && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double))
-# endif
-# if NEED_PRINTF_LONG_DOUBLE
-                        || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
-# elif NEED_PRINTF_INFINITE_LONG_DOUBLE
-                        || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
-                            /* Some systems produce wrong output for Inf,
-                               -Inf, and NaN.  Some systems in this category
-                               (IRIX 5.3) also do so for -0.0.  Therefore we
-                               treat this case here as well.  */
-                            && is_infinite_or_zerol (a.arg[dp->arg_index].a.a_longdouble))
-# endif
-                       ))
-             {
-# if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE)
-               arg_type type = a.arg[dp->arg_index].type;
-# endif
-               int flags = dp->flags;
-               int has_width;
-               size_t width;
-               int has_precision;
-               size_t precision;
-               size_t tmp_length;
-               DCHAR_T tmpbuf[700];
-               DCHAR_T *tmp;
-               DCHAR_T *pad_ptr;
-               DCHAR_T *p;
-
-               has_width = 0;
-               width = 0;
-               if (dp->width_start != dp->width_end)
-                 {
-                   if (dp->width_arg_index != ARG_NONE)
-                     {
-                       int arg;
-
-                       if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
-                         abort ();
-                       arg = a.arg[dp->width_arg_index].a.a_int;
-                       if (arg < 0)
-                         {
-                           /* "A negative field width is taken as a '-' flag
-                               followed by a positive field width."  */
-                           flags |= FLAG_LEFT;
-                           width = (unsigned int) (-arg);
-                         }
-                       else
-                         width = arg;
-                     }
-                   else
-                     {
-                       const FCHAR_T *digitp = dp->width_start;
-
-                       do
-                         width = xsum (xtimes (width, 10), *digitp++ - '0');
-                       while (digitp != dp->width_end);
-                     }
-                   has_width = 1;
-                 }
-
-               has_precision = 0;
-               precision = 0;
-               if (dp->precision_start != dp->precision_end)
-                 {
-                   if (dp->precision_arg_index != ARG_NONE)
-                     {
-                       int arg;
-
-                       if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
-                         abort ();
-                       arg = a.arg[dp->precision_arg_index].a.a_int;
-                       /* "A negative precision is taken as if the precision
-                           were omitted."  */
-                       if (arg >= 0)
-                         {
-                           precision = arg;
-                           has_precision = 1;
-                         }
-                     }
-                   else
-                     {
-                       const FCHAR_T *digitp = dp->precision_start + 1;
-
-                       precision = 0;
-                       while (digitp != dp->precision_end)
-                         precision = xsum (xtimes (precision, 10), *digitp++ - '0');
-                       has_precision = 1;
-                     }
-                 }
-
-               /* POSIX specifies the default precision to be 6 for %f, %F,
-                  %e, %E, but not for %g, %G.  Implementations appear to use
-                  the same default precision also for %g, %G.  But for %a, %A,
-                  the default precision is 0.  */
-               if (!has_precision)
-                 if (!(dp->conversion == 'a' || dp->conversion == 'A'))
-                   precision = 6;
-
-               /* Allocate a temporary buffer of sufficient size.  */
-# if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE
-               tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1);
-# elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE
-               tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0);
-# elif NEED_PRINTF_LONG_DOUBLE
-               tmp_length = LDBL_DIG + 1;
-# elif NEED_PRINTF_DOUBLE
-               tmp_length = DBL_DIG + 1;
-# else
-               tmp_length = 0;
-# endif
-               if (tmp_length < precision)
-                 tmp_length = precision;
-# if NEED_PRINTF_LONG_DOUBLE
-#  if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
-               if (type == TYPE_LONGDOUBLE)
-#  endif
-                 if (dp->conversion == 'f' || dp->conversion == 'F')
-                   {
-                     long double arg = a.arg[dp->arg_index].a.a_longdouble;
-                     if (!(isnanl (arg) || arg + arg == arg))
-                       {
-                         /* arg is finite and nonzero.  */
-                         int exponent = floorlog10l (arg < 0 ? -arg : arg);
-                         if (exponent >= 0 && tmp_length < exponent + precision)
-                           tmp_length = exponent + precision;
-                       }
-                   }
-# endif
-# if NEED_PRINTF_DOUBLE
-#  if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE
-               if (type == TYPE_DOUBLE)
-#  endif
-                 if (dp->conversion == 'f' || dp->conversion == 'F')
-                   {
-                     double arg = a.arg[dp->arg_index].a.a_double;
-                     if (!(isnand (arg) || arg + arg == arg))
-                       {
-                         /* arg is finite and nonzero.  */
-                         int exponent = floorlog10 (arg < 0 ? -arg : arg);
-                         if (exponent >= 0 && tmp_length < exponent + precision)
-                           tmp_length = exponent + precision;
-                       }
-                   }
-# endif
-               /* Account for sign, decimal point etc. */
-               tmp_length = xsum (tmp_length, 12);
-
-               if (tmp_length < width)
-                 tmp_length = width;
-
-               tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
-
-               if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T))
-                 tmp = tmpbuf;
-               else
-                 {
-                   size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T));
-
-                   if (size_overflow_p (tmp_memsize))
-                     /* Overflow, would lead to out of memory.  */
-                     goto out_of_memory;
-                   tmp = (DCHAR_T *) malloc (tmp_memsize);
-                   if (tmp == NULL)
-                     /* Out of memory.  */
-                     goto out_of_memory;
-                 }
-
-               pad_ptr = NULL;
-               p = tmp;
-
-# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE
-#  if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
-               if (type == TYPE_LONGDOUBLE)
-#  endif
-                 {
-                   long double arg = a.arg[dp->arg_index].a.a_longdouble;
-
-                   if (isnanl (arg))
-                     {
-                       if (dp->conversion >= 'A' && dp->conversion <= 'Z')
-                         {
-                           *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
-                         }
-                       else
-                         {
-                           *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
-                         }
-                     }
-                   else
-                     {
-                       int sign = 0;
-                       DECL_LONG_DOUBLE_ROUNDING
-
-                       BEGIN_LONG_DOUBLE_ROUNDING ();
-
-                       if (signbit (arg)) /* arg < 0.0L or negative zero */
-                         {
-                           sign = -1;
-                           arg = -arg;
-                         }
-
-                       if (sign < 0)
-                         *p++ = '-';
-                       else if (flags & FLAG_SHOWSIGN)
-                         *p++ = '+';
-                       else if (flags & FLAG_SPACE)
-                         *p++ = ' ';
-
-                       if (arg > 0.0L && arg + arg == arg)
-                         {
-                           if (dp->conversion >= 'A' && dp->conversion <= 'Z')
-                             {
-                               *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
-                             }
-                           else
-                             {
-                               *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
-                             }
-                         }
-                       else
-                         {
-#  if NEED_PRINTF_LONG_DOUBLE
-                           pad_ptr = p;
-
-                           if (dp->conversion == 'f' || dp->conversion == 'F')
-                             {
-                               char *digits;
-                               size_t ndigits;
-
-                               digits =
-                                 scale10_round_decimal_long_double (arg, precision);
-                               if (digits == NULL)
-                                 {
-                                   END_LONG_DOUBLE_ROUNDING ();
-                                   goto out_of_memory;
-                                 }
-                               ndigits = strlen (digits);
-
-                               if (ndigits > precision)
-                                 do
-                                   {
-                                     --ndigits;
-                                     *p++ = digits[ndigits];
-                                   }
-                                 while (ndigits > precision);
-                               else
-                                 *p++ = '0';
-                               /* Here ndigits <= precision.  */
-                               if ((flags & FLAG_ALT) || precision > 0)
-                                 {
-                                   *p++ = decimal_point_char ();
-                                   for (; precision > ndigits; precision--)
-                                     *p++ = '0';
-                                   while (ndigits > 0)
-                                     {
-                                       --ndigits;
-                                       *p++ = digits[ndigits];
-                                     }
-                                 }
-
-                               free (digits);
-                             }
-                           else if (dp->conversion == 'e' || dp->conversion == 'E')
-                             {
-                               int exponent;
-
-                               if (arg == 0.0L)
-                                 {
-                                   exponent = 0;
-                                   *p++ = '0';
-                                   if ((flags & FLAG_ALT) || precision > 0)
-                                     {
-                                       *p++ = decimal_point_char ();
-                                       for (; precision > 0; precision--)
-                                         *p++ = '0';
-                                     }
-                                 }
-                               else
-                                 {
-                                   /* arg > 0.0L.  */
-                                   int adjusted;
-                                   char *digits;
-                                   size_t ndigits;
-
-                                   exponent = floorlog10l (arg);
-                                   adjusted = 0;
-                                   for (;;)
-                                     {
-                                       digits =
-                                         scale10_round_decimal_long_double (arg,
-                                                                            (int)precision - exponent);
-                                       if (digits == NULL)
-                                         {
-                                           END_LONG_DOUBLE_ROUNDING ();
-                                           goto out_of_memory;
-                                         }
-                                       ndigits = strlen (digits);
-
-                                       if (ndigits == precision + 1)
-                                         break;
-                                       if (ndigits < precision
-                                           || ndigits > precision + 2)
-                                         /* The exponent was not guessed
-                                            precisely enough.  */
-                                         abort ();
-                                       if (adjusted)
-                                         /* None of two values of exponent is
-                                            the right one.  Prevent an endless
-                                            loop.  */
-                                         abort ();
-                                       free (digits);
-                                       if (ndigits == precision)
-                                         exponent -= 1;
-                                       else
-                                         exponent += 1;
-                                       adjusted = 1;
-                                     }
-                                   /* Here ndigits = precision+1.  */
-                                   if (is_borderline (digits, precision))
-                                     {
-                                       /* Maybe the exponent guess was too high
-                                          and a smaller exponent can be reached
-                                          by turning a 10...0 into 9...9x.  */
-                                       char *digits2 =
-                                         scale10_round_decimal_long_double (arg,
-                                                                            (int)precision - exponent + 1);
-                                       if (digits2 == NULL)
-                                         {
-                                           free (digits);
-                                           END_LONG_DOUBLE_ROUNDING ();
-                                           goto out_of_memory;
-                                         }
-                                       if (strlen (digits2) == precision + 1)
-                                         {
-                                           free (digits);
-                                           digits = digits2;
-                                           exponent -= 1;
-                                         }
-                                       else
-                                         free (digits2);
-                                     }
-                                   /* Here ndigits = precision+1.  */
-
-                                   *p++ = digits[--ndigits];
-                                   if ((flags & FLAG_ALT) || precision > 0)
-                                     {
-                                       *p++ = decimal_point_char ();
-                                       while (ndigits > 0)
-                                         {
-                                           --ndigits;
-                                           *p++ = digits[ndigits];
-                                         }
-                                     }
-
-                                   free (digits);
-                                 }
-
-                               *p++ = dp->conversion; /* 'e' or 'E' */
-#   if WIDE_CHAR_VERSION
-                               {
-                                 static const wchar_t decimal_format[] =
-                                   { '%', '+', '.', '2', 'd', '\0' };
-                                 SNPRINTF (p, 6 + 1, decimal_format, exponent);
-                               }
-                               while (*p != '\0')
-                                 p++;
-#   else
-                               if (sizeof (DCHAR_T) == 1)
-                                 {
-                                   sprintf ((char *) p, "%+.2d", exponent);
-                                   while (*p != '\0')
-                                     p++;
-                                 }
-                               else
-                                 {
-                                   char expbuf[6 + 1];
-                                   const char *ep;
-                                   sprintf (expbuf, "%+.2d", exponent);
-                                   for (ep = expbuf; (*p = *ep) != '\0'; ep++)
-                                     p++;
-                                 }
-#   endif
-                             }
-                           else if (dp->conversion == 'g' || dp->conversion == 'G')
-                             {
-                               if (precision == 0)
-                                 precision = 1;
-                               /* precision >= 1.  */
-
-                               if (arg == 0.0L)
-                                 /* The exponent is 0, >= -4, < precision.
-                                    Use fixed-point notation.  */
-                                 {
-                                   size_t ndigits = precision;
-                                   /* Number of trailing zeroes that have to be
-                                      dropped.  */
-                                   size_t nzeroes =
-                                     (flags & FLAG_ALT ? 0 : precision - 1);
-
-                                   --ndigits;
-                                   *p++ = '0';
-                                   if ((flags & FLAG_ALT) || ndigits > nzeroes)
-                                     {
-                                       *p++ = decimal_point_char ();
-                                       while (ndigits > nzeroes)
-                                         {
-                                           --ndigits;
-                                           *p++ = '0';
-                                         }
-                                     }
-                                 }
-                               else
-                                 {
-                                   /* arg > 0.0L.  */
-                                   int exponent;
-                                   int adjusted;
-                                   char *digits;
-                                   size_t ndigits;
-                                   size_t nzeroes;
-
-                                   exponent = floorlog10l (arg);
-                                   adjusted = 0;
-                                   for (;;)
-                                     {
-                                       digits =
-                                         scale10_round_decimal_long_double (arg,
-                                                                            (int)(precision - 1) - exponent);
-                                       if (digits == NULL)
-                                         {
-                                           END_LONG_DOUBLE_ROUNDING ();
-                                           goto out_of_memory;
-                                         }
-                                       ndigits = strlen (digits);
-
-                                       if (ndigits == precision)
-                                         break;
-                                       if (ndigits < precision - 1
-                                           || ndigits > precision + 1)
-                                         /* The exponent was not guessed
-                                            precisely enough.  */
-                                         abort ();
-                                       if (adjusted)
-                                         /* None of two values of exponent is
-                                            the right one.  Prevent an endless
-                                            loop.  */
-                                         abort ();
-                                       free (digits);
-                                       if (ndigits < precision)
-                                         exponent -= 1;
-                                       else
-                                         exponent += 1;
-                                       adjusted = 1;
-                                     }
-                                   /* Here ndigits = precision.  */
-                                   if (is_borderline (digits, precision - 1))
-                                     {
-                                       /* Maybe the exponent guess was too high
-                                          and a smaller exponent can be reached
-                                          by turning a 10...0 into 9...9x.  */
-                                       char *digits2 =
-                                         scale10_round_decimal_long_double (arg,
-                                                                            (int)(precision - 1) - exponent + 1);
-                                       if (digits2 == NULL)
-                                         {
-                                           free (digits);
-                                           END_LONG_DOUBLE_ROUNDING ();
-                                           goto out_of_memory;
-                                         }
-                                       if (strlen (digits2) == precision)
-                                         {
-                                           free (digits);
-                                           digits = digits2;
-                                           exponent -= 1;
-                                         }
-                                       else
-                                         free (digits2);
-                                     }
-                                   /* Here ndigits = precision.  */
-
-                                   /* Determine the number of trailing zeroes
-                                      that have to be dropped.  */
-                                   nzeroes = 0;
-                                   if ((flags & FLAG_ALT) == 0)
-                                     while (nzeroes < ndigits
-                                            && digits[nzeroes] == '0')
-                                       nzeroes++;
-
-                                   /* The exponent is now determined.  */
-                                   if (exponent >= -4
-                                       && exponent < (long)precision)
-                                     {
-                                       /* Fixed-point notation:
-                                          max(exponent,0)+1 digits, then the
-                                          decimal point, then the remaining
-                                          digits without trailing zeroes.  */
-                                       if (exponent >= 0)
-                                         {
-                                           size_t count = exponent + 1;
-                                           /* Note: count <= precision = ndigits.  */
-                                           for (; count > 0; count--)
-                                             *p++ = digits[--ndigits];
-                                           if ((flags & FLAG_ALT) || ndigits > nzeroes)
-                                             {
-                                               *p++ = decimal_point_char ();
-                                               while (ndigits > nzeroes)
-                                                 {
-                                                   --ndigits;
-                                                   *p++ = digits[ndigits];
-                                                 }
-                                             }
-                                         }
-                                       else
-                                         {
-                                           size_t count = -exponent - 1;
-                                           *p++ = '0';
-                                           *p++ = decimal_point_char ();
-                                           for (; count > 0; count--)
-                                             *p++ = '0';
-                                           while (ndigits > nzeroes)
-                                             {
-                                               --ndigits;
-                                               *p++ = digits[ndigits];
-                                             }
-                                         }
-                                     }
-                                   else
-                                     {
-                                       /* Exponential notation.  */
-                                       *p++ = digits[--ndigits];
-                                       if ((flags & FLAG_ALT) || ndigits > nzeroes)
-                                         {
-                                           *p++ = decimal_point_char ();
-                                           while (ndigits > nzeroes)
-                                             {
-                                               --ndigits;
-                                               *p++ = digits[ndigits];
-                                             }
-                                         }
-                                       *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */
-#   if WIDE_CHAR_VERSION
-                                       {
-                                         static const wchar_t decimal_format[] =
-                                           { '%', '+', '.', '2', 'd', '\0' };
-                                         SNPRINTF (p, 6 + 1, decimal_format, exponent);
-                                       }
-                                       while (*p != '\0')
-                                         p++;
-#   else
-                                       if (sizeof (DCHAR_T) == 1)
-                                         {
-                                           sprintf ((char *) p, "%+.2d", exponent);
-                                           while (*p != '\0')
-                                             p++;
-                                         }
-                                       else
-                                         {
-                                           char expbuf[6 + 1];
-                                           const char *ep;
-                                           sprintf (expbuf, "%+.2d", exponent);
-                                           for (ep = expbuf; (*p = *ep) != '\0'; ep++)
-                                             p++;
-                                         }
-#   endif
-                                     }
-
-                                   free (digits);
-                                 }
-                             }
-                           else
-                             abort ();
-#  else
-                           /* arg is finite.  */
-                           if (!(arg == 0.0L))
-                             abort ();
-
-                           pad_ptr = p;
-
-                           if (dp->conversion == 'f' || dp->conversion == 'F')
-                             {
-                               *p++ = '0';
-                               if ((flags & FLAG_ALT) || precision > 0)
-                                 {
-                                   *p++ = decimal_point_char ();
-                                   for (; precision > 0; precision--)
-                                     *p++ = '0';
-                                 }
-                             }
-                           else if (dp->conversion == 'e' || dp->conversion == 'E')
-                             {
-                               *p++ = '0';
-                               if ((flags & FLAG_ALT) || precision > 0)
-                                 {
-                                   *p++ = decimal_point_char ();
-                                   for (; precision > 0; precision--)
-                                     *p++ = '0';
-                                 }
-                               *p++ = dp->conversion; /* 'e' or 'E' */
-                               *p++ = '+';
-                               *p++ = '0';
-                               *p++ = '0';
-                             }
-                           else if (dp->conversion == 'g' || dp->conversion == 'G')
-                             {
-                               *p++ = '0';
-                               if (flags & FLAG_ALT)
-                                 {
-                                   size_t ndigits =
-                                     (precision > 0 ? precision - 1 : 0);
-                                   *p++ = decimal_point_char ();
-                                   for (; ndigits > 0; --ndigits)
-                                     *p++ = '0';
-                                 }
-                             }
-                           else if (dp->conversion == 'a' || dp->conversion == 'A')
-                             {
-                               *p++ = '0';
-                               *p++ = dp->conversion - 'A' + 'X';
-                               pad_ptr = p;
-                               *p++ = '0';
-                               if ((flags & FLAG_ALT) || precision > 0)
-                                 {
-                                   *p++ = decimal_point_char ();
-                                   for (; precision > 0; precision--)
-                                     *p++ = '0';
-                                 }
-                               *p++ = dp->conversion - 'A' + 'P';
-                               *p++ = '+';
-                               *p++ = '0';
-                             }
-                           else
-                             abort ();
-#  endif
-                         }
-
-                       END_LONG_DOUBLE_ROUNDING ();
-                     }
-                 }
-#  if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
-               else
-#  endif
-# endif
-# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
-                 {
-                   double arg = a.arg[dp->arg_index].a.a_double;
-
-                   if (isnand (arg))
-                     {
-                       if (dp->conversion >= 'A' && dp->conversion <= 'Z')
-                         {
-                           *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
-                         }
-                       else
-                         {
-                           *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
-                         }
-                     }
-                   else
-                     {
-                       int sign = 0;
-
-                       if (signbit (arg)) /* arg < 0.0 or negative zero */
-                         {
-                           sign = -1;
-                           arg = -arg;
-                         }
-
-                       if (sign < 0)
-                         *p++ = '-';
-                       else if (flags & FLAG_SHOWSIGN)
-                         *p++ = '+';
-                       else if (flags & FLAG_SPACE)
-                         *p++ = ' ';
-
-                       if (arg > 0.0 && arg + arg == arg)
-                         {
-                           if (dp->conversion >= 'A' && dp->conversion <= 'Z')
-                             {
-                               *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
-                             }
-                           else
-                             {
-                               *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
-                             }
-                         }
-                       else
-                         {
-#  if NEED_PRINTF_DOUBLE
-                           pad_ptr = p;
-
-                           if (dp->conversion == 'f' || dp->conversion == 'F')
-                             {
-                               char *digits;
-                               size_t ndigits;
-
-                               digits =
-                                 scale10_round_decimal_double (arg, precision);
-                               if (digits == NULL)
-                                 goto out_of_memory;
-                               ndigits = strlen (digits);
-
-                               if (ndigits > precision)
-                                 do
-                                   {
-                                     --ndigits;
-                                     *p++ = digits[ndigits];
-                                   }
-                                 while (ndigits > precision);
-                               else
-                                 *p++ = '0';
-                               /* Here ndigits <= precision.  */
-                               if ((flags & FLAG_ALT) || precision > 0)
-                                 {
-                                   *p++ = decimal_point_char ();
-                                   for (; precision > ndigits; precision--)
-                                     *p++ = '0';
-                                   while (ndigits > 0)
-                                     {
-                                       --ndigits;
-                                       *p++ = digits[ndigits];
-                                     }
-                                 }
-
-                               free (digits);
-                             }
-                           else if (dp->conversion == 'e' || dp->conversion == 'E')
-                             {
-                               int exponent;
-
-                               if (arg == 0.0)
-                                 {
-                                   exponent = 0;
-                                   *p++ = '0';
-                                   if ((flags & FLAG_ALT) || precision > 0)
-                                     {
-                                       *p++ = decimal_point_char ();
-                                       for (; precision > 0; precision--)
-                                         *p++ = '0';
-                                     }
-                                 }
-                               else
-                                 {
-                                   /* arg > 0.0.  */
-                                   int adjusted;
-                                   char *digits;
-                                   size_t ndigits;
-
-                                   exponent = floorlog10 (arg);
-                                   adjusted = 0;
-                                   for (;;)
-                                     {
-                                       digits =
-                                         scale10_round_decimal_double (arg,
-                                                                       (int)precision - exponent);
-                                       if (digits == NULL)
-                                         goto out_of_memory;
-                                       ndigits = strlen (digits);
-
-                                       if (ndigits == precision + 1)
-                                         break;
-                                       if (ndigits < precision
-                                           || ndigits > precision + 2)
-                                         /* The exponent was not guessed
-                                            precisely enough.  */
-                                         abort ();
-                                       if (adjusted)
-                                         /* None of two values of exponent is
-                                            the right one.  Prevent an endless
-                                            loop.  */
-                                         abort ();
-                                       free (digits);
-                                       if (ndigits == precision)
-                                         exponent -= 1;
-                                       else
-                                         exponent += 1;
-                                       adjusted = 1;
-                                     }
-                                   /* Here ndigits = precision+1.  */
-                                   if (is_borderline (digits, precision))
-                                     {
-                                       /* Maybe the exponent guess was too high
-                                          and a smaller exponent can be reached
-                                          by turning a 10...0 into 9...9x.  */
-                                       char *digits2 =
-                                         scale10_round_decimal_double (arg,
-                                                                       (int)precision - exponent + 1);
-                                       if (digits2 == NULL)
-                                         {
-                                           free (digits);
-                                           goto out_of_memory;
-                                         }
-                                       if (strlen (digits2) == precision + 1)
-                                         {
-                                           free (digits);
-                                           digits = digits2;
-                                           exponent -= 1;
-                                         }
-                                       else
-                                         free (digits2);
-                                     }
-                                   /* Here ndigits = precision+1.  */
-
-                                   *p++ = digits[--ndigits];
-                                   if ((flags & FLAG_ALT) || precision > 0)
-                                     {
-                                       *p++ = decimal_point_char ();
-                                       while (ndigits > 0)
-                                         {
-                                           --ndigits;
-                                           *p++ = digits[ndigits];
-                                         }
-                                     }
-
-                                   free (digits);
-                                 }
-
-                               *p++ = dp->conversion; /* 'e' or 'E' */
-#   if WIDE_CHAR_VERSION
-                               {
-                                 static const wchar_t decimal_format[] =
-                                   /* Produce the same number of exponent digits
-                                      as the native printf implementation.  */
-#    if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-                                   { '%', '+', '.', '3', 'd', '\0' };
-#    else
-                                   { '%', '+', '.', '2', 'd', '\0' };
-#    endif
-                                 SNPRINTF (p, 6 + 1, decimal_format, exponent);
-                               }
-                               while (*p != '\0')
-                                 p++;
-#   else
-                               {
-                                 static const char decimal_format[] =
-                                   /* Produce the same number of exponent digits
-                                      as the native printf implementation.  */
-#    if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-                                   "%+.3d";
-#    else
-                                   "%+.2d";
-#    endif
-                                 if (sizeof (DCHAR_T) == 1)
-                                   {
-                                     sprintf ((char *) p, decimal_format, exponent);
-                                     while (*p != '\0')
-                                       p++;
-                                   }
-                                 else
-                                   {
-                                     char expbuf[6 + 1];
-                                     const char *ep;
-                                     sprintf (expbuf, decimal_format, exponent);
-                                     for (ep = expbuf; (*p = *ep) != '\0'; ep++)
-                                       p++;
-                                   }
-                               }
-#   endif
-                             }
-                           else if (dp->conversion == 'g' || dp->conversion == 'G')
-                             {
-                               if (precision == 0)
-                                 precision = 1;
-                               /* precision >= 1.  */
-
-                               if (arg == 0.0)
-                                 /* The exponent is 0, >= -4, < precision.
-                                    Use fixed-point notation.  */
-                                 {
-                                   size_t ndigits = precision;
-                                   /* Number of trailing zeroes that have to be
-                                      dropped.  */
-                                   size_t nzeroes =
-                                     (flags & FLAG_ALT ? 0 : precision - 1);
-
-                                   --ndigits;
-                                   *p++ = '0';
-                                   if ((flags & FLAG_ALT) || ndigits > nzeroes)
-                                     {
-                                       *p++ = decimal_point_char ();
-                                       while (ndigits > nzeroes)
-                                         {
-                                           --ndigits;
-                                           *p++ = '0';
-                                         }
-                                     }
-                                 }
-                               else
-                                 {
-                                   /* arg > 0.0.  */
-                                   int exponent;
-                                   int adjusted;
-                                   char *digits;
-                                   size_t ndigits;
-                                   size_t nzeroes;
-
-                                   exponent = floorlog10 (arg);
-                                   adjusted = 0;
-                                   for (;;)
-                                     {
-                                       digits =
-                                         scale10_round_decimal_double (arg,
-                                                                       (int)(precision - 1) - exponent);
-                                       if (digits == NULL)
-                                         goto out_of_memory;
-                                       ndigits = strlen (digits);
-
-                                       if (ndigits == precision)
-                                         break;
-                                       if (ndigits < precision - 1
-                                           || ndigits > precision + 1)
-                                         /* The exponent was not guessed
-                                            precisely enough.  */
-                                         abort ();
-                                       if (adjusted)
-                                         /* None of two values of exponent is
-                                            the right one.  Prevent an endless
-                                            loop.  */
-                                         abort ();
-                                       free (digits);
-                                       if (ndigits < precision)
-                                         exponent -= 1;
-                                       else
-                                         exponent += 1;
-                                       adjusted = 1;
-                                     }
-                                   /* Here ndigits = precision.  */
-                                   if (is_borderline (digits, precision - 1))
-                                     {
-                                       /* Maybe the exponent guess was too high
-                                          and a smaller exponent can be reached
-                                          by turning a 10...0 into 9...9x.  */
-                                       char *digits2 =
-                                         scale10_round_decimal_double (arg,
-                                                                       (int)(precision - 1) - exponent + 1);
-                                       if (digits2 == NULL)
-                                         {
-                                           free (digits);
-                                           goto out_of_memory;
-                                         }
-                                       if (strlen (digits2) == precision)
-                                         {
-                                           free (digits);
-                                           digits = digits2;
-                                           exponent -= 1;
-                                         }
-                                       else
-                                         free (digits2);
-                                     }
-                                   /* Here ndigits = precision.  */
-
-                                   /* Determine the number of trailing zeroes
-                                      that have to be dropped.  */
-                                   nzeroes = 0;
-                                   if ((flags & FLAG_ALT) == 0)
-                                     while (nzeroes < ndigits
-                                            && digits[nzeroes] == '0')
-                                       nzeroes++;
-
-                                   /* The exponent is now determined.  */
-                                   if (exponent >= -4
-                                       && exponent < (long)precision)
-                                     {
-                                       /* Fixed-point notation:
-                                          max(exponent,0)+1 digits, then the
-                                          decimal point, then the remaining
-                                          digits without trailing zeroes.  */
-                                       if (exponent >= 0)
-                                         {
-                                           size_t count = exponent + 1;
-                                           /* Note: count <= precision = ndigits.  */
-                                           for (; count > 0; count--)
-                                             *p++ = digits[--ndigits];
-                                           if ((flags & FLAG_ALT) || ndigits > nzeroes)
-                                             {
-                                               *p++ = decimal_point_char ();
-                                               while (ndigits > nzeroes)
-                                                 {
-                                                   --ndigits;
-                                                   *p++ = digits[ndigits];
-                                                 }
-                                             }
-                                         }
-                                       else
-                                         {
-                                           size_t count = -exponent - 1;
-                                           *p++ = '0';
-                                           *p++ = decimal_point_char ();
-                                           for (; count > 0; count--)
-                                             *p++ = '0';
-                                           while (ndigits > nzeroes)
-                                             {
-                                               --ndigits;
-                                               *p++ = digits[ndigits];
-                                             }
-                                         }
-                                     }
-                                   else
-                                     {
-                                       /* Exponential notation.  */
-                                       *p++ = digits[--ndigits];
-                                       if ((flags & FLAG_ALT) || ndigits > nzeroes)
-                                         {
-                                           *p++ = decimal_point_char ();
-                                           while (ndigits > nzeroes)
-                                             {
-                                               --ndigits;
-                                               *p++ = digits[ndigits];
-                                             }
-                                         }
-                                       *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */
-#   if WIDE_CHAR_VERSION
-                                       {
-                                         static const wchar_t decimal_format[] =
-                                           /* Produce the same number of exponent digits
-                                              as the native printf implementation.  */
-#    if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-                                           { '%', '+', '.', '3', 'd', '\0' };
-#    else
-                                           { '%', '+', '.', '2', 'd', '\0' };
-#    endif
-                                         SNPRINTF (p, 6 + 1, decimal_format, exponent);
-                                       }
-                                       while (*p != '\0')
-                                         p++;
-#   else
-                                       {
-                                         static const char decimal_format[] =
-                                           /* Produce the same number of exponent digits
-                                              as the native printf implementation.  */
-#    if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-                                           "%+.3d";
-#    else
-                                           "%+.2d";
-#    endif
-                                         if (sizeof (DCHAR_T) == 1)
-                                           {
-                                             sprintf ((char *) p, decimal_format, exponent);
-                                             while (*p != '\0')
-                                               p++;
-                                           }
-                                         else
-                                           {
-                                             char expbuf[6 + 1];
-                                             const char *ep;
-                                             sprintf (expbuf, decimal_format, exponent);
-                                             for (ep = expbuf; (*p = *ep) != '\0'; ep++)
-                                               p++;
-                                           }
-                                       }
-#   endif
-                                     }
-
-                                   free (digits);
-                                 }
-                             }
-                           else
-                             abort ();
-#  else
-                           /* arg is finite.  */
-                           if (!(arg == 0.0))
-                             abort ();
-
-                           pad_ptr = p;
-
-                           if (dp->conversion == 'f' || dp->conversion == 'F')
-                             {
-                               *p++ = '0';
-                               if ((flags & FLAG_ALT) || precision > 0)
-                                 {
-                                   *p++ = decimal_point_char ();
-                                   for (; precision > 0; precision--)
-                                     *p++ = '0';
-                                 }
-                             }
-                           else if (dp->conversion == 'e' || dp->conversion == 'E')
-                             {
-                               *p++ = '0';
-                               if ((flags & FLAG_ALT) || precision > 0)
-                                 {
-                                   *p++ = decimal_point_char ();
-                                   for (; precision > 0; precision--)
-                                     *p++ = '0';
-                                 }
-                               *p++ = dp->conversion; /* 'e' or 'E' */
-                               *p++ = '+';
-                               /* Produce the same number of exponent digits as
-                                  the native printf implementation.  */
-#   if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-                               *p++ = '0';
-#   endif
-                               *p++ = '0';
-                               *p++ = '0';
-                             }
-                           else if (dp->conversion == 'g' || dp->conversion == 'G')
-                             {
-                               *p++ = '0';
-                               if (flags & FLAG_ALT)
-                                 {
-                                   size_t ndigits =
-                                     (precision > 0 ? precision - 1 : 0);
-                                   *p++ = decimal_point_char ();
-                                   for (; ndigits > 0; --ndigits)
-                                     *p++ = '0';
-                                 }
-                             }
-                           else
-                             abort ();
-#  endif
-                         }
-                     }
-                 }
-# endif
-
-               /* The generated string now extends from tmp to p, with the
-                  zero padding insertion point being at pad_ptr.  */
-               if (has_width && p - tmp < width)
-                 {
-                   size_t pad = width - (p - tmp);
-                   DCHAR_T *end = p + pad;
-
-                   if (flags & FLAG_LEFT)
-                     {
-                       /* Pad with spaces on the right.  */
-                       for (; pad > 0; pad--)
-                         *p++ = ' ';
-                     }
-                   else if ((flags & FLAG_ZERO) && pad_ptr != NULL)
-                     {
-                       /* Pad with zeroes.  */
-                       DCHAR_T *q = end;
-
-                       while (p > pad_ptr)
-                         *--q = *--p;
-                       for (; pad > 0; pad--)
-                         *p++ = '0';
-                     }
-                   else
-                     {
-                       /* Pad with spaces on the left.  */
-                       DCHAR_T *q = end;
-
-                       while (p > tmp)
-                         *--q = *--p;
-                       for (; pad > 0; pad--)
-                         *p++ = ' ';
-                     }
-
-                   p = end;
-                 }
-
-               {
-                 size_t count = p - tmp;
-
-                 if (count >= tmp_length)
-                   /* tmp_length was incorrectly calculated - fix the
-                      code above!  */
-                   abort ();
-
-                 /* Make room for the result.  */
-                 if (count >= allocated - length)
-                   {
-                     size_t n = xsum (length, count);
-
-                     ENSURE_ALLOCATION (n);
-                   }
-
-                 /* Append the result.  */
-                 memcpy (result + length, tmp, count * sizeof (DCHAR_T));
-                 if (tmp != tmpbuf)
-                   free (tmp);
-                 length += count;
-               }
-             }
-#endif
-           else
-             {
-               arg_type type = a.arg[dp->arg_index].type;
-               int flags = dp->flags;
-#if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
-               int has_width;
-               size_t width;
-#endif
-#if !USE_SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION
-               int has_precision;
-               size_t precision;
-#endif
-#if NEED_PRINTF_UNBOUNDED_PRECISION
-               int prec_ourselves;
-#else
-#              define prec_ourselves 0
-#endif
-#if NEED_PRINTF_FLAG_LEFTADJUST
-#              define pad_ourselves 1
-#elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
-               int pad_ourselves;
-#else
-#              define pad_ourselves 0
-#endif
-               TCHAR_T *fbp;
-               unsigned int prefix_count;
-               int prefixes[2] IF_LINT (= { 0 });
-#if !USE_SNPRINTF
-               size_t tmp_length;
-               TCHAR_T tmpbuf[700];
-               TCHAR_T *tmp;
-#endif
-
-#if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
-               has_width = 0;
-               width = 0;
-               if (dp->width_start != dp->width_end)
-                 {
-                   if (dp->width_arg_index != ARG_NONE)
-                     {
-                       int arg;
-
-                       if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
-                         abort ();
-                       arg = a.arg[dp->width_arg_index].a.a_int;
-                       if (arg < 0)
-                         {
-                           /* "A negative field width is taken as a '-' flag
-                               followed by a positive field width."  */
-                           flags |= FLAG_LEFT;
-                           width = (unsigned int) (-arg);
-                         }
-                       else
-                         width = arg;
-                     }
-                   else
-                     {
-                       const FCHAR_T *digitp = dp->width_start;
-
-                       do
-                         width = xsum (xtimes (width, 10), *digitp++ - '0');
-                       while (digitp != dp->width_end);
-                     }
-                   has_width = 1;
-                 }
-#endif
-
-#if !USE_SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION
-               has_precision = 0;
-               precision = 6;
-               if (dp->precision_start != dp->precision_end)
-                 {
-                   if (dp->precision_arg_index != ARG_NONE)
-                     {
-                       int arg;
-
-                       if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
-                         abort ();
-                       arg = a.arg[dp->precision_arg_index].a.a_int;
-                       /* "A negative precision is taken as if the precision
-                           were omitted."  */
-                       if (arg >= 0)
-                         {
-                           precision = arg;
-                           has_precision = 1;
-                         }
-                     }
-                   else
-                     {
-                       const FCHAR_T *digitp = dp->precision_start + 1;
-
-                       precision = 0;
-                       while (digitp != dp->precision_end)
-                         precision = xsum (xtimes (precision, 10), *digitp++ - '0');
-                       has_precision = 1;
-                     }
-                 }
-#endif
-
-               /* Decide whether to handle the precision ourselves.  */
-#if NEED_PRINTF_UNBOUNDED_PRECISION
-               switch (dp->conversion)
-                 {
-                 case 'd': case 'i': case 'u':
-                 case 'o':
-                 case 'x': case 'X': case 'p':
-                   prec_ourselves = has_precision && (precision > 0);
-                   break;
-                 default:
-                   prec_ourselves = 0;
-                   break;
-                 }
-#endif
-
-               /* Decide whether to perform the padding ourselves.  */
-#if !NEED_PRINTF_FLAG_LEFTADJUST && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION)
-               switch (dp->conversion)
-                 {
-# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO
-                 /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need
-                    to perform the padding after this conversion.  Functions
-                    with unistdio extensions perform the padding based on
-                    character count rather than element count.  */
-                 case 'c': case 's':
-# endif
-# if NEED_PRINTF_FLAG_ZERO
-                 case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
-                 case 'a': case 'A':
-# endif
-                   pad_ourselves = 1;
-                   break;
-                 default:
-                   pad_ourselves = prec_ourselves;
-                   break;
-                 }
-#endif
-
-#if !USE_SNPRINTF
-               /* Allocate a temporary buffer of sufficient size for calling
-                  sprintf.  */
-               {
-                 switch (dp->conversion)
-                   {
-
-                   case 'd': case 'i': case 'u':
-# if HAVE_LONG_LONG_INT
-                     if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
-                       tmp_length =
-                         (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
-                                         * 0.30103 /* binary -> decimal */
-                                        )
-                         + 1; /* turn floor into ceil */
-                     else
-# endif
-                     if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
-                       tmp_length =
-                         (unsigned int) (sizeof (unsigned long) * CHAR_BIT
-                                         * 0.30103 /* binary -> decimal */
-                                        )
-                         + 1; /* turn floor into ceil */
-                     else
-                       tmp_length =
-                         (unsigned int) (sizeof (unsigned int) * CHAR_BIT
-                                         * 0.30103 /* binary -> decimal */
-                                        )
-                         + 1; /* turn floor into ceil */
-                     if (tmp_length < precision)
-                       tmp_length = precision;
-                     /* Multiply by 2, as an estimate for FLAG_GROUP.  */
-                     tmp_length = xsum (tmp_length, tmp_length);
-                     /* Add 1, to account for a leading sign.  */
-                     tmp_length = xsum (tmp_length, 1);
-                     break;
-
-                   case 'o':
-# if HAVE_LONG_LONG_INT
-                     if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
-                       tmp_length =
-                         (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
-                                         * 0.333334 /* binary -> octal */
-                                        )
-                         + 1; /* turn floor into ceil */
-                     else
-# endif
-                     if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
-                       tmp_length =
-                         (unsigned int) (sizeof (unsigned long) * CHAR_BIT
-                                         * 0.333334 /* binary -> octal */
-                                        )
-                         + 1; /* turn floor into ceil */
-                     else
-                       tmp_length =
-                         (unsigned int) (sizeof (unsigned int) * CHAR_BIT
-                                         * 0.333334 /* binary -> octal */
-                                        )
-                         + 1; /* turn floor into ceil */
-                     if (tmp_length < precision)
-                       tmp_length = precision;
-                     /* Add 1, to account for a leading sign.  */
-                     tmp_length = xsum (tmp_length, 1);
-                     break;
-
-                   case 'x': case 'X':
-# if HAVE_LONG_LONG_INT
-                     if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
-                       tmp_length =
-                         (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
-                                         * 0.25 /* binary -> hexadecimal */
-                                        )
-                         + 1; /* turn floor into ceil */
-                     else
-# endif
-                     if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
-                       tmp_length =
-                         (unsigned int) (sizeof (unsigned long) * CHAR_BIT
-                                         * 0.25 /* binary -> hexadecimal */
-                                        )
-                         + 1; /* turn floor into ceil */
-                     else
-                       tmp_length =
-                         (unsigned int) (sizeof (unsigned int) * CHAR_BIT
-                                         * 0.25 /* binary -> hexadecimal */
-                                        )
-                         + 1; /* turn floor into ceil */
-                     if (tmp_length < precision)
-                       tmp_length = precision;
-                     /* Add 2, to account for a leading sign or alternate form.  */
-                     tmp_length = xsum (tmp_length, 2);
-                     break;
-
-                   case 'f': case 'F':
-                     if (type == TYPE_LONGDOUBLE)
-                       tmp_length =
-                         (unsigned int) (LDBL_MAX_EXP
-                                         * 0.30103 /* binary -> decimal */
-                                         * 2 /* estimate for FLAG_GROUP */
-                                        )
-                         + 1 /* turn floor into ceil */
-                         + 10; /* sign, decimal point etc. */
-                     else
-                       tmp_length =
-                         (unsigned int) (DBL_MAX_EXP
-                                         * 0.30103 /* binary -> decimal */
-                                         * 2 /* estimate for FLAG_GROUP */
-                                        )
-                         + 1 /* turn floor into ceil */
-                         + 10; /* sign, decimal point etc. */
-                     tmp_length = xsum (tmp_length, precision);
-                     break;
-
-                   case 'e': case 'E': case 'g': case 'G':
-                     tmp_length =
-                       12; /* sign, decimal point, exponent etc. */
-                     tmp_length = xsum (tmp_length, precision);
-                     break;
-
-                   case 'a': case 'A':
-                     if (type == TYPE_LONGDOUBLE)
-                       tmp_length =
-                         (unsigned int) (LDBL_DIG
-                                         * 0.831 /* decimal -> hexadecimal */
-                                        )
-                         + 1; /* turn floor into ceil */
-                     else
-                       tmp_length =
-                         (unsigned int) (DBL_DIG
-                                         * 0.831 /* decimal -> hexadecimal */
-                                        )
-                         + 1; /* turn floor into ceil */
-                     if (tmp_length < precision)
-                       tmp_length = precision;
-                     /* Account for sign, decimal point etc. */
-                     tmp_length = xsum (tmp_length, 12);
-                     break;
-
-                   case 'c':
-# if HAVE_WINT_T && !WIDE_CHAR_VERSION
-                     if (type == TYPE_WIDE_CHAR)
-                       tmp_length = MB_CUR_MAX;
-                     else
-# endif
-                       tmp_length = 1;
-                     break;
-
-                   case 's':
-# if HAVE_WCHAR_T
-                     if (type == TYPE_WIDE_STRING)
-                       {
-                         tmp_length =
-                           local_wcslen (a.arg[dp->arg_index].a.a_wide_string);
-
-#  if !WIDE_CHAR_VERSION
-                         tmp_length = xtimes (tmp_length, MB_CUR_MAX);
-#  endif
-                       }
-                     else
-# endif
-                       tmp_length = strlen (a.arg[dp->arg_index].a.a_string);
-                     break;
-
-                   case 'p':
-                     tmp_length =
-                       (unsigned int) (sizeof (void *) * CHAR_BIT
-                                       * 0.25 /* binary -> hexadecimal */
-                                      )
-                         + 1 /* turn floor into ceil */
-                         + 2; /* account for leading 0x */
-                     break;
-
-                   default:
-                     abort ();
-                   }
-
-                 if (!pad_ourselves)
-                   {
-# if ENABLE_UNISTDIO
-                     /* Padding considers the number of characters, therefore
-                        the number of elements after padding may be
-                          > max (tmp_length, width)
-                        but is certainly
-                          <= tmp_length + width.  */
-                     tmp_length = xsum (tmp_length, width);
-# else
-                     /* Padding considers the number of elements,
-                        says POSIX.  */
-                     if (tmp_length < width)
-                       tmp_length = width;
-# endif
-                   }
-
-                 tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
-               }
-
-               if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T))
-                 tmp = tmpbuf;
-               else
-                 {
-                   size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T));
-
-                   if (size_overflow_p (tmp_memsize))
-                     /* Overflow, would lead to out of memory.  */
-                     goto out_of_memory;
-                   tmp = (TCHAR_T *) malloc (tmp_memsize);
-                   if (tmp == NULL)
-                     /* Out of memory.  */
-                     goto out_of_memory;
-                 }
-#endif
-
-               /* Construct the format string for calling snprintf or
-                  sprintf.  */
-               fbp = buf;
-               *fbp++ = '%';
-#if NEED_PRINTF_FLAG_GROUPING
-               /* The underlying implementation doesn't support the ' flag.
-                  Produce no grouping characters in this case; this is
-                  acceptable because the grouping is locale dependent.  */
-#else
-               if (flags & FLAG_GROUP)
-                 *fbp++ = '\'';
-#endif
-               if (flags & FLAG_LEFT)
-                 *fbp++ = '-';
-               if (flags & FLAG_SHOWSIGN)
-                 *fbp++ = '+';
-               if (flags & FLAG_SPACE)
-                 *fbp++ = ' ';
-               if (flags & FLAG_ALT)
-                 *fbp++ = '#';
-               if (!pad_ourselves)
-                 {
-                   if (flags & FLAG_ZERO)
-                     *fbp++ = '0';
-                   if (dp->width_start != dp->width_end)
-                     {
-                       size_t n = dp->width_end - dp->width_start;
-                       /* The width specification is known to consist only
-                          of standard ASCII characters.  */
-                       if (sizeof (FCHAR_T) == sizeof (TCHAR_T))
-                         {
-                           memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T));
-                           fbp += n;
-                         }
-                       else
-                         {
-                           const FCHAR_T *mp = dp->width_start;
-                           do
-                             *fbp++ = (unsigned char) *mp++;
-                           while (--n > 0);
-                         }
-                     }
-                 }
-               if (!prec_ourselves)
-                 {
-                   if (dp->precision_start != dp->precision_end)
-                     {
-                       size_t n = dp->precision_end - dp->precision_start;
-                       /* The precision specification is known to consist only
-                          of standard ASCII characters.  */
-                       if (sizeof (FCHAR_T) == sizeof (TCHAR_T))
-                         {
-                           memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T));
-                           fbp += n;
-                         }
-                       else
-                         {
-                           const FCHAR_T *mp = dp->precision_start;
-                           do
-                             *fbp++ = (unsigned char) *mp++;
-                           while (--n > 0);
-                         }
-                     }
-                 }
-
-               switch (type)
-                 {
-#if HAVE_LONG_LONG_INT
-                 case TYPE_LONGLONGINT:
-                 case TYPE_ULONGLONGINT:
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-                   *fbp++ = 'I';
-                   *fbp++ = '6';
-                   *fbp++ = '4';
-                   break;
-# else
-                   *fbp++ = 'l';
-                   /*FALLTHROUGH*/
-# endif
-#endif
-                 case TYPE_LONGINT:
-                 case TYPE_ULONGINT:
-#if HAVE_WINT_T
-                 case TYPE_WIDE_CHAR:
-#endif
-#if HAVE_WCHAR_T
-                 case TYPE_WIDE_STRING:
-#endif
-                   *fbp++ = 'l';
-                   break;
-                 case TYPE_LONGDOUBLE:
-                   *fbp++ = 'L';
-                   break;
-                 default:
-                   break;
-                 }
-#if NEED_PRINTF_DIRECTIVE_F
-               if (dp->conversion == 'F')
-                 *fbp = 'f';
-               else
-#endif
-                 *fbp = dp->conversion;
-#if USE_SNPRINTF
-# if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
-               fbp[1] = '%';
-               fbp[2] = 'n';
-               fbp[3] = '\0';
-# else
-               /* On glibc2 systems from glibc >= 2.3 - probably also older
-                  ones - we know that snprintf's returns value conforms to
-                  ISO C 99: the gl_SNPRINTF_DIRECTIVE_N test passes.
-                  Therefore we can avoid using %n in this situation.
-                  On glibc2 systems from 2004-10-18 or newer, the use of %n
-                  in format strings in writable memory may crash the program
-                  (if compiled with _FORTIFY_SOURCE=2), so we should avoid it
-                  in this situation.  */
-               /* On native Win32 systems (such as mingw), we can avoid using
-                  %n because:
-                    - Although the gl_SNPRINTF_TRUNCATION_C99 test fails,
-                      snprintf does not write more than the specified number
-                      of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes
-                      '4', '5', '6' into buf, not '4', '5', '\0'.)
-                    - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf
-                      allows us to recognize the case of an insufficient
-                      buffer size: it returns -1 in this case.
-                  On native Win32 systems (such as mingw) where the OS is
-                  Windows Vista, the use of %n in format strings by default
-                  crashes the program. See
-                    <http://gcc.gnu.org/ml/gcc/2007-06/msg00122.html> and
-                    <http://msdn2.microsoft.com/en-us/library/ms175782(VS.80).aspx>
-                  So we should avoid %n in this situation.  */
-               fbp[1] = '\0';
-# endif
-#else
-               fbp[1] = '\0';
-#endif
-
-               /* Construct the arguments for calling snprintf or sprintf.  */
-               prefix_count = 0;
-               if (!pad_ourselves && dp->width_arg_index != ARG_NONE)
-                 {
-                   if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
-                     abort ();
-                   prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int;
-                 }
-               if (!prec_ourselves && dp->precision_arg_index != ARG_NONE)
-                 {
-                   if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
-                     abort ();
-                   prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int;
-                 }
-
-#if USE_SNPRINTF
-               /* The SNPRINTF result is appended after result[0..length].
-                  The latter is an array of DCHAR_T; SNPRINTF appends an
-                  array of TCHAR_T to it.  This is possible because
-                  sizeof (TCHAR_T) divides sizeof (DCHAR_T) and
-                  alignof (TCHAR_T) <= alignof (DCHAR_T).  */
-# define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T))
-               /* Ensure that maxlen below will be >= 2.  Needed on BeOS,
-                  where an snprintf() with maxlen==1 acts like sprintf().  */
-               ENSURE_ALLOCATION (xsum (length,
-                                        (2 + TCHARS_PER_DCHAR - 1)
-                                        / TCHARS_PER_DCHAR));
-               /* Prepare checking whether snprintf returns the count
-                  via %n.  */
-               *(TCHAR_T *) (result + length) = '\0';
-#endif
-
-               for (;;)
-                 {
-                   int count = -1;
-
-#if USE_SNPRINTF
-                   int retcount = 0;
-                   size_t maxlen = allocated - length;
-                   /* SNPRINTF can fail if its second argument is
-                      > INT_MAX.  */
-                   if (maxlen > INT_MAX / TCHARS_PER_DCHAR)
-                     maxlen = INT_MAX / TCHARS_PER_DCHAR;
-                   maxlen = maxlen * TCHARS_PER_DCHAR;
-# define SNPRINTF_BUF(arg) \
-                   switch (prefix_count)                                   \
-                     {                                                     \
-                     case 0:                                               \
-                       retcount = SNPRINTF ((TCHAR_T *) (result + length), \
-                                            maxlen, buf,                   \
-                                            arg, &count);                  \
-                       break;                                              \
-                     case 1:                                               \
-                       retcount = SNPRINTF ((TCHAR_T *) (result + length), \
-                                            maxlen, buf,                   \
-                                            prefixes[0], arg, &count);     \
-                       break;                                              \
-                     case 2:                                               \
-                       retcount = SNPRINTF ((TCHAR_T *) (result + length), \
-                                            maxlen, buf,                   \
-                                            prefixes[0], prefixes[1], arg, \
-                                            &count);                       \
-                       break;                                              \
-                     default:                                              \
-                       abort ();                                           \
-                     }
-#else
-# define SNPRINTF_BUF(arg) \
-                   switch (prefix_count)                                   \
-                     {                                                     \
-                     case 0:                                               \
-                       count = sprintf (tmp, buf, arg);                    \
-                       break;                                              \
-                     case 1:                                               \
-                       count = sprintf (tmp, buf, prefixes[0], arg);       \
-                       break;                                              \
-                     case 2:                                               \
-                       count = sprintf (tmp, buf, prefixes[0], prefixes[1],\
-                                        arg);                              \
-                       break;                                              \
-                     default:                                              \
-                       abort ();                                           \
-                     }
-#endif
-
-                   switch (type)
-                     {
-                     case TYPE_SCHAR:
-                       {
-                         int arg = a.arg[dp->arg_index].a.a_schar;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     case TYPE_UCHAR:
-                       {
-                         unsigned int arg = a.arg[dp->arg_index].a.a_uchar;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     case TYPE_SHORT:
-                       {
-                         int arg = a.arg[dp->arg_index].a.a_short;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     case TYPE_USHORT:
-                       {
-                         unsigned int arg = a.arg[dp->arg_index].a.a_ushort;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     case TYPE_INT:
-                       {
-                         int arg = a.arg[dp->arg_index].a.a_int;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     case TYPE_UINT:
-                       {
-                         unsigned int arg = a.arg[dp->arg_index].a.a_uint;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     case TYPE_LONGINT:
-                       {
-                         long int arg = a.arg[dp->arg_index].a.a_longint;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     case TYPE_ULONGINT:
-                       {
-                         unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-#if HAVE_LONG_LONG_INT
-                     case TYPE_LONGLONGINT:
-                       {
-                         long long int arg = a.arg[dp->arg_index].a.a_longlongint;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     case TYPE_ULONGLONGINT:
-                       {
-                         unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-#endif
-                     case TYPE_DOUBLE:
-                       {
-                         double arg = a.arg[dp->arg_index].a.a_double;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     case TYPE_LONGDOUBLE:
-                       {
-                         long double arg = a.arg[dp->arg_index].a.a_longdouble;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     case TYPE_CHAR:
-                       {
-                         int arg = a.arg[dp->arg_index].a.a_char;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-#if HAVE_WINT_T
-                     case TYPE_WIDE_CHAR:
-                       {
-                         wint_t arg = a.arg[dp->arg_index].a.a_wide_char;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-#endif
-                     case TYPE_STRING:
-                       {
-                         const char *arg = a.arg[dp->arg_index].a.a_string;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-#if HAVE_WCHAR_T
-                     case TYPE_WIDE_STRING:
-                       {
-                         const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-#endif
-                     case TYPE_POINTER:
-                       {
-                         void *arg = a.arg[dp->arg_index].a.a_pointer;
-                         SNPRINTF_BUF (arg);
-                       }
-                       break;
-                     default:
-                       abort ();
-                     }
-
-#if USE_SNPRINTF
-                   /* Portability: Not all implementations of snprintf()
-                      are ISO C 99 compliant.  Determine the number of
-                      bytes that snprintf() has produced or would have
-                      produced.  */
-                   if (count >= 0)
-                     {
-                       /* Verify that snprintf() has NUL-terminated its
-                          result.  */
-                       if (count < maxlen
-                           && ((TCHAR_T *) (result + length)) [count] != '\0')
-                         abort ();
-                       /* Portability hack.  */
-                       if (retcount > count)
-                         count = retcount;
-                     }
-                   else
-                     {
-                       /* snprintf() doesn't understand the '%n'
-                          directive.  */
-                       if (fbp[1] != '\0')
-                         {
-                           /* Don't use the '%n' directive; instead, look
-                              at the snprintf() return value.  */
-                           fbp[1] = '\0';
-                           continue;
-                         }
-                       else
-                         {
-                           /* Look at the snprintf() return value.  */
-                           if (retcount < 0)
-                             {
-                               /* HP-UX 10.20 snprintf() is doubly deficient:
-                                  It doesn't understand the '%n' directive,
-                                  *and* it returns -1 (rather than the length
-                                  that would have been required) when the
-                                  buffer is too small.  */
-                               size_t bigger_need =
-                                 xsum (xtimes (allocated, 2), 12);
-                               ENSURE_ALLOCATION (bigger_need);
-                               continue;
-                             }
-                           else
-                             count = retcount;
-                         }
-                     }
-#endif
-
-                   /* Attempt to handle failure.  */
-                   if (count < 0)
-                     {
-                       if (!(result == resultbuf || result == NULL))
-                         free (result);
-                       if (buf_malloced != NULL)
-                         free (buf_malloced);
-                       CLEANUP ();
-                       errno = EINVAL;
-                       return NULL;
-                     }
-
-#if USE_SNPRINTF
-                   /* Handle overflow of the allocated buffer.
-                      If such an overflow occurs, a C99 compliant snprintf()
-                      returns a count >= maxlen.  However, a non-compliant
-                      snprintf() function returns only count = maxlen - 1.  To
-                      cover both cases, test whether count >= maxlen - 1.  */
-                   if ((unsigned int) count + 1 >= maxlen)
-                     {
-                       /* If maxlen already has attained its allowed maximum,
-                          allocating more memory will not increase maxlen.
-                          Instead of looping, bail out.  */
-                       if (maxlen == INT_MAX / TCHARS_PER_DCHAR)
-                         goto overflow;
-                       else
-                         {
-                           /* Need at least (count + 1) * sizeof (TCHAR_T)
-                              bytes.  (The +1 is for the trailing NUL.)
-                              But ask for (count + 2) * sizeof (TCHAR_T)
-                              bytes, so that in the next round, we likely get
-                                maxlen > (unsigned int) count + 1
-                              and so we don't get here again.
-                              And allocate proportionally, to avoid looping
-                              eternally if snprintf() reports a too small
-                              count.  */
-                           size_t n =
-                             xmax (xsum (length,
-                                         ((unsigned int) count + 2
-                                          + TCHARS_PER_DCHAR - 1)
-                                         / TCHARS_PER_DCHAR),
-                                   xtimes (allocated, 2));
-
-                           ENSURE_ALLOCATION (n);
-                           continue;
-                         }
-                     }
-#endif
-
-#if NEED_PRINTF_UNBOUNDED_PRECISION
-                   if (prec_ourselves)
-                     {
-                       /* Handle the precision.  */
-                       TCHAR_T *prec_ptr =
-# if USE_SNPRINTF
-                         (TCHAR_T *) (result + length);
-# else
-                         tmp;
-# endif
-                       size_t prefix_count;
-                       size_t move;
-
-                       prefix_count = 0;
-                       /* Put the additional zeroes after the sign.  */
-                       if (count >= 1
-                           && (*prec_ptr == '-' || *prec_ptr == '+'
-                               || *prec_ptr == ' '))
-                         prefix_count = 1;
-                       /* Put the additional zeroes after the 0x prefix if
-                          (flags & FLAG_ALT) || (dp->conversion == 'p').  */
-                       else if (count >= 2
-                                && prec_ptr[0] == '0'
-                                && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X'))
-                         prefix_count = 2;
-
-                       move = count - prefix_count;
-                       if (precision > move)
-                         {
-                           /* Insert zeroes.  */
-                           size_t insert = precision - move;
-                           TCHAR_T *prec_end;
-
-# if USE_SNPRINTF
-                           size_t n =
-                             xsum (length,
-                                   (count + insert + TCHARS_PER_DCHAR - 1)
-                                   / TCHARS_PER_DCHAR);
-                           length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR;
-                           ENSURE_ALLOCATION (n);
-                           length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR;
-                           prec_ptr = (TCHAR_T *) (result + length);
-# endif
-
-                           prec_end = prec_ptr + count;
-                           prec_ptr += prefix_count;
-
-                           while (prec_end > prec_ptr)
-                             {
-                               prec_end--;
-                               prec_end[insert] = prec_end[0];
-                             }
-
-                           prec_end += insert;
-                           do
-                             *--prec_end = '0';
-                           while (prec_end > prec_ptr);
-
-                           count += insert;
-                         }
-                     }
-#endif
-
-#if !USE_SNPRINTF
-                   if (count >= tmp_length)
-                     /* tmp_length was incorrectly calculated - fix the
-                        code above!  */
-                     abort ();
-#endif
-
-#if !DCHAR_IS_TCHAR
-                   /* Convert from TCHAR_T[] to DCHAR_T[].  */
-                   if (dp->conversion == 'c' || dp->conversion == 's')
-                     {
-                       /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING
-                          TYPE_WIDE_STRING.
-                          The result string is not certainly ASCII.  */
-                       const TCHAR_T *tmpsrc;
-                       DCHAR_T *tmpdst;
-                       size_t tmpdst_len;
-                       /* This code assumes that TCHAR_T is 'char'.  */
-                       typedef int TCHAR_T_verify
-                                   [2 * (sizeof (TCHAR_T) == 1) - 1];
-# if USE_SNPRINTF
-                       tmpsrc = (TCHAR_T *) (result + length);
-# else
-                       tmpsrc = tmp;
-# endif
-                       tmpdst = NULL;
-                       tmpdst_len = 0;
-                       if (DCHAR_CONV_FROM_ENCODING (locale_charset (),
-                                                     iconveh_question_mark,
-                                                     tmpsrc, count,
-                                                     NULL,
-                                                     &tmpdst, &tmpdst_len)
-                           < 0)
-                         {
-                           int saved_errno = errno;
-                           if (!(result == resultbuf || result == NULL))
-                             free (result);
-                           if (buf_malloced != NULL)
-                             free (buf_malloced);
-                           CLEANUP ();
-                           errno = saved_errno;
-                           return NULL;
-                         }
-                       ENSURE_ALLOCATION (xsum (length, tmpdst_len));
-                       DCHAR_CPY (result + length, tmpdst, tmpdst_len);
-                       free (tmpdst);
-                       count = tmpdst_len;
-                     }
-                   else
-                     {
-                       /* The result string is ASCII.
-                          Simple 1:1 conversion.  */
-# if USE_SNPRINTF
-                       /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a
-                          no-op conversion, in-place on the array starting
-                          at (result + length).  */
-                       if (sizeof (DCHAR_T) != sizeof (TCHAR_T))
-# endif
-                         {
-                           const TCHAR_T *tmpsrc;
-                           DCHAR_T *tmpdst;
-                           size_t n;
-
-# if USE_SNPRINTF
-                           if (result == resultbuf)
-                             {
-                               tmpsrc = (TCHAR_T *) (result + length);
-                               /* ENSURE_ALLOCATION will not move tmpsrc
-                                  (because it's part of resultbuf).  */
-                               ENSURE_ALLOCATION (xsum (length, count));
-                             }
-                           else
-                             {
-                               /* ENSURE_ALLOCATION will move the array
-                                  (because it uses realloc().  */
-                               ENSURE_ALLOCATION (xsum (length, count));
-                               tmpsrc = (TCHAR_T *) (result + length);
-                             }
-# else
-                           tmpsrc = tmp;
-                           ENSURE_ALLOCATION (xsum (length, count));
-# endif
-                           tmpdst = result + length;
-                           /* Copy backwards, because of overlapping.  */
-                           tmpsrc += count;
-                           tmpdst += count;
-                           for (n = count; n > 0; n--)
-                             *--tmpdst = (unsigned char) *--tmpsrc;
-                         }
-                     }
-#endif
-
-#if DCHAR_IS_TCHAR && !USE_SNPRINTF
-                   /* Make room for the result.  */
-                   if (count > allocated - length)
-                     {
-                       /* Need at least count elements.  But allocate
-                          proportionally.  */
-                       size_t n =
-                         xmax (xsum (length, count), xtimes (allocated, 2));
-
-                       ENSURE_ALLOCATION (n);
-                     }
-#endif
-
-                   /* Here count <= allocated - length.  */
-
-                   /* Perform padding.  */
-#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
-                   if (pad_ourselves && has_width)
-                     {
-                       size_t w;
-# if ENABLE_UNISTDIO
-                       /* Outside POSIX, it's preferrable to compare the width
-                          against the number of _characters_ of the converted
-                          value.  */
-                       w = DCHAR_MBSNLEN (result + length, count);
-# else
-                       /* The width is compared against the number of _bytes_
-                          of the converted value, says POSIX.  */
-                       w = count;
-# endif
-                       if (w < width)
-                         {
-                           size_t pad = width - w;
-
-                           /* Make room for the result.  */
-                           if (xsum (count, pad) > allocated - length)
-                             {
-                               /* Need at least count + pad elements.  But
-                                  allocate proportionally.  */
-                               size_t n =
-                                 xmax (xsum3 (length, count, pad),
-                                       xtimes (allocated, 2));
-
-# if USE_SNPRINTF
-                               length += count;
-                               ENSURE_ALLOCATION (n);
-                               length -= count;
-# else
-                               ENSURE_ALLOCATION (n);
-# endif
-                             }
-                           /* Here count + pad <= allocated - length.  */
-
-                           {
-# if !DCHAR_IS_TCHAR || USE_SNPRINTF
-                             DCHAR_T * const rp = result + length;
-# else
-                             DCHAR_T * const rp = tmp;
-# endif
-                             DCHAR_T *p = rp + count;
-                             DCHAR_T *end = p + pad;
-                             DCHAR_T *pad_ptr;
-# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO
-                             if (dp->conversion == 'c'
-                                 || dp->conversion == 's')
-                               /* No zero-padding for string directives.  */
-                               pad_ptr = NULL;
-                             else
-# endif
-                               {
-                                 pad_ptr = (*rp == '-' ? rp + 1 : rp);
-                                 /* No zero-padding of "inf" and "nan".  */
-                                 if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z')
-                                     || (*pad_ptr >= 'a' && *pad_ptr <= 'z'))
-                                   pad_ptr = NULL;
-                               }
-                             /* The generated string now extends from rp to p,
-                                with the zero padding insertion point being at
-                                pad_ptr.  */
-
-                             count = count + pad; /* = end - rp */
-
-                             if (flags & FLAG_LEFT)
-                               {
-                                 /* Pad with spaces on the right.  */
-                                 for (; pad > 0; pad--)
-                                   *p++ = ' ';
-                               }
-                             else if ((flags & FLAG_ZERO) && pad_ptr != NULL)
-                               {
-                                 /* Pad with zeroes.  */
-                                 DCHAR_T *q = end;
-
-                                 while (p > pad_ptr)
-                                   *--q = *--p;
-                                 for (; pad > 0; pad--)
-                                   *p++ = '0';
-                               }
-                             else
-                               {
-                                 /* Pad with spaces on the left.  */
-                                 DCHAR_T *q = end;
-
-                                 while (p > rp)
-                                   *--q = *--p;
-                                 for (; pad > 0; pad--)
-                                   *p++ = ' ';
-                               }
-                           }
-                         }
-                     }
-#endif
-
-                   /* Here still count <= allocated - length.  */
-
-#if !DCHAR_IS_TCHAR || USE_SNPRINTF
-                   /* The snprintf() result did fit.  */
-#else
-                   /* Append the sprintf() result.  */
-                   memcpy (result + length, tmp, count * sizeof (DCHAR_T));
-#endif
-#if !USE_SNPRINTF
-                   if (tmp != tmpbuf)
-                     free (tmp);
-#endif
-
-#if NEED_PRINTF_DIRECTIVE_F
-                   if (dp->conversion == 'F')
-                     {
-                       /* Convert the %f result to upper case for %F.  */
-                       DCHAR_T *rp = result + length;
-                       size_t rc;
-                       for (rc = count; rc > 0; rc--, rp++)
-                         if (*rp >= 'a' && *rp <= 'z')
-                           *rp = *rp - 'a' + 'A';
-                     }
-#endif
-
-                   length += count;
-                   break;
-                 }
-             }
-         }
-      }
-
-    /* Add the final NUL.  */
-    ENSURE_ALLOCATION (xsum (length, 1));
-    result[length] = '\0';
-
-    if (result != resultbuf && length + 1 < allocated)
-      {
-       /* Shrink the allocated memory if possible.  */
-       DCHAR_T *memory;
-
-       memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T));
-       if (memory != NULL)
-         result = memory;
-      }
-
-    if (buf_malloced != NULL)
-      free (buf_malloced);
-    CLEANUP ();
-    *lengthp = length;
-    /* Note that we can produce a big string of a length > INT_MAX.  POSIX
-       says that snprintf() fails with errno = EOVERFLOW in this case, but
-       that's only because snprintf() returns an 'int'.  This function does
-       not have this limitation.  */
-    return result;
-
-#if USE_SNPRINTF
-  overflow:
-    if (!(result == resultbuf || result == NULL))
-      free (result);
-    if (buf_malloced != NULL)
-      free (buf_malloced);
-    CLEANUP ();
-    errno = EOVERFLOW;
-    return NULL;
-#endif
-
-  out_of_memory:
-    if (!(result == resultbuf || result == NULL))
-      free (result);
-    if (buf_malloced != NULL)
-      free (buf_malloced);
-  out_of_memory_1:
-    CLEANUP ();
-    errno = ENOMEM;
-    return NULL;
-  }
-}
-
-#undef TCHARS_PER_DCHAR
-#undef SNPRINTF
-#undef USE_SNPRINTF
-#undef DCHAR_CPY
-#undef PRINTF_PARSE
-#undef DIRECTIVES
-#undef DIRECTIVE
-#undef DCHAR_IS_TCHAR
-#undef TCHAR_T
-#undef DCHAR_T
-#undef FCHAR_T
-#undef VASNPRINTF
diff --git a/lib/vasnprintf.h b/lib/vasnprintf.h
deleted file mode 100644 (file)
index e4c11ff..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* vsprintf with automatic memory allocation.
-   Copyright (C) 2002-2004, 2007-2008 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _VASNPRINTF_H
-#define _VASNPRINTF_H
-
-/* Get va_list.  */
-#include <stdarg.h>
-
-/* Get size_t.  */
-#include <stddef.h>
-
-#ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
-#  define __attribute__(Spec) /* empty */
-# endif
-/* The __-protected variants of `format' and `printf' attributes
-   are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-#  define __format__ format
-#  define __printf__ printf
-# endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Write formatted output to a string dynamically allocated with malloc().
-   You can pass a preallocated buffer for the result in RESULTBUF and its
-   size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
-   If successful, return the address of the string (this may be = RESULTBUF
-   if no dynamic memory allocation was necessary) and set *LENGTHP to the
-   number of resulting bytes, excluding the trailing NUL.  Upon error, set
-   errno and return NULL.
-
-   When dynamic memory allocation occurs, the preallocated buffer is left
-   alone (with possibly modified contents).  This makes it possible to use
-   a statically allocated or stack-allocated buffer, like this:
-
-          char buf[100];
-          size_t len = sizeof (buf);
-          char *output = vasnprintf (buf, &len, format, args);
-          if (output == NULL)
-            ... error handling ...;
-          else
-            {
-              ... use the output string ...;
-              if (output != buf)
-                free (output);
-            }
-  */
-#if REPLACE_VASNPRINTF
-# define asnprintf rpl_asnprintf
-# define vasnprintf rpl_vasnprintf
-#endif
-extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
-       __attribute__ ((__format__ (__printf__, 3, 4)));
-extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
-       __attribute__ ((__format__ (__printf__, 3, 0)));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _VASNPRINTF_H */
diff --git a/lib/verify.h b/lib/verify.h
deleted file mode 100644 (file)
index fac53f6..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/* Compile-time assert-like macros.
-
-   Copyright (C) 2005, 2006 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 VERIFY_H
-# define VERIFY_H 1
-
-/* Each of these macros verifies that its argument R is nonzero.  To
-   be portable, R should be an integer constant expression.  Unlike
-   assert (R), there is no run-time overhead.
-
-   There are two macros, since no single macro can be used in all
-   contexts in C.  verify_true (R) is for scalar contexts, including
-   integer constant expression contexts.  verify (R) is for declaration
-   contexts, e.g., the top level.
-
-   Symbols ending in "__" are private to this header.
-
-   The code below uses several ideas.
-
-   * The first step is ((R) ? 1 : -1).  Given an expression R, of
-     integral or boolean or floating-point type, this yields an
-     expression of integral type, whose value is later verified to be
-     constant and nonnegative.
-
-   * Next this expression W is wrapped in a type
-     struct verify_type__ { unsigned int verify_error_if_negative_size__: W; }.
-     If W is negative, this yields a compile-time error.  No compiler can
-     deal with a bit-field of negative size.
-
-     One might think that an array size check would have the same
-     effect, that is, that the type struct { unsigned int dummy[W]; }
-     would work as well.  However, inside a function, some compilers
-     (such as C++ compilers and GNU C) allow local parameters and
-     variables inside array size expressions.  With these compilers,
-     an array size check would not properly diagnose this misuse of
-     the verify macro:
-
-       void function (int n) { verify (n < 0); }
-
-   * For the verify macro, the struct verify_type__ will need to
-     somehow be embedded into a declaration.  To be portable, this
-     declaration must declare an object, a constant, a function, or a
-     typedef name.  If the declared entity uses the type directly,
-     such as in
-
-       struct dummy {...};
-       typedef struct {...} dummy;
-       extern struct {...} *dummy;
-       extern void dummy (struct {...} *);
-       extern struct {...} *dummy (void);
-
-     two uses of the verify macro would yield colliding declarations
-     if the entity names are not disambiguated.  A workaround is to
-     attach the current line number to the entity name:
-
-       #define GL_CONCAT0(x, y) x##y
-       #define GL_CONCAT(x, y) GL_CONCAT0 (x, y)
-       extern struct {...} * GL_CONCAT(dummy,__LINE__);
-
-     But this has the problem that two invocations of verify from
-     within the same macro would collide, since the __LINE__ value
-     would be the same for both invocations.
-
-     A solution is to use the sizeof operator.  It yields a number,
-     getting rid of the identity of the type.  Declarations like
-
-       extern int dummy [sizeof (struct {...})];
-       extern void dummy (int [sizeof (struct {...})]);
-       extern int (*dummy (void)) [sizeof (struct {...})];
-
-     can be repeated.
-
-   * Should the implementation use a named struct or an unnamed struct?
-     Which of the following alternatives can be used?
-
-       extern int dummy [sizeof (struct {...})];
-       extern int dummy [sizeof (struct verify_type__ {...})];
-       extern void dummy (int [sizeof (struct {...})]);
-       extern void dummy (int [sizeof (struct verify_type__ {...})]);
-       extern int (*dummy (void)) [sizeof (struct {...})];
-       extern int (*dummy (void)) [sizeof (struct verify_type__ {...})];
-
-     In the second and sixth case, the struct type is exported to the
-     outer scope; two such declarations therefore collide.  GCC warns
-     about the first, third, and fourth cases.  So the only remaining
-     possibility is the fifth case:
-
-       extern int (*dummy (void)) [sizeof (struct {...})];
-
-   * This implementation exploits the fact that GCC does not warn about
-     the last declaration mentioned above.  If a future version of GCC
-     introduces a warning for this, the problem could be worked around
-     by using code specialized to GCC, e.g.,:
-
-       #if 4 <= __GNUC__
-       # define verify(R) \
-          extern int (* verify_function__ (void)) \
-                     [__builtin_constant_p (R) && (R) ? 1 : -1]
-       #endif
-
-   * In C++, any struct definition inside sizeof is invalid.
-     Use a template type to work around the problem.  */
-
-
-/* Verify requirement R at compile-time, as an integer constant expression.
-   Return 1.  */
-
-# ifdef __cplusplus
-template <int w>
-  struct verify_type__ { unsigned int verify_error_if_negative_size__: w; };
-#  define verify_true(R) \
-     (!!sizeof (verify_type__<(R) ? 1 : -1>))
-# else
-#  define verify_true(R) \
-     (!!sizeof \
-      (struct { unsigned int verify_error_if_negative_size__: (R) ? 1 : -1; }))
-# endif
-
-/* Verify requirement R at compile-time, as a declaration without a
-   trailing ';'.  */
-
-# define verify(R) extern int (* verify_function__ (void)) [verify_true (R)]
-
-#endif
diff --git a/lib/version-etc-fsf.c b/lib/version-etc-fsf.c
deleted file mode 100644 (file)
index 4c0d174..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Variable with FSF copyright information, for version-etc.
-   Copyright (C) 1999-2006 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. */
-
-#include <config.h>
-
-/* Specification.  */
-#include "version-etc.h"
-
-/* Default copyright goes to the FSF. */
-
-const char version_etc_copyright[] =
-  /* Do *not* mark this string for translation.  %s is a copyright
-     symbol suitable for this locale, and %d is the copyright
-     year.  */
-  "Copyright %s %d Free Software Foundation, Inc.";
diff --git a/lib/version-etc.c b/lib/version-etc.c
deleted file mode 100644 (file)
index 2258c2e..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-/* Print --version and bug-reporting information in a consistent format.
-   Copyright (C) 1999-2009 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. */
-
-#include <config.h>
-
-/* Specification.  */
-#include "version-etc.h"
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#if USE_UNLOCKED_IO
-# include "unlocked-io.h"
-#endif
-
-#include "gettext.h"
-#define _(msgid) gettext (msgid)
-
-enum { COPYRIGHT_YEAR = 2009 };
-
-/* Like version_etc, below, but with the NULL-terminated author list
-   provided via a variable of type va_list.  */
-void
-version_etc_va (FILE *stream,
-               const char *command_name, const char *package,
-               const char *version, va_list authors)
-{
-  size_t n_authors;
-
-  /* Count the number of authors.  */
-  {
-    va_list tmp_authors;
-
-    va_copy (tmp_authors, authors);
-
-    n_authors = 0;
-    while (va_arg (tmp_authors, const char *) != NULL)
-      ++n_authors;
-  }
-
-  if (command_name)
-    fprintf (stream, "%s (%s) %s\n", command_name, package, version);
-  else
-    fprintf (stream, "%s %s\n", package, version);
-
-  /* TRANSLATORS: Translate "(C)" to the copyright symbol
-     (C-in-a-circle), if this symbol is available in the user's
-     locale.  Otherwise, do not translate "(C)"; leave it as-is.  */
-  fprintf (stream, version_etc_copyright, _("(C)"), COPYRIGHT_YEAR);
-
-  fputs (_("\
-\n\
-License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n\
-This is free software: you are free to change and redistribute it.\n\
-There is NO WARRANTY, to the extent permitted by law.\n\
-\n\
-"),
-        stream);
-
-  switch (n_authors)
-    {
-    case 0:
-      /* The caller must provide at least one author name.  */
-      abort ();
-    case 1:
-      /* TRANSLATORS: %s denotes an author name.  */
-      vfprintf (stream, _("Written by %s.\n"), authors);
-      break;
-    case 2:
-      /* TRANSLATORS: Each %s denotes an author name.  */
-      vfprintf (stream, _("Written by %s and %s.\n"), authors);
-      break;
-    case 3:
-      /* TRANSLATORS: Each %s denotes an author name.  */
-      vfprintf (stream, _("Written by %s, %s, and %s.\n"), authors);
-      break;
-    case 4:
-      /* TRANSLATORS: Each %s denotes an author name.
-        You can use line breaks, estimating that each author name occupies
-        ca. 16 screen columns and that a screen line has ca. 80 columns.  */
-      vfprintf (stream, _("Written by %s, %s, %s,\nand %s.\n"), authors);
-      break;
-    case 5:
-      /* TRANSLATORS: Each %s denotes an author name.
-        You can use line breaks, estimating that each author name occupies
-        ca. 16 screen columns and that a screen line has ca. 80 columns.  */
-      vfprintf (stream, _("Written by %s, %s, %s,\n%s, and %s.\n"), authors);
-      break;
-    case 6:
-      /* TRANSLATORS: Each %s denotes an author name.
-        You can use line breaks, estimating that each author name occupies
-        ca. 16 screen columns and that a screen line has ca. 80 columns.  */
-      vfprintf (stream, _("Written by %s, %s, %s,\n%s, %s, and %s.\n"),
-               authors);
-      break;
-    case 7:
-      /* TRANSLATORS: Each %s denotes an author name.
-        You can use line breaks, estimating that each author name occupies
-        ca. 16 screen columns and that a screen line has ca. 80 columns.  */
-      vfprintf (stream, _("Written by %s, %s, %s,\n%s, %s, %s, and %s.\n"),
-               authors);
-      break;
-    case 8:
-      /* TRANSLATORS: Each %s denotes an author name.
-        You can use line breaks, estimating that each author name occupies
-        ca. 16 screen columns and that a screen line has ca. 80 columns.  */
-      vfprintf (stream, _("\
-Written by %s, %s, %s,\n%s, %s, %s, %s,\nand %s.\n"),
-               authors);
-      break;
-    case 9:
-      /* TRANSLATORS: Each %s denotes an author name.
-        You can use line breaks, estimating that each author name occupies
-        ca. 16 screen columns and that a screen line has ca. 80 columns.  */
-      vfprintf (stream, _("\
-Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, and %s.\n"),
-               authors);
-      break;
-    default:
-      /* 10 or more authors.  Use an abbreviation, since the human reader
-        will probably not want to read the entire list anyway.  */
-      /* TRANSLATORS: Each %s denotes an author name.
-        You can use line breaks, estimating that each author name occupies
-        ca. 16 screen columns and that a screen line has ca. 80 columns.  */
-      vfprintf (stream, _("\
-Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, %s, and others.\n"),
-               authors);
-      break;
-    }
-  va_end (authors);
-}
-
-
-/* Display the --version information the standard way.
-
-   If COMMAND_NAME is NULL, the PACKAGE is asumed to be the name of
-   the program.  The formats are therefore:
-
-   PACKAGE VERSION
-
-   or
-
-   COMMAND_NAME (PACKAGE) VERSION.
-
-   The author names are passed as separate arguments, with an additional
-   NULL argument at the end.  */
-void
-version_etc (FILE *stream,
-            const char *command_name, const char *package,
-            const char *version, /* const char *author1, ...*/ ...)
-{
-  va_list authors;
-
-  va_start (authors, version);
-  version_etc_va (stream, command_name, package, version, authors);
-}
-
-void
-emit_bug_reporting_address (void)
-{
-  /* TRANSLATORS: The placeholder indicates the bug-reporting address
-     for this package.  Please add _another line_ saying
-     "Report translation bugs to <...>\n" with the address for translation
-     bugs (typically your translation team's web or email address).  */
-  printf (_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
-  printf (_("%s home page: <http://www.gnu.org/software/%s/>.\n"),
-         PACKAGE_NAME, PACKAGE);
-  fputs (_("General help using GNU software: <http://www.gnu.org/gethelp/>.\n"),
-         stdout);
-}
diff --git a/lib/version-etc.h b/lib/version-etc.h
deleted file mode 100644 (file)
index 33a8e7f..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Print --version and bug-reporting information in a consistent format.
-   Copyright (C) 1999, 2003, 2005, 2009 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. */
-
-#ifndef VERSION_ETC_H
-# define VERSION_ETC_H 1
-
-# include <stdarg.h>
-# include <stdio.h>
-
-extern const char version_etc_copyright[];
-
-extern void version_etc_va (FILE *stream,
-                           const char *command_name, const char *package,
-                           const char *version, va_list authors);
-
-extern void version_etc (FILE *stream,
-                        const char *command_name, const char *package,
-                        const char *version,
-                        /* const char *author1, ...*/ ...);
-
-extern void emit_bug_reporting_address (void);
-
-#endif /* VERSION_ETC_H */
diff --git a/lib/vsnprintf.c b/lib/vsnprintf.c
deleted file mode 100644 (file)
index 8cc31f2..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* Formatted output to strings.
-   Copyright (C) 2004, 2006-2008 Free Software Foundation, Inc.
-   Written by Simon Josefsson and Yoann Vandoorselaere <yoann@prelude-ids.org>.
-
-   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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-/* Specification.  */
-#include <stdio.h>
-
-#include <errno.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "vasnprintf.h"
-
-/* Print formatted output to string STR.  Similar to vsprintf, but
-   additional length SIZE limit how much is written into STR.  Returns
-   string length of formatted string (which may be larger than SIZE).
-   STR may be NULL, in which case nothing will be written.  On error,
-   return a negative value.  */
-int
-vsnprintf (char *str, size_t size, const char *format, va_list args)
-{
-  char *output;
-  size_t len;
-  size_t lenbuf = size;
-
-  output = vasnprintf (str, &lenbuf, format, args);
-  len = lenbuf;
-
-  if (!output)
-    return -1;
-
-  if (output != str)
-    {
-      if (size)
-       {
-         size_t pruned_len = (len < size ? len : size - 1);
-         memcpy (str, output, pruned_len);
-         str[pruned_len] = '\0';
-       }
-
-      free (output);
-    }
-
-  if (len > INT_MAX)
-    {
-      errno = EOVERFLOW;
-      return -1;
-    }
-
-  return len;
-}
diff --git a/lib/w32sock.h b/lib/w32sock.h
deleted file mode 100644 (file)
index 0622985..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/* w32sock.h --- internal auxilliary functions for Windows socket functions
-
-   Copyright (C) 2008 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 Paolo Bonzini */
-
-#include <errno.h>
-
-/* Get O_RDWR and O_BINARY.  */
-#include <fcntl.h>
-
-/* Get _get_osfhandle() and _open_osfhandle().  */
-#include <io.h>
-
-#define FD_TO_SOCKET(fd)   ((SOCKET) _get_osfhandle ((fd)))
-#define SOCKET_TO_FD(fh)   (_open_osfhandle ((long) (fh), O_RDWR | O_BINARY))
-
-static inline void
-set_winsock_errno (void)
-{
-  int err = WSAGetLastError ();
-  WSASetLastError (0);
-
-  /* Map some WSAE* errors to the runtime library's error codes.  */
-  switch (err)
-    {
-    case WSA_INVALID_HANDLE:
-      errno = EBADF;
-      break;
-    case WSA_NOT_ENOUGH_MEMORY:
-      errno = ENOMEM;
-      break;
-    case WSA_INVALID_PARAMETER:
-      errno = EINVAL;
-      break;
-    case WSAEWOULDBLOCK:
-      errno = EWOULDBLOCK;
-      break;
-    case WSAENAMETOOLONG:
-      errno = ENAMETOOLONG;
-      break;
-    case WSAENOTEMPTY:
-      errno = ENOTEMPTY;
-      break;
-    default:
-      errno = (err > 10000 && err < 10025) ? err - 10000 : err;
-      break;
-    }
-}
diff --git a/lib/waitpid.c b/lib/waitpid.c
deleted file mode 100644 (file)
index eab9430..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Emulate waitpid on systems that just have wait.
-   Copyright 1994, 1995, 1998, 1999, 2007 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; see the file COPYING.
-   If not, write to the Free Software Foundation, 
-   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-
-#define WAITPID_CHILDREN 8
-static pid_t waited_pid[WAITPID_CHILDREN];
-static int waited_status[WAITPID_CHILDREN];
-
-pid_t
-waitpid (pid_t pid, int *stat_loc, int options)
-{
-  int i;
-  pid_t p;
-
-  if (!options && (pid == -1 || 0 < pid))
-    {
-      /* If we have already waited for this child, return it immediately.  */
-      for (i = 0;  i < WAITPID_CHILDREN;  i++)
-       {
-         p = waited_pid[i];
-         if (p && (p == pid || pid == -1))
-           {
-             waited_pid[i] = 0;
-             goto success;
-           }
-       }
-
-      /* The child has not returned yet; wait for it, accumulating status.  */
-      for (i = 0;  i < WAITPID_CHILDREN;  i++)
-       if (! waited_pid[i])
-         {
-           p = wait (&waited_status[i]);
-           if (p < 0)
-             return p;
-           if (p == pid || pid == -1)
-             goto success;
-           waited_pid[i] = p;
-         }
-    }
-
-  /* We cannot emulate this wait call, e.g. because of too many children.  */
-  errno = EINVAL;
-  return -1;
-
-success:
-  if (stat_loc)
-    *stat_loc = waited_status[i];
-  return p;
-}
diff --git a/lib/wchar.in.h b/lib/wchar.in.h
deleted file mode 100644 (file)
index 2d66c32..0000000
+++ /dev/null
@@ -1,308 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
-
-   Copyright (C) 2007-2009 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* Written by Eric Blake.  */
-
-/*
- * ISO C 99 <wchar.h> for platforms that have issues.
- * <http://www.opengroup.org/susv3xbd/wchar.h.html>
- *
- * For now, this just ensures proper prerequisite inclusion order and
- * the declaration of wcwidth().
- */
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-
-#if defined __need_mbstate_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H
-/* Special invocation convention:
-   - Inside uClibc header files.
-   - On HP-UX 11.00 we have a sequence of nested includes
-     <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
-     once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
-     and once directly.  In both situations 'wint_t' is not yet defined,
-     therefore we cannot provide the function overrides; instead include only
-     the system's <wchar.h>.
-   - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
-     the latter includes <wchar.h>.  But here, we have no way to detect whether
-     <wctype.h> is completely included or is still being included.  */
-
-#@INCLUDE_NEXT@ @NEXT_WCHAR_H@
-
-#else
-/* Normal invocation convention.  */
-
-#ifndef _GL_WCHAR_H
-
-#define _GL_ALREADY_INCLUDING_WCHAR_H
-
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-
-/* Include the original <wchar.h> if it exists.
-   Some builds of uClibc lack it.  */
-/* The include_next requires a split double-inclusion guard.  */
-#if @HAVE_WCHAR_H@
-# @INCLUDE_NEXT@ @NEXT_WCHAR_H@
-#endif
-
-#undef _GL_ALREADY_INCLUDING_WCHAR_H
-
-#ifndef _GL_WCHAR_H
-#define _GL_WCHAR_H
-
-/* The definition of GL_LINK_WARNING is copied here.  */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Define wint_t.  (Also done in wctype.in.h.)  */
-#if !@HAVE_WINT_T@ && !defined wint_t
-# define wint_t int
-# ifndef WEOF
-#  define WEOF -1
-# endif
-#endif
-
-
-/* Override mbstate_t if it is too small.
-   On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
-   implementing mbrtowc for encodings like UTF-8.  */
-#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@
-typedef int rpl_mbstate_t;
-# undef mbstate_t
-# define mbstate_t rpl_mbstate_t
-# define GNULIB_defined_mbstate_t 1
-#endif
-
-
-/* Convert a single-byte character to a wide character.  */
-#if @GNULIB_BTOWC@
-# if @REPLACE_BTOWC@
-#  undef btowc
-#  define btowc rpl_btowc
-# endif
-# if !@HAVE_BTOWC@ || @REPLACE_BTOWC@
-extern wint_t btowc (int c);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef btowc
-# define btowc(c) \
-    (GL_LINK_WARNING ("btowc is unportable - " \
-                      "use gnulib module btowc for portability"), \
-     btowc (c))
-#endif
-
-
-/* Convert a wide character to a single-byte character.  */
-#if @GNULIB_WCTOB@
-# if @REPLACE_WCTOB@
-#  undef wctob
-#  define wctob rpl_wctob
-# endif
-# if (!defined wctob && !@HAVE_DECL_WCTOB@) || @REPLACE_WCTOB@
-/* wctob is provided by gnulib, or wctob exists but is not declared.  */
-extern int wctob (wint_t wc);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef wctob
-# define wctob(w) \
-    (GL_LINK_WARNING ("wctob is unportable - " \
-                      "use gnulib module wctob for portability"), \
-     wctob (w))
-#endif
-
-
-/* Test whether *PS is in the initial state.  */
-#if @GNULIB_MBSINIT@
-# if @REPLACE_MBSINIT@
-#  undef mbsinit
-#  define mbsinit rpl_mbsinit
-# endif
-# if !@HAVE_MBSINIT@ || @REPLACE_MBSINIT@
-extern int mbsinit (const mbstate_t *ps);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef mbsinit
-# define mbsinit(p) \
-    (GL_LINK_WARNING ("mbsinit is unportable - " \
-                      "use gnulib module mbsinit for portability"), \
-     mbsinit (p))
-#endif
-
-
-/* Convert a multibyte character to a wide character.  */
-#if @GNULIB_MBRTOWC@
-# if @REPLACE_MBRTOWC@
-#  undef mbrtowc
-#  define mbrtowc rpl_mbrtowc
-# endif
-# if !@HAVE_MBRTOWC@ || @REPLACE_MBRTOWC@
-extern size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef mbrtowc
-# define mbrtowc(w,s,n,p) \
-    (GL_LINK_WARNING ("mbrtowc is unportable - " \
-                      "use gnulib module mbrtowc for portability"), \
-     mbrtowc (w, s, n, p))
-#endif
-
-
-/* Recognize a multibyte character.  */
-#if @GNULIB_MBRLEN@
-# if @REPLACE_MBRLEN@
-#  undef mbrlen
-#  define mbrlen rpl_mbrlen
-# endif
-# if !@HAVE_MBRLEN@ || @REPLACE_MBRLEN@
-extern size_t mbrlen (const char *s, size_t n, mbstate_t *ps);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef mbrlen
-# define mbrlen(s,n,p) \
-    (GL_LINK_WARNING ("mbrlen is unportable - " \
-                      "use gnulib module mbrlen for portability"), \
-     mbrlen (s, n, p))
-#endif
-
-
-/* Convert a string to a wide string.  */
-#if @GNULIB_MBSRTOWCS@
-# if @REPLACE_MBSRTOWCS@
-#  undef mbsrtowcs
-#  define mbsrtowcs rpl_mbsrtowcs
-# endif
-# if !@HAVE_MBSRTOWCS@ || @REPLACE_MBSRTOWCS@
-extern size_t mbsrtowcs (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef mbsrtowcs
-# define mbsrtowcs(d,s,l,p) \
-    (GL_LINK_WARNING ("mbsrtowcs is unportable - " \
-                      "use gnulib module mbsrtowcs for portability"), \
-     mbsrtowcs (d, s, l, p))
-#endif
-
-
-/* Convert a string to a wide string.  */
-#if @GNULIB_MBSNRTOWCS@
-# if @REPLACE_MBSNRTOWCS@
-#  undef mbsnrtowcs
-#  define mbsnrtowcs rpl_mbsnrtowcs
-# endif
-# if !@HAVE_MBSNRTOWCS@ || @REPLACE_MBSNRTOWCS@
-extern size_t mbsnrtowcs (wchar_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef mbsnrtowcs
-# define mbsnrtowcs(d,s,n,l,p) \
-    (GL_LINK_WARNING ("mbsnrtowcs is unportable - " \
-                      "use gnulib module mbsnrtowcs for portability"), \
-     mbsnrtowcs (d, s, n, l, p))
-#endif
-
-
-/* Convert a wide character to a multibyte character.  */
-#if @GNULIB_WCRTOMB@
-# if @REPLACE_WCRTOMB@
-#  undef wcrtomb
-#  define wcrtomb rpl_wcrtomb
-# endif
-# if !@HAVE_WCRTOMB@ || @REPLACE_WCRTOMB@
-extern size_t wcrtomb (char *s, wchar_t wc, mbstate_t *ps);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef wcrtomb
-# define wcrtomb(s,w,p) \
-    (GL_LINK_WARNING ("wcrtomb is unportable - " \
-                      "use gnulib module wcrtomb for portability"), \
-     wcrtomb (s, w, p))
-#endif
-
-
-/* Convert a wide string to a string.  */
-#if @GNULIB_WCSRTOMBS@
-# if @REPLACE_WCSRTOMBS@
-#  undef wcsrtombs
-#  define wcsrtombs rpl_wcsrtombs
-# endif
-# if !@HAVE_WCSRTOMBS@ || @REPLACE_WCSRTOMBS@
-extern size_t wcsrtombs (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef wcsrtombs
-# define wcsrtombs(d,s,l,p) \
-    (GL_LINK_WARNING ("wcsrtombs is unportable - " \
-                      "use gnulib module wcsrtombs for portability"), \
-     wcsrtombs (d, s, l, p))
-#endif
-
-
-/* Convert a wide string to a string.  */
-#if @GNULIB_WCSNRTOMBS@
-# if !@HAVE_WCSNRTOMBS@
-extern size_t wcsnrtombs (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate_t *ps);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef wcsnrtombs
-# define wcsnrtombs(d,s,n,l,p) \
-    (GL_LINK_WARNING ("wcsnrtombs is unportable - " \
-                      "use gnulib module wcsnrtombs for portability"), \
-     wcsnrtombs (d, s, n, l, p))
-#endif
-
-
-/* Return the number of screen columns needed for WC.  */
-#if @GNULIB_WCWIDTH@
-# if @REPLACE_WCWIDTH@
-#  undef wcwidth
-#  define wcwidth rpl_wcwidth
-extern int wcwidth (wchar_t);
-# else
-#  if !defined wcwidth && !@HAVE_DECL_WCWIDTH@
-/* wcwidth exists but is not declared.  */
-extern int wcwidth (int /* actually wchar_t */);
-#  endif
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef wcwidth
-# define wcwidth(w) \
-    (GL_LINK_WARNING ("wcwidth is unportable - " \
-                      "use gnulib module wcwidth for portability"), \
-     wcwidth (w))
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _GL_WCHAR_H */
-#endif /* _GL_WCHAR_H */
-#endif
diff --git a/lib/wcrtomb.c b/lib/wcrtomb.c
deleted file mode 100644 (file)
index 79df99f..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Convert wide character to multibyte character.
-   Copyright (C) 2008 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2008.
-
-   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 <wchar.h>
-
-#include <errno.h>
-#include <stdlib.h>
-
-
-size_t
-wcrtomb (char *s, wchar_t wc, mbstate_t *ps)
-{
-  /* This implementation of wcrtomb on top of wctomb() supports only
-     stateless encodings.  ps must be in the initial state.  */
-  if (ps != NULL && !mbsinit (ps))
-    {
-      errno = EINVAL;
-      return (size_t)(-1);
-    }
-
-  if (s == NULL)
-    /* We know the NUL wide character corresponds to the NUL character.  */
-    return 1;
-  else
-    {
-      int ret = wctomb (s, wc);
-
-      if (ret >= 0)
-       return ret;
-      else
-       {
-         errno = EILSEQ;
-         return (size_t)(-1);
-       }
-    }
-}
diff --git a/lib/wctype.in.h b/lib/wctype.in.h
deleted file mode 100644 (file)
index f7942ed..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
-
-   Copyright (C) 2006-2008 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* Written by Bruno Haible and Paul Eggert.  */
-
-/*
- * ISO C 99 <wctype.h> for platforms that lack it.
- * <http://www.opengroup.org/susv3xbd/wctype.h.html>
- *
- * iswctype, towctrans, towlower, towupper, wctrans, wctype,
- * wctrans_t, and wctype_t are not yet implemented.
- */
-
-#ifndef _GL_WCTYPE_H
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-
-#if @HAVE_WINT_T@
-/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.
-   Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-# include <stddef.h>
-# include <stdio.h>
-# include <time.h>
-# include <wchar.h>
-#endif
-
-/* Include the original <wctype.h> if it exists.
-   BeOS 5 has the functions but no <wctype.h>.  */
-/* The include_next requires a split double-inclusion guard.  */
-#if @HAVE_WCTYPE_H@
-# @INCLUDE_NEXT@ @NEXT_WCTYPE_H@
-#endif
-
-#ifndef _GL_WCTYPE_H
-#define _GL_WCTYPE_H
-
-/* Define wint_t.  (Also done in wchar.in.h.)  */
-#if !@HAVE_WINT_T@ && !defined wint_t
-# define wint_t int
-# ifndef WEOF
-#  define WEOF -1
-# endif
-#endif
-
-/* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
-   Linux libc5 has <wctype.h> and the functions but they are broken.
-   Assume all 12 functions are implemented the same way, or not at all.  */
-#if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@
-
-/* IRIX 5.3 has macros but no functions, its isw* macros refer to an
-   undefined variable _ctmp_ and to <ctype.h> macros like _P, and they
-   refer to system functions like _iswctype that are not in the
-   standard C library.  Rather than try to get ancient buggy
-   implementations like this to work, just disable them.  */
-#  undef iswalnum
-#  undef iswalpha
-#  undef iswblank
-#  undef iswcntrl
-#  undef iswdigit
-#  undef iswgraph
-#  undef iswlower
-#  undef iswprint
-#  undef iswpunct
-#  undef iswspace
-#  undef iswupper
-#  undef iswxdigit
-
-/* Linux libc5 has <wctype.h> and the functions but they are broken.  */
-#  if @REPLACE_ISWCNTRL@
-#   define iswalnum rpl_iswalnum
-#   define iswalpha rpl_iswalpha
-#   define iswblank rpl_iswblank
-#   define iswcntrl rpl_iswcntrl
-#   define iswdigit rpl_iswdigit
-#   define iswgraph rpl_iswgraph
-#   define iswlower rpl_iswlower
-#   define iswprint rpl_iswprint
-#   define iswpunct rpl_iswpunct
-#   define iswspace rpl_iswspace
-#   define iswupper rpl_iswupper
-#   define iswxdigit rpl_iswxdigit
-#  endif
-
-static inline int
-iswalnum (wint_t wc)
-{
-  return ((wc >= '0' && wc <= '9')
-         || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
-}
-
-static inline int
-iswalpha (wint_t wc)
-{
-  return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
-}
-
-static inline int
-iswblank (wint_t wc)
-{
-  return wc == ' ' || wc == '\t';
-}
-
-static inline int
-iswcntrl (wint_t wc)
-{
-  return (wc & ~0x1f) == 0 || wc == 0x7f;
-}
-
-static inline int
-iswdigit (wint_t wc)
-{
-  return wc >= '0' && wc <= '9';
-}
-
-static inline int
-iswgraph (wint_t wc)
-{
-  return wc >= '!' && wc <= '~';
-}
-
-static inline int
-iswlower (wint_t wc)
-{
-  return wc >= 'a' && wc <= 'z';
-}
-
-static inline int
-iswprint (wint_t wc)
-{
-  return wc >= ' ' && wc <= '~';
-}
-
-static inline int
-iswpunct (wint_t wc)
-{
-  return (wc >= '!' && wc <= '~'
-         && !((wc >= '0' && wc <= '9')
-              || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')));
-}
-
-static inline int
-iswspace (wint_t wc)
-{
-  return (wc == ' ' || wc == '\t'
-         || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
-}
-
-static inline int
-iswupper (wint_t wc)
-{
-  return wc >= 'A' && wc <= 'Z';
-}
-
-static inline int
-iswxdigit (wint_t wc)
-{
-  return ((wc >= '0' && wc <= '9')
-         || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
-}
-
-# endif /* ! HAVE_ISWCNTRL */
-
-#endif /* _GL_WCTYPE_H */
-#endif /* _GL_WCTYPE_H */
diff --git a/lib/wcwidth.c b/lib/wcwidth.c
deleted file mode 100644 (file)
index 4885071..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Determine the number of screen columns needed for a character.
-   Copyright (C) 2006, 2007 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 <wchar.h>
-
-/* Get iswprint.  */
-#include <wctype.h>
-
-#include "localcharset.h"
-#include "streq.h"
-#include "uniwidth.h"
-
-#undef wcwidth
-
-int
-rpl_wcwidth (wchar_t wc)
-{
-  /* In UTF-8 locales, use a Unicode aware width function.  */
-  const char *encoding = locale_charset ();
-  if (STREQ (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0 ,0))
-    {
-      /* We assume that in a UTF-8 locale, a wide character is the same as a
-        Unicode character.  */
-      return uc_width (wc, encoding);
-    }
-  else
-    {
-      /* Otherwise, fall back to the system's wcwidth function.  */
-#if HAVE_WCWIDTH
-      return wcwidth (wc);
-#else
-      return wc == 0 ? 0 : iswprint (wc) ? 1 : -1;
-#endif
-    }
-}
diff --git a/lib/write.c b/lib/write.c
deleted file mode 100644 (file)
index 250b5cc..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/* POSIX compatible write() function.
-   Copyright (C) 2008 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2008.
-
-   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>
-
-/* Replace this function only if module 'sigpipe' is requested.  */
-#if GNULIB_SIGPIPE
-
-/* On native Windows platforms, SIGPIPE does not exist.  When write() is
-   called on a pipe with no readers, WriteFile() fails with error
-   GetLastError() = ERROR_NO_DATA, and write() in consequence fails with
-   error EINVAL.  */
-
-# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
-
-#  include <errno.h>
-#  include <signal.h>
-#  include <io.h>
-
-#  define WIN32_LEAN_AND_MEAN  /* avoid including junk */
-#  include <windows.h>
-
-ssize_t
-rpl_write (int fd, const void *buf, size_t count)
-#undef write
-{
-  ssize_t ret = write (fd, buf, count);
-
-  if (ret < 0)
-    {
-      if (GetLastError () == ERROR_NO_DATA
-         && GetFileType (_get_osfhandle (fd)) == FILE_TYPE_PIPE)
-       {
-         /* Try to raise signal SIGPIPE.  */
-         raise (SIGPIPE);
-         /* If it is currently blocked or ignored, change errno from EINVAL
-            to EPIPE.  */
-         errno = EPIPE;
-       }
-    }
-  return ret;
-}
-
-# endif
-#endif
diff --git a/lib/xalloc-die.c b/lib/xalloc-die.c
deleted file mode 100644 (file)
index 0a0694f..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Report a memory allocation failure and exit.
-
-   Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2006 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>
-
-#include "xalloc.h"
-
-#include <stdlib.h>
-
-#include "error.h"
-#include "exitfail.h"
-
-#include "gettext.h"
-#define _(msgid) gettext (msgid)
-
-void
-xalloc_die (void)
-{
-  error (exit_failure, 0, "%s", _("memory exhausted"));
-
-  /* The `noreturn' cannot be given to error, since it may return if
-     its first argument is 0.  To help compilers understand the
-     xalloc_die does not return, call abort.  Also, the abort is a
-     safety feature if exit_failure is 0 (which shouldn't happen).  */
-  abort ();
-}
diff --git a/lib/xalloc.h b/lib/xalloc.h
deleted file mode 100644 (file)
index 57a13e0..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-/* xalloc.h -- malloc with out-of-memory checking
-
-   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2003, 2004, 2006, 2007, 2008 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 XALLOC_H_
-# define XALLOC_H_
-
-# include <stddef.h>
-
-
-# ifdef __cplusplus
-extern "C" {
-# endif
-
-
-# ifndef __attribute__
-#  if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
-#   define __attribute__(x)
-#  endif
-# endif
-
-# ifndef ATTRIBUTE_NORETURN
-#  define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
-# endif
-
-# ifndef ATTRIBUTE_MALLOC
-#  if __GNUC__ >= 3
-#   define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
-#  else
-#   define ATTRIBUTE_MALLOC
-#  endif
-# endif
-
-/* This function is always triggered when memory is exhausted.
-   It must be defined by the application, either explicitly
-   or by using gnulib's xalloc-die module.  This is the
-   function to call when one wants the program to die because of a
-   memory allocation failure.  */
-extern void xalloc_die (void) ATTRIBUTE_NORETURN;
-
-void *xmalloc (size_t s) ATTRIBUTE_MALLOC;
-void *xzalloc (size_t s) ATTRIBUTE_MALLOC;
-void *xcalloc (size_t n, size_t s) ATTRIBUTE_MALLOC;
-void *xrealloc (void *p, size_t s);
-void *x2realloc (void *p, size_t *pn);
-void *xmemdup (void const *p, size_t s) ATTRIBUTE_MALLOC;
-char *xstrdup (char const *str) ATTRIBUTE_MALLOC;
-
-/* Return 1 if an array of N objects, each of size S, cannot exist due
-   to size arithmetic overflow.  S must be positive and N must be
-   nonnegative.  This is a macro, not an inline function, so that it
-   works correctly even when SIZE_MAX < N.
-
-   By gnulib convention, SIZE_MAX represents overflow in size
-   calculations, so the conservative dividend to use here is
-   SIZE_MAX - 1, since SIZE_MAX might represent an overflowed value.
-   However, malloc (SIZE_MAX) fails on all known hosts where
-   sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for
-   exactly-SIZE_MAX allocations on such hosts; this avoids a test and
-   branch when S is known to be 1.  */
-# define xalloc_oversized(n, s) \
-    ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n))
-
-
-/* In the following macros, T must be an elementary or structure/union or
-   typedef'ed type, or a pointer to such a type.  To apply one of the
-   following macros to a function pointer or array type, you need to typedef
-   it first and use the typedef name.  */
-
-/* Allocate an object of type T dynamically, with error checking.  */
-/* extern t *XMALLOC (typename t); */
-# define XMALLOC(t) ((t *) xmalloc (sizeof (t)))
-
-/* Allocate memory for N elements of type T, with error checking.  */
-/* extern t *XNMALLOC (size_t n, typename t); */
-# define XNMALLOC(n, t) \
-    ((t *) (sizeof (t) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (t))))
-
-/* Allocate an object of type T dynamically, with error checking,
-   and zero it.  */
-/* extern t *XZALLOC (typename t); */
-# define XZALLOC(t) ((t *) xzalloc (sizeof (t)))
-
-/* Allocate memory for N elements of type T, with error checking,
-   and zero it.  */
-/* extern t *XCALLOC (size_t n, typename t); */
-# define XCALLOC(n, t) \
-    ((t *) (sizeof (t) == 1 ? xzalloc (n) : xcalloc (n, sizeof (t))))
-
-
-# if HAVE_INLINE
-#  define static_inline static inline
-# else
-   void *xnmalloc (size_t n, size_t s) ATTRIBUTE_MALLOC;
-   void *xnrealloc (void *p, size_t n, size_t s);
-   void *x2nrealloc (void *p, size_t *pn, size_t s);
-   char *xcharalloc (size_t n) ATTRIBUTE_MALLOC;
-# endif
-
-# ifdef static_inline
-
-/* Allocate an array of N objects, each with S bytes of memory,
-   dynamically, with error checking.  S must be nonzero.  */
-
-static_inline void *xnmalloc (size_t n, size_t s) ATTRIBUTE_MALLOC;
-static_inline void *
-xnmalloc (size_t n, size_t s)
-{
-  if (xalloc_oversized (n, s))
-    xalloc_die ();
-  return xmalloc (n * s);
-}
-
-/* Change the size of an allocated block of memory P to an array of N
-   objects each of S bytes, with error checking.  S must be nonzero.  */
-
-static_inline void *
-xnrealloc (void *p, size_t n, size_t s)
-{
-  if (xalloc_oversized (n, s))
-    xalloc_die ();
-  return xrealloc (p, n * s);
-}
-
-/* If P is null, allocate a block of at least *PN such objects;
-   otherwise, reallocate P so that it contains more than *PN objects
-   each of S bytes.  *PN must be nonzero unless P is null, and S must
-   be nonzero.  Set *PN to the new number of objects, and return the
-   pointer to the new block.  *PN is never set to zero, and the
-   returned pointer is never null.
-
-   Repeated reallocations are guaranteed to make progress, either by
-   allocating an initial block with a nonzero size, or by allocating a
-   larger block.
-
-   In the following implementation, nonzero sizes are increased by a
-   factor of approximately 1.5 so that repeated reallocations have
-   O(N) overall cost rather than O(N**2) cost, but the
-   specification for this function does not guarantee that rate.
-
-   Here is an example of use:
-
-     int *p = NULL;
-     size_t used = 0;
-     size_t allocated = 0;
-
-     void
-     append_int (int value)
-       {
-        if (used == allocated)
-          p = x2nrealloc (p, &allocated, sizeof *p);
-        p[used++] = value;
-       }
-
-   This causes x2nrealloc to allocate a block of some nonzero size the
-   first time it is called.
-
-   To have finer-grained control over the initial size, set *PN to a
-   nonzero value before calling this function with P == NULL.  For
-   example:
-
-     int *p = NULL;
-     size_t used = 0;
-     size_t allocated = 0;
-     size_t allocated1 = 1000;
-
-     void
-     append_int (int value)
-       {
-        if (used == allocated)
-          {
-            p = x2nrealloc (p, &allocated1, sizeof *p);
-            allocated = allocated1;
-          }
-        p[used++] = value;
-       }
-
-   */
-
-static_inline void *
-x2nrealloc (void *p, size_t *pn, size_t s)
-{
-  size_t n = *pn;
-
-  if (! p)
-    {
-      if (! n)
-       {
-         /* The approximate size to use for initial small allocation
-            requests, when the invoking code specifies an old size of
-            zero.  64 bytes is the largest "small" request for the
-            GNU C library malloc.  */
-         enum { DEFAULT_MXFAST = 64 };
-
-         n = DEFAULT_MXFAST / s;
-         n += !n;
-       }
-    }
-  else
-    {
-      /* Set N = ceil (1.5 * N) so that progress is made if N == 1.
-        Check for overflow, so that N * S stays in size_t range.
-        The check is slightly conservative, but an exact check isn't
-        worth the trouble.  */
-      if ((size_t) -1 / 3 * 2 / s <= n)
-       xalloc_die ();
-      n += (n + 1) / 2;
-    }
-
-  *pn = n;
-  return xrealloc (p, n * s);
-}
-
-/* Return a pointer to a new buffer of N bytes.  This is like xmalloc,
-   except it returns char *.  */
-
-static_inline char *xcharalloc (size_t n) ATTRIBUTE_MALLOC;
-static_inline char *
-xcharalloc (size_t n)
-{
-  return XNMALLOC (n, char);
-}
-
-# endif
-
-# ifdef __cplusplus
-}
-
-/* C++ does not allow conversions from void * to other pointer types
-   without a cast.  Use templates to work around the problem when
-   possible.  */
-
-template <typename T> inline T *
-xrealloc (T *p, size_t s)
-{
-  return (T *) xrealloc ((void *) p, s);
-}
-
-template <typename T> inline T *
-xnrealloc (T *p, size_t n, size_t s)
-{
-  return (T *) xnrealloc ((void *) p, n, s);
-}
-
-template <typename T> inline T *
-x2realloc (T *p, size_t *pn)
-{
-  return (T *) x2realloc ((void *) p, pn);
-}
-
-template <typename T> inline T *
-x2nrealloc (T *p, size_t *pn, size_t s)
-{
-  return (T *) x2nrealloc ((void *) p, pn, s);
-}
-
-template <typename T> inline T *
-xmemdup (T const *p, size_t s)
-{
-  return (T *) xmemdup ((void const *) p, s);
-}
-
-# endif
-
-
-#endif /* !XALLOC_H_ */
diff --git a/lib/xgetcwd.c b/lib/xgetcwd.c
deleted file mode 100644 (file)
index 6787b46..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/* xgetcwd.c -- return current directory with unlimited length
-
-   Copyright (C) 2001, 2003, 2004, 2006, 2007 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.  */
-
-#include <config.h>
-
-#include "xgetcwd.h"
-
-#include <errno.h>
-#include <unistd.h>
-
-#include "xalloc.h"
-
-/* Return the current directory, newly allocated.
-   Upon an out-of-memory error, call xalloc_die.
-   Upon any other type of error, return NULL.  */
-
-char *
-xgetcwd (void)
-{
-  char *cwd = getcwd (NULL, 0);
-  if (! cwd && errno == ENOMEM)
-    xalloc_die ();
-  return cwd;
-}
diff --git a/lib/xgetcwd.h b/lib/xgetcwd.h
deleted file mode 100644 (file)
index 3d966de..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/* prototype for xgetcwd
-   Copyright (C) 1995, 2001, 2003 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/>.  */
-
-extern char *xgetcwd (void);
diff --git a/lib/xmalloc.c b/lib/xmalloc.c
deleted file mode 100644 (file)
index 89ecf17..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/* xmalloc.c -- malloc with out of memory checking
-
-   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2002, 2003, 2004, 2005, 2006, 2008 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>
-
-#if ! HAVE_INLINE
-# define static_inline
-#endif
-#include "xalloc.h"
-#undef static_inline
-
-#include <stdlib.h>
-#include <string.h>
-
-#ifndef SIZE_MAX
-# define SIZE_MAX ((size_t) -1)
-#endif
-
-/* 1 if calloc is known to be compatible with GNU calloc.  This
-   matters if we are not also using the calloc module, which defines
-   HAVE_CALLOC and supports the GNU API even on non-GNU platforms.  */
-#if defined HAVE_CALLOC || defined __GLIBC__
-enum { HAVE_GNU_CALLOC = 1 };
-#else
-enum { HAVE_GNU_CALLOC = 0 };
-#endif
-
-/* Allocate N bytes of memory dynamically, with error checking.  */
-
-void *
-xmalloc (size_t n)
-{
-  void *p = malloc (n);
-  if (!p && n != 0)
-    xalloc_die ();
-  return p;
-}
-
-/* Change the size of an allocated block of memory P to N bytes,
-   with error checking.  */
-
-void *
-xrealloc (void *p, size_t n)
-{
-  p = realloc (p, n);
-  if (!p && n != 0)
-    xalloc_die ();
-  return p;
-}
-
-/* If P is null, allocate a block of at least *PN bytes; otherwise,
-   reallocate P so that it contains more than *PN bytes.  *PN must be
-   nonzero unless P is null.  Set *PN to the new block's size, and
-   return the pointer to the new block.  *PN is never set to zero, and
-   the returned pointer is never null.  */
-
-void *
-x2realloc (void *p, size_t *pn)
-{
-  return x2nrealloc (p, pn, 1);
-}
-
-/* Allocate S bytes of zeroed memory dynamically, with error checking.
-   There's no need for xnzalloc (N, S), since it would be equivalent
-   to xcalloc (N, S).  */
-
-void *
-xzalloc (size_t s)
-{
-  return memset (xmalloc (s), 0, s);
-}
-
-/* Allocate zeroed memory for N elements of S bytes, with error
-   checking.  S must be nonzero.  */
-
-void *
-xcalloc (size_t n, size_t s)
-{
-  void *p;
-  /* Test for overflow, since some calloc implementations don't have
-     proper overflow checks.  But omit overflow and size-zero tests if
-     HAVE_GNU_CALLOC, since GNU calloc catches overflow and never
-     returns NULL if successful.  */
-  if ((! HAVE_GNU_CALLOC && xalloc_oversized (n, s))
-      || (! (p = calloc (n, s)) && (HAVE_GNU_CALLOC || n != 0)))
-    xalloc_die ();
-  return p;
-}
-
-/* Clone an object P of size S, with error checking.  There's no need
-   for xnmemdup (P, N, S), since xmemdup (P, N * S) works without any
-   need for an arithmetic overflow check.  */
-
-void *
-xmemdup (void const *p, size_t s)
-{
-  return memcpy (xmalloc (s), p, s);
-}
-
-/* Clone STRING.  */
-
-char *
-xstrdup (char const *string)
-{
-  return xmemdup (string, strlen (string) + 1);
-}
diff --git a/lib/xsize.h b/lib/xsize.h
deleted file mode 100644 (file)
index e6d290a..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/* -*- buffer-read-only: t -*- vi: set ro: */
-/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
-/* xsize.h -- Checked size_t computations.
-
-   Copyright (C) 2003, 2008 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, write to the Free Software Foundation,
-   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-#ifndef _XSIZE_H
-#define _XSIZE_H
-
-/* Get size_t.  */
-#include <stddef.h>
-
-/* Get SIZE_MAX.  */
-#include <limits.h>
-#if HAVE_STDINT_H
-# include <stdint.h>
-#endif
-
-/* The size of memory objects is often computed through expressions of
-   type size_t. Example:
-      void* p = malloc (header_size + n * element_size).
-   These computations can lead to overflow.  When this happens, malloc()
-   returns a piece of memory that is way too small, and the program then
-   crashes while attempting to fill the memory.
-   To avoid this, the functions and macros in this file check for overflow.
-   The convention is that SIZE_MAX represents overflow.
-   malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc
-   implementation that uses mmap --, it's recommended to use size_overflow_p()
-   or size_in_bounds_p() before invoking malloc().
-   The example thus becomes:
-      size_t size = xsum (header_size, xtimes (n, element_size));
-      void *p = (size_in_bounds_p (size) ? malloc (size) : NULL);
-*/
-
-/* Convert an arbitrary value >= 0 to type size_t.  */
-#define xcast_size_t(N) \
-  ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX)
-
-/* Sum of two sizes, with overflow check.  */
-static inline size_t
-#if __GNUC__ >= 3
-__attribute__ ((__pure__))
-#endif
-xsum (size_t size1, size_t size2)
-{
-  size_t sum = size1 + size2;
-  return (sum >= size1 ? sum : SIZE_MAX);
-}
-
-/* Sum of three sizes, with overflow check.  */
-static inline size_t
-#if __GNUC__ >= 3
-__attribute__ ((__pure__))
-#endif
-xsum3 (size_t size1, size_t size2, size_t size3)
-{
-  return xsum (xsum (size1, size2), size3);
-}
-
-/* Sum of four sizes, with overflow check.  */
-static inline size_t
-#if __GNUC__ >= 3
-__attribute__ ((__pure__))
-#endif
-xsum4 (size_t size1, size_t size2, size_t size3, size_t size4)
-{
-  return xsum (xsum (xsum (size1, size2), size3), size4);
-}
-
-/* Maximum of two sizes, with overflow check.  */
-static inline size_t
-#if __GNUC__ >= 3
-__attribute__ ((__pure__))
-#endif
-xmax (size_t size1, size_t size2)
-{
-  /* No explicit check is needed here, because for any n:
-     max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX.  */
-  return (size1 >= size2 ? size1 : size2);
-}
-
-/* Multiplication of a count with an element size, with overflow check.
-   The count must be >= 0 and the element size must be > 0.
-   This is a macro, not an inline function, so that it works correctly even
-   when N is of a wider type and N > SIZE_MAX.  */
-#define xtimes(N, ELSIZE) \
-  ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX)
-
-/* Check for overflow.  */
-#define size_overflow_p(SIZE) \
-  ((SIZE) == SIZE_MAX)
-/* Check against overflow.  */
-#define size_in_bounds_p(SIZE) \
-  ((SIZE) != SIZE_MAX)
-
-#endif /* _XSIZE_H */
diff --git a/lib/xstrndup.c b/lib/xstrndup.c
deleted file mode 100644 (file)
index 37488cd..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Duplicate a bounded initial segment of a string, with out-of-memory
-   checking.
-   Copyright (C) 2003, 2006, 2007 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 "xstrndup.h"
-
-#include <string.h>
-#include "xalloc.h"
-
-/* Return a newly allocated copy of at most N bytes of STRING.
-   In other words, return a copy of the initial segment of length N of
-   STRING.  */
-char *
-xstrndup (const char *string, size_t n)
-{
-  char *s = strndup (string, n);
-  if (! s)
-    xalloc_die ();
-  return s;
-}
diff --git a/lib/xstrndup.h b/lib/xstrndup.h
deleted file mode 100644 (file)
index 4882e39..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Duplicate a bounded initial segment of a string, with out-of-memory
-   checking.
-   Copyright (C) 2003 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 <stddef.h>
-
-/* Return a newly allocated copy of at most N bytes of STRING.
-   In other words, return a copy of the initial segment of length N of
-   STRING.  */
-extern char *xstrndup (const char *string, size_t n);
diff --git a/lib/xstrtol-error.c b/lib/xstrtol-error.c
deleted file mode 100644 (file)
index 67b5bf0..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/* A more useful interface to strtol.
-
-   Copyright (C) 1995, 1996, 1998, 1999, 2001-2004, 2006-2008
-   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>
-#include "xstrtol.h"
-
-#include <stdlib.h>
-
-#include "error.h"
-#include "exitfail.h"
-#include "gettext.h"
-
-#define N_(msgid) msgid
-
-/* Report an error for an invalid integer in an option argument.
-
-   ERR is the error code returned by one of the xstrto* functions.
-
-   Use OPT_IDX to decide whether to print the short option string "C"
-   or "-C" or a long option string derived from LONG_OPTION.  OPT_IDX
-   is -2 if the short option "C" was used, without any leading "-"; it
-   is -1 if the short option "-C" was used; otherwise it is an index
-   into LONG_OPTIONS, which should have a name preceded by two '-'
-   characters.
-
-   ARG is the option-argument containing the integer.
-
-   After reporting an error, exit with status EXIT_STATUS if it is
-   nonzero.  */
-
-static void
-xstrtol_error (enum strtol_error err,
-              int opt_idx, char c, struct option const *long_options,
-              char const *arg,
-              int exit_status)
-{
-  char const *hyphens = "--";
-  char const *msgid;
-  char const *option;
-  char option_buffer[2];
-
-  switch (err)
-    {
-    default:
-      abort ();
-
-    case LONGINT_INVALID:
-      msgid = N_("invalid %s%s argument `%s'");
-      break;
-
-    case LONGINT_INVALID_SUFFIX_CHAR:
-    case LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW:
-      msgid = N_("invalid suffix in %s%s argument `%s'");
-      break;
-
-    case LONGINT_OVERFLOW:
-      msgid = N_("%s%s argument `%s' too large");
-      break;
-    }
-
-  if (opt_idx < 0)
-    {
-      hyphens -= opt_idx;
-      option_buffer[0] = c;
-      option_buffer[1] = '\0';
-      option = option_buffer;
-    }
-  else
-    option = long_options[opt_idx].name;
-
-  error (exit_status, 0, gettext (msgid), hyphens, option, arg);
-}
-
-/* Like xstrtol_error, except exit with a failure status.  */
-
-void
-xstrtol_fatal (enum strtol_error err,
-              int opt_idx, char c, struct option const *long_options,
-              char const *arg)
-{
-  xstrtol_error (err, opt_idx, c, long_options, arg, exit_failure);
-  abort ();
-}
diff --git a/lib/xstrtol.c b/lib/xstrtol.c
deleted file mode 100644 (file)
index 1804fe5..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-/* A more useful interface to strtol.
-
-   Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-   2006, 2007 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. */
-
-#ifndef __strtol
-# define __strtol strtol
-# define __strtol_t long int
-# define __xstrtol xstrtol
-# define STRTOL_T_MINIMUM LONG_MIN
-# define STRTOL_T_MAXIMUM LONG_MAX
-#endif
-
-#include <config.h>
-
-#include "xstrtol.h"
-
-/* Some pre-ANSI implementations (e.g. SunOS 4)
-   need stderr defined if assertion checking is enabled.  */
-#include <stdio.h>
-
-#include <assert.h>
-#include <ctype.h>
-#include <errno.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "intprops.h"
-
-static strtol_error
-bkm_scale (__strtol_t *x, int scale_factor)
-{
-  if (TYPE_SIGNED (__strtol_t) && *x < STRTOL_T_MINIMUM / scale_factor)
-    {
-      *x = STRTOL_T_MINIMUM;
-      return LONGINT_OVERFLOW;
-    }
-  if (STRTOL_T_MAXIMUM / scale_factor < *x)
-    {
-      *x = STRTOL_T_MAXIMUM;
-      return LONGINT_OVERFLOW;
-    }
-  *x *= scale_factor;
-  return LONGINT_OK;
-}
-
-static strtol_error
-bkm_scale_by_power (__strtol_t *x, int base, int power)
-{
-  strtol_error err = LONGINT_OK;
-  while (power--)
-    err |= bkm_scale (x, base);
-  return err;
-}
-
-/* FIXME: comment.  */
-
-strtol_error
-__xstrtol (const char *s, char **ptr, int strtol_base,
-          __strtol_t *val, const char *valid_suffixes)
-{
-  char *t_ptr;
-  char **p;
-  __strtol_t tmp;
-  strtol_error err = LONGINT_OK;
-
-  assert (0 <= strtol_base && strtol_base <= 36);
-
-  p = (ptr ? ptr : &t_ptr);
-
-  if (! TYPE_SIGNED (__strtol_t))
-    {
-      const char *q = s;
-      unsigned char ch = *q;
-      while (isspace (ch))
-       ch = *++q;
-      if (ch == '-')
-       return LONGINT_INVALID;
-    }
-
-  errno = 0;
-  tmp = __strtol (s, p, strtol_base);
-
-  if (*p == s)
-    {
-      /* If there is no number but there is a valid suffix, assume the
-        number is 1.  The string is invalid otherwise.  */
-      if (valid_suffixes && **p && strchr (valid_suffixes, **p))
-       tmp = 1;
-      else
-       return LONGINT_INVALID;
-    }
-  else if (errno != 0)
-    {
-      if (errno != ERANGE)
-       return LONGINT_INVALID;
-      err = LONGINT_OVERFLOW;
-    }
-
-  /* Let valid_suffixes == NULL mean `allow any suffix'.  */
-  /* FIXME: update all callers except the ones that allow suffixes
-     after the number, changing last parameter NULL to `""'.  */
-  if (!valid_suffixes)
-    {
-      *val = tmp;
-      return err;
-    }
-
-  if (**p != '\0')
-    {
-      int base = 1024;
-      int suffixes = 1;
-      strtol_error overflow;
-
-      if (!strchr (valid_suffixes, **p))
-       {
-         *val = tmp;
-         return err | LONGINT_INVALID_SUFFIX_CHAR;
-       }
-
-      if (strchr (valid_suffixes, '0'))
-       {
-         /* The ``valid suffix'' '0' is a special flag meaning that
-            an optional second suffix is allowed, which can change
-            the base.  A suffix "B" (e.g. "100MB") stands for a power
-            of 1000, whereas a suffix "iB" (e.g. "100MiB") stands for
-            a power of 1024.  If no suffix (e.g. "100M"), assume
-            power-of-1024.  */
-
-         switch (p[0][1])
-           {
-           case 'i':
-             if (p[0][2] == 'B')
-               suffixes += 2;
-             break;
-
-           case 'B':
-           case 'D': /* 'D' is obsolescent */
-             base = 1000;
-             suffixes++;
-             break;
-           }
-       }
-
-      switch (**p)
-       {
-       case 'b':
-         overflow = bkm_scale (&tmp, 512);
-         break;
-
-       case 'B':
-         overflow = bkm_scale (&tmp, 1024);
-         break;
-
-       case 'c':
-         overflow = 0;
-         break;
-
-       case 'E': /* exa or exbi */
-         overflow = bkm_scale_by_power (&tmp, base, 6);
-         break;
-
-       case 'G': /* giga or gibi */
-       case 'g': /* 'g' is undocumented; for compatibility only */
-         overflow = bkm_scale_by_power (&tmp, base, 3);
-         break;
-
-       case 'k': /* kilo */
-       case 'K': /* kibi */
-         overflow = bkm_scale_by_power (&tmp, base, 1);
-         break;
-
-       case 'M': /* mega or mebi */
-       case 'm': /* 'm' is undocumented; for compatibility only */
-         overflow = bkm_scale_by_power (&tmp, base, 2);
-         break;
-
-       case 'P': /* peta or pebi */
-         overflow = bkm_scale_by_power (&tmp, base, 5);
-         break;
-
-       case 'T': /* tera or tebi */
-       case 't': /* 't' is undocumented; for compatibility only */
-         overflow = bkm_scale_by_power (&tmp, base, 4);
-         break;
-
-       case 'w':
-         overflow = bkm_scale (&tmp, 2);
-         break;
-
-       case 'Y': /* yotta or 2**80 */
-         overflow = bkm_scale_by_power (&tmp, base, 8);
-         break;
-
-       case 'Z': /* zetta or 2**70 */
-         overflow = bkm_scale_by_power (&tmp, base, 7);
-         break;
-
-       default:
-         *val = tmp;
-         return err | LONGINT_INVALID_SUFFIX_CHAR;
-       }
-
-      err |= overflow;
-      *p += suffixes;
-      if (**p)
-       err |= LONGINT_INVALID_SUFFIX_CHAR;
-    }
-
-  *val = tmp;
-  return err;
-}
diff --git a/lib/xstrtol.h b/lib/xstrtol.h
deleted file mode 100644 (file)
index 9ac168b..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/* A more useful interface to strtol.
-
-   Copyright (C) 1995, 1996, 1998, 1999, 2001, 2002, 2003, 2004, 2006, 2007,
-   2008 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 XSTRTOL_H_
-# define XSTRTOL_H_ 1
-
-# include <getopt.h>
-# include <inttypes.h>
-
-# ifndef _STRTOL_ERROR
-enum strtol_error
-  {
-    LONGINT_OK = 0,
-
-    /* These two values can be ORed together, to indicate that both
-       errors occurred.  */
-    LONGINT_OVERFLOW = 1,
-    LONGINT_INVALID_SUFFIX_CHAR = 2,
-
-    LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW = (LONGINT_INVALID_SUFFIX_CHAR
-                                                | LONGINT_OVERFLOW),
-    LONGINT_INVALID = 4
-  };
-typedef enum strtol_error strtol_error;
-# endif
-
-# define _DECLARE_XSTRTOL(name, type) \
-  strtol_error name (const char *, char **, int, type *, const char *);
-_DECLARE_XSTRTOL (xstrtol, long int)
-_DECLARE_XSTRTOL (xstrtoul, unsigned long int)
-_DECLARE_XSTRTOL (xstrtoimax, intmax_t)
-_DECLARE_XSTRTOL (xstrtoumax, uintmax_t)
-
-#ifndef __attribute__
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
-#  define __attribute__(x)
-# endif
-#endif
-
-#ifndef ATTRIBUTE_NORETURN
-# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
-#endif
-
-/* Report an error for an invalid integer in an option argument.
-
-   ERR is the error code returned by one of the xstrto* functions.
-
-   Use OPT_IDX to decide whether to print the short option string "C"
-   or "-C" or a long option string derived from LONG_OPTION.  OPT_IDX
-   is -2 if the short option "C" was used, without any leading "-"; it
-   is -1 if the short option "-C" was used; otherwise it is an index
-   into LONG_OPTIONS, which should have a name preceded by two '-'
-   characters.
-
-   ARG is the option-argument containing the integer.
-
-   After reporting an error, exit with a failure status.  */
-
-void xstrtol_fatal (enum strtol_error,
-                   int, char, struct option const *,
-                   char const *) ATTRIBUTE_NORETURN;
-
-#endif /* not XSTRTOL_H_ */
diff --git a/lib/xstrtoul.c b/lib/xstrtoul.c
deleted file mode 100644 (file)
index 285f7b9..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#define __strtol strtoul
-#define __strtol_t unsigned long int
-#define __xstrtol xstrtoul
-#define STRTOL_T_MINIMUM 0
-#define STRTOL_T_MAXIMUM ULONG_MAX
-#include "xstrtol.c"
diff --git a/lib/xstrtoumax.c b/lib/xstrtoumax.c
deleted file mode 100644 (file)
index 9a2349f..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#define __strtol strtoumax
-#define __strtol_t uintmax_t
-#define __xstrtol xstrtoumax
-#define STRTOL_T_MINIMUM 0
-#define STRTOL_T_MAXIMUM UINTMAX_MAX
-#include "xstrtol.c"
index d4d04d1530a27c0921a542c6978da037107b9ee0..301469b31cef0ba55efc7c41e701ae5fa715834d 100644 (file)
@@ -1,5 +1,5 @@
 # 00gnulib.m4 serial 2
-dnl Copyright (C) 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 4b978e137cbe7c2d9f76baa6546764f6e2f7a0a6..f3ee34380cda13d5463e465bdb2c6d691169d449 100644 (file)
@@ -1,5 +1,6 @@
 # alloca.m4 serial 9
-dnl Copyright (C) 2002-2004, 2006, 2007, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2004, 2006-2007, 2009-2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index beda5a119134636c4acc886ed1b768958fc713e8..510fef9e48585163f7ebfa0569eaeb847196d49d 100644 (file)
@@ -1,5 +1,5 @@
 #serial 3
-dnl Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+dnl Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 7263a562ebc7052b47e03116e59340227a99aefa..819425bbb73bac8bd659edfb272be20ab1ab865f 100644 (file)
@@ -1,5 +1,5 @@
-# argp.m4 serial 9
-dnl Copyright (C) 2003-2007, 2009 Free Software Foundation, Inc.
+# argp.m4 serial 10
+dnl Copyright (C) 2003-2007, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -11,19 +11,19 @@ AC_DEFUN([gl_ARGP],
   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
   dnl argp-parse.c depends on GNU getopt internals, therefore use GNU getopt
   dnl always.
-  gl_GETOPT_SUBSTITUTE
-  dnl Note: gl_GETOPT_SUBSTITUTE does AC_LIBOBJ([getopt]), AC_LIBOBJ([getopt1]).
+  gl_REPLACE_GETOPT
+  dnl Note: gl_REPLACE_GETOPT does AC_LIBOBJ([getopt]), AC_LIBOBJ([getopt1]).
 
   AC_CHECK_DECL([program_invocation_name],
                 [AC_DEFINE([HAVE_DECL_PROGRAM_INVOCATION_NAME], [1],
                            [Define if program_invocation_name is declared])],
-               [AC_DEFINE([GNULIB_PROGRAM_INVOCATION_NAME], [1],
+                [AC_DEFINE([GNULIB_PROGRAM_INVOCATION_NAME], [1],
                            [Define to 1 to add extern declaration of program_invocation_name to argp.h])],
                 [#include <errno.h>])
   AC_CHECK_DECL([program_invocation_short_name],
                 [AC_DEFINE([HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME], [1],
                            [Define if program_invocation_short_name is declared])],
-               [AC_DEFINE([GNULIB_PROGRAM_INVOCATION_SHORT_NAME], [1],
+                [AC_DEFINE([GNULIB_PROGRAM_INVOCATION_SHORT_NAME], [1],
                            [Define to 1 to add extern declaration of program_invocation_short_name to argp.h])],
                 [#include <errno.h>])
 
index effbce6e914c3e8d36beb2186939595cb60831c8..0725ea925653ca93d6dfc5c167c64881a36add1b 100644 (file)
@@ -1,5 +1,5 @@
 # backupfile.m4 serial 12
-dnl Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index eb05c36eac6d7dfc0e231a97c1ab03f1216b18b9..260cba6a60b42b3b55f5112afb10baac6e72a9d1 100644 (file)
@@ -1,6 +1,6 @@
 # serial 5
 
-# Copyright (C) 2002, 2005, 2009 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2005, 2009, 2010 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
index 64ff82906155bcfbf1cfdaaa4258c3221bbcebfa..2c75c8fb02a6e8794a140f44f4ce49d86028e4df 100644 (file)
@@ -1,5 +1,5 @@
-# btowc.m4 serial 3
-dnl Copyright (C) 2008 Free Software Foundation, Inc.
+# btowc.m4 serial 5
+dnl Copyright (C) 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -8,6 +8,11 @@ AC_DEFUN([gl_FUNC_BTOWC],
 [
   AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
 
+  dnl Check whether <wchar.h> is usable at all, first. Otherwise the test
+  dnl program below may lead to an endless loop. See
+  dnl <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>.
+  AC_REQUIRE([gl_WCHAR_H_INLINE_OK])
+
   AC_CHECK_FUNCS_ONCE([btowc])
   if test $ac_cv_func_btowc = no; then
     HAVE_BTOWC=0
@@ -47,7 +52,7 @@ int main ()
 }],
             [gl_cv_func_btowc_eof=yes],
             [gl_cv_func_btowc_eof=no],
-            [])
+            [:])
         fi
       ])
     case "$gl_cv_func_btowc_eof" in
diff --git a/m4/canonicalize-lgpl.m4 b/m4/canonicalize-lgpl.m4
deleted file mode 100644 (file)
index 3a8ee2f..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-# canonicalize-lgpl.m4 serial 5
-dnl Copyright (C) 2003, 2006-2007, 2009 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_CANONICALIZE_LGPL],
-[
-  dnl Do this replacement check manually because the file name is shorter
-  dnl than the function name.
-  AC_CHECK_DECLS_ONCE([canonicalize_file_name])
-  AC_CHECK_FUNCS_ONCE([canonicalize_file_name])
-  if test $ac_cv_func_canonicalize_file_name = no; then
-    AC_LIBOBJ([canonicalize-lgpl])
-    AC_DEFINE([realpath], [rpl_realpath],
-      [Define to a replacement function name for realpath().])
-    gl_PREREQ_CANONICALIZE_LGPL
-  fi
-])
-
-# Like gl_CANONICALIZE_LGPL, except prepare for separate compilation
-# (no AC_LIBOBJ).
-AC_DEFUN([gl_CANONICALIZE_LGPL_SEPARATE],
-[
-  AC_CHECK_DECLS_ONCE([canonicalize_file_name])
-  AC_CHECK_FUNCS_ONCE([canonicalize_file_name])
-  gl_PREREQ_CANONICALIZE_LGPL
-])
-
-# Prerequisites of lib/canonicalize-lgpl.c.
-AC_DEFUN([gl_PREREQ_CANONICALIZE_LGPL],
-[
-  AC_CHECK_HEADERS_ONCE([sys/param.h unistd.h])
-  AC_CHECK_FUNCS_ONCE([getcwd readlink])
-])
diff --git a/m4/canonicalize.m4 b/m4/canonicalize.m4
new file mode 100644 (file)
index 0000000..d418de8
--- /dev/null
@@ -0,0 +1,81 @@
+# canonicalize.m4 serial 16
+
+dnl Copyright (C) 2003-2007, 2009-2010 Free Software Foundation, Inc.
+
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Provides canonicalize_file_name and canonicalize_filename_mode, but does
+# not provide or fix realpath.
+AC_DEFUN([gl_FUNC_CANONICALIZE_FILENAME_MODE],
+[
+  AC_LIBOBJ([canonicalize])
+
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+  AC_CHECK_FUNCS_ONCE([canonicalize_file_name])
+  AC_REQUIRE([gl_DOUBLE_SLASH_ROOT])
+  AC_REQUIRE([gl_FUNC_REALPATH_WORKS])
+  if test $ac_cv_func_canonicalize_file_name = no; then
+    HAVE_CANONICALIZE_FILE_NAME=0
+  elif test "$gl_cv_func_realpath_works" != yes; then
+    REPLACE_CANONICALIZE_FILE_NAME=1
+  fi
+])
+
+# Provides canonicalize_file_name and realpath.
+AC_DEFUN([gl_CANONICALIZE_LGPL],
+[
+  AC_REQUIRE([gl_CANONICALIZE_LGPL_SEPARATE])
+  if test $ac_cv_func_canonicalize_file_name = no; then
+    HAVE_CANONICALIZE_FILE_NAME=0
+    AC_LIBOBJ([canonicalize-lgpl])
+    if test $ac_cv_func_realpath = no; then
+      HAVE_REALPATH=0
+    elif test "$gl_cv_func_realpath_works" != yes; then
+      REPLACE_REALPATH=1
+    fi
+  elif test "$gl_cv_func_realpath_works" != yes; then
+    AC_LIBOBJ([canonicalize-lgpl])
+    REPLACE_REALPATH=1
+    REPLACE_CANONICALIZE_FILE_NAME=1
+  fi
+])
+
+# Like gl_CANONICALIZE_LGPL, except prepare for separate compilation
+# (no AC_LIBOBJ).
+AC_DEFUN([gl_CANONICALIZE_LGPL_SEPARATE],
+[
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+  AC_CHECK_FUNCS_ONCE([canonicalize_file_name getcwd readlink])
+  AC_REQUIRE([gl_DOUBLE_SLASH_ROOT])
+  AC_REQUIRE([gl_FUNC_REALPATH_WORKS])
+  AC_CHECK_HEADERS_ONCE([sys/param.h])
+])
+
+# Check whether realpath works.  Assume that if a platform has both
+# realpath and canonicalize_file_name, but the former is broken, then
+# so is the latter.
+AC_DEFUN([gl_FUNC_REALPATH_WORKS],
+[
+  AC_CHECK_FUNCS_ONCE([realpath])
+  AC_CACHE_CHECK([whether realpath works], [gl_cv_func_realpath_works], [
+    touch conftest.a
+    AC_RUN_IFELSE([
+      AC_LANG_PROGRAM([[
+        #include <stdlib.h>
+      ]], [[
+        char *name1 = realpath ("conftest.a", NULL);
+        char *name2 = realpath ("conftest.b/../conftest.a", NULL);
+        char *name3 = realpath ("conftest.a/", NULL);
+        return !(name1 && *name1 == '/' && !name2 && !name3);
+      ]])
+    ], [gl_cv_func_realpath_works=yes], [gl_cv_func_realpath_works=no],
+       [gl_cv_func_realpath_works="guessing no"])
+  ])
+  if test "$gl_cv_func_realpath_works" = yes; then
+    AC_DEFINE([FUNC_REALPATH_WORKS], [1], [Define to 1 if realpath()
+      can malloc memory, always gives an absolute path, and handles
+      trailing slash correctly.])
+  fi
+])
index 7f34f60cfecfebbf6ad2cabdfffb101c454b086f..17fe727a6c96a2c3aca705a63f90296b1b2c5a28 100644 (file)
@@ -1,4 +1,4 @@
-#serial 10
+#serial 11
 
 # Use Gnulib's robust chdir function.
 # It can handle arbitrarily long directory names, which means
@@ -6,7 +6,7 @@
 # never fails with ENAMETOOLONG.
 # Arrange to compile chdir-long.c only on systems that define PATH_MAX.
 
-dnl Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+dnl Copyright (C) 2004-2007, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -34,5 +34,6 @@ have_arbitrary_file_name_length_limit
 
 AC_DEFUN([gl_PREREQ_CHDIR_LONG],
 [
+  AC_REQUIRE([AC_C_INLINE])
   :
 ])
index 5d30ae3426293399990697201f7a6f1e69149d0c..0c32fa39ff623c068bd5ecb3d5d1927c0acbf12d 100644 (file)
@@ -1,8 +1,8 @@
-# serial 18
+# serial 22
 # Determine whether we need the chown wrapper.
 
-dnl Copyright (C) 1997-2001, 2003-2005, 2007, 2009
-dnl Free Software Foundation, Inc.
+dnl Copyright (C) 1997-2001, 2003-2005, 2007, 2009-2010 Free Software
+dnl Foundation, Inc.
 
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -14,58 +14,120 @@ dnl with or without modifications, as long as this notice is preserved.
 
 # From Jim Meyering.
 
-AC_DEFUN([gl_FUNC_CHOWN],
+AC_DEFUN_ONCE([gl_FUNC_CHOWN],
 [
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
   AC_REQUIRE([AC_TYPE_UID_T])
   AC_REQUIRE([AC_FUNC_CHOWN])
   AC_REQUIRE([gl_FUNC_CHOWN_FOLLOWS_SYMLINK])
+  AC_CHECK_FUNCS_ONCE([chown fchown])
 
-  if test $ac_cv_func_chown_works = no; then
-    AC_DEFINE([CHOWN_FAILS_TO_HONOR_ID_OF_NEGATIVE_ONE], [1],
-      [Define if chown is not POSIX compliant regarding IDs of -1.])
-  fi
-
-  # If chown has either of the above problems, then we need the wrapper.
-  if test $ac_cv_func_chown_works$gl_cv_func_chown_follows_symlink = yesyes; then
-    : # no wrapper needed
-  else
-    REPLACE_CHOWN=1
+  dnl mingw lacks chown altogether.
+  if test $ac_cv_func_chown = no; then
+    HAVE_CHOWN=0
     AC_LIBOBJ([chown])
-    gl_PREREQ_CHOWN
+  else
+    dnl Some old systems treated chown like lchown.
+    if test $gl_cv_func_chown_follows_symlink = no; then
+      REPLACE_CHOWN=1
+      AC_LIBOBJ([chown])
+    fi
+
+    dnl Some old systems tried to use uid/gid -1 literally.
+    if test $ac_cv_func_chown_works = no; then
+      AC_DEFINE([CHOWN_FAILS_TO_HONOR_ID_OF_NEGATIVE_ONE], [1],
+        [Define if chown is not POSIX compliant regarding IDs of -1.])
+      REPLACE_CHOWN=1
+      AC_LIBOBJ([chown])
+    fi
+
+    dnl Solaris 9 ignores trailing slash.
+    dnl FreeBSD 7.2 mishandles trailing slash on symlinks.
+    AC_CACHE_CHECK([whether chown honors trailing slash],
+      [gl_cv_func_chown_slash_works],
+      [touch conftest.file && rm -f conftest.link
+       AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+]], [[    if (symlink ("conftest.file", "conftest.link")) return 1;
+          if (chown ("conftest.link/", getuid (), getgid ()) == 0) return 2;
+        ]])],
+        [gl_cv_func_chown_slash_works=yes],
+        [gl_cv_func_chown_slash_works=no],
+        [gl_cv_func_chown_slash_works="guessing no"])
+      rm -f conftest.link conftest.file])
+    if test "$gl_cv_func_chown_slash_works" != yes; then
+      AC_DEFINE([CHOWN_TRAILING_SLASH_BUG], [1],
+        [Define to 1 if chown mishandles trailing slash.])
+      REPLACE_CHOWN=1
+      AC_LIBOBJ([chown])
+    fi
+
+    dnl OpenBSD fails to update ctime if ownership does not change.
+    AC_CACHE_CHECK([whether chown always updates ctime],
+      [gl_cv_func_chown_ctime_works],
+      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+]], [[    struct stat st1, st2;
+          if (close (creat ("conftest.file", 0600))) return 1;
+          if (stat ("conftest.file", &st1)) return 2;
+          sleep (1);
+          if (chown ("conftest.file", st1.st_uid, st1.st_gid)) return 3;
+          if (stat ("conftest.file", &st2)) return 4;
+          if (st2.st_ctime <= st1.st_ctime) return 5;
+        ]])],
+        [gl_cv_func_chown_ctime_works=yes],
+        [gl_cv_func_chown_ctime_works=no],
+        [gl_cv_func_chown_ctime_works="guessing no"])
+      rm -f conftest.file])
+    if test "$gl_cv_func_chown_ctime_works" != yes; then
+      AC_DEFINE([CHOWN_CHANGE_TIME_BUG], [1], [Define to 1 if chown fails
+        to change ctime when at least one argument was not -1.])
+      REPLACE_CHOWN=1
+      AC_LIBOBJ([chown])
+    fi
+
+    if test $REPLACE_CHOWN = 1 && test $ac_cv_func_fchown = no; then
+      AC_LIBOBJ([fchown-stub])
+    fi
   fi
 ])
 
 # Determine whether chown follows symlinks (it should).
-AC_DEFUN([gl_FUNC_CHOWN_FOLLOWS_SYMLINK],
+AC_DEFUN_ONCE([gl_FUNC_CHOWN_FOLLOWS_SYMLINK],
 [
   AC_CACHE_CHECK(
-    [whether chown(2) dereferences symlinks],
-    gl_cv_func_chown_follows_symlink,
+    [whether chown dereferences symlinks],
+    [gl_cv_func_chown_follows_symlink],
     [
       AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <unistd.h>
 #include <stdlib.h>
 #include <errno.h>
 
-       int
-       main ()
-       {
-         char const *dangling_symlink = "conftest.dangle";
+        int
+        main ()
+        {
+          char const *dangling_symlink = "conftest.dangle";
 
-         unlink (dangling_symlink);
-         if (symlink ("conftest.no-such", dangling_symlink))
-           abort ();
+          unlink (dangling_symlink);
+          if (symlink ("conftest.no-such", dangling_symlink))
+            abort ();
 
-         /* Exit successfully on a conforming system,
-            i.e., where chown must fail with ENOENT.  */
-         exit ( ! (chown (dangling_symlink, getuid (), getgid ()) != 0
-                   && errno == ENOENT));
-       }
-       ]])],
-       [gl_cv_func_chown_follows_symlink=yes],
-       [gl_cv_func_chown_follows_symlink=no],
-       [gl_cv_func_chown_follows_symlink=yes]
+          /* Exit successfully on a conforming system,
+             i.e., where chown must fail with ENOENT.  */
+          exit ( ! (chown (dangling_symlink, getuid (), getgid ()) != 0
+                    && errno == ENOENT));
+        }
+        ]])],
+        [gl_cv_func_chown_follows_symlink=yes],
+        [gl_cv_func_chown_follows_symlink=no],
+        [gl_cv_func_chown_follows_symlink=yes]
       )
     ]
   )
@@ -75,9 +137,3 @@ AC_DEFUN([gl_FUNC_CHOWN_FOLLOWS_SYMLINK],
       [Define if chown modifies symlinks.])
   fi
 ])
-
-# Prerequisites of lib/chown.c.
-AC_DEFUN([gl_PREREQ_CHOWN],
-[
-  AC_CHECK_FUNC([fchown], , [AC_LIBOBJ([fchown-stub])])
-])
index d191072f57be7c1b79b1a04b1020581169d33ae0..8be179db8730c7b0d015c2ab360f43a63989c4d5 100644 (file)
@@ -1,5 +1,5 @@
-# clock_time.m4 serial 9
-dnl Copyright (C) 2002-2006, 2009 Free Software Foundation, Inc.
+# clock_time.m4 serial 10
+dnl Copyright (C) 2002-2006, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -20,11 +20,12 @@ AC_DEFUN([gl_CLOCK_TIME],
   # Save and restore LIBS so e.g., -lrt, isn't added to it.  Otherwise, *all*
   # programs in the package would end up linked with that potentially-shared
   # library, inducing unnecessary run-time overhead.
+  LIB_CLOCK_GETTIME=
+  AC_SUBST([LIB_CLOCK_GETTIME])
   gl_saved_libs=$LIBS
     AC_SEARCH_LIBS([clock_gettime], [rt posix4],
                    [test "$ac_cv_search_clock_gettime" = "none required" ||
                     LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime])
-    AC_SUBST([LIB_CLOCK_GETTIME])
     AC_CHECK_FUNCS([clock_gettime clock_settime])
   LIBS=$gl_saved_libs
 ])
index b1f9d5477c39a4b2f3dfa7ec25ec16318cabe146..40d999dc650f062c9b33c702521653e907f14049 100644 (file)
@@ -1,5 +1,5 @@
 #serial 3
-dnl Copyright (C) 2006-2007 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2007, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 29d3abdd1365850bfc885d15688ee86dd3dea81e..1ee3add9b998a2c33893357e6af73201842519a0 100644 (file)
@@ -1,5 +1,5 @@
-# close.m4 serial 2
-dnl Copyright (C) 2008 Free Software Foundation, Inc.
+# close.m4 serial 5
+dnl Copyright (C) 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -9,6 +9,9 @@ AC_DEFUN([gl_FUNC_CLOSE],
   m4_ifdef([gl_PREREQ_SYS_H_WINSOCK2], [
     gl_PREREQ_SYS_H_WINSOCK2
     if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then
+      dnl Even if the 'socket' module is not used here, another part of the
+      dnl application may use it and pass file descriptors that refer to
+      dnl sockets to the close() function. So enable the support for sockets.
       gl_REPLACE_CLOSE
     fi
   ])
@@ -17,11 +20,7 @@ AC_DEFUN([gl_FUNC_CLOSE],
 AC_DEFUN([gl_REPLACE_CLOSE],
 [
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
-  if test $REPLACE_CLOSE != 1; then
-    AC_LIBOBJ([close])
-  fi
   REPLACE_CLOSE=1
+  AC_LIBOBJ([close])
   gl_REPLACE_FCLOSE
-  LIB_CLOSE="-lws2_32"
-  AC_SUBST([LIB_CLOSE])
 ])
index 55a65f0464b262bc72a83b6c93b3997f5ad2bc53..946944ecda8e65fa37c0ce8ea915d2fc8c0b8e23 100644 (file)
@@ -1,5 +1,6 @@
 # closeout.m4 serial 5
-dnl Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 413217bd4a5f9ebb295528989c6e4e906c9438eb..a53c04260c0f5c1c347210fb7eb7e4ff63b41cb1 100644 (file)
@@ -1,5 +1,5 @@
 # codeset.m4 serial 4 (gettext-0.18)
-dnl Copyright (C) 2000-2002, 2006, 2008, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2000-2002, 2006, 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 9bab8f14943251c58f1df826f99a20ec2f1385ae..b019ae58790fbf8aa395c0eb9550b23659b598b9 100644 (file)
@@ -5,7 +5,7 @@ dnl
 dnl Check whether struct dirent has a member named d_ino.
 dnl
 
-# Copyright (C) 1997, 1999-2001, 2003-2004, 2006-2007, 2009 Free Software
+# Copyright (C) 1997, 1999-2001, 2003-2004, 2006-2007, 2009-2010 Free Software
 # Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
@@ -14,25 +14,25 @@ dnl
 
 AC_DEFUN([gl_CHECK_TYPE_STRUCT_DIRENT_D_INO],
   [AC_CACHE_CHECK([for d_ino member in directory struct],
-                 gl_cv_struct_dirent_d_ino,
+                  gl_cv_struct_dirent_d_ino,
      [AC_RUN_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[#include <sys/types.h>
-            #include <sys/stat.h>
-            #include <dirent.h>
-          ]],
-          [[DIR *dp = opendir (".");
-            struct dirent *e;
-            struct stat st;
-            if (! dp)
-              return 1;
-            e = readdir (dp);
-            return ! (e
-                      && stat (e->d_name, &st) == 0
-                      && e->d_ino == st.st_ino);]])],
-           [gl_cv_struct_dirent_d_ino=yes],
-           [gl_cv_struct_dirent_d_ino=no],
-           [gl_cv_struct_dirent_d_ino=no])])
+        [AC_LANG_PROGRAM(
+           [[#include <sys/types.h>
+             #include <sys/stat.h>
+             #include <dirent.h>
+           ]],
+           [[DIR *dp = opendir (".");
+             struct dirent *e;
+             struct stat st;
+             if (! dp)
+               return 1;
+             e = readdir (dp);
+             return ! (e
+                       && stat (e->d_name, &st) == 0
+                       && e->d_ino == st.st_ino);]])],
+            [gl_cv_struct_dirent_d_ino=yes],
+            [gl_cv_struct_dirent_d_ino=no],
+            [gl_cv_struct_dirent_d_ino=no])])
    if test $gl_cv_struct_dirent_d_ino = yes; then
      AC_DEFINE([D_INO_IN_DIRENT], [1],
        [Define if struct dirent has a member d_ino that actually works.])
diff --git a/m4/dirent-safer.m4 b/m4/dirent-safer.m4
new file mode 100644 (file)
index 0000000..c48f3dc
--- /dev/null
@@ -0,0 +1,11 @@
+#serial 1
+dnl Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_DIRENT_SAFER],
+[
+  AC_CHECK_FUNCS_ONCE([fdopendir])
+  AC_LIBOBJ([opendir-safer])
+])
index e507e3de8c80c25dff857cc926c6b494aa90f20e..c3292d9cc07270f029f4cbc7616c8552df3837e5 100644 (file)
@@ -1,5 +1,5 @@
-# dirent_h.m4 serial 4
-dnl Copyright (C) 2008-2009 Free Software Foundation, Inc.
+# dirent_h.m4 serial 10
+dnl Copyright (C) 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -12,14 +12,20 @@ AC_DEFUN([gl_DIRENT_H],
   dnl once only, before all statements that occur in other macros.
   AC_REQUIRE([gl_DIRENT_H_DEFAULTS])
 
+  dnl <dirent.h> is always overridden, because of GNULIB_POSIXCHECK.
   gl_CHECK_NEXT_HEADERS([dirent.h])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[#include <dirent.h>
+    ]], [alphasort dirfd fdopendir scandir])
 ])
 
 dnl Unconditionally enables the replacement of <dirent.h>.
 AC_DEFUN([gl_REPLACE_DIRENT_H],
 [
-  AC_REQUIRE([gl_DIRENT_H_DEFAULTS])
-  DIRENT_H='dirent.h'
+  dnl This is a no-op, because <dirent.h> is always overridden.
+  :
 ])
 
 AC_DEFUN([gl_DIRENT_MODULE_INDICATOR],
@@ -27,17 +33,23 @@ AC_DEFUN([gl_DIRENT_MODULE_INDICATOR],
   dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
   AC_REQUIRE([gl_DIRENT_H_DEFAULTS])
   GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR([$1])
 ])
 
 AC_DEFUN([gl_DIRENT_H_DEFAULTS],
 [
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl for REPLACE_FCHDIR
-  GNULIB_DIRFD=0;     AC_SUBST([GNULIB_DIRFD])
-  GNULIB_SCANDIR=0;   AC_SUBST([GNULIB_SCANDIR])
-  GNULIB_ALPHASORT=0; AC_SUBST([GNULIB_ALPHASORT])
+  GNULIB_DIRFD=0;       AC_SUBST([GNULIB_DIRFD])
+  GNULIB_FDOPENDIR=0;   AC_SUBST([GNULIB_FDOPENDIR])
+  GNULIB_SCANDIR=0;     AC_SUBST([GNULIB_SCANDIR])
+  GNULIB_ALPHASORT=0;   AC_SUBST([GNULIB_ALPHASORT])
   dnl Assume proper GNU behavior unless another module says otherwise.
-  HAVE_DECL_DIRFD=1; AC_SUBST([HAVE_DECL_DIRFD])
-  HAVE_SCANDIR=1;    AC_SUBST([HAVE_SCANDIR])
-  HAVE_ALPHASORT=1;  AC_SUBST([HAVE_ALPHASORT])
-  DIRENT_H='';       AC_SUBST([DIRENT_H])
+  HAVE_DECL_DIRFD=1;    AC_SUBST([HAVE_DECL_DIRFD])
+  HAVE_FDOPENDIR=1;     AC_SUBST([HAVE_FDOPENDIR])
+  HAVE_SCANDIR=1;       AC_SUBST([HAVE_SCANDIR])
+  HAVE_ALPHASORT=1;     AC_SUBST([HAVE_ALPHASORT])
+  REPLACE_CLOSEDIR=0;   AC_SUBST([REPLACE_CLOSEDIR])
+  REPLACE_FDOPENDIR=0;  AC_SUBST([REPLACE_FDOPENDIR])
+  REPLACE_OPENDIR=0;    AC_SUBST([REPLACE_OPENDIR])
 ])
index 5f845f5cdae85ef3d375a4970d9b67cfce215db8..7fefa2e483acfa164b4109829b0339dff123e2a3 100644 (file)
@@ -1,8 +1,8 @@
-# serial 16   -*- Autoconf -*-
+# serial 17   -*- Autoconf -*-
 
 dnl Find out how to get the file descriptor associated with an open DIR*.
 
-# Copyright (C) 2001-2006, 2008-2009 Free Software Foundation, Inc.
+# Copyright (C) 2001-2006, 2008-2010 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -46,34 +46,34 @@ AC_DEFUN([gl_FUNC_DIRFD],
       = no,no,no; then
     AC_REPLACE_FUNCS([dirfd])
     AC_CACHE_CHECK(
-             [how to get the file descriptor associated with an open DIR*],
-                  gl_cv_sys_dir_fd_member_name,
+              [how to get the file descriptor associated with an open DIR*],
+                   gl_cv_sys_dir_fd_member_name,
       [
-       dirfd_save_CFLAGS=$CFLAGS
-       for ac_expr in d_fd dd_fd; do
+        dirfd_save_CFLAGS=$CFLAGS
+        for ac_expr in d_fd dd_fd; do
 
-         CFLAGS="$CFLAGS -DDIR_FD_MEMBER_NAME=$ac_expr"
-         AC_TRY_COMPILE(
-           [#include <sys/types.h>
-            #include <dirent.h>],
-           [DIR *dir_p = opendir("."); (void) dir_p->DIR_FD_MEMBER_NAME;],
-           dir_fd_found=yes
-         )
-         CFLAGS=$dirfd_save_CFLAGS
-         test "$dir_fd_found" = yes && break
-       done
-       test "$dir_fd_found" = yes || ac_expr=no_such_member
+          CFLAGS="$CFLAGS -DDIR_FD_MEMBER_NAME=$ac_expr"
+          AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+             #include <sys/types.h>
+             #include <dirent.h>]],
+            [[DIR *dir_p = opendir("."); (void) dir_p->DIR_FD_MEMBER_NAME;]])],
+            [dir_fd_found=yes]
+          )
+          CFLAGS=$dirfd_save_CFLAGS
+          test "$dir_fd_found" = yes && break
+        done
+        test "$dir_fd_found" = yes || ac_expr=no_such_member
 
-       gl_cv_sys_dir_fd_member_name=$ac_expr
+        gl_cv_sys_dir_fd_member_name=$ac_expr
       ]
     )
     if test $gl_cv_sys_dir_fd_member_name != no_such_member; then
       AC_DEFINE_UNQUOTED([DIR_FD_MEMBER_NAME],
-       $gl_cv_sys_dir_fd_member_name,
-       [the name of the file descriptor member of DIR])
+        $gl_cv_sys_dir_fd_member_name,
+        [the name of the file descriptor member of DIR])
     fi
     AH_VERBATIM(DIR_TO_FD,
-               [#ifdef DIR_FD_MEMBER_NAME
+                [#ifdef DIR_FD_MEMBER_NAME
 # define DIR_TO_FD(Dir_p) ((Dir_p)->DIR_FD_MEMBER_NAME)
 #else
 # define DIR_TO_FD(Dir_p) -1
index e35da96582ba767db34fe7f1dfa73c046dfcca17..576b5bead2ad304bae9abe1168759947ec80ce80 100644 (file)
@@ -1,18 +1,26 @@
-#serial 7   -*- autoconf -*-
-dnl Copyright (C) 2002-2006 Free Software Foundation, Inc.
+#serial 8   -*- autoconf -*-
+dnl Copyright (C) 2002-2006, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 AC_DEFUN([gl_DIRNAME],
 [
+  AC_REQUIRE([gl_DIRNAME_LGPL])
   AC_LIBOBJ([basename])
   AC_LIBOBJ([dirname])
+])
+
+AC_DEFUN([gl_DIRNAME_LGPL],
+[
+  AC_LIBOBJ([basename-lgpl])
+  AC_LIBOBJ([dirname-lgpl])
   AC_LIBOBJ([stripslash])
 
   dnl Prerequisites of lib/dirname.h.
   AC_REQUIRE([gl_AC_DOS])
   AC_REQUIRE([gl_DOUBLE_SLASH_ROOT])
 
-  dnl No prerequisites of lib/basename.c, lib/dirname.c, lib/stripslash.c.
+  dnl No prerequisites of lib/basename-lgpl.c, lib/dirname-lgpl.c,
+  dnl lib/stripslash.c.
 ])
index dd59571c0b06c62a66d75c04f50e6225cb2923b0..5660542be880a2f714e971adcfbf05c1b4c81168 100644 (file)
--- a/m4/dos.m4
+++ b/m4/dos.m4
@@ -1,9 +1,9 @@
-#serial 10   -*- autoconf -*-
+#serial 11   -*- autoconf -*-
 
 # Define some macros required for proper operation of code in lib/*.c
 # on MSDOS/Windows systems.
 
-# Copyright (C) 2000, 2001, 2004, 2005, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2000-2001, 2004-2006, 2009-2010 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -14,31 +14,31 @@ AC_DEFUN([gl_AC_DOS],
   [
     AC_CACHE_CHECK([whether system is Windows or MSDOS], [ac_cv_win_or_dos],
       [
-       AC_TRY_COMPILE([],
-       [#if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __CYGWIN__
+        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
+#if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __CYGWIN__
 neither MSDOS nor Windows
-#endif],
-       [ac_cv_win_or_dos=yes],
-       [ac_cv_win_or_dos=no])
+#endif]])],
+        [ac_cv_win_or_dos=yes],
+        [ac_cv_win_or_dos=no])
       ])
 
     if test x"$ac_cv_win_or_dos" = xyes; then
       ac_fs_accepts_drive_letter_prefix=1
       ac_fs_backslash_is_file_name_separator=1
       AC_CACHE_CHECK([whether drive letter can start relative path],
-                    [ac_cv_drive_letter_can_be_relative],
-       [
-         AC_TRY_COMPILE([],
-         [#if defined __CYGWIN__
+                     [ac_cv_drive_letter_can_be_relative],
+        [
+          AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
+#if defined __CYGWIN__
 drive letters are always absolute
-#endif],
-         [ac_cv_drive_letter_can_be_relative=yes],
-         [ac_cv_drive_letter_can_be_relative=no])
-       ])
+#endif]])],
+          [ac_cv_drive_letter_can_be_relative=yes],
+          [ac_cv_drive_letter_can_be_relative=no])
+        ])
       if test x"$ac_cv_drive_letter_can_be_relative" = xyes; then
-       ac_fs_drive_letter_can_be_relative=1
+        ac_fs_drive_letter_can_be_relative=1
       else
-       ac_fs_drive_letter_can_be_relative=0
+        ac_fs_drive_letter_can_be_relative=0
       fi
     else
       ac_fs_accepts_drive_letter_prefix=0
index 8c6841bc83685a3bbeb54a126db640cda059a4db..66a79c0f217bcbd93b5a5e2323888c30b1598f8d 100644 (file)
@@ -1,5 +1,5 @@
 # double-slash-root.m4 serial 4   -*- Autoconf -*-
-dnl Copyright (C) 2006, 2008, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2006, 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -9,27 +9,27 @@ AC_DEFUN([gl_DOUBLE_SLASH_ROOT],
   AC_REQUIRE([AC_CANONICAL_HOST])
   AC_CACHE_CHECK([whether // is distinct from /], [gl_cv_double_slash_root],
     [ if test x"$cross_compiling" = xyes ; then
-       # When cross-compiling, there is no way to tell whether // is special
-       # short of a list of hosts.  However, the only known hosts to date
-       # that have a distinct // are Apollo DomainOS (too old to port to),
-       # Cygwin, and z/OS.  If anyone knows of another system for which // has
-       # special semantics and is distinct from /, please report it to
-       # <bug-gnulib@gnu.org>.
-       case $host in
-         *-cygwin | i370-ibm-openedition)
-           gl_cv_double_slash_root=yes ;;
-         *)
-           # Be optimistic and assume that / and // are the same when we
-           # don't know.
-           gl_cv_double_slash_root='unknown, assuming no' ;;
-       esac
+        # When cross-compiling, there is no way to tell whether // is special
+        # short of a list of hosts.  However, the only known hosts to date
+        # that have a distinct // are Apollo DomainOS (too old to port to),
+        # Cygwin, and z/OS.  If anyone knows of another system for which // has
+        # special semantics and is distinct from /, please report it to
+        # <bug-gnulib@gnu.org>.
+        case $host in
+          *-cygwin | i370-ibm-openedition)
+            gl_cv_double_slash_root=yes ;;
+          *)
+            # Be optimistic and assume that / and // are the same when we
+            # don't know.
+            gl_cv_double_slash_root='unknown, assuming no' ;;
+        esac
       else
-       set x `ls -di / // 2>/dev/null`
-       if test "$[2]" = "$[4]" && wc //dev/null >/dev/null 2>&1; then
-         gl_cv_double_slash_root=no
-       else
-         gl_cv_double_slash_root=yes
-       fi
+        set x `ls -di / // 2>/dev/null`
+        if test "$[2]" = "$[4]" && wc //dev/null >/dev/null 2>&1; then
+          gl_cv_double_slash_root=no
+        else
+          gl_cv_double_slash_root=yes
+        fi
       fi])
   if test "$gl_cv_double_slash_root" = yes; then
     AC_DEFINE([DOUBLE_SLASH_IS_DISTINCT_ROOT], [1],
index 054982359e8797502185fdd66064a47c7d3eedfd..998d66f83b1f3812227ac15199331d42d83b96ed 100644 (file)
@@ -1,5 +1,5 @@
-#serial 5
-dnl Copyright (C) 2002, 2005, 2007 Free Software Foundation, Inc.
+#serial 10
+dnl Copyright (C) 2002, 2005, 2007, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -7,9 +7,52 @@ dnl with or without modifications, as long as this notice is preserved.
 AC_DEFUN([gl_FUNC_DUP2],
 [
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST])
   AC_CHECK_FUNCS_ONCE([dup2])
   if test $ac_cv_func_dup2 = no; then
     HAVE_DUP2=0
     AC_LIBOBJ([dup2])
+  else
+    AC_CACHE_CHECK([whether dup2 works], [gl_cv_func_dup2_works],
+      [AC_RUN_IFELSE([
+         AC_LANG_PROGRAM([[#include <unistd.h>
+#include <errno.h>]],
+           [if (dup2 (1, 1) == 0)
+              return 1;
+            close (0);
+            if (dup2 (0, 0) != -1)
+              return 2;
+            /* Many gnulib modules require POSIX conformance of EBADF.  */
+            if (dup2 (1, 1000000) == -1 && errno != EBADF)
+              return 3;
+            return 0;
+           ])
+        ],
+        [gl_cv_func_dup2_works=yes], [gl_cv_func_dup2_works=no],
+        [case "$host_os" in
+           mingw*) # on this platform, dup2 always returns 0 for success
+             gl_cv_func_dup2_works=no;;
+           cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0
+             gl_cv_func_dup2_works=no;;
+           linux*) # On linux between 2008-07-27 and 2009-05-11, dup2 of a
+                   # closed fd may yield -EBADF instead of -1 / errno=EBADF.
+             gl_cv_func_dup2_works=no;;
+           freebsd*) # on FreeBSD 6.1, dup2(1,1000000) gives EMFILE, not EBADF.
+             gl_cv_func_dup2_works=no;;
+           *) gl_cv_func_dup2_works=yes;;
+         esac])
+      ])
+    if test "$gl_cv_func_dup2_works" = no; then
+      gl_REPLACE_DUP2
+    fi
   fi
 ])
+
+AC_DEFUN([gl_REPLACE_DUP2],
+[
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  if test $ac_cv_func_dup2 = yes; then
+    REPLACE_DUP2=1
+  fi
+  AC_LIBOBJ([dup2])
+])
index 3c9c0b52a130cef3b119bc405596acab0df125fb..63dd92022782779127b2e087cbf3056cf0a3e642 100644 (file)
@@ -1,5 +1,5 @@
 # eealloc.m4 serial 2
-dnl Copyright (C) 2003, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index b17bb60a75c6809b481deb74b5ead320bfe9688c..5f50d6e3b02e22fbee18e10803044fac5ff89a57 100644 (file)
@@ -1,10 +1,10 @@
-# environ.m4 serial 2
-dnl Copyright (C) 2001-2004, 2006-2009 Free Software Foundation, Inc.
+# environ.m4 serial 3
+dnl Copyright (C) 2001-2004, 2006-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
-AC_DEFUN([gl_ENVIRON],
+AC_DEFUN_ONCE([gl_ENVIRON],
 [
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
   dnl Persuade glibc <unistd.h> to declare environ.
index 4d77672cb70e7190bd36a09fe84c272d9c9c0766..d02a039363dda9dbd4eaf43d40e9cdbccb699446 100644 (file)
@@ -1,10 +1,9 @@
-# errno_h.m4 serial 4
-dnl Copyright (C) 2004, 2006, 2008, 2009 Free Software Foundation, Inc.
+# errno_h.m4 serial 6
+dnl Copyright (C) 2004, 2006, 2008, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
-dnl This macro must pass through AC_REQUIRE (never directly invoke it).
 AC_DEFUN_ONCE([gl_HEADER_ERRNO_H],
 [
   AC_REQUIRE([AC_PROG_CC])
@@ -35,6 +34,9 @@ booboo
 #if !defined ENOTSUP
 booboo
 #endif
+#if !defined ESTALE
+booboo
+#endif
 #if !defined ECANCELED
 booboo
 #endif
index 7c7746e2cc8ddbf6b94471cf666fca7fe8f1a4c9..9f1307a428e297d89b8ef96a9affe82dcf091384 100644 (file)
@@ -1,7 +1,6 @@
-#serial 11
+#serial 12
 
-# Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2004 Free Software
-# Foundation, Inc.
+# Copyright (C) 1996-1998, 2001-2004, 2009-2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -18,5 +17,6 @@ AC_DEFUN([gl_ERROR],
 AC_DEFUN([gl_PREREQ_ERROR],
 [
   AC_REQUIRE([AC_FUNC_STRERROR_R])
+  AC_REQUIRE([AC_C_INLINE])
   :
 ])
index 23727e6322710214e9ce3d13360d19e043bc8184..72328ca299e4c4e58a65c01e4e0de117bd6c7cc5 100644 (file)
@@ -1,5 +1,6 @@
 # exclude.m4 serial 7
-dnl Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2003, 2005, 2006, 2009, 2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/exitfail.m4 b/m4/exitfail.m4
deleted file mode 100644 (file)
index b7a691e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# exitfail.m4 serial 6
-dnl Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_EXITFAIL],
-[
-  AC_LIBOBJ([exitfail])
-
-  dnl No prerequisites of lib/exitfail.c.
-  :
-])
index ba6d5e190f9f2df6ae1b080fc8f2d16490b5e3b2..7d9458a8d65a0b085d93b695beaaa6685b824c18 100644 (file)
@@ -1,7 +1,7 @@
-# serial 8  -*- Autoconf -*-
+# serial 9  -*- Autoconf -*-
 # Enable extensions on systems that normally disable them.
 
-# Copyright (C) 2003, 2006-2009 Free Software Foundation, Inc.
+# Copyright (C) 2003, 2006-2010 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 # enough in this area it's likely we'll need to redefine
 # AC_USE_SYSTEM_EXTENSIONS for quite some time.
 
+# If autoconf reports a warning
+#     warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
+# or  warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
+# the fix is
+#   1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked
+#      but always AC_REQUIREd,
+#   2) to ensure that for each occurrence of
+#        AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+#      or
+#        AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+#      the corresponding gnulib module description has 'extensions' among
+#      its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS
+#      invocation occurs in gl_EARLY, not in gl_INIT.
+
 # AC_USE_SYSTEM_EXTENSIONS
 # ------------------------
 # Enable extensions on systems that normally disable them,
@@ -74,8 +88,8 @@ AC_BEFORE([$0], [AC_RUN_IFELSE])dnl
     [ac_cv_safe_to_define___extensions__],
     [AC_COMPILE_IFELSE(
        [AC_LANG_PROGRAM([[
-#        define __EXTENSIONS__ 1
-         ]AC_INCLUDES_DEFAULT])],
+#         define __EXTENSIONS__ 1
+          ]AC_INCLUDES_DEFAULT])],
        [ac_cv_safe_to_define___extensions__=yes],
        [ac_cv_safe_to_define___extensions__=no])])
   test $ac_cv_safe_to_define___extensions__ = yes &&
index d5dd3e2d065d0e3ab9b7ce5143aab72f9b1a5dca..c05e9255577ca727ff4f5522c944cab98e318ae0 100644 (file)
@@ -1,5 +1,5 @@
-# fchdir.m4 serial 7
-dnl Copyright (C) 2006-2009 Free Software Foundation, Inc.
+# fchdir.m4 serial 13
+dnl Copyright (C) 2006-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -8,16 +8,38 @@ AC_DEFUN([gl_FUNC_FCHDIR],
 [
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
   AC_REQUIRE([gl_DIRENT_H_DEFAULTS])
+  AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
   AC_CHECK_FUNCS_ONCE([fchdir])
   if test $ac_cv_func_fchdir = no; then
     REPLACE_FCHDIR=1
     AC_LIBOBJ([fchdir])
     gl_PREREQ_FCHDIR
-    AC_DEFINE([FCHDIR_REPLACEMENT], [1],
-      [Define if gnulib's fchdir() replacement is used.])
+    AC_DEFINE([REPLACE_FCHDIR], [1],
+      [Define to 1 if gnulib's fchdir() replacement is used.])
+    dnl We must also replace anything that can manipulate a directory fd,
+    dnl to keep our bookkeeping up-to-date.  We don't have to replace
+    dnl fstatat, since no platform has fstatat but lacks fchdir.
+    REPLACE_OPENDIR=1
+    REPLACE_CLOSEDIR=1
+    REPLACE_DUP=1
     gl_REPLACE_OPEN
     gl_REPLACE_CLOSE
+    gl_REPLACE_DUP2
+    dnl dup3 is already unconditionally replaced
+    gl_REPLACE_FCNTL
     gl_REPLACE_DIRENT_H
+    AC_CACHE_CHECK([whether open can visit directories],
+      [gl_cv_func_open_directory_works],
+      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[#include <fcntl.h>
+]], [return open(".", O_RDONLY) < 0;])],
+        [gl_cv_func_open_directory_works=yes],
+        [gl_cv_func_open_directory_works=no],
+        [gl_cv_func_open_directory_works="guessing no"])])
+    if test "$gl_cv_func_open_directory_works" != yes; then
+      AC_DEFINE([REPLACE_OPEN_DIRECTORY], [1], [Define to 1 if open() should
+work around the inability to open a directory.])
+      REPLACE_FSTAT=1
+    fi
   fi
 ])
 
index d10c104fa93526c72321b64cac5ee08d358f27ca..85de6294231a91ec24ee68257f48c3f8543c40d0 100644 (file)
@@ -1,5 +1,5 @@
-# fclose.m4 serial 1
-dnl Copyright (C) 2008 Free Software Foundation, Inc.
+# fclose.m4 serial 2
+dnl Copyright (C) 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -11,8 +11,6 @@ AC_DEFUN([gl_FUNC_FCLOSE],
 AC_DEFUN([gl_REPLACE_FCLOSE],
 [
   AC_REQUIRE([gl_STDIO_H_DEFAULTS])
-  if test $REPLACE_FCLOSE != 1; then
-    AC_LIBOBJ([fclose])
-  fi
   REPLACE_FCLOSE=1
+  AC_LIBOBJ([fclose])
 ])
diff --git a/m4/fcntl-o.m4 b/m4/fcntl-o.m4
new file mode 100644 (file)
index 0000000..67167cb
--- /dev/null
@@ -0,0 +1,81 @@
+# fcntl-o.m4 serial 1
+dnl Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert.
+
+# Test whether the flags O_NOATIME and O_NOFOLLOW actually work.
+# Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise.
+# Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise.
+AC_DEFUN([gl_FCNTL_O_FLAGS],
+[
+  dnl Persuade glibc <fcntl.h> to define O_NOATIME and O_NOFOLLOW.
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+  AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h],
+    [AC_RUN_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <sys/types.h>
+           #include <sys/stat.h>
+           #include <unistd.h>
+           #include <fcntl.h>
+           #ifndef O_NOATIME
+            #define O_NOATIME 0
+           #endif
+           #ifndef O_NOFOLLOW
+            #define O_NOFOLLOW 0
+           #endif
+           static int const constants[] =
+            {
+              O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
+              O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
+            };
+          ]],
+          [[
+            int status = !constants;
+            {
+              static char const sym[] = "conftest.sym";
+              if (symlink (".", sym) != 0
+                  || close (open (sym, O_RDONLY | O_NOFOLLOW)) == 0)
+                status |= 32;
+              unlink (sym);
+            }
+            {
+              static char const file[] = "confdefs.h";
+              int fd = open (file, O_RDONLY | O_NOATIME);
+              char c;
+              struct stat st0, st1;
+              if (fd < 0
+                  || fstat (fd, &st0) != 0
+                  || sleep (1) != 0
+                  || read (fd, &c, 1) != 1
+                  || close (fd) != 0
+                  || stat (file, &st1) != 0
+                  || st0.st_atime != st1.st_atime)
+                status |= 64;
+            }
+            return status;]])],
+       [gl_cv_header_working_fcntl_h=yes],
+       [case $? in #(
+        32) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
+        64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
+        96) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
+         *) gl_cv_header_working_fcntl_h='no';;
+        esac],
+       [gl_cv_header_working_fcntl_h=cross-compiling])])
+
+  case $gl_cv_header_working_fcntl_h in #(
+  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
+  *) ac_val=1;;
+  esac
+  AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val],
+    [Define to 1 if O_NOATIME works.])
+
+  case $gl_cv_header_working_fcntl_h in #(
+  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
+  *) ac_val=1;;
+  esac
+  AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val],
+    [Define to 1 if O_NOFOLLOW works.])
+])
diff --git a/m4/fcntl-safer.m4 b/m4/fcntl-safer.m4
deleted file mode 100644 (file)
index 3475b0a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#serial 5
-dnl Copyright (C) 2005-2007 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_FCNTL_SAFER],
-[
-  AC_LIBOBJ([open-safer])
-  AC_LIBOBJ([creat-safer])
-])
diff --git a/m4/fcntl.m4 b/m4/fcntl.m4
new file mode 100644 (file)
index 0000000..fcb5f44
--- /dev/null
@@ -0,0 +1,83 @@
+# fcntl.m4 serial 3
+dnl Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# For now, this module ensures that fcntl()
+# - supports F_DUPFD correctly
+# - supports or emulates F_DUPFD_CLOEXEC
+# - supports F_GETFD
+# Still to be ported to mingw:
+# - F_SETFD
+# - F_GETFL, F_SETFL
+# - F_GETOWN, F_SETOWN
+# - F_GETLK, F_SETLK, F_SETLKW
+AC_DEFUN([gl_FUNC_FCNTL],
+[
+  dnl Persuade glibc to expose F_DUPFD_CLOEXEC.
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+  AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_CHECK_FUNCS_ONCE([fcntl])
+  if test $ac_cv_func_fcntl = no; then
+    gl_REPLACE_FCNTL
+  else
+    dnl cygwin 1.5.x F_DUPFD has wrong errno, and allows negative target
+    AC_CACHE_CHECK([whether fcntl handles F_DUPFD correctly],
+      [gl_cv_func_fcntl_f_dupfd_works],
+      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <fcntl.h>
+]], [[return fcntl (0, F_DUPFD, -1) != -1;
+         ]])],
+         [gl_cv_func_fcntl_f_dupfd_works=yes],
+         [gl_cv_func_fcntl_f_dupfd_works=no],
+         [# Guess that it works on glibc systems
+          case $host_os in #((
+            *-gnu*) gl_cv_func_fcntl_f_dupfd_works="guessing yes";;
+            *)      gl_cv_func_fcntl_f_dupfd_works="guessing no";;
+          esac])])
+    case $gl_cv_func_fcntl_f_dupfd_works in
+      *yes) ;;
+      *) gl_REPLACE_FCNTL
+        AC_DEFINE([FCNTL_DUPFD_BUGGY], [1], [Define this to 1 if F_DUPFD
+          behavior does not match POSIX]) ;;
+    esac
+
+    dnl Many systems lack F_DUPFD_CLOEXEC
+    AC_CACHE_CHECK([whether fcntl understands F_DUPFD_CLOEXEC],
+      [gl_cv_func_fcntl_f_dupfd_cloexec],
+      [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <fcntl.h>
+#ifndef F_DUPFD_CLOEXEC
+choke me
+#endif
+         ]])],
+         [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#ifdef __linux__
+/* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace
+   it to support the semantics on older kernels that failed with EINVAL.  */
+choke me
+#endif
+           ]])],
+           [gl_cv_func_fcntl_f_dupfd_cloexec=yes],
+           [gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check"])],
+         [gl_cv_func_fcntl_f_dupfd_cloexec=no])])
+    if test "$gl_cv_func_fcntl_f_dupfd_cloexec" != yes; then
+      gl_REPLACE_FCNTL
+      dnl No witness macro needed for this bug.
+    fi
+  fi
+])
+
+AC_DEFUN([gl_REPLACE_FCNTL],
+[
+  AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
+  AC_CHECK_FUNCS_ONCE([fcntl])
+  if test $ac_cv_func_fcntl = no; then
+    HAVE_FCNTL=0
+  else
+    REPLACE_FCNTL=1
+  fi
+  AC_LIBOBJ([fcntl])
+])
index 4a7fc42b2b2f5f98119361049b5d8ad2fbd1c7ea..67122e5ccb9b4d6839c94ca0b44d257c53f638db 100644 (file)
@@ -1,5 +1,6 @@
+# serial 11
 # Configure fcntl.h.
-dnl Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -9,74 +10,14 @@ dnl Written by Paul Eggert.
 AC_DEFUN([gl_FCNTL_H],
 [
   AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
-  AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h],
-    [AC_RUN_IFELSE(
-       [AC_LANG_PROGRAM(
-         [[#include <sys/types.h>
-          #include <sys/stat.h>
-          #include <unistd.h>
-          #include <fcntl.h>
-          #ifndef O_NOATIME
-           #define O_NOATIME 0
-          #endif
-          #ifndef O_NOFOLLOW
-           #define O_NOFOLLOW 0
-          #endif
-          static int const constants[] =
-           {
-             O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
-             O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
-           };
-         ]],
-         [[
-           int status = !constants;
-           {
-             static char const sym[] = "conftest.sym";
-             if (symlink (".", sym) != 0
-                 || close (open (sym, O_RDONLY | O_NOFOLLOW)) == 0)
-               status |= 32;
-           }
-           {
-             static char const file[] = "confdefs.h";
-             int fd = open (file, O_RDONLY | O_NOATIME);
-             char c;
-             struct stat st0, st1;
-             if (fd < 0
-                 || fstat (fd, &st0) != 0
-                 || sleep (1) != 0
-                 || read (fd, &c, 1) != 1
-                 || close (fd) != 0
-                 || stat (file, &st1) != 0
-                 || st0.st_atime != st1.st_atime)
-               status |= 64;
-           }
-           return status;]])],
-       [gl_cv_header_working_fcntl_h=yes],
-       [case $? in #(
-       32) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
-       64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
-       96) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
-        *) gl_cv_header_working_fcntl_h='no';;
-       esac],
-       [gl_cv_header_working_fcntl_h=cross-compiling])])
-
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
-  AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val],
-    [Define to 1 if O_NOATIME works.])
-
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
-  AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val],
-    [Define to 1 if O_NOFOLLOW works.])
-
+  AC_REQUIRE([gl_FCNTL_O_FLAGS])
   gl_CHECK_NEXT_HEADERS([fcntl.h])
-  FCNTL_H='fcntl.h'
-  AC_SUBST([FCNTL_H])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use, if it is not common
+  dnl enough to be declared everywhere.
+  gl_WARN_ON_USE_PREPARE([[#include <fcntl.h>
+    ]], [fcntl openat])
 ])
 
 AC_DEFUN([gl_FCNTL_MODULE_INDICATOR],
@@ -84,11 +25,19 @@ AC_DEFUN([gl_FCNTL_MODULE_INDICATOR],
   dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
   AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
   GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR([$1])
 ])
 
 AC_DEFUN([gl_FCNTL_H_DEFAULTS],
 [
-  GNULIB_OPEN=0;  AC_SUBST([GNULIB_OPEN])
+  GNULIB_FCNTL=0;   AC_SUBST([GNULIB_FCNTL])
+  GNULIB_OPEN=0;    AC_SUBST([GNULIB_OPEN])
+  GNULIB_OPENAT=0;  AC_SUBST([GNULIB_OPENAT])
   dnl Assume proper GNU behavior unless another module says otherwise.
-  REPLACE_OPEN=0; AC_SUBST([REPLACE_OPEN])
+  HAVE_FCNTL=1;     AC_SUBST([HAVE_FCNTL])
+  HAVE_OPENAT=1;    AC_SUBST([HAVE_OPENAT])
+  REPLACE_FCNTL=0;  AC_SUBST([REPLACE_FCNTL])
+  REPLACE_OPEN=0;   AC_SUBST([REPLACE_OPEN])
+  REPLACE_OPENAT=0; AC_SUBST([REPLACE_OPENAT])
 ])
diff --git a/m4/fdopendir.m4 b/m4/fdopendir.m4
new file mode 100644 (file)
index 0000000..7282d4b
--- /dev/null
@@ -0,0 +1,38 @@
+# serial 3
+# See if we need to provide fdopendir.
+
+dnl Copyright (C) 2009-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Written by Eric Blake.
+
+AC_DEFUN([gl_FUNC_FDOPENDIR],
+[
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+  AC_CHECK_FUNCS_ONCE([fdopendir])
+  if test $ac_cv_func_fdopendir = no; then
+    AC_LIBOBJ([openat-proc])
+    AC_LIBOBJ([fdopendir])
+    gl_REPLACE_DIRENT_H
+    HAVE_FDOPENDIR=0
+  else
+    AC_CACHE_CHECK([whether fdopendir works],
+      [gl_cv_func_fdopendir_works],
+      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <dirent.h>
+#include <fcntl.h>
+]], [int fd = open ("conftest.c", O_RDONLY);
+     if (fd < 0) return 2;
+     return !!fdopendir (fd);])],
+         [gl_cv_func_fdopendir_works=yes],
+         [gl_cv_func_fdopendir_works=no],
+         [gl_cv_func_fdopendir_works="guessing no"])])
+    if test "$gl_cv_func_fdopendir_works" != yes; then
+      REPLACE_FDOPENDIR=1
+      gl_REPLACE_DIRENT_H
+      AC_LIBOBJ([fdopendir])
+    fi
+  fi
+])
index 0a9c0a5d2d559252109f29aab379d5d9b28cb4be..7b74ca1ac55bfe0a856e493065bf918d4e4d1edb 100644 (file)
@@ -1,5 +1,5 @@
 # fileblocks.m4 serial 5
-dnl Copyright (C) 2002, 2005, 2006, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005-2006, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index d36e3a46caef916dfd5d0c4dd26182d70850b3ae..a74a0d957f2ea89a010102dba7da48add2fccbfe 100644 (file)
@@ -1,5 +1,5 @@
 # float_h.m4 serial 3
-dnl Copyright (C) 2007 Free Software Foundation, Inc.
+dnl Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 47bb36b430e97be44474beacdd2743b52239fd63..212ead57291fe6fcb88929b91250c891de3b012f 100644 (file)
@@ -1,6 +1,6 @@
-# Check for fnmatch - serial 2.
+# Check for fnmatch - serial 4.
 
-# Copyright (C) 2000-2007, 2009 Free Software Foundation, Inc.
+# Copyright (C) 2000-2007, 2009-2010 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 # Autoconf defines AC_FUNC_FNMATCH, but that is obsolescent.
 # New applications should use the macros below instead.
 
-# _AC_FUNC_FNMATCH_IF([STANDARD = GNU | POSIX], [CACHE_VAR], [IF-TRUE], [IF-FALSE])
-# -------------------------------------------------------------------------
-# If a STANDARD compliant fnmatch is found, run IF-TRUE, otherwise
-# IF-FALSE.  Use CACHE_VAR.
-AC_DEFUN([_AC_FUNC_FNMATCH_IF],
-[AC_CACHE_CHECK(
-   [for working $1 fnmatch],
-   [$2],
-  [dnl Some versions of Solaris, SCO, and the GNU C Library
-   dnl have a broken or incompatible fnmatch.
-   dnl So we run a test program.  If we are cross-compiling, take no chance.
-   dnl Thanks to John Oleynick, François Pinard, and Paul Eggert for this test.
-   AC_RUN_IFELSE(
-      [AC_LANG_PROGRAM(
-        [[#include <fnmatch.h>
-          static int
-          y (char const *pattern, char const *string, int flags)
-          {
-            return fnmatch (pattern, string, flags) == 0;
-          }
-          static int
-          n (char const *pattern, char const *string, int flags)
-          {
-            return fnmatch (pattern, string, flags) == FNM_NOMATCH;
-          }
-        ]],
-        [[char const *Apat = 'A' < '\\\\' ? "[A-\\\\\\\\]" : "[\\\\\\\\-A]";
-          char const *apat = 'a' < '\\\\' ? "[a-\\\\\\\\]" : "[\\\\\\\\-a]";
-          static char const A_1[] = { 'A' - 1, 0 };
-          static char const A01[] = { 'A' + 1, 0 };
-          static char const a_1[] = { 'a' - 1, 0 };
-          static char const a01[] = { 'a' + 1, 0 };
-          static char const bs_1[] = { '\\\\' - 1, 0 };
-          static char const bs01[] = { '\\\\' + 1, 0 };
-          return
-           !(n ("a*", "", 0)
-             && y ("a*", "abc", 0)
-             && n ("d*/*1", "d/s/1", FNM_PATHNAME)
-             && y ("a\\\\bc", "abc", 0)
-             && n ("a\\\\bc", "abc", FNM_NOESCAPE)
-             && y ("*x", ".x", 0)
-             && n ("*x", ".x", FNM_PERIOD)
-             && y (Apat, "\\\\", 0) && y (Apat, "A", 0)
-             && y (apat, "\\\\", 0) && y (apat, "a", 0)
-             && n (Apat, A_1, 0) == ('A' < '\\\\')
-             && n (apat, a_1, 0) == ('a' < '\\\\')
-             && y (Apat, A01, 0) == ('A' < '\\\\')
-             && y (apat, a01, 0) == ('a' < '\\\\')
-             && y (Apat, bs_1, 0) == ('A' < '\\\\')
-             && y (apat, bs_1, 0) == ('a' < '\\\\')
-             && n (Apat, bs01, 0) == ('A' < '\\\\')
-             && n (apat, bs01, 0) == ('a' < '\\\\')
-             && ]m4_if([$1], [GNU],
-                  [y ("xxXX", "xXxX", FNM_CASEFOLD)
-                   && y ("a++(x|yy)b", "a+xyyyyxb", FNM_EXTMATCH)
-                   && n ("d*/*1", "d/s/1", FNM_FILE_NAME)
-                   && y ("*", "x", FNM_FILE_NAME | FNM_LEADING_DIR)
-                   && y ("x*", "x/y/z", FNM_FILE_NAME | FNM_LEADING_DIR)
-                   && y ("*c*", "c/x", FNM_FILE_NAME | FNM_LEADING_DIR)],
-                  1))[;]])],
-      [$2=yes],
-      [$2=no],
-      [$2=cross])])
-AS_IF([test $$2 = yes], [$3], [$4])
-])# _AC_FUNC_FNMATCH_IF
-
-
-# _AC_LIBOBJ_FNMATCH
-# ------------------
-# Prepare the replacement of fnmatch.
-AC_DEFUN([_AC_LIBOBJ_FNMATCH],
-[AC_REQUIRE([AC_FUNC_ALLOCA])dnl
-AC_REQUIRE([AC_TYPE_MBSTATE_T])dnl
-AC_CHECK_DECLS([isblank], [], [], [#include <ctype.h>])
-AC_CHECK_FUNCS_ONCE([btowc isblank iswctype mbsrtowcs mempcpy wmemchr wmemcpy wmempcpy])
-AC_CHECK_HEADERS_ONCE([wctype.h])
-AC_LIBOBJ([fnmatch])
-FNMATCH_H=fnmatch.h
-])# _AC_LIBOBJ_FNMATCH
-
-
+# Request a POSIX compliant fnmatch function.
 AC_DEFUN([gl_FUNC_FNMATCH_POSIX],
 [
+  m4_divert_text([DEFAULTS], [gl_fnmatch_required=POSIX])
+
+  dnl Persuade glibc <fnmatch.h> to declare FNM_CASEFOLD etc.
+  dnl This is only needed if gl_fnmatch_required = GNU. It would be possible
+  dnl to avoid this dependency for gl_FUNC_FNMATCH_POSIX by putting
+  dnl gl_FUNC_FNMATCH_GNU into a separate .m4 file.
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
   FNMATCH_H=
-  _AC_FUNC_FNMATCH_IF([POSIX], [ac_cv_func_fnmatch_posix],
-                     [rm -f lib/fnmatch.h],
-                     [_AC_LIBOBJ_FNMATCH])
-  if test $ac_cv_func_fnmatch_posix != yes; then
+  gl_fnmatch_required_lowercase=`echo $gl_fnmatch_required | tr 'A-Z' 'a-z'`
+  gl_fnmatch_cache_var="gl_cv_func_fnmatch_${gl_fnmatch_required_lowercase}"
+  AC_CACHE_CHECK([for working $gl_fnmatch_required fnmatch],
+    [$gl_fnmatch_cache_var],
+    [dnl Some versions of Solaris, SCO, and the GNU C Library
+     dnl have a broken or incompatible fnmatch.
+     dnl So we run a test program.  If we are cross-compiling, take no chance.
+     dnl Thanks to John Oleynick, François Pinard, and Paul Eggert for this
+     dnl test.
+     if test $gl_fnmatch_required = GNU; then
+       gl_fnmatch_gnu_start=
+       gl_fnmatch_gnu_end=
+     else
+       gl_fnmatch_gnu_start='#if 0'
+       gl_fnmatch_gnu_end='#endif'
+     fi
+     AC_RUN_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <fnmatch.h>
+            static int
+            y (char const *pattern, char const *string, int flags)
+            {
+              return fnmatch (pattern, string, flags) == 0;
+            }
+            static int
+            n (char const *pattern, char const *string, int flags)
+            {
+              return fnmatch (pattern, string, flags) == FNM_NOMATCH;
+            }
+          ]],
+          [[char const *Apat = 'A' < '\\\\' ? "[A-\\\\\\\\]" : "[\\\\\\\\-A]";
+            char const *apat = 'a' < '\\\\' ? "[a-\\\\\\\\]" : "[\\\\\\\\-a]";
+            static char const A_1[] = { 'A' - 1, 0 };
+            static char const A01[] = { 'A' + 1, 0 };
+            static char const a_1[] = { 'a' - 1, 0 };
+            static char const a01[] = { 'a' + 1, 0 };
+            static char const bs_1[] = { '\\\\' - 1, 0 };
+            static char const bs01[] = { '\\\\' + 1, 0 };
+            return
+             !(n ("a*", "", 0)
+               && y ("a*", "abc", 0)
+               && n ("d*/*1", "d/s/1", FNM_PATHNAME)
+               && y ("a\\\\bc", "abc", 0)
+               && n ("a\\\\bc", "abc", FNM_NOESCAPE)
+               && y ("*x", ".x", 0)
+               && n ("*x", ".x", FNM_PERIOD)
+               && y (Apat, "\\\\", 0) && y (Apat, "A", 0)
+               && y (apat, "\\\\", 0) && y (apat, "a", 0)
+               && n (Apat, A_1, 0) == ('A' < '\\\\')
+               && n (apat, a_1, 0) == ('a' < '\\\\')
+               && y (Apat, A01, 0) == ('A' < '\\\\')
+               && y (apat, a01, 0) == ('a' < '\\\\')
+               && y (Apat, bs_1, 0) == ('A' < '\\\\')
+               && y (apat, bs_1, 0) == ('a' < '\\\\')
+               && n (Apat, bs01, 0) == ('A' < '\\\\')
+               && n (apat, bs01, 0) == ('a' < '\\\\')
+               $gl_fnmatch_gnu_start
+               && y ("xxXX", "xXxX", FNM_CASEFOLD)
+               && y ("a++(x|yy)b", "a+xyyyyxb", FNM_EXTMATCH)
+               && n ("d*/*1", "d/s/1", FNM_FILE_NAME)
+               && y ("*", "x", FNM_FILE_NAME | FNM_LEADING_DIR)
+               && y ("x*", "x/y/z", FNM_FILE_NAME | FNM_LEADING_DIR)
+               && y ("*c*", "c/x", FNM_FILE_NAME | FNM_LEADING_DIR)
+               $gl_fnmatch_gnu_end
+              );
+          ]])],
+       [eval "$gl_fnmatch_cache_var=yes"],
+       [eval "$gl_fnmatch_cache_var=no"],
+       [eval "$gl_fnmatch_cache_var=\"guessing no\""])
+    ])
+  eval "gl_fnmatch_result=\"\$$gl_fnmatch_cache_var\""
+  if test "$gl_fnmatch_result" = yes; then
+    dnl Not strictly necessary. Only to avoid spurious leftover files if people
+    dnl don't do "make distclean".
+    rm -f "$gl_source_base/fnmatch.h"
+  else
+    FNMATCH_H=fnmatch.h
+    AC_LIBOBJ([fnmatch])
     dnl We must choose a different name for our function, since on ELF systems
     dnl a broken fnmatch() in libc.so would override our fnmatch() if it is
     dnl compiled into a shared library.
-    AC_DEFINE([fnmatch], [posix_fnmatch],
+    AC_DEFINE_UNQUOTED([fnmatch], [${gl_fnmatch_required_lowercase}_fnmatch],
       [Define to a replacement function name for fnmatch().])
+    dnl Prerequisites of lib/fnmatch.c.
+    AC_REQUIRE([AC_TYPE_MBSTATE_T])
+    AC_CHECK_DECLS([isblank], [], [], [#include <ctype.h>])
+    AC_CHECK_FUNCS_ONCE([btowc isblank iswctype mbsrtowcs mempcpy wmemchr wmemcpy wmempcpy])
+    AC_CHECK_HEADERS_ONCE([wctype.h])
   fi
   AC_SUBST([FNMATCH_H])
 ])
 
-
+# Request a POSIX compliant fnmatch function with GNU extensions.
 AC_DEFUN([gl_FUNC_FNMATCH_GNU],
 [
-  dnl Persuade glibc <fnmatch.h> to declare FNM_CASEFOLD etc.
-  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+  m4_divert_text([INIT_PREPARE], [gl_fnmatch_required=GNU])
 
-  FNMATCH_H=
-  _AC_FUNC_FNMATCH_IF([GNU], [ac_cv_func_fnmatch_gnu],
-                     [rm -f lib/fnmatch.h],
-                     [_AC_LIBOBJ_FNMATCH])
-  if test $ac_cv_func_fnmatch_gnu != yes; then
-    dnl We must choose a different name for our function, since on ELF systems
-    dnl a broken fnmatch() in libc.so would override our fnmatch() if it is
-    dnl compiled into a shared library.
-    AC_DEFINE([fnmatch], [gnu_fnmatch],
-      [Define to a replacement function name for fnmatch().])
-  fi
-  AC_SUBST([FNMATCH_H])
+  AC_REQUIRE([gl_FUNC_FNMATCH_POSIX])
 ])
index 7860d7074172b2ce44ef3f6a150217513ab99f35..09ae7e3febe6c7c4058b829a220267bda12d9371 100644 (file)
@@ -1,6 +1,6 @@
-# serial 14
+# serial 15
 
-# Copyright (C) 2000-2001, 2004-2009 Free Software Foundation, Inc.
+# Copyright (C) 2000-2001, 2004-2010 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -26,55 +26,53 @@ AC_DEFUN([gl_FUNC_FPENDING],
   AC_CHECK_DECLS([__fpending], , , $fp_headers)
   if test $ac_cv_func___fpending = no; then
     AC_CACHE_CHECK(
-             [how to determine the number of pending output bytes on a stream],
-                  ac_cv_sys_pending_output_n_bytes,
+              [how to determine the number of pending output bytes on a stream],
+                   ac_cv_sys_pending_output_n_bytes,
       [
-       for ac_expr in                                                    \
-                                                                         \
-           '# glibc2'                                                    \
-           'fp->_IO_write_ptr - fp->_IO_write_base'                      \
-                                                                         \
-           '# traditional Unix'                                          \
-           'fp->_ptr - fp->_base'                                        \
-                                                                         \
-           '# BSD'                                                       \
-           'fp->_p - fp->_bf._base'                                      \
-                                                                         \
-           '# SCO, Unixware'                                             \
-           '(fp->__ptr ? fp->__ptr - fp->__base : 0)'                    \
-                                                                         \
-           '# QNX'                                                       \
-           '(fp->_Mode & 0x2000 /*_MWRITE*/ ? fp->_Next - fp->_Buf : 0)' \
-                                                                         \
-           '# old glibc?'                                                \
-           'fp->__bufp - fp->__buffer'                                   \
-                                                                         \
-           '# old glibc iostream?'                                       \
-           'fp->_pptr - fp->_pbase'                                      \
-                                                                         \
-           '# emx+gcc'                                                   \
-           'fp->_ptr - fp->_buffer'                                      \
-                                                                         \
-           '# VMS'                                                       \
-           '(*fp)->_ptr - (*fp)->_base'                                  \
-                                                                         \
-           '# e.g., DGUX R4.11; the info is not available'               \
-           1                                                             \
-           ; do
+        for ac_expr in                                                    \
+                                                                          \
+            '# glibc2'                                                    \
+            'fp->_IO_write_ptr - fp->_IO_write_base'                      \
+                                                                          \
+            '# traditional Unix'                                          \
+            'fp->_ptr - fp->_base'                                        \
+                                                                          \
+            '# BSD'                                                       \
+            'fp->_p - fp->_bf._base'                                      \
+                                                                          \
+            '# SCO, Unixware'                                             \
+            '(fp->__ptr ? fp->__ptr - fp->__base : 0)'                    \
+                                                                          \
+            '# QNX'                                                       \
+            '(fp->_Mode & 0x2000 /*_MWRITE*/ ? fp->_Next - fp->_Buf : 0)' \
+                                                                          \
+            '# old glibc?'                                                \
+            'fp->__bufp - fp->__buffer'                                   \
+                                                                          \
+            '# old glibc iostream?'                                       \
+            'fp->_pptr - fp->_pbase'                                      \
+                                                                          \
+            '# emx+gcc'                                                   \
+            'fp->_ptr - fp->_buffer'                                      \
+                                                                          \
+            '# VMS'                                                       \
+            '(*fp)->_ptr - (*fp)->_base'                                  \
+                                                                          \
+            '# e.g., DGUX R4.11; the info is not available'               \
+            1                                                             \
+            ; do
 
-         # Skip each embedded comment.
-         case "$ac_expr" in '#'*) continue;; esac
+          # Skip each embedded comment.
+          case "$ac_expr" in '#'*) continue;; esac
 
-         AC_TRY_COMPILE(
-           [#include <stdio.h>
-           ],
-           [FILE *fp = stdin; (void) ($ac_expr);],
-           fp_done=yes
-         )
-         test "$fp_done" = yes && break
-       done
+          AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]],
+            [[FILE *fp = stdin; (void) ($ac_expr);]])],
+            [fp_done=yes]
+          )
+          test "$fp_done" = yes && break
+        done
 
-       ac_cv_sys_pending_output_n_bytes=$ac_expr
+        ac_cv_sys_pending_output_n_bytes=$ac_expr
       ]
     )
     AC_DEFINE_UNQUOTED([PENDING_OUTPUT_N_BYTES],
index 3d773656886d4f9811ee80be0fe07a37f347a9c9..5f7f97729c067cdbaec9527fefd3cabe4020e9cc 100644 (file)
@@ -1,5 +1,5 @@
-# fseeko.m4 serial 4
-dnl Copyright (C) 2007-2008 Free Software Foundation, Inc.
+# fseeko.m4 serial 7
+dnl Copyright (C) 2007-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -15,13 +15,12 @@ AC_DEFUN([gl_FUNC_FSEEKO],
 
   AC_CACHE_CHECK([for fseeko], [gl_cv_func_fseeko],
     [
-      AC_TRY_LINK([#include <stdio.h>], [fseeko (stdin, 0, 0);],
-       [gl_cv_func_fseeko=yes], [gl_cv_func_fseeko=no])
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>
+]], [fseeko (stdin, 0, 0);])],
+        [gl_cv_func_fseeko=yes], [gl_cv_func_fseeko=no])
     ])
-  if test $gl_cv_func_fseeko = no; then
-    HAVE_FSEEKO=0
-    gl_REPLACE_FSEEKO
-  elif test $gl_cv_var_stdin_large_offset = no; then
+  if test $gl_cv_func_fseeko = no \
+      || test $gl_cv_var_stdin_large_offset = no; then
     gl_REPLACE_FSEEKO
   fi
 ])
@@ -31,4 +30,6 @@ AC_DEFUN([gl_REPLACE_FSEEKO],
   AC_LIBOBJ([fseeko])
   AC_REQUIRE([gl_STDIO_H_DEFAULTS])
   REPLACE_FSEEKO=1
+  dnl If we are also using the fseek module, then fseek needs replacing, too.
+  m4_ifdef([gl_REPLACE_FSEEK], [gl_REPLACE_FSEEK])
 ])
index e43c15f2a52a7e929d88db418cc00c9d6d9f7039..95e371b0c04b092838618540d49bd109a8965f03 100644 (file)
@@ -2,7 +2,7 @@
 
 # See if we need to emulate a missing ftruncate function using fcntl or chsize.
 
-# Copyright (C) 2000, 2001, 2003-2007, 2009 Free Software Foundation, Inc.
+# Copyright (C) 2000-2001, 2003-2007, 2009-2010 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -30,10 +30,10 @@ AC_DEFUN([gl_FUNC_FTRUNCATE],
         # a bug report to inform us about it.
         if test x"$SKIP_FTRUNCATE_CHECK" != xyes; then
           AC_MSG_FAILURE([Your system lacks the ftruncate function.
-             Please report this, along with the output of "uname -a", to the
-             bug-coreutils@gnu.org mailing list.  To continue past this point,
-             rerun configure with SKIP_FTRUNCATE_CHECK=yes.
-             E.g., ./configure SKIP_FTRUNCATE_CHECK=yes])
+              Please report this, along with the output of "uname -a", to the
+              bug-coreutils@gnu.org mailing list.  To continue past this point,
+              rerun configure with SKIP_FTRUNCATE_CHECK=yes.
+              E.g., ./configure SKIP_FTRUNCATE_CHECK=yes])
         fi
     esac
   fi
index 07e2c18cc5335359fe52be9b6634694d1acd31a8..59c3daaa52ba3134c9907a60be2abb5d389aed83 100644 (file)
@@ -3,7 +3,7 @@
 # name is unusually large.  Any length between 4k and 16k trigger the bug
 # when using glibc-2.4.90-9 or older.
 
-# Copyright (C) 2006, 2009 Free Software Foundation, Inc.
+# Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -23,7 +23,7 @@ AC_DEFUN([gl_FUNC_GETCWD_ABORT_BUG],
      ac_clean_files="$ac_clean_files confdir-14B---"
      AC_RUN_IFELSE(
        [AC_LANG_SOURCE(
-         [[
+          [[
 #include <stdlib.h>
 #include <unistd.h>
 #include <limits.h>
@@ -69,14 +69,14 @@ main ()
   initial_cwd_len = strlen (cwd);
   free (cwd);
   desired_depth = ((TARGET_LEN - 1 - initial_cwd_len)
-                  / (1 + strlen (dir_name)));
+                   / (1 + strlen (dir_name)));
   for (d = 0; d < desired_depth; d++)
     {
       if (mkdir (dir_name, S_IRWXU) < 0 || chdir (dir_name) < 0)
-       {
-         fail = 3; /* Unable to construct deep hierarchy.  */
-         break;
-       }
+        {
+          fail = 3; /* Unable to construct deep hierarchy.  */
+          break;
+        }
     }
 
   /* If libc has the bug in question, this invocation of getcwd
@@ -91,7 +91,7 @@ main ()
   while (0 < d--)
     {
       if (chdir ("..") < 0)
-       break;
+        break;
       rmdir (dir_name);
     }
 
index 14784999d454a312d08a637dc3cb59489eb12919..ecf6192842e11b38144840c6869d8c02b2c21657 100644 (file)
@@ -6,7 +6,7 @@
 # I've heard that this is due to a Linux kernel bug, and that it has
 # been fixed between 2.4.21-pre3 and 2.4.21-pre4.  */
 
-# Copyright (C) 2003-2007, 2009 Free Software Foundation, Inc.
+# Copyright (C) 2003-2007, 2009-2010 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -23,7 +23,7 @@ AC_DEFUN([gl_FUNC_GETCWD_PATH_MAX],
      ac_clean_files="$ac_clean_files confdir3"
      AC_RUN_IFELSE(
        [AC_LANG_SOURCE(
-         [[
+          [[
 #include <errno.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -77,7 +77,7 @@ main ()
   exit (0);
 #else
   char buf[PATH_MAX * (DIR_NAME_SIZE / DOTDOTSLASH_LEN + 1)
-          + DIR_NAME_SIZE + BUF_SLOP];
+           + DIR_NAME_SIZE + BUF_SLOP];
   char *cwd = getcwd (buf, PATH_MAX);
   size_t initial_cwd_len;
   size_t cwd_len;
@@ -96,58 +96,58 @@ main ()
 
       cwd_len += DIR_NAME_SIZE;
       /* If mkdir or chdir fails, it could be that this system cannot create
-        any file with an absolute name longer than PATH_MAX, such as cygwin.
-        If so, leave fail as 0, because the current working directory can't
-        be too long for getcwd if it can't even be created.  For other
-        errors, be pessimistic and consider that as a failure, too.  */
+         any file with an absolute name longer than PATH_MAX, such as cygwin.
+         If so, leave fail as 0, because the current working directory can't
+         be too long for getcwd if it can't even be created.  For other
+         errors, be pessimistic and consider that as a failure, too.  */
       if (mkdir (DIR_NAME, S_IRWXU) < 0 || chdir (DIR_NAME) < 0)
-       {
-         if (! (errno == ERANGE || is_ENAMETOOLONG (errno)))
-           fail = 2;
-         break;
-       }
+        {
+          if (! (errno == ERANGE || is_ENAMETOOLONG (errno)))
+            fail = 2;
+          break;
+        }
 
       if (PATH_MAX <= cwd_len && cwd_len < PATH_MAX + DIR_NAME_SIZE)
-       {
-         c = getcwd (buf, PATH_MAX);
-         if (!c && errno == ENOENT)
-           {
-             fail = 1;
-             break;
-           }
-         if (c || ! (errno == ERANGE || is_ENAMETOOLONG (errno)))
-           {
-             fail = 2;
-             break;
-           }
-       }
+        {
+          c = getcwd (buf, PATH_MAX);
+          if (!c && errno == ENOENT)
+            {
+              fail = 1;
+              break;
+            }
+          if (c || ! (errno == ERANGE || is_ENAMETOOLONG (errno)))
+            {
+              fail = 2;
+              break;
+            }
+        }
 
       if (dotdot_max <= cwd_len - initial_cwd_len)
-       {
-         if (dotdot_max + DIR_NAME_SIZE < cwd_len - initial_cwd_len)
-           break;
-         c = getcwd (buf, cwd_len + 1);
-         if (!c)
-           {
-             if (! (errno == ERANGE || errno == ENOENT
-                    || is_ENAMETOOLONG (errno)))
-               {
-                 fail = 2;
-                 break;
-               }
-             if (AT_FDCWD || errno == ERANGE || errno == ENOENT)
-               {
-                 fail = 1;
-                 break;
-               }
-           }
-       }
+        {
+          if (dotdot_max + DIR_NAME_SIZE < cwd_len - initial_cwd_len)
+            break;
+          c = getcwd (buf, cwd_len + 1);
+          if (!c)
+            {
+              if (! (errno == ERANGE || errno == ENOENT
+                     || is_ENAMETOOLONG (errno)))
+                {
+                  fail = 2;
+                  break;
+                }
+              if (AT_FDCWD || errno == ERANGE || errno == ENOENT)
+                {
+                  fail = 1;
+                  break;
+                }
+            }
+        }
 
       if (c && strlen (c) != cwd_len)
-       {
-         fail = 2;
-         break;
-       }
+        {
+          fail = 2;
+          break;
+        }
       ++n_chdirs;
     }
 
@@ -161,10 +161,10 @@ main ()
     rmdir (DIR_NAME);
     for (i = 0; i <= n_chdirs; i++)
       {
-       if (chdir ("..") < 0)
-         break;
-       if (rmdir (DIR_NAME) != 0)
-         break;
+        if (chdir ("..") < 0)
+          break;
+        if (rmdir (DIR_NAME) != 0)
+          break;
       }
   }
 
index 6ebe2fce4d03d0119299e4c70d0a6ce2b709ee70..df9c96869fd3646b7b0e27bf0af0a41915088feb 100644 (file)
@@ -1,53 +1,69 @@
 # getcwd.m4 - check for working getcwd that is compatible with glibc
 
-# Copyright (C) 2001, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2004, 2005, 2006, 2007, 2009, 2010 Free Software
+# Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 # Written by Paul Eggert.
+# serial 2
 
 AC_DEFUN([gl_FUNC_GETCWD_NULL],
   [
    AC_CACHE_CHECK([whether getcwd (NULL, 0) allocates memory for result],
      [gl_cv_func_getcwd_null],
-     [AC_TRY_RUN(
-        [
-#       include <stdlib.h>
-#       include <unistd.h>
-#       ifndef getcwd
-        char *getcwd ();
-#       endif
-        int
-        main ()
-        {
-          if (chdir ("/") != 0)
-            exit (1);
-          else
-            {
-              char *f = getcwd (NULL, 0);
-              exit (! (f && f[0] == '/' && !f[1]));
-            }
-        }],
-       [gl_cv_func_getcwd_null=yes],
-       [gl_cv_func_getcwd_null=no],
-       [gl_cv_func_getcwd_null=no])])
+     [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#        include <unistd.h>
+#        ifndef getcwd
+         char *getcwd ();
+#        endif
+]], [[
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+/* mingw cwd does not start with '/', but getcwd does allocate.  */
+#else
+           if (chdir ("/") != 0)
+             return 1;
+           else
+             {
+               char *f = getcwd (NULL, 0);
+               return ! (f && f[0] == '/' && !f[1]);
+             }
+#endif
+         ]])],
+        [gl_cv_func_getcwd_null=yes],
+        [gl_cv_func_getcwd_null=no],
+        [[
+       case "$host_os" in
+                               # Guess yes on glibc systems.
+         *-gnu*)               gl_cv_func_getcwd_null="guessing yes";;
+                               # Guess yes on Cygwin.
+         cygwin*)              gl_cv_func_getcwd_null="guessing yes";;
+                               # Guess yes on mingw.
+         mingw*)               gl_cv_func_getcwd_null="guessing yes";;
+                               # If we don't know, assume the worst.
+         *)                    gl_cv_func_getcwd_null="guessing no";;
+       esac
+        ]])])
 ])
 
 AC_DEFUN([gl_FUNC_GETCWD],
 [
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
   AC_REQUIRE([gl_FUNC_GETCWD_NULL])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
 
   gl_abort_bug=no
-  case $gl_cv_func_getcwd_null in
-  yes)
+  case $gl_cv_func_getcwd_null,$host_os in
+  *,mingw*)
+    gl_cv_func_getcwd_path_max=yes;;
+  yes,*)
     gl_FUNC_GETCWD_PATH_MAX
     gl_FUNC_GETCWD_ABORT_BUG([gl_abort_bug=yes]);;
   esac
 
   case $gl_cv_func_getcwd_null,$gl_cv_func_getcwd_path_max,$gl_abort_bug in
-  yes,yes,no) ;;
+  *yes,yes,no) ;;
   *)
     REPLACE_GETCWD=1
     AC_LIBOBJ([getcwd])
index 67f9c6566da136f77dc1f5592a62271c75ff9114..5f98229f6a9306134f3fe197716f21c1d46c3c77 100644 (file)
@@ -1,5 +1,5 @@
-# getdate.m4 serial 14
-dnl Copyright (C) 2002-2006, 2008, 2009 Free Software Foundation, Inc.
+# getdate.m4 serial 16
+dnl Copyright (C) 2002-2006, 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -13,9 +13,9 @@ dnl static variables (even though gcc supports this in pre-C99 mode).
 AC_DEFUN([gl_C_COMPOUND_LITERALS],
 [
   AC_CACHE_CHECK([for compound literals], [gl_cv_compound_literals],
-  [AC_TRY_COMPILE([struct s { int i, j; };],
-    [struct s t = (struct s) { 3, 4 };
-     if (t.i != 0) return 0;],
+  [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[struct s { int i, j; };]],
+      [[struct s t = (struct s) { 3, 4 };
+        if (t.i != 0) return 0;]])],
     gl_cv_compound_literals=yes,
     gl_cv_compound_literals=no)])
   if test $gl_cv_compound_literals = yes; then
@@ -36,4 +36,18 @@ AC_DEFUN([gl_GETDATE],
   AC_STRUCT_TIMEZONE
   AC_REQUIRE([gl_CLOCK_TIME])
   AC_REQUIRE([gl_TM_GMTOFF])
+  AC_COMPILE_IFELSE(
+    [AC_LANG_SOURCE([[
+#include <time.h> /* for time_t */
+#include <limits.h> /* for CHAR_BIT, LONG_MIN, LONG_MAX */
+#define TYPE_MINIMUM(t) \
+  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
+#define TYPE_MAXIMUM(t) \
+  ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
+typedef int verify_min[2 * (LONG_MIN <= TYPE_MINIMUM (time_t)) - 1];
+typedef int verify_max[2 * (TYPE_MAXIMUM (time_t) <= LONG_MAX) - 1];
+       ]])],
+    [AC_DEFINE([TIME_T_FITS_IN_LONG_INT], [1],
+       [Define to 1 if all 'time_t' values fit in a 'long int'.])
+    ])
 ])
index 7760f8279bd9b8df7ab5982781f656068454d5e6..4beb1501c2bec8f54bc90d748233c546a8cac514 100644 (file)
@@ -1,6 +1,6 @@
-# getdelim.m4 serial 5
+# getdelim.m4 serial 6
 
-dnl Copyright (C) 2005, 2006, 2007 Free Software dnl Foundation, Inc.
+dnl Copyright (C) 2005-2007, 2009-2010 Free Software Foundation, Inc.
 dnl
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -15,16 +15,71 @@ AC_DEFUN([gl_FUNC_GETDELIM],
   dnl Persuade glibc <stdio.h> to declare getdelim().
   AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
 
-  AC_REPLACE_FUNCS([getdelim])
   AC_CHECK_DECLS_ONCE([getdelim])
 
-  if test $ac_cv_func_getdelim = no; then
-    gl_PREREQ_GETDELIM
+  AC_CHECK_FUNCS_ONCE([getdelim])
+  if test $ac_cv_func_getdelim = yes; then
+    dnl Found it in some library.  Verify that it works.
+    AC_CACHE_CHECK([for working getdelim function], [gl_cv_func_working_getdelim],
+    [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data
+    AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#    include <stdio.h>
+#    include <stdlib.h>
+#    include <string.h>
+    int main ()
+    {
+      FILE *in = fopen ("./conftest.data", "r");
+      if (!in)
+        return 1;
+      {
+        /* Test result for a NULL buffer and a zero size.
+           Based on a test program from Karl Heuer.  */
+        char *line = NULL;
+        size_t siz = 0;
+        int len = getdelim (&line, &siz, '\n', in);
+        if (!(len == 4 && line && strcmp (line, "foo\n") == 0))
+          return 1;
+      }
+      {
+        /* Test result for a NULL buffer and a non-zero size.
+           This crashes on FreeBSD 8.0.  */
+        char *line = NULL;
+        size_t siz = (size_t)(~0) / 4;
+        if (getdelim (&line, &siz, '\n', in) == -1)
+          return 1;
+      }
+      return 0;
+    }
+    ]])], [gl_cv_func_working_getdelim=yes] dnl The library version works.
+    , [gl_cv_func_working_getdelim=no] dnl The library version does NOT work.
+    , dnl We're cross compiling. Assume it works on glibc2 systems.
+      [AC_EGREP_CPP([Lucky GNU user],
+         [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ >= 2)
+  Lucky GNU user
+ #endif
+#endif
+         ],
+         [gl_cv_func_working_getdelim=yes],
+         [gl_cv_func_working_getdelim=no])]
+    )])
+  else
+    gl_cv_func_working_getdelim=no
   fi
 
   if test $ac_cv_have_decl_getdelim = no; then
     HAVE_DECL_GETDELIM=0
   fi
+
+  if test $gl_cv_func_working_getdelim = no; then
+    if test $ac_cv_func_getdelim = yes; then
+      REPLACE_GETDELIM=1
+    fi
+    AC_LIBOBJ([getdelim])
+    gl_PREREQ_GETDELIM
+  fi
 ])
 
 # Prerequisites of lib/getdelim.c.
diff --git a/m4/getdtablesize.m4 b/m4/getdtablesize.m4
new file mode 100644 (file)
index 0000000..d238628
--- /dev/null
@@ -0,0 +1,15 @@
+# getdtablesize.m4 serial 1
+dnl Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_GETDTABLESIZE],
+[
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  AC_CHECK_FUNCS_ONCE([getdtablesize])
+  if test $ac_cv_func_getdtablesize != yes; then
+    HAVE_GETDTABLESIZE=0
+    AC_LIBOBJ([getdtablesize])
+  fi
+])
index 99933455f094b07d37d675e109de3b6483537f91..83005600d65b23657095a15d8b6d246d62f8da0e 100644 (file)
@@ -1,6 +1,7 @@
-# getline.m4 serial 19
+# getline.m4 serial 21
 
-dnl Copyright (C) 1998-2003, 2005-2007, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 1998-2003, 2005-2007, 2009-2010 Free Software Foundation,
+dnl Inc.
 dnl
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -23,29 +24,42 @@ AC_DEFUN([gl_FUNC_GETLINE],
 
   gl_getline_needs_run_time_check=no
   AC_CHECK_FUNC([getline],
-               dnl Found it in some library.  Verify that it works.
-               gl_getline_needs_run_time_check=yes,
-               am_cv_func_working_getline=no)
+                [dnl Found it in some library.  Verify that it works.
+                 gl_getline_needs_run_time_check=yes],
+                [am_cv_func_working_getline=no])
   if test $gl_getline_needs_run_time_check = yes; then
     AC_CACHE_CHECK([for working getline function], [am_cv_func_working_getline],
-    [echo fooN |tr -d '\012'|tr N '\012' > conftest.data
-    AC_TRY_RUN([
+    [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data
+    AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #    include <stdio.h>
 #    include <stdlib.h>
 #    include <string.h>
     int main ()
-    { /* Based on a test program from Karl Heuer.  */
-      char *line = NULL;
-      size_t siz = 0;
-      int len;
+    {
       FILE *in = fopen ("./conftest.data", "r");
       if (!in)
-       return 1;
-      len = getline (&line, &siz, in);
-      exit ((len == 4 && line && strcmp (line, "foo\n") == 0) ? 0 : 1);
+        return 1;
+      {
+        /* Test result for a NULL buffer and a zero size.
+           Based on a test program from Karl Heuer.  */
+        char *line = NULL;
+        size_t siz = 0;
+        int len = getline (&line, &siz, in);
+        if (!(len == 4 && line && strcmp (line, "foo\n") == 0))
+          return 1;
+      }
+      {
+        /* Test result for a NULL buffer and a non-zero size.
+           This crashes on FreeBSD 8.0.  */
+        char *line = NULL;
+        size_t siz = (size_t)(~0) / 4;
+        if (getline (&line, &siz, in) == -1)
+          return 1;
+      }
+      return 0;
     }
-    ], am_cv_func_working_getline=yes dnl The library version works.
-    , am_cv_func_working_getline=no dnl The library version does NOT work.
+    ]])], [am_cv_func_working_getline=yes] dnl The library version works.
+    , [am_cv_func_working_getline=no] dnl The library version does NOT work.
     , dnl We're cross compiling. Assume it works on glibc2 systems.
       [AC_EGREP_CPP([Lucky GNU user],
          [
@@ -66,6 +80,9 @@ AC_DEFUN([gl_FUNC_GETLINE],
   fi
 
   if test $am_cv_func_working_getline = no; then
+    dnl Set REPLACE_GETLINE always: Even if we have not found the broken
+    dnl getline function among $LIBS, it may exist in libinet and the
+    dnl executable may be linked with -linet.
     REPLACE_GETLINE=1
     AC_LIBOBJ([getline])
 
index 9b683c2febbd599f6a8351105b01ff4633996b33..a19805eaa4041a41462fd3001146e4dd70ad8f73 100644 (file)
-# getopt.m4 serial 14
-dnl Copyright (C) 2002-2006, 2008 Free Software Foundation, Inc.
+# getopt.m4 serial 24
+dnl Copyright (C) 2002-2006, 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
-# The getopt module assume you want GNU getopt, with getopt_long etc,
-# rather than vanilla POSIX getopt.  This means your code should
-# always include <getopt.h> for the getopt prototypes.
+# Request a POSIX compliant getopt function.
+AC_DEFUN([gl_FUNC_GETOPT_POSIX],
+[
+  m4_divert_text([DEFAULTS], [gl_getopt_required=POSIX])
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  gl_GETOPT_IFELSE([
+    gl_REPLACE_GETOPT
+  ],
+  [])
+])
+
+# Request a POSIX compliant getopt function with GNU extensions (such as
+# options with optional arguments) and the functions getopt_long,
+# getopt_long_only.
+AC_DEFUN([gl_FUNC_GETOPT_GNU],
+[
+  m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU])
+
+  AC_REQUIRE([gl_FUNC_GETOPT_POSIX])
+])
 
-AC_DEFUN([gl_GETOPT_SUBSTITUTE],
+# Request the gnulib implementation of the getopt functions unconditionally.
+# argp.m4 uses this.
+AC_DEFUN([gl_REPLACE_GETOPT],
 [
+  dnl Arrange for getopt.h to be created.
+  gl_GETOPT_SUBSTITUTE_HEADER
+  dnl Arrange for unistd.h to include getopt.h.
+  GNULIB_UNISTD_H_GETOPT=1
+  dnl Arrange to compile the getopt implementation.
   AC_LIBOBJ([getopt])
   AC_LIBOBJ([getopt1])
-  gl_GETOPT_SUBSTITUTE_HEADER
   gl_PREREQ_GETOPT
 ])
 
-AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER],
+# emacs' configure.in uses this.
+AC_DEFUN([gl_GETOPT_IFELSE],
 [
-  GETOPT_H=getopt.h
-  AC_DEFINE([__GETOPT_PREFIX], [[rpl_]],
-    [Define to rpl_ if the getopt replacement functions and variables
-     should be used.])
-  AC_SUBST([GETOPT_H])
+  AC_REQUIRE([gl_GETOPT_CHECK_HEADERS])
+  AS_IF([test -n "$gl_replace_getopt"], [$1], [$2])
 ])
 
+# Determine whether to replace the entire getopt facility.
 AC_DEFUN([gl_GETOPT_CHECK_HEADERS],
 [
-  if test -z "$GETOPT_H"; then
-    AC_CHECK_HEADERS([getopt.h], [], [GETOPT_H=getopt.h])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+  dnl Persuade Solaris <unistd.h> to declare optarg, optind, opterr, optopt.
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  gl_CHECK_NEXT_HEADERS([getopt.h])
+  AC_CHECK_HEADERS_ONCE([getopt.h])
+  if test $ac_cv_header_getopt_h = yes; then
+    HAVE_GETOPT_H=1
+  else
+    HAVE_GETOPT_H=0
+  fi
+  AC_SUBST([HAVE_GETOPT_H])
+
+  gl_replace_getopt=
+
+  dnl Test whether <getopt.h> is available.
+  if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+    AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes])
+  fi
+
+  dnl Test whether the function getopt_long is available.
+  if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+    AC_CHECK_FUNCS([getopt_long_only], [], [gl_replace_getopt=yes])
   fi
 
-  if test -z "$GETOPT_H"; then
-    AC_CHECK_FUNCS([getopt_long_only], [], [GETOPT_H=getopt.h])
+  dnl BSD getopt_long uses an incompatible method to reset option processing.
+  dnl Existence of the variable, in and of itself, is not a reason to replace
+  dnl getopt, but knowledge of the variable is needed to determine how to
+  dnl reset and whether a reset reparses the environment.
+  if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+    AC_CHECK_DECLS([optreset], [], [],
+      [[#include <getopt.h>]])
   fi
 
-  dnl BSD getopt_long uses an incompatible method to reset option processing,
-  dnl and (as of 2004-10-15) mishandles optional option-arguments.
-  if test -z "$GETOPT_H"; then
-    AC_CHECK_DECL([optreset], [GETOPT_H=getopt.h], [], [#include <getopt.h>])
+  dnl mingw's getopt (in libmingwex.a) does weird things when the options
+  dnl strings starts with '+' and it's not the first call.  Some internal state
+  dnl is left over from earlier calls, and neither setting optind = 0 nor
+  dnl setting optreset = 1 get rid of this internal state.
+  dnl POSIX is silent on optind vs. optreset, so we allow either behavior.
+  if test -z "$gl_replace_getopt"; then
+    AC_CACHE_CHECK([whether getopt is POSIX compatible],
+      [gl_cv_func_getopt_posix],
+      [
+        dnl This test fails on mingw and succeeds on all other platforms.
+        AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if !HAVE_DECL_OPTRESET
+# define OPTIND_MIN 0
+#else
+# define OPTIND_MIN 1
+#endif
+
+int
+main ()
+{
+  {
+    int argc = 0;
+    char *argv[10];
+    int c;
+
+    argv[argc++] = "program";
+    argv[argc++] = "-a";
+    argv[argc++] = "foo";
+    argv[argc++] = "bar";
+    argv[argc] = NULL;
+    optind = OPTIND_MIN;
+    opterr = 0;
+
+    c = getopt (argc, argv, "ab");
+    if (!(c == 'a'))
+      return 1;
+    c = getopt (argc, argv, "ab");
+    if (!(c == -1))
+      return 2;
+    if (!(optind == 2))
+      return 3;
+  }
+  /* Some internal state exists at this point.  */
+  {
+    int argc = 0;
+    char *argv[10];
+    int c;
+
+    argv[argc++] = "program";
+    argv[argc++] = "donald";
+    argv[argc++] = "-p";
+    argv[argc++] = "billy";
+    argv[argc++] = "duck";
+    argv[argc++] = "-a";
+    argv[argc++] = "bar";
+    argv[argc] = NULL;
+    optind = OPTIND_MIN;
+    opterr = 0;
+
+    c = getopt (argc, argv, "+abp:q:");
+    if (!(c == -1))
+      return 4;
+    if (!(strcmp (argv[0], "program") == 0))
+      return 5;
+    if (!(strcmp (argv[1], "donald") == 0))
+      return 6;
+    if (!(strcmp (argv[2], "-p") == 0))
+      return 7;
+    if (!(strcmp (argv[3], "billy") == 0))
+      return 8;
+    if (!(strcmp (argv[4], "duck") == 0))
+      return 9;
+    if (!(strcmp (argv[5], "-a") == 0))
+      return 10;
+    if (!(strcmp (argv[6], "bar") == 0))
+      return 11;
+    if (!(optind == 1))
+      return 12;
+  }
+
+  return 0;
+}
+]])],
+          [gl_cv_func_getopt_posix=yes], [gl_cv_func_getopt_posix=no],
+          [case "$host_os" in
+             mingw*) gl_cv_func_getopt_posix="guessing no";;
+             *)      gl_cv_func_getopt_posix="guessing yes";;
+           esac
+          ])
+      ])
+    case "$gl_cv_func_getopt_posix" in
+      *no) gl_replace_getopt=yes ;;
+    esac
   fi
 
-  dnl Solaris 10 getopt doesn't handle `+' as a leading character in an
-  dnl option string (as of 2005-05-05).
-  if test -z "$GETOPT_H"; then
-    AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_gnu_getopt],
-      [AC_RUN_IFELSE(
-       [AC_LANG_PROGRAM([[#include <getopt.h>]],
-          [[
-            char *myargv[3];
-            myargv[0] = "conftest";
-            myargv[1] = "-+";
-            myargv[2] = 0;
-            return getopt (2, myargv, "+a") != '?';
-          ]])],
-       [gl_cv_func_gnu_getopt=yes],
-       [gl_cv_func_gnu_getopt=no],
-       [dnl cross compiling - pessimistically guess based on decls
-        dnl Solaris 10 getopt doesn't handle `+' as a leading character in an
-        dnl option string (as of 2005-05-05).
-        AC_CHECK_DECL([getopt_clip],
-          [gl_cv_func_gnu_getopt=no], [gl_cv_func_gnu_getopt=yes],
-          [#include <getopt.h>])])])
-    if test "$gl_cv_func_gnu_getopt" = "no"; then
-      GETOPT_H=getopt.h
+  if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+    AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_getopt_gnu],
+      [# Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the
+       # optstring is necessary for programs like m4 that have POSIX-mandated
+       # semantics for supporting options interspersed with files.
+       # Also, since getopt_long is a GNU extension, we require optind=0.
+       gl_had_POSIXLY_CORRECT=${POSIXLY_CORRECT:+yes}
+       POSIXLY_CORRECT=1
+       export POSIXLY_CORRECT
+       AC_RUN_IFELSE(
+        [AC_LANG_PROGRAM([[#include <getopt.h>
+                           #include <stddef.h>
+                           #include <string.h>
+           ]], [[
+             /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw,
+                and fails on MacOS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5,
+                OSF/1 5.1, Solaris 10.  */
+             {
+               char *myargv[3];
+               myargv[0] = "conftest";
+               myargv[1] = "-+";
+               myargv[2] = 0;
+               opterr = 0;
+               if (getopt (2, myargv, "+a") != '?')
+                 return 1;
+             }
+             /* This code succeeds on glibc 2.8, mingw,
+                and fails on MacOS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11,
+                IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x.  */
+             {
+               char *argv[] = { "program", "-p", "foo", "bar", NULL };
+
+               optind = 1;
+               if (getopt (4, argv, "p::") != 'p')
+                 return 2;
+               if (optarg != NULL)
+                 return 3;
+               if (getopt (4, argv, "p::") != -1)
+                 return 4;
+               if (optind != 2)
+                 return 5;
+             }
+             /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0.  */
+             {
+               char *argv[] = { "program", "foo", "-p", NULL };
+               optind = 0;
+               if (getopt (3, argv, "-p") != 1)
+                 return 6;
+               if (getopt (3, argv, "-p") != 'p')
+                 return 7;
+             }
+             return 0;
+           ]])],
+        [gl_cv_func_getopt_gnu=yes],
+        [gl_cv_func_getopt_gnu=no],
+        [dnl Cross compiling. Guess based on host and declarations.
+         case $host_os:$ac_cv_have_decl_optreset in
+           *-gnu*:* | mingw*:*) gl_cv_func_getopt_gnu=no;;
+           *:yes)               gl_cv_func_getopt_gnu=no;;
+           *)                   gl_cv_func_getopt_gnu=yes;;
+         esac
+        ])
+       if test "$gl_had_POSIXLY_CORRECT" != yes; then
+         AS_UNSET([POSIXLY_CORRECT])
+       fi
+      ])
+    if test "$gl_cv_func_getopt_gnu" = "no"; then
+      gl_replace_getopt=yes
     fi
   fi
 ])
 
-AC_DEFUN([gl_GETOPT_IFELSE],
+# emacs' configure.in uses this.
+AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER],
 [
-  AC_REQUIRE([gl_GETOPT_CHECK_HEADERS])
-  AS_IF([test -n "$GETOPT_H"], [$1], [$2])
+  GETOPT_H=getopt.h
+  AC_DEFINE([__GETOPT_PREFIX], [[rpl_]],
+    [Define to rpl_ if the getopt replacement functions and variables
+     should be used.])
+  AC_SUBST([GETOPT_H])
 ])
 
-AC_DEFUN([gl_GETOPT], [gl_GETOPT_IFELSE([gl_GETOPT_SUBSTITUTE])])
-
 # Prerequisites of lib/getopt*.
+# emacs' configure.in uses this.
 AC_DEFUN([gl_PREREQ_GETOPT],
 [
   AC_CHECK_DECLS_ONCE([getenv])
index 0d07a3a53bb95aa2dd8f387630f0c7578cac1e50..8968516e2c7f462e4ed028cd286193d46304bb82 100644 (file)
@@ -1,5 +1,6 @@
 # getpagesize.m4 serial 7
-dnl Copyright (C) 2002, 2004-2005, 2007 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2004-2005, 2007, 2009-2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index ffec9dedff08c686bc2e8e29004c2a8b3a054c63..9f0762ed8eec3b8252131f715f3bb3ed0b9dfffb 100644 (file)
@@ -1,5 +1,5 @@
 # gettext.m4 serial 62 (gettext-0.18)
-dnl Copyright (C) 1995-2009 Free Software Foundation, Inc.
+dnl Copyright (C) 1995-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 11643e8422f4f69be09fa061d09c935b4bd3f154..9e7fde4272f5f60d1e3942501fab0a9ab314c5f0 100644 (file)
@@ -1,5 +1,5 @@
 # gettime.m4 serial 7
-dnl Copyright (C) 2002, 2004, 2005, 2006, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2004-2006, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 0fec7d42b7c7dfcca7f73e679b849b351d2b8315..709a4d4fb4723c132082ced5fdbc454945985743 100644 (file)
@@ -1,6 +1,6 @@
-# serial 12
+# serial 15
 
-# Copyright (C) 2001-2003, 2005, 2007, 2009 Free Software Foundation, Inc.
+# Copyright (C) 2001-2003, 2005, 2007, 2009-2010 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -11,33 +11,53 @@ AC_DEFUN([gl_FUNC_GETTIMEOFDAY],
 [
   AC_REQUIRE([AC_C_RESTRICT])
   AC_REQUIRE([gl_HEADER_SYS_TIME_H])
+  AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS])
   AC_CHECK_FUNCS_ONCE([gettimeofday])
 
-  AC_CACHE_CHECK([for gettimeofday with POSIX signature],
-    [gl_cv_func_gettimeofday_posix_signature],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-         [[#include <sys/time.h>
-           struct timeval c;
-         ]],
-         [[
-           int (*f) (struct timeval *restrict, void *restrict) = gettimeofday;
-           int x = f (&c, 0);
-           return !(x | c.tv_sec | c.tv_usec);
-         ]])],
-       [gl_cv_func_gettimeofday_posix_signature=yes],
-       [gl_cv_func_gettimeofday_posix_signature=no])])
-
-  gl_FUNC_GETTIMEOFDAY_CLOBBER
-
-  if test $gl_cv_func_gettimeofday_posix_signature != yes; then
-    REPLACE_GETTIMEOFDAY=1
-    SYS_TIME_H=sys/time.h
-    if test $gl_cv_func_gettimeofday_clobber != yes; then
+  gl_gettimeofday_timezone=void
+  if test $ac_cv_func_gettimeofday != yes; then
+    HAVE_GETTIMEOFDAY=0
+    AC_LIBOBJ([gettimeofday])
+    gl_PREREQ_GETTIMEOFDAY
+  else
+    gl_FUNC_GETTIMEOFDAY_CLOBBER
+    AC_CACHE_CHECK([for gettimeofday with POSIX signature],
+      [gl_cv_func_gettimeofday_posix_signature],
+      [AC_COMPILE_IFELSE(
+         [AC_LANG_PROGRAM(
+            [[#include <sys/time.h>
+              struct timeval c;
+              int gettimeofday (struct timeval *restrict, void *restrict);
+            ]],
+            [[/* glibc uses struct timezone * rather than the POSIX void *
+                 if _GNU_SOURCE is defined.  However, since the only portable
+                 use of gettimeofday uses NULL as the second parameter, and
+                 since the glibc definition is actually more typesafe, it is
+                 not worth wrapping this to get a compliant signature.  */
+              int (*f) (struct timeval *restrict, void *restrict)
+                = gettimeofday;
+              int x = f (&c, 0);
+              return !(x | c.tv_sec | c.tv_usec);
+            ]])],
+          [gl_cv_func_gettimeofday_posix_signature=yes],
+          [AC_COMPILE_IFELSE(
+            [AC_LANG_PROGRAM(
+              [[#include <sys/time.h>
+int gettimeofday (struct timeval *restrict, struct timezone *restrict);
+              ]])],
+            [gl_cv_func_gettimeofday_posix_signature=almost],
+            [gl_cv_func_gettimeofday_posix_signature=no])])])
+    if test $gl_cv_func_gettimeofday_posix_signature = almost; then
+      gl_gettimeofday_timezone='struct timezone'
+    elif test $gl_cv_func_gettimeofday_posix_signature != yes; then
+      REPLACE_GETTIMEOFDAY=1
       AC_LIBOBJ([gettimeofday])
       gl_PREREQ_GETTIMEOFDAY
     fi
   fi
+  AC_DEFINE_UNQUOTED([GETTIMEOFDAY_TIMEZONE], [$gl_gettimeofday_timezone],
+    [Define this to 'void' or 'struct timezone' to match the system's
+     declaration of the second argument to gettimeofday.])
 ])
 
 
@@ -56,21 +76,21 @@ AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER],
   [gl_cv_func_gettimeofday_clobber],
   [AC_RUN_IFELSE(
      [AC_LANG_PROGRAM(
-       [[#include <string.h>
-         #include <sys/time.h>
-         #include <time.h>
-         #include <stdlib.h>
-       ]],
-       [[
-         time_t t = 0;
-         struct tm *lt;
-         struct tm saved_lt;
-         struct timeval tv;
-         lt = localtime (&t);
-         saved_lt = *lt;
-         gettimeofday (&tv, NULL);
-         return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0;
-       ]])],
+        [[#include <string.h>
+          #include <sys/time.h>
+          #include <time.h>
+          #include <stdlib.h>
+        ]],
+        [[
+          time_t t = 0;
+          struct tm *lt;
+          struct tm saved_lt;
+          struct timeval tv;
+          lt = localtime (&t);
+          saved_lt = *lt;
+          gettimeofday (&tv, NULL);
+          return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0;
+        ]])],
      [gl_cv_func_gettimeofday_clobber=no],
      [gl_cv_func_gettimeofday_clobber=yes],
      dnl When crosscompiling, assume it is broken.
@@ -78,7 +98,6 @@ AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER],
 
  if test $gl_cv_func_gettimeofday_clobber = yes; then
    REPLACE_GETTIMEOFDAY=1
-   SYS_TIME_H=sys/time.h
    gl_GETTIMEOFDAY_REPLACE_LOCALTIME
    AC_DEFINE([GETTIMEOFDAY_CLOBBERS_LOCALTIME], [1],
      [Define if gettimeofday clobbers the localtime buffer.])
index 93fbf4745922719a47db7f0300eb1f202310eaf6..68ada9d4d5b844e3ff5be076ec1156c542f6630e 100644 (file)
@@ -1,5 +1,5 @@
 # glibc21.m4 serial 4
-dnl Copyright (C) 2000-2002, 2004, 2008 Free Software Foundation, Inc.
+dnl Copyright (C) 2000-2002, 2004, 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -12,16 +12,16 @@ AC_DEFUN([gl_GLIBC21],
     AC_CACHE_CHECK([whether we are using the GNU C Library 2.1 or newer],
       [ac_cv_gnu_library_2_1],
       [AC_EGREP_CPP([Lucky GNU user],
-       [
+        [
 #include <features.h>
 #ifdef __GNU_LIBRARY__
  #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
   Lucky GNU user
  #endif
 #endif
-       ],
-       [ac_cv_gnu_library_2_1=yes],
-       [ac_cv_gnu_library_2_1=no])
+        ],
+        [ac_cv_gnu_library_2_1=yes],
+        [ac_cv_gnu_library_2_1=no])
       ]
     )
     AC_SUBST([GLIBC21])
index 50e399aa1c18f37ff4f1737df0db707d6ecef6a6..80ba26332fa6600589b57ba5efe4083dc5569110 100644 (file)
@@ -1,5 +1,5 @@
-# gnulib-common.m4 serial 10
-dnl Copyright (C) 2007-2009 Free Software Foundation, Inc.
+# gnulib-common.m4 serial 13
+dnl Copyright (C) 2007-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -23,14 +23,17 @@ AC_DEFUN([gl_COMMON_BODY], [
 # define __GNUC_STDC_INLINE__ 1
 #endif])
   AH_VERBATIM([unused_parameter],
-[/* Define as a marker that can be attached to function parameter declarations
-   for parameters that are not used.  This helps to reduce warnings, such as
-   from GCC -Wunused-parameter.  */
+[/* Define as a marker that can be attached to declarations that might not
+    be used.  This helps to reduce warnings, such as from
+    GCC -Wunused-parameter.  */
 #if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
-# define _UNUSED_PARAMETER_ __attribute__ ((__unused__))
+# define _GL_UNUSED __attribute__ ((__unused__))
 #else
-# define _UNUSED_PARAMETER_
+# define _GL_UNUSED
 #endif
+/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
+   is a misnomer outside of parameter lists.  */
+#define _UNUSED_PARAMETER_ _GL_UNUSED
 ])
 ])
 
@@ -49,10 +52,25 @@ m4_ifndef([m4_foreach_w],
   [m4_define([m4_foreach_w],
     [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])])
 
+# AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH])
+# ----------------------------------------------------
+# Backport of autoconf-2.63b's macro.
+# Remove this macro when we can assume autoconf >= 2.64.
+m4_ifndef([AS_VAR_IF],
+[m4_define([AS_VAR_IF],
+[AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])])
+
 # AC_PROG_MKDIR_P
-# is a backport of autoconf-2.60's AC_PROG_MKDIR_P.
-# Remove this macro when we can assume autoconf >= 2.60.
-m4_ifdef([AC_PROG_MKDIR_P], [], [
+# is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix
+# for interoperability with automake-1.9.6 from autoconf-2.62.
+# Remove this macro when we can assume autoconf >= 2.62 or
+# autoconf >= 2.60 && automake >= 1.10.
+m4_ifdef([AC_PROG_MKDIR_P], [
+  dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed.
+  m4_define([AC_PROG_MKDIR_P],
+    m4_defn([AC_PROG_MKDIR_P])[
+    AC_SUBST([MKDIR_P])])], [
+  dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P.
   AC_DEFUN_ONCE([AC_PROG_MKDIR_P],
     [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
      MKDIR_P='$(mkdir_p)'
@@ -70,13 +88,13 @@ AC_DEFUN([AC_C_RESTRICT],
    for ac_kw in __restrict __restrict__ _Restrict restrict; do
      AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
       [[typedef int * int_ptr;
-       int foo (int_ptr $ac_kw ip) {
-       return ip[0];
+        int foo (int_ptr $ac_kw ip) {
+        return ip[0];
        }]],
       [[int s[1];
-       int * $ac_kw t = s;
-       t[0] = 0;
-       return foo(t)]])],
+        int * $ac_kw t = s;
+        t[0] = 0;
+        return foo(t)]])],
       [ac_cv_c_restrict=$ac_kw])
      test "$ac_cv_c_restrict" != no && break
    done
@@ -109,3 +127,16 @@ AC_DEFUN([gl_BIGENDIAN],
 [
   AC_C_BIGENDIAN
 ])
+
+# gl_CACHE_VAL_SILENT(cache-id, command-to-set-it)
+# is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not
+# output a spurious "(cached)" mark in the midst of other configure output.
+# This macro should be used instead of AC_CACHE_VAL when it is not surrounded
+# by an AC_MSG_CHECKING/AC_MSG_RESULT pair.
+AC_DEFUN([gl_CACHE_VAL_SILENT],
+[
+  saved_as_echo_n="$as_echo_n"
+  as_echo_n=':'
+  AC_CACHE_VAL([$1], [$2])
+  as_echo_n="$saved_as_echo_n"
+])
index 6eea276988f18555f1145742950b7bb7f959c79e..f9a584dd0e344a73c3602de217ec227c70c414ef 100644 (file)
@@ -1,7 +1,7 @@
 # -*- buffer-read-only: t -*- vi: set ro:
 # DO NOT EDIT! GENERATED AUTOMATICALLY!
 # DO NOT EDIT! GENERATED AUTOMATICALLY!
-# Copyright (C) 2002-2009 Free Software Foundation, Inc.
+# Copyright (C) 2002-2010 Free Software Foundation, Inc.
 #
 # This file is free software, distributed under the terms of the GNU
 # General Public License.  As a special exception to the GNU General
@@ -51,18 +51,20 @@ AC_DEFUN([gl_INIT],
   m4_pushdef([gl_LIBSOURCES_LIST], [])
   m4_pushdef([gl_LIBSOURCES_DIR], [])
   gl_COMMON
-  gl_source_base='.#bootmp/lib'
+  gl_source_base='gnu'
   gl_FUNC_ALLOCA
   gl_ARGMATCH
   gl_ARGP
   m4_ifdef([AM_XGETTEXT_OPTION],
-    [AM_XGETTEXT_OPTION([--flag=argp_error:2:c-format])
-     AM_XGETTEXT_OPTION([--flag=argp_failure:4:c-format])])
+    [AM_][XGETTEXT_OPTION([--flag=argp_error:2:c-format])
+     AM_][XGETTEXT_OPTION([--flag=argp_failure:4:c-format])])
   gl_BACKUPFILE
+  AC_REQUIRE([AC_C_INLINE])
   gl_FUNC_BTOWC
   gl_WCHAR_MODULE_INDICATOR([btowc])
-  gl_CANONICALIZE_LGPL
-  gl_MODULE_INDICATOR([canonicalize-lgpl])
+  gl_FUNC_CANONICALIZE_FILENAME_MODE
+  gl_MODULE_INDICATOR([canonicalize])
+  gl_STDLIB_MODULE_INDICATOR([canonicalize_file_name])
   gl_FUNC_CHDIR_LONG
   gl_FUNC_CHOWN
   gl_UNISTD_MODULE_INDICATOR([chown])
@@ -74,31 +76,36 @@ AC_DEFUN([gl_INIT],
   gl_CLOSEOUT
   gl_CHECK_TYPE_STRUCT_DIRENT_D_INO
   gl_DIRENT_H
+  gl_DIRENT_SAFER
+  gl_MODULE_INDICATOR([dirent-safer])
   gl_FUNC_DIRFD
   gl_DIRENT_MODULE_INDICATOR([dirfd])
   gl_DIRNAME
+  gl_MODULE_INDICATOR([dirname])
+  gl_DIRNAME_LGPL
   gl_DOUBLE_SLASH_ROOT
   gl_FUNC_DUP2
   gl_UNISTD_MODULE_INDICATOR([dup2])
   gl_ENVIRON
   gl_UNISTD_MODULE_INDICATOR([environ])
-  AC_REQUIRE([gl_HEADER_ERRNO_H])
+  gl_HEADER_ERRNO_H
   gl_ERROR
   m4_ifdef([AM_XGETTEXT_OPTION],
-    [AM_XGETTEXT_OPTION([--flag=error:3:c-format])
-     AM_XGETTEXT_OPTION([--flag=error_at_line:5:c-format])])
+    [AM_][XGETTEXT_OPTION([--flag=error:3:c-format])
+     AM_][XGETTEXT_OPTION([--flag=error_at_line:5:c-format])])
   gl_EXCLUDE
-  gl_EXITFAIL
   gl_FUNC_FCHDIR
   gl_UNISTD_MODULE_INDICATOR([fchdir])
   gl_FUNC_FCLOSE
   gl_STDIO_MODULE_INDICATOR([fclose])
+  gl_FUNC_FCNTL
+  gl_FCNTL_MODULE_INDICATOR([fcntl])
   gl_FCNTL_H
-  gl_FCNTL_SAFER
-  gl_MODULE_INDICATOR([fcntl-safer])
+  gl_FUNC_FDOPENDIR
+  gl_DIRENT_MODULE_INDICATOR([fdopendir])
   gl_FILEBLOCKS
   gl_FLOAT_H
-  # No macro. You should also use one of fnmatch-posix or fnmatch-gnu.
+  gl_FUNC_FNMATCH_POSIX
   gl_FUNC_FNMATCH_GNU
   gl_FUNC_FPENDING
   gl_FUNC_FSEEKO
@@ -110,9 +117,13 @@ AC_DEFUN([gl_INIT],
   gl_GETDATE
   gl_FUNC_GETDELIM
   gl_STDIO_MODULE_INDICATOR([getdelim])
+  gl_FUNC_GETDTABLESIZE
+  gl_UNISTD_MODULE_INDICATOR([getdtablesize])
   gl_FUNC_GETLINE
   gl_STDIO_MODULE_INDICATOR([getline])
-  gl_GETOPT
+  gl_FUNC_GETOPT_GNU
+  gl_MODULE_INDICATOR([getopt-gnu])
+  gl_FUNC_GETOPT_POSIX
   gl_FUNC_GETPAGESIZE
   gl_UNISTD_MODULE_INDICATOR([getpagesize])
   dnl you must add AM_GNU_GETTEXT([external]) or similar to configure.ac.
@@ -121,11 +132,13 @@ AC_DEFUN([gl_INIT],
   AC_SUBST([LTLIBINTL])
   gl_GETTIME
   gl_FUNC_GETTIMEOFDAY
+  gl_SYS_TIME_MODULE_INDICATOR([gettimeofday])
   gl_HASH
   gl_HUMAN
   gl_INLINE
   gl_INTTOSTR
   gl_INTTYPES_H
+  gl_LANGINFO_H
   gl_FUNC_LCHOWN
   gl_UNISTD_MODULE_INDICATOR([lchown])
   gl_LOCALCHARSET
@@ -143,20 +156,27 @@ AC_DEFUN([gl_INIT],
   gl_MBCHAR
   gl_FUNC_MBRTOWC
   gl_WCHAR_MODULE_INDICATOR([mbrtowc])
-  gl_FUNC_MBSCASECMP
   gl_STRING_MODULE_INDICATOR([mbscasecmp])
   gl_FUNC_MBSINIT
   gl_WCHAR_MODULE_INDICATOR([mbsinit])
+  gl_FUNC_MBSRTOWCS
+  gl_WCHAR_MODULE_INDICATOR([mbsrtowcs])
   gl_MBITER
+  gl_FUNC_MEMCHR
+  gl_STRING_MODULE_INDICATOR([memchr])
   gl_FUNC_MEMPCPY
   gl_STRING_MODULE_INDICATOR([mempcpy])
   gl_FUNC_MEMRCHR
   gl_STRING_MODULE_INDICATOR([memrchr])
+  gl_FUNC_MKDIR
   gt_FUNC_MKDTEMP
   gl_STDLIB_MODULE_INDICATOR([mkdtemp])
   gl_FUNC_MKTIME
+  gl_TIME_MODULE_INDICATOR([mktime])
   gl_MODECHANGE
-  AC_REQUIRE([gl_MULTIARCH])
+  gl_MULTIARCH
+  gl_FUNC_NL_LANGINFO
+  gl_LANGINFO_MODULE_INDICATOR([nl_langinfo])
   AC_FUNC_OBSTACK
   dnl Note: AC_FUNC_OBSTACK does AC_LIBSOURCES([obstack.h, obstack.c]).
   gl_FUNC_OPEN
@@ -164,6 +184,9 @@ AC_DEFUN([gl_INIT],
   gl_FCNTL_MODULE_INDICATOR([open])
   gl_FUNC_OPENAT
   gl_PATHMAX
+  gl_PRIV_SET
+  AC_CHECK_DECLS([program_invocation_name], [], [], [#include <errno.h>])
+  AC_CHECK_DECLS([program_invocation_short_name], [], [], [#include <errno.h>])
   gl_QUOTE
   gl_QUOTEARG
   gl_FUNC_RAWMEMCHR
@@ -173,10 +196,13 @@ AC_DEFUN([gl_INIT],
   gl_FUNC_REALLOC_POSIX
   gl_STDLIB_MODULE_INDICATOR([realloc-posix])
   gl_REGEX
+  gl_FUNC_RMDIR
+  gl_UNISTD_MODULE_INDICATOR([rmdir])
   gl_FUNC_RPMATCH
   gl_STDLIB_MODULE_INDICATOR([rpmatch])
   gl_SAFE_READ
   gl_SAFE_WRITE
+  gl_SAME
   gl_SAVE_CWD
   gl_SAVEDIR
   gl_FUNC_SETENV
@@ -187,10 +213,13 @@ AC_DEFUN([gl_INIT],
   gl_FUNC_SNPRINTF
   gl_STDIO_MODULE_INDICATOR([snprintf])
   gt_TYPE_SSIZE_T
+  gl_FUNC_STAT
+  gl_SYS_STAT_MODULE_INDICATOR([stat])
   gl_STAT_TIME
   gl_STAT_BIRTHTIME
   gl_STDARG_H
   AM_STDBOOL_H
+  gl_STDDEF_H
   gl_STDINT_H
   gl_STDIO_H
   gl_STDLIB_H
@@ -230,13 +259,20 @@ AC_DEFUN([gl_INIT],
   gl_TIMESPEC
   gl_UNISTD_H
   gl_UNISTD_SAFER
+  gl_FUNC_UNLINK
+  gl_UNISTD_MODULE_INDICATOR([unlink])
   gl_UNLINKDIR
   gl_FUNC_GLIBC_UNLOCKED_IO
   gl_FUNC_UNSETENV
   gl_STDLIB_MODULE_INDICATOR([unsetenv])
-  gl_FUNC_UTIME
   gl_UTIMENS
   gl_FUNC_VASNPRINTF
+  gl_FUNC_VASPRINTF
+  gl_STDIO_MODULE_INDICATOR([vasprintf])
+  m4_ifdef([AM_XGETTEXT_OPTION],
+    [AM_][XGETTEXT_OPTION([--flag=asprintf:2:c-format])
+     AM_][XGETTEXT_OPTION([--flag=vasprintf:2:c-format])])
+  gl_VERSION_ETC
   gl_FUNC_VSNPRINTF
   gl_STDIO_MODULE_INDICATOR([vsnprintf])
   gl_WCHAR_H
@@ -252,6 +288,9 @@ AC_DEFUN([gl_INIT],
   gl_XSIZE
   gl_XSTRNDUP
   gl_XSTRTOL
+  gl_XVASPRINTF
+  m4_ifdef([AM_XGETTEXT_OPTION],
+    [AM_][XGETTEXT_OPTION([--flag=xasprintf:1:c-format])])
   m4_ifval(gl_LIBSOURCES_LIST, [
     m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
       for gl_file in ]gl_LIBSOURCES_LIST[ ; do
@@ -274,7 +313,7 @@ AC_DEFUN([gl_INIT],
     if test -n "$gl_LIBOBJS"; then
       # Remove the extension.
       sed_drop_objext='s/\.o$//;s/\.obj$//'
-      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed "$sed_drop_objext" | sort | uniq`; do
+      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
         gl_libobjs="$gl_libobjs $i.$ac_objext"
         gl_ltlibobjs="$gl_ltlibobjs $i.lo"
       done
@@ -290,7 +329,7 @@ AC_DEFUN([gl_INIT],
   m4_pushdef([gltests_LIBSOURCES_LIST], [])
   m4_pushdef([gltests_LIBSOURCES_DIR], [])
   gl_COMMON
-  gl_source_base='.#bootmp/tests'
+  gl_source_base='tests'
   m4_ifval(gltests_LIBSOURCES_LIST, [
     m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ ||
       for gl_file in ]gltests_LIBSOURCES_LIST[ ; do
@@ -313,7 +352,7 @@ AC_DEFUN([gl_INIT],
     if test -n "$gltests_LIBOBJS"; then
       # Remove the extension.
       sed_drop_objext='s/\.o$//;s/\.obj$//'
-      for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed "$sed_drop_objext" | sort | uniq`; do
+      for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
         gltests_libobjs="$gltests_libobjs $i.$ac_objext"
         gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
       done
@@ -321,10 +360,10 @@ AC_DEFUN([gl_INIT],
     AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs])
     AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs])
   ])
-  LIBTAR_LIBDEPS="$gl_libdeps"
-  AC_SUBST([LIBTAR_LIBDEPS])
-  LIBTAR_LTLIBDEPS="$gl_ltlibdeps"
-  AC_SUBST([LIBTAR_LTLIBDEPS])
+  LIBGNU_LIBDEPS="$gl_libdeps"
+  AC_SUBST([LIBGNU_LIBDEPS])
+  LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
+  AC_SUBST([LIBGNU_LTLIBDEPS])
 ])
 
 # Like AC_LIBOBJ, except that the module name goes
@@ -348,7 +387,7 @@ AC_DEFUN([gl_REPLACE_FUNCS], [
 AC_DEFUN([gl_LIBSOURCES], [
   m4_foreach([_gl_NAME], [$1], [
     m4_if(_gl_NAME, [alloca.c], [], [
-      m4_define([gl_LIBSOURCES_DIR], [.#bootmp/lib])
+      m4_define([gl_LIBSOURCES_DIR], [gnu])
       m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ])
     ])
   ])
@@ -375,7 +414,7 @@ AC_DEFUN([gltests_REPLACE_FUNCS], [
 AC_DEFUN([gltests_LIBSOURCES], [
   m4_foreach([_gl_NAME], [$1], [
     m4_if(_gl_NAME, [alloca.c], [], [
-      m4_define([gltests_LIBSOURCES_DIR], [.#bootmp/tests])
+      m4_define([gltests_LIBSOURCES_DIR], [tests])
       m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ])
     ])
   ])
@@ -384,11 +423,16 @@ AC_DEFUN([gltests_LIBSOURCES], [
 # This macro records the list of files which have been installed by
 # gnulib-tool and may be removed by future gnulib-tool invocations.
 AC_DEFUN([gl_FILE_LIST], [
+  build-aux/arg-nonnull.h
+  build-aux/c++defs.h
   build-aux/config.rpath
-  build-aux/link-warning.h
+  build-aux/gitlog-to-changelog
+  build-aux/warn-on-use.h
   doc/getdate.texi
   lib/alloca.c
   lib/alloca.in.h
+  lib/areadlink-with-size.c
+  lib/areadlink.h
   lib/argmatch.c
   lib/argmatch.h
   lib/argp-ba.c
@@ -402,30 +446,39 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/argp-pin.c
   lib/argp-pv.c
   lib/argp-pvh.c
+  lib/argp-version-etc.c
+  lib/argp-version-etc.h
   lib/argp-xinl.c
   lib/argp.h
   lib/asnprintf.c
+  lib/asprintf.c
   lib/at-func.c
   lib/backupfile.c
   lib/backupfile.h
+  lib/basename-lgpl.c
   lib/basename.c
+  lib/bitrotate.h
   lib/btowc.c
   lib/c-ctype.c
   lib/c-ctype.h
-  lib/canonicalize-lgpl.c
+  lib/canonicalize.c
   lib/canonicalize.h
   lib/chdir-long.c
   lib/chdir-long.h
   lib/chown.c
+  lib/close-hook.c
+  lib/close-hook.h
   lib/close-stream.c
   lib/close-stream.h
   lib/close.c
   lib/closeout.c
   lib/closeout.h
   lib/config.charset
-  lib/creat-safer.c
+  lib/dirent--.h
+  lib/dirent-safer.h
   lib/dirent.in.h
   lib/dirfd.c
+  lib/dirname-lgpl.c
   lib/dirname.c
   lib/dirname.h
   lib/dup-safer.c
@@ -442,10 +495,12 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/fchown-stub.c
   lib/fchownat.c
   lib/fclose.c
-  lib/fcntl--.h
-  lib/fcntl-safer.h
+  lib/fcntl.c
   lib/fcntl.in.h
   lib/fd-safer.c
+  lib/fdopendir.c
+  lib/file-set.c
+  lib/file-set.h
   lib/fileblocks.c
   lib/float+.h
   lib/float.in.h
@@ -463,6 +518,7 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/getdate.h
   lib/getdate.y
   lib/getdelim.c
+  lib/getdtablesize.c
   lib/getline.c
   lib/getopt.c
   lib/getopt.in.h
@@ -472,6 +528,10 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/gettext.h
   lib/gettime.c
   lib/gettimeofday.c
+  lib/hash-pjw.c
+  lib/hash-pjw.h
+  lib/hash-triple.c
+  lib/hash-triple.h
   lib/hash.c
   lib/hash.h
   lib/human.c
@@ -481,6 +541,7 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/inttostr.c
   lib/inttostr.h
   lib/inttypes.in.h
+  lib/langinfo.in.h
   lib/lchown.c
   lib/localcharset.c
   lib/localcharset.h
@@ -495,30 +556,41 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/mbrtowc.c
   lib/mbscasecmp.c
   lib/mbsinit.c
+  lib/mbsrtowcs-state.c
+  lib/mbsrtowcs.c
   lib/mbuiter.h
+  lib/memchr.c
+  lib/memchr.valgrind
   lib/mempcpy.c
   lib/memrchr.c
+  lib/mkdir.c
   lib/mkdirat.c
   lib/mkdtemp.c
+  lib/mktime-internal.h
   lib/mktime.c
   lib/modechange.c
   lib/modechange.h
+  lib/nl_langinfo.c
   lib/obstack.c
   lib/obstack.h
   lib/offtostr.c
-  lib/open-safer.c
   lib/open.c
   lib/openat-die.c
   lib/openat-priv.h
   lib/openat-proc.c
   lib/openat.c
   lib/openat.h
+  lib/opendir-safer.c
   lib/pathmax.h
   lib/pipe-safer.c
   lib/printf-args.c
   lib/printf-args.h
   lib/printf-parse.c
   lib/printf-parse.h
+  lib/priv-set.c
+  lib/priv-set.h
+  lib/progname.c
+  lib/progname.h
   lib/quote.c
   lib/quote.h
   lib/quotearg.c
@@ -535,12 +607,15 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/regex_internal.c
   lib/regex_internal.h
   lib/regexec.c
+  lib/rmdir.c
   lib/rpmatch.c
   lib/safe-read.c
   lib/safe-read.h
   lib/safe-write.c
   lib/safe-write.h
   lib/same-inode.h
+  lib/same.c
+  lib/same.h
   lib/save-cwd.c
   lib/save-cwd.h
   lib/savedir.c
@@ -551,8 +626,10 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/snprintf.c
   lib/stat-macros.h
   lib/stat-time.h
+  lib/stat.c
   lib/stdarg.in.h
   lib/stdbool.in.h
+  lib/stddef.in.h
   lib/stdint.in.h
   lib/stdio-impl.h
   lib/stdio-write.c
@@ -596,21 +673,22 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/uniwidth.h
   lib/uniwidth/cjk.h
   lib/uniwidth/width.c
+  lib/unlink.c
+  lib/unlinkat.c
   lib/unlinkdir.c
   lib/unlinkdir.h
   lib/unlocked-io.h
   lib/unsetenv.c
-  lib/utime.c
   lib/utimens.c
   lib/utimens.h
   lib/vasnprintf.c
   lib/vasnprintf.h
+  lib/vasprintf.c
   lib/verify.h
   lib/version-etc-fsf.c
   lib/version-etc.c
   lib/version-etc.h
   lib/vsnprintf.c
-  lib/w32sock.h
   lib/wchar.in.h
   lib/wcrtomb.c
   lib/wctype.in.h
@@ -618,6 +696,7 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/write.c
   lib/xalloc-die.c
   lib/xalloc.h
+  lib/xasprintf.c
   lib/xgetcwd.c
   lib/xgetcwd.h
   lib/xmalloc.c
@@ -629,6 +708,8 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/xstrtol.h
   lib/xstrtoul.c
   lib/xstrtoumax.c
+  lib/xvasprintf.c
+  lib/xvasprintf.h
   m4/00gnulib.m4
   m4/alloca.m4
   m4/argmatch.m4
@@ -636,7 +717,7 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/backupfile.m4
   m4/bison.m4
   m4/btowc.m4
-  m4/canonicalize-lgpl.m4
+  m4/canonicalize.m4
   m4/chdir-long.m4
   m4/chown.m4
   m4/clock_time.m4
@@ -645,6 +726,7 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/closeout.m4
   m4/codeset.m4
   m4/d-ino.m4
+  m4/dirent-safer.m4
   m4/dirent_h.m4
   m4/dirfd.m4
   m4/dirname.m4
@@ -656,12 +738,13 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/errno_h.m4
   m4/error.m4
   m4/exclude.m4
-  m4/exitfail.m4
   m4/extensions.m4
   m4/fchdir.m4
   m4/fclose.m4
-  m4/fcntl-safer.m4
+  m4/fcntl-o.m4
+  m4/fcntl.m4
   m4/fcntl_h.m4
+  m4/fdopendir.m4
   m4/fileblocks.m4
   m4/float_h.m4
   m4/fnmatch.m4
@@ -673,6 +756,7 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/getcwd.m4
   m4/getdate.m4
   m4/getdelim.m4
+  m4/getdtablesize.m4
   m4/getline.m4
   m4/getopt.m4
   m4/getpagesize.m4
@@ -697,6 +781,7 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/inttypes-pri.m4
   m4/inttypes.m4
   m4/inttypes_h.m4
+  m4/langinfo_h.m4
   m4/lchown.m4
   m4/lcmessage.m4
   m4/lib-ld.m4
@@ -715,15 +800,20 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/mbchar.m4
   m4/mbiter.m4
   m4/mbrtowc.m4
-  m4/mbscasecmp.m4
   m4/mbsinit.m4
+  m4/mbsrtowcs.m4
   m4/mbstate_t.m4
+  m4/memchr.m4
   m4/mempcpy.m4
   m4/memrchr.m4
+  m4/mkdir.m4
   m4/mkdtemp.m4
   m4/mktime.m4
+  m4/mmap-anon.m4
+  m4/mode_t.m4
   m4/modechange.m4
   m4/multiarch.m4
+  m4/nl_langinfo.m4
   m4/nls.m4
   m4/open.m4
   m4/openat.m4
@@ -731,6 +821,7 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/po.m4
   m4/printf-posix.m4
   m4/printf.m4
+  m4/priv-set.m4
   m4/progtest.m4
   m4/quote.m4
   m4/quotearg.m4
@@ -738,9 +829,11 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/readlink.m4
   m4/realloc.m4
   m4/regex.m4
+  m4/rmdir.m4
   m4/rpmatch.m4
   m4/safe-read.m4
   m4/safe-write.m4
+  m4/same.m4
   m4/save-cwd.m4
   m4/savedir.m4
   m4/setenv.m4
@@ -749,8 +842,10 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/snprintf.m4
   m4/ssize_t.m4
   m4/stat-time.m4
+  m4/stat.m4
   m4/stdarg.m4
   m4/stdbool.m4
+  m4/stddef_h.m4
   m4/stdint.m4
   m4/stdint_h.m4
   m4/stdio_h.m4
@@ -782,20 +877,22 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/uintmax_t.m4
   m4/unistd-safer.m4
   m4/unistd_h.m4
+  m4/unlink.m4
   m4/unlinkdir.m4
   m4/unlocked-io.m4
   m4/utimbuf.m4
-  m4/utime.m4
   m4/utimens.m4
-  m4/utimes-null.m4
   m4/utimes.m4
   m4/vasnprintf.m4
+  m4/vasprintf.m4
+  m4/version-etc.m4
   m4/visibility.m4
   m4/vsnprintf.m4
-  m4/wchar.m4
+  m4/warn-on-use.m4
+  m4/wchar_h.m4
   m4/wchar_t.m4
   m4/wcrtomb.m4
-  m4/wctype.m4
+  m4/wctype_h.m4
   m4/wcwidth.m4
   m4/wint_t.m4
   m4/write.m4
@@ -804,4 +901,5 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/xsize.m4
   m4/xstrndup.m4
   m4/xstrtol.m4
+  m4/xvasprintf.m4
 ])
index 1b1873c326dc4fc80dda2f9f20cef6be87da3727..414a2137d3fed0fc6d20b61b502607745957eb82 100644 (file)
@@ -1,5 +1,6 @@
 # hash.m4 serial 6
-dnl Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 72f2176f8e97cef17b68434cd7de53c46bff7c27..eda47da58f329e150eb96729a25700a55120c97c 100644 (file)
@@ -1,5 +1,6 @@
 #serial 10
-dnl Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2003, 2004, 2005, 2006, 2009, 2010 Free Software
+dnl Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 3cc626829edffdf2c02bc5ad7517b7eb225c746a..f46ff1421541e2a8b0bef692bc3299a902f5226d 100644 (file)
@@ -1,5 +1,5 @@
-# iconv.m4 serial AM7 (gettext-0.18)
-dnl Copyright (C) 2000-2002, 2007-2009 Free Software Foundation, Inc.
+# iconv.m4 serial 9 (gettext-0.18)
+dnl Copyright (C) 2000-2002, 2007-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -58,7 +58,7 @@ AC_DEFUN([AM_ICONV_LINK],
   ])
   if test "$am_cv_func_iconv" = yes; then
     AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
-      dnl This tests against bugs in AIX 5.1 and HP-UX 11.11.
+      dnl This tests against bugs in AIX 5.1, HP-UX 11.11, Solaris 10.
       am_save_LIBS="$LIBS"
       if test $am_cv_lib_iconv = yes; then
         LIBS="$LIBS $LIBICONV"
@@ -87,6 +87,25 @@ int main ()
           return 1;
       }
   }
+  /* Test against Solaris 10 bug: Failures are not distinguishable from
+     successful returns.  */
+  {
+    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+    if (cd_ascii_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\263";
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_ascii_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
 #if 0 /* This bug could be worked around by the caller.  */
   /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
   {
@@ -172,8 +191,8 @@ size_t iconv();
 ], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"])
       am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
     am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
-    AC_MSG_RESULT([${ac_t:-
-         }$am_cv_proto_iconv])
+    AC_MSG_RESULT([
+         $am_cv_proto_iconv])
     AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
       [Define as const if the declaration of iconv() needs const.])
   fi
index 752263901c7ac0f084ae45180f4f533e742aed96..c7e0672f60c01b02fa96a2a4427907c69f483879 100644 (file)
@@ -1,5 +1,5 @@
-# include_next.m4 serial 11
-dnl Copyright (C) 2006-2009 Free Software Foundation, Inc.
+# include_next.m4 serial 14
+dnl Copyright (C) 2006-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -32,14 +32,15 @@ AC_DEFUN([gl_INCLUDE_NEXT],
     [gl_cv_have_include_next],
     [rm -rf conftestd1a conftestd1b conftestd2
      mkdir conftestd1a conftestd1b conftestd2
-     dnl The include of <stdio.h> is because IBM C 9.0, 10.1 (original
-     dnl versions, prior to 2009-01 updates) on AIX 6.1 supports include_next
-     dnl when used as first preprocessor directive in a file, but not when
-     dnl preceded by another include directive. Additionally, with this same
-     dnl compiler, include_next is a no-op when used in a header file that was
-     dnl included by specifying its absolute file name. Despite these two bugs,
-     dnl include_next is used in the compiler's <math.h>. By virtue of the
-     dnl second bug, we need to use include_next as well in this case.
+     dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on
+     dnl AIX 6.1 support include_next when used as first preprocessor directive
+     dnl in a file, but not when preceded by another include directive. Check
+     dnl for this bug by including <stdio.h>.
+     dnl Additionally, with this same compiler, include_next is a no-op when
+     dnl used in a header file that was included by specifying its absolute
+     dnl file name. Despite these two bugs, include_next is used in the
+     dnl compiler's <math.h>. By virtue of the second bug, we need to use
+     dnl include_next as well in this case.
      cat <<EOF > conftestd1a/conftest.h
 #define DEFINED_IN_CONFTESTD1
 #include_next <conftest.h>
@@ -103,10 +104,16 @@ EOF
 # For each arg foo.h, if #include_next works, define NEXT_FOO_H to be
 # '<foo.h>'; otherwise define it to be
 # '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
+# Also, if #include_next works as first preprocessing directive in a file,
+# define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be '<foo.h>'; otherwise define it to
+# be
+# '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
 # That way, a header file with the following line:
-#      #@INCLUDE_NEXT@ @NEXT_FOO_H@
+#       #@INCLUDE_NEXT@ @NEXT_FOO_H@
+# or
+#       #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@
 # behaves (after sed substitution) as if it contained
-#      #include_next <foo.h>
+#       #include_next <foo.h>
 # even if the compiler does not support include_next.
 # The three "///" are to pacify Sun C 5.8, which otherwise would say
 # "warning: #include of /usr/include/... may be non-portable".
@@ -122,49 +129,59 @@ AC_DEFUN([gl_CHECK_NEXT_HEADERS],
 
   m4_foreach_w([gl_HEADER_NAME], [$1],
     [AS_VAR_PUSHDEF([gl_next_header],
-                   [gl_cv_next_]m4_quote(m4_defn([gl_HEADER_NAME])))
+                    [gl_cv_next_]m4_defn([gl_HEADER_NAME]))
      if test $gl_cv_have_include_next = yes; then
        AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
      else
        AC_CACHE_CHECK(
-        [absolute name of <]m4_quote(m4_defn([gl_HEADER_NAME]))[>],
-        m4_quote(m4_defn([gl_next_header])),
-        [AS_VAR_PUSHDEF([gl_header_exists],
-                        [ac_cv_header_]m4_quote(m4_defn([gl_HEADER_NAME])))
-         if test AS_VAR_GET(gl_header_exists) = yes; then
-           AC_LANG_CONFTEST(
-             [AC_LANG_SOURCE(
-                [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]]
-              )])
-           dnl AIX "xlc -E" and "cc -E" omit #line directives for header files
-           dnl that contain only a #include of other header files and no
-           dnl non-comment tokens of their own. This leads to a failure to
-           dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h>
-           dnl and others. The workaround is to force preservation of comments
-           dnl through option -C. This ensures all necessary #line directives
-           dnl are present. GCC supports option -C as well.
-           case "$host_os" in
-             aix*) gl_absname_cpp="$ac_cpp -C" ;;
-             *)    gl_absname_cpp="$ac_cpp" ;;
-           esac
-           dnl eval is necessary to expand gl_absname_cpp.
-           dnl Ultrix and Pyramid sh refuse to redirect output of eval,
-           dnl so use subshell.
-           AS_VAR_SET([gl_next_header],
-             ['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
-              sed -n '\#/]m4_quote(m4_defn([gl_HEADER_NAME]))[#{
-                s#.*"\(.*/]m4_quote(m4_defn([gl_HEADER_NAME]))[\)".*#\1#
-                s#^/[^/]#//&#
-                p
-                q
-              }'`'"'])
-         else
-           AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
-         fi
-         AS_VAR_POPDEF([gl_header_exists])])
+         [absolute name of <]m4_defn([gl_HEADER_NAME])[>],
+         m4_defn([gl_next_header]),
+         [AS_VAR_PUSHDEF([gl_header_exists],
+                         [ac_cv_header_]m4_defn([gl_HEADER_NAME]))
+          if test AS_VAR_GET(gl_header_exists) = yes; then
+            AC_LANG_CONFTEST(
+              [AC_LANG_SOURCE(
+                 [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]]
+               )])
+            dnl AIX "xlc -E" and "cc -E" omit #line directives for header files
+            dnl that contain only a #include of other header files and no
+            dnl non-comment tokens of their own. This leads to a failure to
+            dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h>
+            dnl and others. The workaround is to force preservation of comments
+            dnl through option -C. This ensures all necessary #line directives
+            dnl are present. GCC supports option -C as well.
+            case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+            dnl eval is necessary to expand gl_absname_cpp.
+            dnl Ultrix and Pyramid sh refuse to redirect output of eval,
+            dnl so use subshell.
+            AS_VAR_SET([gl_next_header],
+              ['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
+               sed -n '\#/]m4_defn([gl_HEADER_NAME])[#{
+                 s#.*"\(.*/]m4_defn([gl_HEADER_NAME])[\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'])
+          else
+            AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
+          fi
+          AS_VAR_POPDEF([gl_header_exists])])
      fi
      AC_SUBST(
-       AS_TR_CPP([NEXT_]m4_quote(m4_defn([gl_HEADER_NAME]))),
+       AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])),
        [AS_VAR_GET([gl_next_header])])
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'gl_HEADER_NAME'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=AS_VAR_GET([gl_next_header])
+     fi
+     AC_SUBST(
+       AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])),
+       [$gl_next_as_first_directive])
      AS_VAR_POPDEF([gl_next_header])])
 ])
index cee51099f1c2e79261dfb835f3144ac3050800ae..4ef768de7243da810ce459cd24eaf3ca53bf264c 100644 (file)
@@ -1,5 +1,5 @@
 # inline.m4 serial 4
-dnl Copyright (C) 2006, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index c24837c4290ad25aa30bc9c9b91cf8dff973a63b..dd91025962741fb1e5fd697ffbb88c9df66b202f 100644 (file)
@@ -1,5 +1,5 @@
 # intlmacosx.m4 serial 3 (gettext-0.18)
-dnl Copyright (C) 2004-2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2004-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 264cb57184dc384c67591764196eecb59f859f4c..975caac50670d193a88577508de756a7aa17c560 100644 (file)
@@ -1,5 +1,6 @@
 # intmax_t.m4 serial 7
-dnl Copyright (C) 1997-2004, 2006-2007, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 1997-2004, 2006-2007, 2009-2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 0a41fad731ce08225ba14f72e66bc585db8dd400..3e17ed59f197eb15df08f966b42324e9e6b71edf 100644 (file)
@@ -1,5 +1,5 @@
 #serial 7
-dnl Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
+dnl Copyright (C) 2004, 2005, 2006, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 98fec7bcf69d2f56fc0a000bb37aae5631c696af..718a4f4e19f4e0ae45cd9be70a1aef0df4df307e 100644 (file)
@@ -1,5 +1,5 @@
 # inttypes-pri.m4 serial 6 (gettext-0.18)
-dnl Copyright (C) 1997-2002, 2006, 2008, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 1997-2002, 2006, 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 8b4e4f852a24ad895d022b06b1cfb043c6531058..3ee174dc8bfb7785d25723484c0d34fe21483e1e 100644 (file)
@@ -1,5 +1,5 @@
-# inttypes.m4 serial 14
-dnl Copyright (C) 2006-2009 Free Software Foundation, Inc.
+# inttypes.m4 serial 17
+dnl Copyright (C) 2006-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -11,6 +11,7 @@ AC_DEFUN([gl_INTTYPES_H],
 [
   AC_REQUIRE([gl_STDINT_H])
   AC_REQUIRE([gt_INTTYPES_PRI])
+  AC_CHECK_HEADERS_ONCE([inttypes.h])
   AC_CHECK_DECLS_ONCE([imaxabs])
   AC_CHECK_DECLS_ONCE([imaxdiv])
   AC_CHECK_DECLS_ONCE([strtoimax])
@@ -26,13 +27,13 @@ AC_DEFUN([gl_INTTYPES_H],
     [gl_cv_header_working_inttypes_h],
     [gl_cv_header_working_inttypes_h=no
      if test "$gl_cv_header_working_stdint_h" = yes \
-       && test $ac_cv_header_inttypes_h = yes \
-       && test "$ac_cv_have_decl_imaxabs" = yes \
-       && test "$ac_cv_have_decl_imaxdiv" = yes \
-       && test "$ac_cv_have_decl_strtoimax" = yes \
-       && test "$ac_cv_have_decl_strtoumax" = yes; then
+        && test $ac_cv_header_inttypes_h = yes \
+        && test "$ac_cv_have_decl_imaxabs" = yes \
+        && test "$ac_cv_have_decl_imaxdiv" = yes \
+        && test "$ac_cv_have_decl_strtoimax" = yes \
+        && test "$ac_cv_have_decl_strtoumax" = yes; then
        AC_COMPILE_IFELSE([
-        AC_LANG_PROGRAM([[
+         AC_LANG_PROGRAM([[
 #include <stddef.h>
 #define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
 #define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
@@ -131,30 +132,25 @@ const char *l = /* implicit string concatenation */
   SCNoPTR SCNuPTR SCNxPTR
 #endif
   ;
-        ]])],
-        [gl_cv_header_working_inttypes_h=yes])
+         ]])],
+         [gl_cv_header_working_inttypes_h=yes])
      fi])
 
   dnl Override <inttypes.h> always, so that the portability warnings work.
-  if false && test $gl_cv_header_working_inttypes_h = yes; then
-    dnl Use the existing <inttypes.h>.
-    INTTYPES_H=''
-  else
-
-    AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
-    gl_CHECK_NEXT_HEADERS([inttypes.h])
+  AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
+  gl_CHECK_NEXT_HEADERS([inttypes.h])
 
-    AC_REQUIRE([gl_MULTIARCH])
+  AC_REQUIRE([gl_MULTIARCH])
 
-    dnl Ensure that <stdint.h> defines the limit macros, since gnulib's
-    dnl <inttypes.h> relies on them.  This macro is only needed when a
-    dnl C++ compiler is in use; it has no effect for a C compiler.
-    dnl Also be careful to define __STDC_LIMIT_MACROS only when gnulib's
-    dnl <inttypes.h> is going to be created, and to avoid redefinition warnings
-    dnl if the __STDC_LIMIT_MACROS is already defined through the CPPFLAGS.
-    AC_DEFINE([GL_TRIGGER_STDC_LIMIT_MACROS], [1],
-      [Define to make the limit macros in <stdint.h> visible.])
-    AH_VERBATIM([__STDC_LIMIT_MACROS_ZZZ],
+  dnl Ensure that <stdint.h> defines the limit macros, since gnulib's
+  dnl <inttypes.h> relies on them.  This macro is only needed when a
+  dnl C++ compiler is in use; it has no effect for a C compiler.
+  dnl Also be careful to define __STDC_LIMIT_MACROS only when gnulib's
+  dnl <inttypes.h> is going to be created, and to avoid redefinition warnings
+  dnl if the __STDC_LIMIT_MACROS is already defined through the CPPFLAGS.
+  AC_DEFINE([GL_TRIGGER_STDC_LIMIT_MACROS], [1],
+    [Define to make the limit macros in <stdint.h> visible.])
+  AH_VERBATIM([__STDC_LIMIT_MACROS_ZZZ],
 [/* Ensure that <stdint.h> defines the limit macros, since gnulib's
    <inttypes.h> relies on them.  */
 #if defined __cplusplus && !defined __STDC_LIMIT_MACROS && GL_TRIGGER_STDC_LIMIT_MACROS
@@ -162,85 +158,86 @@ const char *l = /* implicit string concatenation */
 #endif
 ])
 
-    PRIPTR_PREFIX=
-    if test -n "$STDINT_H"; then
-      dnl Using the gnulib <stdint.h>. It always defines intptr_t to 'long'.
-      PRIPTR_PREFIX='"l"'
-    else
-      dnl Using the system's <stdint.h>.
-      for glpfx in '' l ll I64; do
-        case $glpfx in
-          '')  gltype1='int';;
-          l)   gltype1='long int';;
-          ll)  gltype1='long long int';;
-          I64) gltype1='__int64';;
-        esac
-        AC_COMPILE_IFELSE(
-          [AC_LANG_PROGRAM([[#include <stdint.h>
-             extern intptr_t foo;
-             extern $gltype1 foo;]])],
-          [PRIPTR_PREFIX='"'$glpfx'"'])
-        test -n "$PRIPTR_PREFIX" && break
-      done
-    fi
-    AC_SUBST([PRIPTR_PREFIX])
+  PRIPTR_PREFIX=
+  if test -n "$STDINT_H"; then
+    dnl Using the gnulib <stdint.h>. It always defines intptr_t to 'long'.
+    PRIPTR_PREFIX='"l"'
+  else
+    dnl Using the system's <stdint.h>.
+    for glpfx in '' l ll I64; do
+      case $glpfx in
+        '')  gltype1='int';;
+        l)   gltype1='long int';;
+        ll)  gltype1='long long int';;
+        I64) gltype1='__int64';;
+      esac
+      AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM([[#include <stdint.h>
+           extern intptr_t foo;
+           extern $gltype1 foo;]])],
+        [PRIPTR_PREFIX='"'$glpfx'"'])
+      test -n "$PRIPTR_PREFIX" && break
+    done
+  fi
+  AC_SUBST([PRIPTR_PREFIX])
 
-    if test "$ac_cv_have_decl_imaxabs" = yes; then
-      HAVE_DECL_IMAXABS=1
-    else
-      HAVE_DECL_IMAXABS=0
-    fi
+  if test "$ac_cv_have_decl_imaxabs" = yes; then
+    HAVE_DECL_IMAXABS=1
+  else
+    HAVE_DECL_IMAXABS=0
+  fi
 
-    if test "$ac_cv_have_decl_imaxdiv" = yes; then
-      HAVE_DECL_IMAXDIV=1
-    else
-      HAVE_DECL_IMAXDIV=0
-    fi
+  if test "$ac_cv_have_decl_imaxdiv" = yes; then
+    HAVE_DECL_IMAXDIV=1
+  else
+    HAVE_DECL_IMAXDIV=0
+  fi
 
-    if test "$ac_cv_have_decl_strtoimax" = yes; then
-      HAVE_DECL_STRTOIMAX=1
-    else
-      HAVE_DECL_STRTOIMAX=0
-    fi
+  if test "$ac_cv_have_decl_strtoimax" = yes; then
+    HAVE_DECL_STRTOIMAX=1
+  else
+    HAVE_DECL_STRTOIMAX=0
+  fi
 
-    if test "$ac_cv_have_decl_strtoumax" = yes; then
-      HAVE_DECL_STRTOUMAX=1
-    else
-      HAVE_DECL_STRTOUMAX=0
-    fi
+  if test "$ac_cv_have_decl_strtoumax" = yes; then
+    HAVE_DECL_STRTOUMAX=1
+  else
+    HAVE_DECL_STRTOUMAX=0
+  fi
 
+  gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
+    [INT32_MAX_LT_INTMAX_MAX],
+    [defined INT32_MAX && defined INTMAX_MAX],
+    [INT32_MAX < INTMAX_MAX],
+    [sizeof (int) < sizeof (long long int)])
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
     gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
-      [INT32_MAX_LT_INTMAX_MAX],
-      [defined INT32_MAX && defined INTMAX_MAX],
-      [INT32_MAX < INTMAX_MAX],
-      [sizeof (int) < sizeof (long long int)])
-    if test $APPLE_UNIVERSAL_BUILD = 0; then
-      gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
-        [INT64_MAX_EQ_LONG_MAX],
-        [defined INT64_MAX],
-        [INT64_MAX == LONG_MAX],
-        [sizeof (long long int) == sizeof (long int)])
-    else
-      INT64_MAX_EQ_LONG_MAX=-1
-    fi
+      [INT64_MAX_EQ_LONG_MAX],
+      [defined INT64_MAX],
+      [INT64_MAX == LONG_MAX],
+      [sizeof (long long int) == sizeof (long int)])
+  else
+    INT64_MAX_EQ_LONG_MAX=-1
+  fi
+  gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
+    [UINT32_MAX_LT_UINTMAX_MAX],
+    [defined UINT32_MAX && defined UINTMAX_MAX],
+    [UINT32_MAX < UINTMAX_MAX],
+    [sizeof (unsigned int) < sizeof (unsigned long long int)])
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
     gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
-      [UINT32_MAX_LT_UINTMAX_MAX],
-      [defined UINT32_MAX && defined UINTMAX_MAX],
-      [UINT32_MAX < UINTMAX_MAX],
-      [sizeof (unsigned int) < sizeof (unsigned long long int)])
-    if test $APPLE_UNIVERSAL_BUILD = 0; then
-      gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
-        [UINT64_MAX_EQ_ULONG_MAX],
-        [defined UINT64_MAX],
-        [UINT64_MAX == ULONG_MAX],
-        [sizeof (unsigned long long int) == sizeof (unsigned long int)])
-    else
-      UINT64_MAX_EQ_ULONG_MAX=-1
-    fi
-
-    INTTYPES_H='inttypes.h'
+      [UINT64_MAX_EQ_ULONG_MAX],
+      [defined UINT64_MAX],
+      [UINT64_MAX == ULONG_MAX],
+      [sizeof (unsigned long long int) == sizeof (unsigned long int)])
+  else
+    UINT64_MAX_EQ_ULONG_MAX=-1
   fi
-  AC_SUBST([INTTYPES_H])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[#include <inttypes.h>
+    ]], [imaxabs imaxdiv strtoimax strtoumax])
 ])
 
 # Define the symbol $1 to be 1 if the condition is true, 0 otherwise.
@@ -255,25 +252,25 @@ AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION],
     [gl_cv_test_$1],
     [AC_COMPILE_IFELSE(
        [AC_LANG_PROGRAM(
-         [[/* Work also in C++ mode.  */
-           #define __STDC_LIMIT_MACROS 1
+          [[/* Work also in C++ mode.  */
+            #define __STDC_LIMIT_MACROS 1
 
-           /* Work if build is not clean.  */
-           #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+            /* Work if build is not clean.  */
+            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
 
-           #include <limits.h>
-           #if HAVE_STDINT_H
-            #include <stdint.h>
-           #endif
+            #include <limits.h>
+            #if HAVE_STDINT_H
+             #include <stdint.h>
+            #endif
 
-           #if $2
-            #define CONDITION ($3)
-           #elif HAVE_LONG_LONG_INT
-            #define CONDITION ($4)
-           #else
-            #define CONDITION 0
-           #endif
-           int test[CONDITION ? 1 : -1];]])],
+            #if $2
+             #define CONDITION ($3)
+            #elif HAVE_LONG_LONG_INT
+             #define CONDITION ($4)
+            #else
+             #define CONDITION 0
+            #endif
+            int test[CONDITION ? 1 : -1];]])],
        [gl_cv_test_$1=yes],
        [gl_cv_test_$1=no])])
   if test $gl_cv_test_$1 = yes; then
index f4ca16021cf78da48bb7541c86d43ded2b4352c3..782d77ed8b1e0629d7b5ac2938db0ef6010e61d6 100644 (file)
@@ -1,5 +1,5 @@
 # inttypes_h.m4 serial 9
-dnl Copyright (C) 1997-2004, 2006, 2008, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 1997-2004, 2006, 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/langinfo_h.m4 b/m4/langinfo_h.m4
new file mode 100644 (file)
index 0000000..5e4922a
--- /dev/null
@@ -0,0 +1,76 @@
+# langinfo_h.m4 serial 4
+dnl Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_LANGINFO_H],
+[
+  AC_REQUIRE([gl_LANGINFO_H_DEFAULTS])
+
+  dnl Persuade glibc-2.0.6 <langinfo.h> to define CODESET.
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  gl_CHECK_NEXT_HEADERS([langinfo.h])
+
+  dnl Determine whether <langinfo.h> exists. It is missing on mingw and BeOS.
+  HAVE_LANGINFO_CODESET=0
+  HAVE_LANGINFO_ERA=0
+  AC_CHECK_HEADERS_ONCE([langinfo.h])
+  if test $ac_cv_header_langinfo_h = yes; then
+    HAVE_LANGINFO_H=1
+    dnl Determine what <langinfo.h> defines. CODESET and ERA etc. are missing
+    dnl on OpenBSD 3.8.
+    AC_CACHE_CHECK([whether langinfo.h defines CODESET],
+      [gl_cv_header_langinfo_codeset],
+      [AC_COMPILE_IFELSE(
+         [AC_LANG_PROGRAM([[#include <langinfo.h>
+int a = CODESET;
+]])],
+         [gl_cv_header_langinfo_codeset=yes],
+         [gl_cv_header_langinfo_codeset=no])
+      ])
+    if test $gl_cv_header_langinfo_codeset = yes; then
+      HAVE_LANGINFO_CODESET=1
+    fi
+    AC_CACHE_CHECK([whether langinfo.h defines ERA],
+      [gl_cv_header_langinfo_era],
+      [AC_COMPILE_IFELSE(
+         [AC_LANG_PROGRAM([[#include <langinfo.h>
+int a = ERA;
+]])],
+         [gl_cv_header_langinfo_era=yes],
+         [gl_cv_header_langinfo_era=no])
+      ])
+    if test $gl_cv_header_langinfo_era = yes; then
+      HAVE_LANGINFO_ERA=1
+    fi
+  else
+    HAVE_LANGINFO_H=0
+  fi
+  AC_SUBST([HAVE_LANGINFO_H])
+  AC_SUBST([HAVE_LANGINFO_CODESET])
+  AC_SUBST([HAVE_LANGINFO_ERA])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[#include <langinfo.h>
+    ]], [nl_langinfo])
+])
+
+AC_DEFUN([gl_LANGINFO_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_LANGINFO_H_DEFAULTS])
+  GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR([$1])
+])
+
+AC_DEFUN([gl_LANGINFO_H_DEFAULTS],
+[
+  GNULIB_NL_LANGINFO=0;  AC_SUBST([GNULIB_NL_LANGINFO])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_NL_LANGINFO=1;    AC_SUBST([HAVE_NL_LANGINFO])
+  REPLACE_NL_LANGINFO=0; AC_SUBST([REPLACE_NL_LANGINFO])
+])
index f509fde04abc21c58c0a77569315bf9b46ff183e..646dd9f34f6a01815d59cbc2ccd0821b1b897ec2 100644 (file)
@@ -1,21 +1,29 @@
-# serial 13
+# serial 15
 # Determine whether we need the lchown wrapper.
 
-dnl Copyright (C) 1998, 2001, 2003-2007, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 1998, 2001, 2003-2007, 2009-2010 Free Software Foundation,
+dnl Inc.
 
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 dnl From Jim Meyering.
-dnl Provide lchown on systems that lack it.
+dnl Provide lchown on systems that lack it, and work around bugs
+dnl on systems that have it.
 
 AC_DEFUN([gl_FUNC_LCHOWN],
 [
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
   AC_REQUIRE([gl_FUNC_CHOWN])
+  AC_CHECK_FUNCS_ONCE([lchmod])
   AC_REPLACE_FUNCS([lchown])
   if test $ac_cv_func_lchown = no; then
+    HAVE_LCHOWN=0
+  elif test "$gl_cv_func_chown_slash_works" != yes \
+      || test "$gl_cv_func_chown_ctime_works" != yes; then
+    dnl Trailing slash and ctime bugs in chown also occur in lchown.
+    AC_LIBOBJ([lchown])
     REPLACE_LCHOWN=1
   fi
 ])
index e4863f2c9b76a6cc8a3979bb41244a615d194c84..ebb30528bd5abfdfcc2126175cbe1de99d902457 100644 (file)
@@ -1,5 +1,5 @@
 # lib-ld.m4 serial 4 (gettext-0.18)
-dnl Copyright (C) 1996-2003, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 1996-2003, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -59,7 +59,7 @@ if test "$GCC" = yes; then
       # Canonicalize the path of ld
       ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
       while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
-       ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+        ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
       done
       test -z "$LD" && LD="$ac_prog"
       ;;
@@ -89,9 +89,9 @@ AC_CACHE_VAL([acl_cv_path_LD],
       # Break only if it was the GNU/non-GNU ld that we prefer.
       case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
       *GNU* | *'with BFD'*)
-       test "$with_gnu_ld" != no && break ;;
+        test "$with_gnu_ld" != no && break ;;
       *)
-       test "$with_gnu_ld" != yes && break ;;
+        test "$with_gnu_ld" != yes && break ;;
       esac
     fi
   done
index fcd3391bbcef44773f3fa8568a1aa2f87a8b0708..90e1ac9170d3418035f0c6a299d16ae8aadcebee 100644 (file)
@@ -1,5 +1,5 @@
-# lib-link.m4 serial 18 (gettext-0.18)
-dnl Copyright (C) 2001-2009 Free Software Foundation, Inc.
+# lib-link.m4 serial 20 (gettext-0.18)
+dnl Copyright (C) 2001-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -43,12 +43,13 @@ AC_DEFUN([AC_LIB_LINKFLAGS],
   popdef([Name])
 ])
 
-dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message])
 dnl searches for libname and the libraries corresponding to explicit and
 dnl implicit dependencies, together with the specified include files and
-dnl the ability to compile and link the specified testcode. If found, it
-dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
-dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl the ability to compile and link the specified testcode. The missing-message
+dnl defaults to 'no' and may contain additional hints for the user.
+dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME}
+dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and
 dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
 dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
 dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
@@ -74,12 +75,14 @@ AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
   AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
     ac_save_LIBS="$LIBS"
     LIBS="$LIBS $LIB[]NAME"
-    AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
+    AC_TRY_LINK([$3], [$4],
+      [ac_cv_lib[]Name=yes],
+      [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])'])
     LIBS="$ac_save_LIBS"
   ])
   if test "$ac_cv_lib[]Name" = yes; then
     HAVE_LIB[]NAME=yes
-    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
+    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.])
     AC_MSG_CHECKING([how to link with lib[]$1])
     AC_MSG_RESULT([$LIB[]NAME])
   else
@@ -207,6 +210,9 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
   LTLIB[]NAME=
   INC[]NAME=
   LIB[]NAME[]_PREFIX=
+  dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been
+  dnl computed. So it has to be reset here.
+  HAVE_LIB[]NAME=
   rpathdirs=
   ltrpathdirs=
   names_already_handled=
index 3bdc0fc574abd05e85a4f380131fb0f5bb363d80..1601ceaefd3c2b447b569f991813be12b0e06e2d 100644 (file)
@@ -1,5 +1,5 @@
-# lib-prefix.m4 serial 6 (gettext-0.18)
-dnl Copyright (C) 2001-2005, 2008 Free Software Foundation, Inc.
+# lib-prefix.m4 serial 7 (gettext-0.18)
+dnl Copyright (C) 2001-2005, 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -206,6 +206,9 @@ sixtyfour bits
           if test -d "$searchdir"; then
             case "$searchdir" in
               */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+              */../ | */.. )
+                # Better ignore directories of this form. They are misleading.
+                ;;
               *) searchdir=`cd "$searchdir" && pwd`
                  case "$searchdir" in
                    */lib64 ) acl_libdirstem=lib64 ;;
index e9601041c5b079fc71944de859f3af6f1fe293e0..ee2e801bdd9a32ab89c007e1a128a174523cbe73 100644 (file)
@@ -1,5 +1,5 @@
-# localcharset.m4 serial 6
-dnl Copyright (C) 2002, 2004, 2006, 2009 Free Software Foundation, Inc.
+# localcharset.m4 serial 7
+dnl Copyright (C) 2002, 2004, 2006, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -8,6 +8,7 @@ AC_DEFUN([gl_LOCALCHARSET],
 [
   dnl Prerequisites of lib/localcharset.c.
   AC_REQUIRE([AM_LANGINFO_CODESET])
+  AC_REQUIRE([gl_FCNTL_O_FLAGS])
   AC_CHECK_DECLS_ONCE([getc_unlocked])
 
   dnl Prerequisites of the lib/Makefile.am snippet.
index 653a5bc2bd841615fc12fa7663e7b8e5e622cbcf..001f53906f5e1464ac84e7679704ad210a36b456 100644 (file)
@@ -1,5 +1,5 @@
 # locale-fr.m4 serial 11
-dnl Copyright (C) 2003, 2005-2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2005-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 936057647cf5ace3df97fac9134706e18cc9afd4..0eedaf149aab11a18940ce2cfe63398b6a895f01 100644 (file)
@@ -1,5 +1,5 @@
 # locale-ja.m4 serial 7
-dnl Copyright (C) 2003, 2005-2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2005-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 36a5f1dfb0bd4ea6727eebace8d34ec48fc0dbee..777fd1418eddfeff2087d1509723d7ffac40452d 100644 (file)
@@ -1,5 +1,5 @@
 # locale-zh.m4 serial 6
-dnl Copyright (C) 2003, 2005-2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2005-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index eedc8d56826218e41849ce337e63964a968b7a1a..cca3c1a90fa9d399493c7a7b9a885b4ca5270971 100644 (file)
@@ -1,5 +1,5 @@
 # longlong.m4 serial 14
-dnl Copyright (C) 1999-2007, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 1999-2007, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -20,30 +20,30 @@ AC_DEFUN([AC_TYPE_LONG_LONG_INT],
     [AC_LINK_IFELSE(
        [_AC_TYPE_LONG_LONG_SNIPPET],
        [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
-       dnl If cross compiling, assume the bug isn't important, since
-       dnl nobody cross compiles for this platform as far as we know.
-       AC_RUN_IFELSE(
-         [AC_LANG_PROGRAM(
-            [[@%:@include <limits.h>
-              @%:@ifndef LLONG_MAX
-              @%:@ define HALF \
-                       (1LL << (sizeof (long long int) * CHAR_BIT - 2))
-              @%:@ define LLONG_MAX (HALF - 1 + HALF)
-              @%:@endif]],
-            [[long long int n = 1;
-              int i;
-              for (i = 0; ; i++)
-                {
-                  long long int m = n << i;
-                  if (m >> i != n)
-                    return 1;
-                  if (LLONG_MAX / 2 < m)
-                    break;
-                }
-              return 0;]])],
-         [ac_cv_type_long_long_int=yes],
-         [ac_cv_type_long_long_int=no],
-         [ac_cv_type_long_long_int=yes])],
+        dnl If cross compiling, assume the bug isn't important, since
+        dnl nobody cross compiles for this platform as far as we know.
+        AC_RUN_IFELSE(
+          [AC_LANG_PROGRAM(
+             [[@%:@include <limits.h>
+               @%:@ifndef LLONG_MAX
+               @%:@ define HALF \
+                        (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+               @%:@ define LLONG_MAX (HALF - 1 + HALF)
+               @%:@endif]],
+             [[long long int n = 1;
+               int i;
+               for (i = 0; ; i++)
+                 {
+                   long long int m = n << i;
+                   if (m >> i != n)
+                     return 1;
+                   if (LLONG_MAX / 2 < m)
+                     break;
+                 }
+               return 0;]])],
+          [ac_cv_type_long_long_int=yes],
+          [ac_cv_type_long_long_int=no],
+          [ac_cv_type_long_long_int=yes])],
        [ac_cv_type_long_long_int=no])])
   if test $ac_cv_type_long_long_int = yes; then
     AC_DEFINE([HAVE_LONG_LONG_INT], [1],
@@ -83,24 +83,24 @@ AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
 [
   AC_LANG_PROGRAM(
     [[/* For now, do not test the preprocessor; as of 2007 there are too many
-        implementations with broken preprocessors.  Perhaps this can
-        be revisited in 2012.  In the meantime, code should not expect
-        #if to work with literals wider than 32 bits.  */
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
       /* Test literals.  */
       long long int ll = 9223372036854775807ll;
       long long int nll = -9223372036854775807LL;
       unsigned long long int ull = 18446744073709551615ULL;
       /* Test constant expressions.   */
       typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
-                    ? 1 : -1)];
+                     ? 1 : -1)];
       typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
-                    ? 1 : -1)];
+                     ? 1 : -1)];
       int i = 63;]],
     [[/* Test availability of runtime routines for shift and division.  */
       long long int llmax = 9223372036854775807ll;
       unsigned long long int ullmax = 18446744073709551615ull;
       return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
-             | (llmax / ll) | (llmax % ll)
-             | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
-             | (ullmax / ull) | (ullmax % ull));]])
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));]])
 ])
index f336990709c2636072aacfd763a764da1d12db4a..9bf4dc2d046b4536500fd5526f1ab178976b91e1 100644 (file)
@@ -1,5 +1,5 @@
-# lseek.m4 serial 4
-dnl Copyright (C) 2007 Free Software Foundation, Inc.
+# lseek.m4 serial 5
+dnl Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -19,21 +19,22 @@ int main ()
   /* Exit with success only if stdin is seekable.  */
   return lseek (0, (off_t)0, SEEK_CUR) < 0;
 }],
-        [if test -s conftest$ac_exeext \
-            && ./conftest$ac_exeext < conftest.$ac_ext \
-            && { echo hi | ./conftest$ac_exeext; test $? = 1; }; then
-           gl_cv_func_lseek_pipe=yes
-         else
-           gl_cv_func_lseek_pipe=no
-         fi],
-        [gl_cv_func_lseek_pipe=no])
+         [if test -s conftest$ac_exeext \
+             && ./conftest$ac_exeext < conftest.$ac_ext \
+             && test 1 = "`echo hi \
+               | { ./conftest$ac_exeext; echo $?; cat >/dev/null; }`"; then
+            gl_cv_func_lseek_pipe=yes
+          else
+            gl_cv_func_lseek_pipe=no
+          fi],
+         [gl_cv_func_lseek_pipe=no])
      else
        AC_COMPILE_IFELSE([
 #if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) || defined __BEOS__
 /* mingw and BeOS mistakenly return 0 when trying to seek on pipes.  */
   Choke me.
 #endif],
-        [gl_cv_func_lseek_pipe=yes], [gl_cv_func_lseek_pipe=no])
+         [gl_cv_func_lseek_pipe=yes], [gl_cv_func_lseek_pipe=no])
      fi])
   if test $gl_cv_func_lseek_pipe = no; then
     gl_REPLACE_LSEEK
@@ -46,5 +47,5 @@ AC_DEFUN([gl_REPLACE_LSEEK],
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
   REPLACE_LSEEK=1
   AC_DEFINE([LSEEK_PIPE_BROKEN], [1],
-           [Define to 1 if lseek does not detect pipes.])
+            [Define to 1 if lseek does not detect pipes.])
 ])
index 74c78fe48a72f7852cb1ab9ad99954ca68483a60..5dbd16e28ffe875a46d4696df5a4a164b32b929f 100644 (file)
@@ -1,6 +1,6 @@
-# serial 19
+# serial 20
 
-# Copyright (C) 1997-2001, 2003-2009 Free Software Foundation, Inc.
+# Copyright (C) 1997-2001, 2003-2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -12,15 +12,17 @@ AC_DEFUN([gl_FUNC_LSTAT],
 [
   AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
   dnl If lstat does not exist, the replacement <sys/stat.h> does
-  dnl "#define lstat stat", and lstat.c does not need to be compiled.
+  dnl "#define lstat stat", and lstat.c is a no-op.
   AC_CHECK_FUNCS_ONCE([lstat])
   if test $ac_cv_func_lstat = yes; then
-    AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
-    dnl Note: AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK does AC_LIBOBJ([lstat]).
+    AC_REQUIRE([AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK])
     if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then
+      dnl Note: AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK does AC_LIBOBJ([lstat]).
       REPLACE_LSTAT=1
     fi
     # Prerequisites of lib/lstat.c.
     AC_REQUIRE([AC_C_INLINE])
+  else
+    HAVE_LSTAT=0
   fi
 ])
index 807017166ba35812585f8e41667b8181f4f20afa..910ac92292c8c9b2840ad1e9c8cfcb8d9a867f4c 100644 (file)
@@ -1,5 +1,5 @@
 # malloc.m4 serial 9
-dnl Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 2841ae83a7474e85a2bf1a8ec671a54a1efdfc65..e07c6d933166a84da94ae3faa802319c1272c5f8 100644 (file)
@@ -1,5 +1,6 @@
 # malloca.m4 serial 1
-dnl Copyright (C) 2003-2004, 2006-2007 Free Software Foundation, Inc.
+dnl Copyright (C) 2003-2004, 2006-2007, 2009-2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index e73e2b4befbd553d4602205d824f8829d0546c6f..116ce7e5c90a929f9de4f14c01f87dc1de52e30d 100644 (file)
@@ -1,5 +1,5 @@
-# mbchar.m4 serial 7
-dnl Copyright (C) 2005-2007 Free Software Foundation, Inc.
+# mbchar.m4 serial 8
+dnl Copyright (C) 2005-2007, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -10,4 +10,5 @@ dnl From Bruno Haible.
 AC_DEFUN([gl_MBCHAR],
 [
   AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+  AC_REQUIRE([AC_C_INLINE])
 ])
index 88ba5694039327676f5d57ed5185b59c48c789c1..3481050726983f392b05d82066f532cffe0dfe0b 100644 (file)
@@ -1,5 +1,5 @@
-# mbiter.m4 serial 4
-dnl Copyright (C) 2005, 2008 Free Software Foundation, Inc.
+# mbiter.m4 serial 5
+dnl Copyright (C) 2005, 2008, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -9,6 +9,7 @@ dnl From Bruno Haible.
 
 AC_DEFUN([gl_MBITER],
 [
+  AC_REQUIRE([AC_C_INLINE])
   AC_REQUIRE([AC_TYPE_MBSTATE_T])
   dnl The following line is that so the user can test HAVE_MBRTOWC before
   dnl #include "mbiter.h" or "mbuiter.h". It can be removed in 2010.
index 726497b6cfcef8e46272b72cbe4fb7e2eb14f096..9ec93f561575d64d89959130279d6f90154bf0f3 100644 (file)
@@ -1,5 +1,6 @@
-# mbrtowc.m4 serial 13
-dnl Copyright (C) 2001-2002, 2004-2005, 2008, 2009 Free Software Foundation, Inc.
+# mbrtowc.m4 serial 16
+dnl Copyright (C) 2001-2002, 2004-2005, 2008-2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -65,9 +66,15 @@ AC_DEFUN([gl_MBSTATE_T_BROKEN],
   AC_CHECK_FUNCS_ONCE([mbrtowc])
   if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then
     gl_MBRTOWC_INCOMPLETE_STATE
+    gl_MBRTOWC_SANITYCHECK
+    REPLACE_MBSTATE_T=0
     case "$gl_cv_func_mbrtowc_incomplete_state" in
-      *yes) REPLACE_MBSTATE_T=0 ;;
-      *)    REPLACE_MBSTATE_T=1 ;;
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
+    esac
+    case "$gl_cv_func_mbrtowc_sanitycheck" in
+      *yes) ;;
+      *) REPLACE_MBSTATE_T=1 ;;
     esac
   else
     REPLACE_MBSTATE_T=1
@@ -121,7 +128,59 @@ int main ()
 }],
           [gl_cv_func_mbrtowc_incomplete_state=yes],
           [gl_cv_func_mbrtowc_incomplete_state=no],
-          [])
+          [:])
+      fi
+    ])
+])
+
+dnl Test whether mbrtowc works not worse than mbtowc.
+dnl Result is gl_cv_func_mbrtowc_sanitycheck.
+
+AC_DEFUN([gl_MBRTOWC_SANITYCHECK],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gt_LOCALE_ZH_CN])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether mbrtowc works as well as mbtowc],
+    [gl_cv_func_mbrtowc_sanitycheck],
+    [
+      dnl Initial guess, used when cross-compiling or when no suitable locale
+      dnl is present.
+changequote(,)dnl
+      case "$host_os" in
+                    # Guess no on Solaris 8.
+        solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;;
+                    # Guess yes otherwise.
+        *)          gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;;
+      esac
+changequote([,])dnl
+      if test $LOCALE_ZH_CN != none; then
+        AC_TRY_RUN([
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+  /* This fails on Solaris 8:
+     mbrtowc returns 2, and sets wc to 0x00F0.
+     mbtowc returns 4 (correct) and sets wc to 0x5EDC.  */
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */
+      mbstate_t state;
+      wchar_t wc;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (&wc, input + 3, 6, &state) != 4
+          && mbtowc (&wc, input + 3, 6) == 4)
+        return 1;
+    }
+  return 0;
+}],
+          [gl_cv_func_mbrtowc_sanitycheck=yes],
+          [gl_cv_func_mbrtowc_sanitycheck=no],
+          [:])
       fi
     ])
 ])
@@ -168,7 +227,7 @@ int main ()
         return 1;
     }
   return 0;
-}], [gl_cv_func_mbrtowc_null_arg=yes], [gl_cv_func_mbrtowc_null_arg=no], [])
+}], [gl_cv_func_mbrtowc_null_arg=yes], [gl_cv_func_mbrtowc_null_arg=no], [:])
       fi
     ])
 ])
@@ -238,7 +297,7 @@ int main ()
 }],
           [gl_cv_func_mbrtowc_retval=yes],
           [gl_cv_func_mbrtowc_retval=no],
-          [])
+          [:])
       fi
     ])
 ])
@@ -258,10 +317,10 @@ AC_DEFUN([gl_MBRTOWC_NUL_RETVAL],
       dnl is present.
 changequote(,)dnl
       case "$host_os" in
-                    # Guess no on Solaris 9.
-        solaris2.9) gl_cv_func_mbrtowc_nul_retval="guessing no" ;;
-                    # Guess yes otherwise.
-        *)          gl_cv_func_mbrtowc_nul_retval="guessing yes" ;;
+                       # Guess no on Solaris 8 and 9.
+        solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;;
+                       # Guess yes otherwise.
+        *)             gl_cv_func_mbrtowc_nul_retval="guessing yes" ;;
       esac
 changequote([,])dnl
       if test $LOCALE_ZH_CN != none; then
@@ -271,7 +330,7 @@ changequote([,])dnl
 #include <wchar.h>
 int main ()
 {
-  /* This fails on Solaris 9.  */
+  /* This fails on Solaris 8 and 9.  */
   if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
     {
       mbstate_t state;
@@ -285,7 +344,7 @@ int main ()
 }],
           [gl_cv_func_mbrtowc_nul_retval=yes],
           [gl_cv_func_mbrtowc_nul_retval=no],
-          [])
+          [:])
       fi
     ])
 ])
diff --git a/m4/mbscasecmp.m4 b/m4/mbscasecmp.m4
deleted file mode 100644 (file)
index d76d10f..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-# mbscasecmp.m4 serial 2
-dnl Copyright (C) 2007-2008 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_FUNC_MBSCASECMP],
-[
-  gl_PREREQ_MBSCASECMP
-])
-
-# Prerequisites of lib/mbscasecmp.c.
-AC_DEFUN([gl_PREREQ_MBSCASECMP], [
-  AC_REQUIRE([AC_FUNC_MBRTOWC])
-  :
-])
index 03b055cd80fda5fd3d22d0a70534fc7493ec3a33..13907a516773e0dff5ae5dfac94ca7855a4ffdb2 100644 (file)
@@ -1,5 +1,5 @@
 # mbsinit.m4 serial 3
-dnl Copyright (C) 2008 Free Software Foundation, Inc.
+dnl Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/mbsrtowcs.m4 b/m4/mbsrtowcs.m4
new file mode 100644 (file)
index 0000000..846a293
--- /dev/null
@@ -0,0 +1,121 @@
+# mbsrtowcs.m4 serial 5
+dnl Copyright (C) 2008-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_MBSRTOWCS],
+[
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+
+  AC_REQUIRE([AC_TYPE_MBSTATE_T])
+  gl_MBSTATE_T_BROKEN
+  if test $REPLACE_MBSTATE_T = 1; then
+    REPLACE_MBSRTOWCS=1
+  fi
+  AC_CHECK_FUNCS_ONCE([mbsrtowcs])
+  if test $ac_cv_func_mbsrtowcs = no; then
+    HAVE_MBSRTOWCS=0
+  fi
+  if test $HAVE_MBSRTOWCS != 0 && test $REPLACE_MBSRTOWCS != 1; then
+    gl_MBSRTOWCS_WORKS
+    case "$gl_cv_func_mbsrtowcs_works" in
+      *yes) ;;
+      *) REPLACE_MBSRTOWCS=1 ;;
+    esac
+  fi
+  if test $HAVE_MBSRTOWCS = 0 || test $REPLACE_MBSRTOWCS = 1; then
+    gl_REPLACE_WCHAR_H
+    AC_LIBOBJ([mbsrtowcs])
+    AC_LIBOBJ([mbsrtowcs-state])
+    gl_PREREQ_MBSRTOWCS
+  fi
+])
+
+dnl Test whether mbsrtowcs works.
+dnl Result is gl_cv_func_mbsrtowcs_works.
+
+AC_DEFUN([gl_MBSRTOWCS_WORKS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gt_LOCALE_FR_UTF8])
+  AC_REQUIRE([gt_LOCALE_JA])
+  AC_REQUIRE([gt_LOCALE_ZH_CN])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether mbsrtowcs works],
+    [gl_cv_func_mbsrtowcs_works],
+    [
+      dnl Initial guess, used when cross-compiling or when no suitable locale
+      dnl is present.
+changequote(,)dnl
+      case "$host_os" in
+                          # Guess no on HP-UX and Solaris.
+        hpux* | solaris*) gl_cv_func_mbsrtowcs_works="guessing no" ;;
+                          # Guess yes otherwise.
+        *)                gl_cv_func_mbsrtowcs_works="guessing yes" ;;
+      esac
+changequote([,])dnl
+      if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then
+        AC_TRY_RUN([
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+  /* Test whether the function works when started with a conversion state
+     in non-initial state.  This fails on HP-UX 11.11 and Solaris 10.  */
+  if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+    {
+      const char input[] = "B\303\274\303\237er";
+      mbstate_t state;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (NULL, input + 1, 1, &state) == (size_t)(-2))
+        if (!mbsinit (&state))
+          {
+            const char *src = input + 2;
+            if (mbsrtowcs (NULL, &src, 10, &state) != 4)
+              return 1;
+          }
+    }
+  if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+    {
+      const char input[] = "<\306\374\313\334\270\354>";
+      mbstate_t state;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (NULL, input + 3, 1, &state) == (size_t)(-2))
+        if (!mbsinit (&state))
+          {
+            const char *src = input + 4;
+            if (mbsrtowcs (NULL, &src, 10, &state) != 3)
+              return 1;
+          }
+    }
+  if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+    {
+      const char input[] = "B\250\271\201\060\211\070er";
+      mbstate_t state;
+
+      memset (&state, '\0', sizeof (mbstate_t));
+      if (mbrtowc (NULL, input + 1, 1, &state) == (size_t)(-2))
+        if (!mbsinit (&state))
+          {
+            const char *src = input + 2;
+            if (mbsrtowcs (NULL, &src, 10, &state) != 4)
+              return 1;
+          }
+    }
+  return 0;
+}],
+          [gl_cv_func_mbsrtowcs_works=yes],
+          [gl_cv_func_mbsrtowcs_works=no],
+          [:])
+      fi
+    ])
+])
+
+# Prerequisites of lib/mbsrtowcs.c.
+AC_DEFUN([gl_PREREQ_MBSRTOWCS], [
+  :
+])
index d4ec6f0fc7107449a362452387e0ed1963799ee4..3e2df29f8aa13b71eb4038480ce3c85d25fdbb3c 100644 (file)
@@ -1,5 +1,5 @@
 # mbstate_t.m4 serial 12
-dnl Copyright (C) 2000-2002, 2008, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2000-2002, 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -18,17 +18,17 @@ AC_DEFUN([AC_TYPE_MBSTATE_T],
 
    AC_CACHE_CHECK([for mbstate_t], [ac_cv_type_mbstate_t],
      [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [AC_INCLUDES_DEFAULT[
-#          include <wchar.h>]],
-          [[mbstate_t x; return sizeof x;]])],
-       [ac_cv_type_mbstate_t=yes],
-       [ac_cv_type_mbstate_t=no])])
+        [AC_LANG_PROGRAM(
+           [AC_INCLUDES_DEFAULT[
+#           include <wchar.h>]],
+           [[mbstate_t x; return sizeof x;]])],
+        [ac_cv_type_mbstate_t=yes],
+        [ac_cv_type_mbstate_t=no])])
    if test $ac_cv_type_mbstate_t = yes; then
      AC_DEFINE([HAVE_MBSTATE_T], [1],
-              [Define to 1 if <wchar.h> declares mbstate_t.])
+               [Define to 1 if <wchar.h> declares mbstate_t.])
    else
      AC_DEFINE([mbstate_t], [int],
-              [Define to a type if <wchar.h> does not define.])
+               [Define to a type if <wchar.h> does not define.])
    fi
 ])
diff --git a/m4/memchr.m4 b/m4/memchr.m4
new file mode 100644 (file)
index 0000000..94596ef
--- /dev/null
@@ -0,0 +1,86 @@
+# memchr.m4 serial 7
+dnl Copyright (C) 2002-2004, 2009-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_FUNC_MEMCHR],
+[
+  dnl Check for prerequisites for memory fence checks.
+  gl_FUNC_MMAP_ANON
+  AC_CHECK_HEADERS_ONCE([sys/mman.h])
+  AC_CHECK_FUNCS_ONCE([mprotect])
+
+  dnl These days, we assume memchr is present.  But just in case...
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  AC_REPLACE_FUNCS([memchr])
+  if test $ac_cv_func_memchr = no; then
+    gl_PREREQ_MEMCHR
+    REPLACE_MEMCHR=1
+  fi
+
+  if test $ac_cv_func_memchr = yes; then
+    # Detect platform-specific bugs in some versions of glibc:
+    # memchr should not dereference anything with length 0
+    #   http://bugzilla.redhat.com/499689
+    # memchr should not dereference overestimated length after a match
+    #   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737
+    #   http://sourceware.org/bugzilla/show_bug.cgi?id=10162
+    # Assume that memchr works on platforms that lack mprotect.
+    AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works],
+      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <string.h>
+#if HAVE_SYS_MMAN_H
+# include <fcntl.h>
+# include <unistd.h>
+# include <sys/types.h>
+# include <sys/mman.h>
+# ifndef MAP_FILE
+#  define MAP_FILE 0
+# endif
+#endif
+]], [[
+  char *fence = NULL;
+#if HAVE_SYS_MMAN_H && HAVE_MPROTECT
+# if HAVE_MAP_ANONYMOUS
+  const int flags = MAP_ANONYMOUS | MAP_PRIVATE;
+  const int fd = -1;
+# else /* !HAVE_MAP_ANONYMOUS */
+  const int flags = MAP_FILE | MAP_PRIVATE;
+  int fd = open ("/dev/zero", O_RDONLY, 0666);
+  if (fd >= 0)
+# endif
+    {
+      int pagesize = getpagesize ();
+      char *two_pages =
+        (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE,
+                       flags, fd, 0);
+      if (two_pages != (char *)(-1)
+          && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0)
+        fence = two_pages + pagesize;
+    }
+#endif
+  if (fence)
+    {
+      if (memchr (fence, 0, 0))
+        return 1;
+      strcpy (fence - 9, "12345678");
+      if (memchr (fence - 9, 0, 79) != fence - 1)
+        return 2;
+    }
+  return 0;
+]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no],
+      [dnl Be pessimistic for now.
+       gl_cv_func_memchr_works="guessing no"])])
+    if test "$gl_cv_func_memchr_works" != yes; then
+      gl_PREREQ_MEMCHR
+      REPLACE_MEMCHR=1
+      AC_LIBOBJ([memchr])
+    fi
+  fi
+])
+
+# Prerequisites of lib/memchr.c.
+AC_DEFUN([gl_PREREQ_MEMCHR], [
+  AC_CHECK_HEADERS([bp-sym.h])
+])
index a3c022f70b25465e7422ec1d634c05138d48b4b8..12df771e4c9937a3197eb151faffe30e98d9ffcb 100644 (file)
@@ -1,5 +1,6 @@
 # mempcpy.m4 serial 10
-dnl Copyright (C) 2003-2004, 2006-2007, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2003-2004, 2006-2007, 2009-2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index b74de75afad1240d0586611753af83891be5e6bd..57ed978a29f22744c175d2187f3b7aa9c6feaed6 100644 (file)
@@ -1,5 +1,6 @@
 # memrchr.m4 serial 9
-dnl Copyright (C) 2002, 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2003, 2005-2007, 2009-2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/mkdir.m4 b/m4/mkdir.m4
new file mode 100644 (file)
index 0000000..87f5f21
--- /dev/null
@@ -0,0 +1,52 @@
+# serial 9
+
+# Copyright (C) 2001, 2003-2004, 2006, 2008-2010 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# On some systems, mkdir ("foo/", 0700) fails because of the trailing slash.
+# On others, mkdir ("foo/./", 0700) mistakenly succeeds.
+# On such systems, arrange to use a wrapper function.
+AC_DEFUN([gl_FUNC_MKDIR],
+[dnl
+  AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+  AC_CHECK_HEADERS_ONCE([unistd.h])
+  AC_CACHE_CHECK([whether mkdir handles trailing slash],
+    [gl_cv_func_mkdir_trailing_slash_works],
+    [rm -rf conftest.dir
+      AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#       include <sys/types.h>
+#       include <sys/stat.h>
+]], [return mkdir ("conftest.dir/", 0700);])],
+      [gl_cv_func_mkdir_trailing_slash_works=yes],
+      [gl_cv_func_mkdir_trailing_slash_works=no],
+      [gl_cv_func_mkdir_trailing_slash_works="guessing no"])
+    rm -rf conftest.dir
+    ]
+  )
+  if test "$gl_cv_func_mkdir_trailing_slash_works" != yes; then
+    REPLACE_MKDIR=1
+    AC_LIBOBJ([mkdir])
+  fi
+
+  AC_CACHE_CHECK([whether mkdir handles trailing dot],
+    [gl_cv_func_mkdir_trailing_dot_works],
+    [rm -rf conftest.dir
+      AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#       include <sys/types.h>
+#       include <sys/stat.h>
+]], [return !mkdir ("conftest.dir/./", 0700);])],
+      [gl_cv_func_mkdir_trailing_dot_works=yes],
+      [gl_cv_func_mkdir_trailing_dot_works=no],
+      [gl_cv_func_mkdir_trailing_dot_works="guessing no"])
+    rm -rf conftest.dir
+    ]
+  )
+  if test "$gl_cv_func_mkdir_trailing_dot_works" != yes; then
+    REPLACE_MKDIR=1
+    AC_LIBOBJ([mkdir])
+    AC_DEFINE([FUNC_MKDIR_DOT_BUG], [1], [Define to 1 if mkdir mistakenly
+      creates a directory given with a trailing dot component.])
+  fi
+])
index 444b61837cd640edd50b084c085e56559f17903f..6a07e0294c1c0e4f6e4acb20f8267bffbfa0f7f0 100644 (file)
@@ -1,5 +1,6 @@
 # mkdtemp.m4 serial 6
-dnl Copyright (C) 2001-2003, 2006-2007, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2003, 2006-2007, 2009-2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 1e926e86b095eda7475aaac4dcbf58ec3314f25e..44b8d87885361a1eb6181f13d5cf34bd43685b6c 100644 (file)
@@ -1,5 +1,6 @@
 # serial 15
-dnl Copyright (C) 2002-2003, 2005-2007, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2003, 2005-2007, 2009-2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -85,8 +86,8 @@ static int
 mktime_test (time_t now)
 {
   return (mktime_test1 (now)
-         && mktime_test1 ((time_t) (time_t_max - now))
-         && mktime_test1 ((time_t) (time_t_min + now)));
+          && mktime_test1 ((time_t) (time_t_max - now))
+          && mktime_test1 ((time_t) (time_t_min + now)));
 }
 
 static int
@@ -116,17 +117,17 @@ bigtime_test (int j)
     {
       struct tm *lt = localtime (&now);
       if (! (lt
-            && lt->tm_year == tm.tm_year
-            && lt->tm_mon == tm.tm_mon
-            && lt->tm_mday == tm.tm_mday
-            && lt->tm_hour == tm.tm_hour
-            && lt->tm_min == tm.tm_min
-            && lt->tm_sec == tm.tm_sec
-            && lt->tm_yday == tm.tm_yday
-            && lt->tm_wday == tm.tm_wday
-            && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst)
-                 == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst))))
-       return 0;
+             && lt->tm_year == tm.tm_year
+             && lt->tm_mon == tm.tm_mon
+             && lt->tm_mday == tm.tm_mday
+             && lt->tm_hour == tm.tm_hour
+             && lt->tm_min == tm.tm_min
+             && lt->tm_sec == tm.tm_sec
+             && lt->tm_yday == tm.tm_yday
+             && lt->tm_wday == tm.tm_wday
+             && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst)
+                  == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst))))
+        return 0;
     }
   return 1;
 }
@@ -158,7 +159,7 @@ year_2050_test ()
      to the correct answer that we can assume the discrepancy is
      due to leap seconds.  */
   return (t == (time_t) -1
-         || (0 < t && answer - 120 <= t && t <= answer + 120));
+          || (0 < t && answer - 120 <= t && t <= answer + 120));
 }
 
 int
@@ -176,7 +177,7 @@ main ()
     {
       t = (time_t_max << 1) + 1;
       if (t <= time_t_max)
-       break;
+        break;
       time_t_max = t;
     }
   time_t_min = - ((time_t) ~ (time_t) 0 == (time_t) -1) - time_t_max;
@@ -185,29 +186,29 @@ main ()
   for (i = 0; i < N_STRINGS; i++)
     {
       if (tz_strings[i])
-       putenv (tz_strings[i]);
+        putenv (tz_strings[i]);
 
       for (t = 0; t <= time_t_max - delta; t += delta)
-       if (! mktime_test (t))
-         return 1;
+        if (! mktime_test (t))
+          return 1;
       if (! (mktime_test ((time_t) 1)
-            && mktime_test ((time_t) (60 * 60))
-            && mktime_test ((time_t) (60 * 60 * 24))))
-       return 1;
+             && mktime_test ((time_t) (60 * 60))
+             && mktime_test ((time_t) (60 * 60 * 24))))
+        return 1;
 
       for (j = 1; ; j <<= 1)
-       if (! bigtime_test (j))
-         return 1;
-       else if (INT_MAX / 2 < j)
-         break;
+        if (! bigtime_test (j))
+          return 1;
+        else if (INT_MAX / 2 < j)
+          break;
       if (! bigtime_test (INT_MAX))
-       return 1;
+        return 1;
     }
   return ! (irix_6_4_bug () && spring_forward_gap () && year_2050_test ());
 }]])],
-              [ac_cv_func_working_mktime=yes],
-              [ac_cv_func_working_mktime=no],
-              [ac_cv_func_working_mktime=no])])
+               [ac_cv_func_working_mktime=yes],
+               [ac_cv_func_working_mktime=no],
+               [ac_cv_func_working_mktime=no])])
 if test $ac_cv_func_working_mktime = no; then
   AC_LIBOBJ([mktime])
 fi
@@ -215,12 +216,14 @@ fi
 
 AC_DEFUN([gl_FUNC_MKTIME],
 [
+  AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS])
   AC_FUNC_MKTIME
   dnl Note: AC_FUNC_MKTIME does AC_LIBOBJ([mktime]).
   if test $ac_cv_func_working_mktime = no; then
-    AC_DEFINE([mktime], [rpl_mktime],
-      [Define to rpl_mktime if the replacement function should be used.])
+    REPLACE_MKTIME=1
     gl_PREREQ_MKTIME
+  else
+    REPLACE_MKTIME=0
   fi
 ])
 
diff --git a/m4/mmap-anon.m4 b/m4/mmap-anon.m4
new file mode 100644 (file)
index 0000000..a6b7b9a
--- /dev/null
@@ -0,0 +1,59 @@
+# mmap-anon.m4 serial 8
+dnl Copyright (C) 2005, 2007, 2009-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Detect how mmap can be used to create anonymous (not file-backed) memory
+# mappings.
+# - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS
+#   and MAP_ANON exist and have the same value.
+# - On HP-UX, only MAP_ANONYMOUS exists.
+# - On MacOS X, FreeBSD, NetBSD, OpenBSD, only MAP_ANON exists.
+# - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be
+#   used.
+
+AC_DEFUN([gl_FUNC_MMAP_ANON],
+[
+  dnl Work around a bug of AC_EGREP_CPP in autoconf-2.57.
+  AC_REQUIRE([AC_PROG_CPP])
+  AC_REQUIRE([AC_PROG_EGREP])
+
+  dnl Persuade glibc <sys/mman.h> to define MAP_ANONYMOUS.
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+  # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it
+  # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is
+  # irrelevant for anonymous mappings.
+  AC_CHECK_FUNC([mmap], [gl_have_mmap=yes], [gl_have_mmap=no])
+
+  # Try to allow MAP_ANONYMOUS.
+  gl_have_mmap_anonymous=no
+  if test $gl_have_mmap = yes; then
+    AC_MSG_CHECKING([for MAP_ANONYMOUS])
+    AC_EGREP_CPP([I cant identify this map.], [
+#include <sys/mman.h>
+#ifdef MAP_ANONYMOUS
+    I cant identify this map.
+#endif
+],
+      [gl_have_mmap_anonymous=yes])
+    if test $gl_have_mmap_anonymous != yes; then
+      AC_EGREP_CPP([I cant identify this map.], [
+#include <sys/mman.h>
+#ifdef MAP_ANON
+    I cant identify this map.
+#endif
+],
+        [AC_DEFINE([MAP_ANONYMOUS], [MAP_ANON],
+          [Define to a substitute value for mmap()'s MAP_ANONYMOUS flag.])
+         gl_have_mmap_anonymous=yes])
+    fi
+    AC_MSG_RESULT([$gl_have_mmap_anonymous])
+    if test $gl_have_mmap_anonymous = yes; then
+      AC_DEFINE([HAVE_MAP_ANONYMOUS], [1],
+        [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including
+         config.h and <sys/mman.h>.])
+    fi
+  fi
+])
diff --git a/m4/mode_t.m4 b/m4/mode_t.m4
new file mode 100644 (file)
index 0000000..3178dfd
--- /dev/null
@@ -0,0 +1,26 @@
+# mode_t.m4 serial 2
+dnl Copyright (C) 2009-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# For using mode_t, it's sufficient to use AC_TYPE_MODE_T and
+# include <sys/types.h>.
+
+# Define PROMOTED_MODE_T to the type that is the result of "default argument
+# promotion" (ISO C 6.5.2.2.(6)) of the type mode_t.
+AC_DEFUN([gl_PROMOTED_TYPE_MODE_T],
+[
+  AC_REQUIRE([AC_TYPE_MODE_T])
+  AC_CACHE_CHECK([for promoted mode_t type], [gl_cv_promoted_mode_t], [
+    dnl Assume mode_t promotes to 'int' if and only if it is smaller than 'int',
+    dnl and to itself otherwise. This assumption is not guaranteed by the ISO C
+    dnl standard, but we don't know of any real-world counterexamples.
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>]],
+      [[typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1];]])],
+      [gl_cv_promoted_mode_t='int'],
+      [gl_cv_promoted_mode_t='mode_t'])
+  ])
+  AC_DEFINE_UNQUOTED([PROMOTED_MODE_T], [$gl_cv_promoted_mode_t],
+    [Define to the type that is the result of default argument promotions of type mode_t.])
+])
index 3b23955e5fca038171e3b31891b09f3f93005f36..475649aa89be178847635ef55f077ac68d1fdc43 100644 (file)
@@ -1,5 +1,6 @@
 # modechange.m4 serial 6
-dnl Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 3948e6e0dba4d5962e23537dca014cc43d1183f0..389bd2bbaa6e73bbccc10e73f88c2ab079a24e0b 100644 (file)
@@ -1,5 +1,5 @@
-# multiarch.m4 serial 4
-dnl Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+# multiarch.m4 serial 5
+dnl Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -19,7 +19,6 @@ dnl with or without modifications, as long as this notice is preserved.
 # Detect this situation and set the macro AA_APPLE_UNIVERSAL_BUILD at the
 # beginning of config.h and set APPLE_UNIVERSAL_BUILD accordingly.
 
-dnl This macro must pass through AC_REQUIRE (never directly invoke it).
 AC_DEFUN_ONCE([gl_MULTIARCH],
 [
   dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN.
diff --git a/m4/nl_langinfo.m4 b/m4/nl_langinfo.m4
new file mode 100644 (file)
index 0000000..ad456a2
--- /dev/null
@@ -0,0 +1,25 @@
+# nl_langinfo.m4 serial 3
+dnl Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_NL_LANGINFO],
+[
+  AC_REQUIRE([gl_LANGINFO_H_DEFAULTS])
+  AC_REQUIRE([gl_LANGINFO_H])
+  AC_CHECK_FUNCS_ONCE([nl_langinfo])
+  if test $ac_cv_func_nl_langinfo = yes; then
+    if test $HAVE_LANGINFO_CODESET = 1 && test $HAVE_LANGINFO_ERA = 1; then
+      :
+    else
+      REPLACE_NL_LANGINFO=1
+      AC_DEFINE([REPLACE_NL_LANGINFO], [1],
+        [Define if nl_langinfo exists but is overridden by gnulib.])
+      AC_LIBOBJ([nl_langinfo])
+    fi
+  else
+    HAVE_NL_LANGINFO=0
+    AC_LIBOBJ([nl_langinfo])
+  fi
+])
index 0b364342158dbc5ae0589d7a82b1cb5c3f0d0bd9..003704c4b93b51bf11bd430c4344be47b63cb856 100644 (file)
--- a/m4/nls.m4
+++ b/m4/nls.m4
@@ -1,5 +1,6 @@
 # nls.m4 serial 5 (gettext-0.18)
-dnl Copyright (C) 1995-2003, 2005-2006, 2008, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 1995-2003, 2005-2006, 2008-2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 6e286c96e8415b5d4f9b5c6fe0d787ca40842e36..d705b3a1eff807faf1fb50bc373fa1c4eceef7e8 100644 (file)
@@ -1,5 +1,5 @@
-# open.m4 serial 5
-dnl Copyright (C) 2007-2009 Free Software Foundation, Inc.
+# open.m4 serial 8
+dnl Copyright (C) 2007-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -13,10 +13,15 @@ AC_DEFUN([gl_FUNC_OPEN],
       ;;
     *)
       dnl open("foo/") should not create a file when the file name has a
-      dnl trailing slash.
+      dnl trailing slash.  FreeBSD only has the problem on symlinks.
+      AC_CHECK_FUNCS_ONCE([lstat])
       AC_CACHE_CHECK([whether open recognizes a trailing slash],
         [gl_cv_func_open_slash],
-        [
+        [# Assume that if we have lstat, we can also check symlinks.
+          if test $ac_cv_func_lstat = yes; then
+            touch conftest.tmp
+            ln -s conftest.tmp conftest.lnk
+          fi
           AC_TRY_RUN([
 #include <fcntl.h>
 #if HAVE_UNISTD_H
@@ -24,18 +29,22 @@ AC_DEFUN([gl_FUNC_OPEN],
 #endif
 int main ()
 {
+#if HAVE_LSTAT
+  if (open ("conftest.lnk/", O_RDONLY) != -1) return 2;
+#endif
   return open ("conftest.sl/", O_CREAT, 0600) >= 0;
 }], [gl_cv_func_open_slash=yes], [gl_cv_func_open_slash=no],
             [
 changequote(,)dnl
              case "$host_os" in
+               freebsd*)        gl_cv_func_open_slash="guessing no" ;;
                solaris2.[0-9]*) gl_cv_func_open_slash="guessing no" ;;
                hpux*)           gl_cv_func_open_slash="guessing no" ;;
                *)               gl_cv_func_open_slash="guessing yes" ;;
              esac
 changequote([,])dnl
             ])
-          rm -f conftest.sl
+          rm -f conftest.sl conftest.tmp conftest.lnk
         ])
       case "$gl_cv_func_open_slash" in
         *no)
@@ -51,16 +60,15 @@ changequote([,])dnl
 AC_DEFUN([gl_REPLACE_OPEN],
 [
   AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
-  if test $REPLACE_OPEN != 1; then
-    AC_LIBOBJ([open])
-    gl_PREREQ_OPEN
-  fi
   REPLACE_OPEN=1
+  AC_LIBOBJ([open])
+  gl_PREREQ_OPEN
 ])
 
 # Prerequisites of lib/open.c.
 AC_DEFUN([gl_PREREQ_OPEN],
 [
   AC_REQUIRE([AC_C_INLINE])
+  AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T])
   :
 ])
index 10eac5c12eafa937bbbf6e0581441ec117560adf..7975efb47e22ab04033a0ceccfb246eedb7af948 100644 (file)
@@ -1,7 +1,7 @@
-# serial 17
+# serial 27
 # See if we need to use our replacement for Solaris' openat et al functions.
 
-dnl Copyright (C) 2004-2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2004-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -10,20 +10,53 @@ dnl with or without modifications, as long as this notice is preserved.
 
 AC_DEFUN([gl_FUNC_OPENAT],
 [
+  AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
+  GNULIB_OPENAT=1
+
+  AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+  GNULIB_FCHMODAT=1
+  GNULIB_FSTATAT=1
+  GNULIB_MKDIRAT=1
+
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  GNULIB_FCHOWNAT=1
+  GNULIB_UNLINKAT=1
+
   AC_LIBOBJ([openat-proc])
   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
   AC_CHECK_FUNCS_ONCE([lchmod])
-  AC_CHECK_FUNCS_ONCE([fdopendir])
-  AC_REPLACE_FUNCS([fchmodat mkdirat openat])
+  AC_REPLACE_FUNCS([fchmodat fstatat mkdirat openat unlinkat])
   AC_REQUIRE([AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK])
+  AC_REQUIRE([gl_FUNC_UNLINK])
   case $ac_cv_func_openat+$ac_cv_func_lstat_dereferences_slashed_symlink in
-  yes+yes) ;;
-  yes+*) AC_LIBOBJ([fstatat]);;
+  yes+yes)
+    # GNU/Hurd has unlinkat, but it has the same bug as unlink.
+    if test $REPLACE_UNLINK = 1; then
+      AC_LIBOBJ([unlinkat])
+      REPLACE_UNLINKAT=1
+    fi ;;
+  yes+*)
+    # Solaris 9 has *at functions, but uniformly mishandles trailing
+    # slash in all of them.
+    AC_LIBOBJ([openat])
+    REPLACE_OPENAT=1
+    AC_LIBOBJ([fstatat])
+    REPLACE_FSTATAT=1
+    AC_LIBOBJ([unlinkat])
+    REPLACE_UNLINKAT=1
+    ;;
   *)
-    AC_DEFINE([__OPENAT_PREFIX], [[rpl_]],
-      [Define to rpl_ if the openat replacement function should be used.])
+    HAVE_OPENAT=0
+    HAVE_UNLINKAT=0 # No known system with unlinkat but not openat
+    HAVE_FSTATAT=0 # No known system with fstatat but not openat
     gl_PREREQ_OPENAT;;
   esac
+  if test $ac_cv_func_fchmodat != yes; then
+    HAVE_FCHMODAT=0
+  fi
+  if test $ac_cv_func_mkdirat != yes; then
+    HAVE_MKDIRAT=0
+  fi
   gl_FUNC_FCHOWNAT
 ])
 
@@ -41,7 +74,7 @@ AC_DEFUN([gl_FUNC_FCHOWNAT_DEREF_BUG],
      ln -s conftest.no-such $gl_dangle
      AC_RUN_IFELSE(
        [AC_LANG_SOURCE(
-         [[
+          [[
 #include <fcntl.h>
 #include <unistd.h>
 #include <stdlib.h>
@@ -51,10 +84,10 @@ int
 main ()
 {
   return (fchownat (AT_FDCWD, "$gl_dangle", -1, getgid (),
-                   AT_SYMLINK_NOFOLLOW) != 0
-         && errno == ENOENT);
+                    AT_SYMLINK_NOFOLLOW) != 0
+          && errno == ENOENT);
 }
-         ]])],
+          ]])],
     [gl_cv_func_fchownat_nofollow_works=yes],
     [gl_cv_func_fchownat_nofollow_works=no],
     [gl_cv_func_fchownat_nofollow_works=no],
@@ -69,23 +102,23 @@ main ()
 # Also use the replacement function if fchownat is simply not available.
 AC_DEFUN([gl_FUNC_FCHOWNAT],
 [
-  # Assume we'll use the replacement function.
-  # The only case in which we won't is when we have fchownat, and it works.
-  use_replacement_fchownat=yes
-
-  AC_CHECK_FUNC([fchownat], [have_fchownat=yes], [have_fchownat=no])
-  if test $have_fchownat = yes; then
-    gl_FUNC_FCHOWNAT_DEREF_BUG([], [use_replacement_fchownat=no])
+  AC_REQUIRE([gl_FUNC_CHOWN])
+  AC_CHECK_FUNC([fchownat],
+    [gl_FUNC_FCHOWNAT_DEREF_BUG([REPLACE_FCHOWNAT=1
+      AC_DEFINE([FCHOWNAT_NOFOLLOW_BUG], [1], [Define to 1 if your
+      platform has fchownat, but it cannot perform lchown tasks.])])],
+    [HAVE_FCHOWNAT=0])
+  if test $REPLACE_CHOWN = 1; then
+    REPLACE_FCHOWNAT=1
   fi
-
-  if test $use_replacement_fchownat = yes; then
+  if test $HAVE_FCHOWNAT = 0 || test $REPLACE_FCHOWNAT = 1; then
     AC_LIBOBJ([fchownat])
-    AC_DEFINE([fchownat], [rpl_fchownat],
-      [Define to rpl_fchownat if the replacement function should be used.])
   fi
 ])
 
 AC_DEFUN([gl_PREREQ_OPENAT],
 [
+  AC_REQUIRE([AC_C_INLINE])
+  AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T])
   :
 ])
index e88fdb4ca49e7b301726b55e3fc8f8715a08d8ee..6a3f857e3ae49bd13f6667f1d5a8b070c15a8ffb 100644 (file)
@@ -1,5 +1,6 @@
-# pathmax.m4 serial 7
-dnl Copyright (C) 2002, 2003, 2005, 2006, 2009 Free Software Foundation, Inc.
+# pathmax.m4 serial 8
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -7,5 +8,6 @@ dnl with or without modifications, as long as this notice is preserved.
 AC_DEFUN([gl_PATHMAX],
 [
   dnl Prerequisites of lib/pathmax.h.
+  AC_CHECK_FUNCS_ONCE([pathconf])
   AC_CHECK_HEADERS_ONCE([sys/param.h])
 ])
index 2284fa5054f5b863c25365bb1bbe08d53a36d423..960efe15d4e121d74e5ca16810c6597ef7545581 100644 (file)
--- a/m4/po.m4
+++ b/m4/po.m4
@@ -1,5 +1,5 @@
 # po.m4 serial 17 (gettext-0.18)
-dnl Copyright (C) 1995-2009 Free Software Foundation, Inc.
+dnl Copyright (C) 1995-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index a1d4dadd7bb6819e7739162482fcc0b99cfc3567..ebca5364c467d51f91324b50bb2b248b3cc725a0 100644 (file)
@@ -1,5 +1,5 @@
-# printf.m4 serial 28
-dnl Copyright (C) 2003, 2007-2009 Free Software Foundation, Inc.
+# printf.m4 serial 33
+dnl Copyright (C) 2003, 2007-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -125,7 +125,8 @@ changequote([,])dnl
 ])
 
 dnl Test whether the *printf family of functions supports infinite and NaN
-dnl 'double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001)
+dnl 'double' arguments and negative zero arguments in the %f, %e, %g
+dnl directives. (ISO C99, POSIX:2001)
 dnl Result is gl_cv_func_printf_infinite.
 
 AC_DEFUN([gl_PRINTF_INFINITE],
@@ -156,6 +157,13 @@ strisnan (const char *string, size_t start_index, size_t end_index)
     }
   return 0;
 }
+static int
+have_minus_zero ()
+{
+  static double plus_zero = 0.0;
+  double minus_zero = - plus_zero;
+  return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0;
+}
 static char buf[10000];
 static double zero = 0.0;
 int main ()
@@ -187,6 +195,11 @@ int main ()
   if (sprintf (buf, "%g", zero / zero) < 0
       || !strisnan (buf, 0, strlen (buf)))
     return 1;
+  /* This test fails on HP-UX 10.20.  */
+  if (have_minus_zero ())
+    if (sprintf (buf, "%g", - zero) < 0
+        || strcmp (buf, "-0") != 0)
+    return 1;
   return 0;
 }], [gl_cv_func_printf_infinite=yes], [gl_cv_func_printf_infinite=no],
       [
@@ -545,7 +558,7 @@ int main ()
   if (sprintf (buf, "%F", 1.0 / 0.0) < 0
       || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0))
     return 1;
-  /* This catches a Cygwin 2007 bug.  */
+  /* This catches a Cygwin 1.5.x bug.  */
   if (sprintf (buf, "%.F", 1234.0) < 0
       || strcmp (buf, "1234") != 0)
     return 1;
@@ -612,6 +625,84 @@ changequote([,])dnl
     ])
 ])
 
+dnl Test whether the *printf family of functions supports the %ls format
+dnl directive and in particular, when a precision is specified, whether
+dnl the functions stop converting the wide string argument when the number
+dnl of bytes that have been produced by this conversion equals or exceeds
+dnl the precision.
+dnl Result is gl_cv_func_printf_directive_ls.
+
+AC_DEFUN([gl_PRINTF_DIRECTIVE_LS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports the 'ls' directive],
+    [gl_cv_func_printf_directive_ls],
+    [
+      AC_TRY_RUN([
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+#include <string.h>
+int main ()
+{
+  char buf[100];
+  /* Test whether %ls works at all.
+     This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on
+     Cygwin 1.5.  */
+  {
+    static const wchar_t wstring[] = { 'a', 'b', 'c', 0 };
+    buf[0] = '\0';
+    if (sprintf (buf, "%ls", wstring) < 0
+        || strcmp (buf, "abc") != 0)
+      return 1;
+  }
+  /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an
+     assertion failure inside libc), but not on OpenBSD 4.0.  */
+  {
+    static const wchar_t wstring[] = { 'a', 0 };
+    buf[0] = '\0';
+    if (sprintf (buf, "%ls", wstring) < 0
+        || strcmp (buf, "a") != 0)
+      return 1;
+  }
+  /* Test whether precisions in %ls are supported as specified in ISO C 99
+     section 7.19.6.1:
+       "If a precision is specified, no more than that many bytes are written
+        (including shift sequences, if any), and the array shall contain a
+        null wide character if, to equal the multibyte character sequence
+        length given by the precision, the function would need to access a
+        wide character one past the end of the array."
+     This test fails on Solaris 10.  */
+  {
+    static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 };
+    buf[0] = '\0';
+    if (sprintf (buf, "%.2ls", wstring) < 0
+        || strcmp (buf, "ab") != 0)
+      return 1;
+  }
+  return 0;
+}], [gl_cv_func_printf_directive_ls=yes], [gl_cv_func_printf_directive_ls=no],
+      [
+changequote(,)dnl
+       case "$host_os" in
+         openbsd*)        gl_cv_func_printf_directive_ls="guessing no";;
+         irix*)           gl_cv_func_printf_directive_ls="guessing no";;
+         solaris*)        gl_cv_func_printf_directive_ls="guessing no";;
+         cygwin*)         gl_cv_func_printf_directive_ls="guessing no";;
+         beos* | haiku*)  gl_cv_func_printf_directive_ls="guessing no";;
+         *)               gl_cv_func_printf_directive_ls="guessing yes";;
+       esac
+changequote([,])dnl
+      ])
+    ])
+])
+
 dnl Test whether the *printf family of functions supports POSIX/XSI format
 dnl strings with positions. (POSIX:2001)
 dnl Result is gl_cv_func_printf_positions.
@@ -1261,18 +1352,19 @@ dnl 4 = gl_PRINTF_INFINITE_LONG_DOUBLE
 dnl 5 = gl_PRINTF_DIRECTIVE_A
 dnl 6 = gl_PRINTF_DIRECTIVE_F
 dnl 7 = gl_PRINTF_DIRECTIVE_N
-dnl 8 = gl_PRINTF_POSITIONS
-dnl 9 = gl_PRINTF_FLAG_GROUPING
-dnl 10 = gl_PRINTF_FLAG_LEFTADJUST
-dnl 11 = gl_PRINTF_FLAG_ZERO
-dnl 12 = gl_PRINTF_PRECISION
-dnl 13 = gl_PRINTF_ENOMEM
-dnl 14 = gl_SNPRINTF_PRESENCE
-dnl 15 = gl_SNPRINTF_TRUNCATION_C99
-dnl 16 = gl_SNPRINTF_RETVAL_C99
-dnl 17 = gl_SNPRINTF_DIRECTIVE_N
-dnl 18 = gl_SNPRINTF_SIZE1
-dnl 19 = gl_VSNPRINTF_ZEROSIZE_C99
+dnl 8 = gl_PRINTF_DIRECTIVE_LS
+dnl 9 = gl_PRINTF_POSITIONS
+dnl 10 = gl_PRINTF_FLAG_GROUPING
+dnl 11 = gl_PRINTF_FLAG_LEFTADJUST
+dnl 12 = gl_PRINTF_FLAG_ZERO
+dnl 13 = gl_PRINTF_PRECISION
+dnl 14 = gl_PRINTF_ENOMEM
+dnl 15 = gl_SNPRINTF_PRESENCE
+dnl 16 = gl_SNPRINTF_TRUNCATION_C99
+dnl 17 = gl_SNPRINTF_RETVAL_C99
+dnl 18 = gl_SNPRINTF_DIRECTIVE_N
+dnl 19 = gl_SNPRINTF_SIZE1
+dnl 20 = gl_VSNPRINTF_ZEROSIZE_C99
 dnl
 dnl 1 = checking whether printf supports size specifiers as in C99...
 dnl 2 = checking whether printf supports 'long double' arguments...
@@ -1281,42 +1373,44 @@ dnl 4 = checking whether printf supports infinite 'long double' arguments...
 dnl 5 = checking whether printf supports the 'a' and 'A' directives...
 dnl 6 = checking whether printf supports the 'F' directive...
 dnl 7 = checking whether printf supports the 'n' directive...
-dnl 8 = checking whether printf supports POSIX/XSI format strings with positions...
-dnl 9 = checking whether printf supports the grouping flag...
-dnl 10 = checking whether printf supports the left-adjust flag correctly...
-dnl 11 = checking whether printf supports the zero flag correctly...
-dnl 12 = checking whether printf supports large precisions...
-dnl 13 = checking whether printf survives out-of-memory conditions...
-dnl 14 = checking for snprintf...
-dnl 15 = checking whether snprintf truncates the result as in C99...
-dnl 16 = checking whether snprintf returns a byte count as in C99...
-dnl 17 = checking whether snprintf fully supports the 'n' directive...
-dnl 18 = checking whether snprintf respects a size of 1...
-dnl 19 = checking whether vsnprintf respects a zero size as in C99...
+dnl 8 = checking whether printf supports the 'ls' directive...
+dnl 9 = checking whether printf supports POSIX/XSI format strings with positions...
+dnl 10 = checking whether printf supports the grouping flag...
+dnl 11 = checking whether printf supports the left-adjust flag correctly...
+dnl 12 = checking whether printf supports the zero flag correctly...
+dnl 13 = checking whether printf supports large precisions...
+dnl 14 = checking whether printf survives out-of-memory conditions...
+dnl 15 = checking for snprintf...
+dnl 16 = checking whether snprintf truncates the result as in C99...
+dnl 17 = checking whether snprintf returns a byte count as in C99...
+dnl 18 = checking whether snprintf fully supports the 'n' directive...
+dnl 19 = checking whether snprintf respects a size of 1...
+dnl 20 = checking whether vsnprintf respects a zero size as in C99...
 dnl
 dnl . = yes, # = no.
 dnl
-dnl                                  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19
-dnl   glibc 2.5                      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
-dnl   glibc 2.3.6                    .  .  .  .  #  .  .  .  .  .  .  .  .  .  .  .  .  .  .
-dnl   FreeBSD 5.4, 6.1               .  .  .  .  #  .  .  .  .  .  #  .  #  .  .  .  .  .  .
-dnl   MacOS X 10.3.9                 .  .  .  .  #  .  .  .  .  .  #  .  #  .  .  .  .  .  .
-dnl   OpenBSD 3.9, 4.0               .  .  #  #  #  #  .  .  #  .  #  .  #  .  .  .  .  .  .
-dnl   Cygwin 2007 (= Cygwin 1.5.24)  .  .  .  .  #  #  .  .  .  ?  #  ?  ?  .  .  .  .  .  .
-dnl   Cygwin 2006 (= Cygwin 1.5.19)  #  .  .  .  #  #  .  .  #  ?  #  ?  ?  .  .  .  .  .  .
-dnl   Solaris 10                     .  .  #  #  #  .  .  .  .  .  #  .  .  .  .  .  .  .  .
-dnl   Solaris 2.6 ... 9              #  .  #  #  #  #  .  .  .  .  #  .  .  .  .  .  .  .  .
-dnl   Solaris 2.5.1                  #  .  #  #  #  #  .  .  .  .  #  .  .  #  #  #  #  #  #
-dnl   AIX 5.2                        .  .  #  #  #  .  .  .  .  .  #  .  .  .  .  .  .  .  .
-dnl   AIX 4.3.2, 5.1                 #  .  #  #  #  #  .  .  .  .  #  .  .  .  .  .  .  .  .
-dnl   HP-UX 11.31                    .  .  .  .  #  .  .  .  .  .  #  .  .  .  .  #  #  .  .
-dnl   HP-UX 11.{00,11,23}            #  .  .  .  #  #  .  .  .  .  #  .  .  .  .  #  #  .  #
-dnl   HP-UX 10.20                    #  .  .  .  #  #  .  .  .  #  #  .  .  .  .  #  #  ?  #
-dnl   IRIX 6.5                       #  .  #  #  #  #  .  .  .  .  #  .  .  .  .  #  .  .  .
-dnl   OSF/1 5.1                      #  .  #  #  #  #  .  .  .  .  #  .  .  .  .  #  .  .  #
-dnl   OSF/1 4.0d                     #  .  #  #  #  #  .  .  .  .  #  .  .  #  #  #  #  #  #
-dnl   NetBSD 4.0                     .  ?  ?  ?  ?  ?  .  .  ?  ?  ?  ?  ?  .  .  .  ?  ?  ?
-dnl   NetBSD 3.0                     .  .  .  .  #  #  .  #  #  ?  #  .  #  .  .  .  .  .  .
-dnl   Haiku                          .  .  .  #  #  #  .  .  .  .  .  .  ?  .  .  .  .  .  .
-dnl   BeOS                           #  #  .  #  #  #  .  #  .  ?  .  #  ?  .  .  .  .  .  .
-dnl   mingw                          #  #  #  #  #  #  .  #  #  .  #  #  ?  .  #  #  #  .  .
+dnl                                  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
+dnl   glibc 2.5                      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
+dnl   glibc 2.3.6                    .  .  .  .  #  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
+dnl   FreeBSD 5.4, 6.1               .  .  .  .  #  .  .  .  .  .  .  #  .  #  .  .  .  .  .  .
+dnl   MacOS X 10.3.9                 .  .  .  .  #  .  .  .  .  .  .  #  .  #  .  .  .  .  .  .
+dnl   OpenBSD 3.9, 4.0               .  .  #  #  #  #  .  #  .  #  .  #  .  #  .  .  .  .  .  .
+dnl   Cygwin 1.7.0 (2009)            .  .  .  #  .  .  .  ?  .  .  .  .  .  ?  .  .  .  .  .  .
+dnl   Cygwin 1.5.25 (2008)           .  .  .  #  #  .  .  #  .  .  .  .  .  #  .  .  .  .  .  .
+dnl   Cygwin 1.5.19 (2006)           #  .  .  #  #  #  .  #  .  #  .  #  #  #  .  .  .  .  .  .
+dnl   Solaris 10                     .  .  #  #  #  .  .  #  .  .  .  #  .  .  .  .  .  .  .  .
+dnl   Solaris 2.6 ... 9              #  .  #  #  #  #  .  #  .  .  .  #  .  .  .  .  .  .  .  .
+dnl   Solaris 2.5.1                  #  .  #  #  #  #  .  #  .  .  .  #  .  .  #  #  #  #  #  #
+dnl   AIX 5.2                        .  .  #  #  #  .  .  .  .  .  .  #  .  .  .  .  .  .  .  .
+dnl   AIX 4.3.2, 5.1                 #  .  #  #  #  #  .  .  .  .  .  #  .  .  .  .  .  .  .  .
+dnl   HP-UX 11.31                    .  .  .  .  #  .  .  .  .  .  .  #  .  .  .  .  #  #  .  .
+dnl   HP-UX 11.{00,11,23}            #  .  .  .  #  #  .  .  .  .  .  #  .  .  .  .  #  #  .  #
+dnl   HP-UX 10.20                    #  .  #  .  #  #  .  ?  .  .  #  #  .  .  .  .  #  #  ?  #
+dnl   IRIX 6.5                       #  .  #  #  #  #  .  #  .  .  .  #  .  .  .  .  #  .  .  .
+dnl   OSF/1 5.1                      #  .  #  #  #  #  .  .  .  .  .  #  .  .  .  .  #  .  .  #
+dnl   OSF/1 4.0d                     #  .  #  #  #  #  .  .  .  .  .  #  .  .  #  #  #  #  #  #
+dnl   NetBSD 4.0                     .  ?  ?  ?  ?  ?  .  ?  .  ?  ?  ?  ?  ?  .  .  .  ?  ?  ?
+dnl   NetBSD 3.0                     .  .  .  .  #  #  .  ?  #  #  ?  #  .  #  .  .  .  .  .  .
+dnl   Haiku                          .  .  .  #  #  #  .  #  .  .  .  .  .  ?  .  .  .  .  .  .
+dnl   BeOS                           #  #  .  #  #  #  .  ?  #  .  ?  .  #  ?  .  .  .  .  .  .
+dnl   mingw                          #  #  #  #  #  #  .  .  #  #  .  #  #  ?  .  #  #  #  .  .
diff --git a/m4/priv-set.m4 b/m4/priv-set.m4
new file mode 100644 (file)
index 0000000..205b00c
--- /dev/null
@@ -0,0 +1,15 @@
+# serial 6
+
+# Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Written by David Bartley.
+
+AC_DEFUN([gl_PRIV_SET],
+[
+  AC_REQUIRE([AC_C_INLINE])
+  AC_CHECK_FUNCS([getppriv])
+])
index e1d445d26734ecfbf6c756776d006878470a3715..2d804ac99d7087a595be309ce76de5c98f89ce92 100644 (file)
@@ -1,5 +1,5 @@
 # progtest.m4 serial 6 (gettext-0.18)
-dnl Copyright (C) 1996-2003, 2005, 2008, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 1996-2003, 2005, 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 0f08791a9005ea01a545e98e2d6fccca1f4e964b..e07554269edcb7ec86b76432e31166fd9755386f 100644 (file)
@@ -1,5 +1,6 @@
 # quote.m4 serial 5
-dnl Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2003, 2005, 2006, 2009, 2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 88478612fb677feb07e1cbb97182da619285dda1..f72fd621f8cff4906d3a0c46b2535f5984093667 100644 (file)
@@ -1,5 +1,5 @@
-# quotearg.m4 serial 7
-dnl Copyright (C) 2002, 2004-2008 Free Software Foundation, Inc.
+# quotearg.m4 serial 8
+dnl Copyright (C) 2002, 2004-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -7,9 +7,4 @@ dnl with or without modifications, as long as this notice is preserved.
 AC_DEFUN([gl_QUOTEARG],
 [
   AC_LIBOBJ([quotearg])
-
-  dnl Prerequisites of lib/quotearg.c.
-  AC_CHECK_FUNCS_ONCE([mbsinit])
-  AC_TYPE_MBSTATE_T
-  AC_FUNC_MBRTOWC
 ])
index 1ac7b7440fae5c205166481cd20950593af1b40b..2a25a490419fa2f642201a37cae6081d87391841 100644 (file)
@@ -1,5 +1,5 @@
 # rawmemchr.m4 serial 1
-dnl Copyright (C) 2003, 2007, 2008 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index ff3f1f5876f1947ea35afa4c43c941ef3975bdd9..36cd41f9b8e1b7ae49a36ed9d6fb99eb97e7e2dc 100644 (file)
@@ -1,5 +1,5 @@
-# readlink.m4 serial 5
-dnl Copyright (C) 2003, 2007, 2009 Free Software Foundation, Inc.
+# readlink.m4 serial 9
+dnl Copyright (C) 2003, 2007, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -12,6 +12,39 @@ AC_DEFUN([gl_FUNC_READLINK],
     HAVE_READLINK=0
     AC_LIBOBJ([readlink])
     gl_PREREQ_READLINK
+  else
+    AC_CACHE_CHECK([whether readlink signature is correct],
+      [gl_cv_decl_readlink_works],
+      [AC_COMPILE_IFELSE(
+         [AC_LANG_PROGRAM(
+           [[#include <unistd.h>
+      /* Cause compilation failure if original declaration has wrong type.  */
+      ssize_t readlink (const char *, char *, size_t);]])],
+         [gl_cv_decl_readlink_works=yes], [gl_cv_decl_readlink_works=no])])
+    dnl Solaris 9 ignores trailing slash.
+    dnl FreeBSD 7.2 dereferences only one level of links with trailing slash.
+    AC_CACHE_CHECK([whether readlink handles trailing slash correctly],
+      [gl_cv_func_readlink_works],
+      [# We have readlink, so assume ln -s works.
+       ln -s conftest.no-such conftest.link
+       ln -s conftest.link conftest.lnk2
+       AC_RUN_IFELSE(
+         [AC_LANG_PROGRAM(
+           [[#include <unistd.h>
+]], [[char buf[20];
+      return readlink ("conftest.lnk2/", buf, sizeof buf) != -1;]])],
+         [gl_cv_func_readlink_works=yes], [gl_cv_func_readlink_works=no],
+         [gl_cv_func_readlink_works="guessing no"])
+      rm -f conftest.link conftest.lnk2])
+    if test "$gl_cv_func_readlink_works" != yes; then
+      AC_DEFINE([READLINK_TRAILING_SLASH_BUG], [1], [Define to 1 if readlink
+        fails to recognize a trailing slash.])
+      REPLACE_READLINK=1
+      AC_LIBOBJ([readlink])
+    elif test "$gl_cv_decl_readlink_works" != yes; then
+      REPLACE_READLINK=1
+      AC_LIBOBJ([readlink])
+    fi
   fi
 ])
 
index 5925796864e033cb4e0794c9e751378f513b97c5..dc30235c176cb5f7228dfbf091aaed3f96d8f9c6 100644 (file)
@@ -1,5 +1,5 @@
 # realloc.m4 serial 9
-dnl Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 43b04638c2ebcbdf9a5c5ab207e07b5c59570ccd..6bd6b8f7d4e6218874d715bf7041b9aa91cbdca6 100644 (file)
@@ -1,7 +1,7 @@
-# serial 53
+# serial 55
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-# 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
+# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -18,149 +18,153 @@ AC_DEFUN([gl_REGEX],
 
   AC_ARG_WITH([included-regex],
     [AS_HELP_STRING([--without-included-regex],
-                   [don't compile regex; this is the default on 32-bit
-                    systems with recent-enough versions of the GNU C
-                    Library (use with caution on other systems).
-                    On systems with 64-bit ptrdiff_t and 32-bit int,
-                    --with-included-regex is the default, in case
-                    regex functions operate on very long strings (>2GB)])])
+                    [don't compile regex; this is the default on systems
+                     with recent-enough versions of the GNU C Library
+                     (use with caution on other systems).])])
 
   case $with_included_regex in #(
   yes|no) ac_use_included_regex=$with_included_regex
-       ;;
+        ;;
   '')
     # If the system regex support is good enough that it passes the
     # following run test, then default to *not* using the included regex.c.
     # If cross compiling, assume the test would fail and use the included
     # regex.c.
     AC_CACHE_CHECK([for working re_compile_pattern],
-                  [gl_cv_func_re_compile_pattern_working],
+                   [gl_cv_func_re_compile_pattern_working],
       [AC_RUN_IFELSE(
-       [AC_LANG_PROGRAM(
-         [AC_INCLUDES_DEFAULT[
-          #if HAVE_LOCALE_H
-           #include <locale.h>
-          #endif
-          #include <limits.h>
-          #include <regex.h>
-          ]],
-         [[static struct re_pattern_buffer regex;
-           unsigned char folded_chars[UCHAR_MAX + 1];
-           int i;
-           const char *s;
-           struct re_registers regs;
-
-           #if HAVE_LOCALE_H
-             /* http://sourceware.org/ml/libc-hacker/2006-09/msg00008.html
-                This test needs valgrind to catch the bug on Debian
-                GNU/Linux 3.1 x86, but it might catch the bug better
-                on other platforms and it shouldn't hurt to try the
-                test here.  */
-             if (setlocale (LC_ALL, "en_US.UTF-8"))
-               {
-                 static char const pat[] = "insert into";
-                 static char const data[] =
-                   "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK";
-                 re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE
-                                | RE_ICASE);
-                 memset (&regex, 0, sizeof regex);
-                 s = re_compile_pattern (pat, sizeof pat - 1, &regex);
-                 if (s)
-                   return 1;
-                 if (re_search (&regex, data, sizeof data - 1,
-                                0, sizeof data - 1, &regs)
-                     != -1)
-                   return 1;
-                 if (! setlocale (LC_ALL, "C"))
-                   return 1;
-               }
-           #endif
-
-           /* This test is from glibc bug 3957, reported by Andrew Mackey.  */
-           re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE);
-           memset (&regex, 0, sizeof regex);
-           s = re_compile_pattern ("a[^x]b", 6, &regex);
-           if (s)
-             return 1;
-
-           /* This should fail, but succeeds for glibc-2.5.  */
-           if (re_search (&regex, "a\nb", 3, 0, 3, &regs) != -1)
-             return 1;
-
-           /* This regular expression is from Spencer ere test number 75
-              in grep-2.3.  */
-           re_set_syntax (RE_SYNTAX_POSIX_EGREP);
-           memset (&regex, 0, sizeof regex);
-           for (i = 0; i <= UCHAR_MAX; i++)
-             folded_chars[i] = i;
-           regex.translate = folded_chars;
-           s = re_compile_pattern ("a[[:@:>@:]]b\n", 11, &regex);
-           /* This should fail with _Invalid character class name_ error.  */
-           if (!s)
-             return 1;
-
-           /* This should succeed, but does not for glibc-2.1.3.  */
-           memset (&regex, 0, sizeof regex);
-           s = re_compile_pattern ("{1", 2, &regex);
-
-           if (s)
-             return 1;
-
-           /* The following example is derived from a problem report
-              against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>.  */
-           memset (&regex, 0, sizeof regex);
-           s = re_compile_pattern ("[an\371]*n", 7, &regex);
-           if (s)
-             return 1;
-
-           /* This should match, but does not for glibc-2.2.1.  */
-           if (re_match (&regex, "an", 2, 0, &regs) != 2)
-             return 1;
-
-           memset (&regex, 0, sizeof regex);
-           s = re_compile_pattern ("x", 1, &regex);
-           if (s)
-             return 1;
-
-           /* glibc-2.2.93 does not work with a negative RANGE argument.  */
-           if (re_search (&regex, "wxy", 3, 2, -2, &regs) != 1)
-             return 1;
-
-           /* The version of regex.c in older versions of gnulib
-              ignored RE_ICASE.  Detect that problem too.  */
-           re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE);
-           memset (&regex, 0, sizeof regex);
-           s = re_compile_pattern ("x", 1, &regex);
-           if (s)
-             return 1;
-
-           if (re_search (&regex, "WXY", 3, 0, 3, &regs) < 0)
-             return 1;
-
-           /* Catch a bug reported by Vin Shelton in
-              http://lists.gnu.org/archive/html/bug-coreutils/2007-06/msg00089.html
-              */
-           re_set_syntax (RE_SYNTAX_POSIX_BASIC
-                          & ~RE_CONTEXT_INVALID_DUP
-                          & ~RE_NO_EMPTY_RANGES);
-           memset (&regex, 0, sizeof regex);
-           s = re_compile_pattern ("[[:alnum:]_-]\\\\+$", 16, &regex);
-           if (s)
-             return 1;
-
-           /* REG_STARTEND was added to glibc on 2004-01-15.
-              Reject older versions.  */
-           if (! REG_STARTEND)
-             return 1;
-
-           /* Reject hosts whose regoff_t values are too narrow.
-              These include glibc 2.3.5 on hosts with 64-bit ptrdiff_t
-              and 32-bit int.  */
-           if (sizeof (regoff_t) < sizeof (ptrdiff_t)
-               || sizeof (regoff_t) < sizeof (ssize_t))
-             return 1;
-
-           return 0;]])],
+        [AC_LANG_PROGRAM(
+          [AC_INCLUDES_DEFAULT[
+           #if HAVE_LOCALE_H
+            #include <locale.h>
+           #endif
+           #include <limits.h>
+           #include <regex.h>
+           ]],
+          [[static struct re_pattern_buffer regex;
+            unsigned char folded_chars[UCHAR_MAX + 1];
+            int i;
+            const char *s;
+            struct re_registers regs;
+
+            #if HAVE_LOCALE_H
+              /* http://sourceware.org/ml/libc-hacker/2006-09/msg00008.html
+                 This test needs valgrind to catch the bug on Debian
+                 GNU/Linux 3.1 x86, but it might catch the bug better
+                 on other platforms and it shouldn't hurt to try the
+                 test here.  */
+              if (setlocale (LC_ALL, "en_US.UTF-8"))
+                {
+                  static char const pat[] = "insert into";
+                  static char const data[] =
+                    "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK";
+                  re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE
+                                 | RE_ICASE);
+                  memset (&regex, 0, sizeof regex);
+                  s = re_compile_pattern (pat, sizeof pat - 1, &regex);
+                  if (s)
+                    return 1;
+                  if (re_search (&regex, data, sizeof data - 1,
+                                 0, sizeof data - 1, &regs)
+                      != -1)
+                    return 1;
+                  if (! setlocale (LC_ALL, "C"))
+                    return 1;
+                }
+            #endif
+
+            /* This test is from glibc bug 3957, reported by Andrew Mackey.  */
+            re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE);
+            memset (&regex, 0, sizeof regex);
+            s = re_compile_pattern ("a[^x]b", 6, &regex);
+            if (s)
+              return 1;
+
+            /* This should fail, but succeeds for glibc-2.5.  */
+            if (re_search (&regex, "a\nb", 3, 0, 3, &regs) != -1)
+              return 1;
+
+            /* This regular expression is from Spencer ere test number 75
+               in grep-2.3.  */
+            re_set_syntax (RE_SYNTAX_POSIX_EGREP);
+            memset (&regex, 0, sizeof regex);
+            for (i = 0; i <= UCHAR_MAX; i++)
+              folded_chars[i] = i;
+            regex.translate = folded_chars;
+            s = re_compile_pattern ("a[[:@:>@:]]b\n", 11, &regex);
+            /* This should fail with _Invalid character class name_ error.  */
+            if (!s)
+              return 1;
+
+            /* Ensure that [b-a] is diagnosed as invalid. */
+            re_set_syntax (RE_SYNTAX_POSIX_EGREP);
+            memset (&regex, 0, sizeof regex);
+            s = re_compile_pattern ("a[b-a]", 6, &regex);
+            if (s == 0)
+              return 1;
+
+            /* This should succeed, but does not for glibc-2.1.3.  */
+            memset (&regex, 0, sizeof regex);
+            s = re_compile_pattern ("{1", 2, &regex);
+
+            if (s)
+              return 1;
+
+            /* The following example is derived from a problem report
+               against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>.  */
+            memset (&regex, 0, sizeof regex);
+            s = re_compile_pattern ("[an\371]*n", 7, &regex);
+            if (s)
+              return 1;
+
+            /* This should match, but does not for glibc-2.2.1.  */
+            if (re_match (&regex, "an", 2, 0, &regs) != 2)
+              return 1;
+
+            memset (&regex, 0, sizeof regex);
+            s = re_compile_pattern ("x", 1, &regex);
+            if (s)
+              return 1;
+
+            /* glibc-2.2.93 does not work with a negative RANGE argument.  */
+            if (re_search (&regex, "wxy", 3, 2, -2, &regs) != 1)
+              return 1;
+
+            /* The version of regex.c in older versions of gnulib
+               ignored RE_ICASE.  Detect that problem too.  */
+            re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE);
+            memset (&regex, 0, sizeof regex);
+            s = re_compile_pattern ("x", 1, &regex);
+            if (s)
+              return 1;
+
+            if (re_search (&regex, "WXY", 3, 0, 3, &regs) < 0)
+              return 1;
+
+            /* Catch a bug reported by Vin Shelton in
+               http://lists.gnu.org/archive/html/bug-coreutils/2007-06/msg00089.html
+               */
+            re_set_syntax (RE_SYNTAX_POSIX_BASIC
+                           & ~RE_CONTEXT_INVALID_DUP
+                           & ~RE_NO_EMPTY_RANGES);
+            memset (&regex, 0, sizeof regex);
+            s = re_compile_pattern ("[[:alnum:]_-]\\\\+$", 16, &regex);
+            if (s)
+              return 1;
+
+            /* REG_STARTEND was added to glibc on 2004-01-15.
+               Reject older versions.  */
+            if (! REG_STARTEND)
+              return 1;
+
+            /* Reject hosts whose regoff_t values are too narrow.
+               These include glibc 2.3.5 on hosts with 64-bit ptrdiff_t
+               and 32-bit int.  */
+            if (sizeof (regoff_t) < sizeof (ptrdiff_t)
+                || sizeof (regoff_t) < sizeof (ssize_t))
+              return 1;
+
+            return 0;]])],
        [gl_cv_func_re_compile_pattern_working=yes],
        [gl_cv_func_re_compile_pattern_working=no],
        dnl When crosscompiling, assume it is not working.
@@ -216,6 +220,7 @@ AC_DEFUN([gl_REGEX],
 AC_DEFUN([gl_PREREQ_REGEX],
 [
   AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+  AC_REQUIRE([AC_C_INLINE])
   AC_REQUIRE([AC_C_RESTRICT])
   AC_REQUIRE([AC_TYPE_MBSTATE_T])
   AC_CHECK_HEADERS([libintl.h])
diff --git a/m4/rmdir.m4 b/m4/rmdir.m4
new file mode 100644 (file)
index 0000000..8d6bee8
--- /dev/null
@@ -0,0 +1,44 @@
+# rmdir.m4 serial 7
+dnl Copyright (C) 2002, 2005, 2009-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_RMDIR],
+[
+  AC_REQUIRE([gl_AC_DOS])
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  dnl FIXME: simplify this module in 2010 if no one reports a missing rmdir
+  AC_REPLACE_FUNCS([rmdir])
+  if test $ac_cv_func_rmdir = no; then
+    REPLACE_RMDIR=1
+    # If someone lacks rmdir, make configure fail, and request
+    # a bug report to inform us about it.
+    if test x"$SKIP_RMDIR_CHECK" != xyes; then
+      AC_MSG_FAILURE([Your system lacks the rmdir function.
+              Please report this, along with the output of "uname -a", to the
+              bug-coreutils@gnu.org mailing list.  To continue past this point,
+              rerun configure with SKIP_RMDIR_CHECK=yes.
+              E.g., ./configure SKIP_RMDIR_CHECK=yes])
+    fi
+  else
+    dnl Detect cygwin 1.5.x bug.
+    AC_CACHE_CHECK([whether rmdir works], [gl_cv_func_rmdir_works],
+      [mkdir conftest.dir
+       touch conftest.file
+       AC_RUN_IFELSE(
+         [AC_LANG_PROGRAM(
+           [[#include <stdio.h>
+             #include <errno.h>
+             #include <unistd.h>
+]], [[return !rmdir ("conftest.file/") || errno != ENOTDIR
+       || !rmdir ("conftest.dir/./");]])],
+         [gl_cv_func_rmdir_works=yes], [gl_cv_func_rmdir_works=no],
+         [gl_cv_func_rmdir_works="guessing no"])
+       rm -rf conftest.dir conftest.file])
+    if test x"$gl_cv_func_rmdir_works" != xyes; then
+      REPLACE_RMDIR=1
+      AC_LIBOBJ([rmdir])
+    fi
+  fi
+])
index 387deffbf82559b658b820eced3dc459fcb84fa8..c6222ae5d6f66256e9345405235469dbdf9a435e 100644 (file)
@@ -1,5 +1,5 @@
-# rpmatch.m4 serial 8
-dnl Copyright (C) 2002-2003, 2007-2009 Free Software Foundation, Inc.
+# rpmatch.m4 serial 9
+dnl Copyright (C) 2002-2003, 2007-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -20,8 +20,8 @@ AC_DEFUN([gl_FUNC_RPMATCH],
 # Prerequisites of lib/rpmatch.c.
 AC_DEFUN([gl_PREREQ_RPMATCH], [
   AC_CACHE_CHECK([for nl_langinfo and YESEXPR], [gl_cv_langinfo_yesexpr],
-    [AC_TRY_LINK([#include <langinfo.h>],
-       [char* cs = nl_langinfo(YESEXPR); return !cs;],
+    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]],
+       [[char* cs = nl_langinfo(YESEXPR); return !cs;]])],
        [gl_cv_langinfo_yesexpr=yes],
        [gl_cv_langinfo_yesexpr=no])
     ])
index 7a89d0a6c16012f9a7f19165175e5c0b6bf18419..d087bd30fdd8f4f2c3545daad7c1e651c758bc8e 100644 (file)
@@ -1,5 +1,6 @@
 # safe-read.m4 serial 5
-dnl Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index db119ffa59b5c710b0999c90a61ab1d98bd45ec6..2ff11d27a2dd1622c5a95387cb0063d6f9417eac 100644 (file)
@@ -1,5 +1,5 @@
 # safe-write.m4 serial 3
-dnl Copyright (C) 2002, 2005, 2006 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005-2006, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/same.m4 b/m4/same.m4
new file mode 100644 (file)
index 0000000..73c82bb
--- /dev/null
@@ -0,0 +1,15 @@
+#serial 8
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2010 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_SAME],
+[
+  AC_LIBOBJ([same])
+
+  dnl Prerequisites of lib/same.c.
+  AC_REQUIRE([AC_SYS_LONG_FILE_NAMES])
+  AC_CHECK_FUNCS_ONCE([pathconf])
+])
index c9b3a3b448310fd76e6c4ecb9d40544ba78b2012..06dd16be1bcdc11eb66ed8fc45d320aa909f9da1 100644 (file)
@@ -1,5 +1,5 @@
 # serial 9
-dnl Copyright (C) 2002-2006, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 1fc6c8150e505dc7387437030c2e94c43207c096..06a4c80fdee35e84aa091be906f6196ea8d2b9f6 100644 (file)
@@ -1,5 +1,6 @@
 # savedir.m4 serial 9
-dnl Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index e28407ee172b28686471b3ef7226deebf6dd18b6..ae4dd863fc4574401dd4e22b5c3c9a585fd37dbb 100644 (file)
@@ -1,17 +1,14 @@
-# setenv.m4 serial 11
-dnl Copyright (C) 2001-2004, 2006-2009 Free Software Foundation, Inc.
+# setenv.m4 serial 15
+dnl Copyright (C) 2001-2004, 2006-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 AC_DEFUN([gl_FUNC_SETENV],
 [
-  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
-  AC_CHECK_FUNCS_ONCE([setenv])
-  if test $ac_cv_func_setenv = no; then
-    HAVE_SETENV=0
+  AC_REQUIRE([gl_FUNC_SETENV_SEPARATE])
+  if test $HAVE_SETENV$REPLACE_SETENV != 10; then
     AC_LIBOBJ([setenv])
-    gl_PREREQ_SETENV
   fi
 ])
 
@@ -22,6 +19,24 @@ AC_DEFUN([gl_FUNC_SETENV_SEPARATE],
   AC_CHECK_FUNCS_ONCE([setenv])
   if test $ac_cv_func_setenv = no; then
     HAVE_SETENV=0
+  else
+    AC_CACHE_CHECK([whether setenv validates arguments],
+      [gl_cv_func_setenv_works],
+      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+       #include <stdlib.h>
+       #include <errno.h>
+      ]], [[
+       if (setenv ("", "", 0) != -1) return 1;
+       if (errno != EINVAL) return 2;
+       if (setenv ("a", "=", 1) != 0) return 3;
+       if (strcmp (getenv ("a"), "=") != 0) return 4;
+      ]])],
+      [gl_cv_func_setenv_works=yes], [gl_cv_func_setenv_works=no],
+      [gl_cv_func_setenv_works="guessing no"])])
+    if test "$gl_cv_func_setenv_works" != yes; then
+      REPLACE_SETENV=1
+      AC_LIBOBJ([setenv])
+    fi
   fi
   gl_PREREQ_SETENV
 ])
@@ -35,6 +50,7 @@ AC_DEFUN([gl_FUNC_UNSETENV],
     AC_LIBOBJ([unsetenv])
     gl_PREREQ_UNSETENV
   else
+    dnl Some BSDs return void, failing to do error checking.
     AC_CACHE_CHECK([for unsetenv() return type], [gt_cv_func_unsetenv_ret],
       [AC_TRY_COMPILE([#include <stdlib.h>
 extern
@@ -48,7 +64,30 @@ int unsetenv();
 #endif
 ], , gt_cv_func_unsetenv_ret='int', gt_cv_func_unsetenv_ret='void')])
     if test $gt_cv_func_unsetenv_ret = 'void'; then
-      VOID_UNSETENV=1
+      AC_DEFINE([VOID_UNSETENV], [1], [Define to 1 if unsetenv returns void
+       instead of int.])
+      REPLACE_UNSETENV=1
+      AC_LIBOBJ([unsetenv])
+    fi
+
+    dnl Solaris 10 unsetenv does not remove all copies of a name.
+    AC_CACHE_CHECK([whether unsetenv works on duplicates],
+      [gl_cv_func_unsetenv_works],
+      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+       #include <stdlib.h>
+      ]], [[
+       char entry[] = "b=2";
+       if (putenv ((char *) "a=1")) return 1;
+       if (putenv (entry)) return 2;
+       entry[0] = 'a';
+       unsetenv ("a");
+       if (getenv ("a")) return 3;
+      ]])],
+      [gl_cv_func_unsetenv_works=yes], [gl_cv_func_unsetenv_works=no],
+      [gl_cv_func_unsetenv_works="guessing no"])])
+    if test "$gl_cv_func_unsetenv_works" != yes; then
+      REPLACE_UNSETENV=1
+      AC_LIBOBJ([unsetenv])
     fi
   fi
 ])
index e0e7b3ff9542839b454870968c510e67d52c5913..ce992db1f18336a0775f3bd98bdd12cdb7e4e70f 100644 (file)
@@ -1,5 +1,5 @@
-# size_max.m4 serial 7
-dnl Copyright (C) 2003, 2005-2006, 2008 Free Software Foundation, Inc.
+# size_max.m4 serial 9
+dnl Copyright (C) 2003, 2005-2006, 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -10,8 +10,7 @@ AC_DEFUN([gl_SIZE_MAX],
 [
   AC_CHECK_HEADERS([stdint.h])
   dnl First test whether the system already has SIZE_MAX.
-  AC_MSG_CHECKING([for SIZE_MAX])
-  AC_CACHE_VAL([gl_cv_size_max], [
+  AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [
     gl_cv_size_max=
     AC_EGREP_CPP([Found it], [
 #include <limits.h>
@@ -54,11 +53,19 @@ Found it
       fi
     fi
   ])
-  AC_MSG_RESULT([$gl_cv_size_max])
   if test "$gl_cv_size_max" != yes; then
     AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max],
       [Define as the maximum value of type 'size_t', if the system doesn't define it.])
   fi
+  dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after
+  dnl <stdint.h>. Remember that the #undef in AH_VERBATIM gets replaced with
+  dnl #define by AC_DEFINE_UNQUOTED.
+  AH_VERBATIM([SIZE_MAX],
+[/* Define as the maximum value of type 'size_t', if the system doesn't define
+   it. */
+#ifndef SIZE_MAX
+# undef SIZE_MAX
+#endif])
 ])
 
 dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
index 474ba07ba9814e952a07d31370130d5502fefd5e..a5ec655201ebbddd8353e70df6564576dbc4f197 100644 (file)
@@ -1,5 +1,5 @@
-# sleep.m4 serial 2
-dnl Copyright (C) 2007-2008 Free Software Foundation, Inc.
+# sleep.m4 serial 3
+dnl Copyright (C) 2007-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -13,12 +13,37 @@ AC_DEFUN([gl_FUNC_SLEEP],
   dnl it takes the number of milliseconds as argument and returns void.
   dnl mingw does not declare this function.
   AC_CHECK_DECLS([sleep], , , [#include <unistd.h>])
+  AC_CHECK_FUNCS_ONCE([sleep])
   if test $ac_cv_have_decl_sleep != yes; then
     HAVE_SLEEP=0
     AC_LIBOBJ([sleep])
-    gl_PREREQ_SLEEP
+  else
+    dnl Cygwin 1.5.x has a bug where sleep can't exceed 49.7 days.
+    AC_CACHE_CHECK([for working sleep], [gl_cv_func_sleep_works],
+      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <errno.h>
+#include <unistd.h>
+#include <signal.h>
+static void
+handle_alarm (int sig)
+{
+  if (sig != SIGALRM)
+    _exit (2);
+}
+]], [[
+    /* Failure to compile this test due to missing alarm is okay,
+       since all such platforms (mingw) also lack sleep.  */
+    unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days.  */
+    unsigned int remaining;
+    signal (SIGALRM, handle_alarm);
+    alarm (1);
+    remaining = sleep (pentecost);
+    return !(pentecost - 10 < remaining && remaining <= pentecost);]])],
+      [gl_cv_func_sleep_works=yes], [gl_cv_func_sleep_works=no],
+      [gl_cv_func_sleep_works="guessing no"])])
+    if test "$gl_cv_func_sleep_works" != yes; then
+      REPLACE_SLEEP=1
+      AC_LIBOBJ([sleep])
+    fi
   fi
 ])
-
-# Prerequisites of lib/sleep.c.
-AC_DEFUN([gl_PREREQ_SLEEP], [:])
index 6021786ee146ea02ca697a1a90360dc95c6043d4..522b107b12679079050a1459d80b74c067d04743 100644 (file)
@@ -1,5 +1,5 @@
 # snprintf.m4 serial 5
-dnl Copyright (C) 2002-2004, 2007-2008 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2004, 2007-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 4eaef93ce37ece14d9ba6b26b2e28ec3016b4d17..e0ccee3a5c55bf26611116e575742fbdf63f78a7 100644 (file)
@@ -1,5 +1,5 @@
 # ssize_t.m4 serial 4 (gettext-0.15)
-dnl Copyright (C) 2001-2003, 2006 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2003, 2006, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index b860be82e2656a90eca6e0ecddf251cff6d1725e..e653c4341ea1f45fd205649c0bad8e21058de7b8 100644 (file)
@@ -1,6 +1,6 @@
 # Checks for stat-related time functions.
 
-# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009 Free Software
+# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2010 Free Software
 # Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
@@ -26,36 +26,36 @@ AC_DEFUN([gl_STAT_TIME],
   AC_CHECK_MEMBERS([struct stat.st_atim.tv_nsec],
     [AC_CACHE_CHECK([whether struct stat.st_atim is of type struct timespec],
        [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec],
-       [AC_TRY_COMPILE(
-         [
-           #include <sys/types.h>
-           #include <sys/stat.h>
-           #if HAVE_SYS_TIME_H
-           # include <sys/time.h>
-           #endif
-           #include <time.h>
-           struct timespec ts;
-           struct stat st;
-         ],
-         [
-           st.st_atim = ts;
-         ],
-         [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes],
-         [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no])])
+       [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+          [[
+            #include <sys/types.h>
+            #include <sys/stat.h>
+            #if HAVE_SYS_TIME_H
+            # include <sys/time.h>
+            #endif
+            #include <time.h>
+            struct timespec ts;
+            struct stat st;
+          ]],
+          [[
+            st.st_atim = ts;
+          ]])],
+          [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes],
+          [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no])])
      if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then
        AC_DEFINE([TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC], [1],
-        [Define to 1 if the type of the st_atim member of a struct stat is
-         struct timespec.])
+         [Define to 1 if the type of the st_atim member of a struct stat is
+          struct timespec.])
      fi],
     [AC_CHECK_MEMBERS([struct stat.st_atimespec.tv_nsec], [],
        [AC_CHECK_MEMBERS([struct stat.st_atimensec], [],
-         [AC_CHECK_MEMBERS([struct stat.st_atim.st__tim.tv_nsec], [], [],
-            [#include <sys/types.h>
-             #include <sys/stat.h>])],
-         [#include <sys/types.h>
-          #include <sys/stat.h>])],
+          [AC_CHECK_MEMBERS([struct stat.st_atim.st__tim.tv_nsec], [], [],
+             [#include <sys/types.h>
+              #include <sys/stat.h>])],
+          [#include <sys/types.h>
+           #include <sys/stat.h>])],
        [#include <sys/types.h>
-       #include <sys/stat.h>])],
+        #include <sys/stat.h>])],
     [#include <sys/types.h>
      #include <sys/stat.h>])
 ])
@@ -76,10 +76,10 @@ AC_DEFUN([gl_STAT_BIRTHTIME],
   AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec], [],
     [AC_CHECK_MEMBERS([struct stat.st_birthtimensec], [],
       [AC_CHECK_MEMBERS([struct stat.st_birthtim.tv_nsec], [], [],
-        [#include <sys/types.h>
-         #include <sys/stat.h>])],
+         [#include <sys/types.h>
+          #include <sys/stat.h>])],
        [#include <sys/types.h>
-       #include <sys/stat.h>])],
+        #include <sys/stat.h>])],
     [#include <sys/types.h>
      #include <sys/stat.h>])
 ])
diff --git a/m4/stat.m4 b/m4/stat.m4
new file mode 100644 (file)
index 0000000..acd32d8
--- /dev/null
@@ -0,0 +1,63 @@
+# serial 4
+
+# Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_STAT],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_REQUIRE([gl_AC_DOS])
+  AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+  AC_CHECK_FUNCS_ONCE([lstat])
+  dnl mingw is the only known platform where stat(".") and stat("./") differ
+  AC_CACHE_CHECK([whether stat handles trailing slashes on directories],
+      [gl_cv_func_stat_dir_slash],
+      [AC_RUN_IFELSE(
+         [AC_LANG_PROGRAM(
+           [[#include <sys/stat.h>
+]], [[struct stat st; return stat (".", &st) != stat ("./", &st);]])],
+         [gl_cv_func_stat_dir_slash=yes], [gl_cv_func_stat_dir_slash=no],
+         [case $host_os in
+            mingw*) gl_cv_func_stat_dir_slash="guessing no";;
+            *) gl_cv_func_stat_dir_slash="guessing yes";;
+          esac])])
+  dnl Solaris 9 mistakenly succeeds on stat("file/")
+  dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/")
+  AC_CACHE_CHECK([whether stat handles trailing slashes on files],
+      [gl_cv_func_stat_file_slash],
+      [touch conftest.tmp
+       # Assume that if we have lstat, we can also check symlinks.
+       if test $ac_cv_func_lstat = yes; then
+         ln -s conftest.tmp conftest.lnk
+       fi
+       AC_RUN_IFELSE(
+         [AC_LANG_PROGRAM(
+           [[#include <sys/stat.h>
+]], [[struct stat st;
+      if (!stat ("conftest.tmp/", &st)) return 1;
+#if HAVE_LSTAT
+      if (!stat ("conftest.lnk/", &st)) return 2;
+#endif
+           ]])],
+         [gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no],
+         [gl_cv_func_stat_file_slash="guessing no"])
+       rm -f conftest.tmp conftest.lnk])
+  case $gl_cv_func_stat_dir_slash in
+    *no) REPLACE_STAT=1
+      AC_DEFINE([REPLACE_FUNC_STAT_DIR], [1], [Define to 1 if stat needs
+        help when passed a directory name with a trailing slash]);;
+  esac
+  case $gl_cv_func_stat_file_slash in
+    *no) REPLACE_STAT=1
+      AC_DEFINE([REPLACE_FUNC_STAT_FILE], [1], [Define to 1 if stat needs
+        help when passed a file name with a trailing slash]);;
+  esac
+  if test $REPLACE_STAT = 1; then
+    AC_LIBOBJ([stat])
+    dnl Prerequisites of lib/stat.c.
+    AC_REQUIRE([AC_C_INLINE])
+  fi
+])
index 21910e4becd9fc84edc7be592bc9e25e70fb13c3..5c87bd8b5f6da4b6b64bb94f68fc61f8c2956e9d 100644 (file)
@@ -1,5 +1,5 @@
-# stdarg.m4 serial 2
-dnl Copyright (C) 2006, 2008 Free Software Foundation, Inc.
+# stdarg.m4 serial 3
+dnl Copyright (C) 2006, 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -46,7 +46,7 @@ void (*func) (va_list, va_list) = va_copy;
     else
       dnl Provide a substitute in <config.h>, either __va_copy or as a simple
       dnl assignment.
-      AC_CACHE_VAL([gl_cv_func___va_copy], [
+      gl_CACHE_VAL_SILENT([gl_cv_func___va_copy], [
         AC_TRY_COMPILE([#include <stdarg.h>], [
 #ifndef __va_copy
 error, bail out
index 57c804a80ff7da006714ce54b11da37c58557faa..3d672d7476b217bdc8777d6759f1f3bc5c53343d 100644 (file)
@@ -1,6 +1,6 @@
 # Check for stdbool.h that conforms to C99.
 
-dnl Copyright (C) 2002-2006, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -38,77 +38,77 @@ AC_DEFUN([AC_HEADER_STDBOOL],
   [AC_CACHE_CHECK([for stdbool.h that conforms to C99],
      [ac_cv_header_stdbool_h],
      [AC_TRY_COMPILE(
-       [
-         #include <stdbool.h>
-         #ifndef bool
-          "error: bool is not defined"
-         #endif
-         #ifndef false
-          "error: false is not defined"
-         #endif
-         #if false
-          "error: false is not 0"
-         #endif
-         #ifndef true
-          "error: true is not defined"
-         #endif
-         #if true != 1
-          "error: true is not 1"
-         #endif
-         #ifndef __bool_true_false_are_defined
-          "error: __bool_true_false_are_defined is not defined"
-         #endif
+        [
+          #include <stdbool.h>
+          #ifndef bool
+           "error: bool is not defined"
+          #endif
+          #ifndef false
+           "error: false is not defined"
+          #endif
+          #if false
+           "error: false is not 0"
+          #endif
+          #ifndef true
+           "error: true is not defined"
+          #endif
+          #if true != 1
+           "error: true is not 1"
+          #endif
+          #ifndef __bool_true_false_are_defined
+           "error: __bool_true_false_are_defined is not defined"
+          #endif
 
-         struct s { _Bool s: 1; _Bool t; } s;
+          struct s { _Bool s: 1; _Bool t; } s;
 
-         char a[true == 1 ? 1 : -1];
-         char b[false == 0 ? 1 : -1];
-         char c[__bool_true_false_are_defined == 1 ? 1 : -1];
-         char d[(bool) 0.5 == true ? 1 : -1];
-         bool e = &s;
-         char f[(_Bool) 0.0 == false ? 1 : -1];
-         char g[true];
-         char h[sizeof (_Bool)];
-         char i[sizeof s.t];
-         enum { j = false, k = true, l = false * true, m = true * 256 };
-         _Bool n[m];
-         char o[sizeof n == m * sizeof n[0] ? 1 : -1];
-         char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
-         #if defined __xlc__ || defined __GNUC__
-          /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
-             reported by James Lemley on 2005-10-05; see
-             http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
-             This test is not quite right, since xlc is allowed to
-             reject this program, as the initializer for xlcbug is
-             not one of the forms that C requires support for.
-             However, doing the test right would require a run-time
-             test, and that would make cross-compilation harder.
-             Let us hope that IBM fixes the xlc bug, and also adds
-             support for this kind of constant expression.  In the
-             meantime, this test will reject xlc, which is OK, since
-             our stdbool.h substitute should suffice.  We also test
-             this with GCC, where it should work, to detect more
-             quickly whether someone messes up the test in the
-             future.  */
-          char digs[] = "0123456789";
-          int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
-         #endif
-         /* Catch a bug in an HP-UX C compiler.  See
-            http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
-            http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
-          */
-         _Bool q = true;
-         _Bool *pq = &q;
-       ],
-       [
-         *pq |= q;
-         *pq |= ! q;
-         /* Refer to every declared value, to avoid compiler optimizations.  */
-         return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
-                 + !m + !n + !o + !p + !q + !pq);
-       ],
-       [ac_cv_header_stdbool_h=yes],
-       [ac_cv_header_stdbool_h=no])])
+          char a[true == 1 ? 1 : -1];
+          char b[false == 0 ? 1 : -1];
+          char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+          char d[(bool) 0.5 == true ? 1 : -1];
+          bool e = &s;
+          char f[(_Bool) 0.0 == false ? 1 : -1];
+          char g[true];
+          char h[sizeof (_Bool)];
+          char i[sizeof s.t];
+          enum { j = false, k = true, l = false * true, m = true * 256 };
+          _Bool n[m];
+          char o[sizeof n == m * sizeof n[0] ? 1 : -1];
+          char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
+          #if defined __xlc__ || defined __GNUC__
+           /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
+              reported by James Lemley on 2005-10-05; see
+              http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
+              This test is not quite right, since xlc is allowed to
+              reject this program, as the initializer for xlcbug is
+              not one of the forms that C requires support for.
+              However, doing the test right would require a run-time
+              test, and that would make cross-compilation harder.
+              Let us hope that IBM fixes the xlc bug, and also adds
+              support for this kind of constant expression.  In the
+              meantime, this test will reject xlc, which is OK, since
+              our stdbool.h substitute should suffice.  We also test
+              this with GCC, where it should work, to detect more
+              quickly whether someone messes up the test in the
+              future.  */
+           char digs[] = "0123456789";
+           int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
+          #endif
+          /* Catch a bug in an HP-UX C compiler.  See
+             http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+             http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+           */
+          _Bool q = true;
+          _Bool *pq = &q;
+        ],
+        [
+          *pq |= q;
+          *pq |= ! q;
+          /* Refer to every declared value, to avoid compiler optimizations.  */
+          return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
+                  + !m + !n + !o + !p + !q + !pq);
+        ],
+        [ac_cv_header_stdbool_h=yes],
+        [ac_cv_header_stdbool_h=no])])
    AC_CHECK_TYPES([_Bool])
    if test $ac_cv_header_stdbool_h = yes; then
      AC_DEFINE([HAVE_STDBOOL_H], [1], [Define to 1 if stdbool.h conforms to C99.])
diff --git a/m4/stddef_h.m4 b/m4/stddef_h.m4
new file mode 100644 (file)
index 0000000..c8572de
--- /dev/null
@@ -0,0 +1,45 @@
+dnl A placeholder for POSIX 2008 <stddef.h>, for platforms that have issues.
+# stddef_h.m4 serial 1
+dnl Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_STDDEF_H],
+[
+  AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
+  AC_REQUIRE([gt_TYPE_WCHAR_T])
+  if test $gt_cv_c_wchar_t = no; then
+    HAVE_WCHAR_T=0
+    STDDEF_H=stddef.h
+  fi
+  AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions],
+    [gl_cv_decl_null_works],
+    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stddef.h>
+      int test[2 * (sizeof NULL == sizeof (void *)) -1];
+]])],
+      [gl_cv_decl_null_works=yes],
+      [gl_cv_decl_null_works=no])])
+  if test $gl_cv_decl_null_works = no; then
+    REPLACE_NULL=1
+    STDDEF_H=stddef.h
+  fi
+  if test -n "$STDDEF_H"; then
+    gl_CHECK_NEXT_HEADERS([stddef.h])
+  fi
+])
+
+AC_DEFUN([gl_STDDEF_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
+  GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
+])
+
+AC_DEFUN([gl_STDDEF_H_DEFAULTS],
+[
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  REPLACE_NULL=0;                AC_SUBST([REPLACE_NULL])
+  HAVE_WCHAR_T=1;                AC_SUBST([HAVE_WCHAR_T])
+  STDDEF_H='';                   AC_SUBST([STDDEF_H])
+])
index b4194c8adc129667a648e882d2381a8b971a9dd6..1cc57e6e9608a820725378eb081e253c6e35806f 100644 (file)
@@ -1,5 +1,5 @@
-# stdint.m4 serial 33
-dnl Copyright (C) 2001-2009 Free Software Foundation, Inc.
+# stdint.m4 serial 34
+dnl Copyright (C) 2001-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -201,7 +201,75 @@ struct s {
   int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
 };
          ]])],
-         [gl_cv_header_working_stdint_h=yes])])
+         [dnl Determine whether the various *_MIN, *_MAX macros are usable
+          dnl in preprocessor expression. We could do it by compiling a test
+          dnl program for each of these macros. It is faster to run a program
+          dnl that inspects the macro expansion.
+          dnl This detects a bug on HP-UX 11.23/ia64.
+          AC_RUN_IFELSE([
+            AC_LANG_PROGRAM([[
+#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
+#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+]
+gl_STDINT_INCLUDES
+[
+#include <stdio.h>
+#include <string.h>
+#define MVAL(macro) MVAL1(macro)
+#define MVAL1(expression) #expression
+static const char *macro_values[] =
+  {
+#ifdef INT8_MAX
+    MVAL (INT8_MAX),
+#endif
+#ifdef INT16_MAX
+    MVAL (INT16_MAX),
+#endif
+#ifdef INT32_MAX
+    MVAL (INT32_MAX),
+#endif
+#ifdef INT64_MAX
+    MVAL (INT64_MAX),
+#endif
+#ifdef UINT8_MAX
+    MVAL (UINT8_MAX),
+#endif
+#ifdef UINT16_MAX
+    MVAL (UINT16_MAX),
+#endif
+#ifdef UINT32_MAX
+    MVAL (UINT32_MAX),
+#endif
+#ifdef UINT64_MAX
+    MVAL (UINT64_MAX),
+#endif
+    NULL
+  };
+]], [[
+  const char **mv;
+  for (mv = macro_values; *mv != NULL; mv++)
+    {
+      const char *value = *mv;
+      /* Test whether it looks like a cast expression.  */
+      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
+          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
+          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
+          || strncmp (value, "((int)"/*)*/, 6) == 0
+          || strncmp (value, "((signed short)"/*)*/, 15) == 0
+          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
+        return 1;
+    }
+  return 0;
+]])],
+              [gl_cv_header_working_stdint_h=yes],
+              [],
+              [dnl When cross-compiling, assume it works.
+               gl_cv_header_working_stdint_h=yes
+              ])
+         ])
+      ])
   fi
   if test "$gl_cv_header_working_stdint_h" = yes; then
     STDINT_H=
@@ -328,12 +396,12 @@ AC_DEFUN([gl_INTEGER_TYPE_SUFFIX],
        for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
          case $glsuf in
            '')  gltype1='int';;
-           l)  gltype1='long int';;
-           ll) gltype1='long long int';;
-           i64)        gltype1='__int64';;
-           u)  gltype1='unsigned int';;
-           ul) gltype1='unsigned long int';;
-           ull)        gltype1='unsigned long long int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
            ui64)gltype1='unsigned __int64';;
          esac
          AC_COMPILE_IFELSE(
index 82f0c244c8ee0c7a34de7b75fead88478e5bd08e..b8e3c6cc711f17ab409131b9411ea51fe23d8d01 100644 (file)
@@ -1,5 +1,5 @@
 # stdint_h.m4 serial 8
-dnl Copyright (C) 1997-2004, 2006, 2008, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 1997-2004, 2006, 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 846b65d302cbe5197c136ab96f019c88f6392d00..681fd8b8506db3e0757aa4cddc42ec1104f6c077 100644 (file)
@@ -1,5 +1,5 @@
-# stdio_h.m4 serial 15
-dnl Copyright (C) 2007-2009 Free Software Foundation, Inc.
+# stdio_h.m4 serial 26
+dnl Copyright (C) 2007-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -7,6 +7,7 @@ dnl with or without modifications, as long as this notice is preserved.
 AC_DEFUN([gl_STDIO_H],
 [
   AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  AC_REQUIRE([AC_C_INLINE])
   gl_CHECK_NEXT_HEADERS([stdio.h])
   dnl No need to create extra modules for these functions. Everyone who uses
   dnl <stdio.h> likely needs them.
@@ -30,6 +31,13 @@ AC_DEFUN([gl_STDIO_H],
       AC_LIBOBJ([stdio-write])
     fi
   ])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use, and which is not
+  dnl guaranteed by C89.
+  gl_WARN_ON_USE_PREPARE([[#include <stdio.h>
+    ]], [dprintf fpurge fseeko ftello getdelim getline popen renameat
+    snprintf vdprintf vsnprintf])
 ])
 
 AC_DEFUN([gl_STDIO_MODULE_INDICATOR],
@@ -37,79 +45,92 @@ AC_DEFUN([gl_STDIO_MODULE_INDICATOR],
   dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
   AC_REQUIRE([gl_STDIO_H_DEFAULTS])
   GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR([$1])
 ])
 
 AC_DEFUN([gl_STDIO_H_DEFAULTS],
 [
-  GNULIB_FPRINTF=0;              AC_SUBST([GNULIB_FPRINTF])
-  GNULIB_FPRINTF_POSIX=0;        AC_SUBST([GNULIB_FPRINTF_POSIX])
-  GNULIB_PRINTF=0;               AC_SUBST([GNULIB_PRINTF])
-  GNULIB_PRINTF_POSIX=0;         AC_SUBST([GNULIB_PRINTF_POSIX])
-  GNULIB_SNPRINTF=0;             AC_SUBST([GNULIB_SNPRINTF])
-  GNULIB_SPRINTF_POSIX=0;        AC_SUBST([GNULIB_SPRINTF_POSIX])
-  GNULIB_VFPRINTF=0;             AC_SUBST([GNULIB_VFPRINTF])
-  GNULIB_VFPRINTF_POSIX=0;       AC_SUBST([GNULIB_VFPRINTF_POSIX])
-  GNULIB_VPRINTF=0;              AC_SUBST([GNULIB_VPRINTF])
-  GNULIB_VPRINTF_POSIX=0;        AC_SUBST([GNULIB_VPRINTF_POSIX])
-  GNULIB_VSNPRINTF=0;            AC_SUBST([GNULIB_VSNPRINTF])
-  GNULIB_VSPRINTF_POSIX=0;       AC_SUBST([GNULIB_VSPRINTF_POSIX])
   GNULIB_DPRINTF=0;              AC_SUBST([GNULIB_DPRINTF])
-  GNULIB_VDPRINTF=0;             AC_SUBST([GNULIB_VDPRINTF])
-  GNULIB_VASPRINTF=0;            AC_SUBST([GNULIB_VASPRINTF])
-  GNULIB_OBSTACK_PRINTF=0;       AC_SUBST([GNULIB_OBSTACK_PRINTF])
-  GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX])
+  GNULIB_FCLOSE=0;               AC_SUBST([GNULIB_FCLOSE])
+  GNULIB_FFLUSH=0;               AC_SUBST([GNULIB_FFLUSH])
   GNULIB_FOPEN=0;                AC_SUBST([GNULIB_FOPEN])
+  GNULIB_FPRINTF=0;              AC_SUBST([GNULIB_FPRINTF])
+  GNULIB_FPRINTF_POSIX=0;        AC_SUBST([GNULIB_FPRINTF_POSIX])
+  GNULIB_FPURGE=0;               AC_SUBST([GNULIB_FPURGE])
+  GNULIB_FPUTC=0;                AC_SUBST([GNULIB_FPUTC])
+  GNULIB_FPUTS=0;                AC_SUBST([GNULIB_FPUTS])
   GNULIB_FREOPEN=0;              AC_SUBST([GNULIB_FREOPEN])
   GNULIB_FSEEK=0;                AC_SUBST([GNULIB_FSEEK])
   GNULIB_FSEEKO=0;               AC_SUBST([GNULIB_FSEEKO])
   GNULIB_FTELL=0;                AC_SUBST([GNULIB_FTELL])
   GNULIB_FTELLO=0;               AC_SUBST([GNULIB_FTELLO])
-  GNULIB_FFLUSH=0;               AC_SUBST([GNULIB_FFLUSH])
-  GNULIB_FCLOSE=0;               AC_SUBST([GNULIB_FCLOSE])
-  GNULIB_FPUTC=0;                AC_SUBST([GNULIB_FPUTC])
-  GNULIB_PUTC=0;                 AC_SUBST([GNULIB_PUTC])
-  GNULIB_PUTCHAR=0;              AC_SUBST([GNULIB_PUTCHAR])
-  GNULIB_FPUTS=0;                AC_SUBST([GNULIB_FPUTS])
-  GNULIB_PUTS=0;                 AC_SUBST([GNULIB_PUTS])
   GNULIB_FWRITE=0;               AC_SUBST([GNULIB_FWRITE])
   GNULIB_GETDELIM=0;             AC_SUBST([GNULIB_GETDELIM])
   GNULIB_GETLINE=0;              AC_SUBST([GNULIB_GETLINE])
+  GNULIB_OBSTACK_PRINTF=0;       AC_SUBST([GNULIB_OBSTACK_PRINTF])
+  GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX])
   GNULIB_PERROR=0;               AC_SUBST([GNULIB_PERROR])
+  GNULIB_POPEN=0;                AC_SUBST([GNULIB_POPEN])
+  GNULIB_PRINTF=0;               AC_SUBST([GNULIB_PRINTF])
+  GNULIB_PRINTF_POSIX=0;         AC_SUBST([GNULIB_PRINTF_POSIX])
+  GNULIB_PUTC=0;                 AC_SUBST([GNULIB_PUTC])
+  GNULIB_PUTCHAR=0;              AC_SUBST([GNULIB_PUTCHAR])
+  GNULIB_PUTS=0;                 AC_SUBST([GNULIB_PUTS])
+  GNULIB_REMOVE=0;               AC_SUBST([GNULIB_REMOVE])
+  GNULIB_RENAME=0;               AC_SUBST([GNULIB_RENAME])
+  GNULIB_RENAMEAT=0;             AC_SUBST([GNULIB_RENAMEAT])
+  GNULIB_SNPRINTF=0;             AC_SUBST([GNULIB_SNPRINTF])
+  GNULIB_SPRINTF_POSIX=0;        AC_SUBST([GNULIB_SPRINTF_POSIX])
   GNULIB_STDIO_H_SIGPIPE=0;      AC_SUBST([GNULIB_STDIO_H_SIGPIPE])
+  GNULIB_VASPRINTF=0;            AC_SUBST([GNULIB_VASPRINTF])
+  GNULIB_VDPRINTF=0;             AC_SUBST([GNULIB_VDPRINTF])
+  GNULIB_VFPRINTF=0;             AC_SUBST([GNULIB_VFPRINTF])
+  GNULIB_VFPRINTF_POSIX=0;       AC_SUBST([GNULIB_VFPRINTF_POSIX])
+  GNULIB_VPRINTF=0;              AC_SUBST([GNULIB_VPRINTF])
+  GNULIB_VPRINTF_POSIX=0;        AC_SUBST([GNULIB_VPRINTF_POSIX])
+  GNULIB_VSNPRINTF=0;            AC_SUBST([GNULIB_VSNPRINTF])
+  GNULIB_VSPRINTF_POSIX=0;       AC_SUBST([GNULIB_VSPRINTF_POSIX])
   dnl Assume proper GNU behavior unless another module says otherwise.
-  REPLACE_STDIO_WRITE_FUNCS=0;   AC_SUBST([REPLACE_STDIO_WRITE_FUNCS])
-  REPLACE_FPRINTF=0;             AC_SUBST([REPLACE_FPRINTF])
-  REPLACE_VFPRINTF=0;            AC_SUBST([REPLACE_VFPRINTF])
-  REPLACE_PRINTF=0;              AC_SUBST([REPLACE_PRINTF])
-  REPLACE_VPRINTF=0;             AC_SUBST([REPLACE_VPRINTF])
-  REPLACE_SNPRINTF=0;            AC_SUBST([REPLACE_SNPRINTF])
+  HAVE_DECL_FPURGE=1;            AC_SUBST([HAVE_DECL_FPURGE])
+  HAVE_DECL_GETDELIM=1;          AC_SUBST([HAVE_DECL_GETDELIM])
+  HAVE_DECL_GETLINE=1;           AC_SUBST([HAVE_DECL_GETLINE])
+  HAVE_DECL_OBSTACK_PRINTF=1;    AC_SUBST([HAVE_DECL_OBSTACK_PRINTF])
   HAVE_DECL_SNPRINTF=1;          AC_SUBST([HAVE_DECL_SNPRINTF])
-  REPLACE_VSNPRINTF=0;           AC_SUBST([REPLACE_VSNPRINTF])
   HAVE_DECL_VSNPRINTF=1;         AC_SUBST([HAVE_DECL_VSNPRINTF])
-  REPLACE_SPRINTF=0;             AC_SUBST([REPLACE_SPRINTF])
-  REPLACE_VSPRINTF=0;            AC_SUBST([REPLACE_VSPRINTF])
   HAVE_DPRINTF=1;                AC_SUBST([HAVE_DPRINTF])
-  REPLACE_DPRINTF=0;             AC_SUBST([REPLACE_DPRINTF])
-  HAVE_VDPRINTF=1;               AC_SUBST([HAVE_VDPRINTF])
-  REPLACE_VDPRINTF=0;            AC_SUBST([REPLACE_VDPRINTF])
+  HAVE_RENAMEAT=1;               AC_SUBST([HAVE_RENAMEAT])
   HAVE_VASPRINTF=1;              AC_SUBST([HAVE_VASPRINTF])
-  REPLACE_VASPRINTF=0;           AC_SUBST([REPLACE_VASPRINTF])
-  HAVE_DECL_OBSTACK_PRINTF=1;    AC_SUBST([HAVE_DECL_OBSTACK_PRINTF])
-  REPLACE_OBSTACK_PRINTF=0;      AC_SUBST([REPLACE_OBSTACK_PRINTF])
+  HAVE_VDPRINTF=1;               AC_SUBST([HAVE_VDPRINTF])
+  REPLACE_DPRINTF=0;             AC_SUBST([REPLACE_DPRINTF])
+  REPLACE_FCLOSE=0;              AC_SUBST([REPLACE_FCLOSE])
+  REPLACE_FFLUSH=0;              AC_SUBST([REPLACE_FFLUSH])
   REPLACE_FOPEN=0;               AC_SUBST([REPLACE_FOPEN])
+  REPLACE_FPRINTF=0;             AC_SUBST([REPLACE_FPRINTF])
+  REPLACE_FPURGE=0;              AC_SUBST([REPLACE_FPURGE])
   REPLACE_FREOPEN=0;             AC_SUBST([REPLACE_FREOPEN])
-  HAVE_FSEEKO=1;                 AC_SUBST([HAVE_FSEEKO])
-  REPLACE_FSEEKO=0;              AC_SUBST([REPLACE_FSEEKO])
   REPLACE_FSEEK=0;               AC_SUBST([REPLACE_FSEEK])
-  HAVE_FTELLO=1;                 AC_SUBST([HAVE_FTELLO])
-  REPLACE_FTELLO=0;              AC_SUBST([REPLACE_FTELLO])
+  REPLACE_FSEEKO=0;              AC_SUBST([REPLACE_FSEEKO])
   REPLACE_FTELL=0;               AC_SUBST([REPLACE_FTELL])
-  REPLACE_FFLUSH=0;              AC_SUBST([REPLACE_FFLUSH])
-  REPLACE_FCLOSE=0;              AC_SUBST([REPLACE_FCLOSE])
-  HAVE_DECL_GETDELIM=1;          AC_SUBST([HAVE_DECL_GETDELIM])
-  HAVE_DECL_GETLINE=1;           AC_SUBST([HAVE_DECL_GETLINE])
+  REPLACE_FTELLO=0;              AC_SUBST([REPLACE_FTELLO])
+  REPLACE_GETDELIM=0;            AC_SUBST([REPLACE_GETDELIM])
   REPLACE_GETLINE=0;             AC_SUBST([REPLACE_GETLINE])
+  REPLACE_OBSTACK_PRINTF=0;      AC_SUBST([REPLACE_OBSTACK_PRINTF])
   REPLACE_PERROR=0;              AC_SUBST([REPLACE_PERROR])
+  REPLACE_POPEN=0;               AC_SUBST([REPLACE_POPEN])
+  REPLACE_PRINTF=0;              AC_SUBST([REPLACE_PRINTF])
+  REPLACE_REMOVE=0;              AC_SUBST([REPLACE_REMOVE])
+  REPLACE_RENAME=0;              AC_SUBST([REPLACE_RENAME])
+  REPLACE_RENAMEAT=0;            AC_SUBST([REPLACE_RENAMEAT])
+  REPLACE_SNPRINTF=0;            AC_SUBST([REPLACE_SNPRINTF])
+  REPLACE_SPRINTF=0;             AC_SUBST([REPLACE_SPRINTF])
+  REPLACE_STDIO_WRITE_FUNCS=0;   AC_SUBST([REPLACE_STDIO_WRITE_FUNCS])
+  REPLACE_VASPRINTF=0;           AC_SUBST([REPLACE_VASPRINTF])
+  REPLACE_VDPRINTF=0;            AC_SUBST([REPLACE_VDPRINTF])
+  REPLACE_VFPRINTF=0;            AC_SUBST([REPLACE_VFPRINTF])
+  REPLACE_VPRINTF=0;             AC_SUBST([REPLACE_VPRINTF])
+  REPLACE_VSNPRINTF=0;           AC_SUBST([REPLACE_VSNPRINTF])
+  REPLACE_VSPRINTF=0;            AC_SUBST([REPLACE_VSPRINTF])
 ])
 
 dnl Code shared by fseeko and ftello.  Determine if large files are supported,
@@ -128,6 +149,6 @@ AC_DEFUN([gl_STDIN_LARGE_OFFSET],
   choke me
 # endif
 #endif]])],
-       [gl_cv_var_stdin_large_offset=yes],
-       [gl_cv_var_stdin_large_offset=no])])
+        [gl_cv_var_stdin_large_offset=yes],
+        [gl_cv_var_stdin_large_offset=no])])
 ])
index 515befeb7e962adf71c50171bf854d0a3402ca1e..77344bda860c4d50ebfc1db5687c27384b354e5a 100644 (file)
@@ -1,5 +1,5 @@
-# stdlib_h.m4 serial 14
-dnl Copyright (C) 2007-2009 Free Software Foundation, Inc.
+# stdlib_h.m4 serial 23
+dnl Copyright (C) 2007-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -8,7 +8,7 @@ AC_DEFUN([gl_STDLIB_H],
 [
   AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
   gl_CHECK_NEXT_HEADERS([stdlib.h])
-  AC_CHECK_HEADERS([random.h])
+  AC_CHECK_HEADERS([random.h], [], [], [AC_INCLUDES_DEFAULT])
   if test $ac_cv_header_random_h = yes; then
     HAVE_RANDOM_H=1
   else
@@ -22,6 +22,20 @@ AC_DEFUN([gl_STDLIB_H],
       # include <random.h>
       #endif
     ]])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use, and which is not
+  dnl guaranteed by C89.
+  gl_WARN_ON_USE_PREPARE([[#include <stdlib.h>
+#if HAVE_SYS_LOADAVG_H
+# include <sys/loadavg.h>
+#endif
+#if HAVE_RANDOM_H
+# include <random.h>
+#endif
+    ]], [atoll canonicalize_file_name getloadavg getsubopt mkdtemp
+    mkostemp mkostemps mkstemp mkstemps random_r initstat_r srandom_r
+    setstate_r realpath rpmatch setenv strtod strtoll strtoull unsetenv])
 ])
 
 AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
@@ -29,20 +43,27 @@ AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
   dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
   AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
   GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR([$1])
 ])
 
 AC_DEFUN([gl_STDLIB_H_DEFAULTS],
 [
-  GNULIB_MALLOC_POSIX=0;  AC_SUBST([GNULIB_MALLOC_POSIX])
-  GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX])
-  GNULIB_CALLOC_POSIX=0;  AC_SUBST([GNULIB_CALLOC_POSIX])
   GNULIB_ATOLL=0;         AC_SUBST([GNULIB_ATOLL])
+  GNULIB_CALLOC_POSIX=0;  AC_SUBST([GNULIB_CALLOC_POSIX])
+  GNULIB_CANONICALIZE_FILE_NAME=0;  AC_SUBST([GNULIB_CANONICALIZE_FILE_NAME])
   GNULIB_GETLOADAVG=0;    AC_SUBST([GNULIB_GETLOADAVG])
   GNULIB_GETSUBOPT=0;     AC_SUBST([GNULIB_GETSUBOPT])
+  GNULIB_MALLOC_POSIX=0;  AC_SUBST([GNULIB_MALLOC_POSIX])
   GNULIB_MKDTEMP=0;       AC_SUBST([GNULIB_MKDTEMP])
+  GNULIB_MKOSTEMP=0;      AC_SUBST([GNULIB_MKOSTEMP])
+  GNULIB_MKOSTEMPS=0;     AC_SUBST([GNULIB_MKOSTEMPS])
   GNULIB_MKSTEMP=0;       AC_SUBST([GNULIB_MKSTEMP])
+  GNULIB_MKSTEMPS=0;      AC_SUBST([GNULIB_MKSTEMPS])
   GNULIB_PUTENV=0;        AC_SUBST([GNULIB_PUTENV])
   GNULIB_RANDOM_R=0;      AC_SUBST([GNULIB_RANDOM_R])
+  GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX])
+  GNULIB_REALPATH=0;      AC_SUBST([GNULIB_REALPATH])
   GNULIB_RPMATCH=0;       AC_SUBST([GNULIB_RPMATCH])
   GNULIB_SETENV=0;        AC_SUBST([GNULIB_SETENV])
   GNULIB_STRTOD=0;        AC_SUBST([GNULIB_STRTOD])
@@ -52,11 +73,17 @@ AC_DEFUN([gl_STDLIB_H_DEFAULTS],
   dnl Assume proper GNU behavior unless another module says otherwise.
   HAVE_ATOLL=1;              AC_SUBST([HAVE_ATOLL])
   HAVE_CALLOC_POSIX=1;       AC_SUBST([HAVE_CALLOC_POSIX])
+  HAVE_CANONICALIZE_FILE_NAME=1;  AC_SUBST([HAVE_CANONICALIZE_FILE_NAME])
+  HAVE_DECL_GETLOADAVG=1;    AC_SUBST([HAVE_DECL_GETLOADAVG])
   HAVE_GETSUBOPT=1;          AC_SUBST([HAVE_GETSUBOPT])
   HAVE_MALLOC_POSIX=1;       AC_SUBST([HAVE_MALLOC_POSIX])
   HAVE_MKDTEMP=1;            AC_SUBST([HAVE_MKDTEMP])
-  HAVE_REALLOC_POSIX=1;      AC_SUBST([HAVE_REALLOC_POSIX])
+  HAVE_MKOSTEMP=1;           AC_SUBST([HAVE_MKOSTEMP])
+  HAVE_MKOSTEMPS=1;          AC_SUBST([HAVE_MKOSTEMPS])
+  HAVE_MKSTEMPS=1;           AC_SUBST([HAVE_MKSTEMPS])
   HAVE_RANDOM_R=1;           AC_SUBST([HAVE_RANDOM_R])
+  HAVE_REALLOC_POSIX=1;      AC_SUBST([HAVE_REALLOC_POSIX])
+  HAVE_REALPATH=1;           AC_SUBST([HAVE_REALPATH])
   HAVE_RPMATCH=1;            AC_SUBST([HAVE_RPMATCH])
   HAVE_SETENV=1;             AC_SUBST([HAVE_SETENV])
   HAVE_STRTOD=1;             AC_SUBST([HAVE_STRTOD])
@@ -65,9 +92,11 @@ AC_DEFUN([gl_STDLIB_H_DEFAULTS],
   HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA])
   HAVE_SYS_LOADAVG_H=0;      AC_SUBST([HAVE_SYS_LOADAVG_H])
   HAVE_UNSETENV=1;           AC_SUBST([HAVE_UNSETENV])
-  HAVE_DECL_GETLOADAVG=1;    AC_SUBST([HAVE_DECL_GETLOADAVG])
+  REPLACE_CANONICALIZE_FILE_NAME=0;  AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME])
   REPLACE_MKSTEMP=0;         AC_SUBST([REPLACE_MKSTEMP])
   REPLACE_PUTENV=0;          AC_SUBST([REPLACE_PUTENV])
+  REPLACE_REALPATH=0;        AC_SUBST([REPLACE_REALPATH])
+  REPLACE_SETENV=0;          AC_SUBST([REPLACE_SETENV])
   REPLACE_STRTOD=0;          AC_SUBST([REPLACE_STRTOD])
-  VOID_UNSETENV=0;           AC_SUBST([VOID_UNSETENV])
+  REPLACE_UNSETENV=0;        AC_SUBST([REPLACE_UNSETENV])
 ])
index 96de86795a9acee2f280dc0247fa75aae16d1c1d..d32d93a873471458bdd19a5ef43af47e10e9a690 100644 (file)
@@ -1,5 +1,5 @@
 # stpcpy.m4 serial 7
-dnl Copyright (C) 2002, 2007, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2007, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 0dfdb1a18148e7207f62d9be4593e3a8c3cc3e68..33de423a02e92cb6ee9ad029c46170fb8dc4908c 100644 (file)
@@ -1,5 +1,5 @@
 # strcase.m4 serial 10
-dnl Copyright (C) 2002, 2005-2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 7e270d065e33957b8eb05118ac5d312b47047cd1..0072e60e76446bbdb0a2c56b29493d788fb27c5d 100644 (file)
@@ -1,5 +1,5 @@
 # strchrnul.m4 serial 7
-dnl Copyright (C) 2003, 2007, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2007, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index d7daac2baba843d45890b04bb551a87a0195aaef..3a3b07dd5d290dcb6104336b455163b92f48c581 100644 (file)
@@ -1,6 +1,6 @@
 # strdup.m4 serial 11
 
-dnl Copyright (C) 2002-2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2010 Free Software Foundation, Inc.
 
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
index 8c16ca9a879a5de8720a7651cf15ee5b22033adf..1649b2451133f93bfcf2d2d725f17499e5a0a3da 100644 (file)
@@ -1,5 +1,5 @@
 # strerror.m4 serial 9
-dnl Copyright (C) 2002, 2007-2008 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2007-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 2d5553c37441e6a5e6c492c41aa3bccf31a863eb..a8a366c70292b76eddb90c5aca552c910508cbde 100644 (file)
@@ -1,11 +1,11 @@
 # Configure a GNU-like replacement for <string.h>.
 
-# Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+# Copyright (C) 2007-2010 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 6
+# serial 12
 
 # Written by Paul Eggert.
 
@@ -21,6 +21,13 @@ AC_DEFUN([gl_HEADER_STRING_H_BODY],
   AC_REQUIRE([AC_C_RESTRICT])
   AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
   gl_CHECK_NEXT_HEADERS([string.h])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use, and which is not
+  dnl guaranteed by C89.
+  gl_WARN_ON_USE_PREPARE([[#include <string.h>
+    ]], [memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup
+    strndup strnlen strpbrk strsep strcasestr strtok_r strsignal strverscmp])
 ])
 
 AC_DEFUN([gl_STRING_MODULE_INDICATOR],
@@ -28,10 +35,13 @@ AC_DEFUN([gl_STRING_MODULE_INDICATOR],
   dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
   AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
   GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR([$1])
 ])
 
 AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
 [
+  GNULIB_MEMCHR=0;      AC_SUBST([GNULIB_MEMCHR])
   GNULIB_MEMMEM=0;      AC_SUBST([GNULIB_MEMMEM])
   GNULIB_MEMPCPY=0;     AC_SUBST([GNULIB_MEMPCPY])
   GNULIB_MEMRCHR=0;     AC_SUBST([GNULIB_MEMRCHR])
@@ -63,30 +73,34 @@ AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
   GNULIB_MBSTOK_R=0;    AC_SUBST([GNULIB_MBSTOK_R])
   GNULIB_STRERROR=0;    AC_SUBST([GNULIB_STRERROR])
   GNULIB_STRSIGNAL=0;   AC_SUBST([GNULIB_STRSIGNAL])
-  GNULIB_STRVERSCMP=0;   AC_SUBST([GNULIB_STRVERSCMP])
+  GNULIB_STRVERSCMP=0;  AC_SUBST([GNULIB_STRVERSCMP])
+  HAVE_MBSLEN=0;        AC_SUBST([HAVE_MBSLEN])
   dnl Assume proper GNU behavior unless another module says otherwise.
-  HAVE_DECL_MEMMEM=1;          AC_SUBST([HAVE_DECL_MEMMEM])
-  HAVE_MEMPCPY=1;              AC_SUBST([HAVE_MEMPCPY])
-  HAVE_DECL_MEMRCHR=1;         AC_SUBST([HAVE_DECL_MEMRCHR])
-  HAVE_RAWMEMCHR=1;            AC_SUBST([HAVE_RAWMEMCHR])
-  HAVE_STPCPY=1;               AC_SUBST([HAVE_STPCPY])
-  HAVE_STPNCPY=1;              AC_SUBST([HAVE_STPNCPY])
-  HAVE_STRCHRNUL=1;            AC_SUBST([HAVE_STRCHRNUL])
-  HAVE_DECL_STRDUP=1;          AC_SUBST([HAVE_DECL_STRDUP])
-  HAVE_STRNDUP=1;              AC_SUBST([HAVE_STRNDUP])
-  HAVE_DECL_STRNDUP=1;         AC_SUBST([HAVE_DECL_STRNDUP])
-  HAVE_DECL_STRNLEN=1;         AC_SUBST([HAVE_DECL_STRNLEN])
-  HAVE_STRPBRK=1;              AC_SUBST([HAVE_STRPBRK])
-  HAVE_STRSEP=1;               AC_SUBST([HAVE_STRSEP])
-  HAVE_STRCASESTR=1;           AC_SUBST([HAVE_STRCASESTR])
-  HAVE_DECL_STRTOK_R=1;                AC_SUBST([HAVE_DECL_STRTOK_R])
-  HAVE_DECL_STRERROR=1;                AC_SUBST([HAVE_DECL_STRERROR])
-  HAVE_DECL_STRSIGNAL=1;       AC_SUBST([HAVE_DECL_STRSIGNAL])
-  HAVE_STRVERSCMP=1;           AC_SUBST([HAVE_STRVERSCMP])
-  REPLACE_MEMMEM=0;            AC_SUBST([REPLACE_MEMMEM])
-  REPLACE_STRDUP=0;            AC_SUBST([REPLACE_STRDUP])
-  REPLACE_STRSTR=0;            AC_SUBST([REPLACE_STRSTR])
-  REPLACE_STRCASESTR=0;                AC_SUBST([REPLACE_STRCASESTR])
-  REPLACE_STRERROR=0;          AC_SUBST([REPLACE_STRERROR])
-  REPLACE_STRSIGNAL=0;         AC_SUBST([REPLACE_STRSIGNAL])
+  HAVE_DECL_MEMMEM=1;           AC_SUBST([HAVE_DECL_MEMMEM])
+  HAVE_MEMPCPY=1;               AC_SUBST([HAVE_MEMPCPY])
+  HAVE_DECL_MEMRCHR=1;          AC_SUBST([HAVE_DECL_MEMRCHR])
+  HAVE_RAWMEMCHR=1;             AC_SUBST([HAVE_RAWMEMCHR])
+  HAVE_STPCPY=1;                AC_SUBST([HAVE_STPCPY])
+  HAVE_STPNCPY=1;               AC_SUBST([HAVE_STPNCPY])
+  HAVE_STRCHRNUL=1;             AC_SUBST([HAVE_STRCHRNUL])
+  HAVE_DECL_STRDUP=1;           AC_SUBST([HAVE_DECL_STRDUP])
+  HAVE_DECL_STRNDUP=1;          AC_SUBST([HAVE_DECL_STRNDUP])
+  HAVE_DECL_STRNLEN=1;          AC_SUBST([HAVE_DECL_STRNLEN])
+  HAVE_STRPBRK=1;               AC_SUBST([HAVE_STRPBRK])
+  HAVE_STRSEP=1;                AC_SUBST([HAVE_STRSEP])
+  HAVE_STRCASESTR=1;            AC_SUBST([HAVE_STRCASESTR])
+  HAVE_DECL_STRTOK_R=1;         AC_SUBST([HAVE_DECL_STRTOK_R])
+  HAVE_DECL_STRERROR=1;         AC_SUBST([HAVE_DECL_STRERROR])
+  HAVE_DECL_STRSIGNAL=1;        AC_SUBST([HAVE_DECL_STRSIGNAL])
+  HAVE_STRVERSCMP=1;            AC_SUBST([HAVE_STRVERSCMP])
+  REPLACE_MEMCHR=0;             AC_SUBST([REPLACE_MEMCHR])
+  REPLACE_MEMMEM=0;             AC_SUBST([REPLACE_MEMMEM])
+  REPLACE_STRDUP=0;             AC_SUBST([REPLACE_STRDUP])
+  REPLACE_STRSTR=0;             AC_SUBST([REPLACE_STRSTR])
+  REPLACE_STRCASESTR=0;         AC_SUBST([REPLACE_STRCASESTR])
+  REPLACE_STRERROR=0;           AC_SUBST([REPLACE_STRERROR])
+  REPLACE_STRNDUP=0;            AC_SUBST([REPLACE_STRNDUP])
+  REPLACE_STRSIGNAL=0;          AC_SUBST([REPLACE_STRSIGNAL])
+  REPLACE_STRTOK_R=0;           AC_SUBST([REPLACE_STRTOK_R])
+  UNDEFINE_STRTOK_R=0;          AC_SUBST([UNDEFINE_STRTOK_R])
 ])
index 03ac182f3315f173a9db52f291d6394799e0b953..26aa1f782ac1a1c775ca44277cbbfe6f03185491 100644 (file)
@@ -1,6 +1,7 @@
 # Configure a replacement for <string.h>.
+# serial 2
 
-# Copyright (C) 2007 Free Software Foundation, Inc.
+# Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -16,6 +17,11 @@ AC_DEFUN([gl_HEADER_STRINGS_H_BODY],
 [
   AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS])
   gl_CHECK_NEXT_HEADERS([strings.h])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[#include <strings.h>
+    ]], [strcasecmp strncasecmp])
 ])
 
 AC_DEFUN([gl_STRINGS_MODULE_INDICATOR],
index 4fa7d5a7c9356c170a8af76dce4ccfad95aacf7f..810313cd12478d9ba60c0f607093eadcdf20a004 100644 (file)
@@ -1,5 +1,5 @@
-# strndup.m4 serial 16
-dnl Copyright (C) 2002-2003, 2005-2009 Free Software Foundation, Inc.
+# strndup.m4 serial 17
+dnl Copyright (C) 2002-2003, 2005-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -9,17 +9,20 @@ AC_DEFUN([gl_FUNC_STRNDUP],
   dnl Persuade glibc <string.h> to declare strndup().
   AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
 
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
   AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
   AC_CHECK_DECLS_ONCE([strndup])
+  AC_CHECK_FUNCS_ONCE([strndup])
   if test $ac_cv_have_decl_strndup = no; then
     HAVE_DECL_STRNDUP=0
   fi
 
-  # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'.
-  AC_CACHE_CHECK([for working strndup], [gl_cv_func_strndup],
-    [AC_RUN_IFELSE([
-       AC_LANG_PROGRAM([[#include <string.h>
-                        #include <stdlib.h>]], [[
+  if test $ac_cv_func_strndup = yes; then
+    # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'.
+    AC_CACHE_CHECK([for working strndup], [gl_cv_func_strndup_works],
+      [AC_RUN_IFELSE([
+         AC_LANG_PROGRAM([[#include <string.h>
+                           #include <stdlib.h>]], [[
 #ifndef HAVE_DECL_STRNDUP
   extern char *strndup (const char *, size_t);
 #endif
@@ -28,26 +31,19 @@ AC_DEFUN([gl_FUNC_STRNDUP],
   free (s);
   s = strndup ("shorter string", 13);
   return s[13] != '\0';]])],
-       [gl_cv_func_strndup=yes],
-       [gl_cv_func_strndup=no],
-       [AC_CHECK_FUNC([strndup],
-          [AC_EGREP_CPP([too risky], [
-#ifdef _AIX
-               too risky
-#endif
-             ],
-             [gl_cv_func_strndup=no],
-             [gl_cv_func_strndup=yes])],
-          [gl_cv_func_strndup=no])])])
-  if test $gl_cv_func_strndup = yes; then
-    AC_DEFINE([HAVE_STRNDUP], [1],
-      [Define if you have the strndup() function and it works.])
+         [gl_cv_func_strndup_works=yes],
+         [gl_cv_func_strndup_works=no],
+         [case $host_os in
+            aix*) gl_cv_func_strndup_works="guessing no";;
+            *) gl_cv_func_strndup_works="guessing yes";;
+          esac])])
+    case $gl_cv_func_strndup_works in
+      *no)
+        REPLACE_STRNDUP=1
+        AC_LIBOBJ([strndup])
+        ;;
+    esac
   else
-    HAVE_STRNDUP=0
     AC_LIBOBJ([strndup])
-    gl_PREREQ_STRNDUP
   fi
 ])
-
-# Prerequisites of lib/strndup.c.
-AC_DEFUN([gl_PREREQ_STRNDUP], [:])
index 1c97859db1c25e9c5cf8a2d02c461ec38cb7243a..cd48948f68808f330642cc39e80734433704f421 100644 (file)
@@ -1,5 +1,6 @@
 # strnlen.m4 serial 10
-dnl Copyright (C) 2002-2003, 2005-2007, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2003, 2005-2007, 2009-2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 70b3ba418a23c1fbdb3ce64c475d4573de6d3367..8d8298b99321428da08576383c5d3a1a25c7b716 100644 (file)
@@ -1,5 +1,6 @@
 # strtoimax.m4 serial 7
-dnl Copyright (C) 2002, 2003, 2004, 2006, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2003, 2004, 2006, 2009, 2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 25c09fdd8606798d7d34075094129752a36e523c..2f27ce88c93c4fb4c8390498e8a44abbb7f15255 100644 (file)
@@ -1,5 +1,5 @@
 # strtol.m4 serial 5
-dnl Copyright (C) 2002, 2003, 2006, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2003, 2006, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 7879c6fcaf66faa43572ffa97397298598cd4648..065047a66b49e7119415caf98f648fc8ec6ff83b 100644 (file)
@@ -1,5 +1,6 @@
 # strtoll.m4 serial 6
-dnl Copyright (C) 2002, 2004, 2006, 2008, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2004, 2006, 2008, 2009, 2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index ca700062f3b88b69bf265daed9601b8cbec30775..5da011c596903492b0061d9bbfc7067f6de61d3e 100644 (file)
@@ -1,5 +1,5 @@
 # strtoul.m4 serial 4
-dnl Copyright (C) 2002, 2006, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2006, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 5075d95254543041d4b28a2e5f987ccb07a0a23f..e58e13666db48c2196fa5e8b63ab150600cbf4c0 100644 (file)
@@ -1,5 +1,6 @@
 # strtoull.m4 serial 6
-dnl Copyright (C) 2002, 2004, 2006, 2008, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2004, 2006, 2008, 2009, 2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 43236a03f106349c2eb2ef97832762615afa8d9b..684634f5d67434c4dc67ab9bf7cbc4499ee5dac4 100644 (file)
@@ -1,5 +1,6 @@
 # strtoumax.m4 serial 7
-dnl Copyright (C) 2002, 2003, 2004, 2006, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2003, 2004, 2006, 2009, 2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 20c82edf931d700ee16f6cca4b66ef74cb318be6..54d74caa91892f29b90d7021718658c0cfb6cc14 100644 (file)
@@ -1,26 +1,16 @@
-# sys_stat_h.m4 serial 10   -*- Autoconf -*-
-dnl Copyright (C) 2006-2008 Free Software Foundation, Inc.
+# sys_stat_h.m4 serial 23   -*- Autoconf -*-
+dnl Copyright (C) 2006-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 dnl From Eric Blake.
-dnl Test whether <sys/stat.h> contains lstat and mkdir or must be substituted.
+dnl Provide a GNU-like <sys/stat.h>.
 
 AC_DEFUN([gl_HEADER_SYS_STAT_H],
 [
   AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
 
-  dnl Check for lstat.  Systems that lack it (mingw) also lack symlinks, so
-  dnl stat is a good replacement.
-  AC_CHECK_FUNCS_ONCE([lstat])
-  if test $ac_cv_func_lstat = yes; then
-    HAVE_LSTAT=1
-  else
-    HAVE_LSTAT=0
-  fi
-  AC_SUBST([HAVE_LSTAT])
-
   dnl For the mkdir substitute.
   AC_REQUIRE([AC_C_INLINE])
 
@@ -28,8 +18,6 @@ AC_DEFUN([gl_HEADER_SYS_STAT_H],
   AC_REQUIRE([AC_HEADER_STAT])
 
   gl_CHECK_NEXT_HEADERS([sys/stat.h])
-  SYS_STAT_H='sys/stat.h'
-  AC_SUBST([SYS_STAT_H])
 
   dnl Define types that are supposed to be defined in <sys/types.h> or
   dnl <sys/stat.h>.
@@ -39,6 +27,11 @@ AC_DEFUN([gl_HEADER_SYS_STAT_H],
     [#include <sys/types.h>
      #include <sys/stat.h>])
 
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[#include <sys/stat.h>
+    ]], [fchmodat fstatat futimens lchmod lstat mkdirat mkfifo mkfifoat
+    mknod mknodat stat utimensat])
 ]) # gl_HEADER_SYS_STAT_H
 
 AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR],
@@ -46,14 +39,44 @@ AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR],
   dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
   AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
   GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR([$1])
 ])
 
 AC_DEFUN([gl_SYS_STAT_H_DEFAULTS],
 [
-  GNULIB_LCHMOD=0; AC_SUBST([GNULIB_LCHMOD])
-  GNULIB_LSTAT=0;  AC_SUBST([GNULIB_LSTAT])
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl for REPLACE_FCHDIR
+  GNULIB_FCHMODAT=0;    AC_SUBST([GNULIB_FCHMODAT])
+  GNULIB_FSTATAT=0;     AC_SUBST([GNULIB_FSTATAT])
+  GNULIB_FUTIMENS=0;    AC_SUBST([GNULIB_FUTIMENS])
+  GNULIB_LCHMOD=0;      AC_SUBST([GNULIB_LCHMOD])
+  GNULIB_LSTAT=0;       AC_SUBST([GNULIB_LSTAT])
+  GNULIB_MKDIRAT=0;     AC_SUBST([GNULIB_MKDIRAT])
+  GNULIB_MKFIFO=0;      AC_SUBST([GNULIB_MKFIFO])
+  GNULIB_MKFIFOAT=0;    AC_SUBST([GNULIB_MKFIFOAT])
+  GNULIB_MKNOD=0;       AC_SUBST([GNULIB_MKNOD])
+  GNULIB_MKNODAT=0;     AC_SUBST([GNULIB_MKNODAT])
+  GNULIB_STAT=0;        AC_SUBST([GNULIB_STAT])
+  GNULIB_UTIMENSAT=0;   AC_SUBST([GNULIB_UTIMENSAT])
   dnl Assume proper GNU behavior unless another module says otherwise.
-  HAVE_LCHMOD=1;   AC_SUBST([HAVE_LCHMOD])
-  REPLACE_LSTAT=0; AC_SUBST([REPLACE_LSTAT])
-  REPLACE_MKDIR=0; AC_SUBST([REPLACE_MKDIR])
+  HAVE_FCHMODAT=1;      AC_SUBST([HAVE_FCHMODAT])
+  HAVE_FSTATAT=1;       AC_SUBST([HAVE_FSTATAT])
+  HAVE_FUTIMENS=1;      AC_SUBST([HAVE_FUTIMENS])
+  HAVE_LCHMOD=1;        AC_SUBST([HAVE_LCHMOD])
+  HAVE_LSTAT=1;         AC_SUBST([HAVE_LSTAT])
+  HAVE_MKDIRAT=1;       AC_SUBST([HAVE_MKDIRAT])
+  HAVE_MKFIFO=1;        AC_SUBST([HAVE_MKFIFO])
+  HAVE_MKFIFOAT=1;      AC_SUBST([HAVE_MKFIFOAT])
+  HAVE_MKNOD=1;         AC_SUBST([HAVE_MKNOD])
+  HAVE_MKNODAT=1;       AC_SUBST([HAVE_MKNODAT])
+  HAVE_UTIMENSAT=1;     AC_SUBST([HAVE_UTIMENSAT])
+  REPLACE_FSTAT=0;      AC_SUBST([REPLACE_FSTAT])
+  REPLACE_FSTATAT=0;    AC_SUBST([REPLACE_FSTATAT])
+  REPLACE_FUTIMENS=0;   AC_SUBST([REPLACE_FUTIMENS])
+  REPLACE_LSTAT=0;      AC_SUBST([REPLACE_LSTAT])
+  REPLACE_MKDIR=0;      AC_SUBST([REPLACE_MKDIR])
+  REPLACE_MKFIFO=0;     AC_SUBST([REPLACE_MKFIFO])
+  REPLACE_MKNOD=0;      AC_SUBST([REPLACE_MKNOD])
+  REPLACE_STAT=0;       AC_SUBST([REPLACE_STAT])
+  REPLACE_UTIMENSAT=0;  AC_SUBST([REPLACE_UTIMENSAT])
 ])
index 13ac5763b3d5c76a26c6d5e5d0740f3b63f77cfb..2835a40c266639c6db1c75bda9513b1309676571 100644 (file)
@@ -1,6 +1,7 @@
 # Configure a replacement for <sys/time.h>.
+# serial 5
 
-# Copyright (C) 2007 Free Software Foundation, Inc.
+# Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -18,40 +19,54 @@ AC_DEFUN([gl_HEADER_SYS_TIME_H],
 AC_DEFUN([gl_HEADER_SYS_TIME_H_BODY],
 [
   AC_REQUIRE([AC_C_RESTRICT])
+  AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS])
+  AC_CHECK_HEADERS_ONCE([sys/time.h])
   gl_CHECK_NEXT_HEADERS([sys/time.h])
 
-  if test $ac_cv_header_sys_time_h = yes; then
-    HAVE_SYS_TIME_H=1
-  else
+  if test $ac_cv_header_sys_time_h != yes; then
     HAVE_SYS_TIME_H=0
   fi
-  AC_SUBST([HAVE_SYS_TIME_H])
 
   AC_CACHE_CHECK([for struct timeval], [gl_cv_sys_struct_timeval],
     [AC_COMPILE_IFELSE(
        [AC_LANG_PROGRAM(
-         [[#if HAVE_SYS_TIME_H
-            #include <sys/time.h>
-           #endif
-           #include <time.h>
-         ]],
-         [[static struct timeval x; x.tv_sec = x.tv_usec;]])],
+          [[#if HAVE_SYS_TIME_H
+             #include <sys/time.h>
+            #endif
+            #include <time.h>
+          ]],
+          [[static struct timeval x; x.tv_sec = x.tv_usec;]])],
        [gl_cv_sys_struct_timeval=yes],
        [gl_cv_sys_struct_timeval=no])])
-  if test $gl_cv_sys_struct_timeval = yes; then
-    HAVE_STRUCT_TIMEVAL=1
-  else
+  if test $gl_cv_sys_struct_timeval != yes; then
     HAVE_STRUCT_TIMEVAL=0
   fi
-  AC_SUBST([HAVE_STRUCT_TIMEVAL])
 
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[
+#if HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
+#include <time.h>
+    ]], [gettimeofday])
+])
+
+AC_DEFUN([gl_SYS_TIME_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS])
+  GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR([$1])
+])
+
+AC_DEFUN([gl_HEADER_SYS_TIME_H_DEFAULTS],
+[
+  GNULIB_GETTIMEOFDAY=0;     AC_SUBST([GNULIB_GETTIMEOFDAY])
   dnl Assume POSIX behavior unless another module says otherwise.
-  REPLACE_GETTIMEOFDAY=0
-  AC_SUBST([REPLACE_GETTIMEOFDAY])
-  if test $HAVE_SYS_TIME_H = 0 || test $HAVE_STRUCT_TIMEVAL = 0; then
-    SYS_TIME_H=sys/time.h
-  else
-    SYS_TIME_H=
-  fi
-  AC_SUBST([SYS_TIME_H])
+  HAVE_GETTIMEOFDAY=1;       AC_SUBST([HAVE_GETTIMEOFDAY])
+  HAVE_STRUCT_TIMEVAL=1;     AC_SUBST([HAVE_STRUCT_TIMEVAL])
+  HAVE_SYS_TIME_H=1;         AC_SUBST([HAVE_SYS_TIME_H])
+  REPLACE_GETTIMEOFDAY=0;    AC_SUBST([REPLACE_GETTIMEOFDAY])
 ])
index bbd6973c20265640ad5a55fce075f02995244aae..b3baa51ca863a05662118774c9c9a2f1dd54304e 100644 (file)
@@ -1,5 +1,5 @@
-# sysexits.m4 serial 4
-dnl Copyright (C) 2003, 2005, 2007 Free Software Foundation, Inc.
+# sysexits.m4 serial 5
+dnl Copyright (C) 2003, 2005, 2007, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -10,28 +10,28 @@ AC_DEFUN([gl_SYSEXITS],
   if test $ac_cv_header_sysexits_h = yes; then
     HAVE_SYSEXITS_H=1
     gl_CHECK_NEXT_HEADERS([sysexits.h])
-    AC_TRY_COMPILE([#include <sysexits.h>],
-      [switch (0)
-       {
-       case EX_OK:
-       case EX_USAGE:
-       case EX_DATAERR:
-       case EX_NOINPUT:
-       case EX_NOUSER:
-       case EX_NOHOST:
-       case EX_UNAVAILABLE:
-       case EX_SOFTWARE:
-       case EX_OSERR:
-       case EX_OSFILE:
-       case EX_CANTCREAT:
-       case EX_IOERR:
-       case EX_TEMPFAIL:
-       case EX_PROTOCOL:
-       case EX_NOPERM:
-       case EX_CONFIG:
-         break;
-       }
-      ],
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sysexits.h>]],
+        [[switch (0)
+          {
+          case EX_OK:
+          case EX_USAGE:
+          case EX_DATAERR:
+          case EX_NOINPUT:
+          case EX_NOUSER:
+          case EX_NOHOST:
+          case EX_UNAVAILABLE:
+          case EX_SOFTWARE:
+          case EX_OSERR:
+          case EX_OSFILE:
+          case EX_CANTCREAT:
+          case EX_IOERR:
+          case EX_TEMPFAIL:
+          case EX_PROTOCOL:
+          case EX_NOPERM:
+          case EX_CONFIG:
+            break;
+          }
+        ]])],
       [SYSEXITS_H=],
       [SYSEXITS_H=sysexits.h])
   else
index f0845afb88c5bf462c20cfb5f3826594601e8bb2..bafedda49fcd385b6bc8f9905c0cafffe9f8048c 100644 (file)
@@ -1,6 +1,6 @@
 # Configuration for paxutils/lib/system.h.
 
-# Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -24,6 +24,8 @@ AC_DEFUN([PU_SYSTEM],[
   AC_REQUIRE([AC_STRUCT_ST_BLKSIZE])
 
   AC_CHECK_FUNCS_ONCE(lstat mkfifo setlocale)
-  AC_REQUIRE([gl_INTTYPES_H])
+  AC_REQUIRE([gl_INTTOSTR])
   AC_REQUIRE([gl_STDINT_H])
+
+  AC_SEARCH_LIBS(gethostbyname, nsl)
 ])
index 4c44d37da9418d487b6fe6ceac518f445062784c..bf83f1957f97fa809f90d1063b8c78e1c1e1da22 100644 (file)
@@ -1,6 +1,6 @@
 #serial 3
 
-# Copyright (C) 2006-2007 Free Software Foundation, Inc.
+# Copyright (C) 2006-2007, 2009-2010 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
index d42a635ece4cdb36055b474f60c77eb8f5d9ae4d..ba2e194608c072b6c0d947d9c6fc537606382626 100644 (file)
@@ -1,7 +1,6 @@
 # Configure a more-standard replacement for <time.h>.
 
-# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007 Free Software
-# Foundation, Inc.
+# Copyright (C) 2000-2001, 2003-2007, 2009-2010 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -24,17 +23,6 @@ AC_DEFUN([gl_HEADER_TIME_H_BODY],
   AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC])
 ])
 
-AC_DEFUN([gl_HEADER_TIME_H_DEFAULTS],
-[
-  dnl If another module says to replace or to not replace, do that.
-  dnl Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK;
-  dnl this lets maintainers check for portability.
-  REPLACE_LOCALTIME_R=GNULIB_PORTCHECK;  AC_SUBST([REPLACE_LOCALTIME_R])
-  REPLACE_NANOSLEEP=GNULIB_PORTCHECK;    AC_SUBST([REPLACE_NANOSLEEP])
-  REPLACE_STRPTIME=GNULIB_PORTCHECK;     AC_SUBST([REPLACE_STRPTIME])
-  REPLACE_TIMEGM=GNULIB_PORTCHECK;       AC_SUBST([REPLACE_TIMEGM])
-])
-
 dnl Define HAVE_STRUCT_TIMESPEC if `struct timespec' is declared
 dnl in time.h or sys/time.h.
 
@@ -45,9 +33,9 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC],
     [gl_cv_sys_struct_timespec_in_time_h],
     [AC_COMPILE_IFELSE(
        [AC_LANG_PROGRAM(
-         [[#include <time.h>
-         ]],
-         [[static struct timespec x; x.tv_sec = x.tv_nsec;]])],
+          [[#include <time.h>
+          ]],
+          [[static struct timespec x; x.tv_sec = x.tv_nsec;]])],
        [gl_cv_sys_struct_timespec_in_time_h=yes],
        [gl_cv_sys_struct_timespec_in_time_h=no])])
 
@@ -59,12 +47,12 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC],
     AC_CACHE_CHECK([for struct timespec in <sys/time.h>],
       [gl_cv_sys_struct_timespec_in_sys_time_h],
       [AC_COMPILE_IFELSE(
-        [AC_LANG_PROGRAM(
-           [[#include <sys/time.h>
-           ]],
-           [[static struct timespec x; x.tv_sec = x.tv_nsec;]])],
-        [gl_cv_sys_struct_timespec_in_sys_time_h=yes],
-        [gl_cv_sys_struct_timespec_in_sys_time_h=no])])
+         [AC_LANG_PROGRAM(
+            [[#include <sys/time.h>
+            ]],
+            [[static struct timespec x; x.tv_sec = x.tv_nsec;]])],
+         [gl_cv_sys_struct_timespec_in_sys_time_h=yes],
+         [gl_cv_sys_struct_timespec_in_sys_time_h=no])])
     if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then
       SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1
     fi
@@ -72,3 +60,28 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC],
   AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC])
   AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC])
 ])
+
+AC_DEFUN([gl_TIME_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR([$1])
+])
+
+AC_DEFUN([gl_HEADER_TIME_H_DEFAULTS],
+[
+  GNULIB_MKTIME=0;                       AC_SUBST([GNULIB_MKTIME])
+  GNULIB_NANOSLEEP=0;                    AC_SUBST([GNULIB_NANOSLEEP])
+  GNULIB_STRPTIME=0;                     AC_SUBST([GNULIB_STRPTIME])
+  GNULIB_TIMEGM=0;                       AC_SUBST([GNULIB_TIMEGM])
+  dnl If another module says to replace or to not replace, do that.
+  dnl Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK;
+  dnl this lets maintainers check for portability.
+  REPLACE_LOCALTIME_R=GNULIB_PORTCHECK;  AC_SUBST([REPLACE_LOCALTIME_R])
+  REPLACE_MKTIME=GNULIB_PORTCHECK;       AC_SUBST([REPLACE_MKTIME])
+  REPLACE_NANOSLEEP=GNULIB_PORTCHECK;    AC_SUBST([REPLACE_NANOSLEEP])
+  REPLACE_STRPTIME=GNULIB_PORTCHECK;     AC_SUBST([REPLACE_STRPTIME])
+  REPLACE_TIMEGM=GNULIB_PORTCHECK;       AC_SUBST([REPLACE_TIMEGM])
+])
index c871b56d76f0ac97bda6736bb660dcff90db9e8f..b5938e79638a846153d3ac660a33bb24abb063f5 100644 (file)
@@ -1,6 +1,7 @@
 dnl Reentrant time functions like localtime_r.
 
-dnl Copyright (C) 2003, 2006, 2007, 2008 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
+dnl Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -17,15 +18,15 @@ AC_DEFUN([gl_TIME_R],
 
   AC_CACHE_CHECK([whether localtime_r is compatible with its POSIX signature],
     [gl_cv_time_r_posix],
-    [AC_TRY_COMPILE(
-       [#include <time.h>],
-       [/* We don't need to append 'restrict's to the argument types,
-          even though the POSIX signature has the 'restrict's,
-          since C99 says they can't affect type compatibility.  */
-       struct tm * (*ptr) (time_t const *, struct tm *) = localtime_r;
-        if (ptr) return 0;
-        /* Check the return type is a pointer.  On HP-UX 10 it is 'int'.  */
-        *localtime_r (0, 0);],
+    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+         [[#include <time.h>]],
+         [[/* We don't need to append 'restrict's to the argument types,
+              even though the POSIX signature has the 'restrict's,
+              since C99 says they can't affect type compatibility.  */
+           struct tm * (*ptr) (time_t const *, struct tm *) = localtime_r;
+           if (ptr) return 0;
+           /* Check the return type is a pointer.  On HP-UX 10 it is 'int'.  */
+           *localtime_r (0, 0);]])],
        [gl_cv_time_r_posix=yes],
        [gl_cv_time_r_posix=no])])
   if test $gl_cv_time_r_posix = yes; then
index 36f1238e8b71ca6d06adbb76852e4cb3b145b6f3..5dbaed74a048576ad23faf693344366abe1b9734 100644 (file)
@@ -1,7 +1,6 @@
 #serial 14
 
-# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007 Free Software
-# Foundation, Inc.
+# Copyright (C) 2000-2001, 2003-2007, 2009-2010 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
index 911af0a40390582cc9c2dd77f24e75c104d06d42..43bda96f9ea40bda7fde5d280a94346c01de9e96 100644 (file)
@@ -1,5 +1,5 @@
 # tm_gmtoff.m4 serial 3
-dnl Copyright (C) 2002, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 09adf931f57c89e53e93a1795b5faac04791bb85..74c3ce6012dba23a0210058a2ffe81cb444bf912 100644 (file)
@@ -1,5 +1,5 @@
 #serial 8
-dnl Copyright (C) 2002, 2005, 2006 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2005-2006, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index ff9a4ea0a59f3c43d7c06bbc973fa5918c7bf11c..f6c35d2a761423e26cb745435822e03feca7a78a 100644 (file)
@@ -1,5 +1,5 @@
-# unistd_h.m4 serial 17
-dnl Copyright (C) 2006-2009 Free Software Foundation, Inc.
+# unistd_h.m4 serial 40
+dnl Copyright (C) 2006-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -11,6 +11,7 @@ AC_DEFUN([gl_UNISTD_H],
   dnl Use AC_REQUIRE here, so that the default behavior below is expanded
   dnl once only, before all statements that occur in other macros.
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  AC_REQUIRE([AC_C_INLINE])
 
   gl_CHECK_NEXT_HEADERS([unistd.h])
 
@@ -21,6 +22,24 @@ AC_DEFUN([gl_UNISTD_H],
     HAVE_UNISTD_H=0
   fi
   AC_SUBST([HAVE_UNISTD_H])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[#include <unistd.h>
+/* Some systems declare various items in the wrong headers.  */
+#ifndef __GLIBC__
+# include <fcntl.h>
+# include <stdio.h>
+# include <stdlib.h>
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#  include <io.h>
+# endif
+#endif
+    ]], [chown dup2 dup3 environ euidaccess faccessat fchdir fchownat
+    fsync ftruncate getcwd getdomainname getdtablesize getgroups
+    gethostname getlogin getlogin_r getpagesize getusershell setusershell
+    endusershell lchown link linkat lseek pipe2 pread readlink readlinkat
+    rmdir sleep symlink symlinkat unlink unlinkat usleep])
 ])
 
 AC_DEFUN([gl_UNISTD_MODULE_INDICATOR],
@@ -28,6 +47,8 @@ AC_DEFUN([gl_UNISTD_MODULE_INDICATOR],
   dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
   GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR([$1])
 ])
 
 AC_DEFUN([gl_UNISTD_H_DEFAULTS],
@@ -35,49 +56,96 @@ AC_DEFUN([gl_UNISTD_H_DEFAULTS],
   GNULIB_CHOWN=0;            AC_SUBST([GNULIB_CHOWN])
   GNULIB_CLOSE=0;            AC_SUBST([GNULIB_CLOSE])
   GNULIB_DUP2=0;             AC_SUBST([GNULIB_DUP2])
+  GNULIB_DUP3=0;             AC_SUBST([GNULIB_DUP3])
   GNULIB_ENVIRON=0;          AC_SUBST([GNULIB_ENVIRON])
   GNULIB_EUIDACCESS=0;       AC_SUBST([GNULIB_EUIDACCESS])
+  GNULIB_FACCESSAT=0;        AC_SUBST([GNULIB_FACCESSAT])
   GNULIB_FCHDIR=0;           AC_SUBST([GNULIB_FCHDIR])
+  GNULIB_FCHOWNAT=0;         AC_SUBST([GNULIB_FCHOWNAT])
   GNULIB_FSYNC=0;            AC_SUBST([GNULIB_FSYNC])
   GNULIB_FTRUNCATE=0;        AC_SUBST([GNULIB_FTRUNCATE])
   GNULIB_GETCWD=0;           AC_SUBST([GNULIB_GETCWD])
   GNULIB_GETDOMAINNAME=0;    AC_SUBST([GNULIB_GETDOMAINNAME])
   GNULIB_GETDTABLESIZE=0;    AC_SUBST([GNULIB_GETDTABLESIZE])
+  GNULIB_GETGROUPS=0;        AC_SUBST([GNULIB_GETGROUPS])
   GNULIB_GETHOSTNAME=0;      AC_SUBST([GNULIB_GETHOSTNAME])
+  GNULIB_GETLOGIN=0;         AC_SUBST([GNULIB_GETLOGIN])
   GNULIB_GETLOGIN_R=0;       AC_SUBST([GNULIB_GETLOGIN_R])
   GNULIB_GETPAGESIZE=0;      AC_SUBST([GNULIB_GETPAGESIZE])
   GNULIB_GETUSERSHELL=0;     AC_SUBST([GNULIB_GETUSERSHELL])
   GNULIB_LCHOWN=0;           AC_SUBST([GNULIB_LCHOWN])
   GNULIB_LINK=0;             AC_SUBST([GNULIB_LINK])
+  GNULIB_LINKAT=0;           AC_SUBST([GNULIB_LINKAT])
   GNULIB_LSEEK=0;            AC_SUBST([GNULIB_LSEEK])
+  GNULIB_PIPE2=0;            AC_SUBST([GNULIB_PIPE2])
+  GNULIB_PREAD=0;            AC_SUBST([GNULIB_PREAD])
   GNULIB_READLINK=0;         AC_SUBST([GNULIB_READLINK])
+  GNULIB_READLINKAT=0;       AC_SUBST([GNULIB_READLINKAT])
+  GNULIB_RMDIR=0;            AC_SUBST([GNULIB_RMDIR])
   GNULIB_SLEEP=0;            AC_SUBST([GNULIB_SLEEP])
+  GNULIB_SYMLINK=0;          AC_SUBST([GNULIB_SYMLINK])
+  GNULIB_SYMLINKAT=0;        AC_SUBST([GNULIB_SYMLINKAT])
+  GNULIB_UNISTD_H_GETOPT=0;  AC_SUBST([GNULIB_UNISTD_H_GETOPT])
   GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE])
+  GNULIB_UNLINK=0;           AC_SUBST([GNULIB_UNLINK])
+  GNULIB_UNLINKAT=0;         AC_SUBST([GNULIB_UNLINKAT])
+  GNULIB_USLEEP=0;           AC_SUBST([GNULIB_USLEEP])
   GNULIB_WRITE=0;            AC_SUBST([GNULIB_WRITE])
   dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_CHOWN=1;           AC_SUBST([HAVE_CHOWN])
   HAVE_DUP2=1;            AC_SUBST([HAVE_DUP2])
+  HAVE_DUP3=1;            AC_SUBST([HAVE_DUP3])
   HAVE_EUIDACCESS=1;      AC_SUBST([HAVE_EUIDACCESS])
+  HAVE_FACCESSAT=1;       AC_SUBST([HAVE_FACCESSAT])
+  HAVE_FCHOWNAT=1;        AC_SUBST([HAVE_FCHOWNAT])
   HAVE_FSYNC=1;           AC_SUBST([HAVE_FSYNC])
   HAVE_FTRUNCATE=1;       AC_SUBST([HAVE_FTRUNCATE])
   HAVE_GETDOMAINNAME=1;   AC_SUBST([HAVE_GETDOMAINNAME])
   HAVE_GETDTABLESIZE=1;   AC_SUBST([HAVE_GETDTABLESIZE])
+  HAVE_GETGROUPS=1;       AC_SUBST([HAVE_GETGROUPS])
   HAVE_GETHOSTNAME=1;     AC_SUBST([HAVE_GETHOSTNAME])
+  HAVE_GETLOGIN=1;        AC_SUBST([HAVE_GETLOGIN])
   HAVE_GETPAGESIZE=1;     AC_SUBST([HAVE_GETPAGESIZE])
   HAVE_GETUSERSHELL=1;    AC_SUBST([HAVE_GETUSERSHELL])
+  HAVE_LCHOWN=1;          AC_SUBST([HAVE_LCHOWN])
   HAVE_LINK=1;            AC_SUBST([HAVE_LINK])
+  HAVE_LINKAT=1;          AC_SUBST([HAVE_LINKAT])
+  HAVE_PIPE2=1;           AC_SUBST([HAVE_PIPE2])
+  HAVE_PREAD=1;           AC_SUBST([HAVE_PREAD])
   HAVE_READLINK=1;        AC_SUBST([HAVE_READLINK])
+  HAVE_READLINKAT=1;      AC_SUBST([HAVE_READLINKAT])
   HAVE_SLEEP=1;           AC_SUBST([HAVE_SLEEP])
+  HAVE_SYMLINK=1;         AC_SUBST([HAVE_SYMLINK])
+  HAVE_SYMLINKAT=1;       AC_SUBST([HAVE_SYMLINKAT])
   HAVE_DECL_ENVIRON=1;    AC_SUBST([HAVE_DECL_ENVIRON])
   HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R])
   HAVE_OS_H=0;            AC_SUBST([HAVE_OS_H])
   HAVE_SYS_PARAM_H=0;     AC_SUBST([HAVE_SYS_PARAM_H])
+  HAVE_UNLINKAT=1;        AC_SUBST([HAVE_UNLINKAT])
+  HAVE_USLEEP=1;          AC_SUBST([HAVE_USLEEP])
   REPLACE_CHOWN=0;        AC_SUBST([REPLACE_CHOWN])
   REPLACE_CLOSE=0;        AC_SUBST([REPLACE_CLOSE])
+  REPLACE_DUP=0;          AC_SUBST([REPLACE_DUP])
+  REPLACE_DUP2=0;         AC_SUBST([REPLACE_DUP2])
   REPLACE_FCHDIR=0;       AC_SUBST([REPLACE_FCHDIR])
+  REPLACE_FCHOWNAT=0;     AC_SUBST([REPLACE_FCHOWNAT])
   REPLACE_GETCWD=0;       AC_SUBST([REPLACE_GETCWD])
+  REPLACE_GETGROUPS=0;    AC_SUBST([REPLACE_GETGROUPS])
   REPLACE_GETPAGESIZE=0;  AC_SUBST([REPLACE_GETPAGESIZE])
   REPLACE_LCHOWN=0;       AC_SUBST([REPLACE_LCHOWN])
+  REPLACE_LINK=0;         AC_SUBST([REPLACE_LINK])
+  REPLACE_LINKAT=0;       AC_SUBST([REPLACE_LINKAT])
   REPLACE_LSEEK=0;        AC_SUBST([REPLACE_LSEEK])
+  REPLACE_PREAD=0;        AC_SUBST([REPLACE_PREAD])
+  REPLACE_READLINK=0;     AC_SUBST([REPLACE_READLINK])
+  REPLACE_RMDIR=0;        AC_SUBST([REPLACE_RMDIR])
+  REPLACE_SLEEP=0;        AC_SUBST([REPLACE_SLEEP])
+  REPLACE_SYMLINK=0;      AC_SUBST([REPLACE_SYMLINK])
+  REPLACE_UNLINK=0;       AC_SUBST([REPLACE_UNLINK])
+  REPLACE_UNLINKAT=0;     AC_SUBST([REPLACE_UNLINKAT])
+  REPLACE_USLEEP=0;       AC_SUBST([REPLACE_USLEEP])
   REPLACE_WRITE=0;        AC_SUBST([REPLACE_WRITE])
   UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H])
+  UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0;
+                           AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS])
 ])
diff --git a/m4/unlink.m4 b/m4/unlink.m4
new file mode 100644 (file)
index 0000000..c01d848
--- /dev/null
@@ -0,0 +1,35 @@
+# unlink.m4 serial 3
+dnl Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_UNLINK],
+[
+  AC_REQUIRE([gl_AC_DOS])
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  dnl Detect Solaris 9 and FreeBSD 7.2 bug.
+  AC_CACHE_CHECK([whether unlink honors trailing slashes],
+    [gl_cv_func_unlink_works],
+    [touch conftest.file
+     # Assume that if we have lstat, we can also check symlinks.
+     if test $ac_cv_func_lstat = yes; then
+       ln -s conftest.file conftest.lnk
+     fi
+     AC_RUN_IFELSE(
+       [AC_LANG_PROGRAM(
+         [[#include <unistd.h>
+           #include <errno.h>
+]], [[if (!unlink ("conftest.file/") || errno != ENOTDIR) return 1;
+#if HAVE_LSTAT
+      if (!unlink ("conftest.lnk/") || errno != ENOTDIR) return 2;
+#endif
+      ]])],
+      [gl_cv_func_unlink_works=yes], [gl_cv_func_unlink_works=no],
+      [gl_cv_func_unlink_works="guessing no"])
+     rm -f conftest.file conftest.lnk])
+  if test x"$gl_cv_func_unlink_works" != xyes; then
+    REPLACE_UNLINK=1
+    AC_LIBOBJ([unlink])
+  fi
+])
index 0c8437531404ddae115f179f02dc0a033302f3db..3b3c75e71c15f61e086080702c40fb07bd81124c 100644 (file)
@@ -1,6 +1,6 @@
 # serial 6
 
-# Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+# Copyright (C) 2005-2007, 2009-2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -16,17 +16,18 @@ AC_DEFUN([gl_UNLINKDIR],
   AC_LIBOBJ([unlinkdir])
 
   # The Hurd, the Linux kernel, the FreeBSD kernel version 2.2 and later,
-  # and Cygwin never let anyone (even root) unlink directories.
+  # Cygwin, and mingw never let anyone (even root) unlink directories.
   # If anyone knows of another system for which unlink can never
   # remove a directory, please report it to <bug-coreutils@gnu.org>.
   # Unfortunately this is difficult to test for, since it requires root access
   # and might create garbage in the file system,
   # so the code below simply relies on the kernel name and version number.
-  case $host in
-  *-*-gnu[[0-9]]* | \
-  *-*-linux-* | *-*-linux | \
-  *-*-freebsd2.2* | *-*-freebsd[[3-9]]* | *-*-freebsd[[1-9]][[0-9]]* | \
-  *-cygwin)
+  case $host_os in
+  gnu[[0-9]]* | \
+  linux-* | linux | \
+  freebsd2.2* | freebsd[[3-9]]* | freebsd[[1-9]][[0-9]]* | \
+  cygwin | \
+  mingw*)
     AC_DEFINE([UNLINK_CANNOT_UNLINK_DIR], [1],
       [Define to 1 if unlink (dir) cannot possibly succeed.]);;
   esac
index cd5079b86793edf4ceb9d0de5c45d15cd23fce9d..bddec0def7a86644cd01854f874a495228d89333 100644 (file)
@@ -1,6 +1,6 @@
 # unlocked-io.m4 serial 15
 
-# Copyright (C) 1998-2006, 2009 Free Software Foundation, Inc.
+# Copyright (C) 1998-2006, 2009-2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
index 062f736275008c3e0687e12e7e945a02632b31a6..88a9f45fb1e493dd5c382c7ad5fd9621ddf2270e 100644 (file)
@@ -1,7 +1,7 @@
 # serial 9
 
-# Copyright (C) 1998-2001, 2003-2004, 2007, 2009 Free Software
-# Foundation, Inc.
+# Copyright (C) 1998-2001, 2003-2004, 2007, 2009-2010 Free Software Foundation,
+# Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -19,15 +19,15 @@ AC_DEFUN([gl_CHECK_TYPE_STRUCT_UTIMBUF],
   AC_CACHE_CHECK([for struct utimbuf], [gl_cv_sys_struct_utimbuf],
     [AC_COMPILE_IFELSE(
        [AC_LANG_PROGRAM(
-         [[#if HAVE_SYS_TIME_H
-            #include <sys/time.h>
-           #endif
-           #include <time.h>
-           #ifdef HAVE_UTIME_H
-            #include <utime.h>
-           #endif
-         ]],
-         [[static struct utimbuf x; x.actime = x.modtime;]])],
+          [[#if HAVE_SYS_TIME_H
+             #include <sys/time.h>
+            #endif
+            #include <time.h>
+            #ifdef HAVE_UTIME_H
+             #include <utime.h>
+            #endif
+          ]],
+          [[static struct utimbuf x; x.actime = x.modtime;]])],
        [gl_cv_sys_struct_utimbuf=yes],
        [gl_cv_sys_struct_utimbuf=no])])
 
diff --git a/m4/utime.m4 b/m4/utime.m4
deleted file mode 100644 (file)
index 26b5ea9..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# serial 8
-
-dnl From Jim Meyering
-dnl Replace the utime function on systems that need it.
-
-# Copyright (C) 1998, 2000-2001, 2003-2004, 2009 Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-dnl FIXME
-
-AC_DEFUN([gl_FUNC_UTIME],
-[
-  AC_REQUIRE([AC_FUNC_UTIME_NULL])
-  if test $ac_cv_func_utime_null = no; then
-    AC_LIBOBJ([utime])
-    AC_DEFINE([utime], [rpl_utime],
-      [Define to rpl_utime if the replacement function should be used.])
-    gl_PREREQ_UTIME
-  fi
-])
-
-# Prerequisites of lib/utime.c.
-AC_DEFUN([gl_PREREQ_UTIME],
-[
-  AC_CHECK_HEADERS_ONCE([utime.h])
-  AC_REQUIRE([gl_CHECK_TYPE_STRUCT_UTIMBUF])
-  gl_FUNC_UTIMES_NULL
-])
index 01a3184ce251359d4a0aad7085dc6e30fa912f6e..2baa2561035f528ad7eafd190abb4cd230ab0299 100644 (file)
@@ -1,10 +1,9 @@
-dnl Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Free Software
-dnl Foundation, Inc.
+dnl Copyright (C) 2003-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
-dnl serial 2
+dnl serial 4
 
 AC_DEFUN([gl_UTIMENS],
 [
@@ -14,5 +13,29 @@ AC_DEFUN([gl_UTIMENS],
   AC_REQUIRE([gl_FUNC_UTIMES])
   AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC])
   AC_REQUIRE([gl_CHECK_TYPE_STRUCT_UTIMBUF])
-  AC_CHECK_FUNCS_ONCE([futimes futimesat futimens utimensat])
+  AC_CHECK_FUNCS_ONCE([futimes futimesat futimens utimensat lutimes])
+
+  if test $ac_cv_func_futimens = no && test $ac_cv_func_futimesat = yes; then
+    dnl FreeBSD 8.0-rc2 mishandles futimesat(fd,NULL,time).  It is not
+    dnl standardized, but Solaris implemented it first and uses it as
+    dnl its only means to set fd time.
+    AC_CACHE_CHECK([whether futimesat handles NULL file],
+      [gl_cv_func_futimesat_works],
+      [touch conftest.file
+       AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <stddef.h>
+#include <sys/times.h>
+]], [[    int fd = open ("conftest.file", O_RDWR);
+          if (fd < 0) return 1;
+          if (futimesat (fd, NULL, NULL)) return 2;
+        ]])],
+        [gl_cv_func_futimesat_works=yes],
+        [gl_cv_func_futimesat_works=no],
+        [gl_cv_func_futimesat_works="guessing no"])
+      rm -f conftest.file])
+    if test "$gl_cv_func_futimesat_works" != yes; then
+      AC_DEFINE([FUTIMESAT_NULL_BUG], [1],
+        [Define to 1 if futimesat mishandles a NULL file name.])
+    fi
+  fi
 ])
diff --git a/m4/utimes-null.m4 b/m4/utimes-null.m4
deleted file mode 100644 (file)
index dffa798..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-# serial 8
-
-# Copyright (C) 1998-1999, 2001, 2003-2004, 2006, 2009 Free Software
-# Foundation, Inc.
-
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-dnl Shamelessly cloned from acspecific.m4's AC_FUNC_UTIME_NULL,
-dnl then do case-insensitive s/utime/utimes/.
-
-AC_DEFUN([gl_FUNC_UTIMES_NULL],
-[AC_CACHE_CHECK([whether utimes accepts a null argument], [ac_cv_func_utimes_null],
-[rm -f conftest.data; > conftest.data
-AC_TRY_RUN([
-/* In case stat has been defined to rpl_stat, undef it here.  */
-#undef stat
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-int
-main () {
-struct stat s, t;
-return ! (stat ("conftest.data", &s) == 0
-         && utimes ("conftest.data", 0) == 0
-         && stat ("conftest.data", &t) == 0
-         && t.st_mtime >= s.st_mtime
-         && t.st_mtime - s.st_mtime < 120));
-}],
-  ac_cv_func_utimes_null=yes,
-  ac_cv_func_utimes_null=no,
-  ac_cv_func_utimes_null=no)
-rm -f core core.* *.core])
-
-    if test $ac_cv_func_utimes_null = yes; then
-      AC_DEFINE([HAVE_UTIMES_NULL], [1],
-               [Define if utimes accepts a null argument])
-    fi
-  ]
-)
index 5b010acd8b3192191fb6491b2c519837cefd0b44..e6d6f776499329fe76839f655ad97b1378320406 100644 (file)
@@ -1,6 +1,7 @@
 # Detect some bugs in glibc's implementation of utimes.
+# serial 2
 
-dnl Copyright (C) 2003, 2004, 2005, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2003-2005, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -19,8 +20,8 @@ dnl with or without modifications, as long as this notice is preserved.
 
 AC_DEFUN([gl_FUNC_UTIMES],
 [
-  AC_CACHE_CHECK([determine whether the utimes function works],
-                gl_cv_func_working_utimes,
+  AC_CACHE_CHECK([whether the utimes function works],
+                 [gl_cv_func_working_utimes],
   [
   AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <sys/types.h>
@@ -44,11 +45,11 @@ main ()
   int fd;
 
   int ok = ((f = fopen (file, "w"))
-           && fclose (f) == 0
-           && utimes (file, timeval) == 0
-           && lstat (file, &sbuf) == 0
-           && sbuf.st_atime == timeval[0].tv_sec
-           && sbuf.st_mtime == timeval[1].tv_sec);
+            && fclose (f) == 0
+            && utimes (file, timeval) == 0
+            && lstat (file, &sbuf) == 0
+            && sbuf.st_atime == timeval[0].tv_sec
+            && sbuf.st_mtime == timeval[1].tv_sec);
   unlink (file);
   if (!ok)
     exit (1);
@@ -66,8 +67,8 @@ main ()
     exit (1);
 
   ok = (0 <= (fd = open (file, O_WRONLY|O_CREAT, 0444))
-             && close (fd) == 0
-             && utimes (file, NULL) == 0);
+              && close (fd) == 0
+              && utimes (file, NULL) == 0);
   unlink (file);
 
   exit (!ok);
index 9e839d2bc8d096080b8e5f0c364a1ec70eb10869..50a20cca2346803576a53ad8e39d5950cc3fbc33 100644 (file)
@@ -1,5 +1,5 @@
-# vasnprintf.m4 serial 26
-dnl Copyright (C) 2002-2004, 2006-2009 Free Software Foundation, Inc.
+# vasnprintf.m4 serial 29
+dnl Copyright (C) 2002-2004, 2006-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -52,13 +52,13 @@ AC_DEFUN([gl_PREREQ_PRINTF_PARSE],
 ])
 
 # Prerequisites of lib/vasnprintf.c.
-AC_DEFUN([gl_PREREQ_VASNPRINTF],
+AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF],
 [
   AC_REQUIRE([AC_FUNC_ALLOCA])
   AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
   AC_REQUIRE([gt_TYPE_WCHAR_T])
   AC_REQUIRE([gt_TYPE_WINT_T])
-  AC_CHECK_FUNCS([snprintf wcslen])
+  AC_CHECK_FUNCS([snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb])
   dnl Use the _snprintf function only if it is declared (because on NetBSD it
   dnl is defined as a weak alias of snprintf; we prefer to use the latter).
   AC_CHECK_DECLS([_snprintf], , , [#include <stdio.h>])
@@ -66,7 +66,7 @@ AC_DEFUN([gl_PREREQ_VASNPRINTF],
 
 # Extra prerequisites of lib/vasnprintf.c for supporting 'long double'
 # arguments.
-AC_DEFUN([gl_PREREQ_VASNPRINTF_LONG_DOUBLE],
+AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE],
 [
   AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
   case "$gl_cv_func_printf_long_double" in
@@ -150,6 +150,21 @@ AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F],
   esac
 ])
 
+# Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS],
+[
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS])
+  case "$gl_cv_func_printf_directive_ls" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_DIRECTIVE_LS], [1],
+        [Define if the vasnprintf implementation needs special code for
+         the 'ls' directive.])
+      ;;
+  esac
+])
+
 # Extra prerequisites of lib/vasnprintf.c for supporting the ' flag.
 AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING],
 [
@@ -247,6 +262,7 @@ AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS],
   gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE
   gl_PREREQ_VASNPRINTF_DIRECTIVE_A
   gl_PREREQ_VASNPRINTF_DIRECTIVE_F
+  gl_PREREQ_VASNPRINTF_DIRECTIVE_LS
   gl_PREREQ_VASNPRINTF_FLAG_GROUPING
   gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST
   gl_PREREQ_VASNPRINTF_FLAG_ZERO
diff --git a/m4/vasprintf.m4 b/m4/vasprintf.m4
new file mode 100644 (file)
index 0000000..b142bc0
--- /dev/null
@@ -0,0 +1,46 @@
+# vasprintf.m4 serial 6
+dnl Copyright (C) 2002-2003, 2006-2007, 2009-2010 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_VASPRINTF],
+[
+  AC_CHECK_FUNCS([vasprintf])
+  if test $ac_cv_func_vasprintf = no; then
+    gl_REPLACE_VASPRINTF
+  fi
+])
+
+AC_DEFUN([gl_REPLACE_VASPRINTF],
+[
+  AC_LIBOBJ([vasprintf])
+  AC_LIBOBJ([asprintf])
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  if test $ac_cv_func_vasprintf = yes; then
+    REPLACE_VASPRINTF=1
+  else
+    HAVE_VASPRINTF=0
+  fi
+  gl_PREREQ_VASPRINTF_H
+  gl_PREREQ_VASPRINTF
+  gl_PREREQ_ASPRINTF
+])
+
+# Prerequisites of the vasprintf portion of lib/stdio.h.
+AC_DEFUN([gl_PREREQ_VASPRINTF_H],
+[
+  dnl Persuade glibc <stdio.h> to declare asprintf() and vasprintf().
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+])
+
+# Prerequisites of lib/vasprintf.c.
+AC_DEFUN([gl_PREREQ_VASPRINTF],
+[
+])
+
+# Prerequisites of lib/asprintf.c.
+AC_DEFUN([gl_PREREQ_ASPRINTF],
+[
+])
diff --git a/m4/version-etc.m4 b/m4/version-etc.m4
new file mode 100644 (file)
index 0000000..2c572b4
--- /dev/null
@@ -0,0 +1,33 @@
+# version-etc.m4 serial 1
+# Copyright (C) 2009-2010 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+dnl $1 - configure flag and define name
+dnl $2 - human readable description
+m4_define([gl_VERSION_ETC_FLAG],
+[dnl
+  AC_ARG_WITH([$1], [AS_HELP_STRING([--with-$1], [$2])],
+    [dnl
+      case $withval in
+        yes|no) ;;
+        *) AC_DEFINE_UNQUOTED(AS_TR_CPP([PACKAGE_$1]), ["$withval"], [$2]) ;;
+      esac
+    ])
+])
+
+AC_DEFUN([gl_VERSION_ETC],
+[dnl
+  gl_VERSION_ETC_FLAG([packager],
+                      [String identifying the packager of this software])
+  gl_VERSION_ETC_FLAG([packager-version],
+                      [Packager-specific version information])
+  gl_VERSION_ETC_FLAG([packager-bug-reports],
+                      [Packager info for bug reports (URL/e-mail/...)])
+  if test "X$with_packager" = "X" && \
+     test "X$with_packager_version$with_packager_bug_reports" != "X"
+  then
+    AC_MSG_ERROR([The --with-packager-{bug-reports,version} options require --with-packager])
+  fi
+])
index 3b37d460b33eb069c3709b8ae6809eb816e3a53d..ed189c23882b9f4c88adac2073b2441c4d64d6d6 100644 (file)
@@ -1,5 +1,5 @@
 # vsnprintf.m4 serial 5
-dnl Copyright (C) 2002-2004, 2007-2008 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2004, 2007-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/warn-on-use.m4 b/m4/warn-on-use.m4
new file mode 100644 (file)
index 0000000..42daae8
--- /dev/null
@@ -0,0 +1,45 @@
+# warn-on-use.m4 serial 2
+dnl Copyright (C) 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES)
+# ---------------------------------------
+# For each whitespace-separated element in the list of NAMES, define
+# HAVE_RAW_DECL_name if the function has a declaration among INCLUDES
+# even after being undefined as a macro.
+#
+# See warn-on-use.h for some hints on how to poison function names, as
+# well as ideas on poisoning global variables and macros.  NAMES may
+# include global variables, but remember that only functions work with
+# _GL_WARN_ON_USE.  Typically, INCLUDES only needs to list a single
+# header, but if the replacement header pulls in other headers because
+# some systems declare functions in the wrong header, then INCLUDES
+# should do likewise.
+#
+# If you assume C89, then it is generally safe to assume declarations
+# for functions declared in that standard (such as gets) without
+# needing gl_WARN_ON_USE_PREPARE.
+AC_DEFUN([gl_WARN_ON_USE_PREPARE],
+[
+  m4_foreach_w([gl_decl], [$2],
+    [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])),
+      [Define to 1 if ]m4_defn([gl_decl])[ is declared even after
+       undefining macros.])])dnl
+  for gl_func in m4_flatten([$2]); do
+    AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl
+    AC_CACHE_CHECK([whether $gl_func is declared without a macro],
+      gl_Symbol,
+      [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1],
+[@%:@undef $gl_func
+  (void) $gl_func;])],
+        [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])])
+     AS_VAR_IF(gl_Symbol, [yes],
+       [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1])
+       dnl shortcut - if the raw declaration exists, then set a cache
+       dnl variable to allow skipping any later AC_CHECK_DECL efforts
+       eval ac_cv_have_decl_$gl_func=yes])
+    AS_VAR_POPDEF([gl_Symbol])dnl
+  done
+])
diff --git a/m4/wchar.m4 b/m4/wchar.m4
deleted file mode 100644 (file)
index ba8ee6a..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
-
-dnl Copyright (C) 2007-2008 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl Written by Eric Blake.
-
-# wchar.m4 serial 22
-
-AC_DEFUN([gl_WCHAR_H],
-[
-  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
-  AC_CACHE_CHECK([whether <wchar.h> is standalone],
-    [gl_cv_header_wchar_h_standalone],
-    [AC_COMPILE_IFELSE([[#include <wchar.h>
-wchar_t w;]],
-      [gl_cv_header_wchar_h_standalone=yes],
-      [gl_cv_header_wchar_h_standalone=no])])
-
-  AC_REQUIRE([gt_TYPE_WINT_T])
-  if test $gt_cv_c_wint_t = yes; then
-    HAVE_WINT_T=1
-  else
-    HAVE_WINT_T=0
-  fi
-  AC_SUBST([HAVE_WINT_T])
-
-  if test $gl_cv_header_wchar_h_standalone != yes || test $gt_cv_c_wint_t != yes; then
-    WCHAR_H=wchar.h
-  fi
-
-  dnl Prepare for creating substitute <wchar.h>.
-  dnl Do it always: WCHAR_H may be empty here but can be set later.
-  dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
-  dnl character support).
-  AC_CHECK_HEADERS_ONCE([wchar.h])
-  if test $ac_cv_header_wchar_h = yes; then
-    HAVE_WCHAR_H=1
-  else
-    HAVE_WCHAR_H=0
-  fi
-  AC_SUBST([HAVE_WCHAR_H])
-  gl_CHECK_NEXT_HEADERS([wchar.h])
-])
-
-dnl Unconditionally enables the replacement of <wchar.h>.
-AC_DEFUN([gl_REPLACE_WCHAR_H],
-[
-  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
-  WCHAR_H=wchar.h
-])
-
-AC_DEFUN([gl_WCHAR_MODULE_INDICATOR],
-[
-  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
-  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
-  GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
-])
-
-AC_DEFUN([gl_WCHAR_H_DEFAULTS],
-[
-  GNULIB_BTOWC=0;      AC_SUBST([GNULIB_BTOWC])
-  GNULIB_WCTOB=0;      AC_SUBST([GNULIB_WCTOB])
-  GNULIB_MBSINIT=0;    AC_SUBST([GNULIB_MBSINIT])
-  GNULIB_MBRTOWC=0;    AC_SUBST([GNULIB_MBRTOWC])
-  GNULIB_MBRLEN=0;     AC_SUBST([GNULIB_MBRLEN])
-  GNULIB_MBSRTOWCS=0;  AC_SUBST([GNULIB_MBSRTOWCS])
-  GNULIB_MBSNRTOWCS=0; AC_SUBST([GNULIB_MBSNRTOWCS])
-  GNULIB_WCRTOMB=0;    AC_SUBST([GNULIB_WCRTOMB])
-  GNULIB_WCSRTOMBS=0;  AC_SUBST([GNULIB_WCSRTOMBS])
-  GNULIB_WCSNRTOMBS=0; AC_SUBST([GNULIB_WCSNRTOMBS])
-  GNULIB_WCWIDTH=0;    AC_SUBST([GNULIB_WCWIDTH])
-  dnl Assume proper GNU behavior unless another module says otherwise.
-  HAVE_BTOWC=1;        AC_SUBST([HAVE_BTOWC])
-  HAVE_MBSINIT=1;      AC_SUBST([HAVE_MBSINIT])
-  HAVE_MBRTOWC=1;      AC_SUBST([HAVE_MBRTOWC])
-  HAVE_MBRLEN=1;       AC_SUBST([HAVE_MBRLEN])
-  HAVE_MBSRTOWCS=1;    AC_SUBST([HAVE_MBSRTOWCS])
-  HAVE_MBSNRTOWCS=1;   AC_SUBST([HAVE_MBSNRTOWCS])
-  HAVE_WCRTOMB=1;      AC_SUBST([HAVE_WCRTOMB])
-  HAVE_WCSRTOMBS=1;    AC_SUBST([HAVE_WCSRTOMBS])
-  HAVE_WCSNRTOMBS=1;   AC_SUBST([HAVE_WCSNRTOMBS])
-  HAVE_DECL_WCTOB=1;   AC_SUBST([HAVE_DECL_WCTOB])
-  HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH])
-  REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T])
-  REPLACE_BTOWC=0;     AC_SUBST([REPLACE_BTOWC])
-  REPLACE_WCTOB=0;     AC_SUBST([REPLACE_WCTOB])
-  REPLACE_MBSINIT=0;   AC_SUBST([REPLACE_MBSINIT])
-  REPLACE_MBRTOWC=0;   AC_SUBST([REPLACE_MBRTOWC])
-  REPLACE_MBRLEN=0;    AC_SUBST([REPLACE_MBRLEN])
-  REPLACE_MBSRTOWCS=0; AC_SUBST([REPLACE_MBSRTOWCS])
-  REPLACE_MBSNRTOWCS=0;AC_SUBST([REPLACE_MBSNRTOWCS])
-  REPLACE_WCRTOMB=0;   AC_SUBST([REPLACE_WCRTOMB])
-  REPLACE_WCSRTOMBS=0; AC_SUBST([REPLACE_WCSRTOMBS])
-  REPLACE_WCWIDTH=0;   AC_SUBST([REPLACE_WCWIDTH])
-  WCHAR_H='';          AC_SUBST([WCHAR_H])
-])
diff --git a/m4/wchar_h.m4 b/m4/wchar_h.m4
new file mode 100644 (file)
index 0000000..0bce51c
--- /dev/null
@@ -0,0 +1,152 @@
+dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
+
+dnl Copyright (C) 2007-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Eric Blake.
+
+# wchar_h.m4 serial 32
+
+AC_DEFUN([gl_WCHAR_H],
+[
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+  AC_REQUIRE([gl_WCHAR_H_INLINE_OK])
+  dnl Prepare for creating substitute <wchar.h>.
+  dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
+  dnl character support).
+  dnl <wchar.h> is always overridden, because of GNULIB_POSIXCHECK.
+  AC_CHECK_HEADERS_ONCE([wchar.h])
+  gl_CHECK_NEXT_HEADERS([wchar.h])
+  if test $ac_cv_header_wchar_h = yes; then
+    HAVE_WCHAR_H=1
+  else
+    HAVE_WCHAR_H=0
+  fi
+  AC_SUBST([HAVE_WCHAR_H])
+
+  AC_REQUIRE([gt_TYPE_WINT_T])
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+  AC_SUBST([HAVE_WINT_T])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[
+/* Some systems require additional headers.  */
+#ifndef __GLIBC__
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+#endif
+#include <wchar.h>
+    ]], [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb
+    wcsrtombs wcsnrtombs wcwidth])
+])
+
+dnl Check whether <wchar.h> is usable at all.
+AC_DEFUN([gl_WCHAR_H_INLINE_OK],
+[
+  dnl Test whether <wchar.h> suffers due to the transition from '__inline' to
+  dnl 'gnu_inline'. See <http://sourceware.org/bugzilla/show_bug.cgi?id=4022>
+  dnl and <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary,
+  dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and
+  dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>.
+  AC_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly],
+    [gl_cv_header_wchar_h_correct_inline],
+    [gl_cv_header_wchar_h_correct_inline=yes
+     AC_LANG_CONFTEST([
+       AC_LANG_SOURCE([[#define wcstod renamed_wcstod
+#include <wchar.h>
+extern int zero (void);
+int main () { return zero(); }
+]])])
+     if AC_TRY_EVAL([ac_compile]); then
+       mv conftest.$ac_objext conftest1.$ac_objext
+       AC_LANG_CONFTEST([
+         AC_LANG_SOURCE([[#define wcstod renamed_wcstod
+#include <wchar.h>
+int zero (void) { return 0; }
+]])])
+       if AC_TRY_EVAL([ac_compile]); then
+         mv conftest.$ac_objext conftest2.$ac_objext
+         if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then
+           :
+         else
+           gl_cv_header_wchar_h_correct_inline=no
+         fi
+       fi
+     fi
+     rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
+    ])
+  if test $gl_cv_header_wchar_h_correct_inline = no; then
+    AC_MSG_ERROR([<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
+This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
+C99 mode. You have four options:
+  - Add the flag -fgnu89-inline to CC and reconfigure, or
+  - Fix your include files, using parts of
+    <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
+  - Use a gcc version older than 4.3, or
+  - Don't use the flags -std=c99 or -std=gnu99.
+Configuration aborted.])
+  fi
+])
+
+dnl Unconditionally enables the replacement of <wchar.h>.
+AC_DEFUN([gl_REPLACE_WCHAR_H],
+[
+  dnl This is a no-op, because <wchar.h> is always overridden.
+  :
+])
+
+AC_DEFUN([gl_WCHAR_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+  GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR([$1])
+])
+
+AC_DEFUN([gl_WCHAR_H_DEFAULTS],
+[
+  GNULIB_BTOWC=0;      AC_SUBST([GNULIB_BTOWC])
+  GNULIB_WCTOB=0;      AC_SUBST([GNULIB_WCTOB])
+  GNULIB_MBSINIT=0;    AC_SUBST([GNULIB_MBSINIT])
+  GNULIB_MBRTOWC=0;    AC_SUBST([GNULIB_MBRTOWC])
+  GNULIB_MBRLEN=0;     AC_SUBST([GNULIB_MBRLEN])
+  GNULIB_MBSRTOWCS=0;  AC_SUBST([GNULIB_MBSRTOWCS])
+  GNULIB_MBSNRTOWCS=0; AC_SUBST([GNULIB_MBSNRTOWCS])
+  GNULIB_WCRTOMB=0;    AC_SUBST([GNULIB_WCRTOMB])
+  GNULIB_WCSRTOMBS=0;  AC_SUBST([GNULIB_WCSRTOMBS])
+  GNULIB_WCSNRTOMBS=0; AC_SUBST([GNULIB_WCSNRTOMBS])
+  GNULIB_WCWIDTH=0;    AC_SUBST([GNULIB_WCWIDTH])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_BTOWC=1;         AC_SUBST([HAVE_BTOWC])
+  HAVE_MBSINIT=1;       AC_SUBST([HAVE_MBSINIT])
+  HAVE_MBRTOWC=1;       AC_SUBST([HAVE_MBRTOWC])
+  HAVE_MBRLEN=1;        AC_SUBST([HAVE_MBRLEN])
+  HAVE_MBSRTOWCS=1;     AC_SUBST([HAVE_MBSRTOWCS])
+  HAVE_MBSNRTOWCS=1;    AC_SUBST([HAVE_MBSNRTOWCS])
+  HAVE_WCRTOMB=1;       AC_SUBST([HAVE_WCRTOMB])
+  HAVE_WCSRTOMBS=1;     AC_SUBST([HAVE_WCSRTOMBS])
+  HAVE_WCSNRTOMBS=1;    AC_SUBST([HAVE_WCSNRTOMBS])
+  HAVE_DECL_WCTOB=1;    AC_SUBST([HAVE_DECL_WCTOB])
+  HAVE_DECL_WCWIDTH=1;  AC_SUBST([HAVE_DECL_WCWIDTH])
+  REPLACE_MBSTATE_T=0;  AC_SUBST([REPLACE_MBSTATE_T])
+  REPLACE_BTOWC=0;      AC_SUBST([REPLACE_BTOWC])
+  REPLACE_WCTOB=0;      AC_SUBST([REPLACE_WCTOB])
+  REPLACE_MBSINIT=0;    AC_SUBST([REPLACE_MBSINIT])
+  REPLACE_MBRTOWC=0;    AC_SUBST([REPLACE_MBRTOWC])
+  REPLACE_MBRLEN=0;     AC_SUBST([REPLACE_MBRLEN])
+  REPLACE_MBSRTOWCS=0;  AC_SUBST([REPLACE_MBSRTOWCS])
+  REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS])
+  REPLACE_WCRTOMB=0;    AC_SUBST([REPLACE_WCRTOMB])
+  REPLACE_WCSRTOMBS=0;  AC_SUBST([REPLACE_WCSRTOMBS])
+  REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS])
+  REPLACE_WCWIDTH=0;    AC_SUBST([REPLACE_WCWIDTH])
+])
index fb27a7f65f46e0f23b883d01e9e74f84e13595b5..ed804e664ba7933d42051ff3f240e82f9d787998 100644 (file)
@@ -1,5 +1,5 @@
 # wchar_t.m4 serial 3 (gettext-0.18)
-dnl Copyright (C) 2002-2003, 2008, 2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2003, 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 22d94336716898f66e8381197b050c29b772bf14..19c0c5fe90ea035578b3511746d050e437f5574f 100644 (file)
@@ -1,5 +1,5 @@
-# wcrtomb.m4 serial 2
-dnl Copyright (C) 2008 Free Software Foundation, Inc.
+# wcrtomb.m4 serial 4
+dnl Copyright (C) 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -9,12 +9,16 @@ AC_DEFUN([gl_FUNC_WCRTOMB],
   AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
 
   AC_REQUIRE([AC_TYPE_MBSTATE_T])
+  gl_MBSTATE_T_BROKEN
+  if test $REPLACE_MBSTATE_T = 1; then
+    REPLACE_WCRTOMB=1
+  fi
   AC_CHECK_FUNCS_ONCE([wcrtomb])
   if test $ac_cv_func_wcrtomb = no; then
     HAVE_WCRTOMB=0
-  else
-
-    dnl On OSF/1 5.1 and Solaris 10, wcrtomb (NULL, 0, NULL) sometimes
+  fi
+  if test $HAVE_WCRTOMB != 0 && test $REPLACE_WCRTOMB != 1; then
+    dnl On AIX 4.3, OSF/1 5.1 and Solaris 10, wcrtomb (NULL, 0, NULL) sometimes
     dnl returns 0 instead of 1.
     AC_REQUIRE([AC_PROG_CC])
     AC_REQUIRE([gt_LOCALE_FR])
@@ -29,10 +33,10 @@ AC_DEFUN([gl_FUNC_WCRTOMB],
         dnl is present.
 changequote(,)dnl
         case "$host_os" in
-                           # Guess no on OSF/1 and Solaris.
-          osf* | solaris*) gl_cv_func_wcrtomb_retval="guessing no" ;;
-                           # Guess yes otherwise.
-          *)               gl_cv_func_wcrtomb_retval="guessing yes" ;;
+                                   # Guess no on AIX 4, OSF/1 and Solaris.
+          aix4* | osf* | solaris*) gl_cv_func_wcrtomb_retval="guessing no" ;;
+                                   # Guess yes otherwise.
+          *)                       gl_cv_func_wcrtomb_retval="guessing yes" ;;
         esac
 changequote([,])dnl
         if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then
@@ -67,7 +71,7 @@ int main ()
 }],
             [gl_cv_func_wcrtomb_retval=yes],
             [gl_cv_func_wcrtomb_retval=no],
-            [])
+            [:])
         fi
       ])
     case "$gl_cv_func_wcrtomb_retval" in
diff --git a/m4/wctype.m4 b/m4/wctype.m4
deleted file mode 100644 (file)
index 6a1b6f0..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-# wctype.m4 serial 2
-
-dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it.
-
-dnl Copyright (C) 2006-2008 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl Written by Paul Eggert.
-
-AC_DEFUN([gl_WCTYPE_H],
-[
-  AC_REQUIRE([AC_PROG_CC])
-  AC_CHECK_FUNCS_ONCE([iswcntrl])
-  if test $ac_cv_func_iswcntrl = yes; then
-    HAVE_ISWCNTRL=1
-  else
-    HAVE_ISWCNTRL=0
-  fi
-  AC_SUBST([HAVE_ISWCNTRL])
-  AC_CHECK_HEADERS_ONCE([wctype.h])
-  AC_REQUIRE([AC_C_INLINE])
-
-  AC_REQUIRE([gt_TYPE_WINT_T])
-  if test $gt_cv_c_wint_t = yes; then
-    HAVE_WINT_T=1
-  else
-    HAVE_WINT_T=0
-  fi
-  AC_SUBST([HAVE_WINT_T])
-
-  WCTYPE_H=wctype.h
-  if test $ac_cv_header_wctype_h = yes; then
-    if test $ac_cv_func_iswcntrl = yes; then
-      dnl Linux libc5 has an iswprint function that returns 0 for all arguments.
-      dnl The other functions are likely broken in the same way.
-      AC_CACHE_CHECK([whether iswcntrl works], [gl_cv_func_iswcntrl_works],
-        [
-          AC_TRY_RUN([#include <stddef.h>
-                      #include <stdio.h>
-                      #include <time.h>
-                      #include <wchar.h>
-                      #include <wctype.h>
-                      int main () { return iswprint ('x') == 0; }],
-            [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no],
-            [AC_TRY_COMPILE([#include <stdlib.h>
-                          #if __GNU_LIBRARY__ == 1
-                          Linux libc5 i18n is broken.
-                          #endif], [],
-              [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no])
-            ])
-        ])
-      if test $gl_cv_func_iswcntrl_works = yes; then
-        WCTYPE_H=
-      fi
-    fi
-    dnl Compute NEXT_WCTYPE_H even if WCTYPE_H is empty,
-    dnl for the benefit of builds from non-distclean directories.
-    gl_CHECK_NEXT_HEADERS([wctype.h])
-    HAVE_WCTYPE_H=1
-  else
-    HAVE_WCTYPE_H=0
-  fi
-  AC_SUBST([HAVE_WCTYPE_H])
-  AC_SUBST([WCTYPE_H])
-
-  if test "$gl_cv_func_iswcntrl_works" = no; then
-    REPLACE_ISWCNTRL=1
-  else
-    REPLACE_ISWCNTRL=0
-  fi
-  AC_SUBST([REPLACE_ISWCNTRL])
-])
diff --git a/m4/wctype_h.m4 b/m4/wctype_h.m4
new file mode 100644 (file)
index 0000000..83daffc
--- /dev/null
@@ -0,0 +1,69 @@
+# wctype_h.m4 serial 5
+
+dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it.
+
+dnl Copyright (C) 2006-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert.
+
+AC_DEFUN([gl_WCTYPE_H],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_CHECK_FUNCS_ONCE([iswcntrl])
+  if test $ac_cv_func_iswcntrl = yes; then
+    HAVE_ISWCNTRL=1
+  else
+    HAVE_ISWCNTRL=0
+  fi
+  AC_SUBST([HAVE_ISWCNTRL])
+  AC_CHECK_HEADERS_ONCE([wctype.h])
+  AC_REQUIRE([AC_C_INLINE])
+
+  AC_REQUIRE([gt_TYPE_WINT_T])
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+  AC_SUBST([HAVE_WINT_T])
+
+  if test $ac_cv_header_wctype_h = yes; then
+    if test $ac_cv_func_iswcntrl = yes; then
+      dnl Linux libc5 has an iswprint function that returns 0 for all arguments.
+      dnl The other functions are likely broken in the same way.
+      AC_CACHE_CHECK([whether iswcntrl works], [gl_cv_func_iswcntrl_works],
+        [
+          AC_RUN_IFELSE([AC_LANG_SOURCE([[
+                            #include <stddef.h>
+                            #include <stdio.h>
+                            #include <time.h>
+                            #include <wchar.h>
+                            #include <wctype.h>
+                            int main () { return iswprint ('x') == 0; }]])],
+            [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no],
+            [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
+                          #if __GNU_LIBRARY__ == 1
+                          Linux libc5 i18n is broken.
+                          #endif]], [])],
+              [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no])
+            ])
+        ])
+    fi
+    gl_CHECK_NEXT_HEADERS([wctype.h])
+    HAVE_WCTYPE_H=1
+  else
+    HAVE_WCTYPE_H=0
+  fi
+  AC_SUBST([HAVE_WCTYPE_H])
+
+  if test "$gl_cv_func_iswcntrl_works" = no; then
+    REPLACE_ISWCNTRL=1
+  else
+    REPLACE_ISWCNTRL=0
+  fi
+  AC_SUBST([REPLACE_ISWCNTRL])
+])
index 4bedefae69a34cb83f474c8fab1c54087b830f42..ef5404eab99703b9df2b7a36c30eee8be5a3f493 100644 (file)
@@ -1,5 +1,5 @@
-# wcwidth.m4 serial 14
-dnl Copyright (C) 2006-2008 Free Software Foundation, Inc.
+# wcwidth.m4 serial 15
+dnl Copyright (C) 2006-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -7,6 +7,7 @@ dnl with or without modifications, as long as this notice is preserved.
 AC_DEFUN([gl_FUNC_WCWIDTH],
 [
   AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
 
   dnl Persuade glibc <wchar.h> to declare wcwidth().
   AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
@@ -68,7 +69,15 @@ int main ()
       return 1;
   return 0;
 }], [gl_cv_func_wcwidth_works=yes], [gl_cv_func_wcwidth_works=no],
-          [gl_cv_func_wcwidth_works="guessing no"])
+          [
+changequote(,)dnl
+           case "$host_os" in
+                     # Guess yes on glibc systems.
+             *-gnu*) gl_cv_func_wcwidth_works="guessing yes";;
+             *)      gl_cv_func_wcwidth_works="guessing no";;
+           esac
+changequote([,])dnl
+          ])
       ])
     case "$gl_cv_func_wcwidth_works" in
       *yes) ;;
index 47a4363d79041b6481ed781bcbe798dc1b171ec9..a6c7d15cb50a60c46df73caef95f0fd1a0034809 100644 (file)
@@ -1,5 +1,5 @@
 # wint_t.m4 serial 4 (gettext-0.18)
-dnl Copyright (C) 2003, 2007-2009 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2007-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 812b19b3b07ee5889766974cb733fccaacf325f5..56325aba9fa84c233a0d99eccf13ffba7ae2fdc2 100644 (file)
@@ -1,5 +1,5 @@
 # write.m4 serial 1
-dnl Copyright (C) 2008 Free Software Foundation, Inc.
+dnl Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 837a948c1dab6a9013cacb8516684fefb505dfc2..83247fe329c2225b18944d5e154661a0b4ea5d16 100644 (file)
@@ -1,5 +1,6 @@
 # xalloc.m4 serial 16
-dnl Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+dnl Copyright (C) 2002, 2003, 2004, 2005, 2006, 2009, 2010 Free Software
+dnl Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index d8609d124cea3c20cbbb3d663e46c83e2d5f9f72..fd534f6d147e6c2d36b47253b6ec0e8039822954 100644 (file)
@@ -1,5 +1,5 @@
 #serial 6
-dnl Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2006, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 631893cf59f8a73fe279f39908d421f5dbd8a2e5..b653693a3029cb835e98c0d02be9683926e26e00 100644 (file)
@@ -1,5 +1,5 @@
 # xsize.m4 serial 4
-dnl Copyright (C) 2003-2004, 2008 Free Software Foundation, Inc.
+dnl Copyright (C) 2003-2004, 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 8a30ab158d318170fb096cf052cd72dd207b9836..74302cc951c714041d1908a44ff8f1aa8e77512d 100644 (file)
@@ -1,5 +1,5 @@
 # xstrndup.m4 serial 2
-dnl Copyright (C) 2003 Free Software Foundation, Inc.
+dnl Copyright (C) 2003, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 1fdcf717f5a7761619d0b828fb05abe0dbfc6972..25ab9b3fa10747a9ce9cc3cbd2f8778bb985821f 100644 (file)
@@ -1,6 +1,5 @@
 #serial 10
-dnl Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software
-dnl Foundation, Inc.
+dnl Copyright (C) 2002-2007, 2009-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/m4/xvasprintf.m4 b/m4/xvasprintf.m4
new file mode 100644 (file)
index 0000000..bd5200f
--- /dev/null
@@ -0,0 +1,11 @@
+# xvasprintf.m4 serial 1
+dnl Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_XVASPRINTF],
+[
+  dnl Prerequisites of lib/xvasprintf.c.
+  AC_REQUIRE([AC_C_INLINE])
+])
index 3a3491f66677eb13e8b95eb6f11cea7a67c0c2df..b459793b6963f4d3025447ed33829d6743d11c00 100644 (file)
@@ -11,7 +11,7 @@ top_builddir = ..
 
 # These options get passed to xgettext.
 XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ \
-       \
+         \
  --flag=_:1:pass-c-format\
  --flag=N_:1:pass-c-format\
  --flag=error:3:c-format --flag=error_at_line:5:c-format\
index bcf24017a7c18c86eee6c4939505cc619606b123..cd48b268a8871bb2b8412627d60867370d8ead14 100644 (file)
 # 02110-1301, USA.
 
 # Library files
-lib/argmatch.c
-lib/argp-help.c
-lib/argp-parse.c
-lib/closeout.c
-lib/error.c
-lib/getopt.c
-lib/obstack.c
-lib/human.c
-lib/obstack.c
-lib/openat-die.c
+gnu/argmatch.c
+gnu/argp-help.c
+gnu/argp-parse.c
+gnu/closeout.c
+gnu/error.c
+gnu/getopt.c
+gnu/obstack.c
+gnu/human.c
+gnu/obstack.c
+gnu/openat-die.c
+gnu/quotearg.c
+gnu/rpmatch.c
+gnu/xalloc-die.c
+gnu/xmalloc.c
+gnu/version-etc.c
+gnu/xalloc-die.c
+
 lib/paxerror.c
 lib/paxexit.c
 lib/paxnames.c
-lib/quotearg.c
-lib/rpmatch.c
 lib/rtapelib.c
-lib/xalloc-die.c
-lib/xmalloc.c
-lib/version-etc.c
-lib/xalloc-die.c
 
 rmt/rmt.c
 
index f295b6d7f90214c01c9885801acf4f2131246ff9..a156b003e844e376608c928f2181f6e11ee42975 100644 (file)
Binary files a/po/bg.gmo and b/po/bg.gmo differ
index 84042ac8f0c3384f81c1af50eb65f04238ec8391..fc61453d8e2437f87dcd1bc12810eda65534b0f0 100644 (file)
--- a/po/bg.po
+++ b/po/bg.po
@@ -13,7 +13,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tar 1.16\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
 "PO-Revision-Date: 2006-11-23 22:40+0200\n"
 "Last-Translator: Anton Zinoviev <zinoviev@debian.org>\n"
 "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
@@ -22,47 +22,47 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "неправилен аргумент %s за %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "двусмислен аргумент %s за %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Допустими аргументи са:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: стойността %s е по-малка или равна на %s"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: параметърът ARGP_HELP_FMT изисква стойност"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: параметърът ARGP_HELP_FMT трябва да бъде положителен"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: непознат параметър ARGP_HELP_FMT"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Боклук в ARGP_HELP_FMT: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -70,239 +70,145 @@ msgstr ""
 "Аргументите, задължителните или незадължителни за дългите опции, са "
 "съответно задължителни или незадължителни и за кратките опции."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Използване:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr "  или: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [ОПЦИЯ...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Използвайте „%s --help“ or „%s --usage“ за повече информация.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr ""
 "Съобщавайте за програмни грешки на %s.\n"
 "За грешки в българския превод на <dict@fsa-bg.org>.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Непозната системна грешка"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "показва тази справка"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "показва кратко съобщение за използването"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "ИМЕ"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "посочва името на програмата"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "СЕК"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "спира за СЕК секунди (подразбира се 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "показва версията на програмата"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(ДЕФЕКТ В ПРОГРАМАТА) Не е известна версията!?"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: Твърде много аргументи\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr "(ДЕФЕКТ В ПРОГРАМАТА) Опцията би трябвало да е била разпозната!?"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr ""
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: опцията „%s“ е двусмислена\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: опцията „--%s“ не допуска аргумент\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: опцията „%c%s“ не допуска аргумент\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: опцията „%s“ изисква аргумент\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: непозната опция „--%s“\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: непозната опция „%c%s“\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: неправилна опция -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: неправилна опция -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: опцията изисква аргумент -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: опцията „-W %s“ е двусмислена\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: опцията „-W %s“ не допуска аргумент\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "паметта е изчерпана"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, fuzzy, c-format
 msgid "unable to record current working directory"
 msgstr "Не може да се смени работният каталог"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, fuzzy, c-format
 msgid "failed to return to initial working directory"
 msgstr "Не може да се запази работният каталог"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Функцията %s не успя"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Внимание: Функцията %s не успя"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Режимът за достъп не може да се смени на %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Собствеността не може да се смени на потребител %lu, група %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Не може да се направи твърда връзка с %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Грешка при четене при байт %s, при четенето на %lu байт"
-msgstr[1] "%s: Грешка при четене при байт %s, при четенето на %lu байта"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] ""
-"%s: Внимание: Грешка при четене при байт %s, при четенето на %lu байт"
-msgstr[1] ""
-"%s: Внимание: Грешка при четене при байт %s, при четенето на %lu байта"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Не може да се отиде на отместване %s във файла"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Внимание: Не може да се отиде на отместване %s във файла"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Не може да се направи символна връзка към %s"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Записани са само %lu от %lu байт"
-msgstr[1] "%s: Записани са само %lu от %lu байта"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Премахва се началното „%s“ от имената на членове"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Премахва се началното „%s“ от целите на твърдите връзки"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Полага се „.“ вместо празно име на член"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Полага се „.“ вместо празна цел на твърда връзка"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -316,17 +222,17 @@ msgstr "Полага се „.“ вместо празна цел на твър
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "„"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "“"
 
@@ -336,7 +242,7 @@ msgstr "“"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[дДoOyY]"
 
@@ -346,38 +252,28 @@ msgstr "^[дДoOyY]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[нНkKnN]"
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Услугата не е достъпна"
-
-#: lib/rtapelib.c:303
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdin"
-msgstr "стандартен вход"
-
-#: lib/rtapelib.c:306
-#, c-format
-msgid "stdout"
-msgstr "стандартен изход"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Не може да се стартира отдалечена командна обвивка"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -388,19 +284,19 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr ""
@@ -408,7 +304,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -418,7 +314,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -428,7 +324,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -438,7 +334,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -448,7 +344,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -459,7 +355,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -470,7 +366,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -482,182 +378,334 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
-#, c-format
+#: gnu/version-etc.c:247
+#, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
+msgstr ""
+"Съобщавайте за програмни грешки на %s.\n"
+"За грешки в българския превод на <dict@fsa-bg.org>.\n"
+
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
 "\n"
 "Съобщавайте за програмни грешки на <%s>.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "Входният низ е твърде дълъг"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+msgstr ""
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "Синтактична грешка в число"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Функцията %s не успя"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Не може да се задели място за буфер\n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Внимание: Функцията %s не успя"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Не може да се задели място за буфер"
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Режимът за достъп не може да се смени на %s"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:101
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Използвайте „%s --help“ за повече информация.\n"
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Собствеността не може да се смени на потребител %lu, група %lu"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:127
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Не може да се направи твърда връзка с %s"
+
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Грешка при четене при байт %s, при четенето на %lu байт"
+msgstr[1] "%s: Грешка при четене при байт %s, при четенето на %lu байта"
+
+#: lib/paxerror.c:192
+#, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] ""
+"%s: Внимание: Грешка при четене при байт %s, при четенето на %lu байт"
+msgstr[1] ""
+"%s: Внимание: Грешка при четене при байт %s, при четенето на %lu байта"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Не може да се отиде на отместване %s във файла"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Внимание: Не може да се отиде на отместване %s във файла"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Не може да се направи символна връзка към %s"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Записани са само %lu от %lu байт"
+msgstr[1] "%s: Записани са само %lu от %lu байта"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Премахва се началното „%s“ от имената на членове"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Премахва се началното „%s“ от целите на твърдите връзки"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Полага се „.“ вместо празно име на член"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Полага се „.“ вместо празна цел на твърда връзка"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Услугата не е достъпна"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "стандартен вход"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "стандартен изход"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Използване: %s [ОПЦИЯ]\n"
-"Управлява лентово устройство, приемайки команди от отделен процес.\n"
-"\n"
-"  --version  Извежда информация за версията.\n"
-"  --help     Извежда тази справка.\n"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "Грешка при позициониране"
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Не може да се стартира отдалечена командна обвивка"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Посоката за отместване е недопустима"
+
+#: rmt/rmt.c:419
+#, fuzzy
+msgid "Invalid seek direction"
+msgstr "На опция е подаден неправилен режим"
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Неправилен размер: %s"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Мястото за позициониране е извън допустимия диапазон"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Посоката за отместване е недопустима"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Неправилна дължина на лента"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Мястото за позициониране е извън допустимия диапазон"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: Преждевременен край (eof)\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Преждевременен край на файла"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "Вид основно действие:"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Неочакван EOF"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "N"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "ФАЙЛ"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "Не може да се отвори „%s“"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "твърде много аргументи"
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Непозната команда"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Това не прилича на tar-архив"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Общо записани байтове"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "Общо прочетени байтове"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Общо изтрити байтове: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(канал)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Неправилна стойност на record_size"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Не е посочено име на архив"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Не може да се проверяват архиви на стандартните вход/изход"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "Архивът е компресиран.  Използвайте опцията %s"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Не може да се актуализират компресирани архиви"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "В началото на лентата, край на изпълнението"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Твърде много грешки, край на изпълнението"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Размер на записа = %lu блок"
 msgstr[1] "Размер на записа = %lu блока"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Неподравнен блок (%lu байт) в архива"
 msgstr[1] "Неподравнен блок (%lu байта) в архива"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr ""
 "Невъзможно е връщане назад в архивния файл; той може да е нечитаем без опция "
 "-i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek не завърши при граница на запис"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: съдържа неправилен номер на том"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Препълване на номера на том"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Подгответе том №%d за %s и натиснете return: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "EOF, когато се очакваше отговор от потребителя"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "ВНИМАНИЕ: Архивът е незавършен"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -669,66 +717,66 @@ msgstr ""
 " q             Прекратява tar\n"
 " y или return  Продължава изпълнението\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !             Поражда вторична командна обвивка\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?             Извежда този списък\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Няма повече томове; изход.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "Не е посочено име на файл.  Опитайте отново.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "Неправилна команда.  Използвайте ? за справка.\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "командата %s не успя"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr ""
 "%s вероятно продължава в този том: заглавният запис съдържа отрязано име"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s не продължава с този том"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s е грешен размер (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, fuzzy, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Този том е извън поредицата"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Архивът не е етикетиран да отговаря на %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Томът %s не съответства на %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
@@ -736,61 +784,61 @@ msgstr ""
 "%s: името на файла е твърде дълго, за да се побере в заглавен запис на "
 "многотомен ГНУ-архив и бе съкратено"
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 #, fuzzy
 msgid "write did not end on a block boundary"
 msgstr "EOF на архив %s не е на границата на блок"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Само %lu от %lu байт можаха да се прочетат"
 msgstr[1] "Само %lu от %lu байта можаха да се прочетат"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Съдържанието се различава"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Неочакван знак за край (EOF) в архива"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Файловите типове се различават"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Режимите за достъп се различават"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Собствениците се различават"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Групите се различават"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Времената на промяна се различават"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Размерите се различават"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Не е свързан с %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Символните връзки се различават"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Номерата на устройство се различават"
 
@@ -812,35 +860,35 @@ msgstr "Архивът съдържа файлови имена, с отстра
 msgid "Verification may fail to locate original files."
 msgstr "Проверката може и да не открие оригиналните файлове."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "НЕУСПЕШНА ПРОВЕРКА: открита е %d неправилен заглавен запис"
 msgstr[1] "НЕУСПЕШНА ПРОВЕРКА: открити са %d неправилни заглавни записа"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "Изолиран блок от нули при %s"
 
-#: src/create.c:67
+#: src/create.c:68
 #, fuzzy, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: каталогът е обозначен като кеш; не се архивира"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr ""
 "стойността на %s е извън границите %s на диапазона %s..%s; замества се с %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "стойността %s е извън границите %s на диапазона %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Генерират се отрицателни осмични заглавни записи"
 
@@ -860,291 +908,277 @@ msgstr ""
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: името на символната връзка е твърде дълго; не е архивирано"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: Файлът намаля с %s байт; допълва се с нула"
 msgstr[1] "%s: Файлът намаля с %s байта; допълва се с нули"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: файлът е в друга файлова система; не се архивира"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr ""
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Непознат файлов тип; файлът се пренебрегва"
 
-#: src/create.c:1464
-#, c-format
-msgid "Missing links to %s.\n"
+#: src/create.c:1472
+#, fuzzy, c-format
+msgid "Missing links to %s."
 msgstr "Неархивирани връзки с %s.\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: файлът не е променен; не се архивира"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: файлът е архив; не се архивира"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Файлът бе изтрит преди да бъде прочетен"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 #, fuzzy
 msgid "directory not dumped"
 msgstr "%s: каталогът е обозначен като кеш; не се архивира"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: файлът бе изменен по време на четене"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: гнездото се пренебрегва"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: пренебрегва се специалният файл тип door"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Пропуска се до следващия заглавен запис"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Изтрива се незаглавен запис от архива"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: записано е невероятно старо време %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: записано е време %s, което е %s сек. в бъдещето"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Неочаквана несъгласуваност при създаване на каталог"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr ""
 "%s: каталогът бе преименуван преди да може да се извлече състоянието му"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Продължаващи файлове се извличат като обикновени файлове"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Опитва се извличането на символни връзки като твърди"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Чете се %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Не може да се извлича -- файлът продължава с друг том"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "Неочаквано дълъг заглавен запис"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Непознат файлов тип „%c“, извлича се като обикновен файл"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "Текущият %s е по-нов или със същата възраст"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Не можа да се направи резервно копие на този файл"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "Бе невъзможно %s да се преименува на %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Грешката е непоправима: край на изпълнението"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Каталогът бе преименуват от %s"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Каталогът бе преименуван"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Каталогът е нов"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Записано е неправилно време"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Неправилно време на промяна (секунди)"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "Неправилно време на промяна (наносекунди)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Неправилен номер на устройство"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Неправилен номер на i-възел"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "Твърде дълго поле при четене на snapshot-файл"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "Грешка при четене в snapshot-файл"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "Неочакван край на snapshot-файл"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "Неочаквана стойност на поле в snapshot-файл"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "Липсва завършител на записа"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "Грешен инкрементален файлов формат"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr "Неподдържана версия на инкрементален формат: %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr "Лошо формиран dumpdir: очаква се „%c“, а вместо това има %#3o"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "Лошо формиран dumpdir: „X“ е дублиран"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "Лошо формиран dumpdir: празно име в „R“"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "Лошо формиран dumpdir: „T“ не се предхожда от „R“"
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "Лошо формиран dumpdir: празно име в „T“"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr "Лошо формиран dumpdir: очаква се „%c“, вместо това данните свършват"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr "Лошо формиран dumpdir: „X“ никога не се използва"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Не може да се създаде временен каталог, използвайки шаблона %s"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: Каталогът не се изчиства: не може да се достъпи"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: каталогът е на друго устройство: не се изчиства"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Изтрива се %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Не може да се изтрие"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Пропуска се"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "блок %s: ** Блок от знаци NUL **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "блок %s: ** Край на файла **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "блок %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Интервали в заглавен запис вместо числова стойност на %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1152,142 +1186,159 @@ msgstr ""
 "е допълнение до две"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Осмичната стойност %.*s в архива е извън диапазона за %s"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Архивът съдържа архаични заглавни записи по модул 64 (6 битови)"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr ""
 "Архивът е подписан с низ по модул 64 %s, който е е извън диапазона за %s"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Стойността по модул 256 в архива е извън диапазона %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Архивът съдържа %.*s, вместо това се очаква числова стойност на %s"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Стойността %s в архива е извън допустимия диапазон за %s (%s..%s)"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " връзка към %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " непознат файлов тип %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Дълга връзка--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Дълго име--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Заглавен запис на тома--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Продължава при байт %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Създава се каталог:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Преименува се %s на %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Не може да се преименува на %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Преименува се %s обратно на %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Не може да се запази работният каталог"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Не може да се смени работният каталог"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Файлът бе изтрит преди да бъде прочетен"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Файлът бе изтрит преди да бъде прочетен"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "породен процес"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "междупроцесен канал"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr "Във файловите имена са използвани „*“ и „?“.  Моля,"
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr "използвайте --wildcards, за да позволите съпоставяне с образци,"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "или --no-wildcards, за да не се извежда това предупреждение."
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Не е открит в архива"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Необходимо срещане не е открито в архива"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "И двете опции „-%s“ и „-%s“ изискват стандартен вход"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Неправилен архивен формат"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "Поискани са ГНУ-възможности при несъвместим архивен формат"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
@@ -1295,7 +1346,7 @@ msgstr ""
 "Непознат начин за извеждане на спец. знаци „%s“. Използвайте „%s --quoting-"
 "style=help“, за да получите списък."
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1314,7 +1365,7 @@ msgstr ""
 "tar\n"
 "  tar -xf архив.tar            # Извлича от архив.tar всички файлове\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1336,86 +1387,79 @@ msgstr ""
 "иначе\n"
 "  never, simple   винаги да се правят прости резервни копия\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Вид основно действие:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "изрежда съдържанието на архив"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "извлича файлове от архива"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "създава нов архив"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "намира разликите между архива и файловата система"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "добавя файлове в края на архив"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "добавя само файлове, по-нови от копието в архива"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "прибавя tar-файлове към архива"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "трие файлове от архива (не при магнитни ленти!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr "проверява етикета на тома и завършва"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Модификатори на действието:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "работи ефективно с разредени файлове"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr "ГОЛЯМ[.МАЛЪК]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr "определя версията на формата разредени файлове (влече --sparse)"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "със стар формат ГНУ за инкрементално архивиране"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "ФАЙЛ"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "с новия формат на ГНУ за инкрем. архивиране"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr ""
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "при нечитаеми файлове не завършва с грешка"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "N"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1427,118 +1471,122 @@ msgstr ""
 "list и когато списъкът от файлове е зададен или на командния ред, или с "
 "опция -T.  Ако не е посочен N, се подразбира 1."
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "архивът е с произволен достъп"
 
-#: src/tar.c:418
+#: src/tar.c:436
+#, fuzzy
+msgid "archive is not seekable"
+msgstr "архивът е с произволен достъп"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "Регулиране заместването на файлове:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "след записа опитва да провери архива"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "изтрива файловете след като ги добави в архива"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "при извличане не замества съществуващи файлове"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 "не замества съществуващи файлове, ако са по-нови от копията им в архива"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "при извличане замества съществуващи файлове"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "изтрива всеки файл преди да извлича върху него"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "изпразва йерархията преди извличане на каталог"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "запазва метаданните на съществуващи каталози"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 "при извличане замества метаданните на съществуващи каталози (подразбира се)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Избор на изходен поток:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "извлича файловете на стандартния изход"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "КОМАНДА"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "подава с канал всеки извлечен файл към КОМАНДА"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "игнорира кода на завършване на породени процеси"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr "счита за грешка всеки ненулев код на завършване на породен процес"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Подход спрямо файловите атрибути:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "прави ИМЕ да е собственик на добавените файлове"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "прави ИМЕ да бъде групата на добавените файлове"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "ДАТА-ИЛИ-ФАЙЛ"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "прави времето на промяна на добавяни файлове като ДАТА-ИЛИ-ФАЙЛ"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "ПРОМЕНИ"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "модифицира режима за достъп на добавени файлове"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "МЕТОД"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1548,29 +1596,33 @@ msgstr ""
 "времената след четене (при МЕТОД=„replace“, подразбира се), или не променя "
 "имената изобщо (МЕТОД=„system“)"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "не извлича времето на промяна на файловете"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+#, fuzzy
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr "опитва да възстановява собствеността на файловете"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+#, fuzzy
+msgid "extract files as yourself (default for ordinary users)"
 msgstr "извлича файловете от ваше име"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "използва числа вместо имена за потребител и група"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 "възстановява точно (без umask) режима на достъп (подразбира се при "
 "привилегирован потребител)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
@@ -1578,15 +1630,15 @@ msgstr ""
 "прилага umask на потребителя при извличане на файлове (подразбира се при "
 "обикновен потребител)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "файловете за извличане са сортирани според архива"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "същото като едновременно -p и -s"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
@@ -1594,139 +1646,139 @@ msgstr ""
 "забавя настройката на времето на промяна и режима за достъп на извличаните "
 "каталози докато извличането завърши"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "отменя ефекта на --delay-directory-restore"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "Избор на устройство и смяна:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "АРХИВ"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "използва архивния файл или устройство АРХИВ"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "архивният файл е локален дори при двуеточие"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "използва посочената КОМАНДА вместо rmt"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "използва посочената КОМАНДА вместо rsh"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "посочва устройство и гъстота"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "създава/извежда/извлича многотомен архив"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "смяна на лентата след запис на 1024 x N байта"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "изпълнява скрипт в края на всяка лента (влече -M)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "ползва от и обновява във ФАЙЛ номера на тома"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Блокуване на устройството:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "БЛОКОВЕ"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "БЛОКОВЕ x 512 байта в секунда"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "прави N-байтови записи, кратно на 512"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "пренебрегва блоковете от нули и продължава"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "преформира при четене блоковете (канали 4.2BSD)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Избор на архивен формат:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "ФОРМАТ"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "създава архив с посочения формат"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "ФОРМАТ е някой от следните:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "стар формат tar, V7"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "формат на ГНУ при tar <= 1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "формат на версия 1.13.x на tar на ГНУ"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "формат POSIX 1003.1-1988 (ustar)"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "формат POSIX 1003.1-2001 (pax)"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "същото като pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "същото като --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "същото като --format=posix"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "ключдума[[:]=стойност][,ключдума[[:]=стойност]]..."
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "управляващи ключови думи за pax"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "ТЕКСТ"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
@@ -1734,199 +1786,176 @@ msgstr ""
 "създава архив с име на том ТЕКСТ; при извеждане или извличане сравнява името "
 "на тома с ТЕКСТ"
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Противоречащи си опции за компресиране"
 
-#: src/tar.c:595
+#: src/tar.c:615
 #, fuzzy
 msgid "use archive suffix to determine the compression program"
 msgstr "Не може да се пише към компресиращата програма"
 
-#: src/tar.c:597
+#: src/tar.c:617
 #, fuzzy
 msgid "do not use archive suffix to determine the compression program"
 msgstr "Не може да се пише към компресиращата програма"
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "прекарва архива през bzip2"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "прекарва архива през gzip"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "прекарва архива през compress"
-
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "прекарва архива през gzip"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "прекарва архива през gzip"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "прекарва архива през gzip"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "ПРОГ"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "прекарва архива през ПРОГ (трябва да приема -d)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Избор на локален файл:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 "добавя посочения ФАЙЛ към архива (полезно е, ако името му започва с минус)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "КАТ"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "работи в каталога КАТ"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "взема имената за извличане или създаване от ФАЙЛ"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T чете имена, завършващи с нулев байт"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr "декодира „\\“ във файловите имена на -T (подразб.)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr "не декодира „\\“ във файловите имена на -T"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "ОБРАЗЕЦ"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "без файловете, отговарящи на ОБРАЗЕЦ"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "пропуска файловете, отговарящи на образци в ФАЙЛ"
 
-#: src/tar.c:641
+#: src/tar.c:657
 #, fuzzy
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr "без каталози, обозначени като кеширащи"
 
-#: src/tar.c:644
+#: src/tar.c:660
 #, fuzzy
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "без каталози, обозначени като кеширащи"
 
-#: src/tar.c:647
+#: src/tar.c:663
 #, fuzzy
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "без каталози, обозначени като кеширащи"
 
-#: src/tar.c:649
+#: src/tar.c:665
 #, fuzzy
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr "без каталози, обозначени като кеширащи"
 
-#: src/tar.c:652
+#: src/tar.c:668
 #, fuzzy
 msgid "exclude everything under directories containing FILE"
 msgstr "без каталози, обозначени като кеширащи"
 
-#: src/tar.c:654
+#: src/tar.c:670
 #, fuzzy
 msgid "exclude directories containing FILE"
 msgstr "без каталози, обозначени като кеширащи"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "без автоматично влизане в подкаталозите"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "работи в рамките на локалната файлова система"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "влиза рекурсивно в подкаталозите (подразбира се)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "не маха „/“ в началото на файлови имена"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr "следва симв. връзки; архивира сочените файлове"
 
-#: src/tar.c:668
+#: src/tar.c:686
 #, fuzzy
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr "следва симв. връзки; архивира сочените файлове"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "ЧЛЕН-ИМЕ"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "започва от файл с име ЧЛЕН-ИМЕ в архива"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "съхранява само файлове, по-нови от ДАТА-ИЛИ-ФАЙЛ"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "ДАТА"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "сравнява времето само ако данните са променени"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "МЕТОД"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "резервно копира съществуващи файлове с МЕТОД"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "НИЗ"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1935,89 +1964,98 @@ msgstr ""
 "освен ако не е бил сменен с променливата от обкръжението "
 "SIMPLE_BACKUP_SUFFIX)"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr "Промени на файловите имена:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr "при извличане маха N начални каталози от файловите пътеки"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "ИЗРАЗ"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 "преобразува файловите имена, използвайки посочения ИЗРАЗ за замяна на sed"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 "Съпоставяне с файлови имена (влияе и на включващи, и на изключващи образци):"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr "пренебрегва разликата между големи/малки букви"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr "съпоставянето с образците започва от началото на файловото име"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr "съпоставянето започва след кой да е „/“ (подразбира се при изключване)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr "отчита се разликата между малки и големи букви (подразбира се)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr "ползва „*“ и „?“ (подразбира се за изключване)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "дословно низово сравнение"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr "„/“ не пасва с „*“ и „?“"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr "„/“ пасва с „*“ и „?“ (подразб. за изключване)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Извеждане на информация:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "подробно изрежда обработените файлове"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+#, fuzzy
+msgid "warning control"
+msgstr "Регулиране заместването на файлове:"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr "извежда напредъка след всеки N-ти запис (подразбира се 10)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "съобщава, ако не всички твърди връзки са включени"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "СИГНАЛ"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2028,27 +2066,27 @@ msgstr ""
 "извежда текущите байтове при получаване на СИГНАЛ.  Допустими СИГНАЛи са "
 "SIGHUP, SIGQUIT, SIGINT, SIGUSR1 и SIGUSR2; имената без SIG също са позволени"
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "извежда времената по Гринуич"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "изпраща подробния изход във ФАЙЛ"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "показва номера на блок в архива с всяко съобщение"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "изисква потвърждение за всяко действие"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "показва подразбираното от tar"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
@@ -2056,32 +2094,32 @@ msgstr ""
 "при извеждане или извличане изрежда всеки каталог, който се пропуска по "
 "някаква причина"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr "показва преобразуваните файлови имена в архива"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "НАЧИН"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 "начин за цитиране на специални знаци; вж. по-долу за стойностите на НАЧИН"
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "работи и със знаците от НИЗ като със специални"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "не работи със знаците от НИЗ като със специални"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Опции за съвместимост:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
@@ -2089,56 +2127,64 @@ msgstr ""
 "при създаване е същото като --old-archive; при извличане е същото като --no-"
 "same-owner"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Други опции:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "забранява някои потенциално опасни опции"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Не може да се използва повече от една опция „-Acdtrux“"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Противоречащи си опции за компресиране"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "Непознато име на сигнал: %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "Не е открит еталлонният файл за дата"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Използва се %s вместо непознатия файлов формат за дата %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "Опция %s: Датата „%s“ се разглежда като %s"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s: файловият списък вече е прочетен"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s: файловото име съдържа нулев байт"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "прекарва архива през gzip"
+
+#: src/tar.c:1290
+#, fuzzy
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr "Правилни аргументи за опциите --quoting-style са:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2146,159 +2192,170 @@ msgstr ""
 "\n"
 "*Този* tar подразбира следното:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Неправилен фактор за блокуване"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Неправилна дължина на лента"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+#, fuzzy
+msgid "Invalid incremental level value"
+msgstr "Грешен инкрементален файлов формат"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Повече от една ограничителна дата"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr "Неправилна версия на формат разредени файлове"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr "--atime-preserve='system' не се поддържа на тази платформа"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr "стойността на --checkpoint не е цяло число"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: Неправилна група"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "На опция е подаден неправилен режим"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Неправилно число"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Неправилен собственик"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Неправилен размер на запис"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Размерът на запис трябва да е кратен на %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Неправилен брой елементи"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr "Позволява се само една опция --to-command"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "Лошо образуван аргумент за гъстота: %s"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "Непозната гъстота: „%c“"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "Опциите „-[0-7][lmh]“ не се поддържат от *този* tar"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[ФАЙЛ]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Старата опция „%c“ изисква аргумент."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "без списък файлове опцията --occurrence е безсмислена"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "не може да се използва --occurrence при пожелания начин на работа"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Използването на много архивни файлове изисква опция „-M“"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Не може да се съчетават --listed-incremental с --newer"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+#, fuzzy
+msgid "--level is meaningless without --listed-incremental"
+msgstr "без списък файлове опцията --occurrence е безсмислена"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: Етикетът на тома е твърде дълъг (не повече от %lu байт)"
 msgstr[1] "%s: Етикетът на тома е твърде дълъг (не повече от %lu байта)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Не може да се проверяват многотомни архиви"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Не може да се проверяват компресирани архиви"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Не може да се използват многотомни компресирани архиви"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "Не може да се съединяват компресирани архиви"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr ""
 "опцията --pax-option може да се използва само при архиви във формат POSIX"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Страхлив отказ да се създава празен архив"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Опциите „-Aru“ са несъвместими с „-f -“"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Трябва да посочите поне една от опциите „-Acdtrux“"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2310,53 +2367,58 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: Файлът намаля с %s байт"
 msgstr[1] "%s: Файлът намаля с %s байта"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "Ключовата дума %s е непозната или все още не е реализирана"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Записано е време извън допустимия диапазон"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "Образецът %s не може да се използва"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "Ключовата дума %s не може да се отмени"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "Лошо формиран разширен заглавен запис: не е посочена дължина"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr "Дължината на разширен заглавен запис е извън допустимия диапазон"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "Дължината %*s на разширен заглавен запис е извън допустимия диапазон"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr "Лошо формиран разширен заглавен запис: липсва интервал след дължината"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Лошо формиран разширен заглавен запис: липсва знак за равенство"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr "Лошо формиран разширен заглавен запис: липсва знак за нов ред"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr ""
 "Пренебрегва се непознатата ключова дума „%s“ за разширен заглавен запис"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
@@ -2365,28 +2427,28 @@ msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "Разширеният заглавен запис %s=%s е извън диапазона %s..%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Неправилно формиран разширен заглавен запис: неправилен %s=%s"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Неправилно формиран разширен заглавен запис: прекомерен %s=%s"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 "Лошо формиран разширен заглавен запис: неправилен %s; очаква се разделител %c"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr ""
@@ -2428,7 +2490,7 @@ msgstr "Контролна точка при запис %u"
 msgid "Read checkpoint %u"
 msgstr "Контролна точка при четене %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
@@ -2436,90 +2498,96 @@ msgstr ""
 "genfile борави с файловете с данни за тестовия пакет GNU paxutils.\n"
 "ОПЦИИТЕ са:\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr "Опции за създаването на файл:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "РАЗМЕР"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "Създава файл с посочения РАЗМЕР"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "Запис във файл ИМЕ вместо на стандартния изход"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "Чете файловите имена от ФАЙЛ"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr "-T чете имена, завършващи с нулев байт"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 "Попълва файла с посочения ОБРАЗЕЦ. ОБРАЗЕЦ може да бъде „default“ или „zeros“"
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "Размер на блок за разреден файл"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 "Генерира разреден файл. Останалата част от командния ред дава карта на файла."
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr ""
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 #, fuzzy
 msgid "Seek to the given offset before writing data"
 msgstr "след записа опитва да провери архива"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr "Опции за файлови статистики:"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 "Извежда съдържанието на структурата stat за всеки файл. По подразбиране "
 "ФОРМАТ е: "
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr "Опции за синхронизирано изпълнение:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr " [ОПЦИЯ...]"
+
+#: tests/genfile.c:165
+#, fuzzy
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 "Изпълнява посочената КОМАНДА. Полезно с --checkpoint и някоя от --cut, --"
 "append, --touch"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 "Изпълнява посоченото действие (вж. по-долу) до достигането на контролна "
 "точка N"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr "Посочва дата за следващата опция --touch"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr "Извежда изпълнените контролни точки и кода на завършване на КОМАНДА"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
@@ -2527,7 +2595,7 @@ msgstr ""
 "Синхронизирано изпълнение на действията. Те се изпълняват когато се достигне "
 "контролната точка с номер, посочен с --checkpoint."
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
@@ -2535,149 +2603,215 @@ msgstr ""
 "Отсича ФАЙЛ до размера, определен с предхождаща опция --length (подразбира "
 "се 0)"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 "Добавя РАЗМЕР байтове към ФАЙЛ. РАЗМЕРът се определя от предхождаща опция --"
 "length."
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "Обновява времето на достъп и промяна на FILE"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "Изпълнява КОМАНДА"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "Неправилен размер: %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Номер извън допустимия диапазон: %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr "Отрицателен размер: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "не успя stat(%s)"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "Грешка при анализа на число до „%s“"
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "Непознат формат за дата"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[АРГУМ...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "Не може да се отвори „%s“"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 #, fuzzy
 msgid "cannot seek"
 msgstr "Не може да се изпълни %s"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "името на файла съдържа нулев байт"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 "не може да се създават разредени файлове на стандартния изход, използвайте "
 "опцията --file"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "неправилна маска (до „%s“)"
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr "Непознато поле „%s“"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "не може да се смени времето на „%s“"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "Не може да се отвори „%s“"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "Командата завърши успешно\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "Командата завърши с код %d\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "Командата бе прекратена със сигнал %d\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "Командата бе спряна със сигнал %d\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "Командата генерира core\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "Командата бе прекратена\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "--stat изисква файлови имена"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "твърде много аргументи"
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: неправилна опция -- %c\n"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
 #~ msgstr ""
-#~ "Внимание: опцията -I не се поддържа. Може би имате предвид -j или -T?"
+#~ "\n"
+#~ "Съобщавайте за програмни грешки на <%s>.\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Чете се %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Грешката е непоправима: край на изпълнението"
+
+#~ msgid "suppress this warning."
+#~ msgstr "или --no-wildcards, за да не се извежда това предупреждение."
+
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "прекарва архива през bzip2"
+
+#~ msgid "filter the archive through gzip"
+#~ msgstr "прекарва архива през gzip"
+
+#~ msgid "filter the archive through compress"
+#~ msgstr "прекарва архива през compress"
+
+#, fuzzy
+#~ msgid "filter the archive through lzma"
+#~ msgstr "прекарва архива през gzip"
 
 #, fuzzy
-#~ msgid "cancel effect of the previous --transform-links option"
-#~ msgstr "отменя ефекта на --delay-directory-restore"
+#~ msgid "filter the archive through lzop"
+#~ msgstr "прекарва архива през gzip"
+
+#~ msgid "Input string too long"
+#~ msgstr "Входният низ е твърде дълъг"
+
+#~ msgid "Number syntax error"
+#~ msgstr "Синтактична грешка в число"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Не може да се задели място за буфер\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Не може да се задели място за буфер"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Използвайте „%s --help“ за повече информация.\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Използване: %s [ОПЦИЯ]\n"
+#~ "Управлява лентово устройство, приемайки команди от отделен процес.\n"
+#~ "\n"
+#~ "  --version  Извежда информация за версията.\n"
+#~ "  --help     Извежда тази справка.\n"
+
+#~ msgid "Seek offset error"
+#~ msgstr "Грешка при позициониране"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Преждевременен край на файла"
 
 #~ msgid "block size"
 #~ msgstr "блоковият размер"
@@ -2708,12 +2842,13 @@ msgstr "твърде много аргументи"
 #~ msgid "[.]NUMBER"
 #~ msgstr "[.]N"
 
+#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgstr ""
+#~ "Внимание: опцията -I не се поддържа. Може би имате предвид -j или -T?"
+
 #~ msgid "Error exit delayed from previous errors"
 #~ msgstr "Изходът с грешка бе забавен поради предхождащи грешки"
 
-#~ msgid "Time stamp out of range"
-#~ msgstr "Записано е време извън допустимия диапазон"
-
 #~ msgid "Modification time (seconds) out of range"
 #~ msgstr "Времето на промяна (секунди) е извън допустимия диапазон"
 
@@ -2726,9 +2861,6 @@ msgstr "твърде много аргументи"
 #~ msgid "Error reading time stamp"
 #~ msgstr "Грешка при четене на записаното време"
 
-#~ msgid "Unexpected EOF"
-#~ msgstr "Неочакван EOF"
-
 #~ msgid "same as -N"
 #~ msgstr "същото като -N"
 
index a2dc0405d6bbb8c7ea72e73b6458066dbc97c182..37ef3696f88c8c960c0ffafd95a4a09c06105aa0 100644 (file)
Binary files a/po/cs.gmo and b/po/cs.gmo differ
index 927042e682fdf14b9f21d896ea08eefb42bcc54e..c32f0a483babce0688d99ff6f50a38d009804020 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
 # Czech translations for GNU tar
 # Copyright (C) 1997 Free Software Foundation, Inc.
+# This file is distributed under the same license as the tar package.
 # Vladimir Michl <Vladimir.Michl@seznam.cz>, 1997.
+# Petr Pisar <petr.pisar@atlas.cz>, 2009, 2010.
 #
-# For gettext >= 0.10.36
-# Note: Indexes for plurals (on file example):
-# 0 - 1,21,31,101,... soubor
-# 1 - 2-4,22-24,...,102-104,122-124,... soubory
-# 2 - 0,5-10,11-19,20,25-30,35-40,...,100,105-110,... souboru
+# Pozor: program sám zalamuje dlouhé řádky, ale místo (širokých) znaků počítá
+# bajty. Proto je nutné dodržovat nezlomitelné mezery, které program rovněž
+# respektuje.
 #
-# "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
-# "
+# extract → rozbalit (celý archiv), vybalit (některé soubory z archivu)
+# tape → páska (rod ženský, vzor žena; ne pásek)
+# seek offset → pozice posunu (pásky)
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: tar 1.13.21\n"
+"Project-Id-Version: tar 1.22.91\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
-"PO-Revision-Date: 2001-09-01 10:55+0200\n"
-"Last-Translator: Vladimir Michl <Vladimir.Michl@seznam.cz>\n"
-"Language-Team: Czech <cs@li.org>\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
+"PO-Revision-Date: 2010-02-16 20:38+0100\n"
+"Last-Translator: Petr Pisar <petr.pisar@atlas.cz>\n"
+"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
-msgstr "argument %s je pro %s neplatný"
+msgstr "argument %s je pro %s neplatný"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
-msgstr "argument %s není pro %s jednoznaèný"
+msgstr "argument %s není pro %s jednoznačný"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
-msgstr "Platné argumenty jsou:"
+msgstr "Platné argumenty jsou:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
-msgstr ""
+msgstr "ARGP_HELP_FMT: hodnota %s je menší nebo rovna %s"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
-msgstr ""
+msgstr "%.*s: parametr ARGP_HELP_FMT vyžaduje hodnotu"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
-msgstr ""
+msgstr "%.*s: parametr ARGP_HELP_FMT musí být kladný"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
-msgstr ""
+msgstr "%.*s: Neznámý parametr ARGP_HELP_FMT"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
-msgstr ""
+msgstr "Nepořádek v ARGP_HELP_FMT: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
 msgstr ""
+"Povinné nebo volitelné argumenty dlouhých přepínačů jsou rovněž povinné\n"
+"nebo volitelné u odpovídajících krátkých přepínačů."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
-msgstr ""
+msgstr "Použití:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
-msgstr ""
+msgstr "nebo: "
 
-#: lib/argp-help.c:1655
-#, fuzzy
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
-msgstr ""
-"\n"
-"Pou¾ití: %s [PØEPÍNAÈ]...\n"
+msgstr " [PŘEPÍNAČ…]"
 
-#: lib/argp-help.c:1682
-#, fuzzy, c-format
+#: gnu/argp-help.c:1682
+#, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
-msgstr "Více informací získáte pøíkazem `%s --help'.\n"
+msgstr "Více informací získáte pomocí „%s --help“ nebo „%s --usage“.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
-#, fuzzy, c-format
+#: gnu/argp-help.c:1710
+#, c-format
 msgid "Report bugs to %s.\n"
 msgstr ""
-"\n"
-"  Chyby v programu oznamujte na adrese <bug-tar@gnu.org> (pouze anglicky),\n"
-"pøipomínky k pøekladu zasílejte na adresu <cs@li.org> (èesky).\n"
+"Chyby v programu oznamujte na adrese %s (anglicky), připomínky k překladu na "
+"adrese <translation-team-cs@lists.sourceforge.net> (česky).\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
-msgstr "Neznámá systémová chyba"
+msgstr "Neznámá systémová chyba"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
-msgstr ""
+msgstr "vypíše tuto nápovědu"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
-msgstr ""
+msgstr "vypíše stručný návod na použití"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+# JMÉNO jako v příslušné položce nápovědy
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
-msgstr ""
+msgstr "JMÉNO"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
-msgstr ""
+msgstr "nastaví název programu"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
-msgstr ""
+msgstr "SEKUNDY"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
-msgstr ""
+msgstr "zastaví se na SEKUNDY sekund (implicitně 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
-msgstr ""
+msgstr "vypíše verzi programu"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
-msgstr ""
+msgstr "(CHYBA PROGRAMU) Verze není známa!?"
 
-#: lib/argp-parse.c:611
-#, fuzzy, c-format
+#: gnu/argp-parse.c:613
+#, c-format
 msgid "%s: Too many arguments\n"
-msgstr "%s: pøepínaè `%s' vy¾aduje argument\n"
+msgstr "%s: Příliš mnoho argumentů\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
-msgstr ""
+msgstr "(CHYBA PROGRAMU) Přepínač by měl být znám!?"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
-msgstr ""
+msgstr "chyba zápisu"
 
-#: lib/getopt.c:526 lib/getopt.c:542
+#: gnu/getopt.c:531 gnu/getopt.c:547
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
-msgstr "%s: pøepínaè `%s' není jednoznaèný\n"
+msgid "%s: option '%s' is ambiguous\n"
+msgstr "%s: přepínač „%s“ není jednoznačný\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
+#: gnu/getopt.c:580 gnu/getopt.c:584
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
-msgstr "%s: pøepínaè `--%s' musí být zadán bez argumentu\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: přepínač „--%s“ musí být zadán bez argumentu\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
+#: gnu/getopt.c:593 gnu/getopt.c:598
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
-msgstr "%s: pøepínaè `%c%s' musí být zadán bez argumentu\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: přepínač „%c%s“ musí být zadán bez argumentu\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
-msgstr "%s: pøepínaè `%s' vy¾aduje argument\n"
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: pÅ\99epínaÄ\8d â\80\9e%sâ\80\9c vyžaduje argument\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
+#: gnu/getopt.c:698 gnu/getopt.c:701
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
-msgstr "%s: neznámý pøepínaè `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: nerozpoznaný přepínač „--%s“\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
+#: gnu/getopt.c:709 gnu/getopt.c:712
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
-msgstr "%s: neznámý pøepínaè `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: nerozpoznaný přepínač „%c%s“\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
+#: gnu/getopt.c:761 gnu/getopt.c:764
 #, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: neznámý pøepínaè -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: neplatný přepínač -- „%c“\n"
 
-#: lib/getopt.c:768 lib/getopt.c:771
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
 #, c-format
-msgid "%s: invalid option -- %c\n"
-msgstr "%s: neznámý pøepínaè -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: přepínač vyžaduje argument -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
+#: gnu/getopt.c:884 gnu/getopt.c:900
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: pøepínaè vy¾aduje argument -- %c\n"
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: přepínač „-W %s“ není jednoznačný\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
+#: gnu/getopt.c:924 gnu/getopt.c:942
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
-msgstr "%s: pøepínaè `-W %s' není jednoznaèný\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: přepínač „-W %s“ musí být zadán bez argumentu\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
-msgstr "%s: pøepínaè `-W %s' musí být zadán bez argumentu\n"
-
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
-msgstr "pamì» vyèerpána"
-
-#: lib/openat-die.c:35
-#, fuzzy, c-format
-msgid "unable to record current working directory"
-msgstr "Pracovní adresáø nelze zmìnit"
-
-#: lib/openat-die.c:48
-#, fuzzy, c-format
-msgid "failed to return to initial working directory"
-msgstr "Pracovní adresáø nelze uchovat"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Nelze %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Varování: Nelze %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Práva nelze zmìnit na %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Vlastnictví nelze zmìnit na uid %lu, gid %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Pevný odkaz na %s nelze vytvoøit"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, fuzzy, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Chyba pøi ètení na bajtu %s, ètení %lu bajtù"
-msgstr[1] "%s: Chyba pøi ètení na bajtu %s, ètení %lu bajtù"
-
-#: lib/paxerror.c:192
-#, fuzzy, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Varování: Chyba pøi ètení na bajtu %s, ètení %lu bajtù"
-msgstr[1] "%s: Varování: Chyba pøi ètení na bajtu %s, ètení %lu bajtù"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Nelze zmìnit pozici v souboru na %s"
+msgstr "paměť vyčerpána"
 
-#: lib/paxerror.c:275
+#: gnu/openat-die.c:36
 #, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Varování: Ukazatel v souboru nelze pøemístit na %s"
+msgid "unable to record current working directory"
+msgstr "pracovní adresář nelze si nelze zapamatovat"
 
-#: lib/paxerror.c:284
+#: gnu/openat-die.c:54
 #, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Symbolický odkaz na `%s' nelze vytvoøit"
-
-#: lib/paxerror.c:349
-#, fuzzy, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Zapsáno pouze %lu z %lu bajtù"
-msgstr[1] "%s: Zapsáno pouze %lu z %lu bajtù"
-
-#: lib/paxnames.c:155
-#, fuzzy, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Odstraòuji úvodní `%.*s' z názvù souborù"
-
-#: lib/paxnames.c:156
-#, fuzzy, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Odstraòuji úvodní `%.*s' z názvù souborù"
-
-#: lib/paxnames.c:169
-#, fuzzy
-msgid "Substituting `.' for empty member name"
-msgstr "Odstraòuji úvodní `%.*s' z názvù souborù"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr ""
+msgid "failed to return to initial working directory"
+msgstr "do původního pracovního adresáře se nelze vrátit"
 
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
@@ -318,19 +226,19 @@ msgstr ""
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
-msgstr "`"
+msgstr ""
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
-msgstr "'"
+msgstr ""
 
 #. TRANSLATORS: A regular expression testing for an affirmative answer
 #. (english: "yes").  Testing the first character may be sufficient.
@@ -338,9 +246,9 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
-msgstr ""
+msgstr "^[aAyY].*"
 
 #. TRANSLATORS: A regular expression testing for a negative answer
 #. (english: "no").  Testing the first character may be sufficient.
@@ -348,38 +256,28 @@ msgstr ""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
-msgstr ""
+msgstr "^[nN].*"
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Slu¾ba není k dispozici"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "stdin"
-
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "stdout"
+msgid "Packaged by %s (%s)\n"
+msgstr "Zabaleno kým: %s (%s)\n"
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Vzdálený shell není mo¾né spustit"
+msgid "Packaged by %s\n"
+msgstr "Zabaleno kým: %s\n"
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
-msgstr ""
+msgstr "©"
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -388,909 +286,1091 @@ msgid ""
 "There is NO WARRANTY, to the extent permitted by law.\n"
 "\n"
 msgstr ""
+"\n"
+"Licence GPLv3+: GNU GPL verze 3 nebo novější <http://gnu.org/licenses/gpl."
+"html>.\n"
+"Toto je svobodné programové vybavení: máte právo měnit jej a dále šířit.\n"
+"Není poskytována ŽÁDNÁ ZÁRUKA, jak jen zákon dovoluje.\n"
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
-#, fuzzy, c-format
+#: gnu/version-etc.c:104
+#, c-format
 msgid "Written by %s.\n"
-msgstr "Napsal François Pinard."
+msgstr "Napsal(a) %s.\n"
 
+# Vzhledem k tomu, že je nepravděpodobné, že by všemi autory byly ženy, tak
+# si uchýlíme k šovinisticky zjednodušenému „napsali“.
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
-#, fuzzy, c-format
+#: gnu/version-etc.c:108
+#, c-format
 msgid "Written by %s and %s.\n"
-msgstr "Napsal François Pinard."
+msgstr "Napsali %s a %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
-#, fuzzy, c-format
+#: gnu/version-etc.c:112
+#, c-format
 msgid "Written by %s, %s, and %s.\n"
-msgstr "Napsal François Pinard."
+msgstr "Napsali %s, %s a %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "and %s.\n"
 msgstr ""
+"Napsali %s, %s, %s\n"
+"a %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, and %s.\n"
 msgstr ""
+"Napsali %s, %s, %s,\n"
+"%s a %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, and %s.\n"
 msgstr ""
+"Napsali %s, %s, %s,\n"
+"%s, %s a %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, %s, and %s.\n"
 msgstr ""
+"Napsali %s, %s, %s,\n"
+"%s, %s, %s a %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, %s, %s,\n"
 "and %s.\n"
 msgstr ""
+"Napsali %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"a %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, %s, %s,\n"
 "%s, and %s.\n"
 msgstr ""
+"Napsali %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"%s a %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, %s, %s,\n"
 "%s, %s, and others.\n"
 msgstr ""
+"Napsali %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"%s, %s a další.\n"
 
 #. TRANSLATORS: The placeholder indicates the bug-reporting address
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
-#, fuzzy, c-format
+#: gnu/version-etc.c:247
+#, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 "\n"
-"  Chyby v programu oznamujte na adrese <bug-tar@gnu.org> (pouze anglicky),\n"
-"pøipomínky k pøekladu zasílejte na adresu <cs@li.org> (èesky).\n"
+"Chyby v programu oznamujte na adrese %s (anglicky),\n"
+"připomínky k překladu na adrese <translation-team-cs@lists.sourceforge.net>\n"
+"(česky).\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:249
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "Report %s bugs to: %s\n"
 msgstr ""
+"Chyby v programu %s oznamujte (anglicky) na: %s\n"
+"Připomínky k překladu (česky) na: <translation-team-cs@lists.sourceforge."
+"net>\n"
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
-msgstr ""
+#: gnu/version-etc.c:253
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Domovská stránka %s: <%s>\n"
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr ""
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+msgstr "Domovská stránka programu %s: <http://www.gnu.org/software/%s/>\n"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
+"Obecná pomoc při používání softwaru GNU: <http://www.gnu.org/gethelp/>\n"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Funkce %s selhala"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Místo pro buffer není mo¾né alokovat\n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Varování: Funkce %s selhala"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Místo pro buffer není mo¾né alokovat"
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Práva nelze změnit na %s"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:101
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Více informací získáte pøíkazem `%s --help'.\n"
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Vlastnictví nelze změnit na UID %lu, GID %lu"
 
-#: rmt/rmt.c:308
-#, fuzzy, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Pevný odkaz na %s nelze vytvořit"
+
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Chyba při čtení na bajtu %s během čtení %lu bajtu"
+msgstr[1] "%s: Chyba při čtení na bajtu %s během čtení %lu bajtů"
+msgstr[2] "%s: Chyba při čtení na bajtu %s během čtení %lu bajtů"
+
+#: lib/paxerror.c:192
+#, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Varování: Chyba při čtení na bajtu %s během čtení %lu bajtu"
+msgstr[1] "%s: Varování: Chyba při čtení na bajtu %s během čtení %lu bajtů"
+msgstr[2] "%s: Varování: Chyba při čtení na bajtu %s během čtení %lu bajtů"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Nelze změnit pozici v souboru na %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Varování: Ukazatel v souboru nelze přemístit na %s"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Symbolický odkaz na „%s“ nelze vytvořit"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Zapsáno pouze %lu z %lu bajtu"
+msgstr[1] "%s: Zapsáno pouze %lu z %lu bajtů"
+msgstr[2] "%s: Zapsáno pouze %lu z %lu bajtů"
+
+# member name je část cesty názvy souboru 
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Odstraňuje se úvodní „%s„ z názvů prvků"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Odstraňuje se úvodní „%s„ z cílů pevného odkazu"
+
+# member name je část cesty názvy souboru 
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Prázdný prvek názvu se nahradí „.“"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Prázdný cíl pevného odkazu se nahradí „.“"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Služba není k dispozici"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "stdin"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "stdout"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Pou¾ití: %s [PØEPÍNAÈ]\n"
-"Manipuluje s archivem pøijímaje pøíkazy vzdáleného procesu.\n"
-"\n"
-"  --version     Vypí¹e oznaèení verze\n"
-"  --help        Vypí¹e tuto nápovìdu\n"
 
-#: rmt/rmt.c:397
-#, fuzzy
-msgid "Seek offset error"
-msgstr "Velikost pozice v souboru je mimo rozsah"
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Vzdálený shell není možné spustit"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Směr posunu je mimo rozsah"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:419
+msgid "Invalid seek direction"
+msgstr "Chybný směr posunu"
+
+#: rmt/rmt.c:427
+msgid "Invalid seek offset"
+msgstr "Neplatná pozice posunu"
+
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
-msgstr "Velikost pozice v souboru je mimo rozsah"
+msgstr "Pozice posunu je je mimo rozsah"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Smìr posunu v souboru je mimo rozsah"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+msgid "Invalid byte count"
+msgstr "Neplatný počet bajtů"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+msgid "Byte count out of range"
+msgstr "Počet bajtů je mimo rozsah"
+
+#: rmt/rmt.c:539
+msgid "Premature eof"
+msgstr "Předčasný konec souboru"
+
+#: rmt/rmt.c:582
+msgid "Invalid operation code"
+msgstr "Neplatní kód operace"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr "Operace není podporována"
+
+#: rmt/rmt.c:645
+msgid "Unexpected arguments"
+msgstr "Neočekávané argumenty"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
-msgstr "rmtd: Pøedèasný konec souboru\n"
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr "Ovládá páskovou jednotku přijímaje příkazy ze vzdáleného procesu"
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "ČÍSLO"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr "nastaví úroveň ladění"
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "SOUBOR"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr "nastaví název souboru pro výstup ladění"
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, c-format
+msgid "cannot open %s"
+msgstr "„%s“ nelze otevřít"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Pøedèasný konec souboru"
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "příliš mnoho argumentů"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:803
 msgid "Garbage command"
-msgstr "Neznámý pøíkaz"
+msgstr "Neznámý příkaz"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
-msgstr "Toto pravdìpodobnì není tar archiv"
+msgstr "Toto pravděpodobně není tar archiv"
 
-#: src/buffer.c:354 src/buffer.c:363
-#, fuzzy
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
-msgstr "Celkem zapsáno bajtù: %s (%sB, %sB/s)\n"
+msgstr "Celkem zapsáno bajtů"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
-msgstr ""
+msgstr "Celkem přečteno bajtů"
 
-#: src/buffer.c:365
-#, fuzzy, c-format
+#: src/buffer.c:396
+#, c-format
 msgid "Total bytes deleted: %s\n"
-msgstr "Celkem zapsáno bajtù: %s (%sB, %sB/s)\n"
+msgstr "Celkem smazáno bajtů: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(roura)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
-msgstr "Chybná hodnota pro velikost záznamu"
+msgstr "Chybná hodnota pro velikost záznamu"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
-msgstr "Název archivu nebyl zadán"
+msgstr "Název archivu nebyl zadán"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
-msgstr "Stdin/Stdout archiv nelze ovìøit"
+msgstr "Stdin/Stdout archiv nelze ověřit"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
-msgstr ""
+msgstr "Archiv je komprimován. Použijte přepínač %s"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
-msgstr "Komprimovaný archiv nelze aktualizovat"
+msgstr "Komprimovaný archiv nelze aktualizovat"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
-msgstr "Páska na zaèátku, konèím"
+msgstr "Páska na začátku, končím"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
-msgstr "Pøíli¹ mnoho chyb, konèím"
+msgstr "Příliš mnoho chyb, končím"
 
-#: src/buffer.c:697
-#, fuzzy, c-format
+#: src/buffer.c:744
+#, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
-msgstr[0] "Velikost záznamu = %lu blokù"
-msgstr[1] "Velikost záznamu = %lu blokù"
+msgstr[0] "Velikost záznamu = %'lu blok"
+msgstr[1] "Velikost záznamu = %'lu bloky"
+msgstr[2] "Velikost záznamu = %'lu bloků"
 
-#: src/buffer.c:718
-#, fuzzy, c-format
+#: src/buffer.c:765
+#, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
-msgstr[0] "Nezarovnaný blok (%lu bajtù) v archivu"
-msgstr[1] "Nezarovnaný blok (%lu bajtù) v archivu"
+msgstr[0] "Nezarovnaný blok (%'lu bajt) v archivu"
+msgstr[1] "Nezarovnaný blok (%'lu bajty) v archivu"
+msgstr[2] "Nezarovnaný blok (%'lu bajtů) v archivu"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
-msgstr "V archivu se nelze vrátit, bez -i mù¾e být neèitelný"
+msgstr "V archivu se nelze vrátit, bez -i může být nečitelný"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
-msgstr ""
+msgstr "rmtlseek se nezastavil na hranici záznamu"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
-msgstr "%s: obsahuje neplatné èíslo svazku"
+msgstr "%s: obsahuje neplatné číslo svazku"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
-msgstr "U èísla svazku nastalo pøeteèení"
+msgstr "U čísla svazku nastalo přetečení"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
-msgstr "Pøipravte svazek #%d pro archiv %s a stisknìte return:"
+msgstr "Připravte svazek #%d pro archiv %s a stiskněte return:"
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
-msgstr "Místo u¾ivatelské odpovìdi byl zadán konec souboru"
+msgstr "Místo uživatelské odpovědi byl zadán konec souboru"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
-msgstr "VAROVÁNÍ: Archiv je nekompletní"
+msgstr "VAROVÁNÍ: Archiv je nekompletní"
 
-#: src/buffer.c:956
-#, fuzzy, c-format
+#: src/buffer.c:1003
+#, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
 " q             Abort tar\n"
 " y or newline  Continue operation\n"
 msgstr ""
-" n [name]   Zadání nového názvu pro dal¹í (a následující) svazek(ky)\n"
-" q          Ukonèení programu tar\n"
-" !          Vytvoøení podshell\n"
-" ?          Vypísání této nápovìdy\n"
+" n [název]           Zadat nový název pro další (a následující) svazek(ky)\n"
+" q                   Ukončit program tar\n"
+" y nebo odřádkování  Pokračovat v operaci\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
-msgstr ""
+msgstr " !                   Vytvořit podshell\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
-msgstr ""
+msgstr " ?                   Vypsat tuto nápovědu\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
-msgstr "Není nový svazek; konèím.\n"
+msgstr "Není nový svazek; končím.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
-msgstr ""
+msgstr "Název souboru nebyl zadán. Zkuste to znovu.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
-msgstr ""
+msgstr "Neplatný vstup. Nápovědu obdržíte napsáním „?“ (otazníku).\n"
 
-#: src/buffer.c:1066
-#, fuzzy, c-format
+#: src/buffer.c:1113
+#, c-format
 msgid "%s command failed"
-msgstr "pøíkaz `%s' selhal"
+msgstr "příkaz %s selhal"
 
-#: src/buffer.c:1221
-#, fuzzy, c-format
+#: src/buffer.c:1294
+#, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
-msgstr "%s nepokraèuje na tomto svazku"
+msgstr "%s možná pokračuje na tomto svazku: hlavička obsahuje zkrácený název"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
-msgstr "%s nepokraèuje na tomto svazku"
+msgstr "%s nepokračuje na tomto svazku"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
-msgstr "%s je ¹patné délky (%s != %s + %s)"
+msgstr "%s je špatné délky (%s != %s + %s)"
 
-#: src/buffer.c:1253
-#, fuzzy, c-format
+#: src/buffer.c:1326
+#, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
-msgstr "Tento svazek není následníkem pøedchozího"
+msgstr "Tento svazek není je mimo pořadí (%s − %s != %s)"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
-msgstr "Pro vyhodnocení vzorku `%s' musí být archiv pojmenován"
+msgstr "Pro vyhodnocení vzorku %s musí být archiv pojmenován"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
-msgstr "Svazek %s neodpovídá vzorku %s"
+msgstr "Svazek %s neodpovídá vzorku %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
 msgstr ""
+"%s: název souboru je příliš dlouhý, aby byl uložen do vícesvazkové hlavičky "
+"GNU, bude zkrácen"
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
-msgstr ""
+msgstr "zápis neskončil na konci hranice bloku"
 
-#: src/compare.c:96
-#, fuzzy, c-format
+#: src/compare.c:95
+#, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
-msgstr[0] "Lze èíst pouze %lu z %lu bajtù"
-msgstr[1] "Lze èíst pouze %lu z %lu bajtù"
+msgstr[0] "Bylo možné načíst pouze %'lu z %'lu bajtu"
+msgstr[1] "Bylo možné načíst pouze %'lu z %'lu bajtů"
+msgstr[2] "Bylo možné načíst pouze %'lu z %'lu bajtů"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
-msgstr "Obsah se li¹í"
+msgstr "Obsahy se liší"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
-msgstr "Neoèekávaný konec archivu"
+msgstr "Neočekávaný konec archivu"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
-msgstr "Typ souboru se li¹í"
+msgstr "Typ souboru se liší"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
-msgstr "Práva se li¹í"
+msgstr "Práva se liší"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
-msgstr "Uid se li¹í"
+msgstr "UID se liší"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
-msgstr "Gid se li¹í"
+msgstr "GID se liší"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
-msgstr "Èas poslední modifikace se li¹í"
+msgstr "Čas poslední modifikace se liší"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
-msgstr "Velikost se li¹í"
+msgstr "Velikost se liší"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
-msgstr "Není odkazem na %s"
+msgstr "Není odkazem na %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
-msgstr "Symbolický odkaz se li¹í"
+msgstr "Symbolický odkaz se liší"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
-msgstr "Èíslo zaøízení se li¹í"
+msgstr "Číslo zařízení se liší"
 
 #: src/compare.c:462
 #, c-format
 msgid "Verify "
-msgstr "Ovìøuji "
+msgstr "Ověřuji "
 
 #: src/compare.c:469
-#, fuzzy, c-format
+#, c-format
 msgid "%s: Unknown file type `%c', diffed as normal file"
-msgstr "%s: Neznámý typ souboru '%c', porovnáván jako normální soubor"
+msgstr "%s: Neznámý typ souboru „%c“, porovnáván jako normální soubor"
 
 #: src/compare.c:524
 msgid "Archive contains file names with leading prefixes removed."
-msgstr ""
+msgstr "Archiv obsahuje názvy souborů, kterým byly odstraněny předpony."
 
 #: src/compare.c:526
 msgid "Verification may fail to locate original files."
-msgstr ""
+msgstr "Při kontrole může selhat nalezení původních souborů."
 
-#: src/compare.c:596
-#, fuzzy, c-format
+#: src/compare.c:599
+#, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
-msgstr[0] "CHYBNÉ OVÌØENÍ: chybných hlavièek detekováno: %d"
-msgstr[1] "CHYBNÉ OVÌØENÍ: chybných hlavièek detekováno: %d"
+msgstr[0] "SELHÁNÍ KONTROLY: zjištěna %d chybná hlavička"
+msgstr[1] "SELHÁNÍ KONTROLY: zjištěny %d chybné hlavičky"
+msgstr[2] "SELHÁNÍ KONTROLY: zjištěno %d chybných hlaviček"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
-msgstr ""
+msgstr "Osiřelý nulový blok na pozici %s"
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
-msgstr ""
+msgstr "%s: obsahuje značku keše adresáře %s; %s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "hodnota %s typu %s je mimo rozsah %s..%s; nahrazuji za %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "hodnota %s typu %s je mimo rozsah %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
-msgstr "Generuji záporné osmièkové hlavièky"
+msgstr "Generuji záporné osmičkové hlavičky"
 
 #: src/create.c:624 src/create.c:687
-#, fuzzy, c-format
+#, c-format
 msgid "%s: file name is too long (max %d); not dumped"
-msgstr "%s: soubor není zmìnìn; neaktualizován"
+msgstr "%s: název souboru je příliš dlouhý (max. %d); nezpracován"
 
 #: src/create.c:634
-#, fuzzy, c-format
+#, c-format
 msgid "%s: file name is too long (cannot be split); not dumped"
-msgstr "%s: soubor není zmìnìn; neaktualizován"
+msgstr "%s: název souboru je příliš dlouhý (nelze jej rozdělit); nezpracován"
 
 #: src/create.c:661
-#, fuzzy, c-format
+#, c-format
 msgid "%s: link name is too long; not dumped"
-msgstr "%s: soubor není zmìnìn; neaktualizován"
+msgstr "%s: název odkazu je příliš dlouhý; nezpracován"
 
-#: src/create.c:1076
-#, fuzzy, c-format
+#: src/create.c:1078
+#, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
-msgstr[0] "%s: Soubor je krat¹í o bajtù: %s; Doplòuji nulami."
-msgstr[1] "%s: Soubor je krat¹í o bajtù: %s; Doplòuji nulami."
+msgstr[0] "%s: Soubor je kratší o %s bajt; Doplňuji nulami."
+msgstr[1] "%s: Soubor je kratší o %s bajty; Doplňuji nulami."
+msgstr[2] "%s: Soubor je kratší o %s bajtů; Doplňuji nulami."
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
-msgstr "%s: soubor je na jiném souborovém systému; nearchivován"
+msgstr "%s: soubor je na jiném souborovém systému; nearchivován"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
-msgstr ""
+msgstr "obsah nezpracován"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
-msgstr "%s: Neznámý typ souboru; soubor ignorován"
-
-#: src/create.c:1464
-#, fuzzy, c-format
-msgid "Missing links to %s.\n"
-msgstr " odkaz na %s\n"
+msgstr "%s: Neznámý typ souboru; soubor ignorován"
 
-#: src/create.c:1535
+#: src/create.c:1472
 #, c-format
-msgid "%s: file is unchanged; not dumped"
-msgstr "%s: soubor není zmìnìn; neaktualizován"
+msgid "Missing links to %s."
+msgstr "Chybí odkazy na %s."
 
 #: src/create.c:1543
 #, c-format
-msgid "%s: file is the archive; not dumped"
-msgstr "%s: soubor je archiv; nearchivován"
+msgid "%s: file is unchanged; not dumped"
+msgstr "%s: soubor není změněn; neaktualizován"
 
-#: src/create.c:1573
+#: src/create.c:1552
 #, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Soubor smazán døíve ne¾ mohl být èten"
+msgid "%s: file is the archive; not dumped"
+msgstr "%s: soubor je archiv; nearchivován"
 
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
-msgstr ""
+msgstr "adresář nezpracován"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
-msgstr "%s: soubor byl bìhem ètení zmìnìn"
+msgstr "%s: soubor byl během čtení změněn"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
-msgstr "%s: soket ignorován"
+msgstr "%s: soket ignorován"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
-msgstr "%s: dveøe ignorovány"
+msgstr "%s: dveře ignorovány"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
-msgstr "Pøeskakuji na dal¹í hlavièku"
+msgstr "Přeskakuji na další hlavičku"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
-msgstr "Z archivu je mazáno to, co není hlavièka"
+msgstr "Z archivu je mazáno to, co není hlavička"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
-msgstr ""
+msgstr "%s: nemožně stará časová značka %s"
 
-#: src/extract.c:215
-#, fuzzy, c-format
+#: src/extract.c:229
+#, c-format
 msgid "%s: time stamp %s is %s s in the future"
-msgstr "%s: èasová znaèka %s je %lu s v budoucnosti"
+msgstr "%s: časová značka %s je %s s v budoucnosti"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
-msgstr "%s: Neoèekávaná inkonzistence, pøi vytváøení adresáøe"
+msgstr "%s: Neočekávaná inkonzistence, při vytváření adresáře"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
-msgstr ""
+msgstr "%s: Adresář byl přejmenován dříve, než bylo možné získat jeho stav"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
-msgstr "Souvisle ulo¾ené soubory rozbaluji jako obyèejné soubory"
+msgstr "Souvisle uložené soubory rozbaluji jako obyčejné soubory"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
-msgstr "Zkou¹ím rozbalit symbolické odkazy jako pevné odkazy"
-
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Ètení z %s\n"
+msgstr "Zkouším rozbalit symbolické odkazy jako pevné odkazy"
 
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
-msgstr "%s: Nelze rozbalit -- soubor je pokraèováním jiného svazku"
+msgstr "%s: Nelze rozbalit – soubor je pokračováním jiného svazku"
 
-#: src/extract.c:1150 src/list.c:1090
-#, fuzzy
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
-msgstr "Neoèekávaný konec v rozsekaném názvu"
+msgstr "Neočekávaná hlavička dlouhého názvu"
 
-#: src/extract.c:1156
-#, fuzzy, c-format
+#: src/extract.c:1197
+#, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
-msgstr "%s: Neznámý typ souboru `%c', rozbalen jako normální soubor"
+msgstr "%s: Neznámý typ souboru „%c“, rozbalen jako normální soubor"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
-msgstr ""
+msgstr "Současný soubor %s je novější nebo stejně starý"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
-msgstr "%s: Tento soubor nebylo mo¾né zálohovat"
+msgstr "%s: Tento soubor nebylo možné zálohovat"
 
-#: src/extract.c:1355
-#, fuzzy, c-format
+#: src/extract.c:1402
+#, c-format
 msgid "Cannot rename %s to %s"
-msgstr "%s: nelze pøejmenovat na %s"
+msgstr "%s nelze přejmenovat na %s"
 
-#: src/extract.c:1367
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Z chyby se nelze zotavit: ukonèuji se"
-
-#: src/incremen.c:448 src/incremen.c:492
-#, fuzzy, c-format
 msgid "%s: Directory has been renamed from %s"
-msgstr "%s: Adresáø byl pøejmenován"
+msgstr "%s: Adresář byl přejmenován z %s"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
-msgstr "%s: Adresáø byl pøejmenován"
+msgstr "%s: Adresář byl přejmenován"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
-msgstr "%s: Adresáø je nový"
+msgstr "%s: Adresář je nový"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
-msgstr "Neplatný èas souboru"
+msgstr "Neplatný čas souboru"
 
-#: src/incremen.c:959
-#, fuzzy
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
-msgstr "Zadána chybná práva"
+msgstr "Neplatný čas změny obsahu souboru (sekundy)"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
-msgstr ""
+msgstr "Neplatný čas změny obsahu souboru (nanosekundy)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
-msgstr "Neplatné èíslo zaøízení"
+msgstr "Neplatné číslo zařízení"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
-msgstr "Neplatné èíslo i-uzlu"
+msgstr "Neplatné číslo i-uzlu"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
-msgstr ""
+msgstr "Při čtení souboru snímku: položka je příliš dlouhá"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
-msgstr ""
+msgstr "Chyba čtení uvnitř souboru snímku"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
-#, fuzzy
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
-msgstr "Neoèekávaný konec archivu"
+msgstr "Neočekávaný konec souboru snímku"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
-msgstr ""
+msgstr "Neočekávaná hodnota položky v souboru snímku"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
-msgstr ""
+msgstr "Chybí uzávěr záznamu"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
-msgstr ""
+msgstr "Chybný formát přírůstkového souboru"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
-msgstr ""
+msgstr "Nepodporovaná verze přírůstkového formátu: %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
-msgstr ""
+msgstr "Poškozený dumpdir: očekáváno „%c“, ale nalezeno %#3o"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
-msgstr ""
+msgstr "Poškozený dumpdir: „X“ duplikováno"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
-msgstr ""
+msgstr "Poškozený dumpdir: prázdný název v „R“"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
-msgstr ""
+msgstr "Poškozený dumpdir: „R“ není před „T“"
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
-msgstr ""
+msgstr "Poškozený dumpdir: prázdný název v „T“"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
-msgstr ""
+msgstr "Poškozený dumpdir: očekáváno „%c“, ale zjištěn konec dat"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
-msgstr ""
+msgstr "Poškozený dumpdir: „X“ nebylo nikdy použito"
 
-#: src/incremen.c:1551
-#, fuzzy, c-format
+#: src/incremen.c:1615
+#, c-format
 msgid "Cannot create temporary directory using template %s"
-msgstr "Pro blokový faktor (blokù na záznam) %d není mo¾né alokovat pamì»"
+msgstr "Podle šablony %s nelze vytvořit dočasný adresář"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
-msgstr ""
+msgstr "%s: Adresář nebude vyčištěn: nelze provést stat()"
 
-#: src/incremen.c:1626
-#, fuzzy, c-format
+#: src/incremen.c:1690
+#, c-format
 msgid "%s: directory is on a different device: not purging"
-msgstr "%s: soubor je na jiném souborovém systému; nearchivován"
+msgstr "%s: adresář je na jiném zařízení: nebude vyčištěn"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
-msgstr "%s: Ma¾u %s\n"
+msgstr "%s: Mažu %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Nelze smazat"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
-msgstr "%s: Vynechávám"
+msgstr "%s: Vynechávám"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "blok %s: ** Blok NUL **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "blok %s: ** Konec souboru **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "blok %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
-msgstr "Mezery v hlavièce na místì, kde je oèekávána èíselná hodnota typu %s"
+msgstr "Mezery v hlavičce na místě, kde je očekávána číselná hodnota typu %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
-"Osmièková hodnota %.*s typu %s je mimo rozsah; pøiøazuji dvojkový complement"
+"Osmičková hodnota %.*s typu %s je mimo rozsah; přiřazuji dvojkový complement"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
-msgstr "Osmièková hodnota %.*s typu %s je mimo rozsah"
+msgstr "Osmičková hodnota %.*s typu %s je mimo rozsah"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
-msgstr "Archiv obsahuje zastaralé base-64 hlavièky"
+msgstr "Archiv obsahuje zastaralé base-64 hlavičky"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
-msgstr "Base-64 øetìzec %s je mimo rozsah typu %s"
+msgstr "Base-64 řetězec %s je mimo rozsah typu %s"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Hodnota base-256 je mimo rozsah typu %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
-msgstr "Archiv obsahuje %.*s tam, kde je oèekávána èíselná hodnota typu %s"
+msgstr "Archiv obsahuje %.*s tam, kde je očekávána číselná hodnota typu %s"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Hodnota %s typu %s je mimo rozsah %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " odkaz na %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
-msgstr " neznámý souborový typ %s\n"
+msgstr " neznámý souborový typ %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
-msgstr ""
+msgstr "--Dlouhý odkaz--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
-msgstr ""
+msgstr "--Dlouhý název--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
-msgstr "--Hlavièka svazku--\n"
+msgstr "--Hlavička svazku--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
-msgstr "--Pokraèováno od %s bajtu--\n"
+msgstr "--Pokračováno od %s bajtu--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
-msgstr "Vytváøím adresáø:"
+msgstr "Vytvářím adresář:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
-msgstr "Pøejmenovávám %s na %s\n"
+msgstr "Přejmenovávám %s na %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
-msgstr "%s: nelze pøejmenovat na %s"
+msgstr "%s: nelze přejmenovat na %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
-msgstr "Pøejmenovávám %s zpìt na %s\n"
+msgstr "Přejmenovávám %s zpět na %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
-msgstr "Pracovní adresáø nelze uchovat"
+msgstr "Pracovní adresář nelze uchovat"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
-msgstr "Pracovní adresáø nelze zmìnit"
+msgstr "Pracovní adresář nelze změnit"
+
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Soubor smazán dříve než mohl být přečten"
 
-#: src/misc.c:711
+#: src/misc.c:774
+#, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Adresář smazán dříve než mohl být přečten"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "potomek"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
-msgstr "meziprocesový kanál"
-
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
-msgstr ""
+msgstr "meziprocesový kanál"
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
-msgstr ""
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
+msgstr "V názvech souborů se nachází žolíkové znaky. Prosím,"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr ""
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
+msgstr "porovnávání proti žolíkových znaků zapněte pomocí --wildcards,"
 
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: V archivu nenalezen"
 
-#: src/names.c:615
-#, fuzzy, c-format
+#: src/names.c:622
+#, c-format
 msgid "%s: Required occurrence not found in archive"
-msgstr "%s: V archivu nenalezen"
+msgstr "%s: Požadovaný výskyt nebyl v archivu nalezen"
+
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+"Použití přepínače -C uvnitř seznamu souborů není spolu s --listed-"
+"incremental dovoleno"
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr "S --listed-incremental je dovelen pouze jediný přepínač -C"
 
-#: src/tar.c:79
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
-msgstr "Pøepínaèe `-%s' a `-%s' oba dva chtìjí standardní vstup"
+msgstr "Přepínače „-%s“ a „-%s“ oba dva chtějí standardní vstup"
 
-#: src/tar.c:156
-#, fuzzy, c-format
+#: src/tar.c:158
+#, c-format
 msgid "%s: Invalid archive format"
-msgstr "%s: Neplatná skupina"
+msgstr "%s: Neplatný formát archivu"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
-msgstr "GNU roz¹íøení po¾adovány na nekompatibilním formátu archivu"
+msgstr "GNU rozšíření požadovány na nekompatibilním formátu archivu"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
 msgstr ""
+"Neznámý styl citování „%s“. Seznam stylů lze získat příkazem „%s --quoting-"
+"style=help“."
 
-#: src/tar.c:336
-#, fuzzy
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1300,17 +1380,16 @@ msgid ""
 "  tar -tvf archive.tar         # List all files in archive.tar verbosely.\n"
 "  tar -xf archive.tar          # Extract all files from archive.tar.\n"
 msgstr ""
+"GNU „tar“ uloží pohromadě více souborů do jediného archivu na disku nebo "
+"pásce a umí z tohoto archivu jednotlivé soubory získat zpět.\n"
 "\n"
-"Pou¾ití: %s [PØEPÍNAÈ]... [SOUBOR]...\n"
-"\n"
-"Pøíklady:\n"
-"  %s -cf archiv.tar foo bar  # Vytvoøí archiv.tar ze souborù foo a bar.\n"
-"  %s -tvf archiv.tar         # Podrobnì vypí¹e v¹echny soubory v archiv."
+"Příklady:\n"
+"  tar -cf archiv.tar foo bar   # Vytvoří archiv.tar ze souborů foo a bar.\n"
+"  tar -tvf archiv.tar          # Podrobně vypíše všechny soubory v archiv."
 "tar.\n"
-"  %s -xf archiv.tar          # Rozbalí v¹echny soubory z archive.tar.\n"
+"  tar -xf archiv.tar           # Rozbalí všechny soubory z archiv.tar.\n"
 
-#: src/tar.c:345
-#, fuzzy
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1321,1315 +1400,1431 @@ msgid ""
 "  nil, existing   numbered if numbered backups exist, simple otherwise\n"
 "  never, simple   always make simple backups\n"
 msgstr ""
+"Přípona záložních souborů bude „~“, pokud není nastavena pomocí --suffix "
+"nebo proměnné SIMPLE_BACKUP_SUFFIX.\n"
+"Verzování lze řídit pomocí přepínače --backup nebo proměnné VERSION_CONTROL. "
+"Hodnoty mohou být:\n"
 "\n"
-"  Pøípona zálo¾ních souborù bude `~', pokud není nastavena pomocí --suffix\n"
-"nebo promìnné SIMPLE_BACKUP_SUFFIX. Jak se mají tvoøit zálo¾ní kopie, mù¾e "
-"být\n"
-"nastaveno pomocí pøepínaèe --backup nebo promìnné VERSION_CONTROL. Hodnoty\n"
-"mohou být:\n"
-"\n"
-"  t, numbered     tvoøí èíslované zálo¾ní kopie\n"
-"  nil, existing   èíslované, jestli¾e ji¾ èíslované zálo¾ní kopie\n"
-"                  existují, jinak tvoøí jednoduché\n"
-"  never, simple   tvoøí v¾dy jednoduché zálo¾ní kopie souborù\n"
+"  none, off       záložní kopie se nevytváří nikdy\n"
+"  t, numbered     tvoří číslované záložní kopie\n"
+"  nil, existing   číslované, jestliže již číslované záložní kopie\n"
+"                  existují, jinak tvoří jednoduché\n"
+"  never, simple   tvoří vždy jednoduché záložní kopie souborů\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
-msgstr ""
+msgstr "Hlavní operační režim:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
-msgstr ""
+msgstr "vypíše obsah archivu"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
-msgstr ""
+msgstr "vybalí soubory z archivu"
 
-#: src/tar.c:378
-#, fuzzy
+#: src/tar.c:394
 msgid "create a new archive"
-msgstr "Neoèekávaný konec archivu"
+msgstr "vytvoří nový archiv"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
-msgstr ""
+msgstr "hledá rozdíly mezi archivem a systémem souborů"
 
-#: src/tar.c:383
-#, fuzzy
+#: src/tar.c:399
 msgid "append files to the end of an archive"
-msgstr "%d bajtù smetí ma konci archivu ignorováno"
+msgstr "připojí soubory na konec archivu"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
-msgstr ""
+msgstr "připojí jen takové soubory, které jsou novější nežli kopie v archivu"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
-msgstr ""
+msgstr "připojí k archivu tarové soubory"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
-msgstr ""
+msgstr "smaže z archivu (ne na magnetických páskách!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
-msgstr ""
+msgstr "otestuje jmenovku archivního svazku a skončí"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
-msgstr ""
+msgstr "Operační modifikátory:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
-msgstr ""
+msgstr "zachází s řídkými soubory efektivně"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
-msgstr ""
+msgstr "HLAVNÍ[.VEDLEJŠÍ]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
-msgstr ""
+msgstr "nastaví verzi řídkého formátu (implikuje --sparse)"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
-msgstr ""
-
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr ""
+msgstr "zpracuje přírůstkové zálohy starého formátu GNU"
 
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
-msgstr ""
+msgstr "zpracuje přírůstkové zálohy nového formátu GNU"
 
-#: src/tar.c:408
-msgid "do not exit with nonzero on unreadable files"
-msgstr ""
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr "úroveň výpisu pro vytvářený archiv s přírůstkovým seznamem"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr ""
+#: src/tar.c:426
+msgid "do not exit with nonzero on unreadable files"
+msgstr "neskoční nenulovým kódem při nečitelných souborech"
 
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
 "diff, --extract or --list and when a list of files is given either on the "
 "command line or via the -T option; NUMBER defaults to 1"
 msgstr ""
+"zpracuje pouze ČÍSLO. výskyt každého souboru z archivu; tento přepínač je "
+"platný jen ve spojení s jedním z podpříkazů --delete, --diff, --extract nebo "
+"--list a jen když je zadán seznam souborů na příkazovém řádku nebo přes "
+"přepínač -T; implicitní ČÍSLO je 1"
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
-msgstr ""
+msgstr "v archivu se lze posunovat"
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr "v archivu se lze posunovat"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
-msgstr ""
+msgstr "při vytváření přírůstkových archivů se nekontrolují čísla zařízení"
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
+"při vytváření přírůstkových archivů se kontrolují čísla zařízení (implicitní)"
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
-msgstr ""
+msgstr "Ovládání přepisování:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
-msgstr ""
+msgstr "pokusí se zkontrolovat archiv po té, co bude zapsán"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
-msgstr ""
+msgstr "odstraní soubory po té, co budou přidány do archivu"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
-msgstr ""
+msgstr "při rozbalovaní nenahrazuje existující soubory"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
+"nenahrazuje existující soubory, které jsou novější než jejich archivní kopie"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
-msgstr ""
+msgstr "při rozbalování existující soubory přepisuje"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
-msgstr ""
+msgstr "před vybalením každého souboru jej odstraní"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
-msgstr ""
+msgstr "před vybalením adresáře vytvoří prázdnou hierarchii"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
-msgstr ""
+msgstr "zachovává metadata existujících adresářů"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
-msgstr ""
+msgstr "při rozbalování přepisuje metadata existujících adresářů (implicitní)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
-msgstr ""
+msgstr "Výběr výstupního proudu:"
 
-#: src/tar.c:455
-#, fuzzy
+#: src/tar.c:475
 msgid "extract files to standard output"
-msgstr "Chyba pøi zápise na standardní výstup"
+msgstr "soubory vybaluje na standardní výstup"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
-msgstr ""
+msgstr "PŘÍKAZ"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
-msgstr ""
+msgstr "vybalené soubory pošle rourou jinému programu"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
-msgstr ""
+msgstr "ignoruje návratový kód potomků"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
-msgstr ""
+msgstr "nenulový návratový kód potomků považuje za chybu"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
-msgstr ""
+msgstr "Zacházení s atributy souborů:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
-msgstr ""
+msgstr "vynutí JMÉNO jako vlastníka vkládaných souborů"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
-msgstr ""
+msgstr "vynutí JMÉNO jako skupinu vkládaných souborů"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
-msgstr ""
+msgstr "DATUM_NEBO_SOUBOR"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
-msgstr ""
+msgstr "nastaví čas změny obsahu vkládaných souborů podle DATA_NEBO_SOUBORU"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
-msgstr ""
+msgstr "ZMĚNY"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
-msgstr ""
+msgstr "vynutí (symbolický) mód ZMĚN (přístupová práva) vkládaným souborům"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
-msgstr ""
+msgstr "METODA"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
 "place (METHOD='system')"
 msgstr ""
+"zachová časy přístupu prohlížených souborů a to buď obnovením časů po čtení "
+"(METODA=„REPLACE“; implicitní), nebo nenastavením časů v prvním pořadí "
+"(METODA=„system“)"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
-msgstr ""
+msgstr "nevybaluje čas změny obsahu souboru"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr ""
+"pokusí se vybalit soubory se stejným vlastníkem jako je uveden v archivu "
+"(výchozí pro superuživatele)"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
-msgstr ""
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
+msgstr "rozbaluje soubory pod vaší identitou (výchozí pro běžného uživatele)"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
-msgstr ""
+msgstr "pro jména uživatel/skupin vždy použije čísla"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
-msgstr ""
+msgstr "vybaluje informace o právech souborů (implicitní pro superuživatele)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
 msgstr ""
+"při vybalování práv z archivu použije uživatelovu umask (implicitní pro "
+"běžné uživatele)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
-msgstr ""
+msgstr "při rozbalování seřadí názvy tak, aby odpovídaly pořadí v archivu"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
-msgstr ""
+msgstr "stejné jako -p -s"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr ""
+"pozdrží nastavení časů modifikace a práv rozbalovaných adresářů až do "
+"dokončení rozbalování"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
-msgstr ""
+msgstr "zruší účinek přepínače --delay-directory-restore"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
-msgstr ""
+msgstr "Výběr a přepínání zařízení:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
-msgstr ""
+msgstr "ARCHIV"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
-msgstr ""
+msgstr "pro archiv požije soubor zařízení ARCHIV"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
-msgstr ""
+msgstr "soubor archivu je místní, i když obsahuje dvojtečku"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
-msgstr ""
+msgstr "namísto příkazu rmt použije PŘÍKAZ"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
-msgstr ""
+msgstr "namísto rsh použije PŘÍKAZ"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
-msgstr ""
+msgstr "určuje mechaniku a hustotu"
 
-#: src/tar.c:536
-#, fuzzy
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
-msgstr "Vícesvazkový archiv není mo¾né ovìøit"
+msgstr "vytvoří/vypíše/rozbalí vícesvazkový archiv"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
-msgstr ""
+msgstr "po zapsaní ČÍSLO × 1024 bajtů vymění pásku"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
-msgstr ""
+msgstr "na konci každé pásky spustí skript (implikuje -M)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
-msgstr ""
+msgstr "použije/aktualizuje číslo svazku v SOUBORU"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
-msgstr ""
+msgstr "Bloky zařízení:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
-msgstr ""
+msgstr "BLOKY"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
-msgstr ""
+msgstr "BLOKŮ × 512 bajtů na záznam"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
-msgstr ""
+msgstr "ČÍSLO bajtů na záznam, násobek 512"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
-msgstr ""
+msgstr "v archivu ignoruje vynulované bloky (znamená EOF)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
-msgstr ""
+msgstr "předělat bloky v průběhu čtení (pro roury na BSD 4.2)"
 
-#: src/tar.c:562
-#, fuzzy
+#: src/tar.c:582
 msgid "Archive format selection:"
-msgstr "Odporující si archivní formáty"
+msgstr "Výběr formátu archivu:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
-msgstr ""
+msgstr "FORMÁT"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
-msgstr ""
+msgstr "vytvoří archiv daného formátu"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
-msgstr ""
+msgstr "FORMÁT je jeden z následujících:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
-msgstr ""
+msgstr "starý formát taru V7"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
-msgstr ""
+msgstr "formát taru GNU <= 1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
-msgstr ""
+msgstr "formát taru GNU 1.13.x"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
-msgstr ""
+msgstr "formát POSIX 1003.1-1988 (ustar)"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
-msgstr ""
+msgstr "formát POSIX 1003.1-2001 (pax)"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
-msgstr ""
+msgstr "stejné jako pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
-msgstr ""
+msgstr "stejné jako --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
-msgstr ""
+msgstr "stejné jako --format=posix"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
-msgstr ""
+msgstr "klíčové_slovo[[:]=hodnota][,klíčové_slovo[[:]=hodnota]]…"
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
-msgstr ""
+msgstr "řídicí klíčová slova paxu"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
-msgstr ""
+msgstr "TEXT"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
 msgstr ""
+"vytvoří archiv s názvem svazku TEXT; při výpisu/rozbalení použije TEXT jako "
+"vzor se zástupnými symboly pro název svazku"
 
-#: src/tar.c:593
-#, fuzzy
+#: src/tar.c:613
 msgid "Compression options:"
-msgstr "Odporující si kompresní pøepínaèe"
+msgstr "Přepínače komprese:"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
-msgstr ""
+msgstr "kompresní program určí podle přípony archivu"
 
-#: src/tar.c:597
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
-msgstr ""
-
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr ""
-
-#: src/tar.c:602
-#, fuzzy
-msgid "filter the archive through gzip"
-msgstr "%s: soubor je archiv; nearchivován"
+msgstr "kompresní program neurčí podle přípony archivu"
 
-#: src/tar.c:606
-#, fuzzy
-msgid "filter the archive through compress"
-msgstr "%s: soubor je archiv; nearchivován"
-
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "%s: soubor je archiv; nearchivován"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "%s: soubor je archiv; nearchivován"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "%s: soubor je archiv; nearchivován"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
-msgstr ""
+msgstr "PROGRAM"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
-msgstr ""
+msgstr "archiv protáhne PROGRAMEM (musí znát -d)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
-msgstr ""
+msgstr "Výběr místního souboru:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
+"zadaný SOUBOR přidá do archivu (užitečné, začíná-li jeho název spojovníkem)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
-msgstr ""
+msgstr "ADRESÁŘ"
 
-#: src/tar.c:625
-#, fuzzy
+#: src/tar.c:641
 msgid "change to directory DIR"
-msgstr "Pracovní adresáø nelze zmìnit"
+msgstr "změní adresář na ADRESÁŘ"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
-msgstr ""
+msgstr "seznam jmen souborů na rozbalení nebo zabalení získá ze SOUBORU"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
-msgstr ""
+msgstr "-T čte názvy zakončené nulovým znakem, vypne -C"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
-msgstr ""
+msgstr "zruší účinek předchozího přepínače --null"
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
+"odčiní citování (escapování) názvů souboru načtených přes -T (implicitní)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
-msgstr ""
+msgstr "nezruší citování (escapování) názvů souboru načtených přes -T"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
-msgstr ""
+msgstr "VZOR"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
-msgstr ""
+msgstr "vynechá soubory, které odpovídají VZORU"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
-msgstr ""
+msgstr "vynechá soubory vyjmenované v SOUBORU"
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr ""
+"vynechá obsah adresářů obsahujících CACHEADR.ZNAČKA, kromě souboru značky "
+"samotného"
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
-msgstr ""
+msgstr "vynechá vše pod adresáři obsahujícími CACHEADR.ZNAČKA"
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
-msgstr ""
+msgstr "vynechá adresáře obsahující CACHEADR.ZNAČKA"
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
-msgstr ""
+msgstr "vynechá obsah adresářů obsahujících SOUBOR, vyjma SOUBORU samotného"
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
-msgstr ""
+msgstr "vynechá vše pod adresáři obsahujícími SOUBOR"
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
-msgstr ""
+msgstr "vynechá adresáře obsahující SOUBOR"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
-msgstr ""
+msgstr "vynechá adresáře systému správy verzí"
+
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr "vynechá soubory záloh a zámků"
 
-#: src/tar.c:658
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
-msgstr ""
+msgstr "zabrání automatickému sestupu do adresářů"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
-msgstr ""
+msgstr "při tvorbě archivu se zdrží v místním systému souborů"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
-msgstr ""
+msgstr "sestupuje rekurzivně do adresářů (implicitní)"
 
-#: src/tar.c:664
-#, fuzzy
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
-msgstr "Odstraòuji úvodní `%.*s' z názvù souborù"
+msgstr "neodstraní z názvů souborů úvodní „/“"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
+"následuje symbolické odkazy; archivuje a vybaluje soubory, na které je "
+"odkazováno"
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
+"následuje pevné odkazy; archivuje a vybaluje soubory, na které je odkazováno"
 
-#: src/tar.c:669
+# část cesty (adresář)
+#: src/tar.c:687
 msgid "MEMBER-NAME"
-msgstr ""
+msgstr "SLOŽKA_NÁZVU"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
-msgstr ""
+msgstr "začne v archivu na složce SLOŽKA_NÁZVU"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
-msgstr ""
+msgstr "ukládá jen soubory novější než DATUM_NEBO_SOUBOR"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
-msgstr ""
+msgstr "DATUM"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
-msgstr ""
+msgstr "při změně dat porovná datum i čas"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
-msgstr ""
+msgstr "STRATEGIE"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
-msgstr ""
+msgstr "před odstraněním vytvoří záložní kopii za použití STRATEGIE"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
-msgstr ""
+msgstr "ŘETĚZEC"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
 msgstr ""
+"před odstraněním vytvoří záložní kopii, potlačí obvyklou příponu („~“, není-"
+"li uvedeno jinak v proměnné prostředí SIMPLE_BACKUP_SUFFIX)"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
-msgstr ""
+msgstr "Transformace názvů souborů:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
-msgstr ""
+msgstr "při rozbalování odřízne ČÍSLO úvodních složek z názvů souborů"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
-msgstr ""
+msgstr "VÝRAZ"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
-msgstr ""
+msgstr "názvy souborů transformuje pomocí nahrazovacího VÝRAZU sedu"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
+"Přepínače řídicí výběr souborů podle názvu (ovlivňuje vzory jak pro "
+"vyloučení, tak pro zahrnutí)"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
-msgstr ""
+msgstr "ignoruje velikost písmen"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
-msgstr ""
+msgstr "vzory se testují název souboru od začátku"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
-msgstr ""
+msgstr "vzory se testují po každém „/“ (implicitní u vyloučení)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
-msgstr ""
+msgstr "testování je citlivé na velikost (implicitní)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
-msgstr ""
+msgstr "použije žolíkové znaky (implicitní u vyloučení)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
-msgstr ""
+msgstr "testuje se přesný řetězec"
 
-#: src/tar.c:710
-#, fuzzy
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
-msgstr "Svazek %s neodpovídá vzorku %s"
+msgstr "žolíkové znaky nezahrnují „/“"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
-msgstr ""
+msgstr "žolíkové znaky zahrnují „/“ (implicitní u vyloučení)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
-msgstr ""
+msgstr "Informativní výstup:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
-msgstr ""
+msgstr "vypisuje zpracovávané soubory"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr "KLÍČOVÉ_SLOVO"
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr "řídí varování"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
-msgstr ""
+msgstr "zobrazuje zprávy o postupu každých ČÍSLO. záznam (implicitně 10)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
-msgstr ""
+msgstr "AKCE"
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
-msgstr ""
+msgstr "v každém kontrolním bodu vykoná AKCI"
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
-msgstr ""
+msgstr "hlásí, že nebyly zpracovány všechny odkazy"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
-msgstr ""
+msgstr "SIGNÁL"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
 "SIGQUIT, SIGINT, SIGUSR1 and SIGUSR2; the names without SIG prefix are also "
 "accepted"
 msgstr ""
+"po zpracování archivu ohlásí celkový počet bajtů; je-li zadán argument, podá "
+"hlášení, až bude doručen SIGNÁL; Povolené signály jsou SIGHUP, SIGQUIT, "
+"SIGINT, SIGUSR1 a SIGUSR2; názvy bez předpony SIG jsou rovněž přípustné"
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
-msgstr ""
+msgstr "časy změn obsahu souborů vypisuje v UTC"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
-msgstr ""
+msgstr "informativní výstup pošle do SOUBORU"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
-msgstr ""
+msgstr "každou zprávu opatří číslem bloku uvnitř archivu"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
-msgstr ""
+msgstr "na každou akcí žádá potvrzení"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
-msgstr ""
+msgstr "zobrazí implicitní argumenty taru"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr ""
+"při vypisování nebo rozbalování zobrazí každý adresář, který neodpovídá "
+"vyhledávacím podmínkám"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
-msgstr ""
+msgstr "zobrazuje názvy souborů a archivů po transformaci"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
-msgstr ""
+msgstr "STYL"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
-msgstr ""
+msgstr "nastaví styl citování názvů; platné hodnoty STYLŮ nalezte níže"
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
-msgstr ""
+msgstr "cituje navíc znaky z ŘETĚZCE"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
-msgstr ""
+msgstr "zakáže citování znaků z ŘETĚZCE"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
-msgstr ""
+msgstr "Přepínače pro kompatibilitu"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr ""
+"při vytváření archivu má stejný význam jako --old-archive, při rozbalování "
+"jako --no-same-owner"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
-msgstr ""
+msgstr "Další přepínače:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
-msgstr ""
+msgstr "zakáže použití některých potenciálně nebezpečných přepínačů"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
-msgstr "Více jak jeden pøepínaè z `-Acdtrux' nemù¾e být zadán"
+#: src/tar.c:927
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
+msgstr ""
+"Nemůže být zadán více jak jeden přepínač z „-Acdtrux“ nebo „--test-label“"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
-msgstr "Odporující si kompresní pøepínaèe"
+msgstr "Odporující si kompresní přepínače"
 
-#: src/tar.c:986
-#, fuzzy, c-format
+#: src/tar.c:993
+#, c-format
 msgid "Unknown signal name: %s"
-msgstr " neznámý souborový typ %s\n"
+msgstr "Neznámý název signálu: %s"
 
-#: src/tar.c:1010
-#, fuzzy
+#: src/tar.c:1017
 msgid "Date sample file not found"
-msgstr "Soubor ze kterého se má vzít datum a èas nebyl nalezen"
+msgstr "Soubor, ze kterého se má vzít datum a čas, nebyl nalezen"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
-msgstr "Datum neznámého formátu %2$s nahrazuji %1$s"
+msgstr "Datum neznámého formátu %2$s nahrazuji %1$s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
-msgstr ""
+msgstr "Přepínač %s: S datem „%s“ bude zacházeno jako s %s"
 
-#: src/tar.c:1120
-#, fuzzy, c-format
+#: src/tar.c:1132
+#, c-format
 msgid "%s: file list already read"
-msgstr "%s: soubor je archiv; nearchivován"
+msgstr "%s: seznam souborů již načten"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
-msgstr ""
+msgstr "%s: načtený název souboru obsahuje nulový znak"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
-msgstr ""
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, c-format
+msgid "filter the archive through %s"
+msgstr "archiv protáhne skrze filtr %s"
 
-#: src/tar.c:1253
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
+msgstr "Pro přepínač --quoting-style jsou platné argumenty:"
+
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
 msgstr ""
+"\n"
+"Implicitní přepínače *tohoto* taru:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
-msgstr "Neplatný poèet bajtù na záznam"
+msgstr "Neplatný počet bajtů na záznam"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
-msgstr "Neplatná délka pásky"
+msgstr "Neplatná délka pásky"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr "Chybná hodnota úrovně přírůstku"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
-msgstr "Více ne¾ jedeno poèáteèní datum"
+msgstr "Více než jedeno počáteční datum"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
-msgstr ""
+msgstr "Neplatná hodnota verze řídkého formátu"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
-msgstr ""
+msgstr "--atime-preserve='system' není na této platformě podporován"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
-msgstr ""
+msgstr "hodnota --checkpoint není celé číslo"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
-msgstr "%s: Neplatná skupina"
+#: src/tar.c:1830
+msgid "Invalid group"
+msgstr "Neplatná skupina"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
-msgstr "Zadána chybná práva"
+msgstr "Zadána chybná práva"
 
-#: src/tar.c:1774
-#, fuzzy
+#: src/tar.c:1894
 msgid "Invalid number"
-msgstr "Neplatné èíslo i-uzlu"
+msgstr "Neplatné číslo"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
-msgstr "Neplatný vlastník"
+msgstr "Neplatný vlastník"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
+"Přepínač --preserve je zastaralý, místo něj používejte --preserve-"
+"permissions --preserve-order"
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
-msgstr "Chybná velikost záznamu"
+msgstr "Chybná velikost záznamu"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
-msgstr "Velikost záznamu musí být násobek %d."
+msgstr "Velikost záznamu musí být násobek %d."
 
-#: src/tar.c:1872
-#, fuzzy
+#: src/tar.c:2000
 msgid "Invalid number of elements"
-msgstr "Neplatná délka pásky"
+msgstr "Neplatný počet prvků"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
-msgstr ""
+msgstr "Povolen je jen jeden přepínač --to-command"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
-msgstr ""
+msgstr "Neplatný argument hustoty: %s"
 
-#: src/tar.c:1994
-#, fuzzy, c-format
+#: src/tar.c:2126
+#, c-format
 msgid "Unknown density: `%c'"
-msgstr "Neznámý vzorek `%s'"
+msgstr "Neznámá hustota: „%c“"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
-msgstr "Pøepínaè `-[0-7][lmh]' není podporován tímto tarem"
+msgstr "Přepínače „-[0-7][lmh]“ nejsou *tímto* tarem podporovány"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
-msgstr ""
+msgstr "[SOUBOR]…"
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
-msgstr "Pøepínaè `%c' vy¾aduje argument."
+msgstr "PÅ\99epínaÄ\8d â\80\9e%câ\80\9c vyžaduje argument."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
-msgstr ""
+msgstr "bez seznamu souborů nemá --occurrence smysl"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
-msgstr ""
+msgstr "--occurrence nelze v požadovaném režimu operace použít"
 
-#: src/tar.c:2270
-#, fuzzy
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
-msgstr "Více archivaèních souborù vy¾aduje pøepínaè `-M'"
+msgstr "Více archivačních souborů vyžaduje přepínač „-M“"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "--listed-incremental a --newer nelze kombinovat"
 
-#: src/tar.c:2292
-#, fuzzy, c-format
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr "--level bez --listed-incremental postrádá smysl"
+
+#: src/tar.c:2404
+#, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
-msgstr[0] "%s: Název svazku je pøíli¹ dlouhý (limit je %lu bajtù)"
-msgstr[1] "%s: Název svazku je pøíli¹ dlouhý (limit je %lu bajtù)"
+msgstr[0] "%s: Název svazku je příliš dlouhý (limit je %'lu bajt)"
+msgstr[1] "%s: Název svazku je příliš dlouhý (limit je %'lu bajty)"
+msgstr[2] "%s: Název svazku je příliš dlouhý (limit je %'lu bajtů)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
-msgstr "Vícesvazkový archiv není mo¾né ovìøit"
+msgstr "Vícesvazkový archiv není možné ověřit"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
-msgstr "Komprimovaný archiv nelze ovìøit"
+msgstr "Komprimovaný archiv nelze ověřit"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
-msgstr "Vícesvazkový komprimovaný archiv nelze vytvoøit"
+msgstr "Vícesvazkový komprimovaný archiv nelze vytvořit"
 
-#: src/tar.c:2319
-#, fuzzy
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
-msgstr "Komprimovaný archiv nelze aktualizovat"
+msgstr "Komprimované archivy nelze zřetězit"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
-msgstr ""
+msgstr "Přepínač --pax-option lze použít jen na posixových archivech"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
-msgstr ""
+msgstr "Délka svazku nemůže být kratší než délka záznamu"
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
-msgstr ""
+msgstr "--preserve-order není slučitelný s --listed-incremental"
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
-msgstr "Vytvoøení prázdného archivu odmítnuto."
+msgstr "Vytvoření prázdného archivu odmítnuto."
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
-msgstr "Pøepínaèe `-Aru' jsou nesluèitelné s pøepínaèem `-f -'"
+msgstr "Přepínače „-Aru“ jsou neslučitelné s přepínačem „-f -“"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
-msgstr "Musíte zadat jeden z pøepínaèù `-Acdtrux'"
+#: src/tar.c:2592
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
+msgstr "Musíte zadat jeden z přepínačů „-Acdtrux“ nebo „--test-label“"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
-msgstr ""
+msgstr "Končí se chybovým kódem, protože byly zaznamenány chyby"
 
 #: src/update.c:86
-#, fuzzy, c-format
+#, c-format
 msgid "%s: File shrank by %s byte"
 msgid_plural "%s: File shrank by %s bytes"
-msgstr[0] "%s: Soubor zkrácen o bajtù: %s"
-msgstr[1] "%s: Soubor zkrácen o bajtù: %s"
+msgstr[0] "%s: Soubor zkrácen o %s bajt"
+msgstr[1] "%s: Soubor zkrácen o %s bajty"
+msgstr[2] "%s: Soubor zkrácen o %s bajtů"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
-msgstr ""
+msgstr "Klíčové slovo %s není známo nebo ještě nebylo implementováno"
+
+#: src/xheader.c:173
+msgid "Time stamp is out of allowed range"
+msgstr "Časový údaj je mimo povolený rozsah"
 
-#: src/xheader.c:182
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
-msgstr ""
+msgstr "Vzor %s nelze použít"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
-msgstr ""
+msgstr "Klíčové slovo %s nelze přebít"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
-msgstr ""
+msgstr "Chybná rozšířená hlavička: chybí délka"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
-msgstr ""
+msgstr "Délka rozšířené hlavičky je mimo povolený rozsah"
 
-#: src/xheader.c:511
-#, fuzzy, c-format
+#: src/xheader.c:556
+#, c-format
 msgid "Extended header length %*s is out of range"
-msgstr "Base-64 øetìzec %s je mimo rozsah typu %s"
+msgstr "Délka rozšířené hlavičky %*s je mimo rozsah"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
-msgstr ""
+msgstr "Chybná rozšířená hlavička: po délce chybí bílé místo"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
-msgstr ""
+msgstr "Chybná rozšířená hlavička: chybí znak rovná se"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
-msgstr ""
+msgstr "Chybná rozšířená hlavička: chybí odřádkování"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
-msgstr ""
+msgstr "Ignoruje se neznámé klíčové slovo „%s“ rozšířené hlavičky"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
+"Utvořená dvojice klíčové slovo / hodnota je příliš dlouhá (klíčové slovo = %"
+"s, délka %s)"
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
-#, fuzzy, c-format
+#: src/xheader.c:862
+#, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
-msgstr "Hodnota %s typu %s je mimo rozsah %s..%s"
+msgstr "%s=%s v rozšířené hlavičce je mimo rozsah %s–%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
-msgstr ""
+msgstr "Chybná rozšířená hlavička: %s=%s není platné"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
-msgstr ""
+msgstr "Chybná rozšířená hlavička: nadbytečná %s=%s"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
-msgstr ""
+msgstr "Chybná rozšířená hlavička: neplatný %s: neočekávaný oddělovač %c"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
-msgstr ""
+msgstr "Chybná rozšířená hlavička: neplatný %s: lichý počet hodnot"
 
 #: src/checkpoint.c:107
-#, fuzzy, c-format
+#, c-format
 msgid "%s: not a valid timeout"
-msgstr "%s: Neplatná skupina"
+msgstr "%s: neplatný časový limit"
 
 #: src/checkpoint.c:112
 #, c-format
 msgid "%s: unknown checkpoint action"
-msgstr ""
+msgstr "%s: neznámá akce kontrolního bodu"
 
 #: src/checkpoint.c:132
 msgid "write"
-msgstr ""
+msgstr "zápis"
 
 #: src/checkpoint.c:132
 msgid "read"
-msgstr ""
+msgstr "čtení"
 
 #. TRANSLATORS: This is a ``checkpoint of write operation'',
 #. *not* ``Writing a checkpoint''.
 #. E.g. in Spanish ``Punto de comprobaci@'on de escritura'',
 #. *not* ``Escribiendo un punto de comprobaci@'on''
 #: src/checkpoint.c:222
-#, fuzzy, c-format
+#, c-format
 msgid "Write checkpoint %u"
-msgstr "Zapisuji testovací bod %d"
+msgstr "Kontrolní bod zápisu %u"
 
 #. TRANSLATORS: This is a ``checkpoint of read operation'',
 #. *not* ``Reading a checkpoint''.
 #. E.g. in Spanish ``Punto de comprobaci@'on de lectura'',
 #. *not* ``Leyendo un punto de comprobaci@'on''
 #: src/checkpoint.c:228
-#, fuzzy, c-format
+#, c-format
 msgid "Read checkpoint %u"
-msgstr "Ètení testovacího bodu %d"
+msgstr "Kontrolní bod čtení %u"
 
-#: tests/genfile.c:111
-#, fuzzy
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
-msgstr "Generuji datové soubory pro testování GNU taru.\n"
+msgstr ""
+"genfile pracuje s datovými soubory testovacího balíku GNU paxutils.\n"
+"PŘEPÍNAČE jsou:\n"
 
-#: tests/genfile.c:126
-#, fuzzy
+#: tests/genfile.c:128
 msgid "File creation options:"
-msgstr "Odporující si kompresní pøepínaèe"
+msgstr "Přepínače tvorby souboru:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
-msgstr ""
+msgstr "VELIKOST"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
-msgstr ""
+msgstr "Vytvoří soubor zadané VELIKOSTI"
 
-#: tests/genfile.c:130
-#, fuzzy
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
-msgstr "Chyba pøi zápise na standardní výstup"
+msgstr "Místo na standardní výstup píše do souboru JMÉNO"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
-msgstr ""
+msgstr "Názvy souborů čte ze SOUBORU"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
-msgstr ""
+msgstr "-T čte názvy zakončené nulovými znaky"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
+"Vyplní soubor zadaným VZOREM. VZOR je „default“ (výchozí) nebo „zeros“ (nuly)"
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
-msgstr ""
+msgstr "Velikost bloku pro řídké soubory"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
-msgstr ""
+msgstr "Vytvoří řídký soubor. Zbytek příkazové řádku definuje mapu souboru."
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
-msgstr ""
+msgstr "POZICE"
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
-msgstr ""
+msgstr "Před zápisem dat se přesune na zadanou POZICI"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
-msgstr ""
+msgstr "Přepínače statistiky souboru:"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
+"U každého zadaného souboru vypíše obsah struktury stat. Implicitní FORMÁT je:"
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
-msgstr ""
+msgstr "Přepínače synchronního vykonávání:"
+
+#: tests/genfile.c:164
+msgid "OPTION"
+msgstr "PŘEPÍNAČ"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
+"Provede ARGUMENTY. Užitečné s --checkpoint a jedním z --cut, --append, --"
+"touch, --unlink"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
-msgstr ""
+msgstr "Provede zadanou akci (vizte níže) při dosažení kontrolního bodu ČÍSLO"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
-msgstr ""
+msgstr "Nastaví datum pro následující přepínač --touch"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
-msgstr ""
+msgstr "Zobrazuje prováděné kontrolní body a návratové kódy PŘÍKAZU"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
+"Synchronní vykonávání akcí. Tyto budou provedeny, když bude dosaženo číslo "
+"kontrolního bodu zadaného přepínačem --checkpoint."
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
+"Zkrátí SOUBOR na velikost zadanou předchozím přepínačem --length (nebo na 0, "
+"není-li uveden)"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
+"K SOUBORU připojí VELIKOST bajtů. VELIKOST se zadává předcházejícím "
+"přepínačem --length."
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
-msgstr ""
+msgstr "Aktualizuje časy přístupu a změny obsahu SOUBORU"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
-msgstr ""
+msgstr "Vykoná PŘÍKAZ"
 
-#: tests/genfile.c:240
-#, fuzzy, c-format
-msgid "Invalid size: %s"
-msgstr "Neplatný èas souboru"
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr "Smaže (unlink) SOUBOR"
 
 #: tests/genfile.c:245
-#, fuzzy, c-format
+#, c-format
+msgid "Invalid size: %s"
+msgstr "Neplatná velikost: %s"
+
+#: tests/genfile.c:250
+#, c-format
 msgid "Number out of allowed range: %s"
-msgstr "Èíslo i-uzlu mimo rozsah"
+msgstr "Číslo je mimo povolený rozsah: %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
-msgstr ""
+msgstr "Záporná velikost: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
-msgstr ""
+msgstr "stat(%s) selhalo"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
-msgstr ""
+msgstr "požadovaná délka souboru %'lu, aktuální %'lu"
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
-msgstr ""
+msgstr "vytvořený soubor není řídký"
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
-msgstr ""
+msgstr "Chyba při rozebírání čísla poblíž „%s“"
 
-#: tests/genfile.c:359
-#, fuzzy, c-format
+#: tests/genfile.c:368
+#, c-format
 msgid "Unknown date format"
-msgstr "Neznámá systémová chyba"
+msgstr "Neznámý formát data"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
-msgstr ""
+msgstr "[ARGUMENT…]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
-#, fuzzy, c-format
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
+#, c-format
 msgid "cannot open `%s'"
-msgstr "Neznámý vzorek `%s'"
+msgstr "„%s“ nelze otevřít"
 
-#: tests/genfile.c:425
-#, fuzzy
+#: tests/genfile.c:435
 msgid "cannot seek"
-msgstr "Nelze zavøít"
+msgstr "v souboru se nelze pohybovat"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
-msgstr ""
+msgstr "název souboru obsahuje nulový znak"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
+"na standardní výstup nelze generovat řídké soubory, použijte přepínač --file"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
-msgstr ""
+msgstr "nesprávná maska (poblíž „%s“)"
 
-#: tests/genfile.c:591 tests/genfile.c:624
-#, fuzzy, c-format
+#: tests/genfile.c:601 tests/genfile.c:634
+#, c-format
 msgid "Unknown field `%s'"
-msgstr "Neznámý vzorek `%s'"
+msgstr "Neznámá položka „%s“"
 
-#: tests/genfile.c:651
-#, fuzzy, c-format
+#: tests/genfile.c:661
+#, c-format
 msgid "cannot set time on `%s'"
-msgstr "%s: Nelze zmìnit pozici v souboru na %s"
+msgstr "Souboru „%s“ nelze nastavit čas"
+
+#: tests/genfile.c:700
+#, c-format
+msgid "cannot unlink `%s'"
+msgstr "„%s“ nelze odstranit (unlink)"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
-msgstr ""
+msgstr "Příkaz skončil úspěšně\n"
 
-#: tests/genfile.c:807
-#, fuzzy, c-format
+#: tests/genfile.c:828
+#, c-format
 msgid "Command failed with status %d\n"
-msgstr "Potomek byl ukonèen signálem %d"
+msgstr "Příkaz selhal s kódem %d\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
-msgstr ""
+msgstr "Příkaz skončil signálem %d\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
-msgstr ""
+msgstr "Příkaz pozastaven signálem %d\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
-msgstr ""
+msgstr "Příkaz skončil výpisem obrazu paměti\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
-msgstr ""
+msgstr "Příkaz ukončen\n"
 
-#: tests/genfile.c:851
-#, fuzzy, c-format
+#: tests/genfile.c:872
+#, c-format
 msgid "--stat requires file names"
-msgstr "--Rozdìlený název souboru--\n"
+msgstr "--stat potřebuje název souboru"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr ""
+#~ msgid "Cannot resolve hostname %s"
+#~ msgstr "Název počítače %s nelze přeložit"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
-#~ msgstr "Upozornìní: pøepínaè -I není podporován; nemysleli jste -j nebo -T?"
+#~ msgid "suppress this warning."
+#~ msgstr "nebo tuto hlášku potlačte přepínačem --no-wildcards."
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: neznámý přepínač -- %c\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Chyby v programu oznamujte na adrese <%s> (pouze anglicky),\n"
+#~ "připomínky k překladu na adresu <translation-team-cs@lists.sourceforge."
+#~ "net>\n"
+#~ "(česky).\n"
+
+#~ msgid "Input string too long"
+#~ msgstr "Vstupní řetězec je příliš dlouhý"
+
+#~ msgid "Number syntax error"
+#~ msgstr "Syntaktická chyba čísla"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Místo pro buffer není možné alokovat\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Místo pro buffer není možné alokovat"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Více informací získáte příkazem „%s --help“.\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Použití: %s [PŘEPÍNAČ]\n"
+#~ "Manipuluje s páskovou mechanikou přijímaje příkazy vzdáleného procesu.\n"
+#~ "\n"
+#~ "  --version     Vypíše označení verze.\n"
+#~ "  --help        Vypíše tuto nápovědu.\n"
+
+#~ msgid "Seek offset error"
+#~ msgstr "Chyba při posunu na pozici"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Předčasný konec souboru"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Čtení z %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Z chyby se nelze zotavit: ukončuji se"
+
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "archiv protáhne skrze bzip2"
+
+#~ msgid "filter the archive through gzip"
+#~ msgstr "archiv protáhne skrze gzip"
+
+#~ msgid "filter the archive through compress"
+#~ msgstr "archiv protáhne skrze compress"
+
+#~ msgid "filter the archive through lzma"
+#~ msgstr "archiv protáhne skrze lzma"
+
+#~ msgid "filter the archive through lzop"
+#~ msgstr "archiv protáhne skrze lzop"
 
 #~ msgid "block size"
 #~ msgstr "velikost bloku"
 
 #~ msgid "Cannot dup"
-#~ msgstr "Popisovaè souboru nelze duplikovat"
+#~ msgstr "Popisovač souboru nelze duplikovat"
 
 #~ msgid "Cannot use compressed or remote archives"
-#~ msgstr "Komprimované nebo vzdálené archivy nelze pou¾ít"
+#~ msgstr "Komprimované nebo vzdálené archivy nelze použít"
 
 #~ msgid "tar (child)"
 #~ msgstr "tar (potomek)"
@@ -2638,43 +2833,40 @@ msgstr ""
 #~ msgstr "tar (prapotomek)"
 
 #~ msgid "WARNING: No volume header"
-#~ msgstr "VAROVÁNÍ: Chybí hlavièka svazku"
+#~ msgstr "VAROVÁNÍ: Chybí hlavička svazku"
 
 #~ msgid "Child returned status %d"
-#~ msgstr "Potomek vrátil status %d"
+#~ msgstr "Potomek vrátil status %d"
 
 #~ msgid "Member names contain `..'"
-#~ msgstr "Názvy souborù obsahují `..'"
+#~ msgstr "Názvy souborů obsahují „..“"
 
 #~ msgid "%s: Member name contains `..'"
-#~ msgstr "%s: Název souboru obsahuje `..'"
+#~ msgstr "%s: Název souboru obsahuje „..“"
 
 #~ msgid "Visible long name error"
-#~ msgstr "Viditelná chyba dlouhého názvu"
-
-#~ msgid "Time stamp out of range"
-#~ msgstr "Èas souboru mimo rozsah"
+#~ msgstr "Viditelná chyba dlouhého názvu"
 
 #~ msgid "Device number out of range"
-#~ msgstr "Èíslo zaøízení je mimo rozsah"
+#~ msgstr "Číslo zařízení je mimo rozsah"
 
 #~ msgid "Visible longname error"
-#~ msgstr "Viditelná chyba dlouhého názvu"
+#~ msgstr "Viditelná chyba dlouhého názvu"
 
 #~ msgid "Renamed %s to %s"
-#~ msgstr "Soubor %s pøejmenován na %s"
+#~ msgstr "Soubor %s přejmenován na %s"
 
 #~ msgid "%s: Cannot symlink to %s"
-#~ msgstr "%s: Symbolický odkaz na %s nelze vytvoøit"
+#~ msgstr "%s: Symbolický odkaz na %s nelze vytvořit"
 
 #~ msgid "Symlinked %s to %s"
 #~ msgstr "%s odkazuje na %s"
 
 #~ msgid "Unknown demangling command %s"
-#~ msgstr "Neznámý pøíkaz %s pro spojování rozsekaných jmen"
+#~ msgstr "Neznámý příkaz %s pro spojování rozsekaných jmen"
 
 #~ msgid "Missing file name after -C"
-#~ msgstr "Za -C chybí název souboru"
+#~ msgstr "Za -C chybí název souboru"
 
 #~ msgid "Copyright %d Free Software Foundation, Inc."
 #~ msgstr "Copyright %d Free Software Foundation, Inc."
@@ -2685,26 +2877,26 @@ msgstr ""
 #~ "License;\n"
 #~ "see the file named COPYING for details."
 #~ msgstr ""
-#~ "  Toto je volnì ¹iøitelné programové vybavení, které je zcela BEZ "
-#~ "ZÁRUKY.\n"
-#~ "Podmínky pro kopírování a roz¹iøování naleznete v Obecné veøejné licenci "
+#~ "  Toto je volně šiřitelné programové vybavení, které je zcela BEZ "
+#~ "ZÁRUKY.\n"
+#~ "Podmínky pro kopírování a rozšiřování naleznete v Obecné veřejné licenci "
 #~ "GNU\n"
-#~ "(GNU General Public Licence). Více informací získáte ve zdrojových "
+#~ "(GNU General Public Licence). Více informací získáte ve zdrojových "
 #~ "textech\n"
 #~ "v souboru COPYING."
 
 #~ msgid "rmtd: Garbage command %c\n"
-#~ msgstr "rmtd: Neznámý pøíkaz %c\n"
+#~ msgstr "rmtd: Neznámý příkaz %c\n"
 
 #~ msgid ""
 #~ "GNU `tar' saves many files together into a single tape or disk archive, "
 #~ "and\n"
 #~ "can restore individual files from the archive.\n"
 #~ msgstr ""
-#~ "  GNU `tar' je archivaèní program. Ukládá soubory do archivu na pásku "
+#~ "  GNU „tar“ je archivační program. Ukládá soubory do archivu na pásku "
 #~ "nebo \n"
-#~ "disk. Z archivu doká¾e rozbalit jak celé hierarchie souborù, tak i "
-#~ "jednotlivé\n"
+#~ "disk. Z archivu dokáže rozbalit jak celé hierarchie souborů, tak i "
+#~ "jednotlivé\n"
 #~ "soubory.\n"
 
 #~ msgid ""
@@ -2713,10 +2905,10 @@ msgstr ""
 #~ "for the equivalent short option also.  Similarly for optional arguments.\n"
 #~ msgstr ""
 #~ "\n"
-#~ "  Jestli¾e dlouhé pøepínaèe mají povinný argument, pak tento argument je\n"
-#~ "povinný i u jejich krátkých forem. Obdobnì je tomu v pøípadì, kdy je "
+#~ "  Jestliže dlouhé přepínače mají povinný argument, pak tento argument je\n"
+#~ "povinný i u jejich krátkých forem. Obdobně je tomu v případě, kdy je "
 #~ "argument\n"
-#~ "nepovinný.\n"
+#~ "nepovinný.\n"
 
 #~ msgid ""
 #~ "\n"
@@ -2733,19 +2925,19 @@ msgstr ""
 #~ "      --delete            delete from the archive (not on mag tapes!)\n"
 #~ msgstr ""
 #~ "\n"
-#~ "Hlavní funkce:\n"
-#~ "  -t, --list              vypí¹e obsah archivu\n"
-#~ "  -x, --extract, --get    vyzvede soubor(y) z archivu\n"
-#~ "  -c, --create            vytvoøí nový archiv\n"
-#~ "  -d, --diff, --compare   nalezne rozdíly mezi archivem a souborovým "
-#~ "systémem\n"
-#~ "  -r, --append            pøidá soubory na konec archivu\n"
-#~ "  -u, --update            pøidá pouze soubory novìj¹í, ne¾ jsou v "
+#~ "Hlavní funkce:\n"
+#~ "  -t, --list              vypíše obsah archivu\n"
+#~ "  -x, --extract, --get    vyzvedne soubor(y) z archivu\n"
+#~ "  -c, --create            vytvoří nový archiv\n"
+#~ "  -d, --diff, --compare   nalezne rozdíly mezi archivem a souborovým "
+#~ "systémem\n"
+#~ "  -r, --append            přidá soubory na konec archivu\n"
+#~ "  -u, --update            pÅ\99idá pouze soubory novÄ\9bjší, než jsou v "
 #~ "archivu\n"
-#~ "  -A, --catenate          pøidá soubory z tar archivu do archivu\n"
-#~ "      --concatenate       stejné jako -A\n"
-#~ "      --delete            ma¾e z archivu (nefunguje na magnetických "
-#~ "páskách)\n"
+#~ "  -A, --catenate          přidá soubory z tar archivu do archivu\n"
+#~ "      --concatenate       stejné jako -A\n"
+#~ "      --delete            maže z archivu (nefunguje na magnetických "
+#~ "páskách)\n"
 
 #~ msgid ""
 #~ "\n"
@@ -2770,26 +2962,26 @@ msgstr ""
 #~ "files\n"
 #~ msgstr ""
 #~ "\n"
-#~ "Modifikátory operací:\n"
-#~ "  -W, --verify               ovìøí archiv po zápisu na médium\n"
-#~ "      --remove-files         sma¾e originální soubory po jejich "
+#~ "Modifikátory operací:\n"
+#~ "  -W, --verify               ověří archiv po zápisu na médium\n"
+#~ "      --remove-files         smaže originální soubory po jejich "
 #~ "archivaci\n"
-#~ "  -k, --keep-old-files       nepøepisuje existující soubory pøi "
-#~ "rozbalování\n"
+#~ "  -k, --keep-old-files       nepřepisuje existující soubory při "
+#~ "rozbalování\n"
 #~ "                             archivu\n"
-#~ "      --overwrite            pøepisuje existující soubory pøi "
-#~ "rozbalování\n"
-#~ "  -U, --unlink-first         sma¾e soubory pøed jejich pøepsáním\n"
-#~ "      --recursive-unlink     sma¾e prázdné hierarchie pøed \n"
-#~ "                             rozbalováním adresáøù\n"
-#~ "  -S, --sparse               soubory s dírami zpracuje efektivnìji\n"
-#~ "  -O, --to-stdout            rozbalí archiv na standardní výstup\n"
-#~ "  -G, --incremental          zpracuje starý GNU-formát inkrementální "
-#~ "zálohy\n"
+#~ "      --overwrite            přepisuje existující soubory při "
+#~ "rozbalování\n"
+#~ "  -U, --unlink-first         smaže soubory před jejich přepsáním\n"
+#~ "      --recursive-unlink     smaže prázdné hierarchie před \n"
+#~ "                             rozbalováním adresářů\n"
+#~ "  -S, --sparse               soubory s dírami zpracuje efektivněji\n"
+#~ "  -O, --to-stdout            rozbalí archiv na standardní výstup\n"
+#~ "  -G, --incremental          zpracuje starý GNU-formát inkrementální "
+#~ "zálohy\n"
 #~ "  -g, --listed-incremental=SOUBOR\n"
-#~ "                             zpracuje nový GNU-formát inkrementální "
-#~ "zálohy\n"
-#~ "      --ignore-failed-read   ignoruje chyby pøi ètení souborù\n"
+#~ "                             zpracuje nový GNU-formát inkrementální "
+#~ "zálohy\n"
+#~ "      --ignore-failed-read   ignoruje chyby při čtení souborů\n"
 
 #~ msgid ""
 #~ "\n"
@@ -2812,32 +3004,32 @@ msgstr ""
 #~ "      --preserve               same as both -p and -s\n"
 #~ msgstr ""
 #~ "\n"
-#~ "Zpracování atributù souborù:\n"
-#~ "      --owner=JMÉNO            pou¾ije JMÉNO jako vlastníka pøidávaných "
-#~ "souborù\n"
-#~ "      --group=JMÉNO            pou¾ije JMÉNO jako skupinu pøidávaných "
-#~ "souborù\n"
-#~ "      --mode=ZMÌNY             pou¾ije jako práva (symbolická) "
-#~ "pøidávaných\n"
-#~ "                               souborù\n"
-#~ "      --atime-preserve         nemìní pøístupový èas na zpracovávaných\n"
+#~ "Zpracování atributů souborů:\n"
+#~ "      --owner=JMÉNO            použije JMÉNO jako vlastníka přidávaných "
+#~ "souborů\n"
+#~ "      --group=JMÉNO            použije JMÉNO jako skupinu přidávaných "
+#~ "souborů\n"
+#~ "      --mode=ZMĚNY             použije jako práva (symbolická) "
+#~ "přidávaných\n"
+#~ "                               souborů\n"
+#~ "      --atime-preserve         nemění přístupový čas na zpracovávaných\n"
 #~ "                               souborech\n"
-#~ "  -m, --modification-time      u rozbalovávaných souborù nenastaví èas\n"
-#~ "                               poslední modifikace souboru z archivu\n"
-#~ "      --same-owner             u rozbalovávaných souborù zkou¹í nastavit\n"
-#~ "                               stejného vlastníka jako je v archivu\n"
-#~ "      --no-same-owner          rozbalí soubory a v¹echny budou vlastnìné "
-#~ "Vámi\n"
-#~ "      --numeric-owner          v¾dy pou¾ívá èísla pro jména vlastníka/"
+#~ "  -m, --modification-time      u rozbalovávaných souborů nenastaví čas\n"
+#~ "                               poslední modifikace souboru z archivu\n"
+#~ "      --same-owner             u rozbalovávaných souborů zkouší nastavit\n"
+#~ "                               stejného vlastníka jako je v archivu\n"
+#~ "      --no-same-owner          rozbalí soubory a všechny budou vlastněné "
+#~ "Vámi\n"
+#~ "      --numeric-owner          vždy používá čísla pro jména vlastníka/"
 #~ "skupiny\n"
-#~ "  -p, --same-permissions       u rozbalovávaných souborù nastaví stejná\n"
-#~ "                               práva, jaká mají v archivu\n"
-#~ "      --no-same-permissions    pøi rozbalování nenastavuje práva\n"
-#~ "      --preserve-permissions   stejné jako -p\n"
-#~ "  -s, --same-order             seøazení jmen souborù pro rozbalení je\n"
-#~ "                               stejné s archivem\n"
-#~ "      --preserve-order         stejné jako -s\n"
-#~ "      --preserve               stejné jako zadání -p a -s\n"
+#~ "  -p, --same-permissions       u rozbalovávaných souborů nastaví stejná\n"
+#~ "                               práva, jaká mají v archivu\n"
+#~ "      --no-same-permissions    při rozbalování nenastavuje práva\n"
+#~ "      --preserve-permissions   stejné jako -p\n"
+#~ "  -s, --same-order             seřazení jmen souborů pro rozbalení je\n"
+#~ "                               stejné s archivem\n"
+#~ "      --preserve-order         stejné jako -s\n"
+#~ "      --preserve               stejné jako zadání -p a -s\n"
 
 #~ msgid ""
 #~ "\n"
@@ -2857,21 +3049,21 @@ msgstr ""
 #~ "      --volno-file=FILE          use/update the volume number in FILE\n"
 #~ msgstr ""
 #~ "\n"
-#~ "Výbìr zaøízení:\n"
-#~ "  -f, --file=ARCHIV              pracuje s archivem nebo zaøízením "
+#~ "Výběr zařízení:\n"
+#~ "  -f, --file=ARCHIV              pracuje s archivem nebo zařízením "
 #~ "ARCHIV\n"
-#~ "      --force-local              archivní soubor je lokální, dokonce i "
-#~ "kdy¾\n"
-#~ "                                 obsahuje v názvu dvojteèku\n"
-#~ "      --rsh-command=PØÍKAZ       pou¾ije PØÍKAZ pro pøihlá¹ení místo rsh\n"
-#~ "  -[0-7][lmh]                    zadání zaøízení a hustoty\n"
-#~ "  -M, --multi-volume             práce s vícesvazkovým archivem\n"
-#~ "  -L, --tape-length=ÈÍSLO        vymìní pásku po zapsání ÈÍSLO x 1024 "
-#~ "bajtù\n"
-#~ "  -F, --info-script=SOUBOR       spustí script na konci ka¾dé pásky\n"
+#~ "      --force-local              archivní soubor je lokální, dokonce i "
+#~ "když\n"
+#~ "                                 obsahuje v názvu dvojtečku\n"
+#~ "      --rsh-command=PŘÍKAZ       použije PŘÍKAZ pro přihlášení místo rsh\n"
+#~ "  -[0-7][lmh]                    zadání zařízení a hustoty\n"
+#~ "  -M, --multi-volume             práce s vícesvazkovým archivem\n"
+#~ "  -L, --tape-length=ČÍSLO        vymění pásku po zapsání ČÍSLO x 1024 "
+#~ "bajtů\n"
+#~ "  -F, --info-script=SOUBOR       spustí script na konci každé pásky\n"
 #~ "                                 (zahrnuje i -M)\n"
-#~ "      --new-volume-script=SOUBOR stejné jako -F SOUBOR\n"
-#~ "      --volno-file=SOUBOR        pou¾ije/aktualizuje èíslo svazku v "
+#~ "      --new-volume-script=SOUBOR stejné jako -F SOUBOR\n"
+#~ "      --volno-file=SOUBOR        použije/aktualizuje číslo svazku v "
 #~ "SOUBORu\n"
 
 #~ msgid ""
@@ -2884,15 +3076,15 @@ msgstr ""
 #~ "  -B, --read-full-records        reblock as we read (for 4.2BSD pipes)\n"
 #~ msgstr ""
 #~ "\n"
-#~ "Bloky u zaøízení:\n"
-#~ "  -b, --blocking-factor=BLOKÙ    BLOKÙ x 512 bajtù na záznam\n"
-#~ "      --record-size=VELIKOST     VELIKOST bajtù na záznam, násobek 512\n"
-#~ "  -i, --ignore-zeros             ignoruje nulové bloky v archivu,\n"
-#~ "                                 které normálnì znamenají EOF.\n"
-#~ "  -B, --read-full-records        kdy¾ není pøeèteno tolik bajtù,\n"
-#~ "                                 kolik je po¾adováno, zkou¹í doèíst "
+#~ "Bloky u zařízení:\n"
+#~ "  -b, --blocking-factor=BLOKŮ    BLOKŮ x 512 bajtů na záznam\n"
+#~ "      --record-size=VELIKOST     VELIKOST bajtů na záznam, násobek 512\n"
+#~ "  -i, --ignore-zeros             ignoruje nulové bloky v archivu,\n"
+#~ "                                 které normálně znamenají EOF.\n"
+#~ "  -B, --read-full-records        když není přečteno tolik bajtů,\n"
+#~ "                                 kolik je požadováno, zkouší dočíst "
 #~ "zbytek\n"
-#~ "                                 (vhodné pro roury)\n"
+#~ "                                 (vhodné pro roury)\n"
 
 #~ msgid ""
 #~ "\n"
@@ -2910,19 +3102,19 @@ msgstr ""
 #~ "d)\n"
 #~ msgstr ""
 #~ "\n"
-#~ "Výbìr formátu archivu:\n"
-#~ "  -V, --label=NÁZEV                  vytvoøí archiv s názvem svazku "
-#~ "NÁZEV\n"
-#~ "              VZOREK                 u obsahu/rozbalování globální "
+#~ "Výběr formátu archivu:\n"
+#~ "  -V, --label=NÁZEV                  vytvoří archiv s názvem svazku "
+#~ "NÁZEV\n"
+#~ "              VZOREK                 u obsahu/rozbalování globální "
 #~ "vzorek\n"
-#~ "                                     pro názvy souborù\n"
-#~ "  -o, --old-archive, --portability   zapí¹e archiv ve formátu V7\n"
-#~ "      --posix                        zapí¹e archiv ve formátu POSIX\n"
-#~ "  -j, --bzip2                        komprimuje archiv pomocí bzip2\n"
-#~ "  -z, --gzip, --ungzip               komprimuje archiv pomocí gzip\n"
-#~ "  -Z, --compress, --uncompress       komprimuje archiv pomocí compress\n"
-#~ "      --use-compress-program=PROG    komprimuje archiv pomocí PROG\n"
-#~ "                                     (který musí akceptovat -d)\n"
+#~ "                                     pro názvy souborů\n"
+#~ "  -o, --old-archive, --portability   zapíše archiv ve formátu V7\n"
+#~ "      --posix                        zapíše archiv ve formátu POSIX\n"
+#~ "  -j, --bzip2                        komprimuje archiv pomocí bzip2\n"
+#~ "  -z, --gzip, --ungzip               komprimuje archiv pomocí gzip\n"
+#~ "  -Z, --compress, --uncompress       komprimuje archiv pomocí compress\n"
+#~ "      --use-compress-program=PROG    komprimuje archiv pomocí PROG\n"
+#~ "                                     (který musí akceptovat -d)\n"
 
 #~ msgid ""
 #~ "\n"
@@ -2954,36 +3146,36 @@ msgstr ""
 #~ "  -K, --starting-file=NAME     begin at file NAME in the archive\n"
 #~ msgstr ""
 #~ "\n"
-#~ "Výbìr souborù:\n"
-#~ "  -C, --directory=ADRESÁØ      operace vykonává v ADRESÁØi\n"
-#~ "  -T, --files-from=NÁZEV       pøi rozbalování nebo vytváøení bere názvy\n"
-#~ "                               souborù ze souboru NÁZEV\n"
-#~ "      --null                   -T ète nulou ukonèené názvy, zakázáno -C\n"
-#~ "      --exclude=VZOREK         nepracuje se soubory odpovídající VZORKu\n"
-#~ "  -X, --exclude-from=SOUBOR    nepracuje se soubory, které odpovídají\n"
-#~ "                               nìkterému vzorku v SOUBORu\n"
-#~ "      --anchored               vyluèovací (exclude) vzorky se porovnávají "
+#~ "Výběr souborů:\n"
+#~ "  -C, --directory=ADRESÁŘ      operace vykonává v ADRESÁŘi\n"
+#~ "  -T, --files-from=NÁZEV       při rozbalování nebo vytváření bere názvy\n"
+#~ "                               souborů ze souboru NÁZEV\n"
+#~ "      --null                   -T čte nulou ukončené názvy, zakázáno -C\n"
+#~ "      --exclude=VZOREK         nepracuje se soubory odpovídající VZORKU\n"
+#~ "  -X, --exclude-from=SOUBOR    nepracuje se soubory, které odpovídají\n"
+#~ "                               některému vzorku v SOUBORu\n"
+#~ "      --anchored               vylučovací (exclude) vzorky se porovnávají "
 #~ "od\n"
-#~ "                               zaèátku názvu souboru (implicitní)\n"
-#~ "      --no-anchored            vyluèovací vzorky se porovnávají od "
-#~ "ka¾dého /\n"
-#~ "      --ignore-case            vyluèovací vzorky ignorují velikost znakù\n"
-#~ "      --no-ignore-case         vyluèovací vzorky dají na velikost znakù\n"
-#~ "                               (implicitní)\n"
-#~ "      --wildcards              vyluèovací (exclude) vzorky pou¾ívají ?* a "
+#~ "                               začátku názvu souboru (implicitní)\n"
+#~ "      --no-anchored            vylučovací vzorky se porovnávají od "
+#~ "každého /\n"
+#~ "      --ignore-case            vylučovací vzorky ignorují velikost znaků\n"
+#~ "      --no-ignore-case         vylučovací vzorky dají na velikost znaků\n"
+#~ "                               (implicitní)\n"
+#~ "      --wildcards              vylučovací (exclude) vzorky používají ?* a "
 #~ "pod.\n"
-#~ "                               (implicitní)\n"
-#~ "      --no-wildcards           vyluèovací vzorky jsou prosté øetìzce\n"
-#~ "      --wildcards-match-slash  *? nahrazují v názvu / (implicitní)\n"
-#~ "      --no-wildcards-match-slash *? nenahrazují v názvu /\n"
-#~ "  -P, --absolute-names         neodstraòuje úvodní `/' ze jmen souborù\n"
-#~ "  -h, --dereference            místo symbolických odkazù pou¾ije "
+#~ "                               (implicitní)\n"
+#~ "      --no-wildcards           vylučovací vzorky jsou prosté řetězce\n"
+#~ "      --wildcards-match-slash  *? nahrazují v názvu / (implicitní)\n"
+#~ "      --no-wildcards-match-slash *? nenahrazují v názvu /\n"
+#~ "  -P, --absolute-names         neodstraňuje úvodní „/“ ze jmen souborů\n"
+#~ "  -h, --dereference            místo symbolických odkazů použije "
 #~ "soubory,\n"
-#~ "                               na které odkazy ukazují\n"
-#~ "      --no-recursion           neprochází adresáøe\n"
-#~ "  -l, --one-file-system        pøi vytváøení archivu zùstane v jednom\n"
-#~ "                               souborovém systému\n"
-#~ "  -K, --starting-file=NÁZEV    zaène od souboru NÁZEV z archivu\n"
+#~ "                               na které odkazy ukazují\n"
+#~ "      --no-recursion           neprochází adresáře\n"
+#~ "  -l, --one-file-system        při vytváření archivu zůstane v jednom\n"
+#~ "                               souborovém systému\n"
+#~ "  -K, --starting-file=NÁZEV    začne od souboru NÁZEV z archivu\n"
 
 #~ msgid ""
 #~ "  -N, --newer=DATE             only store files newer than DATE\n"
@@ -2991,11 +3183,11 @@ msgstr ""
 #~ "only\n"
 #~ "      --after-date=DATE        same as -N\n"
 #~ msgstr ""
-#~ "  -N, --newer=DATUM            archivuje pouze soubory novìj¹í ne¾ DATUM\n"
-#~ "      --newer-mtime=DATUM      porovnává datum a èas pouze pokud byla "
-#~ "zmìnìna\n"
+#~ "  -N, --newer=DATUM            archivuje pouze soubory novÄ\9bjší než DATUM\n"
+#~ "      --newer-mtime=DATUM      porovnává datum a čas pouze pokud byla "
+#~ "změněna\n"
 #~ "                               data\n"
-#~ "      --after-date=DATUM       stejné jako -N\n"
+#~ "      --after-date=DATUM       stejné jako -N\n"
 
 #~ msgid ""
 #~ "      --backup[=CONTROL]       backup before removal, choose version "
@@ -3003,11 +3195,11 @@ msgstr ""
 #~ "      --suffix=SUFFIX          backup before removal, override usual "
 #~ "suffix\n"
 #~ msgstr ""
-#~ "      --backup[=TYP]           zpùsob zálohování souborù, pøed jejich "
-#~ "pøepsáním\n"
-#~ "      --suffix=PØÍPONA         zálohuje pøed pøepsáním (smazáním), jako "
-#~ "pøíponu\n"
-#~ "                               u zálo¾ních souborù pou¾ije PØÍPONU\n"
+#~ "      --backup[=TYP]           způsob zálohování souborů, před jejich "
+#~ "přepsáním\n"
+#~ "      --suffix=PŘÍPONA         zálohuje před přepsáním (smazáním), jako "
+#~ "příponu\n"
+#~ "                               u záložních souborů použije PŘÍPONU\n"
 
 #~ msgid ""
 #~ "\n"
@@ -3023,15 +3215,15 @@ msgstr ""
 #~ "      --confirmation    same as -w\n"
 #~ msgstr ""
 #~ "\n"
-#~ "Informativní výstup:\n"
-#~ "      --help            vypí¹e tuto nápovìdu a skonèí\n"
-#~ "      --version         vypí¹e oznaèení verze programu tar a skonèí\n"
-#~ "  -v, --verbose         vypisuje zpracovávané soubory\n"
-#~ "      --checkpoint      vypisuje názvy adresáøù pøi ètení archivu\n"
-#~ "      --totals          vypí¹e celkem zapsaných bajtù pøi tvorbì archivu\n"
-#~ "  -R, --block-number    s ka¾dou zprávou vypí¹e èíslo bloku v archivu\n"
-#~ "  -w, --interactive     ¾ádá potvrzení ka¾dé akce\n"
-#~ "      --confirmation    stejné jako -w\n"
+#~ "Informativní výstup:\n"
+#~ "      --help            vypíše tuto nápovědu a skončí\n"
+#~ "      --version         vypíše označení verze programu tar a skončí\n"
+#~ "  -v, --verbose         vypisuje zpracovávané soubory\n"
+#~ "      --checkpoint      vypisuje názvy adresářů při čtení archivu\n"
+#~ "      --totals          vypíše celkem zapsaných bajtů při tvorbě archivu\n"
+#~ "  -R, --block-number    s každou zprávou vypíše číslo bloku v archivu\n"
+#~ "  -w, --interactive     žádá potvrzení každé akce\n"
+#~ "      --confirmation    stejné jako -w\n"
 
 #~ msgid ""
 #~ "\n"
@@ -3045,46 +3237,49 @@ msgstr ""
 #~ "*This* `tar' defaults to `-f%s -b%d'.\n"
 #~ msgstr ""
 #~ "\n"
-#~ "  GNU tar neumí èíst nebo produkovat `--posix' archivy. Jestli¾e je\n"
-#~ "v prostøedí nastaveno POSIXLY_CORRECT, GNU roz¹íøení je zablokováno "
-#~ "pøepínaèem\n"
-#~ "`--posix'. Podpora POSIX formátu je èásteènì implementována, proto s ní "
-#~ "pøíli¹\n"
-#~ "nepoèítejte.\n"
-#~ "  ARCHIV mù¾e být SOUBOR, HOSTITEL:SOUBOR nebo U®IVATEL@HOSTITEL:SOUBOR,\n"
-#~ "SOUBOR mù¾e být soubor nebo zaøízení. DATUM mù¾e být datum nebo název "
-#~ "souboru zaèínající `/' nebo `.', pokud chcete pou¾ít datum souboru.\n"
-#~ "  Implicitní pøepínaèe jsou `-f%s -b%d'.\n"
+#~ "  GNU tar neumí Ä\8díst nebo produkovat â\80\9e--posixâ\80\9c archivy. Jestliže je\n"
+#~ "v prostředí nastaveno POSIXLY_CORRECT, GNU rozšíření je zablokováno "
+#~ "přepínačem\n"
+#~ "„--posix“. Podpora POSIX formátu je částečně implementována, proto s ní "
+#~ "příliš\n"
+#~ "nepočítejte.\n"
+#~ "  ARCHIV může být SOUBOR, HOSTITEL:SOUBOR nebo UŽIVATEL@HOSTITEL:SOUBOR,\n"
+#~ "SOUBOR může být soubor nebo zařízení. DATUM může být datum nebo název "
+#~ "souboru začínající „/“ nebo „.“, pokud chcete použít datum souboru.\n"
+#~ "  Implicitní přepínače jsou „-f%s -b%d“.\n"
 
 #~ msgid "Obsolete option, now implied by --blocking-factor"
-#~ msgstr "Zastaralý pøepínaè, nyní zahrnut v pøepínaèi --blocking-factor"
+#~ msgstr "Zastaralý přepínač, nyní zahrnut v přepínači --blocking-factor"
 
 #~ msgid "Obsolete option name replaced by --blocking-factor"
-#~ msgstr "Zastaralý pøepínaè, nahrazen pøepínaèem --blocking-factor"
+#~ msgstr "Zastaralý přepínač, nahrazen přepínačem --blocking-factor"
 
 #~ msgid "Obsolete option name replaced by --read-full-records"
-#~ msgstr "Zastaralý pøepínaè, nahrazen pøepínaèem --read-full-records"
+#~ msgstr "Zastaralý přepínač, nahrazen přepínačem --read-full-records"
+
+#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgstr "Upozornění: přepínač -I není podporován; nemysleli jste -j nebo -T?"
 
 #~ msgid "Obsolete option name replaced by --touch"
-#~ msgstr "Zastaralý pøepínaè, nahrazen pøepínaèem --touch"
+#~ msgstr "Zastaralý přepínač, nahrazen přepínačem --touch"
 
 #~ msgid "Obsolete option name replaced by --absolute-names"
-#~ msgstr "Zastaralý pøepínaè, nahrazen pøepínaèem --absolute-names"
+#~ msgstr "Zastaralý přepínač, nahrazen přepínačem --absolute-names"
 
 #~ msgid "Obsolete option name replaced by --block-number"
-#~ msgstr "Zastaralý pøepínaè, nahrazen pøepínaèem --block-number"
+#~ msgstr "Zastaralý přepínač, nahrazen přepínačem --block-number"
 
 #~ msgid "Warning: the -y option is not supported; perhaps you meant -j?"
-#~ msgstr "Upozornìní: pøepínaè -y není podporován; nemysleli jste -j?"
+#~ msgstr "Upozornění: přepínač -y není podporován; nemysleli jste -j?"
 
 #~ msgid "Obsolete option name replaced by --backup"
-#~ msgstr "Zastaralý pøepínaè, nahrazen pøepínaèem --backup"
+#~ msgstr "Zastaralý přepínač, nahrazen přepínačem --backup"
 
 #~ msgid "Written by John Gilmore and Jay Fenlason."
-#~ msgstr "Autoøi: John Gilmore a Jay Fenlason."
+#~ msgstr "Autoři: John Gilmore a Jay Fenlason."
 
 #~ msgid "Error exit delayed from previous errors"
-#~ msgstr "Za bìhu programu nastala chyba"
+#~ msgstr "Za běhu programu nastala chyba"
 
 #~ msgid ""
 #~ "If a long option shows an argument as mandatory, then it is mandatory\n"
@@ -3095,13 +3290,13 @@ msgstr ""
 #~ "      --help                 display this help and exit\n"
 #~ "      --version              output version information and exit\n"
 #~ msgstr ""
-#~ "  Povinné argumenty u dlouhých pøepínaèù, jsou povinné také u "
-#~ "odpovídajících \n"
-#~ "krátkých pøepínaèù.\n"
+#~ "  Povinné argumenty u dlouhých přepínačů, jsou povinné také u "
+#~ "odpovídajících \n"
+#~ "krátkých přepínačů.\n"
 #~ "\n"
-#~ "  -l, --file-length     délka generovaného souboru\n"
-#~ "      --help            vypí¹e tuto nápovìdu a skonèí\n"
-#~ "      --version         vypí¹e oznaèení verze a skonèí\n"
+#~ "  -l, --file-length     délka generovaného souboru\n"
+#~ "      --help            vypíše tuto nápovědu a skončí\n"
+#~ "      --version         vypíše označení verze a skončí\n"
 
 #~ msgid "Ambiguous pattern `%s'"
-#~ msgstr "Nejednoznaèný vzorek `%s'"
+#~ msgstr "Nejednoznačný vzorek „%s“"
index 18f06cff43b9978ffd629c97066945d67e89ba38..d9befddb41ebb8d09552c8890fd239b56bdd9ff8 100644 (file)
Binary files a/po/da.gmo and b/po/da.gmo differ
index a729114cf9788e10b1c472ed7a0dbd76e769136f..1318e904fc0e77b97f64de55cd9b9add3a749c97 100644 (file)
--- a/po/da.po
+++ b/po/da.po
 # Danish messages for GNU tar.
 # Copyright (C) 1996 Free Software Foundation, Inc.
-# Keld Jørn Simonsen <keld@dkuug.dk>, 2000-2001.
+# This file is distributed under the same license as the tar package.
 # Claus Hindsgaul <claus_h@image.dk>, 2001.
+# Keld Jørn Simonsen <keld@dkuug.dk>, 2000-2001,2009.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU tar 1.13.25\n"
+"Project-Id-Version: GNU tar 1.22\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
-"PO-Revision-Date: 2002-03-27 13:57+0100\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
+"PO-Revision-Date: 2009-05-26 13:57+0200\n"
 "Last-Translator: Keld Jørn Simonsen <keld@dkuug.dk>\n"
-"Language-Team: Danish <dansk@klid.dk>\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "ugyldigt argument %s for %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "flertydigt argument '%s' for %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Gyldige argumenter er:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr ""
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr ""
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr ""
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr ""
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr ""
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
 msgstr ""
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
-msgstr ""
+msgstr "Brug:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
-msgstr ""
+msgstr "  eller: "
 
-#: lib/argp-help.c:1655
-#, fuzzy
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
-msgstr ""
-"\n"
-"Brug: %s [FLAG]...\n"
+msgstr " [FLAG...}"
 
-#: lib/argp-help.c:1682
-#, fuzzy, c-format
+#: gnu/argp-help.c:1682
+#, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
-msgstr "Prøv '%s --help' for mere information.\n"
+msgstr "Prøv '%s --help' eller '%s --usage' for mere information.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
-#, fuzzy, c-format
+#: gnu/argp-help.c:1710
+#, c-format
 msgid "Report bugs to %s.\n"
-msgstr ""
-"\n"
-"Rapportér fejl til <bugs-tar@gnu.org>.\n"
+msgstr "Rapportér fejl til %s.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Ukendt systemfejl"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr ""
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr ""
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr ""
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr ""
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr ""
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr ""
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr ""
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr ""
 
-#: lib/argp-parse.c:611
-#, fuzzy, c-format
+#: gnu/argp-parse.c:613
+#, c-format
 msgid "%s: Too many arguments\n"
-msgstr "%s: flag '%s' kræver et argument\n"
+msgstr "%s: For mange argumenter\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr ""
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr "skrivefejl"
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: flag '%s' er flertydigt\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: flag '%s' tillader ikke et argument\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: flag '%c%s' tillader ikke et argument\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: flag '%s' kræver et argument\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: ukendt flag '--%s'\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: ukendt flag '%c%s'\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: ulovligt flag -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: ugyldigt flag -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: flag kræver et argument -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: flag '-W %s' er flertydigt\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: flag '-W %s' tillader ikke et argument\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "hovedlager opbrugt"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, fuzzy, c-format
 msgid "unable to record current working directory"
 msgstr "Kan ikke ændre arbejdskatalog"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, fuzzy, c-format
 msgid "failed to return to initial working directory"
 msgstr "Kan ikke gemme arbejdskatalog"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Kan ikke %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Advarsel: Kan ikke %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Kan ikke ændre modus til %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Kan ikke ændre ejerskab til bruger-ID %lu, gruppe-ID %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Kan ikke oprette lænke til %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, fuzzy, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Læsefejl ved byte %s, ved læsning af %lu byte"
-msgstr[1] "%s: Læsefejl ved byte %s, ved læsning af %lu byte"
-
-#: lib/paxerror.c:192
-#, fuzzy, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Advarsel: Læsefejl ved byte %s, ved læsning af %lu byte"
-msgstr[1] "%s: Advarsel: Læsefejl ved byte %s, ved læsning af %lu byte"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Kan ikke søge til %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Advarsel: Kan ikke søge til %s"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Kan ikke oprette symbolsk lænke til '%s'"
-
-#: lib/paxerror.c:349
-#, fuzzy, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Kunne kun skrive %lu af %lu byte"
-msgstr[1] "%s: Kunne kun skrive %lu af %lu byte"
-
-#: lib/paxnames.c:155
-#, fuzzy, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Fjerner indledende '%.*s' fra medlemsnavne"
-
-#: lib/paxnames.c:156
-#, fuzzy, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Fjerner indledende '/' fra absolutte lænker"
-
-#: lib/paxnames.c:169
-#, fuzzy
-msgid "Substituting `.' for empty member name"
-msgstr "Fjerner indledende '%.*s' fra medlemsnavne"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr ""
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -309,17 +213,17 @@ msgstr ""
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "'"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "'"
 
@@ -329,7 +233,7 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[jJyY]"
 
@@ -339,38 +243,28 @@ msgstr "^[jJyY]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[nN]"
 
-#: lib/rtapelib.c:299
+#: gnu/version-etc.c:76
 #, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Tjeneste ikke tilgængelig"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "standard-ind"
-
-#: lib/rtapelib.c:306
-#, c-format
-msgid "stdout"
-msgstr "standard-ud"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Kan ikke eksekvere fjern skal"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -381,19 +275,19 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, fuzzy, c-format
 msgid "Written by %s.\n"
 msgstr "Skrevet af François Pinard <pinard@iro.umontreal.ca>"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, fuzzy, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Skrevet af François Pinard <pinard@iro.umontreal.ca>"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, fuzzy, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Skrevet af François Pinard <pinard@iro.umontreal.ca>"
@@ -401,7 +295,7 @@ msgstr "Skrevet af Fran
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -411,7 +305,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -421,7 +315,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -431,7 +325,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -441,7 +335,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -452,7 +346,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -463,7 +357,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -475,182 +369,330 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
+msgstr "Rapportér fejl til %s.\n"
+
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
 "\n"
 "Rapportér fejl til <bugs-tar@gnu.org>.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Kan ikke %s"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Advarsel: Kan ikke %s"
+
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Kan ikke ændre modus til %s"
+
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Kan ikke ændre ejerskab til bruger-ID %lu, gruppe-ID %lu"
+
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Kan ikke oprette lænke til %s"
+
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Læsefejl ved byte %s, ved læsning af %lu byte"
+msgstr[1] "%s: Læsefejl ved byte %s, ved læsning af %lu byte"
+
+#: lib/paxerror.c:192
+#, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Advarsel: Læsefejl ved byte %s, ved læsning af %lu byte"
+msgstr[1] "%s: Advarsel: Læsefejl ved byte %s, ved læsning af %lu byte"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Kan ikke søge til %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Advarsel: Kan ikke søge til %s"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Kan ikke oprette symbolsk lænke til '%s'"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Kunne kun skrive %lu af %lu byte"
+msgstr[1] "%s: Kunne kun skrive %lu af %lu byte"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Fjerner indledende '%s' fra medlemsnavne"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Fjerner indledende '%s' fra absolutte lænkemål"
+
+#: lib/paxnames.c:169
+#, fuzzy
+msgid "Substituting `.' for empty member name"
+msgstr "Fjerner indledende '%.*s' fra medlemsnavne"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
 msgstr ""
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Kan ikke allokere plads til buffer\n"
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Tjeneste ikke tilgængelig"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Kan ikke allokere plads til buffer"
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "standard-ind"
 
-#: rmt/rmt.c:304
+#: lib/rtapelib.c:306
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Prøv '%s --help' for mere information.\n"
+msgid "stdout"
+msgstr "standard-ud"
 
-#: rmt/rmt.c:308
-#, fuzzy, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Brug: %s [FLAG]\n"
-"Behandl en båndstation, med kommandoer fra en anden proces.\n"
-"\n"
-"      --help            vis denne hjælpetekst\n"
-"      --version         vis programversion\n"
 
-#: rmt/rmt.c:397
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Kan ikke eksekvere fjern skal"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Søgeretning uden for område"
+
+#: rmt/rmt.c:419
 #, fuzzy
-msgid "Seek offset error"
-msgstr "Søgeposition uden for område"
+msgid "Invalid seek direction"
+msgstr "Ugyldig modus angivet i flag"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Ugyldigt tidsstempel"
+
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Søgeposition uden for område"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Søgeretning uden for område"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Ugyldig båndlængde"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Søgeposition uden for område"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: For tidlig filafslutning\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "For tidlig filafslutning"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "%s: ugyldigt flag -- %c\n"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Uventet filslutning i arkivet"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr ""
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr ""
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "kan ikke ændre ejer (chown) '%s'"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr ""
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Ugyldig kommando"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Dette ligner ikke et tar-arkiv"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 #, fuzzy
 msgid "Total bytes written"
 msgstr "Totalt antal byte skrevet: %s (%sB, %sB/s)\n"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr ""
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, fuzzy, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Totalt antal byte skrevet: %s (%sB, %sB/s)\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(datakanal)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Ugyldig værdi for record_size"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Arkivnavn er ikke opgivet"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Kan ikke verificere standard-ind/standard-ud arkiver"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr ""
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Kan ikke opdatere komprimerede arkiver"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Ved begyndelsen af båndet, afslutter nu"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "For mange fejl, afslutter"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, fuzzy, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Poststørrelse = %lu blokke"
 msgstr[1] "Poststørrelse = %lu blokke"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, fuzzy, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Ikke-justeret blok (%lu byte) i arkiv"
 msgstr[1] "Ikke-justeret blok (%lu byte) i arkiv"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr "Kunne ikke gå tilbage i arkivfilen. Den kan være ulæselig uden -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr ""
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: indeholder ugyldigt delarkivs-nummer"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Overløb på delarkiv-nummer"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Klargør delarkiv nummer %d for %s og tryk retur: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "Filafslutning hvor svar fra bruger var forventet"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "ADVARSEL: Arkivet er ufuldstændigt"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, fuzzy, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -662,124 +704,124 @@ msgstr ""
 " !          Start en skal\n"
 " ?          Skriv denne list\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr ""
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr ""
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Intet nyt delarkiv; afslutter.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr ""
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr ""
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, fuzzy, c-format
 msgid "%s command failed"
 msgstr "'%s'-kommando mislykkedes"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, fuzzy, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s fortsætter ikke i dette delarkiv"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s fortsætter ikke i dette delarkiv"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s har forkert størrelse (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, fuzzy, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Dette delarkiv kommer ude af rækkefølge"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Arkivet er ikke navngivet til at passe med %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Volumenet '%s' stemmer ikke overens med %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
 msgstr ""
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
 msgstr ""
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, fuzzy, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Kunne kun læse %lu af %lu byte"
 msgstr[1] "Kunne kun læse %lu af %lu byte"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Indhold er forskelligt"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Uventet filslutning i arkivet"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Filtype er forskellig"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Modus er forskellig"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Bruger-ID er forskellig"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Gruppe-ID er forskellig"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Modificeringstid er forskellig"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Størrelse er forskellig"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Ikke lænket til %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Symbolsk lænke er forskellig"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Enhedsnummer er forskellig"
 
@@ -801,34 +843,34 @@ msgstr ""
 msgid "Verification may fail to locate original files."
 msgstr ""
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, fuzzy, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "VERIFIKASIONSFEJL: %d ukendte hoveder fundet"
 msgstr[1] "VERIFIKASIONSFEJL: %d ukendte hoveder fundet"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr ""
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr ""
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "værdi %s ud af %s område %s..%s; erstatter %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "værdi %s ud af %s område %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Genererer negative oktale hoveder"
 
@@ -847,438 +889,439 @@ msgstr "%s: file er u
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: file er uændret; ikke lagret"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, fuzzy, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: Filen formindsket med %s byte, fylder ud med nuller"
 msgstr[1] "%s: Filen formindsket med %s byte, fylder ud med nuller"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: fil er på et andet filesystem.  Ikke lagret"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr ""
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Ukendt filtype; filen blev ignoreret"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, fuzzy, c-format
-msgid "Missing links to %s.\n"
+msgid "Missing links to %s."
 msgstr " lænke til %s\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: file er uændret; ikke lagret"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
-msgid "%s: file is the archive; not dumped"
-msgstr "%s: fil er det samme som arkivet; ikke lagret"
-
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Fil fjernet før vi læste den"
+msgid "%s: file is the archive; not dumped"
+msgstr "%s: fil er det samme som arkivet; ikke lagret"
 
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr ""
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: Fil ændredes mens vi læste den"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: sokkel ignoreret"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: dør ignoreret"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Hopper til næste hoved"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Sletter ikke-hoved fra arkivet"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr ""
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, fuzzy, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: tidsstempel %s er %lu s i fremtiden"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Uventet uoverensstemmelse ved oprettelse af katalog"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Katalog omdøbt før dets status kunne blive udtrukket"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Udtrækker sammenhængende filer som almindelige filer"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Forsøger at udtrække symbolske lænker som hårde lænker"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Læser %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Kan ikke udtrække -- filen er fortsat fra et tidligere delarkiv"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 #, fuzzy
 msgid "Unexpected long name header"
 msgstr "Uventet filafslutning i ødelagte navne"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, fuzzy, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Ukendt filtype '%c', udtrukket som en almindelig fil"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr ""
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Kunne ikke sikkerhedskopiere denne fil"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, fuzzy, c-format
 msgid "Cannot rename %s to %s"
 msgstr "%s: Kan ikke omdøbe til %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Fejl kan ikke reddes; afslutter nu"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, fuzzy, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Kataloget er blevet omdøbt"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Kataloget er blevet omdøbt"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Kataloget er nyt"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Ugyldigt tidsstempel"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 #, fuzzy
 msgid "Invalid modification time (seconds)"
 msgstr "Ugyldig modus angivet i flag"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr ""
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Ugyldigt enhedsnummer"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Ugyldigt inode-nummer"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr ""
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 #, fuzzy
 msgid "Unexpected EOF in snapshot file"
 msgstr "Uventet filslutning i arkivet"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr ""
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr ""
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr ""
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr ""
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr ""
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr ""
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr ""
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr ""
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr ""
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, fuzzy, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "kan ikke oprette kataloget '%s'"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr ""
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, fuzzy, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: fil er på et andet filesystem.  Ikke lagret"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Sletter %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "Kan ikke slette %s"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "Udelader %s"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "blok %s: ** Blok med NUL-er **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "blok %s: ** Slut på fil **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "blok %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Blank-tegn i hovedet hvor numerisk %s værdi var forventet"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr "Arkiv oktal værdi %.*s er udenfor %s område; antager to-komplement"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Arkiv oktal værdi %.*s er udenfor %s område"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Arkiv indeholder forældede base-64 hoveder"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "Arkiv base-64 streng med fortegn %s er uden for %s område"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Arkiv base-256 værdi er uden for %s område"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Arkiv indeholder %.*s hvor numerisk %s værdi var forventet"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Arkiv værdi %s er udenfor %s område %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " lænke til %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " ukendt filtype %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr ""
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr ""
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Volumenhoved--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Fortsætter ved byte %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Opretter katalog:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Omdøber %s til %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Kan ikke omdøbe til %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Omdøber %s tilbage til %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Kan ikke gemme arbejdskatalog"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Kan ikke ændre arbejdskatalog"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Fil fjernet før vi læste den"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Fil fjernet før vi læste den"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "underproces"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "mellemproces-kanal"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
-msgstr ""
-
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:601
+msgid "Pattern matching characters used in file names"
 msgstr ""
 
-#: src/names.c:597
-msgid "suppress this warning."
+#: src/names.c:603
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Blev ikke fundet i arkivet"
 
-#: src/names.c:615
+#: src/names.c:622
 #, fuzzy, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Blev ikke fundet i arkivet"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Flagene '-%s' and '-%s' vil begge have standard inddata"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, fuzzy, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: ugyldig gruppe"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "GNU-funktioner forsøgt på inkompatibelt arkiv-format"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
 msgstr ""
 
-#: src/tar.c:336
+#: src/tar.c:347
 #, fuzzy
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
@@ -1297,7 +1340,7 @@ msgstr ""
 "  %s -tvf arkiv.tar         # List alle filer i arkiv.tar udførligt.\n"
 "  %s -xf arkiv.tar          # Udtræk alle filer fra arkiv.tar.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 #, fuzzy
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
@@ -1321,88 +1364,81 @@ msgstr ""
 "                  ellers simple\n"
 "  never, simple   lav simple sikkerhedskopier\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr ""
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr ""
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr ""
 
-#: src/tar.c:378
+#: src/tar.c:394
 #, fuzzy
 msgid "create a new archive"
 msgstr "Uventet filslutning i arkivet"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr ""
 
-#: src/tar.c:383
+#: src/tar.c:399
 #, fuzzy
 msgid "append files to the end of an archive"
 msgstr "%d overflødige byte ignoreret ved slutningen på arkiv"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr ""
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr ""
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr ""
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr ""
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr ""
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr ""
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr ""
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr ""
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:408
-msgid "do not exit with nonzero on unreadable files"
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
 msgstr ""
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
+#: src/tar.c:426
+msgid "do not exit with nonzero on unreadable files"
 msgstr ""
 
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1410,577 +1446,565 @@ msgid ""
 "command line or via the -T option; NUMBER defaults to 1"
 msgstr ""
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr ""
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr ""
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr ""
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr ""
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr ""
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr ""
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr ""
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr ""
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr ""
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr ""
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr ""
 
-#: src/tar.c:455
+#: src/tar.c:475
 #, fuzzy
 msgid "extract files to standard output"
 msgstr "Fejl ved skrivning til standard uddata"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr ""
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr ""
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr ""
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr ""
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr ""
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr ""
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr ""
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr ""
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr ""
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr ""
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
 "place (METHOD='system')"
 msgstr ""
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr ""
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr ""
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
 msgstr ""
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr ""
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
 msgstr ""
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr ""
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr ""
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr ""
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr ""
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr ""
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr ""
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr ""
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr ""
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr ""
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr ""
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr ""
 
-#: src/tar.c:536
+#: src/tar.c:556
 #, fuzzy
 msgid "create/list/extract multi-volume archive"
 msgstr "Kan ikke verificere arkiv som går over flere delarkiver"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr ""
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr ""
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr ""
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr ""
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr ""
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr ""
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr ""
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr ""
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr ""
 
-#: src/tar.c:562
+#: src/tar.c:582
 #, fuzzy
 msgid "Archive format selection:"
 msgstr "Konflikt i flagene for arkiv-format"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr ""
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr ""
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr ""
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr ""
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr ""
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr ""
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr ""
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr ""
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr ""
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr ""
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr ""
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr ""
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr ""
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr ""
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
 msgstr ""
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Konflikt i komprimeringsflag"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:597
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr ""
-
-#: src/tar.c:602
-#, fuzzy
-msgid "filter the archive through gzip"
-msgstr "%s: fil er det samme som arkivet; ikke lagret"
-
-#: src/tar.c:606
-#, fuzzy
-msgid "filter the archive through compress"
-msgstr "%s: fil er det samme som arkivet; ikke lagret"
-
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "%s: fil er det samme som arkivet; ikke lagret"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "%s: fil er det samme som arkivet; ikke lagret"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "%s: fil er det samme som arkivet; ikke lagret"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr ""
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr ""
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr ""
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr ""
 
-#: src/tar.c:625
+#: src/tar.c:641
 #, fuzzy
 msgid "change to directory DIR"
 msgstr "Kan ikke ændre arbejdskatalog"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr ""
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr ""
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr ""
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr ""
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr ""
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr ""
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr ""
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr ""
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr ""
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr ""
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr ""
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr ""
 
-#: src/tar.c:664
+#: src/tar.c:682
 #, fuzzy
 msgid "don't strip leading `/'s from file names"
 msgstr "Fjerner indledende '/' fra absolutte lænker"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr ""
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr ""
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr ""
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr ""
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr ""
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr ""
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr ""
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
 msgstr ""
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr ""
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr ""
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr ""
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr ""
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr ""
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr ""
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr ""
 
-#: src/tar.c:710
+#: src/tar.c:728
 #, fuzzy
 msgid "wildcards do not match `/'"
 msgstr "Volumenet '%s' stemmer ikke overens med %s"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr ""
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr ""
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr ""
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr ""
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr ""
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -1988,275 +2012,291 @@ msgid ""
 "accepted"
 msgstr ""
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr ""
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr ""
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr ""
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr ""
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr ""
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr ""
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr ""
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr ""
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr ""
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr ""
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr ""
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr ""
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr ""
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr ""
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Du kan ikke angive mere end et af '-Acdtrux'-flagene"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Konflikt i komprimeringsflag"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, fuzzy, c-format
 msgid "Unknown signal name: %s"
 msgstr " ukendt filtype %s\n"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 #, fuzzy
 msgid "Date sample file not found"
 msgstr "Datofil ikke fundet"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Erstatter %s for ukendt dato-format %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr ""
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, fuzzy, c-format
 msgid "%s: file list already read"
 msgstr "%s: fil er det samme som arkivet; ikke lagret"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr ""
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "%s: fil er det samme som arkivet; ikke lagret"
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr ""
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
 msgstr ""
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Ugyldig blokfaktor"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Ugyldig båndlængde"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr ""
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Mere end én grænse-dato"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr ""
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr ""
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr ""
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: ugyldig gruppe"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Ugyldig modus angivet i flag"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 #, fuzzy
 msgid "Invalid number"
 msgstr "Ugyldigt inode-nummer"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Ugyldig ejer"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Ugyldig poststørrelse"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Poststørrelse skal være deleligt med %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 #, fuzzy
 msgid "Invalid number of elements"
 msgstr "Ugyldig båndlængde"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr ""
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr ""
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, fuzzy, c-format
 msgid "Unknown density: `%c'"
 msgstr "Ukendt mønster '%s'"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr ""
 "Flagene '-[0-7][lmh]' understøttes ikke af *denne* implementering af tar"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr ""
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Gammelt flag '%c' behøver et argument."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr ""
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr ""
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 #, fuzzy
 msgid "Multiple archive files require `-M' option"
 msgstr "Ved flere arkivfiler kræves '-M'-flaget"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Kan ikke kombinere --listed-incremental med --newer"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr ""
+
+#: src/tar.c:2404
 #, fuzzy, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: etikette på delarkiv er for lang (grænse er %lu byte)"
 msgstr[1] "%s: etikette på delarkiv er for lang (grænse er %lu byte)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Kan ikke verificere arkiv som går over flere delarkiver"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Kan ikke verificere komprimerede arkiver"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Kan ikke bruge komprimerede arkiver som går over flere delarkiver"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 #, fuzzy
 msgid "Cannot concatenate compressed archives"
 msgstr "Kan ikke opdatere komprimerede arkiver"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr ""
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Nægter stædigt at oprette et tomt arkiv"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Flagene '-Aru' er inkompatible med '-f -'"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Du skal angive et af '-Acdtrux'-flagene"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2268,79 +2308,84 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: Filen formindskedes med %s byte"
 msgstr[1] "%s: Filen formindskedes med %s byte"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr ""
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Tidsstempel uden for område"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr ""
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr ""
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr ""
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr ""
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, fuzzy, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "Arkiv base-64 streng med fortegn %s er uden for %s område"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr ""
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr ""
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr ""
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr ""
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, fuzzy, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "Arkiv værdi %s er udenfor %s område %s..%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr ""
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr ""
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr ""
@@ -2382,236 +2427,300 @@ msgstr "Skriver kontrolpunkt %d"
 msgid "Read checkpoint %u"
 msgstr "Læser kontrolpunkt %d"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 #, fuzzy
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
 msgstr "Generér datafiler for GNU tar testpakke.\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 #, fuzzy
 msgid "File creation options:"
 msgstr "Konflikt i komprimeringsflag"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr ""
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr ""
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 #, fuzzy
 msgid "Write to file NAME, instead of standard output"
 msgstr "Fejl ved skrivning til standard uddata"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr ""
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr ""
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr ""
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr ""
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr ""
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr ""
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr ""
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr " [FLAG...}"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr ""
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr ""
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr ""
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, fuzzy, c-format
 msgid "Invalid size: %s"
 msgstr "Ugyldigt tidsstempel"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, fuzzy, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Inode-nummer uden for område"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr ""
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr ""
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr ""
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, fuzzy, c-format
 msgid "Unknown date format"
 msgstr "Ukendt systemfejl"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr ""
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, fuzzy, c-format
 msgid "cannot open `%s'"
 msgstr "kan ikke ændre ejer (chown) '%s'"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 #, fuzzy
 msgid "cannot seek"
 msgstr "Kan ikke lukke"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr ""
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr ""
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, fuzzy, c-format
 msgid "Unknown field `%s'"
 msgstr "Ukendt mønster '%s'"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, fuzzy, c-format
 msgid "cannot set time on `%s'"
 msgstr "kan ikke oprette kataloget '%s'"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "kan ikke ændre ejer (chown) '%s'"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr ""
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, fuzzy, c-format
 msgid "Command failed with status %d\n"
 msgstr "Underproces døde med signal %d"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr ""
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr ""
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, fuzzy, c-format
 msgid "--stat requires file names"
 msgstr "--Ødelagte filnavne--\n"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr ""
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: ulovligt flag -- %c\n"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
 #~ msgstr ""
-#~ "Advarsel: -I flaget er ikke understøttet; måske mente du -j eller -T?"
+#~ "\n"
+#~ "Rapportér fejl til <bugs-tar@gnu.org>.\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Læser %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Fejl kan ikke reddes; afslutter nu"
+
+#, fuzzy
+#~ msgid "filter the archive through compress"
+#~ msgstr "%s: fil er det samme som arkivet; ikke lagret"
+
+#, fuzzy
+#~ msgid "filter the archive through lzma"
+#~ msgstr "%s: fil er det samme som arkivet; ikke lagret"
+
+#, fuzzy
+#~ msgid "filter the archive through lzop"
+#~ msgstr "%s: fil er det samme som arkivet; ikke lagret"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Kan ikke allokere plads til buffer\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Kan ikke allokere plads til buffer"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Prøv '%s --help' for mere information.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Brug: %s [FLAG]\n"
+#~ "Behandl en båndstation, med kommandoer fra en anden proces.\n"
+#~ "\n"
+#~ "      --help            vis denne hjælpetekst\n"
+#~ "      --version         vis programversion\n"
+
+#, fuzzy
+#~ msgid "Seek offset error"
+#~ msgstr "Søgeposition uden for område"
+
+#~ msgid "Premature end of file"
+#~ msgstr "For tidlig filafslutning"
 
 #~ msgid "block size"
 #~ msgstr "blokstørrelse"
@@ -2647,9 +2756,6 @@ msgstr ""
 #~ msgid "Visible long name error"
 #~ msgstr "Fejl på et langt navn"
 
-#~ msgid "Time stamp out of range"
-#~ msgstr "Tidsstempel uden for område"
-
 #~ msgid "Device number out of range"
 #~ msgstr "Enhedsnummer er uden for område"
 
@@ -3034,6 +3140,10 @@ msgstr ""
 #~ msgid "Obsolete option name replaced by --read-full-records"
 #~ msgstr "Forældet flag skiftet ud med --read-full-records"
 
+#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgstr ""
+#~ "Advarsel: -I flaget er ikke understøttet; måske mente du -j eller -T?"
+
 #~ msgid "Obsolete option name replaced by --touch"
 #~ msgstr "Forældet flag skiftet ud med --touch"
 
index 745c4d8ca0fe04f9354ee46f8927701e3db39ca2..69384998f54d28008e500c74ae2b1ba1e83b222d 100644 (file)
Binary files a/po/de.gmo and b/po/de.gmo differ
index 9219c0492acc837641733593dfeae4c96ef8d34e..b5d3616fc178002eb521fb2d153c11d8dc7f1663 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -8,10 +8,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: tar 1.21\n"
+"Project-Id-Version: tar 1.22\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
-"PO-Revision-Date: 2009-01-05 10:25+0100\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
+"PO-Revision-Date: 2009-03-26 10:05+0100\n"
 "Last-Translator: Michael Piefel <piefel@informatik.hu-berlin.de>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
 "MIME-Version: 1.0\n"
@@ -19,282 +19,190 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "ungültiges Argument %s für %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "mehrdeutiges Argument %s für %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Zulässige Argumente sind:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: %s-Wert ist kleiner oder gleich %s"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: ARGP_HELP_FMT-Parameter benötigt einen Wert"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: ARGP_HELP_FMT-Parameter muss positiv sein"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: unbekannter ARGP_HELP_FMT-Parameter"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Müll in ARGP_HELP_FMT: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
 msgstr ""
-"Erforderlich oder optionale Argumente für lange Optionen sind ebenso "
+"Erforderliche oder optionale Argumente für lange Optionen sind ebenso "
 "erforderlich bzw. optional für die entsprechenden Kurzoptionen."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Aufruf:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr " oder: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [OPTION...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "„%s --help“ oder „%s --usage“ gibt weitere Informationen.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "Melden Sie Fehler (auf Englisch, mit LC_ALL=C) an %s.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Unbekannter Systemfehler."
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "diese Hilfe ausgeben"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "eine kurze Benutzungsübersicht ausgeben"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "NAME"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "den Programmnamen setzen"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "SEK"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "für SEK Sekunden hängenbleiben (Voreinst.: 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "Programmversion ausgeben"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(PROGRAMMFEHLER) Keine Version bekannt!?"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: Zu viele Argumente\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr "(PROGRAMMFEHLER) Option hätte erkannt werden müssen!?"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr "Schreibfehler"
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: Option „%s“ ist mehrdeutig\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: Option „--%s“ erlaubt keinen Parameter\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: Option „%c%s“ erlaubt keinen Parameter.\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: Option „%s“ benötigt einen Parameter.\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: Unbekannte Option „--%s“\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: Unbekannte Option „%c%s“\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: Unzulässige Option -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: Ungültige Option -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: Option benötigt einen Parameter -- %c.\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: Option „-W %s“ ist mehrdeutig.\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: Option „-W %s“ erlaubt keinen Parameter.\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "Kein Speicher mehr"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, c-format
 msgid "unable to record current working directory"
 msgstr "Kann Arbeitsverzeichnis nicht aufzeichnen."
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, c-format
 msgid "failed to return to initial working directory"
-msgstr "Konnde nicht zu ursprünglichem Arbeitsverzeichnis zurückkehren."
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Kann %s nicht ausführen"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Warnung: Kann %s nicht ausführen"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Kann Zugriffsrechte nicht zu %s ändern"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Kann Datei-Eigentümer nicht zu uid %lu, gid %lu ändern"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Kann nicht zu „%s“ linken"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Lesefehler bei Byte %s beim Lesen von einem Byte"
-msgstr[1] "%s: Lesefehler bei Byte %s beim Lesen von %lu Bytes"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Warnung: Lesefehler bei Byte %s beim Lesen von einem Byte"
-msgstr[1] "%s: Warnung: Lesefehler bei Byte %s beim Lesen von %lu Bytes"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Kann nicht auf %s positionieren"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Warnung. Kann nicht auf %s positionieren"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Kann keinen symbolischen Link auf „%s“ anlegen"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Nur %lu von %lu Byte geschrieben"
-msgstr[1] "%s: Nur %lu von %lu Bytes geschrieben"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Entferne führende „%s“ von Elementnamen"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Entferne führende „%s“ von Zielen harter Verknüpfungen"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Ersetze „.“ für leeren Elementnamen"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Ersetze „.“ für leeres Ziel einer harten Verknüpfung"
+msgstr "Konnte nicht zu ursprünglichem Arbeitsverzeichnis zurückkehren."
 
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
@@ -309,17 +217,17 @@ msgstr "Ersetze „.“ für leeres Ziel einer harten Verknüpfung"
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "„"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "“"
 
@@ -329,7 +237,7 @@ msgstr "“"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[yYjJ]"
 
@@ -339,39 +247,28 @@ msgstr "^[yYjJ]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[nN]"
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Service nicht verfügbar."
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "Standardeingabe"
-
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "Standardausgabe"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Kann Remote-Shell nicht ausführen."
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr "©"
 
-#: lib/version-etc.c:67
-#, fuzzy
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -388,19 +285,19 @@ msgstr ""
 "\n"
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr "Geschrieben von %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Geschrieben von %s und %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Geschrieben von %s, %s und %s.\n"
@@ -408,7 +305,7 @@ msgstr "Geschrieben von %s, %s und %s.\n"
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -420,7 +317,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -432,7 +329,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -444,7 +341,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -456,7 +353,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -470,7 +367,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -484,7 +381,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -499,253 +396,401 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
-#, c-format
+#: gnu/version-etc.c:247
+#, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
+msgstr "Melden Sie Fehler (auf Englisch, mit LC_ALL=C) an %s.\n"
+
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
 "\n"
 "Melden Sie Fehler (auf Englisch, mit LC_ALL=C) an <%s>.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
-msgstr ""
+#: gnu/version-etc.c:255
+#, fuzzy, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+msgstr "Homepage von %s: <http://www.gnu.org/software/%s/>.\n"
+
+#: gnu/version-etc.c:258
+#, fuzzy
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+msgstr "Allgemeine Hilfe zu GNU-Software: <http://www.gnu.org/gethelp/>.\n"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Kann %s nicht ausführen"
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "Eingabezeichenkette zu lang"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Warnung: Kann %s nicht ausführen"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "Syntaxfehler in der Zahl"
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Kann Zugriffsrechte nicht zu %s ändern"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Kann Speicherplatz für Puffer nicht reservieren.\n"
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Kann Datei-Eigentümer nicht zu uid %lu, gid %lu ändern"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Kann keinen Speicher für Puffer reservieren."
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Kann keine harte Verknüpfung zu „%s“ anlegen"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:179 lib/paxerror.c:211
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "„%s --help“ zeigt weitere Informationen.\n"
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Lesefehler bei Byte %s beim Lesen von einem Byte"
+msgstr[1] "%s: Lesefehler bei Byte %s beim Lesen von %lu Bytes"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:192
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Warnung: Lesefehler bei Byte %s beim Lesen von einem Byte"
+msgstr[1] "%s: Warnung: Lesefehler bei Byte %s beim Lesen von %lu Bytes"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Kann nicht auf %s positionieren"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Warnung: Kann nicht auf %s positionieren"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Kann keine symbolische Verknüpfung zu „%s“ anlegen"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Nur %lu von einem Byte geschrieben"
+msgstr[1] "%s: Nur %lu von %lu Bytes geschrieben"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Entferne führende „%s“ von Elementnamen"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Entferne führende „%s“ von Zielen harter Verknüpfungen"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Ersetze „.“ für leeren Elementnamen"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Ersetze „.“ für leeres Ziel einer harten Verknüpfung"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Service nicht verfügbar."
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "Standardeingabe"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "Standardausgabe"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Aufruf: %s [OPTION]\n"
-"Arbeiten mit einem Bandlaufwerk, Kommandos können von einem anderen Prozess "
-"stammen.\n"
-"\n"
-"  --version    Versionsinformation ausgeben\n"
-"  --help       diesen Hilfetext ausgeben\n"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "Fehler bei der Positionierungsangabe."
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Kann Remote-Shell nicht ausführen."
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Richtung für Positionierung nicht zulässig."
+
+#: rmt/rmt.c:419
+#, fuzzy
+msgid "Invalid seek direction"
+msgstr "Ungültige Zugriffsrechte angegeben."
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Ungültige Größe: %s"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Positionierungsangabe außerhalb des zulässigen Bereichs."
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Richtung für Positionierung nicht zulässig."
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Ungültige Bandlänge"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Positionierungsangabe außerhalb des zulässigen Bereichs."
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: Vorzeitiges Dateiende.\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Vorzeitiges Dateiende."
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "Hauptsächlicher Arbeitsmodus:"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Unerwartetes Dateiende in verstümmelten Namen."
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "ZAHL"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "DATEI"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "kann „%s“ nicht öffnen"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "zu viele Argumente"
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
-msgstr "Ungültiges Kommando."
+msgstr "Ungültiges Befehl."
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Das sieht nicht wie ein „tar“-Archiv aus."
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Gesamtzahl geschriebener Bytes"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "Gesamtzahl gelesener Bytes"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Gesamtzahl gelöschter Bytes: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(pipe)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Ungültiger Wert für „record_size“."
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Kein Archivname angegeben"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Kann Archive auf Standard-Ein-/Ausgabe nicht prüfen."
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "Archiv ist komprimiert. Benutzen Sie die Option %s."
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Kann komprimierte Archive nicht aktualisieren"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Am Anfang des Mediums, beende jetzt."
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Zu viele Fehler, beende."
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Recordgröße = %lu Block"
 msgstr[1] "Recordgröße = %lu Blöcke"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Falsch ausgerichteter Block (ein Byte) im Archiv."
 msgstr[1] "Falsch ausgerichteter Block (%lu Bytes) im Archiv."
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr "Kann Archiv-Datei nicht zurücksetzen; könnte ohne „-i“ unlesbar sein."
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "„rmtlseek“ nicht an Recordgrenze angehalten"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: enthält ungültige Teil-Nummer."
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Teil-Nummer zu groß."
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Medium #%d für %s einlegen und Eingabetaste drücken: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "Dateiende gefunden, Benutzereingabe erwartet"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "WARNUNG: Archiv unvollständig"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
 " q             Abort tar\n"
 " y or newline  Continue operation\n"
 msgstr ""
-" n Name       für die nächsten (und folgenden) Medien neuen Dateinamen "
+" n Name        für die nächsten (und folgenden) Medien neuen Dateinamen "
 "angeben\n"
-" q            „tar“ abbrechen\n"
-" j oder Enter fortfahren\n"
+" q             „tar“ abbrechen\n"
+" j oder Enter  fortfahren\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
-msgstr " !            Shell in einem Unterprozess starten\n"
+msgstr " !             Shell in einem Unterprozess starten\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
-msgstr " ?            diese Liste ausgeben\n"
+msgstr " ?             diese Liste ausgeben\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Kein neues Medium; halte an.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "Dateiname nicht angegeben. Versuchen Sie es noch einmal.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "Ungültige Eingabe. Geben Sie „?“ für Hilfe ein.\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
-msgstr "„%s“-Kommando gescheitert."
+msgstr "„%s“-Befehl gescheitert."
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr ""
 "%s wird möglicherweise auf diesem Teil fortgesetzt: Kopf enthält "
 "abgeschnittenen Namen."
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "Dieser Teil ist keine Fortsetzung von %s."
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s hat die falsche Größe (%s != %s + %s)."
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Dieser Teil ist nicht an der Reihe (%s - %s != %s)."
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Kennzeichnung des Archivs passt nicht zu „%s“."
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Teil „%s“ passt nicht zu „%s“."
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
@@ -753,60 +798,60 @@ msgstr ""
 "%s: Dateiname zu lang, um in einem GNU-Mehrteil-Kopf abgelegt werden zu "
 "können, abgeschnitten"
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
 msgstr "Schreiben endete nicht an Blockgrenze"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Konnte nur %lu von %lu Byte lesen"
 msgstr[1] "Konnte nur %lu von %lu Bytes lesen"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Unterschiedliche Inhalte"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Unerwartetes Dateiende im Archiv."
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Unterschiedliche Dateitypen "
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Modus ist unterschiedlich"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Benutzerkennung ist unterschiedlich"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Gruppenkennung ist unterschiedlich"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Änderungszeit ist unterschiedlich"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Größe ist unterschiedlich"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
-msgstr "Nicht auf „%s“ gelinkt."
+msgstr "Nicht mit „%s“ verknüpft"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
-msgstr "Symbolischer Link ist unterschiedlich."
+msgstr "Symbolische Verknüpfung ist unterschiedlich"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Unterschiedliche Gerätenummern"
 
@@ -828,34 +873,34 @@ msgstr "Archiv enthält Dateinamen, deren Präfixe entfernt wurden."
 msgid "Verification may fail to locate original files."
 msgstr "Die Überprüfung findet möglicherweise die Originaldateien nicht."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "FEHLER BEI PRÜFUNG: %d ungültiger Kopfteil erkannt."
 msgstr[1] "FEHLER BEI PRÜFUNG: %d ungültige Kopfteile erkannt."
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "Ein einzelner Nullblock bei %s"
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: enthält eine „Cache-Verzeichnis“-Markierung %s; %s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "Wert %s außerhalb des %s-Bereich %s..%s; ersetze durch %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "Wert %s außerhalb des %s-Bereichs %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Erzeuge negative oktale Kopfteile"
 
@@ -875,344 +920,331 @@ msgstr ""
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: Verknüpfungsname ist zu lang; nicht gesichert."
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "Datei %s ist um ein Byte geschrumpft, fülle mit Null auf."
 msgstr[1] "Datei %s ist um %s Bytes geschrumpft, fülle mit Nullen auf."
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "Datei %s liegt auf einem anderen Dateisystem; nicht gesichert."
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr "Inhalt nicht gesichert"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Unbekannter Dateityp; Datei ignoriert."
 
-#: src/create.c:1464
-#, c-format
-msgid "Missing links to %s.\n"
-msgstr "Fehlende Verküpfungen zu %s.\n"
+#: src/create.c:1472
+#, fuzzy, c-format
+msgid "Missing links to %s."
+msgstr "Fehlende Verknüpfungen zu %s.\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "Datei %s ist unverändert; nicht gesichert."
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s ist das Archiv; nicht gesichert."
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Datei gelöscht, bevor sie gelesen wurde."
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr "Verzeichnis nicht gesichert"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: Datei hat sich beim Lesen geändert."
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: Socket ignoriert"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: Klappe ignoriert"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Springe zum nächsten Kopfteil."
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Lösche nicht-Kopfteil aus dem Archiv"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: unplausibel alter Zeitstempel %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: Zeitstempel %s liegt %s Sekunden in der Zukunft."
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Unerwarteter Inkonsitenz beim Erstellen des Verzeichnisses."
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Verzeichnis umbenannt bevor sein Status ermittelt werden konnte"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Extrahiere zusammenhängende Dateien („contiguous files“) als reguläre."
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
-msgstr "Versuche symbolische Links als harte Links herauszuholen."
-
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Lese %s.\n"
+msgstr ""
+"Versuche symbolische Verknüpfungen als harte Verknüpfungen herauszuholen."
 
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr ""
-"Kann „%s“ nicht herausholen -- Datei ist Fortsetzung eines anderen Teils."
+"Kann „%s“ nicht herausholen  Datei ist Fortsetzung eines anderen Teils."
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "Unerwarteter Kopfteil mit langem Namen"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Unbekannter Dateityp „%c“, wie normale Datei extrahiert."
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "Aktuelles %s ist neuer oder hat dasselbe Alter."
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Konnte keine Sicherheitskopie von dieser Datei erstellen"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "Kann %s nicht in %s umbenennen."
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Nicht behebbarer Fehler: Programmabbruch. "
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Verzeichnis wurde von „%s“ umbenannt."
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Verzeichnis wurde umbenannt."
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "Verzeichnis „%s“ ist neu."
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
-msgstr "Ungültiges Datum"
+msgstr "Ungültiger Zeitstempel"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Ungültige Änderungszeit (Sekunden)."
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "Ungültige Änderungszeit (Nanosekunden)."
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Ungültige Gerätenummer"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Ungültige Inode-Nummer"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "Feld zu lang beim Lesen der Schnappschussdatei"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "Lesefehler in Schnappschussdatei"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "Unerwartetes Dateiende im Schnappschussdatei."
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "Unerwarteter Feldwert in Schnappschussdatei"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "Fehlender Record-Abschluss"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "unzulässiges inkrementelles Dateiformat"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr "Nicht unterstützte Version des inkrementellen Formats: %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr "Fehlgeformtes Verzeichnis für Dump: „%c“ erwartet, aber %#3o gefunden"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "Fehlgeformtes Verzeichnis für Dump: „X“ dupliziert"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "Fehlgeformtes Verzeichnis für Dump: leerer Name in „R“"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "Fehlgeformtes Verzeichnis für Dump: „T“ folgt nicht „R“"
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "Fehlgeformtes Verzeichnis für Dump: leerer Name in „T“"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 "Fehlgeformtes Verzeichnis für Dump: „%c“ erwartet, aber Ende der Daten "
 "gefunden"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr "Fehlgeformtes Verzeichnis für Dump: „X“ nie benutzt"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Kann kein temporäres Verzeichnis mit der Schablone %s anlegen"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: Entferne Verzeichnis nicht: kann nicht zugreifen"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: Verzeichnis liegt auf einem anderen Dateisystem: entferne nicht."
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Lösche %s.\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Kann nicht entfernen."
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Ausgelassen"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "Block %s: ** Block aus NULlen **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "Block %s: ** Ende der Datei **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "Block %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
-msgstr "Leerzeichen im Kopfteil, wo nummerische %s-Werte stehen sollten."
+msgstr "Leerzeichen im Kopfteil, wo numerische %s-Werte stehen sollten."
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr "Oktalzahl %.*s außerhalb des %s-Bereichs, nehme Zweierkomplement an?"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Oktalzahl %.*s außerhalb des %s-Bereichs"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Archiv enthält veraltete Base64-Kopfteile"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "Base64-Text %s außerhalb des %s-Bereichs."
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Base-256-Wert ist außerhalb des %s-Bereichs."
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Archiv enthält „%.*s“ wo numerische %s-Werte stehen sollten."
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Wert %s außerhalb des %s-Bereichs %s..%s."
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
-msgstr " Verküpfung zu %s\n"
+msgstr " Verknüpfung zu %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " unbekannter Dateityp %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "––Lange Verknüpfung––\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "––Langer Name––\n"
@@ -1220,90 +1252,109 @@ msgstr "––Langer Name––\n"
 # Alte Üs: Band Kopfteil.  Kann diese Meldung auch bei Disketten
 # ausgegeben werden?  Dann kann man ja nicht "Band" sagen; am besten
 # einfach "Volume" lassen. ke.
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "––Vorspann des Teils––\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "––Fortgesetzt bei Byte %s––\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Erzeuge Verzeichnis:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Benenne „%s“ in „%s“ um.\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Kann nicht in %s umbenennen"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Benenne „%s“ zurück in „%s“.\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Kann aktuelles Verzeichnis nicht sichern."
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Kann Arbeitsverzeichnis nicht wechseln."
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Datei gelöscht, bevor sie gelesen wurde."
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Datei gelöscht, bevor sie gelesen wurde."
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "Kindprozess"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "interprocess channel"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr "Zeichen für Musterüberdeckung im Dateinamen benutzt. Benutzen"
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr "Sie bitte --wildcards, um Musterüberdeckung zu ermöglichen oder"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "--no-wildcards, um diese Warnung zu unterdrücken."
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Nicht im Archiv gefunden."
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Erforderliches Auftreten nicht im Archiv gefunden."
 
-#: src/tar.c:79
+#: src/names.c:894
+#, fuzzy
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr "--preserve-order ist nicht kompatibel mit --listed-incremental"
+
+#: src/names.c:900
+#, fuzzy
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr "--preserve-order ist nicht kompatibel mit --listed-incremental"
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Die beiden Optionen „-%s“ und „-%s“ verlangen Standard-Eingabe."
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Ungültiges Archivformat"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "GNU-Erweiterungen bei einem inkompatiblen Archiv-Format verlangt."
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
@@ -1311,7 +1362,7 @@ msgstr ""
 "Unbekannter Zitatstil „%s“. Versuchen Sie „%s --quoting-style=help“ für eine "
 "Liste."
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1330,7 +1381,7 @@ msgstr ""
 "  %s -tvf archiv.tar         # Inhalt von archiv.tar ausführlich anzeigen\n"
 "  %s -xf archiv.tar          # alle Dateien aus archiv.tar extrahieren\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1354,86 +1405,79 @@ msgstr ""
 "                    vorhanden sind, sonst einfache\n"
 "  never, simple   immer einfache Sicherheitskopien\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Hauptsächlicher Arbeitsmodus:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "den Inhalt eines Archivs auflisten"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "Dateien aus einem Archiv extrahieren"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "ein neues Archiv anlegen"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "Unterschiede zwischen Archiv und Dateisystem suchen"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "Dateien hinten an das Archiv anfügen"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "nur Dateien anfügen, die neuer als die Kopie im Archiv sind"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "tar-Dateien an ein Archiv anfügen"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "aus dem Archiv löschen (nicht auf Magnetband!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr "den Archiv-Teil-Namen überprüfen und beenden"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Feineinstellungen:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "löchrige Dateien („sparse files“) effizient behandeln"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr "MAJOR[.MINOR]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr "zu benutzende Version des Sparse-Formats setzen (impliziert --sparse)"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "inkrementelle Sicherung im alten GNU-Format"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "DATEI"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "inkrementelle Sicherung im neuen GNU-Format"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr ""
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "kein Abbruch mit Existatus!=0 bei unlesbaren Dateien"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "ZAHL"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1445,122 +1489,126 @@ msgstr ""
 "list und wenn eine Dateiliste entweder auf der Kommandozeile oder mittels "
 "der Option -T angegeben wurde benutzt werden; Zahl ist standardmäßig 1"
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "im Archiv kann positioniert werden"
 
-#: src/tar.c:418
+#: src/tar.c:436
+#, fuzzy
+msgid "archive is not seekable"
+msgstr "im Archiv kann positioniert werden"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr "Gerätenummer bei Erstellung inkrementeller Archive nicht prüfen"
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 "Gerätenummer bei Erstellung inkrementeller Archive prüfen (Voreinstellung)"
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "Steuerung des Überschreibens:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "Archiv nach dem Schreiben prüfen"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "Dateien nach dem Hinzufügen zum Archiv löschen"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "vorhandene Dateien beim Extrahieren nicht überschreiben"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 "vorhandene Dateien, die neuer als die Archivkopie sind, nicht überschreiben"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "vorhandene Dateien beim Extrahieren überschreiben"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "zu überschreibende Dateien vor dem Extrahieren löschen"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr ""
 "Verzeichnishierarchien rekursiv vor dem Extrahieren eines Verzeichnisses "
 "löschen"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "Metadaten existierender Verzeichnisse erhalten"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 "Metadaten existierender Verzeichnisse beim Extrahieren überschreiben "
 "(Voreinstellung)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Wahl des Ausgabestroms:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "Dateien auf die Standardausgabe extrahieren"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "BEFEHL"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "extrahierte Dateien an ein anderes Programm weiterreichen"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "Exitstatus der Kinder ignorieren"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr "Exitstatus!=0 von Kindern als Fehler ansehen"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Behandlung der Datei-Attribute:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "Eigentümer für hinzugefügte Dateien auf NAME setzen"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "Gruppe für hinzugefügte Dateien auf NAME setzen"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "DATUM-ODER-DATEI"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "Änderungszeit für hinzugefügte Datei aus DATUM-ODER-DATEI beziehen"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "ÄNDERUNGEN"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "den (symbolischen) Modus ÄNDERUNGEN für hinzugefügte Dateien erzwingen"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "METHODE"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1571,30 +1619,34 @@ msgstr ""
 "oder dadurch, dass die Zeiten gar nicht erst neu gesetzt werden (METHODE="
 "„system“)"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "die geänderte Zeit nicht extrahieren"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+#, fuzzy
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr ""
 "versuchen, die Dateien mit denselben Eigentumsverhältnisse zu extrahieren"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+#, fuzzy
+msgid "extract files as yourself (default for ordinary users)"
 msgstr "Dateien als aktueller Nutzer extrahieren"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "immer Zahlen für Nutzer-/Gruppennamen verwenden"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 "Informationen über Dateizugriffsrechte mit extrahieren (Voreinstellung für "
 "Root)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
@@ -1602,15 +1654,15 @@ msgstr ""
 "die Umask des Nutzers anwenden beim Extrahieren von Dateizugriffsrechte aus "
 "dem Archiv (Voreinstellung für normale Nutzer)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "zu entpackende Dateinamen wie im Archiv sortieren"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "wie -p und -s zusammen"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
@@ -1618,139 +1670,139 @@ msgstr ""
 "das Setzen von Zugriffszeiten und Rechten von extrahierten Verzeichnissen "
 "verschieben bis zum Ende des Entpackens"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "den Effekt von --delay-directory-restore aufheben"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "Geräteauswahl und -umschaltung:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "ARCHIV"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "Archivdatei oder Gerät ARCHIV benutzen"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "Archivdatei ist lokal, auch wenn der Name einen Doppelpunkt enthält"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "statt „rmt“ den gegebenen BEFEHL benutzen"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "statt „rsh“ den entfernten BEFEHL benutzen"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "Laufwerk und Schreibdichte angeben"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "mehrteiliges Archiv anlegen/listen/extrahieren"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "Medium wechseln, wenn ZAHL × 1024 Bytes geschrieben wurden"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "am Ende jedes Mediums das Skript ausführen (impliziert -M)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "Teil-Nummer in DATEI benutzen/aktualisieren"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Blockung des Gerätes:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "BLÖCKE"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "BLÖCKE × 512 Bytes pro Record"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "ZAHL Bytes pro Record, Vielfaches von 512"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "Blöcke mit Nullen im Archiv ignorieren (heißt EOF)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "erneut Blocken beim Lesen (für 4.2BSD‐Pipes)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Auswahl des Archiv-Formats:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "FORMAT"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "Archiv mit dem gegebenen Format anlegen"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "FORMAT ist eines der folgenden:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "altes V7-tar-Format"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "GNU-Format wie mit tar <=1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "GNU-tar-1.13.x-Format"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "Format von POSIX 1003.1-1988 (ustar)"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "Format von POSIX 1003.1-2001 (pax)"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "wie pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "wie --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "wie --format=posix"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "Schlüsselwort[[:]=Wert][,Schlüsselwort[[:]=Wert]]..."
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "Pax-Schlüsselwörter steuern"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "TEXT"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
@@ -1758,104 +1810,78 @@ msgstr ""
 "Archiv mit dem Teilnamen TEXT anlegen; beim Listen/Extrahieren, TEXT als "
 "Muster für den Teilnamen benutzen"
 
-#: src/tar.c:593
+#: src/tar.c:613
 msgid "Compression options:"
 msgstr "Kompressionsoptionen:"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr "Archiverweiterung nehmen, um Kompressionsprogramm zu bestimmen"
 
-#: src/tar.c:597
-#, fuzzy
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr "Archiverweiterung nicht nehmen, um Kompressionsprogramm zu bestimmen"
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "Archiv durch bzip2 filtern"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "Archiv durch gzip filtern"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "Archiv durch compress filtern"
-
-#: src/tar.c:609
-msgid "filter the archive through lzma"
-msgstr "Archiv durch lzma filtern"
-
-#: src/tar.c:611
-msgid "filter the archive through lzop"
-msgstr "Archiv durch lzop filtern"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "Archiv durch gzip filtern"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "PROG"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "durch PROG filten (muss -d akzeptieren)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Auswahl der lokalen Dateien:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 "angegebene Datei zum Archiv hinzufügen (nützlich, wenn Datei mit einem "
 "Strich beginnt)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "VERZEICHNIS"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "zu VERZEICHNIS wechseln"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "Namen der zu bearbeitenden Dateien aus DATEI lesen"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T liest null-terminierte Namen, verbiete -C"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr "die Wirkung der vorangehenden Option --null aufheben"
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 "Dateinamen, die mit -T gelesen werden, von Zitat befreien (Voreinstellung)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr "Dateinamen, die mit -T gelesen werden, nicht von Zitat befreien"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "MUSTER"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "Dateien auslassen, auf die MUSTER passt"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "Dateien auslassen, auf die in DATEI angegebene Muster passen"
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
@@ -1863,93 +1889,97 @@ msgstr ""
 "Inhalt von Verzeichnissen auslassen, die CACHEDIR.TAG enthalten, außer der "
 "Markierungsdatei selbst"
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr ""
 "alles unterhalb von Verzeichnissen auslassen, die CACHEDIR.TAG enthalten"
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "Verzeichnisse auslassen, die CACHEDIR.TAG enthalten"
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 "Inhalt von Verzeichnissen auslassen, die DATEI enthalten, außer DATEI selbst"
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr "alles unterhalb von Verzeichnissen auslassen, die DATEI enthalten"
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr "Verzeichnisse auslassen, die DATEI enthalten"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr "Verzeichnisse von Versionskontrollsystemen auslassen"
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "automatischen Abstieg in Vezeichnisse vermeiden"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "beim Anlegen eines Archivs im lokalen Dateisystem bleiben"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "in Verzeichnisse absteigen (Voreinstellung)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "führende „/“-Zeichen in den Dateinamen erhalten"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 "symbolischen Verknüpfungen folgen; die Dateien archivieren und abspeichern, "
 "auf die sie zeigen"
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 "harten Verknüpfungen folgen; die Dateien archivieren und abspeichern, auf "
 "die sie sich beziehen"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "ELEMENT-NAME"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "mit ELEMENT-NAME im Archiv beginnen"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "nur Dateien ablegen, die neuer als DATUM-ODER-DATEI sind"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "DATUM"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "Datum und Zeit nur überprüfen, wenn Daten geändert wurden"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "KONTROLLE"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "Sicherung vor dem Entfernen, wähle Versions-KONTROLLE"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "ZEICHENKETTE"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1957,90 +1987,99 @@ msgstr ""
 "Sicherung vor dem Entfernen, übliches Suffix ersetzen („~“, wenn nicht durch "
 "Umgebungsvariable SIMPLE_BACKUP_SUFFIX anders gesetzt)"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr "Dateinamentransformationen:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr "ZAHL führende Komponenten beim Extrahieren von Dateinamen entfernen"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "AUSDRUCK"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr "den sed-AUSDRUCK zur Dateinamentransformation benutzen"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 "Dateinamenauswahloptionen (sowohl für ein- als auch ausschließende Muster):"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr "Groß-/Kleinschreibung ignorieren"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr "Muster am Dateinamensanfang ausrichten"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr "Muster passen nach jedem „/“ (Voreinstellung beim Ausschluss)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr "Groß-/Kleinschreibung beachten (Voreinstellung)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr "Muster benutzen (Voreinstellung für Ausschluss)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "Zeichenketten sind buchstabengetreu"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr "Jokerzeichen passen nicht auf „/“"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr "Jokerzeichen passen auf „/“ (Voreinstellung für Ausschluss)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Informationen:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "bearbeitete Dateien ausführlich listen"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+#, fuzzy
+msgid "warning control"
+msgstr "Steuerung des Überschreibens:"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 "Fortschrittsnachrichten bei jedem ZAHLten Record (Voreinstellung 10) anzeigen"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr "AKTION"
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr "AKTION bei jedem Kontrollpunkt ausführen"
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr ""
 "eine Nachricht ausgeben, wenn nicht alle Verknüpfungen abgespeichert werden"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "SIGNAL"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2052,27 +2091,27 @@ msgstr ""
 "wird; erlaubte Signale sind: SIGHUP, SIGQUIT, SIGINT, SIGUSR1 und SIGUSR2; "
 "die Namen ohne das Präfix SIG sind auch erlaubt"
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "Dateiänderungszeiten in UTC anzeigen"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "ausführliche Ausgabe in DATEI schreiben"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "bei jeder Nachricht die Blocknummer innerhalb des Archivs mit anzeigen"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "für jede Aktion um Bestätigung bitten"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "Voreinstellungen von tar anzeigen"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
@@ -2080,86 +2119,94 @@ msgstr ""
 "beim Listen oder Extrahieren jedes Verzeichnis auflisten, dass nicht den "
 "Suchkriterien entspricht"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr "Datei- oder Archivnamen nach der Transformation anzeigen"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "STIL"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr "Zitatstil setzen; siehe unten für gültige STIL-Werte"
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "zusätzliche Zeichen aus ZEICHENKETTE zitieren"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "Zeichen aus ZEICHENKETTE nicht zitieren"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Kompatibilitätsoptionen:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr "beim Anlegen wie --old-archive; beim Extrahieren wie --no-same-owner"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Weitere Optionen:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "möglicherweise schädliche Optionen deaktivieren"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Von den Optionen „-Acdtrux“ ist nur _eine_ erlaubt."
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Kompressionsoptionen schließen sich gegenseitig aus."
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "Unbekannter Signalname: %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "Datumsdatei nicht gefunden"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Ersetze %s für unbekanntes Datumsformat %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "Option %s: Behandle Datum „%s“ als %s"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s: Dateiliste schon gelesen"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s: gelesener Dateiname enthält ein NULL-Zeichen"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "Archiv durch xz filtern"
+
+#: src/tar.c:1290
+#, fuzzy
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr "Gültige Argumente für die Option --quoting-style sind:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2167,48 +2214,53 @@ msgstr ""
 "\n"
 "*Dieses* „tar“ hat als Voreinstellung:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Ungültige Blockgröße"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Ungültige Bandlänge"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+#, fuzzy
+msgid "Invalid incremental level value"
+msgstr "unzulässiges inkrementelles Dateiformat"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Mehr als ein Datum angegeben."
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr "Ungültiger Wert für Sparse-Version (für löchrige Dateien)"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr "--atime-preserve='system' wird auf dieser Plattform nicht unterstützt"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr "Wert für --checkpoint ist keine ganze Zahl"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: Ungültige Gruppe"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Ungültige Zugriffsrechte angegeben."
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Ungültige Zahl"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Ungültiger Benutzer"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
@@ -2216,112 +2268,118 @@ msgstr ""
 "Die Option --preserve ist veraltet, benutzen Sie stattdessen --preserve-"
 "permissions --preserve-order"
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Ungültiger Wert für Recordgröße."
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Die Recordgröße muss ein Vielfaches von %d sein."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Ungültige Elementanzahl"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr "Nur eine Option --to-command erlaubt"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "Fehlgeformtes Dichteargument: %s"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "Unbekannte Dicht: „%c“"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "Die Optionen „-[0-7][lmh]“ unterstützt *dieses* „tar“ nicht."
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[DATEI]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Die alte Option „%c“ benötigt einen Parameter."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "--occurrence ist ohne Dateiliste bedeutungslos"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr ""
 "--occurrence kann im angeforderten Operationsmodus nicht benutzt werden"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Mehrere Archivdateien verlangen die Option „-M“."
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "--listed-incremental kann nicht mit --newer benutzt werden"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+#, fuzzy
+msgid "--level is meaningless without --listed-incremental"
+msgstr "--preserve-order ist nicht kompatibel mit --listed-incremental"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: Band-Nummer ist zu lang (Maximum ist ein Byte)."
 msgstr[1] "%s: Band-Nummer ist zu lang (Maximum ist %lu Bytes)."
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Kann mehrteilige Archive nicht prüfen."
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Kann komprimierte Archive nicht prüfen"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Kann keine mehrteiligen komprimierten Archive verwenden."
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "Kann komprimierte Archive nicht aneinanderhängen"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "--pax-option kann nur mit POSIX-Archiven benutzt werden"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr "Teillänge kann nicht unter der Recordgröße liegen"
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr "--preserve-order ist nicht kompatibel mit --listed-incremental"
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Anlegen eines leeren Archivs wird feige verweigert."
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Die Optionen „-Aru“ sind nicht kompatibel mit „-f -“."
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Eine der Optionen „-Acdtrux“ ist notwendig."
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr "Beende mit Fehlerstatus aufgrund vorheriger Fehler"
@@ -2333,52 +2391,57 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: Datei ist um ein Byte geschrumpft."
 msgstr[1] "%s: Datei ist um %s Bytes geschrumpft."
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "Schlüsselwort %s ist unbekannt oder noch nicht implementiert"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Zahl außerhalb des zulässigen Bereichs: %s"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "Muster %s kann nicht benutzt werden"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "Schlüsselwort %s kann nicht überschrieben werden"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "Fehlgeformter erweiterter Kopfteil: fehlende Länge"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr "Länge des erweiterten Kopfteils ist außerhalb des erlaubten Bereichs"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "Länge %*s des erweiterten Kopfteils ist außerhalb des Bereichs"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr "Fehlgeformter erweiterter Kopfteil: fehlender Leerraum nach der Länge"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Fehlgeformter erweiterter Kopfteil: fehlendes Gleichheitszeichen"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr "Fehlgeformter erweiterter Kopfteil: fehlender Zeilenvorschub"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr "Ignoriere unbekanntes Schlüsselwort „%s“ für erweiterten Kopfteil"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
@@ -2386,29 +2449,29 @@ msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "Erweiterter Kopfteil %s=%s ist außerhalb des Bereichs %s..%s."
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Fehlgeformter erweiterter Kopfteil: ungültiges %s=%s"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Fehlgeformter erweiterter Kopfteil: überzähliges %s=%s"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 "Fehlgeformter erweiterter Kopfteil: ungültiges %s: unerwarteter Trenner %c"
 
 # Ist „odd“ hier ungerade oder merkwürdig?
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr ""
@@ -2451,7 +2514,7 @@ msgstr "Schreib-Kontrollpunkt %u"
 msgid "Read checkpoint %u"
 msgstr "Lese-Kontrollpunkt %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
@@ -2459,91 +2522,97 @@ msgstr ""
 "genfile manipuliert Datendateien für die Testsuit der GNU paxutils.\n"
 "OPTIONEN sind:\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr "Optionen beim Anlegen von Dateien:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "GRÖßE"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "Datei der gegebenen GRÖßE anlegen"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "in Datei NAME anstelle der Standardausgabe schreiben"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "Dateinamenlist aus DATEI lesen"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr "-T liest null-terminierte Namen"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 "Die Datei mit dem gegebenen MUSTER füllen. MUSTER ist „default“ oder „zeros“."
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "Größe eines Blocks für löchrige Dateien"
 
 # „map“: Karte, Abbildung?
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 "Löchrige („sparse“) Datei erzeugen. Der Rest der Kommandozeile gibt die die "
 "Dateibildungsvorschrift an."
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr "POSITION"
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr "vor dem Schreiben zur gegebenen Position springen"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr "Dateistatistikoptionen:"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 "Inhalt des „struct stat“ für jede gegebene Datei ausgeben. Standard-FORMAT "
 "ist:"
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr "Optionen für synchrone Ausführung:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr " [OPTION...]"
+
+#: tests/genfile.c:165
+#, fuzzy
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 "jeden gegebenen BEFEHL ausführen; nützlich mit --checkpoint und einem aus --"
 "cut, --append, --touch"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 "gegebene Aktion (siehe unten) beim Erreichen des Kontrollpunkts ZAHL "
 "ausführen"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr "Datum für nächste „--touch“-Operation setzen"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr "ausgeführte Kontrollpunkte und Beendigungsstatus von BEFEHL anzeigen"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
@@ -2551,7 +2620,7 @@ msgstr ""
 "Aktionen für synchrone Ausführung. Diese werden beim Erreichen des "
 "Kontrollpunkts, der mit der Option --checkpoint gesetzt wurde, ausgeführt."
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
@@ -2559,140 +2628,213 @@ msgstr ""
 "DATEI kürzen auf die Länge, die mit einer vorhergehenden Option --length "
 "(oder 0 bei Abwesenheit) gesetzt wurde"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 "GRÖßE Bytes an DATEI anfügen. GRÖßE wird mit einer vorhergehenden Option --"
 "length gesetzt."
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "Zugriffs- und Änderungszeiten der DATEI neu setzen"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "BEFEHL ausführen"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "Ungültige Größe: %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Zahl außerhalb des zulässigen Bereichs: %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr "Negative Größe: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "stat(%s) fehlgeschlagen"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr "Dateilänge %lu verlangt, tatsächlich %lu"
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr "erzeugte Datei ist nicht löchrig"
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "Fehler beim Parser der Zahl in der Nähe von „%s“"
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "Unbekanntes Datumsformat"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[ARGUMENTE...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "kann „%s“ nicht öffnen"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 msgid "cannot seek"
 msgstr "kann nicht positionieren"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "Dateiname enthält Null-Zeichen"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 "kann auf der Standardausgabe keine löchrige Datei erstellen, benutzen Sie "
 "die Option --file"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "inkorrekte Maske (nahe „%s“)"
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr "unbekannte Feld „%s“"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "kann an „%s“ keine Zeit setzen"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "kann „%s“ nicht öffnen"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "Befehl erfolgreich ausgeführt\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "Befehl schlug mit Beendigungsstatus %d fehl.\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "Befehl beendete sich bei Signal %d\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "Befehl hieltb bei Signal %d an\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "Befehl erzeugte einen Core-Dump\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "Befehl beendet\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "--stat erfordert Dateinamen"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "zu viele Argumente"
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: Unzulässige Option -- %c\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Melden Sie Fehler (auf Englisch, mit LC_ALL=C) an <%s>.\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Lese %s.\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Nicht behebbarer Fehler: Programmabbruch. "
+
+#~ msgid "suppress this warning."
+#~ msgstr "--no-wildcards, um diese Warnung zu unterdrücken."
+
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "Archiv durch bzip2 filtern"
+
+#~ msgid "filter the archive through gzip"
+#~ msgstr "Archiv durch gzip filtern"
+
+#~ msgid "filter the archive through compress"
+#~ msgstr "Archiv durch compress filtern"
+
+#~ msgid "filter the archive through lzma"
+#~ msgstr "Archiv durch lzma filtern"
+
+#~ msgid "filter the archive through lzop"
+#~ msgstr "Archiv durch lzop filtern"
+
+#~ msgid "Input string too long"
+#~ msgstr "Eingabezeichenkette zu lang"
+
+#~ msgid "Number syntax error"
+#~ msgstr "Syntaxfehler in der Zahl"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Kann Speicherplatz für Puffer nicht reservieren.\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Kann keinen Speicher für Puffer reservieren."
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "„%s --help“ zeigt weitere Informationen.\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Aufruf: %s [OPTION]\n"
+#~ "Arbeiten mit einem Bandlaufwerk, Befehle können von einem anderen Prozess "
+#~ "stammen.\n"
+#~ "\n"
+#~ "  --version    Versionsinformation ausgeben\n"
+#~ "  --help       diesen Hilfetext ausgeben\n"
+
+#~ msgid "Seek offset error"
+#~ msgstr "Fehler bei der Positionierungsangabe."
+
+#~ msgid "Premature end of file"
+#~ msgstr "Vorzeitiges Dateiende."
 
 #~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
 #~ msgstr ""
@@ -2716,9 +2858,6 @@ msgstr "zu viele Argumente"
 #~ msgid "--Mangled file names--\n"
 #~ msgstr "––Verstümmelte Dateinamen––\n"
 
-#~ msgid "Unexpected EOF in mangled names"
-#~ msgstr "Unerwartetes Dateiende in verstümmelten Namen."
-
 #~ msgid "Renamed %s to %s"
 #~ msgstr "%s in %s umbenannt"
 
@@ -2726,7 +2865,7 @@ msgstr "zu viele Argumente"
 #~ msgstr "%s: Kann nicht zu „%s“ linken."
 
 #~ msgid "Symlinked %s to %s"
-#~ msgstr "Symbolischer Verküpfung von %s auf %s."
+#~ msgstr "Symbolische Verknüpfung von %s auf %s."
 
 #~ msgid "Unknown demangling command %s"
-#~ msgstr "Unbekanntes Kommando „%s“ beim Zusammensetzen von Namen."
+#~ msgstr "Unbekanntes Befehl „%s“ beim Zusammensetzen von Namen."
index d06399d76e9f280a3d9179c97d1176336be25d4a..ece7a03f225452ab2b230f4147ddd00f47402216 100644 (file)
Binary files a/po/el.gmo and b/po/el.gmo differ
index 331e1dc0b520ee0bce92f2a5e0d6eb6531a8394e..175c171d898d2b184ccace073c4559b13a8fa4e8 100644 (file)
--- a/po/el.po
+++ b/po/el.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tar 1.13.25 \n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
 "PO-Revision-Date: 2004-03-08 14:44+0200\n"
 "Last-Translator: Μπαλάσκας Ευάγγελος (Balaskas Euaggelos) <ebalaskas@cs."
 "teiath.gr>\n"
@@ -17,289 +17,194 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: KBabel 1.0.2\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "άκυρο όρισμα %s για %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "αμφιλεγόμενο όρισμα %s για %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Έγκυρα ορίσματα είναι:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr ""
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr ""
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr ""
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr ""
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr ""
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
 msgstr ""
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr ""
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr ""
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 #, fuzzy
 msgid " [OPTION...]"
 msgstr ""
 "\n"
 "Χρήση: %s [ΕΠΙΛΟΓΉ]...\n"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, fuzzy, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Προσπαθήστε `%s --help' για περισσότερες πληροφορίες.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, fuzzy, c-format
 msgid "Report bugs to %s.\n"
 msgstr ""
 "\n"
 "Αναφορά σφαλμάτων στο <bug-tar@gnu.org>.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Άγνωστο σφάλμα συστήματος"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr ""
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr ""
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr ""
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr ""
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr ""
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr ""
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr ""
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr ""
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, fuzzy, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: η επιλογή `%s' απαιτεί όρισμα\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr ""
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr ""
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: η επιλογή`%s' είναι αμφιλεγόμενη\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: η επιλογή `--%s' δεν επιτρέπει όρισμα\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: η επιλογή `%c%s' δεν επιτρέπει όρισμα\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: η επιλογή `%s' απαιτεί όρισμα\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: μη αναγνωρίσιμη επιλογή `--%s'\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: μη αναγνωρίσιμη επιλογή `%c%s'\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: παράνομη επιλογή -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: άκυρη επιλογή -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: η επιλογή απαιτεί όρισμα -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: η επιλογή `-W %s' είναι αμφιλεγόμενη\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: η επιλογή `-W %s' δεν επιτρέπει όρισμα\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "η μνήμη εξαντλήθηκε"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, fuzzy, c-format
 msgid "unable to record current working directory"
 msgstr "Δεν είναι δυνατή η τροποποίηση του τρέχοντος καταλόγου"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, fuzzy, c-format
 msgid "failed to return to initial working directory"
 msgstr "Δεν είναι δυνατή η αποθήκευση του τρέχοντος καταλόγου"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Δεν είναι δυνατή %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Προειδοποίηση: Δεν είναι δυνατή %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Δεν είναι δυνατή η αλλαγή κατάστασης σε %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Δεν είναι δυνατή η αλλαγή ιδιοκτησίας σε uid %lu, gid %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Δεν είναι δυνατή η σύνδεση υλικού σε %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, fuzzy, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Σφάλμα ανάγνωσης στο byte %s, διαβάζοντας %lu byte"
-msgstr[1] "%s: Σφάλμα ανάγνωσης στο byte %s, διαβάζοντας %lu byte"
-
-#: lib/paxerror.c:192
-#, fuzzy, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] ""
-"%s: Προειδοποίηση: Σφάλμα ανάγνωσης στο byte %s, διαβάζοντας %lu byte"
-msgstr[1] ""
-"%s: Προειδοποίηση: Σφάλμα ανάγνωσης στο byte %s, διαβάζοντας %lu byte"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Δεν είναι δυνατή η αναζήτηση σε %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Προειδοποίηση: Δεν είναι δυνατή η αναζήτηση σε %s"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Δεν είναι δυνατή η δημιουργία συμβολικού δεσμού στο %s"
-
-#: lib/paxerror.c:349
-#, fuzzy, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Γράφτηκαν μόνο %lu από %lu byte"
-msgstr[1] "%s: Γράφτηκαν μόνο %lu από %lu byte"
-
-#: lib/paxnames.c:155
-#, fuzzy, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Απομακρύνονται τα αρχικά `%.*s' από τα ονόματα των μελών"
-
-#: lib/paxnames.c:156
-#, fuzzy, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Απομακρύνονται τα αρχικά `%.*s' από τα ονόματα των μελών"
-
-#: lib/paxnames.c:169
-#, fuzzy
-msgid "Substituting `.' for empty member name"
-msgstr "Απομακρύνονται τα αρχικά `%.*s' από τα ονόματα των μελών"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr ""
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -313,17 +218,17 @@ msgstr ""
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "`"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "'"
 
@@ -333,7 +238,7 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr ""
 
@@ -343,38 +248,28 @@ msgstr ""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr ""
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Μη διαθέσιμη υπηρεσία"
-
-#: lib/rtapelib.c:303
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdin"
-msgstr "κανονική είσοδος"
-
-#: lib/rtapelib.c:306
-#, c-format
-msgid "stdout"
-msgstr "κανονική έξοδος"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Δεν είναι δυνατή η εκτέλεση απομακρυσμένου κελύφους (φλοιού)"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -385,7 +280,7 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, fuzzy, c-format
 msgid "Written by %s.\n"
 msgstr ""
@@ -393,7 +288,7 @@ msgstr ""
 "Μεταφράστηκε από τον Μπαλάσκα Ευάγγελο."
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, fuzzy, c-format
 msgid "Written by %s and %s.\n"
 msgstr ""
@@ -401,7 +296,7 @@ msgstr ""
 "Μεταφράστηκε από τον Μπαλάσκα Ευάγγελο."
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, fuzzy, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr ""
@@ -411,7 +306,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -421,7 +316,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -431,7 +326,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -441,7 +336,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -451,7 +346,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -462,7 +357,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -473,7 +368,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -485,184 +380,335 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 "\n"
 "Αναφορά σφαλμάτων στο <bug-tar@gnu.org>.\n"
 
-#: lib/version-etc.c:182
-#, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
+"\n"
+"Αναφορά σφαλμάτων στο <bug-tar@gnu.org>.\n"
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:253
+#, c-format
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Δεν είναι δυνατή η δέσμευση προσωρινού αποθηκευτικού χώρου \n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Δεν είναι δυνατή %s"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Δεν είναι δυνατή η δέσμευση προσωρινού αποθηκευτικού χώρου"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Προειδοποίηση: Δεν είναι δυνατή %s"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:93
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Προσπαθήστε `%s --help' για περισσότερες πληροφορίες.\n"
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Δεν είναι δυνατή η αλλαγή κατάστασης σε %s"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Δεν είναι δυνατή η αλλαγή ιδιοκτησίας σε uid %lu, gid %lu"
+
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Δεν είναι δυνατή η σύνδεση υλικού σε %s"
+
+#: lib/paxerror.c:179 lib/paxerror.c:211
 #, fuzzy, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Σφάλμα ανάγνωσης στο byte %s, διαβάζοντας %lu byte"
+msgstr[1] "%s: Σφάλμα ανάγνωσης στο byte %s, διαβάζοντας %lu byte"
+
+#: lib/paxerror.c:192
+#, fuzzy, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] ""
+"%s: Προειδοποίηση: Σφάλμα ανάγνωσης στο byte %s, διαβάζοντας %lu byte"
+msgstr[1] ""
+"%s: Προειδοποίηση: Σφάλμα ανάγνωσης στο byte %s, διαβάζοντας %lu byte"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Δεν είναι δυνατή η αναζήτηση σε %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Προειδοποίηση: Δεν είναι δυνατή η αναζήτηση σε %s"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Δεν είναι δυνατή η δημιουργία συμβολικού δεσμού στο %s"
+
+#: lib/paxerror.c:349
+#, fuzzy, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Γράφτηκαν μόνο %lu από %lu byte"
+msgstr[1] "%s: Γράφτηκαν μόνο %lu από %lu byte"
+
+#: lib/paxnames.c:155
+#, fuzzy, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Απομακρύνονται τα αρχικά `%.*s' από τα ονόματα των μελών"
+
+#: lib/paxnames.c:156
+#, fuzzy, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Απομακρύνονται τα αρχικά `%.*s' από τα ονόματα των μελών"
+
+#: lib/paxnames.c:169
+#, fuzzy
+msgid "Substituting `.' for empty member name"
+msgstr "Απομακρύνονται τα αρχικά `%.*s' από τα ονόματα των μελών"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
 msgstr ""
-"Χρήση: %s [ΕΠΙΛΟΓΉ]\n"
-"Διαχείριση συσκευής αποθήκευσης ταινίας, αποδοχή εντολών από απομακρυσμένη "
-"διεργασία.\n"
-"\n"
-"  --version  Εμφάνιση πληροφοριών έκδοσης.\n"
-"  --help  Εμφάνιση αυτής της βοήθειας.\n"
 
-#: rmt/rmt.c:397
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Μη διαθέσιμη υπηρεσία"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "κανονική είσοδος"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "κανονική έξοδος"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
+msgstr ""
+
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Δεν είναι δυνατή η εκτέλεση απομακρυσμένου κελύφους (φλοιού)"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Η κατεύθυνση αναζήτησης είναι εκτός εύρους"
+
+#: rmt/rmt.c:419
 #, fuzzy
-msgid "Seek offset error"
-msgstr "Η μετατόπιση αναζήτησης είναι εκτός εύρους"
+msgid "Invalid seek direction"
+msgstr "Άκυρη κατάσταση δόθηκε σε επιλογή"
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Άκυρη ένδειξη χρόνου"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Η μετατόπιση αναζήτησης είναι εκτός εύρους"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Η κατεύθυνση αναζήτησης είναι εκτός εύρους"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Άκυρο μέγεθος ταινίας"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Η μετατόπιση αναζήτησης είναι εκτός εύρους"
+
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: Πρόωρο eof (τέλος αρχείου)\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Πρόωρο τέλος αρχείου"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "%s: άκυρη επιλογή -- %c\n"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Μη αναμενόμενο EOF (Τέλος Αρχείου) στην αρχειοθήκη"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr ""
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr ""
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "%s: Δεν είναι δυνατή η αναζήτηση σε %s"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr ""
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Εντολή απορριμμάτων"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Αυτό δεν φαίνεται ως αρχειοθήκη tar"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 #, fuzzy
 msgid "Total bytes written"
 msgstr "Συνολικά byte που γράφτηκαν: %s (%sB, %sB/s)\n"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr ""
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, fuzzy, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Συνολικά byte που γράφτηκαν: %s (%sB, %sB/s)\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(σωλήνωση)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Άκυρη τιμή για record_size"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Δεν δόθηκε όνομα αρχειοθήκης"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr ""
 "Δεν είναι δυνατή η επαλήθευση των κανονικών εισόδων/εξόδων της αρχειοθήκης"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr ""
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Δεν είναι δυνατή η ανανέωση των συμπιεσμένων αρχειοθηκών"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Στην αρχή της ταινίας, τερματισμός τώρα"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Πάρα πολλά σφάλματα, τερματισμός"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, fuzzy, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Μέγεθος εγγραφής = %lu block"
 msgstr[1] "Μέγεθος εγγραφής = %lu block"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, fuzzy, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Μη ευθυγραμμισμένο μπλοκ (%lu byte) στην αρχειοθήκη"
 msgstr[1] "Μη ευθυγραμμισμένο μπλοκ (%lu byte) στην αρχειοθήκη"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr ""
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr ""
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: περιέχει άκυρο αριθμό τόμου"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Υπερχήλιση αριθμού τόμου"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Προετοίμασε τον τόμο #%d για %s και πάτα το πλήκτρο επιστροφής γραμμής"
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "EOF (Τέλος Αρχείου) ενώ η απάντηση του χρήστη αναμενότανε"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "ΠΡΟΕΙΔΟΠΟΊΗΣΗ: Η αρχειοθήκη είναι ημιτελής"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, fuzzy, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -674,124 +720,124 @@ msgstr ""
 " !          Παραγωγή νέου υπό-φλοιού\n"
 " ?          Εκτύπωση αυτής της λίστας\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr ""
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr ""
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Κανένας νέος τόμος; έξοδος\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr ""
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr ""
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, fuzzy, c-format
 msgid "%s command failed"
 msgstr "`%s' η εντολή απέτυχε"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, fuzzy, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s δεν συνεχίζεται σε αυτόν τον τόμο"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s δεν συνεχίζεται σε αυτόν τον τόμο"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s είναι το εσφαλμένο μέγεθος (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, fuzzy, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Αυτός ο τόμος είναι εκτός συνέχειας"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Η αρχειοθήκη δεν έχει ετικέτα για ταίριασμα %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Ο τόμος %s δεν ταιριάζει %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
 msgstr ""
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
 msgstr ""
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, fuzzy, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Δυνατή μόνο η ανάγνωση %lu από %lu byte"
 msgstr[1] "Δυνατή μόνο η ανάγνωση %lu από %lu byte"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Τα περιεχόμενα διαφέρουν"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Μη αναμενόμενο EOF (Τέλος Αρχείου) στην αρχειοθήκη"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Οι τύποι αρχείων διαφέρουν"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Οι καταστάσεις διαφέρουν"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Ταυτότητες χρήστη διαφέρουν"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Ταυτότητες ομάδας διαφέρουν"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Ώρες τροποποίησης διαφέρουν"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Τα μεγέθη διαφέρουν"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Δεν είναι συνδεδεμένο με %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Οι σύνδεσμοι διαφέρουν"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Οι αριθμοί των συσκευών διαφέρουν"
 
@@ -813,34 +859,34 @@ msgstr ""
 msgid "Verification may fail to locate original files."
 msgstr ""
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, fuzzy, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "Η ΕΠΑΛΎΘΕΥΣΗ ΑΠΈΤΥΧΕ: ανιχνεύτηκαν %d άκυρη(ες) επικεφαλίδα(δες)"
 msgstr[1] "Η ΕΠΑΛΎΘΕΥΣΗ ΑΠΈΤΥΧΕ: ανιχνεύτηκαν %d άκυρη(ες) επικεφαλίδα(δες)"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr ""
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr ""
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "η τιμή %s είναι εκτός του %s εύρος %s..%s; αντικαταστήθηκε από %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "η τιμή %s είναι εκτός του %s εύρους %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Παράχθηκαν αρνητικές οκταδικές επικεφαλίδες"
 
@@ -859,292 +905,278 @@ msgstr "%s: δεν μπορεί να τροποποιηθεί το αρχείο;
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: δεν μπορεί να τροποποιηθεί το αρχείο; δεν αποθηκεύτηκε"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, fuzzy, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: Το αρχείο συρρικνώθηκε σε %s bytes; συμπλήρωση με μηδενικά"
 msgstr[1] "%s: Το αρχείο συρρικνώθηκε σε %s bytes; συμπλήρωση με μηδενικά"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: το αρχείο είναι σε διαφορετικό σύστημα αρχείων; δεν αποθηκεύτηκε"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr ""
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Άγνωστος τύπος αρχείου; το αρχείο αγνοήθηκε"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, fuzzy, c-format
-msgid "Missing links to %s.\n"
+msgid "Missing links to %s."
 msgstr " σύνδεσμος σε %s\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: δεν μπορεί να τροποποιηθεί το αρχείο; δεν αποθηκεύτηκε"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: το αρχείο είναι η αρχειοθήκη; δεν αποθηκεύτηκε"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Το αρχείο απομακρύνθηκε πριν το διαβάσουμε"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr ""
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: αρχείο τροποποιήθηκε κατά την ανάγνωση"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: η υποδοχή αγνοήθηκε"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: η πόρτα αγνοήθηκε"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Παραλείποντας στην επόμενη επικεφαλίδα"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Διαγραφή μη-επικεφαλίδων από την αρχειοθήκη"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr ""
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, fuzzy, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: η ένδειξη χρόνου %s είναι %lu s στο μέλλον"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Μη αναμενόμενη ανακολουθία κατά την δημιουργία του καταλόγου"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Ο κατάλογος μετονομάστηκε πριν η κατάστασή του γίνει μη εξαγώγιμη"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Εξαγωγή συνεχόμενων αρχείων ως κανονικών αρχείων"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Προσπάθεια εξαγωγής των συμβολικών συνδέσμων ως σθεναρών συνδέσμων"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Ανάγνωση %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Δεν είναι δυνατή η εξαγωγή -- το αρχείο συνεχίζεται σε άλλο τόμο"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 #, fuzzy
 msgid "Unexpected long name header"
 msgstr "Μη αναμενόμενο EOF (Τέλος Αρχείου) στα κατακερματισμένα ονόματα"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, fuzzy, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Άγνωστος τύπος αρχείου '%c', εξαγωγή ως κανονικό αρχείο"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr ""
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Δεν είναι δυνατή η αποθήκευση αυτού του αρχείου"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, fuzzy, c-format
 msgid "Cannot rename %s to %s"
-msgstr "%s: Δεν είναι δυνατή η μετονομασία σε %s"
-
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Το σφάλμα δεν είναι επανορθώσιμο: τερματισμός τώρα"
+msgstr "%s: Δεν είναι δυνατή η μετονομασία σε %s"
 
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, fuzzy, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Ο κατάλογος έχει μετονομαστεί"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Ο κατάλογος έχει μετονομαστεί"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Ο κατάλογος είναι καινούριος"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Άκυρη ένδειξη χρόνου"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 #, fuzzy
 msgid "Invalid modification time (seconds)"
 msgstr "Άκυρη κατάσταση δόθηκε σε επιλογή"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr ""
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Άκυρος αριθμός συσκευής"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Άκυρος αριθμός i-κόμβου"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr ""
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 #, fuzzy
 msgid "Unexpected EOF in snapshot file"
 msgstr "Μη αναμενόμενο EOF (Τέλος Αρχείου) στην αρχειοθήκη"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr ""
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr ""
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr ""
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr ""
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr ""
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr ""
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr ""
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr ""
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr ""
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, fuzzy, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Δεν είναι δυνατή η δέσμευση μνήμης για τον συντελεστή ομαδοποίησης %d"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr ""
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, fuzzy, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: το αρχείο είναι σε διαφορετικό σύστημα αρχείων; δεν αποθηκεύτηκε"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Διαγραφή %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Δεν είναι δυνατή η απομάκρυνση"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Παράλειψη"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "μπλοκ %s: ** Μπλοκ με χαρακτήρες NUL **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "μπλοκ %s: ** Τέλος Αρχείου **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "μπλοκ %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Κενά στην επικεφαλίδα ενώ αναμενόταν αριθμητική τιμή %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1152,149 +1184,164 @@ msgstr ""
 "συμπληρώματα"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Αρχειοθήκη οκταδικής τιμής %.*s είναι εκτός του %s εύρους"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Η αρχειοθήκη περιέχει απαρχαιωμένες επικεφαλίδες κωδικοποίησης base64"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr ""
 "Η αρχειοθήκη είναι υπογεγραμμένη με αλφαριθμητικά base-64 %s είναι εκτός του "
 "%s εύρους"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Η αρχειοθήκη με base-256 τιμές είναι εκτός του %s εύρους"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Η αρχειοθήκη περιέχει %.*s όπου αριθμητικές %s τιμές αναμένονται"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Η τιμή της αρχειοθήκης %s είναι εκτός του %s εύρους %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " σύνδεσμος σε %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " άγνωστος τύπος αρχείου %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr ""
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr ""
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Επικεφαλίδα Τόμου--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Συνέχιση στο byte %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Δημιουργία καταλόγου:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Μετονομασία %s σε %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Δεν είναι δυνατή η μετονομασία σε %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Μετονομασία %s πίσω στο %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Δεν είναι δυνατή η αποθήκευση του τρέχοντος καταλόγου"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Δεν είναι δυνατή η τροποποίηση του τρέχοντος καταλόγου"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Το αρχείο απομακρύνθηκε πριν το διαβάσουμε"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Το αρχείο απομακρύνθηκε πριν το διαβάσουμε"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "θυγατρική διεργασία"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "κανάλι μεταξύ διεργασιών"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
-msgstr ""
-
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:601
+msgid "Pattern matching characters used in file names"
 msgstr ""
 
-#: src/names.c:597
-msgid "suppress this warning."
+#: src/names.c:603
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Δεν βρέθηκε στην αρχειοθήκη"
 
-#: src/names.c:615
+#: src/names.c:622
 #, fuzzy, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Δεν βρέθηκε στην αρχειοθήκη"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Οι επιλογές `-%s' και `-%s' απαιτούν κανονική είσοδο"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, fuzzy, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Άκυρη ομάδα"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "Τα χαρακτηριστικά GNU απαιτούν μη συμβατή διαμόρφωση αρχειοθήκης"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
 msgstr ""
 
-#: src/tar.c:336
+#: src/tar.c:347
 #, fuzzy
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
@@ -1315,7 +1362,7 @@ msgstr ""
 "archive.tar με λεπτομέρειες.\n"
 "  %s -xf archive.tar          # Εξάγει όλα τα αρχεία από το archive.tar.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 #, fuzzy
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
@@ -1338,87 +1385,80 @@ msgstr ""
 "διαφορετικά\n"
 "  never, simple   πάντα κάνε απλά αντίγραφα\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr ""
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr ""
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr ""
 
-#: src/tar.c:378
+#: src/tar.c:394
 #, fuzzy
 msgid "create a new archive"
 msgstr "Μη αναμενόμενο EOF (Τέλος Αρχείου) στην αρχειοθήκη"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr ""
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr ""
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr ""
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr ""
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr ""
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr ""
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr ""
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr ""
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr ""
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr ""
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:408
-msgid "do not exit with nonzero on unreadable files"
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
 msgstr ""
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
+#: src/tar.c:426
+msgid "do not exit with nonzero on unreadable files"
 msgstr ""
 
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1426,577 +1466,565 @@ msgid ""
 "command line or via the -T option; NUMBER defaults to 1"
 msgstr ""
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr ""
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr ""
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr ""
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr ""
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr ""
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr ""
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr ""
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr ""
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr ""
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr ""
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr ""
 
-#: src/tar.c:455
+#: src/tar.c:475
 #, fuzzy
 msgid "extract files to standard output"
 msgstr "Σφάλμα κατά την εγγραφή στην κανονική έξοδο"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr ""
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr ""
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr ""
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr ""
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr ""
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr ""
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr ""
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr ""
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr ""
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr ""
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
 "place (METHOD='system')"
 msgstr ""
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr ""
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr ""
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
 msgstr ""
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr ""
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
 msgstr ""
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr ""
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr ""
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr ""
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr ""
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr ""
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr ""
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr ""
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr ""
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr ""
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr ""
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr ""
 
-#: src/tar.c:536
+#: src/tar.c:556
 #, fuzzy
 msgid "create/list/extract multi-volume archive"
 msgstr "Δεν είναι δυνατή η επαλήθευση πολλαπλών αρχειοθηκών"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr ""
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr ""
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr ""
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr ""
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr ""
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr ""
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr ""
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr ""
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr ""
 
-#: src/tar.c:562
+#: src/tar.c:582
 #, fuzzy
 msgid "Archive format selection:"
 msgstr "Συγκρουόμενες επιλογές διαμόρφωσης αρχειοθήκης"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr ""
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr ""
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr ""
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr ""
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr ""
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr ""
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr ""
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr ""
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr ""
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr ""
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr ""
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr ""
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr ""
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr ""
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
 msgstr ""
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Συγκρουόμενες επιλογές συμπίεσης"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:597
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr ""
-
-#: src/tar.c:602
-#, fuzzy
-msgid "filter the archive through gzip"
-msgstr "%s: το αρχείο είναι η αρχειοθήκη; δεν αποθηκεύτηκε"
-
-#: src/tar.c:606
-#, fuzzy
-msgid "filter the archive through compress"
-msgstr "%s: το αρχείο είναι η αρχειοθήκη; δεν αποθηκεύτηκε"
-
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "%s: το αρχείο είναι η αρχειοθήκη; δεν αποθηκεύτηκε"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "%s: το αρχείο είναι η αρχειοθήκη; δεν αποθηκεύτηκε"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "%s: το αρχείο είναι η αρχειοθήκη; δεν αποθηκεύτηκε"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr ""
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr ""
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr ""
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr ""
 
-#: src/tar.c:625
+#: src/tar.c:641
 #, fuzzy
 msgid "change to directory DIR"
 msgstr "Δεν είναι δυνατή η τροποποίηση του τρέχοντος καταλόγου"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr ""
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr ""
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr ""
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr ""
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr ""
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr ""
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr ""
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr ""
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr ""
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr ""
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr ""
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr ""
 
-#: src/tar.c:664
+#: src/tar.c:682
 #, fuzzy
 msgid "don't strip leading `/'s from file names"
 msgstr "Απομακρύνονται τα αρχικά `%.*s' από τα ονόματα των μελών"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr ""
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr ""
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr ""
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr ""
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr ""
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr ""
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr ""
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
 msgstr ""
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr ""
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr ""
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr ""
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr ""
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr ""
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr ""
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr ""
 
-#: src/tar.c:710
+#: src/tar.c:728
 #, fuzzy
 msgid "wildcards do not match `/'"
 msgstr "Ο τόμος %s δεν ταιριάζει %s"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr ""
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr ""
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr ""
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr ""
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr ""
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2004,275 +2032,291 @@ msgid ""
 "accepted"
 msgstr ""
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr ""
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr ""
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr ""
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr ""
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr ""
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr ""
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr ""
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr ""
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr ""
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr ""
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr ""
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr ""
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr ""
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr ""
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Ίσως δεν καθορίσατε παραπάνω από μία επιλογή `-Acdtrux'"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Συγκρουόμενες επιλογές συμπίεσης"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, fuzzy, c-format
 msgid "Unknown signal name: %s"
 msgstr " άγνωστος τύπος αρχείου %s\n"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 #, fuzzy
 msgid "Date sample file not found"
 msgstr "Το αρχείο ημερομηνίας δεν βρέθηκε"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Αντικατάσταση %s για άγνωστη διαμόρφωση ημερομηνίας %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr ""
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, fuzzy, c-format
 msgid "%s: file list already read"
 msgstr "%s: το αρχείο είναι η αρχειοθήκη; δεν αποθηκεύτηκε"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr ""
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "%s: το αρχείο είναι η αρχειοθήκη; δεν αποθηκεύτηκε"
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr ""
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
 msgstr ""
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Άκυρος συντελεστής ομαδοποίησης"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Άκυρο μέγεθος ταινίας"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr ""
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Παραπάνω από ένα όριο ημερομηνίας"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr ""
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr ""
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr ""
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: Άκυρη ομάδα"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Άκυρη κατάσταση δόθηκε σε επιλογή"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 #, fuzzy
 msgid "Invalid number"
 msgstr "Άκυρος αριθμός i-κόμβου"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Άκυρος ιδιοκτήτης"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Άκυρο μέγεθος εγγραφής"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Το μέγεθος της εγγραφής πρέπει να είναι πολλαπλάσιο του %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 #, fuzzy
 msgid "Invalid number of elements"
 msgstr "Άκυρο μέγεθος ταινίας"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr ""
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr ""
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr ""
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr ""
 "Οι επιλογές `-[0-7][lmh]' δεν υποστηρίζονται από *αυτήν* την εντολή tar"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr ""
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Παλιά επιλογή `%c' απαιτεί όρισμα."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr ""
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr ""
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 #, fuzzy
 msgid "Multiple archive files require `-M' option"
 msgstr "Πολλαπλά αρχεία αρχειοθηκών απαιτούν την επιλογή `-M'"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Δεν είναι δυνατός ο συνδυασμός --listed-incremental με --newer"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr ""
+
+#: src/tar.c:2404
 #, fuzzy, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: Η ετικέτα του τόμου είναι πολύ μεγάλη (το όριο είναι %lu byte)"
 msgstr[1] "%s: Η ετικέτα του τόμου είναι πολύ μεγάλη (το όριο είναι %lu byte)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Δεν είναι δυνατή η επαλήθευση πολλαπλών αρχειοθηκών"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Δεν είναι δυνατή η επαλήθευση των συμπιεσμένων αρχειοθηκών"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Δεν είναι δυνατή η χρήση πολλαπλών συμπιεσμένων αρχειοθηκών"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 #, fuzzy
 msgid "Cannot concatenate compressed archives"
 msgstr "Δεν είναι δυνατή η ανανέωση των συμπιεσμένων αρχειοθηκών"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr ""
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Αρνούμαι δειλά στη δημιουργία μίας κενής αρχειοθήκης"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Οι επιλογές `-Aru' δεν είναι συμβατές με  `-f -'"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Πρέπει να καθορίσεις μία από τις επιλογές `-Acdtrux'"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2284,81 +2328,86 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: Το αρχείο συρρικνώθηκε κάτα %s byte"
 msgstr[1] "%s: Το αρχείο συρρικνώθηκε κάτα %s byte"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr ""
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Η ένδειξη χρόνου είναι εκτός εύρους"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr ""
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr ""
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr ""
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr ""
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, fuzzy, c-format
 msgid "Extended header length %*s is out of range"
 msgstr ""
 "Η αρχειοθήκη είναι υπογεγραμμένη με αλφαριθμητικά base-64 %s είναι εκτός του "
 "%s εύρους"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr ""
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr ""
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr ""
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr ""
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, fuzzy, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "Η τιμή της αρχειοθήκης %s είναι εκτός του %s εύρους %s..%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr ""
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr ""
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr ""
@@ -2399,237 +2448,303 @@ msgstr "Εγγραφή σημείου ελέγχου %d"
 msgid "Read checkpoint %u"
 msgstr "Ανάγνωση σημείου ελέγχου %d"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 #, fuzzy
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
 msgstr "Παράγει αρχεία δεδομένων για δοκιμαστική πλατφόρμα GNU tar.\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 #, fuzzy
 msgid "File creation options:"
 msgstr "Συγκρουόμενες επιλογές συμπίεσης"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr ""
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr ""
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 #, fuzzy
 msgid "Write to file NAME, instead of standard output"
 msgstr "Σφάλμα κατά την εγγραφή στην κανονική έξοδο"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr ""
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr ""
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr ""
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr ""
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr ""
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr ""
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr ""
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr ""
+"\n"
+"Χρήση: %s [ΕΠΙΛΟΓΉ]...\n"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr ""
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr ""
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr ""
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, fuzzy, c-format
 msgid "Invalid size: %s"
 msgstr "Άκυρη ένδειξη χρόνου"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, fuzzy, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Ο αριθμός του i-κόμβου είναι εκτός εύρους"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr ""
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr ""
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr ""
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, fuzzy, c-format
 msgid "Unknown date format"
 msgstr "Άγνωστο σφάλμα συστήματος"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr ""
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr ""
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 #, fuzzy
 msgid "cannot seek"
 msgstr "Δεν είναι δυνατό το κλείσιμο"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr ""
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr ""
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, fuzzy, c-format
 msgid "Unknown field `%s'"
 msgstr " άγνωστος τύπος αρχείου %s\n"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, fuzzy, c-format
 msgid "cannot set time on `%s'"
 msgstr "%s: Δεν είναι δυνατή η αναζήτηση σε %s"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "%s: Δεν είναι δυνατή η αναζήτηση σε %s"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr ""
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, fuzzy, c-format
 msgid "Command failed with status %d\n"
 msgstr "Η θυγατρική διεργασία τερματίστηκε με το σήμα %d"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr ""
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr ""
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, fuzzy, c-format
 msgid "--stat requires file names"
 msgstr "--Κατακερματισμένα ονόματα αρχείων--\n"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr ""
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: παράνομη επιλογή -- %c\n"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
 #~ msgstr ""
-#~ "Προειδοποίηση: η -I επιλογή δεν υποστηρίζεται; ίσως εννοούσατε την -j ή "
-#~ "την -T;"
+#~ "\n"
+#~ "Αναφορά σφαλμάτων στο <bug-tar@gnu.org>.\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Ανάγνωση %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Το σφάλμα δεν είναι επανορθώσιμο: τερματισμός τώρα"
+
+#, fuzzy
+#~ msgid "filter the archive through compress"
+#~ msgstr "%s: το αρχείο είναι η αρχειοθήκη; δεν αποθηκεύτηκε"
+
+#, fuzzy
+#~ msgid "filter the archive through lzma"
+#~ msgstr "%s: το αρχείο είναι η αρχειοθήκη; δεν αποθηκεύτηκε"
+
+#, fuzzy
+#~ msgid "filter the archive through lzop"
+#~ msgstr "%s: το αρχείο είναι η αρχειοθήκη; δεν αποθηκεύτηκε"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Δεν είναι δυνατή η δέσμευση προσωρινού αποθηκευτικού χώρου \n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Δεν είναι δυνατή η δέσμευση προσωρινού αποθηκευτικού χώρου"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Προσπαθήστε `%s --help' για περισσότερες πληροφορίες.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Χρήση: %s [ΕΠΙΛΟΓΉ]\n"
+#~ "Διαχείριση συσκευής αποθήκευσης ταινίας, αποδοχή εντολών από "
+#~ "απομακρυσμένη διεργασία.\n"
+#~ "\n"
+#~ "  --version  Εμφάνιση πληροφοριών έκδοσης.\n"
+#~ "  --help  Εμφάνιση αυτής της βοήθειας.\n"
+
+#, fuzzy
+#~ msgid "Seek offset error"
+#~ msgstr "Η μετατόπιση αναζήτησης είναι εκτός εύρους"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Πρόωρο τέλος αρχείου"
 
 #~ msgid "block size"
 #~ msgstr "μέγεθος μπλοκ"
@@ -2661,9 +2776,6 @@ msgstr ""
 #~ msgid "Visible long name error"
 #~ msgstr "Ορατό σφάλμα μεγάλων ονομάτων"
 
-#~ msgid "Time stamp out of range"
-#~ msgstr "Η ένδειξη χρόνου είναι εκτός εύρους"
-
 #~ msgid "Device number out of range"
 #~ msgstr "Ο αριθμός της συσκευής είναι εκτός εύρους"
 
@@ -3084,6 +3196,11 @@ msgstr ""
 #~ msgstr ""
 #~ "Εκτός χρήσης όνομα επιλογής αντικαταστάθηκε από το --read-full-records"
 
+#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgstr ""
+#~ "Προειδοποίηση: η -I επιλογή δεν υποστηρίζεται; ίσως εννοούσατε την -j ή "
+#~ "την -T;"
+
 #~ msgid "Obsolete option name replaced by --touch"
 #~ msgstr "Εκτός χρήσης όνομα επιλογής αντικαταστάθηκε από το --touch"
 
index 165134ff9c4adc39470d0750385ad50c9e49229c..6fe9ec2a91c23d27505070dc4a0b0d1cdddab40e 100644 (file)
Binary files a/po/es.gmo and b/po/es.gmo differ
index e057a553a9fba76247d5bab67ac01eede73d8924..202a262ccfbb033f279f18530899c5ab5c84957c 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU tar 1.15.1\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
 "PO-Revision-Date: 2004-12-27 20:45+0100\n"
 "Last-Translator: Santiago Vila Doncel <sanvila@unex.es>\n"
 "Language-Team: Spanish <es@li.org>\n"
@@ -17,47 +17,47 @@ msgstr ""
 "Content-Transfer-Encoding: 8-bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "argumento %s inválido para %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "argumento %s ambiguo para %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Los argumentos válidos son:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr ""
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: El parámetro ARGP_HELP_FMT necesita un valor"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, fuzzy, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: El parámetro ARGP_HELP_FMT necesita un valor"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: Parámetro ARGP_HELP_FMT desconocido"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Incongruencia en ARGP_HELP_FMT: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -66,19 +66,19 @@ msgstr ""
 "también\n"
 "obligatorios u opcionales para las opciones cortas correspondientes."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Modo de empleo:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr " o bien: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [OPCIÓN...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Pruebe `%s --help' o `%s --usage' para más información.\n"
@@ -99,224 +99,129 @@ msgstr "Pruebe `%s --help' o `%s --usage' para m
 # ¿No tendría sentido catalogarlos entonces?
 #
 # Véase "A Bug's life".
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "Comunicar bichos a %s.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Error del sistema desconocido"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 #, fuzzy
 msgid "give this help list"
 msgstr "Da esta lista de ayuda"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 #, fuzzy
 msgid "give a short usage message"
 msgstr "Da un mensaje de uso corto"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "NOMBRE"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr ""
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr ""
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr ""
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 #, fuzzy
 msgid "print program version"
 msgstr "Muestra la versión del programa"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr ""
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, fuzzy, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: la opción `%s' requiere un argumento\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr ""
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr ""
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: la opción `%s' es ambigua\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: la opción `--%s' no admite ningún argumento\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: la opción `%c%s' no admite ningún argumento\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: la opción `%s' requiere un argumento\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: opción no reconocida `--%s'\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: opción no reconocida `%c%s'\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: opción ilegal -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: opción inválida -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: la opción requiere un argumento -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: la opción `-W %s' es ambigua\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: la opción `-W %s' no admite ningún argumento\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "memoria agotada"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, fuzzy, c-format
 msgid "unable to record current working directory"
 msgstr "No se pudo obtener el directorio actual"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, fuzzy, c-format
 msgid "failed to return to initial working directory"
 msgstr "No se puede determinar el directorio de trabajo inicial"
 
-# FIXME: Intraducible.
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: No se puede %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Atención: No se puede %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: No se puede cambiar el modo a %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: No se puede cambiar el propietario a uid %lu, gid %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: No se puede crear un enlace duro a %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, fuzzy, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Error de lectura en el byte %s, leyendo %lu byte"
-msgstr[1] "%s: Error de lectura en el byte %s, leyendo %lu bytes"
-
-#: lib/paxerror.c:192
-#, fuzzy, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Atención: Error de lectura en el byte %s, leyendo %lu byte"
-msgstr[1] "%s: Atención: Error de lectura en el byte %s, leyendo %lu bytes"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: No se puede desplazar a %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Atención: No se puede desplazar a %s"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: No se puede crear el enlace simbólico a %s"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Sólo se escribieron %lu de %lu byte"
-msgstr[1] "%s: Sólo se escribieron %lu de %lu bytes"
-
-# FIXME. This might not always work. Is `%.*s' male or female? sv
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Eliminando la `%s' inicial de los nombres"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Eliminando la `%s' inicial de los objetivos de los enlaces"
-
-# FIXME. This might not always work. Is `%.*s' male or female? sv
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Se sustituye `.' por el nombre vacío"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Se sustituye `.' por un objetivo vacío de enlace duro"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -330,17 +235,17 @@ msgstr "Se sustituye `.' por un objetivo vac
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "`"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "'"
 
@@ -350,7 +255,7 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr ""
 
@@ -360,38 +265,28 @@ msgstr ""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr ""
 
-#: lib/rtapelib.c:299
+#: gnu/version-etc.c:76
 #, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Servicio no disponible"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "entrada estándar (stdin)"
-
-#: lib/rtapelib.c:306
-#, c-format
-msgid "stdout"
-msgstr "salida estándar (stdout)"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "No se puede ejecutar un shell remoto"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -402,19 +297,19 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, fuzzy, c-format
 msgid "Written by %s.\n"
 msgstr "Escrito por François Pinard."
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, fuzzy, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Escrito por François Pinard."
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, fuzzy, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Escrito por François Pinard."
@@ -422,7 +317,7 @@ msgstr "Escrito por Fran
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -432,7 +327,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -442,7 +337,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -452,7 +347,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -462,7 +357,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -473,7 +368,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -484,7 +379,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -512,88 +407,257 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
-#, c-format
+#: gnu/version-etc.c:247
+#, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
+msgstr "Comunicar bichos a %s.\n"
+
+# Por favor, no me digáis cómo se traduce bug.
+# Gerardo lo ha visto traducido en un libro como "pulgas", y yo
+# lo he visto como "chinche" en la "Investigación y Ciencia".
+# Está claro que así no vamos a ninguna parte.
+# Yo diría simplemente `fallos [ocultos]'. Es lo que significa, en realidad,
+# en el contexto informático, razones históricas aparte de bichos anidando
+# al calorcito de los tubos de vacío de los primeros computadores. gerardo
+# De "ocultos" nada... Este vamos a dejarlo, ¿vale? sv
+# Tú mandas, pero ¿cómo que de ocultos nada? Si no fueran ocultos, el progra-
+# ma no vería la luz aún, ¿no? Pero observa que he puesto el `ocultos' entre
+# corchetes. Yo pondría "bug -> fallo" simplemente. Comunicar fallos a... gerardo
+# ¿Que no vería la luz si no fueran ocultos? Ja, ja, ja, ja...
+# Mira por ejemplo en http://nl.debian.org/Bugs.
+# ¿No tendría sentido catalogarlos entonces?
+#
+# Véase "A Bug's life".
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
 "\n"
 "Comunicar bichos a <%s>.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr ""
+# FIXME: Intraducible.
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: No se puede %s"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: No se puede asignar espacio para el búfer\n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Atención: No se puede %s"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "No se puede asignar espacio para el búfer"
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: No se puede cambiar el modo a %s"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:101
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Pruebe `%s --help' para más información.\n"
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: No se puede cambiar el propietario a uid %lu, gid %lu"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: No se puede crear un enlace duro a %s"
+
+#: lib/paxerror.c:179 lib/paxerror.c:211
 #, fuzzy, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
-msgstr ""
-"Modo de empleo: %s [OPCIÓN]\n"
-"Manipula una unidad de cinta, aceptando órdenes de un proceso remoto.\n"
-"\n"
-"  --version  Muestra la versión.\n"
-"  --help     Muestra esta ayuda.\n"
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Error de lectura en el byte %s, leyendo %lu byte"
+msgstr[1] "%s: Error de lectura en el byte %s, leyendo %lu bytes"
+
+#: lib/paxerror.c:192
+#, fuzzy, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Atención: Error de lectura en el byte %s, leyendo %lu byte"
+msgstr[1] "%s: Atención: Error de lectura en el byte %s, leyendo %lu bytes"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: No se puede desplazar a %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Atención: No se puede desplazar a %s"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: No se puede crear el enlace simbólico a %s"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Sólo se escribieron %lu de %lu byte"
+msgstr[1] "%s: Sólo se escribieron %lu de %lu bytes"
+
+# FIXME. This might not always work. Is `%.*s' male or female? sv
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Eliminando la `%s' inicial de los nombres"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Eliminando la `%s' inicial de los objetivos de los enlaces"
+
+# FIXME. This might not always work. Is `%.*s' male or female? sv
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Se sustituye `.' por el nombre vacío"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Se sustituye `.' por un objetivo vacío de enlace duro"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Servicio no disponible"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "entrada estándar (stdin)"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "salida estándar (stdout)"
+
+# Lo mismo que con stat() em+
+# seek() es otra función. seek = "hacer seek()" ¡Estos
+# angloparlantes!
+#: lib/rtapelib.c:429
+#, fuzzy, c-format
+msgid "Cannot connect to %s: resolve failed"
+msgstr "No se puede acceder a la posición %s en el fichero %s"
 
-#: rmt/rmt.c:397
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "No se puede ejecutar un shell remoto"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Dirección de desplazamiento fuera de rango"
+
+#: rmt/rmt.c:419
 #, fuzzy
-msgid "Seek offset error"
-msgstr "Desplazamiento fuera de rango"
+msgid "Invalid seek direction"
+msgstr "Se ha especificado un modo no válido en la opción"
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Marca de tiempo inválida"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Desplazamiento fuera de rango"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Dirección de desplazamiento fuera de rango"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Longitud de cinta inválida"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Desplazamiento fuera de rango"
 
 # FIXME. Este es el único eof en minúsculas.
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: Fin de fichero prematuro\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Fin de fichero prematuro"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "Modo principal de operación:"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Fin de fichero inesperado en el archivo"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "NÚMERO"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "FICHERO"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "No se puede abrir %s"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr ""
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Orden ininteligible"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Esto no parece un archivo tar"
 
@@ -602,12 +666,12 @@ msgstr "Esto no parece un archivo tar"
 # "bytes escritos en total" suena demasiado complejo... Nicolás Lichtmaier.
 # Suena algo extraño eso de "total de bytes". "en total" me suena
 # mucho más natural. sv
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 #, fuzzy
 msgid "Total bytes written"
 msgstr "Bytes escritos en total: %s (%s, %s/s)\n"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr ""
 
@@ -616,7 +680,7 @@ msgstr ""
 # "bytes escritos en total" suena demasiado complejo... Nicolás Lichtmaier.
 # Suena algo extraño eso de "total de bytes". "en total" me suena
 # mucho más natural. sv
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, fuzzy, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Bytes escritos en total: %s (%s, %s/s)\n"
@@ -635,17 +699,17 @@ msgstr "Bytes escritos en total: %s (%s, %s/s)\n"
 # aparecer *varias* veces, y entonces sí que es una paliza.
 # Ejemplo de paliza: "tubería rota" en libc. Sale muchísimo y no es
 # cuestión de ver (pipe) cuarenta veces al día...
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(tubería)"
 
 # ¿No queda más bonita la 1ª comilla abierta así: `record_size'?
 # Sí. FIXME. Comunicar al autor. sv
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "El valor de `record_size' no es válido"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "No se ha especificado ningún nombre de archivo"
 
@@ -664,69 +728,69 @@ msgstr "No se ha especificado ning
 # o algo así. Quizá "No se puede verificar un archivo tomado de la entrada
 # estándar o escrito hacia la salida estándar", pero es un poco largo.. =)
 #
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "No se puede verificar la entrada/salida estándar"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "El archivo está comprimido. Utilice la opción %s"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "No se pueden actualizar archivos comprimidos"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Al principio de la cinta, se terminará ahora"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Demasiados errores, abandono"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Tamaño del registro = %lu bloque"
 msgstr[1] "Tamaño del registro = %lu bloques"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Bloque no alineado (%lu byte) dentro del archivo"
 msgstr[1] "Bloque no alineado (%lu bytes) dentro del archivo"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr "No se puede ir hacia atrás en el archivo; puede ser ilegible sin -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek no paró en los límites de un registro"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: contiene un número de volumen inválido"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Desbordamiento en el número de volumen"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Prepare el volumen #%d para %s y pulse intro: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr ""
 "Se encontró un final de fichero mientras se esperaba respuesta del usuario"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "ATENCIÓN: El archivo está incompleto"
 
@@ -758,7 +822,7 @@ msgstr "ATENCI
 # A mí aquí me da igual lista que ayuda, de las dos formas se entiende. Manda
 # el traductor original. gerardo
 # ¿A alguien más le parece mal que ponga ayuda en vez de lista? sv
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, fuzzy, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -771,12 +835,12 @@ msgstr ""
 " !          Lanza un subshell\n"
 " ?          Muestra esta ayuda\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr ""
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr ""
@@ -787,35 +851,35 @@ msgstr ""
 # Uno se sale del programa, y éste acaba. En realidad, también da igual, de
 # cualquier forma se entiende, pero mejor acabar o terminar que finalizar,
 # total, son sinónimos. gerardo
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "No hay volumen nuevo; finalizando.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr ""
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr ""
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, fuzzy, c-format
 msgid "%s command failed"
 msgstr "La orden `%s' falló"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, fuzzy, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s no continúa en este volumen"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s no continúa en este volumen"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s tiene un tamaño erróneo (%s != %s + %s)"
@@ -835,7 +899,7 @@ msgstr "%s tiene un tama
 # él solito.
 # Todavía espero una solución mágica que sea mejor que las dos
 # que tenemos hasta ahora.
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, fuzzy, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Este volumen está fuera de secuencia"
@@ -846,17 +910,17 @@ msgstr "Este volumen est
 # Si no se sabe eso, se podría dejar de forma más neutra como
 # "Archivo no etiquetado para concordancia con `%s'" - gerardo (gag)
 # FIXME: Preguntar.
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "El archivo no está etiquetado para que coincida con %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "El volumen %s no coincide con %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, fuzzy, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
@@ -868,28 +932,28 @@ msgstr ""
 # Según gag y jmg, hay que decir: "no está en un límite de bloque", pues
 # no estamos hablando de un bloque concreto (el bloque) sino de uno cualquiera.
 # FIXME: Entonces tal vez el original debería decir "on a block boundary". sv
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 #, fuzzy
 msgid "write did not end on a block boundary"
 msgstr "El fin del archivo %s no está en un límite de bloque"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Sólo se pudieron leer %lu de %lu byte"
 msgstr[1] "Sólo se pudieron leer %lu de %lu bytes"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "El contenido es distinto"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Fin de fichero inesperado en el archivo"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "El tipo de fichero es distinto"
 
@@ -899,39 +963,39 @@ msgstr "El tipo de fichero es distinto"
 # corresponder siempre una frase corta española, el resultado sonará a indio
 # completamente (me refiero a los indios esos de las películas del oeste,
 # que solamente hablan con sustantivos, verbos y adjetivos). sv
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "El modo es distinto"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "El uid es distinto"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "El gid es distinto"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "La fecha de modificación es distinta"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "El tamaño es distinto"
 
 # Creo que este enlace se efectúa al descomprimir un archivo tar.
 # No es que nos diga si está enlazado o no lo está, sino si él hace
 # el enlace o no lo hace. sv
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "No se enlaza a %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "El enlace simbólico es distinto"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "El número de dispositivo es distinto"
 
@@ -967,34 +1031,34 @@ msgstr ""
 msgid "Verification may fail to locate original files."
 msgstr "Puede que la verificación no encuentre los ficheros originales."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "FALLO DE VERIFICACIÓN: %d cabecera inválida detectada"
 msgstr[1] "FALLO DE VERIFICACIÓN: %d cabeceras inválidas detectadas"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "Un bloque de ceros aislado en %s"
 
-#: src/create.c:67
+#: src/create.c:68
 #, fuzzy, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: contiene una marca de directorio caché; no se vuelca"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "valor %s fuera del rango %s %s..%s; se sustituye %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "valor %s fuera del rango %s %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Generando cabeceras octales negativas"
 
@@ -1023,7 +1087,7 @@ msgstr "%s: el nombre del enlace es demasiado largo; no se vuelca"
 # Que sí, reconozco que la traducción es un poco libre.
 # Pero mi intención es que el programa diga lo que va haciendo, no lo que ya
 # ha hecho. Ni siquiera el original es consistente en los modos verbales. sv
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
@@ -1032,13 +1096,13 @@ msgstr[0] ""
 msgstr[1] ""
 "%s: El tamaño del fichero ha disminuido en %s bytes, se rellena con ceros"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: el fichero está en un sistema de ficheros distinto; no se vuelca"
 
 # Se vuelca la *memoria* del proceso en un fichero llamado `core'.
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 #, fuzzy
 msgid "contents not dumped"
 msgstr " (memoria volcada)"
@@ -1059,76 +1123,71 @@ msgstr " (memoria volcada)"
 # Seguiremos en la ortodoxia, pero aún así, no puedo creerme que venga
 # en el DRAE. ¿Estás seguro? sv
 # No, no me compré el DRAE. Pregúntalo a spanglish (si te atreves ;-) gerardo
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Tipo de fichero desconocido; no se tendrá en cuenta"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, fuzzy, c-format
-msgid "Missing links to %s.\n"
+msgid "Missing links to %s."
 msgstr "Faltan enlaces a '%s'.\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: el fichero no ha cambiado; no se vuelca"
 
 # FIXME: Decir al autor que ponga el "itself". sv
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: el fichero es el propio archivo; no se vuelca"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: El fichero fue borrado antes de leerlo"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 #, fuzzy
 msgid "directory not dumped"
 msgstr "%s: contiene una marca de directorio caché; no se vuelca"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: el fichero cambió mientras se estaba leyendo"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: el `socket' no se tendrá en cuenta"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: no se tendrá en cuenta la puerta"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Saltando a la siguiente cabecera"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Borrando no-cabecera del archivo"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: marca de fecha sospechosamente antigua %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, fuzzy, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: la marca de tiempo %s está %lu s en el futuro"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Inconsistencia inesperada al crear el directorio"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr ""
@@ -1138,7 +1197,7 @@ msgstr ""
 # ni un dispositivo (de bloques o de caracteres) ni un fifo, etc.
 # Uno puede pensar que son los ficheros "normales", pero eso depende,
 # pues un directorio es de lo más "normal"...
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Extrayendo ficheros contiguos como ficheros regulares"
 
@@ -1147,207 +1206,198 @@ msgstr "Extrayendo ficheros contiguos como ficheros regulares"
 # Es una cuestión todavía no dirimida.
 # ¿Tienes algún dato más? ¿Qué dicen los libros? sv
 # Enlaces duros. Lo acabo de mirar en un libro. gag
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Intentando la extracción de enlaces simbólicos como enlaces duros"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Leyendo %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: No se puede extraer -- el fichero es continuación de otro volumen"
 
 # ¿No se referirá al autor a "mangled filenames"?... jmg
 # FIXME. Preguntárselo.
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 #, fuzzy
 msgid "Unexpected long name header"
 msgstr "Fin de fichero inesperado en los nombres modificados"
 
 # FIXME. Lo de las comillas '%c'.
 # Como antes, lo estandarizo en la traducción a pesar de todo.
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, fuzzy, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Tipo de fichero `%c' desconocido, se extrae como fichero normal"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, fuzzy, c-format
 msgid "Current %s is newer or same age"
 msgstr "El `%s' actual es más reciente"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: No se pudo hacer copia de seguridad de este fichero"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, fuzzy, c-format
 msgid "Cannot rename %s to %s"
 msgstr "%s: No se puede renombrar a %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "El error no es recuperable: salida ahora"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, fuzzy, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: El directorio ha sido renombrado"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: El directorio ha sido renombrado"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: El directorio es nuevo"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Marca de tiempo inválida"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 #, fuzzy
 msgid "Invalid modification time (seconds)"
 msgstr "Se ha especificado un modo no válido en la opción"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr ""
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Número de dispositivo inválido"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Número de nodo-i inválido"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr ""
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 #, fuzzy
 msgid "Read error in snapshot file"
 msgstr "Error de lectura en %s"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 #, fuzzy
 msgid "Unexpected EOF in snapshot file"
 msgstr "Fin de fichero inesperado en el archivo"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr ""
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr ""
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr ""
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr ""
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr ""
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 #, fuzzy
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "Argumento de densidad mal formado: '%s'"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr ""
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 #, fuzzy
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "Argumento de densidad mal formado: '%s'"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr ""
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr ""
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: No se purga el directorio: no se puede efectuar `stat'"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: el directorio está en un dispositivo distinto: no se purga"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Borrando %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: No se puede borrar"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Se omite"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "bloque %s: ** Bloque de NULos **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "bloque %s: ** Fin de Fichero **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "bloque %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Hay blancos en la cabecera cuando se esperaba el valor numérico %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1355,141 +1405,158 @@ msgstr ""
 "se supone complemento a dos"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "El valor octal %.*s del archivo está fuera del rango %s"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "El archivo contiene cabeceras base 64 obsoletas"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "La cadena firmada en base 64 %s del archivo está fuera del rango %s"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "El valor en base 256 del archivo está fuera del rango %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "El archivo contiene %.*s donde se esperaba el valor numérico %s"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, fuzzy, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "El valor del archivo %s está fuera del rango %s %s.%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " enlace a %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " tipo de fichero desconocido %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Enlace largo--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Nombre largo--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Cabecera de Volumen--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Continúa en el byte %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Creando el directorio:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Se renombra %s como %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: No se puede renombrar a %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Se vuelve a renombrar %s como %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "No se puede guardar el directorio de trabajo"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "No se puede cambiar el directorio de trabajo"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: El fichero fue borrado antes de leerlo"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: El fichero fue borrado antes de leerlo"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "proceso hijo"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "canal de interproceso"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
-msgstr ""
-
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr ""
+"los patrones de exclusión encajan con el comienzo del nombre del fichero"
 
-#: src/names.c:597
-msgid "suppress this warning."
+#: src/names.c:603
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: No se encuentra en el archivo"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: El elemento solicitado no se encuentra en el archivo"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Las opciones `-%s' y `-%s' requieren entrada estándar"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Formato de archivo inválido"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "Se requieren características de GNU en formato de archivo incompatible"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
@@ -1510,7 +1577,7 @@ msgstr ""
 # # nil: numeradas... simples... (en plural)
 # # never, simPle (falta una pe): backup -> copia de seguridad. gag
 # Estoy de acuerdo con lo de gag (más arriba usas eso mismo). jmg
-#: src/tar.c:336
+#: src/tar.c:347
 #, fuzzy
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
@@ -1555,7 +1622,7 @@ msgstr ""
 # # nil: numeradas... simples... (en plural)
 # # never, simPle (falta una pe): backup -> copia de seguridad. gag
 # Estoy de acuerdo con lo de gag (más arriba usas eso mismo). jmg
-#: src/tar.c:345
+#: src/tar.c:356
 #, fuzzy
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
@@ -1586,76 +1653,74 @@ msgstr ""
 "                  en otro caso\n"
 "  never, simple   siempre hace copias de seguridad simples\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Modo principal de operación:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "lista el contenido de un archivo"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "extrae ficheros de un archivo"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "crea un nuevo archivo"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "encuentra las diferencias entre un archivo y el sistema de ficheros"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "añade ficheros al final de un archivo"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "solamente añade ficheros más recientes que la copia del archivo"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "añade ficheros tar a un archivo"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "borra del archivo (¡no en cintas magnéticas!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr ""
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Modificadores de operación:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "maneja ficheros dispersos de forma eficiente"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr ""
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "maneja el formato GNU antiguo de respaldo incremental"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "FICHERO"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "maneja el nuevo formato GNU de respaldo incremental"
 
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr ""
+
 # ¿archivos nonzero? sv
 # Estupendo Gerardo, se me había pasado, como tantas cosas em+
 # # ¡Nooorl! Quiere decir que el programa tar no acaba o sale (exit())
@@ -1663,16 +1728,11 @@ msgstr "maneja el nuevo formato GNU de respaldo incremental"
 # # encuentre ficheros ilegibles. (¡Uf! Ahora a ver cómo se pone esto en
 # # media línea.) gag
 #
-#: src/tar.c:408
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "no sale con estado distinto de cero cuando hay ficheros ilegibles"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "NÚMERO"
-
-#: src/tar.c:410
+#: src/tar.c:428
 #, fuzzy
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
@@ -1686,202 +1746,211 @@ msgstr ""
 "órdenes o con la opción -T. El valor predeterminado de NUM es 1."
 
 # Mejor eso que inventarse un palabro, digo yo. sv
-#: src/tar.c:416
+#: src/tar.c:434
 #, fuzzy
 msgid "archive is seekable"
 msgstr "El archivo admite `seek'"
 
-#: src/tar.c:418
+# Mejor eso que inventarse un palabro, digo yo. sv
+#: src/tar.c:436
+#, fuzzy
+msgid "archive is not seekable"
+msgstr "El archivo admite `seek'"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr ""
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "intenta verificar el archivo después de escribirlo"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "borra los ficheros después de añadirlos al archivo"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "no reemplaza ficheros que existan al extraer"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 "no reemplaza los ficheros que existan que sean más recientes que sus copias "
 "en el archivo"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "sobreescribe los ficheros que existan al extraer"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "borra cada fichero antes de extraer sobre él"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "vacía jerarquías antes de extraer directorios"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "conserva los metadatos de los directorios que existan"
 
-#: src/tar.c:446
+#: src/tar.c:466
 #, fuzzy
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr "sobreescribe los ficheros que existan al extraer"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr ""
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "extrae los ficheros a la salida estándar"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "ORDEN"
 
-#: src/tar.c:457
+#: src/tar.c:477
 #, fuzzy
 msgid "pipe extracted files to another program"
 msgstr "extrae los ficheros a la salida estándar"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr ""
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr ""
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Manejo de los atributos del fichero:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "fuerza NOMBRE como propietario de los ficheros que se añaden"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "fuerza NOMBRE como grupo para los ficheros que se añaden"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "FECHA-O-FICHERO"
 
-#: src/tar.c:473
+#: src/tar.c:493
 #, fuzzy
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "almacena solamente ficheros más recientes que FECHA-O-FICHERO"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "CAMBIOS"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "fuerza CAMBIOS (simbólicos) de modo para los ficheros que se añaden"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr ""
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
 "place (METHOD='system')"
 msgstr ""
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "no extrae la fecha de modificación del fichero"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+#, fuzzy
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr "intenta extraer los ficheros con el mismo propietario"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+#, fuzzy
+msgid "extract files as yourself (default for ordinary users)"
 msgstr "extrae los ficheros como usted mismo"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "utiliza siempre números para los nombres de usuarios/grupos"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
 msgstr ""
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "ordena los nombres que se extraen para que coincidan con el archivo"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "lo mismo que -p y -s"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr ""
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr ""
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "Selección de dispositivo y opciones:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "ARCHIVO"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "utiliza un archivo o el dispositivo ARCHIVO"
 
-#: src/tar.c:514
+#: src/tar.c:534
 #, fuzzy
 msgid "archive file is local even if it has a colon"
 msgstr "el archivo es local incluso si tiene dos puntos"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "utiliza la ORDEN rmt dada en vez de rmt"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "utiliza la ORDEN remota en vez de rsh"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "especifica la unidad y la densidad"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "crea/lista/extrae un archivo multivolumen"
 
@@ -1895,38 +1964,38 @@ msgstr "crea/lista/extrae un archivo multivolumen"
 # x × - gerardo
 # Efectivamente, pero no es transportable, el que use tar bajo DJGPP
 # le saldría un churro pues el aspa no existe en la tabla 850. sv
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "cambia la cinta después de escribir NÚMERO x 1024 bytes"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "ejecuta un script al final de cada cinta (implica -M)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "usa/actualiza el número de volumen en FICHERO"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Bloques en los dispositivos:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "BLOQUES"
 
 # Sigo en mis 13 y en esto no hay quien me baje del burro: BLOQUES x 512 bytes
 # debe ser BLOQUES × 512 bytes. gerardo
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "BLOQUES x 512 bytes por registro"
 
-#: src/tar.c:553
+#: src/tar.c:573
 #, fuzzy
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "TAMAÑO bytes por registro, múltiplo de 512"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr ""
 "no tiene en cuenta los bloques convertidos en ceros dentro de un archivo "
@@ -1941,7 +2010,7 @@ msgstr ""
 # # requetequetequete... (longitud infinita). Pelín ssagerao, ¿no? gag
 #
 # Bueno, al final he puesto lo que se ve, un poco menos raro que rebloquear. sv
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "rehace los bloques conforme se lee (para tuberías de 4.2BSD)"
 
@@ -1950,70 +2019,70 @@ msgstr "rehace los bloques conforme se lee (para tuber
 # salida estándar' no pega mucho. Está en otros mensajes, como el
 # siguiente; no lo entiendo. - gerardo
 # FIXME. Tienes razón. Es muy raro.
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Selección del formato de archivo:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "FORMATO"
 
-#: src/tar.c:565
+#: src/tar.c:585
 #, fuzzy
 msgid "create archive of the given format"
 msgstr "crea un archivo en el formato dado."
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "FORMATO es uno de los siguientes:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "formato tar V7 antiguo"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "formato GNU de tar <= 1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "formato GNU tar 1.13.x"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "formato POSIX 1003.1-1988 (ustar)"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "formato POSIX 1003.1-2001 (pax)"
 
-#: src/tar.c:578
+#: src/tar.c:598
 #, fuzzy
 msgid "same as pax"
 msgstr "Lo mismo que pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "lo mismo que --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "lo mismo que --format=posix"
 
-#: src/tar.c:585
+#: src/tar.c:605
 #, fuzzy
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "palabra[[:]=valor][,palabra[[:]=valor], ...]"
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "palabras clave de control de pax"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "TEXTO"
 
-#: src/tar.c:588
+#: src/tar.c:608
 #, fuzzy
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
@@ -2022,95 +2091,63 @@ msgstr ""
 "crea un archivo con nombre de volumen NOMBRE. En el momento de listar/"
 "extraer, utiliza TEXTO como patrón expandible"
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Opciones de compresión en conflicto"
 
-#: src/tar.c:595
+#: src/tar.c:615
 #, fuzzy
 msgid "use archive suffix to determine the compression program"
 msgstr "No se puede escribir al programa de compresión"
 
-#: src/tar.c:597
+#: src/tar.c:617
 #, fuzzy
 msgid "do not use archive suffix to determine the compression program"
 msgstr "No se puede escribir al programa de compresión"
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "filtra el archivo a través de bzip2"
-
-# FIXME: Decir al autor que ponga el "itself". sv
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "filtra el arhivo a través de gzip"
-
-# FIXME: Decir al autor que ponga el "itself". sv
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "filtra el archivo a través de compress"
-
-# FIXME: Decir al autor que ponga el "itself". sv
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "filtra el arhivo a través de gzip"
-
-# FIXME: Decir al autor que ponga el "itself". sv
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "filtra el arhivo a través de gzip"
-
-# FIXME: Decir al autor que ponga el "itself". sv
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "filtra el arhivo a través de gzip"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "PROG"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "filtra a través de PROG (debe aceptar -d)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Selección del fichero local:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "DIR"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "cambia al directorio DIR"
 
-#: src/tar.c:627
+#: src/tar.c:643
 #, fuzzy
 msgid "get names to extract or create from FILE"
 msgstr "obtiene los nombres que se van a extraer o crear del fichero NOMBRE"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T lee nombres terminados en nulo, desactiva -C"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr ""
 
@@ -2119,111 +2156,115 @@ msgstr ""
 # de expansión de nombres de ficheros, como * y ?, mientras que
 # el segundo se refiere a expresiones regulares como las de grep,
 # es decir, ^, $, ., *, etc.
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "PATRÓN"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "excluye ficheros, dados como un PATRÓN"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "excluye los patrones listados en FICHERO"
 
-#: src/tar.c:641
+#: src/tar.c:657
 #, fuzzy
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr "excluye los directorios que contienen una marca de caché"
 
-#: src/tar.c:644
+#: src/tar.c:660
 #, fuzzy
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "excluye los directorios que contienen una marca de caché"
 
-#: src/tar.c:647
+#: src/tar.c:663
 #, fuzzy
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "excluye los directorios que contienen una marca de caché"
 
-#: src/tar.c:649
+#: src/tar.c:665
 #, fuzzy
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr "excluye los directorios que contienen una marca de caché"
 
-#: src/tar.c:652
+#: src/tar.c:668
 #, fuzzy
 msgid "exclude everything under directories containing FILE"
 msgstr "excluye los directorios que contienen una marca de caché"
 
-#: src/tar.c:654
+#: src/tar.c:670
 #, fuzzy
 msgid "exclude directories containing FILE"
 msgstr "excluye los directorios que contienen una marca de caché"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "evita descender automáticamente en los directorios"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "permanece en el sistema de ficheros locales al crear el archivo"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "opera recursivamente sobre los directorios (por omisión)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "no elimina la `/' inicial de los nombres de ficheros"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "NOMBRE-DE-MIEMBRO"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "comienza por el miembro NOMBRE-DE-MIEMBRO dentro del archivo"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "almacena solamente ficheros más recientes que FECHA-O-FICHERO"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "FECHA"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "compara la fecha y hora solamente cuando cambian los datos"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "CONTROL"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "se hace un respaldo antes de borrar, escoja el CONTROL de versión"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "CADENA"
 
-#: src/tar.c:679
+#: src/tar.c:697
 #, fuzzy
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
@@ -2233,97 +2274,105 @@ msgstr ""
 "que se\n"
 "cambie con la variable de entorno SIMPLE_BACKUP_SUFFIX)"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr ""
 
-#: src/tar.c:686
+#: src/tar.c:704
 #, fuzzy
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr "elimina NÚMERO componentes iniciales de los nombres de ficheros"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr ""
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 
-#: src/tar.c:698
+#: src/tar.c:716
 #, fuzzy
 msgid "ignore case"
 msgstr "la exclusión no distingue mayúsculas de minúsculas"
 
-#: src/tar.c:700
+#: src/tar.c:718
 #, fuzzy
 msgid "patterns match file name start"
 msgstr ""
 "los patrones de exclusión encajan con el comienzo del nombre del fichero"
 
-#: src/tar.c:702
+#: src/tar.c:720
 #, fuzzy
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr "los patrones de exclusión encajan después de cualquier / (por omisión)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 #, fuzzy
 msgid "case sensitive matching (default)"
 msgstr "la exclusión distingue mayúsculas de minúsculas (por omisión)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr ""
 
-#: src/tar.c:710
+#: src/tar.c:728
 #, fuzzy
 msgid "wildcards do not match `/'"
 msgstr "los comodines de patrones de exclusión no encajan con '/'"
 
-#: src/tar.c:712
+#: src/tar.c:730
 #, fuzzy
 msgid "wildcards match `/' (default for exclusion)"
 msgstr ""
 "los comodines de los patrones de exclusión encajan con '/' (por omisión)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Salida informativa:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "lista los ficheros procesados detalladamente"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr ""
+
+#: src/tar.c:742
 #, fuzzy
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr "muestra mensajes de progreso cada 10 registros"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "muestra un mensaje si no se vuelcan todos los enlaces"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr ""
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2331,28 +2380,28 @@ msgid ""
 "accepted"
 msgstr ""
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "muestra las fechas de modificación de los ficheros en UTC"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "envía la salida detallada a FICHERO"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "muestra el número de bloque dentro del archivo con cada mensaje"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "pide confirmación para cada acción"
 
-#: src/tar.c:744
+#: src/tar.c:764
 #, fuzzy
 msgid "show tar defaults"
 msgstr "Muestra los valores predeterminados de tar"
 
-#: src/tar.c:746
+#: src/tar.c:766
 #, fuzzy
 msgid ""
 "when listing or extracting, list each directory that does not match search "
@@ -2361,31 +2410,31 @@ msgstr ""
 "Cuando se lista o extrae, lista cada directorio que no coincida con el "
 "criterio de búsqueda"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr ""
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr ""
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr ""
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr ""
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Opciones de compatibilidad:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 #, fuzzy
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
@@ -2394,58 +2443,66 @@ msgstr ""
 "al crear, lo mismo que --old-archive. Al extraer, lo mismo que --no-same-"
 "owner"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Otras opciones:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr ""
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "No se puede especificar más de una opción `-Acdtrux'"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Opciones de compresión en conflicto"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, fuzzy, c-format
 msgid "Unknown signal name: %s"
 msgstr " tipo de fichero desconocido %s\n"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 #, fuzzy
 msgid "Date sample file not found"
 msgstr "No se encontró la fecha del fichero"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Sustituyendo %s por el formato de fecha desconocido %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, fuzzy, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "Se trata la fecha `%s' como %s + %ld nanosegundo"
 
 # FIXME: Decir al autor que ponga el "itself". sv
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, fuzzy, c-format
 msgid "%s: file list already read"
 msgstr "%s: el fichero es el propio archivo; no se vuelca"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr ""
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+# FIXME: Decir al autor que ponga el "itself". sv
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "filtra el arhivo a través de gzip"
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr ""
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2453,118 +2510,127 @@ msgstr ""
 "\n"
 "Las opciones predeterminadas de *esta* versión de tar son:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Factor de bloqueo inválido"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Longitud de cinta inválida"
 
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr ""
+
 # No sé cómo traducir threshold. fr
 # Yo tampoco (los diccionarios los tengo en casa...). sv
 # Lo buscaré en un diccionario "güeno". fr
 # Es "umbral", pero no sé qué c$%&# es la fecha umbral. :-( gag
 # A ver si te vale así. sv
 # ¿Qué tal os suena "fecha límite"?. jmg
-#: src/tar.c:1441
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Se ha especificado más de una fecha tope"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr ""
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr ""
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr ""
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: Grupo inválido"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Se ha especificado un modo no válido en la opción"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Número inválido"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Propietario inválido"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "El tamaño del registro es inválido"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "El tamaño del registro debe ser múltiplo de %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Número inválido de elementos"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr ""
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, fuzzy, c-format
 msgid "Malformed density argument: %s"
 msgstr "Argumento de densidad mal formado: '%s'"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, fuzzy, c-format
 msgid "Unknown density: `%c'"
 msgstr "Densidad desconocida: '%c'"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "*Esta* versión de tar no admite las opciones `-[0-7][lmh]'"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[FICHERO]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "La opción antigua `%c' requiere un argumento"
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "--occurrence no tiene sentido sin una lista de ficheros"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "no se puede usar --occurrence en el modo de operación solicitado"
 
 # requieren -> necesitan. gerardo
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Los archivos múltiples requieren la opción `-M'"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "No se puede combinar --listed-incremental con --newer"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+#, fuzzy
+msgid "--level is meaningless without --listed-incremental"
+msgstr "--occurrence no tiene sentido sin una lista de ficheros"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
@@ -2573,49 +2639,50 @@ msgstr[0] ""
 msgstr[1] ""
 "%s: La etiqueta de volumen es demasiado larga (el límite es %lu bytes)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "No se pueden verificar archivos multivolumen"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "No se pueden verificar archivos comprimidos"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "No se pueden utilizar archivos multivolumen comprimidos"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 #, fuzzy
 msgid "Cannot concatenate compressed archives"
 msgstr "No se pueden actualizar archivos comprimidos"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "--pax-option solamente se puede usar en archivos POSIX"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
 # Me gusta más al verrés: cobarde rechazo [de la pradera] a... gerardo
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Rechazo cobarde a crear un archivo vacío"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Las opciones `-Aru' son incompatibles con `-f -'"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Debe especificar una de las opciones `-Acdtrux'"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2642,83 +2709,88 @@ msgstr[0] "%s: El tama
 msgstr[1] "%s: El tamaño del fichero ha disminuido en %s bytes"
 
 # FIXME: Imlemented
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, fuzzy, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "La palabra clave %s es desconocida o no está implementada todavía"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Marca de tiempo fuera de rango"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "No se puede usar el patrón %s"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "La palabra clave %s no se puede sustituir"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 #, fuzzy
 msgid "Malformed extended header: missing length"
 msgstr "Cabecera extendida errónea: falta un signo igual"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr ""
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, fuzzy, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "La cadena firmada en base 64 %s del archivo está fuera del rango %s"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 #, fuzzy
 msgid "Malformed extended header: missing blank after length"
 msgstr ""
 "Cabecera extendida errónea: falta un espacio en blanco después de la longitud"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Cabecera extendida errónea: falta un signo igual"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 #, fuzzy
 msgid "Malformed extended header: missing newline"
 msgstr "Cabecera extendida errónea: falta un signo igual"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr ""
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, fuzzy, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "El valor del archivo %s está fuera del rango %s %s.%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, fuzzy, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Cabecera extendida errónea: falta un signo igual"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, fuzzy, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Cabecera extendida errónea: falta un signo igual"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, fuzzy, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr "Cabecera extendida errónea: falta un signo igual"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, fuzzy, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr "Cabecera extendida errónea: falta un signo igual"
@@ -2762,190 +2834,199 @@ msgstr "Punto de comprobaci
 # Acepto sugerencias para el `test suite'. sv
 # "test suite"="paquete/conjunto de pruebas/análisis", en cualquier
 # combinación. jmg
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 #, fuzzy
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
 msgstr "Genera ficheros de datos para el conjunto de pruebas de GNU tar.\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 #, fuzzy
 msgid "File creation options:"
 msgstr "Otras opciones:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr ""
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 #, fuzzy
 msgid "Create file of the given SIZE"
 msgstr "crea un archivo en el formato dado."
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 #, fuzzy
 msgid "Write to file NAME, instead of standard output"
 msgstr "extrae los ficheros a la salida estándar"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 #, fuzzy
 msgid "Read file names from FILE"
 msgstr "Leídos %s bytes como %s"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 #, fuzzy
 msgid "-T reads null-terminated names"
 msgstr "-T lee nombres terminados en nulo, desactiva -C"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr ""
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr ""
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 #, fuzzy
 msgid "Seek to the given offset before writing data"
 msgstr "intenta verificar el archivo después de escribirlo"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr ""
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr ""
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr " [OPCIÓN...]"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr ""
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 #, fuzzy
 msgid "Update the access and modification times of FILE"
 msgstr "%s: No se pueden cambiar las fechas de acceso y modificación"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 #, fuzzy
 msgid "Execute COMMAND"
 msgstr "ORDEN"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, fuzzy, c-format
 msgid "Invalid size: %s"
 msgstr "Marca de tiempo inválida"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, fuzzy, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Número de nodo-i fuera de rango"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr ""
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr ""
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr ""
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, fuzzy, c-format
 msgid "Unknown date format"
 msgstr "Error del sistema desconocido"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr ""
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, fuzzy, c-format
 msgid "cannot open `%s'"
 msgstr "No se puede abrir %s"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 #, fuzzy
 msgid "cannot seek"
 msgstr "No se puede cerrar"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr ""
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr ""
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, fuzzy, c-format
 msgid "Unknown field `%s'"
 msgstr " tipo de fichero desconocido %s\n"
@@ -2956,53 +3037,133 @@ msgstr " tipo de fichero desconocido %s\n"
 # ser: "No se puede hacer stat() del fichero %s", o "stat() ha fallado..."
 # Aunque tal como está es más descriptivo para el neófito, desde
 # luego. gag
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, fuzzy, c-format
 msgid "cannot set time on `%s'"
 msgstr "No se puede leer el estado del fichero %s"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "No se puede abrir %s"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr ""
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, fuzzy, c-format
 msgid "Command failed with status %d\n"
 msgstr "El proceso hijo terminó con la señal %d"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr ""
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr ""
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, fuzzy, c-format
 msgid "--stat requires file names"
 msgstr "--Nombres de fichero modificados--\n"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr ""
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: opción ilegal -- %c\n"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
-#~ msgstr "Atención: no se admite la opción -I; ¿no será -j o -T?"
+# Por favor, no me digáis cómo se traduce bug.
+# Gerardo lo ha visto traducido en un libro como "pulgas", y yo
+# lo he visto como "chinche" en la "Investigación y Ciencia".
+# Está claro que así no vamos a ninguna parte.
+# Yo diría simplemente `fallos [ocultos]'. Es lo que significa, en realidad,
+# en el contexto informático, razones históricas aparte de bichos anidando
+# al calorcito de los tubos de vacío de los primeros computadores. gerardo
+# De "ocultos" nada... Este vamos a dejarlo, ¿vale? sv
+# Tú mandas, pero ¿cómo que de ocultos nada? Si no fueran ocultos, el progra-
+# ma no vería la luz aún, ¿no? Pero observa que he puesto el `ocultos' entre
+# corchetes. Yo pondría "bug -> fallo" simplemente. Comunicar fallos a... gerardo
+# ¿Que no vería la luz si no fueran ocultos? Ja, ja, ja, ja...
+# Mira por ejemplo en http://nl.debian.org/Bugs.
+# ¿No tendría sentido catalogarlos entonces?
+#
+# Véase "A Bug's life".
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Comunicar bichos a <%s>.\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Leyendo %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "El error no es recuperable: salida ahora"
+
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "filtra el archivo a través de bzip2"
+
+# FIXME: Decir al autor que ponga el "itself". sv
+#~ msgid "filter the archive through gzip"
+#~ msgstr "filtra el arhivo a través de gzip"
+
+# FIXME: Decir al autor que ponga el "itself". sv
+#~ msgid "filter the archive through compress"
+#~ msgstr "filtra el archivo a través de compress"
+
+# FIXME: Decir al autor que ponga el "itself". sv
+#, fuzzy
+#~ msgid "filter the archive through lzma"
+#~ msgstr "filtra el arhivo a través de gzip"
+
+# FIXME: Decir al autor que ponga el "itself". sv
+#, fuzzy
+#~ msgid "filter the archive through lzop"
+#~ msgstr "filtra el arhivo a través de gzip"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: No se puede asignar espacio para el búfer\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "No se puede asignar espacio para el búfer"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Pruebe `%s --help' para más información.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Modo de empleo: %s [OPCIÓN]\n"
+#~ "Manipula una unidad de cinta, aceptando órdenes de un proceso remoto.\n"
+#~ "\n"
+#~ "  --version  Muestra la versión.\n"
+#~ "  --help     Muestra esta ayuda.\n"
+
+#, fuzzy
+#~ msgid "Seek offset error"
+#~ msgstr "Desplazamiento fuera de rango"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Fin de fichero prematuro"
 
 #~ msgid "block size"
 #~ msgstr "tamaño del bloque"
@@ -3030,9 +3191,6 @@ msgstr ""
 #~ msgid "Visible long name error"
 #~ msgstr "Error de nombre largo visible"
 
-#~ msgid "Time stamp out of range"
-#~ msgstr "Marca de tiempo fuera de rango"
-
 #~ msgid "Device number out of range"
 #~ msgstr "Número de dispositivo fuera de rango"
 
@@ -3147,6 +3305,9 @@ msgstr ""
 #~ "   Foundation, Inc.  59 Temple Place, Suite 330, Boston, MA 02111-1307 EE."
 #~ "UU.\n"
 
+#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgstr "Atención: no se admite la opción -I; ¿no será -j o -T?"
+
 #~ msgid "Semantics of -l option will change in the future releases."
 #~ msgstr "El significado de la opción -l cambiará en versiones posteriores."
 
@@ -3608,12 +3769,6 @@ msgstr ""
 #~ msgstr ""
 #~ "No se puede asignar memoria para el búfer de diferencias de %lu bytes"
 
-# Lo mismo que con stat() em+
-# seek() es otra función. seek = "hacer seek()" ¡Estos
-# angloparlantes!
-#~ msgid "Cannot seek to %s in file %s"
-#~ msgstr "No se puede acceder a la posición %s en el fichero %s"
-
 #~ msgid "Wrote %s of %s bytes to file %s"
 #~ msgstr "Se escribieron %s de %s bytes en el fichero %s"
 
index 34607b3094817aee9f00ac34b8c0da82ea74aeb5..371ed25dae8ca1c8527b3b7ca3fa4f1f655b1b80 100644 (file)
Binary files a/po/et.gmo and b/po/et.gmo differ
index 6df28e56a974251e77408a36b5f69899bb133f44..bc64f8d67189a1bf18be42a106320804ea4e8070 100644 (file)
--- a/po/et.po
+++ b/po/et.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU tar 1.15.92\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
 "PO-Revision-Date: 2006-10-26 14:45+0300\n"
 "Last-Translator: Toomas Soome <Toomas.Soome@microlink.ee>\n"
 "Language-Team: Estonian <et@li.org>\n"
@@ -15,47 +15,47 @@ msgstr ""
 "Content-Transfer-Encoding: 8-bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "vigane argument %s (`%s')"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "segane argument %s (`%s')"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Lubatud argumendid on:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: %s väärtus on väiksem või võrdne kui %s"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: ARGP_HELP_FMT parameeter nõuab väärtust"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: ARGP_HELP_FMT parameeter peab olema positiivne"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: Tundmatu ARGP_HELP_FMT parameeter"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Prügi ARGP_HELP_FMT parameetrites: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -63,235 +63,143 @@ msgstr ""
 "Kohustuslikud või mittekohustuslikud argumendid pikkadele võtmetele on ka "
 "kohustuslikud või mittekohustuslikud vastavatele lühikestele võtmetele."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Kasutamine:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr " või: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [VÕTI...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "`%s --help' või `%s --usage' annab rohkem infot.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "Teated vigadest saatke palun aadressil %s.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Tundmatu süsteemi viga"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "näita seda abiinfot"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "näita lühikest kasutamise õpetust"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "NIMI"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "sea programmi nimi"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "SEK"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "oota SEK sekundeid (vaikimisi 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "esita programmi versioon"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(PROGRAMMI VIGA) Versioon pole teada!?"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: Liiga palju argumente\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr "(PROGRAMMI VIGA) Võti peaks olema ära tuntud!?"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr ""
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: võti `%s' on segane\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: võtmel `--%s' pole argumente\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: võtmel `%c%s' pole argumente\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: võti `%s' nõuab argumenti\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: tundmatu võti `--%s'\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: tundmatu võti `%c%s'\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: vigane võti -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: vigane võti -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: võti nõuab argumenti -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: võti `-W %s' on segane\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: võti `-W %s' ei luba argumenti\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "mälu on otsas"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, fuzzy, c-format
 msgid "unable to record current working directory"
 msgstr "Ei õnnestu vahetada töökataloogi"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, fuzzy, c-format
 msgid "failed to return to initial working directory"
 msgstr "Töökataloogi ei õnnestu salvestada"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: %s ei õnnestu"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Hoiatus: %s ei õnnestu"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Ei õnnestu seada uueks moodiks %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Ei õnnestu seada omanikuks uid %lu, gid %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Viidet %s ei saa luua"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Lugemisviga baidil %s, loen %lu baiti"
-msgstr[1] "%s: Lugemisviga baidil %s, loen %lu baiti"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Hoiatus: Lugemisviga baidil %s, loen %lu baiti"
-msgstr[1] "%s: Hoiatus: Lugemisviga baidil %s, loen %lu baiti"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Ei õnnestu liikuda positsioonile %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Hoiatus: Ei saa positsioneerida %s"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Ei saa luua %s nimeviidet"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Sain kirjutada ainult %lu baiti (soovisin %lu)"
-msgstr[1] "%s: Sain kirjutada ainult %lu baiti (soovisin %lu)"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Eemaldan liikmete nimedelt prefiksi `%s'"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Eemaldan viidatavate nimedelt prefiksi `%s'"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Kasutan tühjade nimede asemel `.'"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Kasutan tühja viidatava nime asemel `.'"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -305,17 +213,17 @@ msgstr "Kasutan t
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "`"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "'"
 
@@ -325,7 +233,7 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[jJ]"
 
@@ -335,38 +243,28 @@ msgstr "^[jJ]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[eE]"
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Teenus pole kasutatav"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "standard sisend"
-
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "standard väljund"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Ei saa käivitada kaug käsuinterpretaatorit"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -377,19 +275,19 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr ""
@@ -397,7 +295,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -407,7 +305,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -417,7 +315,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -427,7 +325,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -437,7 +335,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -448,7 +346,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -459,7 +357,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -471,182 +369,330 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
-#, c-format
+#: gnu/version-etc.c:247
+#, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
+msgstr "Teated vigadest saatke palun aadressil %s.\n"
+
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
 "\n"
 "Teated vigadest saatke palun aadressil <%s>.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "Sisendi sõne on liiga pikk"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+msgstr ""
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "Numbri süntaksi viga"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: %s ei õnnestu"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Ei saa võtta buhvritele mälu\n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Hoiatus: %s ei õnnestu"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Buhvritele ei jätku mälu"
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Ei õnnestu seada uueks moodiks %s"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:101
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "`%s --help' annab rohkem infot.\n"
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Ei õnnestu seada omanikuks uid %lu, gid %lu"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:127
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Viidet %s ei saa luua"
+
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Lugemisviga baidil %s, loen %lu baiti"
+msgstr[1] "%s: Lugemisviga baidil %s, loen %lu baiti"
+
+#: lib/paxerror.c:192
+#, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Hoiatus: Lugemisviga baidil %s, loen %lu baiti"
+msgstr[1] "%s: Hoiatus: Lugemisviga baidil %s, loen %lu baiti"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Ei õnnestu liikuda positsioonile %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Hoiatus: Ei saa positsioneerida %s"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Ei saa luua %s nimeviidet"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Sain kirjutada ainult %lu baiti (soovisin %lu)"
+msgstr[1] "%s: Sain kirjutada ainult %lu baiti (soovisin %lu)"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Eemaldan liikmete nimedelt prefiksi `%s'"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Eemaldan viidatavate nimedelt prefiksi `%s'"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Kasutan tühjade nimede asemel `.'"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Kasutan tühja viidatava nime asemel `.'"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Teenus pole kasutatav"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "standard sisend"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "standard väljund"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Kasuta: %s [võti]\n"
-"Manipuleeri lindiseadmega, lubades käske teistest protsessidest.\n"
-"\n"
-"  --version  Väljasta versiooniinfo.\n"
-"  --help     Väljasta abiinfo.\n"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "Otsimise indeksi viga"
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Ei saa käivitada kaug käsuinterpretaatorit"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Otsimise suund on piiridest väljas"
+
+#: rmt/rmt.c:419
+#, fuzzy
+msgid "Invalid seek direction"
+msgstr "Võtmega anti vigane mood"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Vigane suurus: %s"
+
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Otsimise indeks on piiridest väljas"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Otsimise suund on piiridest väljas"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Vigane lindi pikkus"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Otsimise indeks on piiridest väljas"
+
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: Ootamatu faili lõpp\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Ootamatu faili lõpp"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "Põhiline töö:"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Tükeldatud nimedel ootamatu faililõpp"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "N"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "FAIL"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "`%s' ei saa avada"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "liiga palju argumente"
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Rämpskäsk"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Hmm.... see ei tundu olema tar arhiiv"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Baite kirjutatud kokku"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "Baite loetud kokku"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Baite kirjutatud kokku: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(toru)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Kirje suuruse väärtus on vigane"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Arhiivi nime pole"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Ei saa kontrollida sisend/väljund arhiive"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "Arhiiv on tihendatud. Kasutage võtit %s"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Ei saa uuendada pakitud arhiive"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Lindi alguses, lõpetan töö"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Liig palju vigu, jätan töö pooleli"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Kirje suurus = %lu blokki"
 msgstr[1] "Kirje suurus = %lu blokki"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Joondamata blokk (%lu baiti) arhiivis"
 msgstr[1] "Joondamata blokk (%lu baiti) arhiivis"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr ""
 "Arhiivi ei õnnestu tagasi kerida; lugemiseks võib olla vajalik kasutada "
 "võtit -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek ei peatunud kirje piiril"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: sisaldab vigast volüümi numbrit"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Volüümi number on liiga suur"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Otsi volüüm #%d %s'le ja vajuta return klahvi: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "EOF kasutaja vastuse asemel"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "HOIATUS: Arhiiv pole täielik"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -657,65 +703,65 @@ msgstr ""
 " q             Katkesta tar\n"
 " y või reavahetus Jätka\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !             Loo alamshell\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?             Väljasta see info\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Pole uus volüüm; lõpetan töö.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "Puudub faili nimi. Proovige uuesti.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "Vigane sisend. ? annab abiinfot.\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "%s käsklus sai vea"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "võimalik et %s jätkub sellel volüümil: päises on lühendatud nimi"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s ei jätku sellel volüümil"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s on vale suurusega (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, fuzzy, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "See volüüm on väljaspoolt järjekorda"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Arhiivi märgend ei sobi `%s'"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Volüüm `%s' ei sobi volüümiga `%s'"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
@@ -723,61 +769,61 @@ msgstr ""
 "%s: faili nimi on GNU mitmevolüümi päisesse salvestamiseks liiga pikk, "
 "lühendan"
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 #, fuzzy
 msgid "write did not end on a block boundary"
 msgstr "rmtlseek ei peatunud kirje piiril"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Sain lugeda ainult %lu baiti (sooviti %lu)"
 msgstr[1] "Sain lugeda ainult %lu baiti (sooviti %lu)"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Sisu on erinev"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Ootamatu arhiivi lõpp"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Failitüübid on erinevad"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Moodid erinevad"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "UID on erinevad"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "GID on erinevad"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Muutmise ajad erinevad"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Suurused erinevad"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "ei viita %s-le"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Nimeviited erinevad"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Seadme numbrid on erinevad"
 
@@ -799,34 +845,34 @@ msgstr "Arhiiv sisaldab eemaldatud prefiksitega failinimesid."
 msgid "Verification may fail to locate original files."
 msgstr "Kontrollimine ei pruugi leida algseid faile."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "VIGA KONTROLLIMISEL: leiti %d vigast päist"
 msgstr[1] "VIGA KONTROLLIMISEL: leiti %d vigast päist"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "Üksik null blokk kohal %s"
 
-#: src/create.c:67
+#: src/create.c:68
 #, fuzzy, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: sisaldab vahemälu kataloogi lipikut; ei salvesta"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "väärtus %s on %s piiridest %s..%s väljas; asendan %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "väärtus %s on %s piiridest %s..%s väljas"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Genereerin negatiivsed kaheksand päised"
 
@@ -845,438 +891,441 @@ msgstr "%s: faili nimi on liiga pikk (ei saa poolitada); ei salvesta"
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: viite nimi on liiga pikk; ei salvesta"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: Fail lühenes %s baiti; täidan nullidega"
 msgstr[1] "%s: Fail lühenes %s baiti; täidan nullidega"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: fail on teises failisüsteemis; ei salvesta"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr ""
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Tundmatu failitüüp; ignoreerin seda faili"
 
-#: src/create.c:1464
-#, c-format
-msgid "Missing links to %s.\n"
+#: src/create.c:1472
+#, fuzzy, c-format
+msgid "Missing links to %s."
 msgstr "%s-le puudub viiteid.\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: pole muutunud; ei salvesta"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s on arhiiv; ei salvesta"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Fail kustutati enne lugemist"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 #, fuzzy
 msgid "directory not dumped"
 msgstr "%s: sisaldab vahemälu kataloogi lipikut; ei salvesta"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: fail muutus lugemisel"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: ignoreerin pesa"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: ignoreerin ust"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Hüppan järgmise päiseni"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Kustutan arhiivist mitte-päise"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: ebatõenäoliselt vana ajatempel %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: ajatempel %s on %s sekundit tulevikus"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Ootamatu kooskõlalisuse probleem kataloogi loomisel"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Kataloog nimetati ümber, enne kui sai loetud tema olek"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Taastan jätkuvad failid kui tavalised"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Üritan taastada nimeviiteid viidetena"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Loen %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Ei saa taastada -- fail jätkub teisel volüümil"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "Ootamatu pika nime päis"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Tundmatu failitüüp `%c', taastan tavalise failina"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "Olemasolev %s on uuem või sama kuupäevaga"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Selle faili varundamine ebaõnnestus"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "%s ei õnnestu ümber nimetada %s-ks"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Ületamatu tõrge: lõpetan töö"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Kataloog %s on ümber nimetatud"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Kataloog on ümber nimetatud"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Kataloog on uus"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Vigane ajatempel"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Vigane muutmise aeg (sekundid)"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "Vigane muutmise aeg (nanosekundid)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Vigane seadmenumber"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Vigane i-kirje number"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "Snapshoti faili lugemisel leiti liiga pikk väli"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "Snapshoti failist lugemise viga"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "Ootamatu snapshoti faili lõpp"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "Snapshoti failis on väljal ootamatu väärtus"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "Puudub kirje lõpetaja"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "Inkrementaalse faili vorming on vigane"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr "Mittetoetatud inkrementaalse vormingu versioon: %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr "Vigane taastamise kataloog: eeldasin '%c', sain %#3o"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "Vigane taastamise kataloog: dubleeritud 'X'"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "Vigane taastamise kataloog: tühi nimi 'R' väljal"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "Vigane taastamise kataloog: 'R' ei ole 'T' ees"
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "Vigane taastamise kataloog: tühi nimi 'T' väljal"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr "Vigane taastamise kataloog: ootasin '%c', aga andmed said otsa"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr "Vigane taastamise kataloog: 'X' ei kasutata"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Vormiga %s ei saa ajutist kataloogi luua"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: Ei puhasta kataloogi: stat ebaõnnestus"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: kataloog on teisel seadmel; ei puhasta"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Kustutan %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Ei saa eemaldada"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Jätan vahele"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "blokk %s: ** NULlide blokk **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "blokk %s: ** Faili lõpp **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "blokk %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Tühjad väljad päises kohtadel, kus eeldati numbrit %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
 "Arhiivi kaheksandväärtus %.*s on %s piiridest väljas; eeldan kahe täiendit"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Arhiivi kaheksandväärtus %.*s on %s piiridest väljas"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Arhiiv sisaldab aegunuid base-64 päiseid"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "Arhiivi märgiga base-64 sõne %s on %s piiridest väljas"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Arhiivi base-256 väärtus on %s piiridest väljas"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Arhiiv sisaldab %.*s, eeldati numbrit %s"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Arhiivi väärtus %s on %s piiridest %s..%s väljas"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " viide %s-le\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " tundmatu failitüüp %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Pikk viide--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Pikk nimi--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Volüümi päis--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Jätkub baidilt %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Loon kataloogi:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Annan %s uueks nimeks %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: ei õnnestu ümber nimetada %s-ks"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Nimetan `%s' tagasi `%s'\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Töökataloogi ei õnnestu salvestada"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Ei õnnestu vahetada töökataloogi"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Fail kustutati enne lugemist"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Fail kustutati enne lugemist"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "alamprotsess"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "protsessidevaheline kanal"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr "Failide nimedes on jokkersümbolid. Nende kasutamiseks"
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr "kasutage --wildcars, selle teate saab blokeerida võtmega"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "--no-wildcards."
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Puudub arhiivis"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Nõutud eksemplar puudub arhiivis"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Mõlemad võtmed - `-%s' ja `-%s' eeldavad standard sisendit"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Vigane arhiivi vorming"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "Arhiivi formaat ei toeta GNU laiendusi"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
 msgstr ""
 "Tundmatu kvootimise stiil `%s'. Loendi saate käsuga `%s --quoting-style=help'"
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1294,7 +1343,7 @@ msgstr ""
 "  tar -tvf arhiiv.tar         # Anna arhiiv.tar sisust täielik ülevaade.\n"
 "  tar -xf arhiiv.tar          # Taasta kõik failid arhiivist arhiiv.tar.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1314,86 +1363,79 @@ msgstr ""
 "  nil, existing   nummerdatud kui koopiad on nummerdatud, muidu lihtne\n"
 "  never, simple   tee ainult lihtne koopia\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Põhiline töö:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "näita arhiivi sisukorda"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "taasta failid arhiivist"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "loo uus arhiiv"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "otsi arhiivi ja failisüsteemi erinevusi"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "lisa failid arhiivi lõppu"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "lisa arhiivi ainult failid uuemad kui arhiivis"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "lisa tar failid arhiivi"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "kustuta arhiivist (mitte magnetlindilt!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr "testi arhiivi volüümi märgendit ja lõpeta töö"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Töö täpsustamine:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "tööta aukudega failidega efektiivsemalt"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr "PÕHI[.ALAM]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr "määra aukudega faili vormingu versioon (eeldab võtit --sparse)"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "käsitle vana GNU vormingus inkrementaalset koopiat"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "FAIL"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "käsitle uue GNU vormingu inkrementaalset koopiat"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr ""
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "ära lõpeta loetamatute failide korral veakoodiga"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "N"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1406,116 +1448,120 @@ msgstr ""
 "antud\n"
 "käsureal või võtmega -T. Vaikimisi N on 1."
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "arhiiv on positsioneeritav"
 
-#: src/tar.c:418
+#: src/tar.c:436
+#, fuzzy
+msgid "archive is not seekable"
+msgstr "arhiiv on positsioneeritav"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "Ülekirjutamise juhtimine:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "kontrolli arhiivi peale arhiivi kirjutamist"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "kustuta failid peale arhiveerimist"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "olemasolevaid faile taastamisel üle ei kirjuta"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr "ära kirjuta üle olemasolevaid faile, mis on uuemad kui arhiveeritud"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "kirjuta olemasolevad failid üle"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "kustuta fail enne taastamist"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "kustuta hierarhia enne kataloogi taastamist"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "säilita olemasolevate kataloogide metainfo"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr "taastamisel kirjuta olemasolevate kataloogide metainfo üle (vaikimisi)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Vali väljundvoog:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "taasta failid standardväljundisse"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "KÄSK"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "taasta failid läbi toru teise programmi"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "ignoreeri alamprotsesside lõpetamise koode"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr "käsitle alamprotsesside nullist erinevaid lõpetamise koode veana"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Faili atribuutide käsitlemine:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "kasuta NIMEe kui lisatud failide omanikku"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "kasuta NIMEe kui lisatud failide gruppi"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "KUUP-VÕI-FAIL"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "sea lisatud failide muutmise ajaks KUUP-VÕI-FAIL"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "MUUTUSED"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "kasuta lisatud failidel sümbol moodi MUUTUSED"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "MEETOD"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1525,27 +1571,31 @@ msgstr ""
 "lugemist (METHOD='replace'; vaikimisi) või ei muuda kasutamise aega üldse "
 "(METHOD='system')"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "ära taasta faili muutmise aega"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+#, fuzzy
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr "säilita taastamisel failide omanikud"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+#, fuzzy
+msgid "extract files as yourself (default for ordinary users)"
 msgstr "taasta failid enda õigustes"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "kasuta kasutaja/grupp numbreid"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr "taasta ka info failide õigustest (vaikimisi superkasutaja korral)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
@@ -1553,154 +1603,154 @@ msgstr ""
 "õiguste taastamisel kasuta kasutaja umask väärtust (vaikimisi "
 "tavakasutajatel)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "taasta failid arhiveerimis järjekorras"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "sama, kui -p ja -s"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr "oota muutmise aegade ja õiguste taastamisega taastamise lõpuni"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "katkesta --delay-directory-restore võtme mõju"
 
-#: src/tar.c:509
+#: src/tar.c:529
 #, fuzzy
 msgid "Device selection and switching:"
 msgstr "Seadme valik ja vahetamine:\n"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "ARHIIV"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "kasuta arhiivi faili või seadet ARHIIV"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "arhiivi fail on lokaalne isegi kui sisaldab koolonit"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "kasuta rmt asemel antud käsku"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "kasuta rsh asemel antud käsku"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "määra seade ja tihedus"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "loo/näita/taasta mitme volüümilisi arhiive"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "vaheta peale NUMBER x 1024 baidi kirjutamist linti"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "käivita iga lindi lõpus skript (eeldab võtit -M)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "kasuta/uuenda volüümi numbrit failis FAIL"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Seadme blokkimine:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "BLOKKE"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "BLOKKE x 512 baiti kirjele"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "NUMBER baiti kirjele, 512 kordne"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "ignoreeri null blokke arhiivis (tähistab EOF)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "bloki lugemisel uuesti (4.2BSD torude jaoks)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Arhiivi vormingu valikud:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "VORMING"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "loo arhiiv antud vormingus"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "VORMING on üks järgnevaist:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "vana V7 tar vorming"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "GNU vorming tar <= 1.12 korral"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "GNU tar 1.13.x vorming"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "POSIX 1003.1-1988 (ustar) vorming"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "POSIX 1003.1-2001 (pax) vorming"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "sama, kui pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "sama, kui --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "sama, kui --format=posix"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "võtmesõna[[:]=väärtus][,võtmesõna[[:]=väärtus]...]"
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "pax võtmesõnade kasutamine"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "TEKST"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
@@ -1708,196 +1758,173 @@ msgstr ""
 "loo arhiivi volüümi nimega NIMI. Listingu/taastamise ajal kasuta TEKSTi "
 "otsingumustrina"
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Konfliktsed pakkimisvõtmed"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:597
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "filtreeri arhiiv läbi bzip2"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "filtreeri arhiiv läbi gzipi"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "filtreeri arhiiv läbi compressi"
-
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "filtreeri arhiiv läbi gzipi"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "filtreeri arhiiv läbi gzipi"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "filtreeri arhiiv läbi gzipi"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "PROG"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "filtreeri läbi programmi (peab lubama võtit -d)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Lokaalse faili valik:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr "lisa antud FAIL arhiivi (kasulik, kui faili nimi algab kriipsuga)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "KAT"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "mine kataloogi KAT"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "loe taastatavate või varundatavate failide nimed failist NIMI"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T loeb nullidega lõpetatud nimesid, blokeeri -C"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr "eemalda -T võtmega loetud failinimedest kvootimissümbolid (vaikimisi)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr "ära eemalda -T võtmega loetud failinimedest kvootimissümboleid"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "MUSTER"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "MUSTRI järgi välistatud failid"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "välistavad mustrid on FAILIS"
 
-#: src/tar.c:641
+#: src/tar.c:657
 #, fuzzy
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr "välista kataloogid, mis on märgitud vahemälu jaoks"
 
-#: src/tar.c:644
+#: src/tar.c:660
 #, fuzzy
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "välista kataloogid, mis on märgitud vahemälu jaoks"
 
-#: src/tar.c:647
+#: src/tar.c:663
 #, fuzzy
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "välista kataloogid, mis on märgitud vahemälu jaoks"
 
-#: src/tar.c:649
+#: src/tar.c:665
 #, fuzzy
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr "välista kataloogid, mis on märgitud vahemälu jaoks"
 
-#: src/tar.c:652
+#: src/tar.c:668
 #, fuzzy
 msgid "exclude everything under directories containing FILE"
 msgstr "välista kataloogid, mis on märgitud vahemälu jaoks"
 
-#: src/tar.c:654
+#: src/tar.c:670
 #, fuzzy
 msgid "exclude directories containing FILE"
 msgstr "välista kataloogid, mis on märgitud vahemälu jaoks"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "ära sisene kataloogidesse"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "püsi arhiivi loomise ajal kohalikus failisüsteemis"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "sisene kataloogidesse (vaikimisi)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "ära eemalda faili nimedelt prefiksit `/'"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr "järgi nimeviiteid; arhiveeri ja taasta viidatavad failid"
 
-#: src/tar.c:668
+#: src/tar.c:686
 #, fuzzy
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr "järgi nimeviiteid; arhiveeri ja taasta viidatavad failid"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "KOMPONENT"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "alusta arhiivi liikmest KOMPONENT"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "salvesta ainult failid mis on uuemad kui KUUP-VÕI-FAIL"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "KUUPÄEV"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "võrdle kuupäevi ainult kui andmed on muutunud"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "KONTROLL"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "loo enne eemaldamist varukoopia, vali versioonikontroll"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "SÕNE"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1905,87 +1932,96 @@ msgstr ""
 "varunda enne kustutamist, kasuta uut lõppu (vaikimisi '~', kui pole üle "
 "määratud keskkonnamuutujaga SIMPLE_BACKUP_SUFFIX)"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr "Failide nimede muutmine:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr "eemalda taastamisel failide nimede algusest NUMBER komponenti"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "AVALDIS"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr "kasuta failide nimede muutmiseks sed asendus avaldist"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr "Failinimede otsimine (mõjutab nii kaasamist, kui välistamist):"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr "tõstutundetu"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr "mustrid alustavad faili nime algusest"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr "mustrid toimivad iga / järel (välistamise korral vaikimisi)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr "tõstutundlik otsimine (vaikimisi)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr "kasuta jokkersümboleid (välistamise korral vaikimisi)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "täht-täheline sõne otsimine"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr "jokkerid ei leia '/'"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr "jokkersümbolid leiavad '/' (välistamise korral vaikimisi)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Informatsioon:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "väljasta töödeldavate failide kohta infot"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+#, fuzzy
+msgid "warning control"
+msgstr "Ülekirjutamise juhtimine:"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr "anna töö kohta infot iga NUMBER kirje järel (vaikimisi 10)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "väljasta teade, kui kõike viiteid pole salvestatud"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "SIGNAAL"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -1996,27 +2032,27 @@ msgstr ""
 "väljasta see info, kui saadetakse antud signaal. Lubatud signaalid on: "
 "SIGHUP, SIGQUIT, SIGINT, SIGUSR1 ja SIGUSR2; SIG prefiksi võib ära jätta"
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "väljasta failide muutmise ajad UTC esituses"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "salvesta täiendav info FAILi"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "näita iga teatega ka arhiivi bloki numbrit"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "küsi iga tegevuse kohta kinnitust"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "näita tar vaikeseadeid"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
@@ -2024,86 +2060,94 @@ msgstr ""
 "listingu või taastamise ajal, näita igat kataloogi mis ei vasta "
 "otsingutingimustele"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr "peale teisendamist näita faili või arhiivi nime"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "STIIL"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr "määra nimede kvootimise stiil; lubatud väärtused on toodud allpool"
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "lisaks kvoodi sõnes näidatud sümbolid"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "keela sõnes toodud sümbolite kvootimine"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Ühilduvuse võtmed:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr "loomisel sama kui --old-archive. Taastamisel sama kui --no-same-owner"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Muud võtmed:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "blokeeri potentsiaalselt ohtlikud võtmed"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Korraga ainult üks võtmetest `-Acdtrux'"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Konfliktsed pakkimisvõtmed"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "Tundmatu signaali nimi: %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "Kuupäeva fail puudub"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Kasutan %s tundmatu ajaformaadi %s asemel"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "Võti %s: Käsitlen aega `%s' kui %s"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s: failide nimekiri on juba loetud"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s: loetud faili nimi sisaldab sümbolit nul"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "filtreeri arhiiv läbi gzipi"
+
+#: src/tar.c:1290
+#, fuzzy
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr "Võtmega --quoting-style on lubatud järgnevad argumendid:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2111,158 +2155,169 @@ msgstr ""
 "\n"
 "*See* tar kasutab vaikimisi:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Vigane blokkimisfaktor"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Vigane lindi pikkus"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+#, fuzzy
+msgid "Invalid incremental level value"
+msgstr "Inkrementaalse faili vorming on vigane"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Rohkem kui üks etteantud aeg"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr "Vigane aukudega faili versiooni väärtus"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr "--atime-preserve='system' ei ole sellel platvormil toetatud"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr "--checkpoint väärtus ei ole täisarv"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: Vigane grupp"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Võtmega anti vigane mood"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Vigane number"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Vigane omanik"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Vigane kirje suurus"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Kirje suurus peab olema %d kordne."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Vigane elementide arv"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr "Lubatud on ainult üks --to-command võti"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "Vigane tiheduse argument: %s"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "Tundmatu tihedus: `%c'"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "*See* tar ei toeta võtmeid `-[0-7][lmh]'"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[FAIL]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Vana võti `%c' nõuab argumenti."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "--occurrence ei oma failide nimekirjata mõtet"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "--occurrence ei saa valitud tööre¸iimil kasutada"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Mitme arhiivifaili kasutamine nõuab võtit `-M'"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "--listed-incremental ja --newer ei saa koos kasutada"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+#, fuzzy
+msgid "--level is meaningless without --listed-incremental"
+msgstr "--occurrence ei oma failide nimekirjata mõtet"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: Volüümi märgend on liiga pikk (piirang on %lu baiti)"
 msgstr[1] "%s: Volüümi märgend on liiga pikk (piirang on %lu baiti)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Ei suuda kontrollida mitme volüümilisi arhiive"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Ei saa kontrollida pakitud arhiive"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Ei saa kasutada mitme volüümilisi pakitud arhiive"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "Tihendatud arhiive ei saa ühendada"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "--pax-option saab kasutada ainult POSIX arhiividega"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Ega ikka ei tee küll tühja arhiivi"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Võtmeid `-Aru' ei saa kasutada võtmega `-f -'"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Peab kasutama vähemalt üht võtmetest `-Acdtrux'"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2274,79 +2329,84 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: Fail on %s baiti lühem"
 msgstr[1] "%s: Fail on %s baiti lühem"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "Võtmesõna %s on tundmatu või pole veel realiseeritud"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Number on piiridest väljas: %s"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "Mustrit %s ei saa kasutada"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "Võtmesõna %s ei saa ümber määrata"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "Vigane laiendatud päis: puudub pikkus"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr "Laiendatud päise pikkus on piiridest väljas"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "Laiendatud päise pikkus %*s on piiridest väljas"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr "Vigane laiendatud päis: pikkuse järel puudub tühik"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Vigane laiendatud päis: puudub võrdusmärk"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr "Vigane laiendatud päis: puudub reavahetus"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr "Ignoreerin tundmatud laiendatud päise võtmesõna `%s'"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr "Genereeritud võti/väärtus paar on liiga pikk (võti=%s, pikkus=%s)"
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "Laiendatud päis %s=%s on piiridest %s..%s väljas"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Vigane laiendatud päis: %s=%s"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Vigane laiendatud päis: liigne %s=%s"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr "Vigane laiendatud päis: vigane %s: ootamatu eraldaja %c"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr "Vigane laiendatud päis: vigane %s: veider arv väärtuseid"
@@ -2387,7 +2447,7 @@ msgstr "Kirjutamise kontrollpunkt %u"
 msgid "Read checkpoint %u"
 msgstr "Lugemise kontrollpunkt %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
@@ -2395,84 +2455,90 @@ msgstr ""
 "genfile manipuleerib GNU paxutils testipaketi andmefailidega.\n"
 "VÕTMED on:\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr "Faili loomise võtmed:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "SUURUS"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "Loo määratud suurusega fail"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "Kirjuta standardväljundi asemel faili NIMI"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "Loe failide nimed failist FAIL"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr "-T loeb nullidega lõpetatud nimesid"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr "Täida fail antud mustriga. Muster on 'default' või 'zeros'"
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "Bloki suurus aukudega faili korral"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr "Loo aukudega fail. Järgnev käsurida kirjeldab faili."
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr ""
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 #, fuzzy
 msgid "Seek to the given offset before writing data"
 msgstr "kontrolli arhiivi peale arhiivi kirjutamist"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr "Statistika faili kohta:"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr "Väljasta iga faili kohta stat struktuuri sisu. Vaikimisi VORMING on: "
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr "Sünkroonse täitmise võtmed:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr " [VÕTI...]"
+
+#: tests/genfile.c:165
+#, fuzzy
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 "Täida antud KÄSKLUS. Kasulik võtmetega --checkpoint ja --cut, --append, --"
 "touch"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr "Jõudes kontrollpunkti NUMBER, täida antud tegevus (vt. allpool)"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr "Määra järgmise --touch võtme ajatempel"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr "Esita täidetud kontrollpunktid ja käsu lõpetamise olek"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
@@ -2480,152 +2546,218 @@ msgstr ""
 "Sünkroonse täitmise tegevused. Neid täidetakse, kui saabub --checkpoint "
 "võtmega määratud kontrollpunkt."
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
 "Sea faili suuruseks --length võtmega näidatu (või 0, kui suurust ei antud)"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr "Lisa faili lõppu --length parameetriga näidatud arv baite."
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "Uuenda faili kasutamise ja muutmise ajatempleid"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "Käivita KÄSK"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "Vigane suurus: %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Number on piiridest väljas: %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr "Negatiivne suurus: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "stat(%s) ebaõnnestus"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "Viga `%s' juures numbri parsimisel"
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "Tundmatu kuupäeva vorming"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[ARGUMENDID...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "`%s' ei saa avada"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 #, fuzzy
 msgid "cannot seek"
 msgstr "%s: Ei õnnestu liikuda positsioonile %s"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "faili nimi sisaldab null sümbolit"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr "standard väljundis ei saa aukudega faili luua, kasutage võtit --file"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "vigane mask (`%s' lähedal)"
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr "Tundmatu väli `%s'"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "ei õnnestu seada `%s' aega"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "`%s' ei saa avada"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "Käsk lõpetas töö edukalt\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "Käsk lõpetas veakoodiga %d\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "Käsk katkestati signaaliga %d\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "Käsk peatati signaaliga %d\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "Käsk salvestas mälupildi\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "Käsk katkestas\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "--stat nõuab failinimesid"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "liiga palju argumente"
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: vigane võti -- %c\n"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
 #~ msgstr ""
-#~ "Hoiatus: võtit -I ei toetata; võibolla te pidasite silmas -j või -T?"
+#~ "\n"
+#~ "Teated vigadest saatke palun aadressil <%s>.\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Loen %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Ületamatu tõrge: lõpetan töö"
+
+#~ msgid "suppress this warning."
+#~ msgstr "--no-wildcards."
+
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "filtreeri arhiiv läbi bzip2"
+
+#~ msgid "filter the archive through gzip"
+#~ msgstr "filtreeri arhiiv läbi gzipi"
+
+#~ msgid "filter the archive through compress"
+#~ msgstr "filtreeri arhiiv läbi compressi"
 
 #, fuzzy
-#~ msgid "cancel effect of the previous --transform-links option"
-#~ msgstr "katkesta --delay-directory-restore võtme mõju"
+#~ msgid "filter the archive through lzma"
+#~ msgstr "filtreeri arhiiv läbi gzipi"
+
+#, fuzzy
+#~ msgid "filter the archive through lzop"
+#~ msgstr "filtreeri arhiiv läbi gzipi"
+
+#~ msgid "Input string too long"
+#~ msgstr "Sisendi sõne on liiga pikk"
+
+#~ msgid "Number syntax error"
+#~ msgstr "Numbri süntaksi viga"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Ei saa võtta buhvritele mälu\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Buhvritele ei jätku mälu"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "`%s --help' annab rohkem infot.\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Kasuta: %s [võti]\n"
+#~ "Manipuleeri lindiseadmega, lubades käske teistest protsessidest.\n"
+#~ "\n"
+#~ "  --version  Väljasta versiooniinfo.\n"
+#~ "  --help     Väljasta abiinfo.\n"
+
+#~ msgid "Seek offset error"
+#~ msgstr "Otsimise indeksi viga"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Ootamatu faili lõpp"
 
 #~ msgid "block size"
 #~ msgstr "bloki suurus"
@@ -2638,9 +2770,6 @@ msgstr "liiga palju argumente"
 #~ msgid "--Mangled file names--\n"
 #~ msgstr "--Tükeldatud failinimed--\n"
 
-#~ msgid "Unexpected EOF in mangled names"
-#~ msgstr "Tükeldatud nimedel ootamatu faililõpp"
-
 #~ msgid "Renamed %s to %s"
 #~ msgstr "%s nimetatud %s-ks"
 
@@ -2656,5 +2785,9 @@ msgstr "liiga palju argumente"
 #~ msgid "[.]NUMBER"
 #~ msgstr "[.]NUMBER"
 
+#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgstr ""
+#~ "Hoiatus: võtit -I ei toetata; võibolla te pidasite silmas -j või -T?"
+
 #~ msgid "Error exit delayed from previous errors"
 #~ msgstr "Eelnevad vead ei lõpetanud veel programmi tööd, lõpetan veaga"
index 6792f3fb9b2265492db535e52f147f491f059d0d..9ff2dd930b1d2d7833e203205e231151808c0720 100644 (file)
Binary files a/po/eu.gmo and b/po/eu.gmo differ
index d0de2965703f283f7d8c0f6232827c9ce236b2d7..9987a8e82a80b046f67416e7d821d87fc5769eef 100644 (file)
--- a/po/eu.po
+++ b/po/eu.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tar-1.15.91-eu\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
 "PO-Revision-Date: 2006-12-13 19:52+0100\n"
 "Last-Translator: Mikel Olasagasti <hey_neken@mundurat.net>\n"
 "Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
@@ -18,47 +18,47 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1)\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "%s argumentu baliogabea %s-rentzat"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "%s argumentu anbiguoa %s-rentzat"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Argumentu erabilgarriak:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: %s balioa %s-ren berdina edo txikiagoa da"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: ARGP_HELP_FMT parametroak balio bat behar du"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: ARGP_HELP_FMT parametroa positibo izan behar da"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: ARGP_HELP_FMT parametro ezezaguna"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Zaborra ARGP_HELP_FMT-en: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -66,235 +66,143 @@ msgstr ""
 "Aukera luzeentzat beharrezko edo aukerako argumentuak modu berdinean "
 "beharrezko edo aukerakoak izango dira aukera luzeentzat ere."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Erabilera:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr "  edo: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [AUKERA...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "`%s --help' edo `%s --usage' saiatu argibide gehiagorako.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "Arazoen berri %s-en eman.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Sistema errore ezezaguna"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "laguntza zerrenda hau eman"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "erabilera mezu labur bat eman"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "IZENA"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "programa izen ezarri"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "SEG"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "SEG segundu gelditu (lehenetsia 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "programa bertsioa bistarazi"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(PROGRAMA ERROREA) Ez da bertsioa ezagutzen!?"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: Argumentu gehiegi\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr "(PROGRAMA ERROREA) Aukera ezaguna izan beharko zen!?"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr ""
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: `%s' aukera anbiguoa da\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: `--%s' aukerak ez du argumenturik onartzen\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: `%c%s' aukerak ez du argumenturik onartzen\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: `%s' aukerak argumentu bat behar du\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: `--%s' aukera ezezaguna\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: `%c%s' aukera ezezaguna\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: -- %c legezkanpoko aukera\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: -- %c ekintza baliogabea\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: aukerak -- %c argumentu bat behar du.\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: `-W %s' aukera anbiguoa da\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: `-W %s' aukerak ez du argumenturik onartzen\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "memoria askieza"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, fuzzy, c-format
 msgid "unable to record current working directory"
 msgstr "Ezin da lan direktorioa aldatu"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, fuzzy, c-format
 msgid "failed to return to initial working directory"
 msgstr "Ezin da lan direktorioa gorde"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Ezin da %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Oharra: Ezin da %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Ezin da modua %s-ra aldatu"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Ezin da jabetza uid %lu, gid %lu -ra aldatu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Ezin da %s-ra gogorki lotu"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Irakurketa errorea %s byte-an, byte %lu irakurtzerakoan"
-msgstr[1] "%s: Irakurketa errorea %s byte-an, %lu byte irakurtzerakoan"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Oharra: Irakurketa errorea %s byte-an, byte %lu irakurtzerakoan"
-msgstr[1] "%s: Oharra: Irakurketa errorea %s byte-an, %lu byte irakurtzerakoan"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Ezin da %s-ra seek egin"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Oharra: Ezin da %s-ra seek egin"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Ezin da %s-ra lotura sinbolkoa sortu"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr ""
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr ""
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "`.' partaide izen hutsagatik aldatzen"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "`.' lotura gogor helburu hutsegatik aldatzen"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -308,17 +216,17 @@ msgstr "`.' lotura gogor helburu hutsegatik aldatzen"
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "`"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "'"
 
@@ -328,7 +236,7 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[bB]"
 
@@ -338,38 +246,28 @@ msgstr "^[bB]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[eE]"
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Zerbitzua ez da erabilgarria"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "sarrera estandarra"
-
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "irteera estandarra"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Ezin da urruneko shell-a abiarazi"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -380,19 +278,19 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr ""
@@ -400,7 +298,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -410,7 +308,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -420,7 +318,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -430,7 +328,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -440,7 +338,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -451,7 +349,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -462,7 +360,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -474,180 +372,328 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
-#, c-format
+#: gnu/version-etc.c:247
+#, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
+msgstr "Arazoen berri %s-en eman.\n"
+
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
 "\n"
 "Erroreen berri <%s>-ra eman.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "Sarrera kate luzeegia"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+msgstr ""
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "Zenbaki sintaxi errorea"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Ezin da %s"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Ezin da buffer lekua esleitu\n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Oharra: Ezin da %s"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Ezin da buffer lekua esleitu"
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Ezin da modua %s-ra aldatu"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:101
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "`%s --help' saiatu argibide gehiagorako.\n"
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Ezin da jabetza uid %lu, gid %lu -ra aldatu"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:127
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Ezin da %s-ra gogorki lotu"
+
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Irakurketa errorea %s byte-an, byte %lu irakurtzerakoan"
+msgstr[1] "%s: Irakurketa errorea %s byte-an, %lu byte irakurtzerakoan"
+
+#: lib/paxerror.c:192
+#, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Oharra: Irakurketa errorea %s byte-an, byte %lu irakurtzerakoan"
+msgstr[1] "%s: Oharra: Irakurketa errorea %s byte-an, %lu byte irakurtzerakoan"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Ezin da %s-ra seek egin"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Oharra: Ezin da %s-ra seek egin"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Ezin da %s-ra lotura sinbolkoa sortu"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
 msgstr ""
-"Erabilea: %s [AUKERA]\n"
-"Zinta gailu bat manipulatu, urruneko prozesu baten komandoak onartzen.\n"
-"\n"
-"  --version  Bertsio argibideak eman.\n"
-"  --help     Laguntza hau eman.\n"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "Seek offset errorea"
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr ""
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
-msgid "Seek offset out of range"
-msgstr "Seek offset-a eremuz kanpo"
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "`.' partaide izen hutsagatik aldatzen"
 
-#: rmt/rmt.c:428
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "`.' lotura gogor helburu hutsegatik aldatzen"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Zerbitzua ez da erabilgarria"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "sarrera estandarra"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "irteera estandarra"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
+msgstr ""
+
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Ezin da urruneko shell-a abiarazi"
+
+#: rmt/rmt.c:413
 msgid "Seek direction out of range"
 msgstr "Seek norabidea eremuz kanpo"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:419
+#, fuzzy
+msgid "Invalid seek direction"
+msgstr "Modu baliogabea eman da aukeran"
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Tamaina baliogabea: %s"
+
+#: rmt/rmt.c:433
+msgid "Seek offset out of range"
+msgstr "Seek offset-a eremuz kanpo"
+
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Zinta luzera baliogabea"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Seek offset-a eremuz kanpo"
+
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: Fitxategi amaiera azkarregia\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Fitxategi amaiera azkarregia"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "Ekintza nagusi modua:"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Fitxategi Amaiera Esperogabea"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "ZENBAKIA"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "FITXATEGIA"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "Ezin da `%s' ireki"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "argumentu gehiegi"
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Zabor komandoa"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Honek ez dirudi tar pakete bat"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Idatziriko byte-ak guztira"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "Irakurritako byte-ak guztira"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Ezabaturiko byte-ak guztira: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(tutua)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "balio baliogabea record_size-rentzat"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Ez da fitxategi izenik eman"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Ezin da sarrera/irteera estandar fitxategia egiaztatu"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "Fitxategia konprimiturik dago. %s aukera erabili"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Ezin dira konprimituriko fitxategiak eguneratu"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Zintaren hasieran, uzten"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Errore gehiegi, uzten"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Grabazio tamaina = bloke %lu"
 msgstr[1] "Grabazio tamaina = %lu bloke"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Alineatu gabeko blokea (byte %lu) paketean"
 msgstr[1] "Alineatu gabeko blokea (%lu byte) paketean"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr ""
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr ""
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: bolumen zenbaki baliogabea du"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Bolumen zenbaki gainezkatzea"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "#%d bolumena %s -rako prestatu eta enter sakatu: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "Fitxategi amaiera erabiltzaile erantzuna espero zenean"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "Oharra: Paketea ez dago osaturik"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -658,125 +704,125 @@ msgstr ""
 " q             tar utzi\n"
 " y edo intro  Ekintza jarraitu\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !             Azpishell bat sortu\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?             Zerrenda hau inprimatu\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Ez dago bolumen berririk; uzten.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "Ez da fitxategi izenik ezarri. Berriz saiatu.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "SArrera baliogabea. ? idatzi laguntzarako.\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "%s komandoak huts egin du"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s posibleki bolumen honen jarraipena da: buruak mozturiko izena du"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s ez da bolumen honen jarraipena"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s okerreko tamaina da (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, fuzzy, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Bolumen hau sekuentziatik kanpo dago"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr ""
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "%s bolumena ez da %s-ren pareko"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
 msgstr ""
 "%s: fitxategi izen luzeegia GNU bolumen anitzeko buruan gordetzeko, mozturik"
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
 msgstr ""
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "%lu byte bakarrik irakurri daiteke %lu byte-tatik"
 msgstr[1] "%lu byte bakarrik irakurri daiteke %lu byte-tatik"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Eduki ezberdintasunak"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Esperogabeko Fitxategi amaiaera paketean"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Fixtategi mota ezberdinak"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Modu ezberdinak"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Uid ezberdinak"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Gid ezberdinak"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Eraldaketa data ezberdinak"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Tamaina ezberdinak"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Ez dago %s-ra loturik"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Lotura sinboliko ezberdinak"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Gailu zenbaki ezberdinak"
 
@@ -798,34 +844,34 @@ msgstr ""
 msgid "Verification may fail to locate original files."
 msgstr "Egiaztapenak huts egin dezake jatorrizko fitxategiak kokatzerakoan."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "EGIAZTAPEN AKATSA: buru baliogabe %d aurkitu da"
 msgstr[1] "EGIAZTAPEN AKATSA: %d buru baliogabe aurkitu dira"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr ""
 
-#: src/create.c:67
+#: src/create.c:68
 #, fuzzy, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: katxe direktorioa marka bat du; ez da irauliko"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "%s eremua %s eremutik %s..%s kanpo: %s aldatzen"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "%s balioa %s eremutik %s..%s kanpo dago"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Zortzitar buru negatiboak sortzen"
 
@@ -844,296 +890,282 @@ msgstr "%s: fitxategi izena luzeegia da (ezin da moztu); ez da irauliko"
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: lotura izena luzeegia da; ez da irauliko"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: fitxategia fitxategi sistema ezberdin batetan dago, ez da irauliko"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr ""
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Fitxategi mota ezezaguna; fitxategia alde batetara utziko da"
 
-#: src/create.c:1464
-#, c-format
-msgid "Missing links to %s.\n"
+#: src/create.c:1472
+#, fuzzy, c-format
+msgid "Missing links to %s."
 msgstr "%s-ra lotura falta da.\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: fitxategia ez da aldatu, ez da irauliko"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: fitxategia paketea da, ez da irauliko"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Fitxategia irakurri baino lehen ezabaturik"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 #, fuzzy
 msgid "directory not dumped"
 msgstr "%s: katxe direktorioa marka bat du; ez da irauliko"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: fitxategia aldatu egin da irakurtzen ari zenean"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: socket-a alde batetara utzi da"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: atea alde batetara utzia"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Hurrengoa burura salto egiten"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "paketetik burugabea ezabatzen"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: Sinesgarri izateko zaharregia den denbora marka %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: %s denbora marka %s etorkizunean da"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Esperogabeko inkonsistentziak direktorioa sortzerakoan"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Direktorioa bere egoera atera aurretik berrizendatua izan da"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Alboko fitxategiak fitxategi erregularrak bezala ateratzen"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Lotura sinbolikoak lotura gogor bezala ateratzen saiatzen"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "%s irakurtzen\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Ezin da atera -- paketea beste bolumen baten jarraipena da"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "Buru izen luzera esperogabea"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr ""
 "%s: `%c' fitxategi mota ezezaguna, fitxategi arrunt bat bezala ateratzen"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "Unekoa %s berriagoa edo data berdinekoa da"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Ez da gai fitxategi honen babeskopia egiteko"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "Ezin da %s %s-ra berrizendatu"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Errorea berreskura ezina da: irteten"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Direktorioa %s-tik berrizendatua izan da"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Direktorioa berrizendatua izan da"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Direktorioa berria da"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "denbora marka baliogabea"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Eraldaketa denbora (segundu) baliogabea"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "Eraldaketa denbora (nanosegundu) baliogabea"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "gailu zenbaki baliogabea"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Inodo zenbaki baliogabea"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "Eremu luzeegia snapshot fitxategia irakurtzerakoan"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 #, fuzzy
 msgid "Read error in snapshot file"
 msgstr "Eremu balio esperogabea snapshot fitxategian"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 #, fuzzy
 msgid "Unexpected EOF in snapshot file"
 msgstr "Eremu balio esperogabea snapshot fitxategian"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "Eremu balio esperogabea snapshot fitxategian"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "Gordetze amaiera falta da"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "Fitxategi inkremental formatu okerra"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, fuzzy, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr "Onartugabeko inkremental formatu bertsioa: %d"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr ""
 "Gaizki eratutako iraulketa direktorioa: '%c'espero zen baina %#3o aurkitu da"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "Gaizki eratutako iraulketa direktorioa: 'X' bikoizturik"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "Gaizki eratutako iraulketa direktorioa: izen hutsa 'R'-en"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "Gaizki eratutako iraulketa direktorioa: 'T' ez doa 'R' atzean"
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "Gaizki eratutako iraulketa direktorioa: izen hutsa 'T'-en"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 "Gaizki eratutako iraulketa direktorioa: '%c' espero zen baina data amaiera "
 "aurkitu da"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr "Gaizki eratutako iraulketa direktorioa: 'X' ez da inoiz erabili"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Ezin da aldiroko direktorioa sortu %s txantiloia erabiliaz"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: Ez da direktorioa garbituko: ezin da egoera eskuratu"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: direktorioa gailu ezberdin batetan dago: ez da garbituko"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: %s ezabatzen\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Ezin da ezabatu"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Alde batetara uzten"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr ""
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "%s blokea: ** Fitxategi Amaiera **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "%s blokea: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Zuriunea buruan zenbakizko %s balioa espero zenean"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1141,141 +1173,156 @@ msgstr ""
 "direla pentsatuko da"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Paketearen zortzitar %.*s balioa %s eremutik kanpo dago"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Paketeak zaharkituriko base-64 buruak ditu"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr ""
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr ""
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Paketeak %.*s du zenbakizko %s balioa espero zenean "
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Pakete %s balioa %s eremutik kanpo dago %s.. %s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " %s-ra lotu\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " %s fitxategi mota ezezaguna\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Lotura Luzea--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Izen Luzea--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Bolumen Burua--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--%s byte-an jarraitzen du--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Direktorioa sortzen:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "%s %s-ra berrizendatzen\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Ezin da %s-ra berrizendatu"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "%s %s-ra atzera berrizendatzen\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Ezin da lan direktorioa gorde"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Ezin da lan direktorioa aldatu"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Fitxategia irakurri baino lehen ezabaturik"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Fitxategia irakurri baino lehen ezabaturik"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "ume prozesua"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "prozesu arteko kanala"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+msgid "Pattern matching characters used in file names"
 msgstr ""
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "ohar hau kendu."
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Ez da paketean aurkitu"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr ""
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "`-%s' eta `-%s' aukerek sarrera estandarra behar dute"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Pakete formatu baliogabea"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "GNU ezaugarriak behar dira pakete formatu bateraezinean"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
@@ -1283,7 +1330,7 @@ msgstr ""
 "`%s' markatze estilo ezezaguna. Saiatu `%s --quoting-style=help' zerrenda "
 "eskuratzeko."
 
-#: src/tar.c:336
+#: src/tar.c:347
 #, fuzzy
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
@@ -1314,7 +1361,7 @@ msgstr ""
 "erabili\n"
 "  never, simple   beti babeskopia sinpleak egin\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 #, fuzzy
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
@@ -1346,87 +1393,80 @@ msgstr ""
 "erabili\n"
 "  never, simple   beti babeskopia sinpleak egin\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Ekintza nagusi modua:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "pakete baten edukiak zerrendatu"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "pakete batetako fitxategiak atera"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "pakete berri bat sortu"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "paketea eta fitxategi sistema arteko ezberdintasunak bilatu"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "fitxategiak paketearen amaieran gehitu"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr ""
 "paketean dauden kopiak baino berriagoak diren fitxategiak bakarrik gehitu"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "gehitu tar fitxategiak pakete batetara"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "paketetik ezabatu (ez mag zintetan!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr "pakete bolumen etiketa egiaztatu eta irten"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Ekintza aldagaiak:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "sakabanatutako fitxategiak egoki kudeatu"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr ""
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "GNU basbeskopia inkremenetal formatu zaharra kudeatu"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "FITXATEGIA"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "GNU basbeskopia inkremenetal formatu berria kudeatu"
 
-#: src/tar.c:408
-msgid "do not exit with nonzero on unreadable files"
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
 msgstr ""
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "ZENBAKIA"
+#: src/tar.c:426
+msgid "do not exit with nonzero on unreadable files"
+msgstr ""
 
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1434,148 +1474,156 @@ msgid ""
 "command line or via the -T option; NUMBER defaults to 1"
 msgstr ""
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "paketeak `seek' onartzen du"
 
-#: src/tar.c:418
+#: src/tar.c:436
+#, fuzzy
+msgid "archive is not seekable"
+msgstr "paketeak `seek' onartzen du"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 #, fuzzy
 msgid "Overwrite control:"
 msgstr "Gainidazketa kontrola:\n"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "fitxategia egiaztatzen saiatu idatzi aurretik"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "ezabatu fitxategiak paketera gehitu aurretik"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "ez ordezkatu dauden fitxategiak ateratzerakoan"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 "ez ordezkatu ateratzerakoan dauden fitxategiak paketeko kopiak baino "
 "berriagoak badira"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "gainidatzi dauden fitxategiak ateratzerakoan"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr ""
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr ""
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "dauden direktorioen metadata mantendu"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr "dauden direktorioen metadata gainidatzi ateratzerakoan (lehenetsia)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Irteera korrontea hautatu:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "fitxategiak irteera estandarrera atera"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "KOMANDOA"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "bideratu ateratako fitxategiak beste programa batetara"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "alde batetara utzi semeen irteera kodeak"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr "zero ez diren semeen irteera kodeekin errore bat bezala jokatu"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Fitxategi atributu kudeaketa:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "indartu IZENA jabe bezala gehituriko fitxategientzat"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "indartu IZENA talde bezala gehituriko fitxategientzat"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "DATA-EDO-FITXATEGIA"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "ALDAKETAK"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "indartu (sinbolikoa) modu ALDAKETAK gehituriko lerroentzat"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "METODOA"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
 "place (METHOD='system')"
 msgstr ""
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "ez atera fitxategi eraldaketa data"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+#, fuzzy
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr "jabe berdinaren fitxategiak ateratzen saiatu"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+#, fuzzy
+msgid "extract files as yourself (default for ordinary users)"
 msgstr "atera fitxategiak zure kabuz"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "beti erabili zenbakiak erabiltzaile/talde izenen ordez"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 "fitxategi baimenei buruzko argibideak atera (lehenetsia root "
 "erabiltzailearentzat)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
@@ -1583,444 +1631,430 @@ msgstr ""
 "erabiltzailearen umask-a erabili paketetik baimenak ateratzerakoan "
 "(lehenetsia erabiltzaile arruntentzat)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr ""
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "-p eta -s bikotearen berdina"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr ""
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "--delay-directory-restore aukeraren eragina ezeztatu"
 
-#: src/tar.c:509
+#: src/tar.c:529
 #, fuzzy
 msgid "Device selection and switching:"
 msgstr "Gailu hautapen eta aldaketa:\n"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "PAKETEA"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "pakete fitxategia edo gailu PAKETEA erabili"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "pakete fitxategi lokala da nahiz bi puntu izan"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "Emandako rmt KOMANDOA erabili rmt ordez"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "Urruneko KOMANDOA erabili rsh ordez"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "Gailu eta dentsitatea ezarri"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "sortu/zerrendatu/atera bolumen-anitzeko paketea"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "zinta aldatu ZENBAKIA x 1024 byte idatzi ondoren"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "scipt-a abiarazi zinta bakoitzaren amaieran (-M behar du)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "erabili/eguneratu FITXATEGI bolumen zenbakia"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Gailu blokeak:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "BLOKE"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "BLOKE x 512 byte grabazio bakoitzeko"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "grabazio bakoitzeko byte ZENBAKIA, 512-ren multiploa"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "paketean zeroz betetako blokeak alde batetara utzi"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "irakurri ahala berriz bloke egin (4.2BSD tutuentzat)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Pakete formatu hautapena:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "FORMATUA"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "emandako formatuko pakete bat sortu"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "FORMATUA hauetako bat da:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "V7 tar formatu zaharra"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "GNU formatua tar <= 1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "GNU tar 1.13.x formatua"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "POSIX 1003.1-1988 (ustar) formatua"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "POSIX 1003.1-2001 (pax) formatua"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "pax-en berdina"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "--format=v7-ren berdina"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "--format=posix-ren berdina"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "gakoa[[:]=balioavalue][,gakoa[[:]=balioa]]..."
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr ""
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "TESTUA"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
 msgstr ""
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Elkarjotzen duten konpresio aukerak"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:597
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "fitxategia bzip2 bidez iragazi"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "fitxategia gzip bidez iragazi"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "fitxategia konpresorearen bidez iragazi"
-
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "fitxategia gzip bidez iragazi"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "fitxategia gzip bidez iragazi"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "fitxategia gzip bidez iragazi"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "PROG"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "PROG bidez iragazi (-d onartu behar du)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Fixtategi lokal hautapena:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 "Emandako FITXATEGIA paketera gehitu /Erabilgarri izena asaterisko batez "
 "asten bada)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "DIR"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "DIR direktoriora aldatu"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "ateratzeko edo sortzeko izenak FITXATEGIA-tik eskuratu"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr ""
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr ""
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "PATROIA"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "fixtategiak utzi, PATROIA bezala emandakoak"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "FITXATEGIAN zerrendaturiko patroiak alde batetara utzi"
 
-#: src/tar.c:641
+#: src/tar.c:657
 #, fuzzy
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr "katxe marka duten direktorioak alde batetara utzi"
 
-#: src/tar.c:644
+#: src/tar.c:660
 #, fuzzy
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "katxe marka duten direktorioak alde batetara utzi"
 
-#: src/tar.c:647
+#: src/tar.c:663
 #, fuzzy
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "katxe marka duten direktorioak alde batetara utzi"
 
-#: src/tar.c:649
+#: src/tar.c:665
 #, fuzzy
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr "katxe marka duten direktorioak alde batetara utzi"
 
-#: src/tar.c:652
+#: src/tar.c:668
 #, fuzzy
 msgid "exclude everything under directories containing FILE"
 msgstr "katxe marka duten direktorioak alde batetara utzi"
 
-#: src/tar.c:654
+#: src/tar.c:670
 #, fuzzy
 msgid "exclude directories containing FILE"
 msgstr "katxe marka duten direktorioak alde batetara utzi"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "sahiestu automatikoki direktorioetan zehar jeistea"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "fitxategi sistema lokalean egon paketea sortzerakoan"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "direktorioetan barrena (lehenetsia)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "Ez kendu hasierako  `/' fitxategi izenetatik"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 "lotura sinbolikoak jarraitu; lotzen dituzten fitxategiak irauli eta paketean "
 "sartu"
 
-#: src/tar.c:668
+#: src/tar.c:686
 #, fuzzy
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 "lotura sinbolikoak jarraitu; lotzen dituzten fitxategiak irauli eta paketean "
 "sartu"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "PARTAIDE IZEN"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr ""
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "DATA"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "data eta ordua parekatu data bakarrik aldatzen denean"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "KONTROL"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "babeskopia egin ezabatu aurretik, KONTROL bertsioa hautatu"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "KATEA"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
 msgstr ""
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr "Fitxategi izen eraldaketak:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr ""
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "ESPRESIOA"
 
-#: src/tar.c:689
+#: src/tar.c:707
 #, fuzzy
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr "Sed-en ordezko EXPRESIOA erabili fitxategi izenak eraldatzeko"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr "kasua alde batetara utzi"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr ""
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr ""
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "verbatim kate parekatzea"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr ""
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "irteera informatiboa:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr ""
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+#, fuzzy
+msgid "warning control"
+msgstr "Gainidazketa kontrola:\n"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 "Aurrerapen mezuak bistarazi grabaketa ZENBAKI bakiotzagatik (lehenetsia 10 "
 "da)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "mezu bat inprimatu lotura guztiak ez badira iraultzen"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "SEINALEA"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2028,269 +2062,287 @@ msgid ""
 "accepted"
 msgstr ""
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "eraldaketa datak UTC orduan bistarazi"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "irteera luzea FITXATEGIRA bidali"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "Bloke zenbakia bistarazu pakete bakoitzeko mezu bakoitzagatik"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "berrespena eskatu ekintza bakoitzean"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "tar lehenespenak bistarazi"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr ""
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr "fixtategi edo pakete izenak bistarazi eraldaketaren aurretik"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "ESTILOA"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "Gako karaktere gehigarriak KATE-tik"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "gakoak kendu karaktereentzat KATE-tik"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Bateragarritasun aukerak:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr ""
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Beste aukerak:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "ezgaitu arriskutsu izan daitezken zenbait aukera"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Ezin duzu `-Acdtrux' aukera bat baino gehiago ezarri"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Elkarjotzen duten konpresio aukerak"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "Seinale izen ezezaguna: %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "Data adibide fitxategia ez da aurkitu"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "%s %s data formatu ezezagunagatik aldatzen"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr ""
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s: fitxategi zerrenda irakurria dagoeneko"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr ""
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "fitxategia gzip bidez iragazi"
+
+#: src/tar.c:1290
+#, fuzzy
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr "--quoting-style-entzat balio erabilgarriak:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
 msgstr ""
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Blokeo faktore baliogabea"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Zinta luzera baliogabea"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+#, fuzzy
+msgid "Invalid incremental level value"
+msgstr "Fitxategi inkremental formatu okerra"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Atari data bat baino gehiago"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr ""
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr "--atime-preserve='system' ez da onartzen plataforma honetan"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr "--checkpoint balioa ez da zenbaki oso bat"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: Talde baliogabea"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Modu baliogabea eman da aukeran"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Zenbaki baliogabea"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Jabe baliogabea"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Grabazio tamaina baliogabea"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Grabaszio tamaina %d-ren multiplo bat izan behar da."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Elementu kopuru baliogabea"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr "--to-command aukera bat bakarrik onartzen da"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "Gaizki eratutako dentsitate argumentua: %s"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "Dentsitate Ezezaguna: `%c'"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr " `-[0-7][lmh]' aukerak ez dira onartzen tar *honetan*"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[FITXATEGIA]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "`%c' zaharkituriko aukerak argumentu bat behar du"
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr ""
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr ""
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Pakete fitxategi anitzentzat `-M' aukera erabili behar da"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Ezin dira --listed-incremental eta --newer batera erabili"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr ""
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: Bolumen etiketa luzeegia da (muga %lu byte da)"
 msgstr[1] "%s: Bolumen etiketa luzeegia da (muga %lu byte da)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Ezin dira bolumen-anitzeko paketeak egiaztatu"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Ezin dira konprimituriko fitxategiak egiaztatu"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Ezin dira bolumen anitzeko konprimituriko paketeak erabaili"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "Ezin dira konprimituriko paketeak kateatu"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "--pax-option POSIX paketeekin bakarrik erabili daiteke"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr ""
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr " `-Aru' aukerak bateraezinak dira `-f -' rekin"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Behintzat `-Acdtrux' aukeretako bat ezarri behar duzu"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2302,81 +2354,86 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "%s gakoa ezezaguna da edo ez dago inplementaturik oraindik"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Denbora marka eremuz kanpo dago"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "%s patroia ezin da erabili"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "%s gakoa ezin da gainidatzi"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "Gaizki eratutako buru luzapena: luzera falta da"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 #, fuzzy
 msgid "Extended header length is out of allowed range"
 msgstr " %*s buru luzapen luzera eremuz kanpo dago"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr " %*s buru luzapen luzera eremuz kanpo dago"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr "Gaizki eratutako buru luzapena: luzera ondoren hutsunea falta da"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Gaizki eratutako buru luzapena: berdin ikurra falta da"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr "Gaizki eratutako buru luzapena: lerro berria falta da"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr "alde batetara utzi gako buru luzapen ezezaguna `%s'"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "buru luzapena %s=%s eremuz kanpo dago %s..%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Gaizki eratutako buru luzapena: baliogabea %s=%s"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Gaizki eratutako buru luzapena: gehiegizkoa %s=%s"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 "Gaizki eratutako buru luzapena: %s baliogabea: %c mugatzaile esperodageba"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr "Gaizki eratutako buru luzapena: %s baliogabea: balio kopuru bitxia"
@@ -2417,244 +2474,317 @@ msgstr "Idazketa %u egiaztapen puntua"
 msgid "Read checkpoint %u"
 msgstr "Irakurketa %u egiaztapen puntua"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
 msgstr ""
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr "Pakete sortze aukerak:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "TAMAINA"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "Emandako TAMAINAko paketea sortu"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "Fitxategi IZENEAN idatzi irteera estandarren ordez"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "Fitxategi izenak PAKETEtik irakurri"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr ""
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "Bloke tamaina fitxategi sakabanatuentzat"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 "Fitxategi sakabanatuak sortu. Komanod lerroaren besteak fitxategi mapa dakar."
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr ""
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 #, fuzzy
 msgid "Seek to the given offset before writing data"
 msgstr "fitxategia egiaztatzen saiatu idatzi aurretik"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr "Fixtategi estatistika aukerak:"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 "Eduki eta egitura estatusa inprimatu emandako fitxategi bakoiztarentzat. "
 "Lehenetsiriko FORMATUA: "
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr "Sinkronizatutako exekuzio aukerak:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr " [AUKERA...]"
+
+#: tests/genfile.c:165
+#, fuzzy
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 "Emandako KOMANDOA exekutatu. Erabilgarri --checkpoint eta hauetako batekin; "
 "--cut, --append, --touch"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr "Ezarri data hurrengo --touch aukerarentzat"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "FITXATEGIAREN irakurketa eta eraldaketa denborak aldatu"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "KOMANDOA exekutatu"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "Tamaina baliogabea: %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, fuzzy, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Inodo zenbakia eremuz kanpo dago"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, fuzzy, c-format
 msgid "Negative size: %s"
 msgstr "Tamaina baliogabea: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "stat(%s) -ek huts egin du"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "Errorea zenbakia analizatzean hemendi gertu: `%s'"
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "Data formatu ezezaguna"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[ARG...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "Ezin da `%s' ireki"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 #, fuzzy
 msgid "cannot seek"
 msgstr "%s: Ezin da %s-ra seek egin"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "fitxategia izenak karaktere baliogabea du"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 "ezin dira sakabanaturiko fitxategiaksortu irteera estandarrean. --file "
 "erabili"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "maskara baliogabea (`%s'-etik gertu)"
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr "`%s' eremu ezezaguna"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "ezin da `%s'-ren denbora ezarri"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "Ezin da `%s' ireki"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "Komandoa behar bezala irten da\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "Komandoa %d egoerarekin huts egin du\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "Komandoa %d seinalearekin amaitu da\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "Komandoa %d seinalearekin geratu da\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "Komando iraulketa nagusia\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "Komandoa amaitua\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "--stat -ek fitxategi izenak behar ditu"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "argumentu gehiegi"
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: -- %c legezkanpoko aukera\n"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
-#~ msgstr "Oharra: -l aukera ez da onartzen; agian -j edo -T egin nahi zenuen?"
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Erroreen berri <%s>-ra eman.\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "%s irakurtzen\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Errorea berreskura ezina da: irteten"
+
+#~ msgid "suppress this warning."
+#~ msgstr "ohar hau kendu."
+
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "fitxategia bzip2 bidez iragazi"
+
+#~ msgid "filter the archive through gzip"
+#~ msgstr "fitxategia gzip bidez iragazi"
+
+#~ msgid "filter the archive through compress"
+#~ msgstr "fitxategia konpresorearen bidez iragazi"
+
+#, fuzzy
+#~ msgid "filter the archive through lzma"
+#~ msgstr "fitxategia gzip bidez iragazi"
 
 #, fuzzy
-#~ msgid "cancel effect of the previous --transform-links option"
-#~ msgstr "--delay-directory-restore aukeraren eragina ezeztatu"
+#~ msgid "filter the archive through lzop"
+#~ msgstr "fitxategia gzip bidez iragazi"
+
+#~ msgid "Input string too long"
+#~ msgstr "Sarrera kate luzeegia"
+
+#~ msgid "Number syntax error"
+#~ msgstr "Zenbaki sintaxi errorea"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Ezin da buffer lekua esleitu\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Ezin da buffer lekua esleitu"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "`%s --help' saiatu argibide gehiagorako.\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Erabilea: %s [AUKERA]\n"
+#~ "Zinta gailu bat manipulatu, urruneko prozesu baten komandoak onartzen.\n"
+#~ "\n"
+#~ "  --version  Bertsio argibideak eman.\n"
+#~ "  --help     Laguntza hau eman.\n"
+
+#~ msgid "Seek offset error"
+#~ msgstr "Seek offset errorea"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Fitxategi amaiera azkarregia"
 
 #~ msgid "block size"
 #~ msgstr "bloke tamaina"
@@ -2664,9 +2794,6 @@ msgstr "argumentu gehiegi"
 #~ msgstr[0] "%s: Irakurketa errorea %s byte-an, byte %lu irakurtzerakoan"
 #~ msgstr[1] "%s: Irakurketa errorea %s byte-an, %lu byte irakurtzerakoan"
 
-#~ msgid "Time stamp out of range"
-#~ msgstr "Denbora marka eremuz kanpo dago"
-
 #~ msgid "Modification time (seconds) out of range"
 #~ msgstr "Eraldaketa denbora (segundu) eremuz kanpo dago"
 
@@ -2679,9 +2806,6 @@ msgstr "argumentu gehiegi"
 #~ msgid "Error reading time stamp"
 #~ msgstr "Errorea denbora marka irakurtzerakoan"
 
-#~ msgid "Unexpected EOF"
-#~ msgstr "Fitxategi Amaiera Esperogabea"
-
 #~ msgid "--Mangled file names--\n"
 #~ msgstr "--Kudeatutako fitxategi izenak--\n"
 
@@ -2703,5 +2827,8 @@ msgstr "argumentu gehiegi"
 #~ msgid "[.]NUMBER"
 #~ msgstr "[.]ZENBAKIA"
 
+#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgstr "Oharra: -l aukera ez da onartzen; agian -j edo -T egin nahi zenuen?"
+
 #~ msgid "Error exit delayed from previous errors"
 #~ msgstr "Errore irteera aurreko erroreak direla eta"
index 1bd48827d66959f357f39005b2fa9d1071161b09..900159bd7648e40d61075be6b582daffd65478a7 100644 (file)
Binary files a/po/fi.gmo and b/po/fi.gmo differ
index 5f781904dced4cf734c8d31099413fc61118cfd9..3ed900d66499a71c14eac5051057f716cb5554bf 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tar 1.16.1\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
 "PO-Revision-Date: 2006-12-09 18:58+0200\n"
 "Last-Translator: Lauri Nurmi <lanurmi@iki.fi>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
@@ -15,47 +15,47 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "argumentti %s on virheellinen %s:lle"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "argumentti %s on moniselitteinen %s:lle"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Kelvolliset argumentit ovat:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr ""
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: ARGP_HELP_FMT-parametri vaatii arvon"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: ARGP_HELP_FMT-parametrin on oltava positiivinen"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: Tuntematon ARGP_HELP_FMT-parametri"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Roskaa ARGP_HELP_FMT:ssä: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -63,238 +63,143 @@ msgstr ""
 "Pitkien valitsinten pakolliset tai valinnaiset argumentit ovat pakollisia "
 "tai valinnaisia myös vastaaville lyhyille."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Käyttö:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr "  tai: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [VALITSIN...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Komennot ”%s --help” ja ”%s --usage” antavat lisää tietoa.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "Ilmoita ohjelmistovioista (englanniksi) osoitteeseen %s.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Tuntematon järjestelmävirhe"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "näytä tämä ohje"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "näytä lyhyt käyttöohje"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "NIMI"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr ""
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr ""
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr ""
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "näytä ohjelman versio"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr ""
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: Liian monta argumenttia\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr ""
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr ""
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: valitsin ”%s” on moniselitteinen\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: valitsin ”--%s” ei salli argumenttia\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: valitsin ”%c%s” ei salli argumenttia\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: valitsin ”%s” vaatii argumentin\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: tunnistamaton valitsin ”--%s”\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: tunnistamaton valitsin ”%c%s”\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: virheellinen valitsin -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: virheellinen valitsin -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: valitsin vaatii argumentin -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: valitsin ”-W %s” on moniselitteinen\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: valitsin ”-W %s” ei salli argumenttia\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "muisti lopussa"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, fuzzy, c-format
 msgid "unable to record current working directory"
 msgstr "Työhakemistoa ei voi vaihtaa"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, fuzzy, c-format
 msgid "failed to return to initial working directory"
 msgstr "Työhakemistoa ei voi tallentaa"
 
-# Onpa taas NIIN hyvin lokalisoitavissa tämä.
-# Käytännössä saattaa esiintyä esim. muodossa 
-# "tar: Cannot mkfifo: File exists"
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Toimintoa %s ei voi suorittaa"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Varoitus: Toimintoa %s ei voi suorittaa"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Oikeuksien muuttaminen tilaan %s ei onnistu"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Tiedoston omistusta ei voi muuttaa arvoon uid=%lu, gid=%lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Kovaa linkkiä tiedostoon %s ei voi luoda"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Lukuvirhe tavun %s kohdalla luettaessa %lu tavua"
-msgstr[1] "%s: Lukuvirhe tavun %s kohdalla luettaessa %lu tavua"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Varoitus: Lukuvirhe tavun %s kohdalla luettaessa %lu tavua"
-msgstr[1] "%s: Varoitus: Lukuvirhe tavun %s kohdalla luettaessa %lu tavua"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Siirtyminen kohtaan %s ei onnistu"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Varoitus: Siirtyminen kohtaan %s ei onnistu"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Tiedostoon %s ei voida luoda symlinkkiä"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Kirjoitettiin vain %lu tavua %lu tavusta"
-msgstr[1] "%s: Kirjoitettiin vain %lu tavua %lu tavusta"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Poistetaan ”%s” tiedostonimien alusta"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Poistetaan ”%s” kovien linkkien kohdenimien alusta"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Korvataan ”.” tyhjällä tiedostonimellä"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Korvataan ”.” tyhjällä kovan linkin kohteella"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -308,17 +213,17 @@ msgstr "Korvataan ”.” tyhjällä kovan linkin kohteella"
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "”"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "”"
 
@@ -328,7 +233,7 @@ msgstr "”"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[kKyY]"
 
@@ -338,38 +243,28 @@ msgstr "^[kKyY]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[eEnN]"
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Palvelu ei ole käytettävissä"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "vakiosyöte"
-
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "vakiotuloste"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Etäkuorta ei voi käynnistää"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -380,19 +275,19 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, fuzzy, c-format
 msgid "Written by %s.\n"
 msgstr "Kirjoittanut François Pinard."
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, fuzzy, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Kirjoittanut François Pinard."
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, fuzzy, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Kirjoittanut François Pinard."
@@ -400,7 +295,7 @@ msgstr "Kirjoittanut François Pinard."
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -410,7 +305,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -420,7 +315,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -430,7 +325,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -440,7 +335,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -451,7 +346,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -462,7 +357,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -474,184 +369,334 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
-#, c-format
+#: gnu/version-etc.c:247
+#, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
+msgstr "Ilmoita ohjelmistovioista (englanniksi) osoitteeseen %s.\n"
+
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
 "\n"
 "Ohjelmistovioista voi ilmoittaa (englanniksi) osoitteeseen\n"
 "<%s>.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr ""
+# Onpa taas NIIN hyvin lokalisoitavissa tämä.
+# Käytännössä saattaa esiintyä esim. muodossa 
+# "tar: Cannot mkfifo: File exists"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Toimintoa %s ei voi suorittaa"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Varoitus: Toimintoa %s ei voi suorittaa"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Puskuritilaa ei voi varata\n"
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Oikeuksien muuttaminen tilaan %s ei onnistu"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Puskuritilaa ei voi varata"
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Tiedoston omistusta ei voi muuttaa arvoon uid=%lu, gid=%lu"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:127
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Komento ”%s --help” antaa lisää tietoa.\n"
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Kovaa linkkiä tiedostoon %s ei voi luoda"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:179 lib/paxerror.c:211
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Lukuvirhe tavun %s kohdalla luettaessa %lu tavua"
+msgstr[1] "%s: Lukuvirhe tavun %s kohdalla luettaessa %lu tavua"
+
+#: lib/paxerror.c:192
+#, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Varoitus: Lukuvirhe tavun %s kohdalla luettaessa %lu tavua"
+msgstr[1] "%s: Varoitus: Lukuvirhe tavun %s kohdalla luettaessa %lu tavua"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Siirtyminen kohtaan %s ei onnistu"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Varoitus: Siirtyminen kohtaan %s ei onnistu"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Tiedostoon %s ei voida luoda symlinkkiä"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Kirjoitettiin vain %lu tavua %lu tavusta"
+msgstr[1] "%s: Kirjoitettiin vain %lu tavua %lu tavusta"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Poistetaan ”%s” tiedostonimien alusta"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Poistetaan ”%s” kovien linkkien kohdenimien alusta"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Korvataan ”.” tyhjällä tiedostonimellä"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Korvataan ”.” tyhjällä kovan linkin kohteella"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Palvelu ei ole käytettävissä"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "vakiosyöte"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "vakiotuloste"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Käyttö: %s [VALITSIN]\n"
-"Käsittele nauha-asemaa, hyväksyen komentoja etäprosessilta.\n"
-"\n"
-"  --version  Näytä versiotiedot.\n"
-"  --help     Näytä tämä ohje.\n"
 
-#: rmt/rmt.c:397
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Etäkuorta ei voi käynnistää"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Siirtymän suunta sallitun välin ulkopuolella"
+
+#: rmt/rmt.c:419
 #, fuzzy
-msgid "Seek offset error"
-msgstr "Siirtymä sallitun välin ulkopuolella"
+msgid "Invalid seek direction"
+msgstr "Valitsimelle annettiin virheellinen tila"
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Virheellinen koko: %s"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Siirtymä sallitun välin ulkopuolella"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Siirtymän suunta sallitun välin ulkopuolella"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Virheellinen nauhan pituus"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Siirtymä sallitun välin ulkopuolella"
+
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: Ennenaikainen tiedoston loppu\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Ennenaikainen tiedoston loppu"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "Päätoimintatila:"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Odottamaton tiedoston loppu arkistossa"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "MÄÄRÄ"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "TIED"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "%s: Siirtyminen kohtaan %s ei onnistu"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "liian monta argumenttia"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Roskakomento"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Tämä ei näytä tar-arkistolta"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Kirjoitettuja tavuja yhteensä"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr ""
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Poistettuja tavuja yhteensä: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(putki)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Virheellinen arvo kentälle record_size"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Arkiston nimeä ei ole annettu"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Vakiosyötteessä/tulosteessa olevaa arkistoa ei voi varmistaa"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "Arkisto on tiivistetty. Käytä valitsinta %s"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Pakattuja arkistoja ei voi päivittää"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Nauhan alussa, lopetetaan"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Liian monta virhettä, lopetetaan"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Tietueen koko = %lu lohko"
 msgstr[1] "Tietueen koko = %lu lohkoa"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Kohdistamaton lohko (%lu tavu) arkistossa"
 msgstr[1] "Kohdistamaton lohko (%lu tavua) arkistossa"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr ""
 "Arkistossa ei voi siirtyä taaksepäin; sitä ei ehkä voi lukea ilman "
 "valitsinta -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek ei pysähtynyt tietueen rajalle"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: sisältää virheellisen arkiston osan järjestysnumeron"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Arkisto-osan järjestysnumeron ylivuoto"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Valmistele osa #%d arkistolle %s ja paina return: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "Tiedoston loppu odotetun käyttäjän syötteen sijaan"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "VAROITUS: Arkisto on epätäydellinen"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -663,67 +708,67 @@ msgstr ""
 " q             Keskeytä tar\n"
 " y tai rivinv. Jatka suoritusta\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !             Käynnistä alikuori\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?             Näytä tämä lista\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Ei uutta arkiston osaa, poistutaan.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "Tiedostonimeä ei annettu. Yritä uudelleen.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr ""
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "Komento %s epäonnistui"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr ""
 "%s jatkuu mahdollisesti tällä arkiston osalla: otsake sisältää typistetyn "
 "nimen"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s ei jatku tällä arkiston osalla"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s on väärän kokoinen (%s ≠ %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, fuzzy, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Tämä arkiston osa ei ole järjestyksessä"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Arkistoa ei ole nimetty täsmää nimiöön %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Arkiston osa %s ei täsmää nimiöön %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
@@ -731,61 +776,61 @@ msgstr ""
 "%s: tiedostonimi on liian pitkä tallennettavaksi moniosaisen GNU-arkiston "
 "otsakkeeseen; nimi typistetty"
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 #, fuzzy
 msgid "write did not end on a block boundary"
 msgstr "rmtlseek ei pysähtynyt tietueen rajalle"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Voitiin lukea vain %lu tavua %lu tavusta"
 msgstr[1] "Voitiin lukea vain %lu tavua %lu tavusta"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Sisällöt eroavat"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Odottamaton tiedoston loppu arkistossa"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Tiedoston tyyppi eroaa"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Tila eroaa"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "UID eroaa"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "GID eroaa"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Muutosaika eroaa"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Koko eroaa"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Ei ole linkitetty tiedostoon %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Symlinkki eroaa"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Laitenumero eroaa"
 
@@ -808,34 +853,34 @@ msgstr "Arkisto sisältää tiedostonimiä, joiden etuliitteet on poistettu."
 msgid "Verification may fail to locate original files."
 msgstr "Tarkastus ei ehkä löydä alkuperäisiä tiedostoja."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "TARKASTUSVIRHE: havaittu %d virheellinen otsake"
 msgstr[1] "TARKASTUSVIRHE: havaittu %d virheellistä otsaketta"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "Yksinäinen nollalohko kohdassa %s"
 
-#: src/create.c:67
+#: src/create.c:68
 #, fuzzy, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: näyttää välimuistihakemistolta, ei lisätä"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "arvo %s on sallitun %s-välin %s..%s ulkopuolella, korvataan arvolla %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "arvo %s on sallitun %s-välin %s..%s ulkopuolella"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Luodaan otsakkeet negatiivisilla oktaaleilla"
 
@@ -854,294 +899,280 @@ msgstr "%s: tiedostonimi on liian pitkä (ei voida jakaa), ei lisätä"
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: linkin nimi on liian pitkä, ei lisätä"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: Tiedosto kutistui %s tavun verran, tasataan nollilla"
 msgstr[1] "%s: Tiedosto kutistui %s tavun verran, tasataan nollilla"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: tiedosto ei ole samalla tiedostojärjestelmällä, ei lisätä"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr ""
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Tuntematon tiedostotyyppi, tiedostoa ei huomioida"
 
-#: src/create.c:1464
-#, c-format
-msgid "Missing links to %s.\n"
+#: src/create.c:1472
+#, fuzzy, c-format
+msgid "Missing links to %s."
 msgstr "Puuttuvat linkit tiedostoon %s.\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: tiedosto on muuttumaton, ei lisätä"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: tiedosto on arkistossa, ei lisätä"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Tiedosto oli poistettu ennen sen lukemista"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 #, fuzzy
 msgid "directory not dumped"
 msgstr "%s: näyttää välimuistihakemistolta, ei lisätä"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: tiedosto muuttui lukemisen aikana"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: pistoketta ei huomioida"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: ovea ei huomioida"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Siirrytään seuraavaan otsakkeeseen"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Poistetaan epäotsake arkistosta"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: epätodennäköisen vanha aikaleima %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: aikaleima %s on %s sekuntia tulevaisuudessa"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Odottamaton ristiriita luotaessa hakemistoa"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Hakemisto nimettiin uudelleen ennen kuin sen tilaa voitiin purkaa"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Puretaan jatkuvat tiedostot normaaleiksi tiedostoiksi"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Yritetään purkaa symboliset linkit koviksi linkeiksi"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Luetaan %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Ei voi purkaa -- tiedosto on jatkoa toisesta arkiston osasta"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 #, fuzzy
 msgid "Unexpected long name header"
 msgstr "Odottamaton tiedoston loppu sovitetuissa nimissä"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Tuntematon tiedostotyyppi ”%c”, purettiin normaaliksi tiedostoksi"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "Nykyinen %s on uudempi tai yhtä vanha"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Tätä tiedostoa ei voitu varmuuskopioida"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, fuzzy, c-format
 msgid "Cannot rename %s to %s"
 msgstr "%s: Uudelleennimeäminen nimelle %s ei onnistu"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Virhe ei ole korjattavissa, poistutaan nyt"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Hakemisto %s on nimetty uudelleen"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Hakemisto on nimetty uudelleen"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Hakemisto on uusi"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Virheellinen aikaleima"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Virheellinen muutosaika (sekunnit)"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "Virheellinen muutosaika (nanosekunnit)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Virheellinen laitenumero"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Virheellinen i-solmun numero"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr ""
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 #, fuzzy
 msgid "Unexpected EOF in snapshot file"
 msgstr "Odottamaton tiedoston loppu arkistossa"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr ""
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr ""
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr ""
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr ""
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr ""
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 #, fuzzy
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "Kelvoton tiheysargumentti: ”%s”"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr ""
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 #, fuzzy
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "Kelvoton tiheysargumentti: ”%s”"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr ""
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Väliaikaishakemiston luominen %s-mallia käyttäen ei onnistu"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: Ei poisteta hakemistoa: stat ei onnistu"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: hakemisto on eri laitteella, ei poisteta"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Poistetaan %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Ei voi poistaa"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Jätetään pois"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "lohko %s: ** NUL-lohko **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "lohko %s: ** Tiedoston loppu **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "lohko %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Tyhjiä merkkejä otsakkeessa, odotettiin numeerista %s-arvoa"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1149,151 +1180,168 @@ msgstr ""
 "kahden komplementiksi"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Arkiston oktaaliarvo %.*s on sallitun %s-välin ulkopuolella"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Arkisto sisältää käytöstä poistuvia base-64-otsakkeita"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr ""
 "Arkiston etumerkillinen base-64-merkkijono %s on sallitun %s-välin "
 "ulkopuolella"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Arkiston base-256-arvo on sallitun %s-välin ulkopuolella"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Arkisto sisältää merkkijonon %.*s, odotettiin numeerista %s-arvoa"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Arkiston arvo %s on sallitun %s-välin %s..%s ulkopuolella"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " linkki tiedostoon %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " tuntematon tiedostotyyppi %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Pitkä linkki--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Pitkä nimi--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Arkiston osan otsake--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Jatkuu tavusta %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Luodaan hakemisto:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Nimetään uudelleen %s -> %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Uudelleennimeäminen nimelle %s ei onnistu"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Nimetään %s takaisin nimelle %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Työhakemistoa ei voi tallentaa"
 
-#: src/misc.c:621
-msgid "Cannot change working directory"
-msgstr "Työhakemistoa ei voi vaihtaa"
+#: src/misc.c:675
+msgid "Cannot change working directory"
+msgstr "Työhakemistoa ei voi vaihtaa"
+
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Tiedosto oli poistettu ennen sen lukemista"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Tiedosto oli poistettu ennen sen lukemista"
 
-#: src/misc.c:711
+#: src/misc.c:795
 msgid "child process"
 msgstr "lapsiprosessi"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "prosessienvälinen kanava"
 
 # ... ja sen pitää päätyä kääntäjien ongelmaksi?
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr "Tiedostonimissä on käytetty jokerimerkkejä. Käytä"
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr "valitsinta --wildcards täsmäyksen käyttöön ottamiseksi, tai"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "--no-wildcards tämän varoituksen vaientamiseksi."
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Ei löytynyt arkistosta"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Vaadittua esiintymää ei löytynyt arkistosta"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Kumpikin valitsimista ”-%s” ja ”-%s” käyttää vakiosyötettä"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Virheellinen arkistomuoto"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr ""
 "Haluttiin käyttää GNU-ominaisuuksia yhteensopimattoman arkistomuodon kanssa"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
 msgstr ""
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1311,7 +1359,7 @@ msgstr ""
 "  %s -tvf arkisto.tar          # Listaa kaikki arkisto.tar:in tiedostot.\n"
 "  %s -xf arkisto.tar           # Pura kaikki tiedostot arkisto.tar:ista.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1332,86 +1380,79 @@ msgstr ""
 "                  muuten yksinkertaisia\n"
 "  never, simple   tee aina yksinkertaisia varmuuskopioita\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Päätoimintatila:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "listaa arkiston sisältö"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "pura tiedostoja arkistosta"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "luo uusi arkisto"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "etsi arkiston ja tiedostojärjestelmän väliset erot"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "lisää tiedostoja arkiston loppuun"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "lisää vain arkistokopiota uudemmat tiedostot"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "lisää tar-tiedostoja arkistoon"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "poista tiedostoja arkistosta (ei toimi magneettinauhoilla!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr ""
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Toimintovalinnat:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "käsittele harvat tiedostot tehokkaasti"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr ""
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "käsittele vanha GNU-muotoinen lisääntyvä varmuuskopio"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "TIED"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "käsittele uusi GNU-muotoinen lisääntyvä varmuuskopio"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr ""
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "jatka lukukelvottomista tiedostoista huolimatta"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "MÄÄRÄ"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1424,299 +1465,308 @@ msgstr ""
 "annettu komentirivillä tai -T-valitsimella; oletusMÄÄRÄ on 1"
 
 # Muualla seek on siirtymistä...
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "arkisto on selattava"
 
-#: src/tar.c:418
+# Muualla seek on siirtymistä...
+#: src/tar.c:436
+#, fuzzy
+msgid "archive is not seekable"
+msgstr "arkisto on selattava"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr ""
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "yritä varmistaa arkisto kirjoittamisen jälkeen"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "poista tiedostot arkistoon lisäämisen jälkeen"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "älä korvaa olemassaolevia tiedostoja purettaessa"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 "älä korvaa olemassaolevia tiedostoja, jotka ovat arkistokopioitaan uudempia"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "ylikirjoita olemassaolevat tiedostot purettaessa"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "poista jokainen tiedosto ennen sen päälle purkamista"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "tyhjennä rakenne ennen hakemiston purkamista"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "säilytä olemassaolevien hakemistojen metatiedot"
 
-#: src/tar.c:446
+#: src/tar.c:466
 #, fuzzy
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr "ylikirjoita olemassaolevat tiedostot purettaessa"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Valitse tulostusvirta:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "pura tiedostot vakiotulosteeseen"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "KOMENTO"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "putkita puretut tiedostot toiselle ohjelmalle"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "jätä lapsiprosessien paluuarvot huomiotta"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr "käsittele lapsiprosessien nollasta poikkeavat paluuarvot virheinä"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Tiedostojen ominaisuuksien käsittely:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "pakota NIMI lisättyjen tiedostojen omistajaksi"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "pakota NIMI lisättyjen tiedostojen ryhmäksi"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "PÄIVÄYS-TAI-TIED"
 
-#: src/tar.c:473
+#: src/tar.c:493
 #, fuzzy
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "tallenna vain PÄIVÄYS-TAI-TIEDostoa uudemmat tiedostot"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "MUUTOS"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "pakota (symbolinen) tila MUUTOS lisätyille"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr ""
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
 "place (METHOD='system')"
 msgstr ""
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "älä pura tiedoston muutosaikaa"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+#, fuzzy
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr "yritä purkaa tiedostot samalla omistajuudella"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+#, fuzzy
+msgid "extract files as yourself (default for ordinary users)"
 msgstr "pura tiedostot itsenäsi"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "käytä aina numeroita käyttäjän/ryhmän nimissä"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
 msgstr ""
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "lajittele purettavat tiedostonimet täsmäämään arkistoon"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "sama kuin -p ja -s yhdessä"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr ""
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr ""
 
-#: src/tar.c:509
+#: src/tar.c:529
 #, fuzzy
 msgid "Device selection and switching:"
 msgstr "Laitteen valinta ja vaihtaminen:\n"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "ARKISTO"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "käytä arkistotiedostoa tai -laitetta ARKISTO"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "arkisto on paikallinen vaikka nimessä olisi kaksoispiste"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "käytä rmt-KOMENTOA rmt:n sijaan"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "käytä etäKOMENTOa rsh:n sijaan"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "anna asema ja tiheys"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "luo/listaa/pura moniosainen arkisto"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "vaihda nauhaa MÄÄRÄ × 1024 kirjoitetun tavun jälkeen"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "aja skripti joka nauhan lopussa (valitsin -M tulee käyttöön)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "käytä/päivitä arkiston osan numero TIEDostossa"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Laitteen lohkot:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "LOHKOT"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "LOHKOT × 512 tavua tietuetta kohti"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "MÄÄRÄ tavua tietuetta kohti, 512:n monikerta"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "älä huomioi nollattuja lohkoja arkistossa (merkitsee tiedoston loppua)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "suorita lohkominen uudelleen luettaessa (4.2BSD-putkia varten)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Arkistomuodon valinta:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "MUOTO"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "luo annetun muotoinen arkisto"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "MUOTO on yksi seuraavista:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "vanha V7-tar-muoto"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "GNU-muoto tar-versioilla ≤ 1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "GNU tar 1.13.x -muoto"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "POSIX 1003.1-1988 (ustar) -muoto"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "POSIX 1003.1-2001 (pax) -muoto"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "sama kuin pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "sama kuin --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "sama kuin --format=posix"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "avainsana[[:]=arvo][,avainsana[[:]=arvo]]..."
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "määrittele pax-avainsanoja"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "TEKSTI"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
@@ -1724,197 +1774,174 @@ msgstr ""
 "luo arkisto nimiöllä TEKSTI. Listattaessa/purettaessa käytä TEKSTIä "
 "nimiönhakulausekkeena"
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Ristiriitaiset pakkausvalitsimet"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:597
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "ohjaa arkisto bzip2-ohjelman läpi"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "ohjaa arkisto gzip-ohjelman läpi"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "ohjaa arkisto compress-ohjelman läpi"
-
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "ohjaa arkisto gzip-ohjelman läpi"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "ohjaa arkisto gzip-ohjelman läpi"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "ohjaa arkisto gzip-ohjelman läpi"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "OHJ"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "ohjaa OHJelman läpi (on hyväksyttävä -d)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Paikallisten tiedostojen valinta:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 "lisää annettu TIEDosto arkistoon (hyödyllinen, jos nimi alkaa viivalla)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "HAK"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "siirry hakemistoon HAK"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "hae purettavat/luotavat nimet TIEDOSTOsta"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T lukee nollaan päättyviä nimiä, poistaa käytöstä -C:n"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr ""
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "HAHMO"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "jätä pois HAHMOn mukaiset tiedostot"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "jätä pois TIEDOSTOssa listatut hahmot"
 
-#: src/tar.c:641
+#: src/tar.c:657
 #, fuzzy
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr "jätä pois välimuistihakemistot"
 
-#: src/tar.c:644
+#: src/tar.c:660
 #, fuzzy
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "jätä pois TIEDOSTOn sisältävät hakemistot"
 
-#: src/tar.c:647
+#: src/tar.c:663
 #, fuzzy
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "jätä pois TIEDOSTOn sisältävät hakemistot"
 
-#: src/tar.c:649
+#: src/tar.c:665
 #, fuzzy
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr "jätä pois TIEDOSTOn sisältävät hakemistot"
 
-#: src/tar.c:652
+#: src/tar.c:668
 #, fuzzy
 msgid "exclude everything under directories containing FILE"
 msgstr "jätä pois TIEDOSTOn sisältävät hakemistot"
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr "jätä pois TIEDOSTOn sisältävät hakemistot"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "estä automaattinen eteneminen alihakemistoihin"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "pysy nykyisessä tiedostojärjestelmässä arkistoa luotaessa"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "etene alihakemistoihin (oletus)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "älä poista ”/”-merkkiä tiedostonimien alusta"
 
-#: src/tar.c:666
+#: src/tar.c:684
 #, fuzzy
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr "seuraa symlinkkejä; "
 
-#: src/tar.c:668
+#: src/tar.c:686
 #, fuzzy
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr "seuraa symlinkkejä; "
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "TIED-NIMI"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "aloita arkiston tiedostosta TIED-NIMI"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "tallenna vain PÄIVÄYS-TAI-TIEDostoa uudemmat tiedostot"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "PÄIVÄYS"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "vertaa vain tiedoston muutosaikaa"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "HALLINTA"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "varmuuskopiointi ennen poistoa, valitse versionHALLINTA"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "MERKKIJONO"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1922,95 +1949,103 @@ msgstr ""
 "varmuuskopiointi ennen poistoa, älä käytä tavanomaista jälkiliitettä (joka "
 "on ”~”, ellei muuttujaa SIMPLE_BACKUP_SUFFIX ole asetettu)"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr ""
 
-#: src/tar.c:686
+#: src/tar.c:704
 #, fuzzy
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr "poista MÄÄRÄn verran osia tiedostonimien alusta"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr ""
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 
-#: src/tar.c:698
+#: src/tar.c:716
 #, fuzzy
 msgid "ignore case"
 msgstr "poisjättäminen ei huomioi kirjainkokoa"
 
-#: src/tar.c:700
+#: src/tar.c:718
 #, fuzzy
 msgid "patterns match file name start"
 msgstr "poisjättöhahmoja verrataan nimen alkuun"
 
-#: src/tar.c:702
+#: src/tar.c:720
 #, fuzzy
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr "poisjättöhahmoja verrataan jokaisen ”/”:n jälkeen"
 
-#: src/tar.c:704
+#: src/tar.c:722
 #, fuzzy
 msgid "case sensitive matching (default)"
 msgstr "poisjättäminen huomioi kirjainkoon (oletus)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr ""
 
-#: src/tar.c:710
+#: src/tar.c:728
 #, fuzzy
 msgid "wildcards do not match `/'"
 msgstr "poisjättöhahmon jokerimerkit eivät täsmää ”/”-merkkiin"
 
-#: src/tar.c:712
+#: src/tar.c:730
 #, fuzzy
 msgid "wildcards match `/' (default for exclusion)"
 msgstr "poisjättöhahmon jokerimerkit vastaavat merkkiä ”/”"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Tietoja antava tuloste:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "listaa käsiteltävät tiedostot"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr ""
+
+#: src/tar.c:742
 #, fuzzy
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr "näytä edistymisviesti 10 sekunnin välein"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "näytä viesti, ellei kaikkia linkkejä lisätty"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr ""
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2018,58 +2053,58 @@ msgid ""
 "accepted"
 msgstr ""
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "näytä tiedostojen muutosajat UTC-aikoina"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "ohjaa monisanainen tuloste TIEDostoon"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "näytä lohkonumero arkistossa viestien yhteydessä"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "kysy varmistusta jokaiselle toiminnolle"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "näytä tarin oletukset"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr ""
 "luettele hakuehtoihin täsmäämättömät hakemistot luetellessa tai purettaessa"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr ""
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr ""
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr ""
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr ""
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Yhteensopivuusvalitsimet:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 #, fuzzy
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
@@ -2077,57 +2112,65 @@ msgid ""
 msgstr ""
 "luotaessa sama kuin --old-archive purettaessa sama kuin --no-same-owner"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Muut valitsimet:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "poista käytöstä joitakin potentiaalisesti vahingollisia valitsimia"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Vain yhtä valitsimista ”-Acdtrux” voi käyttää kerrallaan"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Ristiriitaiset pakkausvalitsimet"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "Tuntematon signaalin nimi: %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 #, fuzzy
 msgid "Date sample file not found"
 msgstr "Päiväystiedostoa ei löytynyt"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Korvataan tuntematon päiväysmuoto %2$s arvolla %1$s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "Valitsin %s: Käsittellään päiväys %s arvona %s"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, fuzzy, c-format
 msgid "%s: file list already read"
 msgstr "%s: tiedosto on arkistossa, ei lisätä"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s: tiedostonimi sisältää nul-merkin"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "ohjaa arkisto gzip-ohjelman läpi"
+
+#: src/tar.c:1290
+#, fuzzy
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr "Kelvolliset argumentit --quoting-style -valitsimille ovat:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2135,158 +2178,168 @@ msgstr ""
 "\n"
 "*Tämä* tar käyttää oletuksena:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Virheellinen lohkomiskerroin"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Virheellinen nauhan pituus"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr ""
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Annettu useampi kuin yksi kynnyspäiväys"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr ""
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr "--atime-preserve='system' ei ole tuettu tällä alustalla"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr ""
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: Virheellinen ryhmä"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Valitsimelle annettiin virheellinen tila"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Virheellinen määrä"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Virheellinen omistaja"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Virheellinen tietueen koko"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Tietueen koon on oltava %d:n monikerta."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Virheellinen osien määrä"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr ""
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "Kelvoton tiheysargumentti: %s"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "Tuntematon tiheys: ”%c”"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "*Tämä* tar ei tue valitsimia ”-[0-7][lmh]”"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[TIEDOSTO]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Vanha valitsin ”%c” vaatii argumentin."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "valitsin --occurence on merkityksetön ilman tiedostoluetteloa"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "valitsinta --occurence ei voi käyttää pyydetyssä toimintatilassa"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Usean arkistotiedoston käyttäminen vaatii valitsimen ”-M”"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Valitsimia --listed-incremental ja --newer ei voi käyttää yhdessä"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+#, fuzzy
+msgid "--level is meaningless without --listed-incremental"
+msgstr "valitsin --occurence on merkityksetön ilman tiedostoluetteloa"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: Arkiston osan nimiö on liian pitkä (raja on %lu tavu)"
 msgstr[1] "%s: Arkiston osan nimiö on liian pitkä (raja on %lu tavua)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Moniosaisia arkistoja ei voi tarkastaa"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Pakattuja arkistoja ei voi varmistaa"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Pakattuja moniosaisia arkistoja ei voi käyttää"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "Pakattuja arkistoja ei voi liittää toisiinsa"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "Valitsinta --pax-option voi käyttää vain POSIX-arkistoille"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Kieltäydytään pelkurimaisesti luomasta tyhjää arkistoa"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Valitsimet ”-Aru” eivät ole yhteensopivia valitsinten ”-f -” kanssa"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Vähintään yhtä valitsimista ”-Acdtrux” on käytettävä"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2298,60 +2351,65 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: Tiedosto kutistui %s tavun verran"
 msgstr[1] "%s: Tiedosto kutistui %s tavun verran"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "Avainsana %s on tuntematon tai sillä ei vielä ole toteutusta"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Aikaleima ei ole sallitulla välillä"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "Hahmoa %s ei voi käyttää"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "Avainsanaa %s ei voi ohittaa"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 #, fuzzy
 msgid "Malformed extended header: missing length"
 msgstr "Väärän muotoinen laajennettu otsake: yhtäsuuruusmerkki puuttuu"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 #, fuzzy
 msgid "Extended header length is out of allowed range"
 msgstr ""
 "Arkiston etumerkillinen base-64-merkkijono %s on sallitun %s-välin "
 "ulkopuolella"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, fuzzy, c-format
 msgid "Extended header length %*s is out of range"
 msgstr ""
 "Arkiston etumerkillinen base-64-merkkijono %s on sallitun %s-välin "
 "ulkopuolella"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 #, fuzzy
 msgid "Malformed extended header: missing blank after length"
 msgstr "Väärän muotoinen laajennettu otsake: tyhje puuttuu pituuden jälkeen"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Väärän muotoinen laajennettu otsake: yhtäsuuruusmerkki puuttuu"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 #, fuzzy
 msgid "Malformed extended header: missing newline"
 msgstr "Väärän muotoinen laajennettu otsake: yhtäsuuruusmerkki puuttuu"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr ""
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
@@ -2359,28 +2417,28 @@ msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "Laajennettu otsake %s=%s on sallitun välin %s..%s ulkopuolella"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Väärän muotoinen laajennettu otsake: virheellinen %s=%s"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, fuzzy, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Väärän muotoinen laajennettu otsake: yhtäsuuruusmerkki puuttuu"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 "Väärän muotoinen laajennettu otsake: virheellinen %s: odottamaton rajoitin %c"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, fuzzy, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr "Väärän muotoinen laajennettu otsake: yhtäsuuruusmerkki puuttuu"
@@ -2421,238 +2479,310 @@ msgstr "Kirjoituksen tarkistuspiste %u"
 msgid "Read checkpoint %u"
 msgstr "Lukemisen tarkistuspiste %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 #, fuzzy
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
 msgstr "Luo datatiedostot GNU tar:in testausta varten.\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 #, fuzzy
 msgid "File creation options:"
 msgstr "Muut valitsimet:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr ""
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 #, fuzzy
 msgid "Create file of the given SIZE"
 msgstr "luo annetun muotoinen arkisto."
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 #, fuzzy
 msgid "Write to file NAME, instead of standard output"
 msgstr "pura tiedostot vakiotulosteeseen"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 #, fuzzy
 msgid "Read file names from FILE"
 msgstr "Luettiin %s tavua arkistosta %s"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr "-T lukee nollatavuun päättyviä nimiä"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr ""
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr ""
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 #, fuzzy
 msgid "Seek to the given offset before writing data"
 msgstr "yritä varmistaa arkisto kirjoittamisen jälkeen"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr ""
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr ""
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr " [VALITSIN...]"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr ""
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr ""
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "Suorita KOMENTO"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "Virheellinen koko: %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, fuzzy, c-format
 msgid "Number out of allowed range: %s"
 msgstr "I-solmun numero ei ole sallitulla välillä"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, fuzzy, c-format
 msgid "Negative size: %s"
 msgstr "Virheellinen koko: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "stat(%s) epäonnistui"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr ""
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, fuzzy, c-format
 msgid "Unknown date format"
 msgstr "Tuntematon järjestelmävirhe"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[ARG...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr ""
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 #, fuzzy
 msgid "cannot seek"
 msgstr "%s: Siirtyminen kohtaan %s ei onnistu"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "tiedostonimi sisältää nollatavun"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr ""
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, fuzzy, c-format
 msgid "Unknown field `%s'"
 msgstr " tuntematon tiedostotyyppi %s\n"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, fuzzy, c-format
 msgid "cannot set time on `%s'"
 msgstr "%s: Siirtyminen kohtaan %s ei onnistu"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "%s: Siirtyminen kohtaan %s ei onnistu"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "Komennon suoritus päättyi onnistuneesti\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, fuzzy, c-format
 msgid "Command failed with status %d\n"
 msgstr "Lapsiprosessi kuoli signaalilla %d"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "Komento keskeytyi signaaliin %d\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "Komento pysähtyi signaaliin %d\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr ""
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "Komento keskeytyi\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, fuzzy, c-format
 msgid "--stat requires file names"
 msgstr "--Sovitetut tiedostonimet--\n"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "liian monta argumenttia"
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: virheellinen valitsin -- %c\n"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
-#~ msgstr "Varoitus: valitsin -I ei ole tuettu, ehkä tarkoitit -j tai -T?"
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Ohjelmistovioista voi ilmoittaa (englanniksi) osoitteeseen\n"
+#~ "<%s>.\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Luetaan %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Virhe ei ole korjattavissa, poistutaan nyt"
+
+#~ msgid "suppress this warning."
+#~ msgstr "--no-wildcards tämän varoituksen vaientamiseksi."
+
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "ohjaa arkisto bzip2-ohjelman läpi"
+
+#~ msgid "filter the archive through gzip"
+#~ msgstr "ohjaa arkisto gzip-ohjelman läpi"
+
+#~ msgid "filter the archive through compress"
+#~ msgstr "ohjaa arkisto compress-ohjelman läpi"
+
+#, fuzzy
+#~ msgid "filter the archive through lzma"
+#~ msgstr "ohjaa arkisto gzip-ohjelman läpi"
+
+#, fuzzy
+#~ msgid "filter the archive through lzop"
+#~ msgstr "ohjaa arkisto gzip-ohjelman läpi"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Puskuritilaa ei voi varata\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Puskuritilaa ei voi varata"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Komento ”%s --help” antaa lisää tietoa.\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Käyttö: %s [VALITSIN]\n"
+#~ "Käsittele nauha-asemaa, hyväksyen komentoja etäprosessilta.\n"
+#~ "\n"
+#~ "  --version  Näytä versiotiedot.\n"
+#~ "  --help     Näytä tämä ohje.\n"
+
+#, fuzzy
+#~ msgid "Seek offset error"
+#~ msgstr "Siirtymä sallitun välin ulkopuolella"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Ennenaikainen tiedoston loppu"
 
 #~ msgid "block size"
 #~ msgstr "lohkokoko"
@@ -2661,6 +2791,9 @@ msgstr "liian monta argumenttia"
 #~ msgid "[.]NUMBER"
 #~ msgstr "MÄÄRÄ"
 
+#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgstr "Varoitus: valitsin -I ei ole tuettu, ehkä tarkoitit -j tai -T?"
+
 #~ msgid "Error exit delayed from previous errors"
 #~ msgstr "Viivästetty virhepoistuminen johtuu aikaisemmista virheistä"
 
@@ -2687,9 +2820,6 @@ msgstr "liian monta argumenttia"
 #~ msgid "Unknown demangling command %s"
 #~ msgstr "Tuntematon takaisinsovituskomento %s"
 
-#~ msgid "Time stamp out of range"
-#~ msgstr "Aikaleima ei ole sallitulla välillä"
-
 #~ msgid "Device number out of range"
 #~ msgstr "Laitenumero ei ole sallitulla välillä"
 
@@ -2697,10 +2827,6 @@ msgstr "liian monta argumenttia"
 #~ msgid "Error reading time stamp"
 #~ msgstr "Virheellinen aikaleima"
 
-#, fuzzy
-#~ msgid "Unexpected EOF"
-#~ msgstr "Odottamaton tiedoston loppu arkistossa"
-
 #~ msgid "same as -N"
 #~ msgstr "sama kuin -N"
 
index 03bee48928ea49815c5a5f4f74e5342a1e1bc1de..ef19c5d53ccdc395e149ccc75834d71a2292e949 100644 (file)
Binary files a/po/fr.gmo and b/po/fr.gmo differ
index a35fdf39d97d69f820cbb4de0c1437761e9c325e..53184fc6929d17d9ab417fb4253585fd384464b8 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -2,14 +2,14 @@
 # Copyright © 2007 Free Software Foundation, Inc.
 # This file is distributed under the same license as the tar package.
 # Michel Robitaille <robitail@IRO.UMontreal.CA>, jusqu'en 2004
-# Christophe Combelles <ccomb@free.fr>, 2007, 2008
+# Christophe Combelles <ccomb@free.fr>, 2007, 2008, 2009
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: tar-1.20\n"
+"Project-Id-Version: tar-1.22\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
-"PO-Revision-Date: 2008-04-14 22:07+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
+"PO-Revision-Date: 2009-12-06 17:08+0100\n"
 "Last-Translator: Christophe Combelles <ccomb@free.fr>\n"
 "Language-Team: French <traduc@traduc.org>\n"
 "MIME-Version: 1.0\n"
@@ -17,47 +17,47 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "Argument %s non valable pour %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "Argument %s ambigu pour %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Les arguments valables sont :"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT : la valeur %s est inférieure ou égale à %s"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s : le paramètre ARGP_HELP_FMT a besoin d'une valeur"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s : le paramètre ARGP_HELP_FMT doit être positif"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s : le paramètre ARGP_HELP_FMT est inconnu"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Déchet dans ARGP_HELP_FMT : %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -65,239 +65,143 @@ msgstr ""
 "Les arguments obligatoires ou facultatifs pour les formes longues des "
 "options le sont également pour les formes courtes qui leur correspondent."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Utilisation :"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr "  ou : "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [OPTION...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Pour en savoir davantage, faites : « %s --help » ou « %s --usage ».\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "Rapportez toute anomalie à %s.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Erreur système inconnue"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "Afficher cette aide-mémoire"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "Afficher un court mode d'emploi"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "NOM"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "définit le nom du programme"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "SECS"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "Bloquer pendant SECS secondes (3600 par défaut)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "Afficher la version du programme"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(PROGRAM ERROR) Aucune version connue !?"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s : trop d'arguments\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr "(PROGRAM ERROR) L'option devrait avoir été reconnue !?"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr "erreur d'écriture"
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s : l'option « %s » est ambiguë\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s : l'option « --%s » n'a pas d'argument\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s : l'option « %c%s » n'a pas d'argument\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s : l'option « %s » doit avoir un argument\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s : l'option « --%s » est inconnue\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s : l'option « %c%s » est inconnue\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s : l'option « -- %c » n'est pas permise\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s : l'option « -- %c » n'est pas valable\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s : l'option « -- %c » a besoin d'un argument\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s : l'option « -W %s » est ambiguë\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s : l'option « -W %s » ne prend pas d'argument\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "mémoire épuisée"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, c-format
 msgid "unable to record current working directory"
 msgstr "Impossible d'enregistrer le répertoire de travail actuel"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, c-format
 msgid "failed to return to initial working directory"
 msgstr "Impossible de revenir au répertoire de travail initial"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s : la fonction %s a échoué"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s : AVERTISSEMENT : la fonction %s a échoué"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s : le mode ne peut pas être changé en %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s : le propriétaire ne peut pas être changé en uid %lu, gid %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s : impossible de créer un lien physique vers %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s : erreur de lecture à l'octet %s, à la lecture de %lu octet"
-msgstr[1] "%s: erreur de lecture à l'octet %s, à la lecture de %lu octets"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] ""
-"%s : AVERTISSEMENT : erreur de lecture à l'octet %s, à la lecture de %lu "
-"octet"
-msgstr[1] ""
-"%s: AVERTISSEMENT : erreur de lecture à l'octet %s, à la lecture de %lu "
-"octets"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s : Positionnement à %s impossible"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s : AVERTISSEMENT : positionnement à %s impossible"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s : un lien symbolique ne peut pas être créé vers %s"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s : seulement %lu octet sur %lu a été écrit"
-msgstr[1] "%s: seulement %lu octets sur %lu ont été écrits"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Suppression de « %s » au début des noms des membres"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Suppression de « %s » au début des liens physiques"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Remplacement des noms vides par « . » pour les membres"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Remplacement des cibles vides par « . » pour les liens physiques"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -311,17 +215,17 @@ msgstr "Remplacement des cibles vides par « . » pour les liens physiques"
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "« "
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr " »"
 
@@ -331,7 +235,7 @@ msgstr " »"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[oO]"
 
@@ -341,39 +245,28 @@ msgstr "^[oO]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[nN]"
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp : service non disponible."
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "stdin"
-
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "stdout"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Impossible de lancer un interpréteur de commandes distant"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr "©"
 
-#: lib/version-etc.c:67
-#, fuzzy
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -391,19 +284,19 @@ msgstr ""
 "\n"
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr "Écrit par %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Écrit par %s et %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Écrit par %s, %s et %s.\n"
@@ -411,7 +304,7 @@ msgstr "Écrit par %s, %s et %s.\n"
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -423,7 +316,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -435,7 +328,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -447,7 +340,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -459,7 +352,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -473,7 +366,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -487,7 +380,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -502,186 +395,338 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
-#, c-format
+#: gnu/version-etc.c:247
+#, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
-msgstr ""
-"\n"
-"Rapportez toute anomalie à <%s>.\n"
+"Report bugs to: %s\n"
+msgstr "Rapportez toute anomalie à %s.\n"
+
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Rapportez toute anomalie à %s.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:255
+#, fuzzy, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+msgstr "Page d'accueil de %s : <http://www.gnu.org/software/%s/>.\n"
+
+#: gnu/version-etc.c:258
+#, fuzzy
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
+"Aide générale sur l'utilisation de programmes GNU : <http://www.gnu.org/"
+"gethelp/>.\n"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s : la fonction %s a échoué"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s : AVERTISSEMENT : la fonction %s a échoué"
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "Chaîne trop longue en entrée"
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s : le mode ne peut pas être changé en %s"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "Erreur de syntaxe de nombre"
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s : le propriétaire ne peut pas être changé en uid %lu, gid %lu"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd : impossible de réserver un espace tampon\n"
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s : impossible de créer un lien physique vers %s"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Impossible de réserver un espace tampon"
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s : erreur de lecture à l'octet %s, à la lecture de %lu octet"
+msgstr[1] "%s: erreur de lecture à l'octet %s, à la lecture de %lu octets"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:192
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Pour en savoir davantage, tapez : « %s --help ».\n"
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] ""
+"%s : AVERTISSEMENT : erreur de lecture à l'octet %s, à la lecture de %lu "
+"octet"
+msgstr[1] ""
+"%s: AVERTISSEMENT : erreur de lecture à l'octet %s, à la lecture de %lu "
+"octets"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:259
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Cannot seek to %s"
+msgstr "%s : Positionnement à %s impossible"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s : AVERTISSEMENT : positionnement à %s impossible"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s : un lien symbolique ne peut pas être créé vers %s"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s : seulement %lu octet sur %lu a été écrit"
+msgstr[1] "%s: seulement %lu octets sur %lu ont été écrits"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Suppression de « %s » au début des noms des membres"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Suppression de « %s » au début des liens physiques"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Remplacement des noms vides par « . » pour les membres"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Remplacement des cibles vides par « . » pour les liens physiques"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp : service non disponible."
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "stdin"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "stdout"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Utilisation : %s [OPTION]\n"
-"Ce programme permet de manipuler un lecteur de cartouches en recevant des "
-"commandes d'un processus distant.\n"
-"\n"
-"  --version  afficher le nom et la version du programme\n"
-"  --help     afficher cette aide-mémoire\n"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "Erreur de positionnement relatif"
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Impossible de lancer un interpréteur de commandes distant"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Direction de positionnement hors plage"
+
+#: rmt/rmt.c:419
+#, fuzzy
+msgid "Invalid seek direction"
+msgstr "Mode non valable donné en option"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Taille non valable : %s"
+
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Positionnement relatif hors plage"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Direction de positionnement hors plage"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Longueur de cartouche non valable"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Positionnement relatif hors plage"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd : fin de fichier prématurée\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Fin de fichier prématurée"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "Mode d'opération principal :"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Fin prématurée rencontrée dans l'archive."
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "NOMBRE"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "FICHIER"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "Impossible d'ouvrir « %s »"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "trop d'arguments"
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Commande rejetée"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Ceci ne ressemble pas à une archive de type « tar »"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Nombre total d'octets écrits"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "Nombre total d'octets lus"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Nombre total d'octets effacés : %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(tube)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Valeur incorrecte pour « record_size »"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Aucun nom d'archive donné"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr ""
 "Une archive utilisant l'entrée/sortie standard ne peut pas être vérifiée"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "L'archive est compressée. Utilisez l'option %s"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Une archive compressée ne peut pas être mise à jour"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Début de la cartouche atteinte ; arrêt du programme."
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Trop d'erreurs, arrêt du programme."
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Taille de l'enregistrement = %lu bloc"
 msgstr[1] "Taille de l'enregistrement = %lu blocs"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Bloc non aligné (%lu octet) dans l'archive"
 msgstr[1] "Bloc non aligné (%lu octets) dans l'archive"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr ""
 "Impossible de reculer dans le fichier d'archive ; il se peut qu'il soit "
 "illisible sans l'option « -i »"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek ne s'est pas arrêté à une limite d'enregistrement"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s : contient un numéro de volume non valable"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Débordement du numéro de volume"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Préparez le volume n°%d pour %s et appuyez sur Entrée : "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr ""
 "Fin de fichier rencontrée alors qu'une réponse de l'utilisateur était "
 "attendue"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "AVERTISSEMENT : l'archive est incomplète"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -692,67 +737,67 @@ msgstr ""
 " q             Arrêter tar\n"
 " y ou newline  Continuer le traitement\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !             Générer un sous-shell\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?             Afficher cette liste\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Pas de nouveau volume ; fin du traitement.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "Nom de fichier non spécifié. Essaye encore :).\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "Données non valables en entrée. Tapez « ? » pour obtenir de l'aide.\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "Échec de la commande %s"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr ""
 "La suite de %s est probablement sur ce volume : l'en-tête contient un nom "
 "tronqué."
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "La suite de %s n'est pas sur ce volume."
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s a une taille incorrecte (%s != %s + %s)."
 
-#: src/buffer.c:1253
-#, fuzzy, c-format
+#: src/buffer.c:1326
+#, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
-msgstr "Ce volume est hors séquence."
+msgstr "Ce volume est hors séquence (%s - %s != %s)"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Archive non étiquetée pour correspondre à %s."
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Le volume %s ne correspond pas à %s."
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
@@ -760,61 +805,60 @@ msgstr ""
 "%s : nom de fichier tronqué, car trop long pour être stocké dans un en-tête "
 "GNU multi-volumes"
 
-#: src/buffer.c:1621
-#, fuzzy
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
-msgstr "rmtlseek ne s'est pas arrêté à une limite d'enregistrement"
+msgstr "l'écriture ne s'est pas arrêté sur une limite de bloc"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Seulement %lu octet sur %lu a pu être lu"
 msgstr[1] "Seulement %lu octets sur %lu ont pu être lus"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Les contenus sont différents."
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Fin prématurée rencontrée dans l'archive."
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Le type de fichier est différent."
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Le mode est différent."
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "L'UID est différent."
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Le GID est différent."
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "La date de modification est différente."
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "La taille est différente."
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "N'est pas lié à %s."
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Le lien symbolique est différent."
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Le numéro de périphérique est différent."
 
@@ -839,34 +883,34 @@ msgid "Verification may fail to locate original files."
 msgstr ""
 "La vérification peut échouer lors de la localisation des fichier originaux."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "ÉCHEC DE VÉRIFICATION : %d en-tête non valable détecté."
 msgstr[1] "ÉCHEC DE VÉRIFICATION : %d en-têtes non valables détectés."
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "Bloc zéro solitaire repéré à %s"
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s : contient une étiquette de répertoire cache %s ; %s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "Valeur %s en dehors de la plage de %s : %s..%s ; remplacement par %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "Valeur %s en dehors de la plage de %s : %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Génération d'en-têtes octaux négatifs"
 
@@ -887,293 +931,279 @@ msgstr ""
 msgid "%s: link name is too long; not dumped"
 msgstr "%s : le nom du lien est trop long ; fichier non archivé"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s : fichier réduit de %s octet ; remplissage avec des zéros"
 msgstr[1] "%s : fichier réduit de %s octets ; remplissage avec des zéros"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr ""
 "%s : le fichier est sur un système de fichiers différent ; fichier non "
 "archivé"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr "contenu non archivé"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s : type de fichier inconnu ; fichier ignoré"
 
-#: src/create.c:1464
-#, c-format
-msgid "Missing links to %s.\n"
+#: src/create.c:1472
+#, fuzzy, c-format
+msgid "Missing links to %s."
 msgstr "Liens manquants vers %s.\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s : le fichier n'est pas modifié ; fichier non archivé"
 
-#: src/create.c:1543
-#, c-format
-msgid "%s: file is the archive; not dumped"
-msgstr "%s : le fichier est l'archive elle-même ; fichier non archivé"
-
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s : fichier supprimé avant d'avoir été lu"
+#: src/create.c:1552
+#, c-format
+msgid "%s: file is the archive; not dumped"
+msgstr "%s : le fichier est l'archive elle-même ; fichier non archivé"
 
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr "répertoire non archivé"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s : fichier modifié pendant sa lecture"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s : socket ignorée"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s : porte ignorée"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "On saute à l'en-tête suivant"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Suppression d'un « non en-tête » de l'archive"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s : l'horodatage %s est trop vieux pour être plausible"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s : l'horodatage %s est situé %s secondes dans le futur."
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s : incohérence inattendue lors de la création du répertoire"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s : répertoire renommé avant l'extraction de son état"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Extraction des fichiers contigus comme des fichiers réguliers"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Tentative d'extraction des liens symboliques comme des liens physiques"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Lecture de %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s : extraction impossible (morceau de fichier issu d'un autre volume)"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "En-tête à nom long inattendu"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s : type de fichier inconnu « %c », extrait comme un fichier normal."
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "Le %s actuel est au moins aussi récent"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s : impossible d'archiver ce fichier."
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "Impossible de renommer %s en %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Erreur non récupérable : arrêt du traitement"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s : le répertoire a été renommé depuis %s"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s : le répertoire a été renommé."
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s : le répertoire est nouveau."
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Horodatage non valable"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Temps de modification non valable (secondes)"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "Temps de modification non valable (nanosecondes)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Numéro de périphérique non valable"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Numéro d'inode non valable"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "Champ trop long rencontré pendant la lecture du fichier d'instantané"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "Erreur de lecture du fichier d'instantané"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "Fin prématurée du fichier d'instantané"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "Valeur de champ inattendue dans le fichier d'instantané"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "Terminaison de champ manquante"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "Mauvais format de fichier incrémental"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr "Version non prise en charge pour le format incrémental : %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr "dumpdir incorrect : « %c » était attendu mais %#3o a été trouvé"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "dumpdir incorrect : « X » en double"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "dumpdir incorrect : nom vide dans « R »"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "dumpdir incorrect : « T » non précédé de « R »"
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "dumpdir incorrect : nom vide dans « T »"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr "dumpdir incorrect : fin des données trouvées au lieu de « %c »"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr "dumpdir incorrect : « X » n'a jamais été utilisé"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Impossible de créer un répertoire temporaire utilisant le modèle %s"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s : répertoire non purgé : impossible d'évaluer par stat()"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr ""
 "%s : le répertoire est sur un autre périphérique : répertoire non purgé"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s : suppression de %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s : suppression impossible"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s : omis"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "bloc %s : ** Bloc de NULs **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "bloc %s : ** Fin de fichier **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "bloc %s : "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr ""
 "Blancs dans l'en-tête alors qu'une valeur numérique de type %s était attendue"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1181,27 +1211,27 @@ msgstr ""
 "complément à 2 supposé"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "La valeur octale de l'archive %.*s est en dehors de la plage de %s"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "L'archive contient des en-têtes obsolètes en base 64."
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "Une chaîne en base 64 signée %s de l'archive est hors de la plage %s"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Une valeur en base 256 de l'archive est en dehors de la plage %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr ""
@@ -1209,121 +1239,140 @@ msgstr ""
 "attendue."
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "La valeur de l'archive %s est hors des limites de %s : %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " lien vers %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " type de fichier inconnu %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Lien long--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Nom long--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--En-tête de volume--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Suite à l'octet %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Création du répertoire :"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "%s renommé en %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s : impossible de renommer en %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "%s finalement renommé en %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Le répertoire de travail ne peut pas être sauvegardé"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Impossible de changer le répertoire de travail"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s : fichier supprimé avant d'avoir été lu"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s : fichier supprimé avant d'avoir été lu"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "processus enfant"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "canal inter-processus"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr ""
 "Caractères de correspondance de motif utilisé dans le nom de fichier. "
 "Veuillez "
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 "utiliser « --wildcards » pour activer la correspondance de motif ou « --no-"
 "wildcards » pour"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "supprimer cet avertissement."
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s : non trouvé dans l'archive"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s : occurence requise non trouvée dans l'archive"
 
-#: src/tar.c:79
+#: src/names.c:894
+#, fuzzy
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr "--preserve-order n'est pas compatible avec --listed-incremental"
+
+#: src/names.c:900
+#, fuzzy
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr "--preserve-order n'est pas compatible avec --listed-incremental"
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr ""
 "Les options « -%s » et« -%s » nécessitent toutes les deux l'entrée standard."
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s : format d'archive non valable"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr ""
 "Fonctionnalités de type GNU demandées pour un format d'archive incompatible."
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
@@ -1331,7 +1380,7 @@ msgstr ""
 "Type de protection de caractères inconnu « %s ». Essayez « %s --quoting-"
 "style=help » pour avoir une liste."
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1352,7 +1401,7 @@ msgstr ""
 "manière détaillée.\n"
 "  tar -xf archive.tar          # Extrait tous les fichiers de archive.tar.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1373,91 +1422,84 @@ msgstr ""
 "  nil, existing   Numérotées si déjà numérotées, sinon simples.\n"
 "  never, simple   Faire toujours des sauvegardes simples.\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Mode d'opération principal :"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "Afficher le contenu de l'archive"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "Extraire les fichiers de l'archive"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "Créer une nouvelle archive"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "Trouver les différences entre l'archive et le système de fichiers"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "Ajouter des fichiers à la fin de l'archive"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr ""
 "Ajouter seulement les fichiers plus récents que les copies présentes dans "
 "l'archive"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "Ajouter des fichiers tar à une archive"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "Effacer de l'archive (pas sur les bandes magnétiques !)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr "Tester l'étiquette du volume d'archive et terminer"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Modificateurs d'opération :"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr ""
 "Économiser efficacement l'espace dans les fichiers dispersés (fichiers à "
 "trous)"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr "MAJEUR[.MINEUR]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 "Définir la version du format de dispersion à utiliser (implique « --sparse »)"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "Prendre en charge les sauvegardes incrémentales à l'ancien format GNU"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "FICHIER"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "Prendre en charge les sauvegardes incrémentales au nouveau format GNU"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr ""
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "Ne pas s'arrêter à cause des non-zéros sur les fichiers illisibles"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "NOMBRE"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1470,127 +1512,131 @@ msgstr ""
 "fichiers est fournie soit sur la ligne de commande, soit avec l'option « -T "
 "». NOMBRE vaut 1 par défaut."
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "L'archive peut être parcourue"
 
-#: src/tar.c:418
+#: src/tar.c:436
+#, fuzzy
+msgid "archive is not seekable"
+msgstr "L'archive peut être parcourue"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 "Ne pas vérifier les numéros de périphériques lors de la création d'archives "
 "incrémentales"
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 "vérifier les numéros de périphériques lors de la création d'archives "
 "incrémentales (par défaut)"
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "Contrôle de l'écrasement :"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "Tenter de vérifier l'archive après écriture"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "Supprimer les fichiers après les avoir ajoutés à l'archive"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "Ne pas écraser les fichiers préexistants lors de l'extraction"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 "Ne pas écraser les fichier préexistants qui sont plus récents que leur copie "
 "dans l'archive"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "Écraser les fichiers préexistants lors de l'extraction"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "Effacer chaque fichier préexistant avant l'extraction"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "Vider les hiérarchies avant d'extraire les répertoires"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "Préserver les métadonnées des répertoires préexistants"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 "Écraser les métadonnées des répertoires préexistants lors de l'extraction "
 "(comportement par défaut)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Choix du flux de sortie :"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "Extraire les fichiers vers la sortie standard"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "COMMANDE"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "Renvoyer par tube les fichiers extraits vers un autre programme"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "Ignorer les codes de retour des processus enfants"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr ""
 "Traiter les codes de retours non nuls des processus enfants comme des erreurs"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Traitement des attributs de fichiers :"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "Utiliser NOM comme propriétaire des fichiers ajoutés"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "Utiliser NOM comme groupe des fichiers ajoutés"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "DATE-OU-FICHIER"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr ""
 "Définir la date de modification des fichiers ajoutés avec DATE-OU-FICHIER"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "CHANGEMENTS"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr ""
 "Utiliser les CHANGEMENTS de mode (symboliques) pour les fichiers ajoutés"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "MÉTHODE"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1600,29 +1646,33 @@ msgstr ""
 "lecture (MÉTHODE = « replace » par défaut) ou en ne définissant pas les dates "
 "initialement (MÉTHODE = « system »)"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "Ne pas extraire la date de modification du fichier"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+#, fuzzy
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr "Essayer d'extraire les fichiers avec le même propriétaire"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+#, fuzzy
+msgid "extract files as yourself (default for ordinary users)"
 msgstr "Vous approprier les fichiers extraits"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "Toujours utiliser les valeurs numériques des utilisateurs/groupes"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 "Extraire les informations de permissions sur les fichiers (par défaut pour "
 "le superutilisateur)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
@@ -1630,15 +1680,15 @@ msgstr ""
 "Appliquer l'umask de l'utilisateur lors de l'extraction des permissions (par "
 "défaut pour les utilisateurs normaux)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "Trier les noms à extraire dans le même ordre que l'archive"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "Équivalent à « -p -s » à la fois"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
@@ -1646,139 +1696,139 @@ msgstr ""
 "Reporter à la fin de l'extraction le changement des dates de modification et "
 "des permissions des répertoires extraits"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "Annule l'effet de l'option « --delay-directory-restore »"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "Sélection et option de périphérique :"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "ARCHIVE"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "Utiliser le fichier ou le périphérique ARCHIVE"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "Le fichier d'archive est local même si « : » a été spécifié"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "Utiliser la COMMANDE rmt fournie au lieu de rmt"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "Utiliser la COMMANDE distante à la place de rsh"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "Spécifier le lecteur et la densité"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "Créer/lister/extraire une archive multi-volumes"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "Changer de cartouche après avoir écrit NOMBRE x 1024 octets"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "Exécuter le script à la fin de chaque cartouche (implique « -M »)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "Utiliser/mettre à jour le numéro de volume dans le FICHIER"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Blocs du périphérique :"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "BLOCS"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "BLOCS x 512 octets par enregistrement"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "NOMBRE d'octets par enregistrement (multiple de 512)"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "Ignorer les blocs de zéros dans l'archive (càd EOF)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "Refaire les blocs pendant la lecture (pour les tubes BSD 4.2)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Sélection du format d'archive :"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "FORMAT"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "Créer l'archive au format désiré."
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "FORMAT peut prendre une des valeurs suivantes :"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "Vieux format tar V7"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "Format GNU issu de tar <= 1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "Format GNU tar 1.13.x"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "Format POSIX 1003.1-1988 (ustar)"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "Format POSIX 1003.1-2001 (pax)"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "Identique à pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "Identique à « --format=v7 »"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "Identique à « --format=posix »"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "mot_clé[[:]=valeur][,mot_clé[[:]=valeur]..."
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "Mots-clés de contrôle pax"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "TEXTE"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
@@ -1787,111 +1837,85 @@ msgstr ""
 "l'extraction, utiliser le TEXTE comme motif de correspondance (glob) au nom "
 "de volume."
 
-#: src/tar.c:593
+#: src/tar.c:613
 msgid "Compression options:"
 msgstr "Options de compression :"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr ""
 "Utiliser le suffixe de l'archive pour déterminer le programme de compression"
 
-#: src/tar.c:597
-#, fuzzy
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr ""
-"Utiliser le suffixe de l'archive pour déterminer le programme de compression"
-
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "Filtrer l'archive à travers « bzip2 »"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "Filtrer l'archive à travers « gzip »"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "Filtrer l'archive à travers « compress »"
-
-#: src/tar.c:609
-msgid "filter the archive through lzma"
-msgstr "Filtrer l'archive à travers « lzma »"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "Filtrer l'archive à travers « gzip »"
+"Ne pas utiliser l'extension du fichier d'archive pour déterminer le "
+"programme de compression"
 
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "Filtrer l'archive à travers « gzip »"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "PROG"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "Filtrer à travers le PROG (doit accepter l'option « -d »)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Sélection des fichiers locaux :"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 "Ajouter le FICHIER donné à l'archive (utile si son nom commence par un tiret)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "RÉP"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "Utiliser RÉP comme répertoire de travail"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "Lire depuis le FICHIER la liste des noms à extraire ou à créer"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr ""
 "« -T » permet de lire les noms terminés par un NULL et désactive l'option « -C "
 "»"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
-msgstr ""
+msgstr "désactive l'effet de l'option --null précédente"
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 "Enlever la protection de caractères des noms de fichiers lus avec « -T » (par "
 "défaut)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr ""
 "Ne pas enlever la protection de caractères des noms de fichiers lus avec « -T "
 "»"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "MOTIF"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "Exclure les fichiers correspondant au MOTIF"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "Exclure les motifs listés dans le FICHIER"
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
@@ -1899,95 +1923,99 @@ msgstr ""
 "Exclure le contenu des répertoires contenant CACHEDIR.TAG, sauf le fichier "
 "de tag lui-même"
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "Tout exclure dans les répertoires contenant CACHEDIR.TAG"
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "Exclure les répertoires contenant CACHEDIR.TAG"
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 "Exclure le contenu des répertoires contenant le FICHIER, sauf le FICHIER lui-"
 "même"
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr "Tout exclure dans les répertoires contenant le FICHIER"
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr "Exclure les répertoires contenant le FICHIER"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr "Exclure les répertoires de contrôle de version (CVS, .svn, etc.)"
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "Empêcher la descente automatique dans les sous-répertoires"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr ""
 "Rester dans le système de fichiers local lors de la création de l'archive"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "Parcourir les sous-répertoires de manière récursive (par défaut)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "Ne pas enlever le « / » au début des noms de fichiers"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 "Suivre les liens symboliques ; archiver les fichiers vers lesquels ils "
 "pointent"
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 "Suivre les liens physiques : archiver les fichiers vers lesquels ils pointent"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "NOM-DE-MEMBRE"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "Débuter au NOM-DE-MEMBRE dans l'archive"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "Stocker seulement les fichiers plus récents que DATE-OU-FICHIER"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "DATE"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "Ne comparer que la date et l'heure de modification des données"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "CONTRÔLE"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr ""
 "Faire une copie de sauvegarde avant suppression, choisir le CONTRÔLE de "
 "version"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "CHAÎNE"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1996,100 +2024,109 @@ msgstr ""
 "habituel (« ~ » sauf s'il est définit par la variable d'environnement "
 "SIMPLE_BACKUP_SUFFIX)"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr "Transformation des noms de fichiers :"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr ""
 "Supprimer NOMBRE composants au début des noms de fichiers à l'extraction"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "EXPRESSION"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 "Utiliser l'EXPRESSION de remplacement « sed » pour transformer les noms de "
 "fichiers"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 "Options de correspondance de noms de fichiers (pour les motifs d'exclusion "
 "et d'inclusion)"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr "Ignorer la casse (majuscules/minuscules)"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr "Les motifs doivent correspondre au début des noms de fichiers"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr ""
 "Les motifs peuvent correspondre après n'importe quel « / » (par défaut pour "
 "l'exclusion)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr "Correspondance sensible à la casse (comportement par défaut)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr ""
 "Utiliser des caractères de correspondance (par défaut pour l'exclusion)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "Correspondance exacte de chaîne"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr "« / » ne correspond à aucun caractère de correspondance"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr ""
 "« / » peut correspondre à un caractère de correspondance (par défaut pour "
 "l'exclusion)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Options d'affichage :"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "Afficher de manière détaillée les fichiers traités"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+#, fuzzy
+msgid "warning control"
+msgstr "Contrôle de l'écrasement :"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 "Afficher un message de progression tous les NOMBRE enregistrements (10 par "
 "défaut)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr "ACTION"
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr "exécuter l'ACTION à chaque point de contrôle"
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr ""
 "Afficher un message si tous les liens n'ont pas pu être suivis et archivés"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "SIGNAL"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2101,27 +2138,27 @@ msgstr ""
 "sont : SIGHUP, SIGQUIT, SIGINT, SIGUSR1 et SIGUSR2. Les noms sans préfixe « "
 "SIG » sont aussi acceptés"
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "Afficher les dates de modification de fichier en UTC"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "Envoyer la sortie détaillée vers le FICHIER"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "Afficher le numéro du bloc de l'archive avec chaque message"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "Demander confirmation pour chaque action"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "Afficher les paramètres par défaut de tar"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
@@ -2129,33 +2166,33 @@ msgstr ""
 "Lors du listage ou de l'extraction, lister chaque répertoire qui ne concorde "
 "pas avec le critère de recherche"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr "Afficher les noms des fichiers ou des archives après transformation"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "STYLE"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 "Définir le style de protection de caractères appliqués aux noms. Voir ci-"
 "dessous pour les valeurs du STYLE"
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "Protéger aussi les caractères faisant partie de la CHAÎNE"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "Enlever la protection des caractères faisant partie de la CHAÎNE"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Options de compatibilité :"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
@@ -2163,56 +2200,64 @@ msgstr ""
 "Lors de la création, identique à « --old-archive ». Lors de l'extraction, "
 "identique à « --no-same-owner »"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Autres options :"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "Désactiver certaines options potentiellement néfastes"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Vous ne pouvez pas sélectionner plus d'une option parmi « -Acdtrux »"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Options de compression non compatibles entre elles"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "Type de signal inconnu : %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "Fichier d'échantillon de date non trouvé"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Remplacement par %s du format de date inconnu %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "Option %s : date « %s » traitée comme %s"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s : la liste de fichiers est déjà lue"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s : le nom de fichier lu contient un caractère nul"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "Filtrer l'archive à travers « xz »"
+
+#: src/tar.c:1290
+#, fuzzy
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr "Les arguments valables pour les options « --quoting-style » sont :"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2220,112 +2265,124 @@ msgstr ""
 "\n"
 "Les valeurs par défaut de *ce* tar sont :\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Facteur de bloc non valable"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Longueur de cartouche non valable"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+#, fuzzy
+msgid "Invalid incremental level value"
+msgstr "Mauvais format de fichier incrémental"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Plus d'une date seuil"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr "Version de la dispersion non valable"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr ""
 "--atime-preserve='system' n'est pas pris en charge sur cette plateforme"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr "la valeur de « --checkpoint » n'est pas un entier"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s : groupe non valable"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Mode non valable donné en option"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Nombre non valable"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Propriétaire non valable"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
+"L'option --preserve est obsolète, utilisez --preserve-permissions --preserve-"
+"order à la place"
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Taille d'enregistrement non valable"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "La taille d'un enregistrement doit être un multiple de %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Nombre d'éléments incorrect"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr "Une seule option « --to-command » est permise"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "Argument de densité incorrect : %s"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "Densité inconnue : « %c »"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "Les options « -[0-7][lmh] » ne sont pas prises en charge par *ce* tar"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[FICHIER]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "L'ancienne option « %c » a besoin d'un argument."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "--occurrence n'a pas de sens sans une liste de fichiers"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "« --occurrence » ne peut être utilisée dans le mode d'opération demandé"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Les fichiers d'archives multiples ont besoin de l'option « -M »"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Impossible de combiner « --listed-incremental » avec « --newer »"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+#, fuzzy
+msgid "--level is meaningless without --listed-incremental"
+msgstr "--preserve-order n'est pas compatible avec --listed-incremental"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
@@ -2334,50 +2391,53 @@ msgstr[0] ""
 msgstr[1] ""
 "%s: l'étiquette du volume est trop longue (la limite est %lu octets)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Impossible de vérifier des archives multi-volumes"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Impossible de vérifier des archives compressées"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Impossible d'utiliser des archives multi-volumes compressées"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "Impossible de concaténer des archives compressées"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "--pax-option peut être utilisée uniquement avec des archives POSIX"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
+"La longueur du volume ne peut pas être inférieure à la taille de "
+"l'enregistrement"
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
-msgstr ""
+msgstr "--preserve-order n'est pas compatible avec --listed-incremental"
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Je refuse de créer un fichier d'archive vide (oui je suis lâche)"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Les options « -Aru » sont incompatibles avec « -f - »"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Vous devez choisir une des options « -Acdtrux » "
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
-msgstr ""
+msgstr "Arrêt avec code d'échec à cause des erreurs précédentes"
 
 #: src/update.c:86
 #, c-format
@@ -2386,52 +2446,57 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s : fichier réduit de %s octet"
 msgstr[1] "%s: fichier réduit de %s octets"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "Le mot clé %s est inconnu ou n'est pas encore implémenté"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Nombre en dehors de la plage permise : %s"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "Le motif %s ne peut être utilisé"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "Le mot clé %s ne peut pas être surdéfini"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "En-tête étendu incorrect : longueur manquante"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr "La longueur de l'en-tête étendu est hors plage"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "La longueur de l'en-tête étendu %*s est hors plage"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr "En-tête étendu incorrect : espace blanche manquante après la longueur"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "En-tête étendu incorrect : signe d'égalité manquant"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr "En-tête étendu incorrect : retour à la ligne manquant"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr "Le mot clé inconnu « %s » pour l'en-tête étendu a été ignoré"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
@@ -2439,27 +2504,27 @@ msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "L'en-tête étendu %s=%s est hors plage %s..%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "En-tête étendu incorrect : %s=%s non valable"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "En-tête étendu incorrect : %s=%s en trop"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr "En-tête étendu incorrect : %s non valable : délimiteur %c non prévu"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr "En-tête étendu incorrect : %s non valable : nombre impair de valeurs"
@@ -2500,7 +2565,7 @@ msgstr "Point de contrôle d'écriture %u"
 msgid "Read checkpoint %u"
 msgstr "Point de contrôle de lecture %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
@@ -2509,92 +2574,98 @@ msgstr ""
 "GNU paxutils.\n"
 "Les options sont :\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr "Options de création de fichier :"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "TAILLE"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "Créer le fichier à la TAILLE donnée"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "Écrire dans le fichier NOM, plutôt que sur la sortie standard"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "Lire les noms de fichier depuis le FICHIER"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr "-T permet de lire les noms terminés par un NULL"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 "Remplir le fichier avec le MOTIF donné. MOTIF est « default » ou « zeros »"
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "Taille d'un bloc pour le fichier dispersé"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 "Générer un fichier dispersé (avec des trous). Le reste de la ligne de "
 "commande définit la carte du fichier."
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr "DÉCALAGE"
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr "Se déplacer du DÉCALAGE donné avant d'écrire des données"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr "Options des statistiques de fichiers :"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 "Afficher le contenu des structures « stat » pour chaque fichier donné. Le "
 "FORMAT par défaut est :"
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr "Options d'exécution synchrone :"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr " [OPTION...]"
+
+#: tests/genfile.c:165
+#, fuzzy
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 "Exécuter la COMMANDE donnée. Utile avec « --checkpoint » et l'une des options "
 "« --cut », « --append » ou « --touch »"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 "Exécuter l'action donnée (voir plus bas) dès qu'un point de contrôle NOMBRE "
 "est atteint"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr "Définir la date pour la prochaine option « --touch »"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 "Afficher les points de contrôle exécutés et les codes de sortie de la "
 "COMMANDE"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
@@ -2602,7 +2673,7 @@ msgstr ""
 "Actions d'exécution synchrone. Celles-ci sont exécutées lorsque le numéro du "
 "point de contrôle donné par « --checkpoint » est atteint."
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
@@ -2610,150 +2681,219 @@ msgstr ""
 "Tronquer le FICHIER à la taille donnée par la précédente option « --length "
 "» (ou 0 si elle n'est pas fournie)."
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 "Ajouter TAILLE octets au FICHIER. La TAILLE est fournie par la précédente "
 "option « --length »"
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "Mettre à jour les dates d'accès et de modification du FICHIER"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "Exécuter la COMMANDE"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "Taille non valable : %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Nombre en dehors de la plage permise : %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr "Taille négative : %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "La fonction stat(%s) a échoué"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
-msgstr ""
+msgstr "taille de fichier demandée : %lu, taille réelle : %lu"
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
-msgstr ""
+msgstr "le fichier créé n'est pas dispersé"
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "Erreur à la lecture du nombre près de « %s »"
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "Format de date inconnu"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[ARGS...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "Impossible d'ouvrir « %s »"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 msgid "cannot seek"
 msgstr "Impossible à parcourir"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "Le nom de fichier contient un caractère nul"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 "Un fichier dispersé ne peut pas être généré sur la sortie standard. Utilisez "
 "l'option « --file »"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "Masque incorrect (près de « %s »)"
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr "Champ inconnu « %s »"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "Impossible de définir la date de « %s »"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "Impossible d'ouvrir « %s »"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "La commande s'est terminée correctement\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "La commande a échoué avec le code %d\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "La commande s'est terminée sur le signal %d\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "La commande s'est interrompue sur le signal %d\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "La commande a généré un core dump\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "La commande s'est terminée\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "--stat nécessite un nom de fichier"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "trop d'arguments"
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s : l'option « -- %c » n'est pas permise\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Rapportez toute anomalie à <%s>.\n"
+
+#~ msgid "Input string too long"
+#~ msgstr "Chaîne trop longue en entrée"
+
+#~ msgid "Number syntax error"
+#~ msgstr "Erreur de syntaxe de nombre"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd : impossible de réserver un espace tampon\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Impossible de réserver un espace tampon"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Pour en savoir davantage, tapez : « %s --help ».\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Utilisation : %s [OPTION]\n"
+#~ "Ce programme permet de manipuler un lecteur de cartouches en recevant des "
+#~ "commandes d'un processus distant.\n"
+#~ "\n"
+#~ "  --version  afficher le nom et la version du programme\n"
+#~ "  --help     afficher cette aide-mémoire\n"
+
+#~ msgid "Seek offset error"
+#~ msgstr "Erreur de positionnement relatif"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Fin de fichier prématurée"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Lecture de %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Erreur non récupérable : arrêt du traitement"
+
+#~ msgid "suppress this warning."
+#~ msgstr "supprimer cet avertissement."
+
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "Filtrer l'archive à travers « bzip2 »"
+
+#~ msgid "filter the archive through gzip"
+#~ msgstr "Filtrer l'archive à travers « gzip »"
+
+#~ msgid "filter the archive through compress"
+#~ msgstr "Filtrer l'archive à travers « compress »"
+
+#~ msgid "filter the archive through lzma"
+#~ msgstr "Filtrer l'archive à travers « lzma »"
+
+#~ msgid "filter the archive through lzop"
+#~ msgstr "Filtrer l'archive à travers « lzop »"
 
 #~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
 #~ msgstr ""
 #~ "AVERTISSEMENT : l'option « -I » n'est pas prise en charge. Vous vouliez "
 #~ "peut-être utiliser « -j » ou « -T » ?"
 
-#, fuzzy
-#~ msgid "cancel effect of the previous --transform-links option"
-#~ msgstr "Annule l'effet de l'option « --delay-directory-restore »"
-
 #~ msgid "Error exit delayed from previous errors"
 #~ msgstr "Des erreurs ont provoqué l'arrêt du programme"
 
index d98665c8dff3d5bb346f7bdd762fb8d88b4adbdf..c5106d3b5ca65c560578334f0e3442715313e29d 100644 (file)
Binary files a/po/ga.gmo and b/po/ga.gmo differ
index 72edc09773ec4e0b43fd8a0675ac641721588fda..dbf60ef730ced364babc1eef5ad0a668c710fbdd 100644 (file)
--- a/po/ga.po
+++ b/po/ga.po
@@ -1,13 +1,13 @@
 # Irish translations for tar.
 # Copyright (C) 2003, 2004 Free Software Foundation, Inc.
 # This file is distributed under the same license as the tar package.
-# Kevin Patrick Scannell <scannell@SLU.EDU>, 2003, 2004, 2006, 2007, 2008.
+# Kevin Patrick Scannell <scannell@SLU.EDU>, 2003, 2004, 2006, 2007, 2008, 2009.
 msgid ""
 msgstr ""
-"Project-Id-Version: tar 1.20\n"
+"Project-Id-Version: tar 1.22\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
-"PO-Revision-Date: 2008-04-14 21:53-0600\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
+"PO-Revision-Date: 2009-03-25 20:27-0600\n"
 "Last-Translator: Kevin Scannell <kscanne@gmail.com>\n"
 "Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
 "MIME-Version: 1.0\n"
@@ -16,48 +16,48 @@ msgstr ""
 "Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 : "
 "(n>6 && n <11) ? 3 : 4;\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "argóint neamhbhailí %s chun %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "argóint dhébhríoch %s chun %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Na hargóintí bailí:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: luach %s níos lú ná nó cothrom le %s"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: Ní mór luach a thabhairt ar an pharaiméadar ARGP_HELP_FMT"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr ""
 "%.*s: Ní mór luach deimhneach a bheith ar an pharaiméadar ARGP_HELP_FMT"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: Paraiméadar anaithnid ARGP_HELP_FMT"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Bruscar i ARGP_HELP_FMT: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -65,246 +65,145 @@ msgstr ""
 "Is riachtanach/roghnach le rogha ghearr aon argóint atá riachtanach/roghnach "
 "leis an rogha fhada."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Úsáid:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr "  nó: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [ROGHA...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr ""
 "Bain triail as `%s --help' nó `%s --usage' chun tuilleadh eolais a fháil.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "Seol tuairiscí fabhtanna chuig %s.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Earráid anaithnid chórais"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "taispeáin an chabhair seo"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "taispeáin beagán eolais faoin úsáid"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "AINM"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "socraigh ainm an chláir"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "SOIC"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "moill de SOIC soicind (réamhshocrú: 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "taispeáin leagan an chláir"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(EARRÁID RÍOMHCHLÁIR) Gan leagan!?"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: An iomarca argóintí\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr ""
 "(EARRÁID RÍOMHCHLÁIR) Ba chóir aitheantas a thabhairt ar an rogha seo!?"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr "earráid sa scríobh"
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: Tá an rogha `%s' débhríoch\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha `--%s'\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha `%c%s'\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: tá argóint de dhíth i ndiaidh na rogha `%s'\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: rogha anaithnid `--%s'\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: rogha anaithnid `%c%s'\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: rogha neamhcheadaithe -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: rogha neamhbhailí -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: tá argóint de dhíth i ndiaidh na rogha -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: Tá an rogha `-W %s' débhríoch\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: ní cheadaítear argóint i ndiaidh na rogha `-W %s'\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "cuimhne ídithe"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, c-format
 msgid "unable to record current working directory"
 msgstr "ní féidir an chomhadlann reatha a thaifeadadh"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, c-format
 msgid "failed to return to initial working directory"
 msgstr "níorbh fhéidir an bhunchomhadlann oibre a aisfhilleadh"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Theip ar fheidhm %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Rabhadh: Theip ar fheidhm %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Ní féidir an mód a athrú go %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Ní féidir an t-úinéir a athrú go UID %lu, GID %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Ní féidir nasc crua a dhéanamh le %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Earráid léimh ag beart %s, agus %lu beart á léamh"
-msgstr[1] "%s: Earráid léimh ag beart %s, agus %lu bheart á léamh"
-msgstr[2] "%s: Earráid léimh ag beart %s, agus %lu bheart á léamh"
-msgstr[3] "%s: Earráid léimh ag beart %s, agus %lu mbeart á léamh"
-msgstr[4] "%s: Earráid léimh ag beart %s, agus %lu beart á léamh"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Rabhadh: Earráid léimh ag beart %s, agus %lu beart á léamh"
-msgstr[1] "%s: Rabhadh: Earráid léimh ag beart %s, agus %lu bheart á léamh"
-msgstr[2] "%s: Rabhadh: Earráid léimh ag beart %s, agus %lu bheart á léamh"
-msgstr[3] "%s: Rabhadh: Earráid léimh ag beart %s, agus %lu mbeart á léamh"
-msgstr[4] "%s: Rabhadh: Earráid léimh ag beart %s, agus %lu beart á léamh"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Ní féidir 'seek' a dhéanamh ag %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Rabhadh: Ní féidir 'seek' a dhéanamh ag %s"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Ní féidir nasc siombalach a chruthú le %s"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Níor scríobhadh ach %lu as %lu bheart"
-msgstr[1] "%s: Níor scríobhadh ach %lu as %lu bheart"
-msgstr[2] "%s: Níor scríobhadh ach %lu as %lu bheart"
-msgstr[3] "%s: Níor scríobhadh ach %lu as %lu mbeart"
-msgstr[4] "%s: Níor scríobhadh ach %lu as %lu beart"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Gach `%s' tosaigh á bhaint amach as ainmneacha baill"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Gach `%s' tosaigh á bhaint amach as spriocanna na nasc crua"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Ag cur `.' in ionad ainm baill folamh"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Ag cur `.' in ionad sprioc fholamh den nasc crua"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -318,17 +217,17 @@ msgstr "Ag cur `.' in ionad sprioc fholamh den nasc crua"
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "`"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "'"
 
@@ -338,7 +237,7 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[yYiIsS]"
 
@@ -348,41 +247,28 @@ msgstr "^[yYiIsS]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[nN]"
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Níl an tseirbhís ar fáil"
-
-# cf French -KPS
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "stdin"
-
-# cf French -KPS
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "stdout"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Ní féidir cianbhlaosc a rith"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr "©"
 
-#: lib/version-etc.c:67
-#, fuzzy
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -393,25 +279,25 @@ msgid ""
 msgstr ""
 "\n"
 "Ceadúnas GPLv3+: GNU GPL leagan 3 nó níos nuaí <http://gnu.org/licenses/gpl."
-"html>\n"
+"html>.\n"
 "Is saorbhogearra é seo: ceadaítear duit é a athrú agus a athdháileadh.\n"
 "Níl baránta AR BITH ann, an oiread atá ceadaithe de réir dlí.\n"
 "\n"
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr "Scríofa ag %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Scríofa ag %s agus %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Scríofa ag %s, %s, agus %s.\n"
@@ -419,7 +305,7 @@ msgstr "Scríofa ag %s, %s, agus %s.\n"
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -431,7 +317,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -443,7 +329,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -455,7 +341,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -467,7 +353,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -481,7 +367,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -495,7 +381,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -510,136 +396,296 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
-#, c-format
+#: gnu/version-etc.c:247
+#, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
+msgstr "Seol tuairiscí fabhtanna chuig %s.\n"
+
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
 "\n"
 "Seol tuairiscí fabhtanna chuig <%s>.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
-msgstr ""
+#: gnu/version-etc.c:255
+#, fuzzy, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+msgstr "Leathanach baile %s: <http://www.gnu.org/software/%s/>.\n"
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "Teaghrán ionchurtha rófhada"
+#: gnu/version-etc.c:258
+#, fuzzy
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+msgstr "Cabhair ghinearálta le bogearraí GNU: <http://www.gnu.org/gethelp/>.\n"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "Earráid chomhréire in uimhir"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Theip ar fheidhm %s"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Ní féidir maolán a dháileadh\n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Rabhadh: Theip ar fheidhm %s"
+
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Ní féidir an mód a athrú go %s"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Ní féidir maolán a dháileadh"
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Ní féidir an t-úinéir a athrú go UID %lu, GID %lu"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:127
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Bain triail as `%s --help' chun tuilleadh eolais a fháil.\n"
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Ní féidir nasc crua a dhéanamh le %s"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:179 lib/paxerror.c:211
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Earráid léimh ag beart %s, agus %lu beart á léamh"
+msgstr[1] "%s: Earráid léimh ag beart %s, agus %lu bheart á léamh"
+msgstr[2] "%s: Earráid léimh ag beart %s, agus %lu bheart á léamh"
+msgstr[3] "%s: Earráid léimh ag beart %s, agus %lu mbeart á léamh"
+msgstr[4] "%s: Earráid léimh ag beart %s, agus %lu beart á léamh"
+
+#: lib/paxerror.c:192
+#, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Rabhadh: Earráid léimh ag beart %s, agus %lu beart á léamh"
+msgstr[1] "%s: Rabhadh: Earráid léimh ag beart %s, agus %lu bheart á léamh"
+msgstr[2] "%s: Rabhadh: Earráid léimh ag beart %s, agus %lu bheart á léamh"
+msgstr[3] "%s: Rabhadh: Earráid léimh ag beart %s, agus %lu mbeart á léamh"
+msgstr[4] "%s: Rabhadh: Earráid léimh ag beart %s, agus %lu beart á léamh"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Ní féidir 'seek' a dhéanamh ag %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Rabhadh: Ní féidir 'seek' a dhéanamh ag %s"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Ní féidir nasc siombalach a chruthú le %s"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Níor scríobhadh ach %lu as %lu bheart"
+msgstr[1] "%s: Níor scríobhadh ach %lu as %lu bheart"
+msgstr[2] "%s: Níor scríobhadh ach %lu as %lu bheart"
+msgstr[3] "%s: Níor scríobhadh ach %lu as %lu mbeart"
+msgstr[4] "%s: Níor scríobhadh ach %lu as %lu beart"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Gach `%s' tosaigh á bhaint amach as ainmneacha baill"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Gach `%s' tosaigh á bhaint amach as spriocanna na nasc crua"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Ag cur `.' in ionad ainm baill folamh"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Ag cur `.' in ionad sprioc fholamh den nasc crua"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Níl an tseirbhís ar fáil"
+
+# cf French -KPS
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "stdin"
+
+# cf French -KPS
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "stdout"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Úsáid: %s [ROGHA]\n"
-"Láimhseáil tiomántán téipe, agus glac le horduithe ó chianphróiseas.\n"
-"\n"
-"  --version  Taispeáin eolas faoin leagan.\n"
-"  --help     Taispeáin an chabhair seo.\n"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "Earráid i bhfritháireamh 'seek'"
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Ní féidir cianbhlaosc a rith"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Treo 'seek' as raon"
+
+#: rmt/rmt.c:419
+#, fuzzy
+msgid "Invalid seek direction"
+msgstr "Mód neamhbhailí ar rogha"
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Méid neamhbhailí: %s"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Fritháireamh 'seek' as raon"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Treo 'seek' as raon"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Fad téipe neamhbhailí"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Fritháireamh 'seek' as raon"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: Comhadchríoch gan choinne\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "Príomh-mhód oibre:"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
 msgstr "Comhadchríoch gan choinne"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "UIMHIR"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "COMHAD"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "ní féidir `%s' a oscailt"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "an iomarca argóintí"
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Ordú dramhaíola"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Ní cosúil le cartlann `tar' é seo"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Bearta scríofa go hiomlán"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "Bearta léite go hiomlán"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Bearta scriosta go hiomlán: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(píopa)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Luach neamhbhailí do record_size"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Ní thugtar ainm na cartlainne"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Ní féidir cartlann stdin/stdout a fhíorú"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "Is cartlann chomhbhrúite í seo. Úsáid an rogha %s"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Ní féidir cartlanna comhbhrúite a nuashonrú"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Tosach na téipe, ag scor anois"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "An iomarca earráidí, ag scor"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
@@ -649,7 +695,7 @@ msgstr[2] "Méid taifid = %lu bhloc"
 msgstr[3] "Méid taifid = %lu mbloc"
 msgstr[4] "Méid taifid = %lu bloc"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
@@ -659,38 +705,38 @@ msgstr[2] "Bloc neamhailínithe (%lu bheart) sa chartlann"
 msgstr[3] "Bloc neamhailínithe (%lu mbeart) sa chartlann"
 msgstr[4] "Bloc neamhailínithe (%lu beart) sa chartlann"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr "Ní féidir an chartlann a chúlú; is dócha gur doléite í gan -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "Níor stopadh rmtlseek ag teorainn taifid"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: tá uimhir imleabhair neamhbhailí ann"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Uimhir imleabhair thar maoil"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr ""
 "Socraigh an t-imleabhar #%d le haghaidh %s agus brúigh an eochair iontrála: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "Fuarthas comhadchríoch in áit freagra ón úsáideoir"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "RABHADH: Tá an chartlann neamhiomlán"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -702,67 +748,67 @@ msgstr ""
 " q             Tobscoir tar\n"
 " y nó líne nua Lean ar aghaidh\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !             Sceith fobhlaosc\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?             Priontáil an liosta seo\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Níl aon imleabhar nua; ag scor.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "Ainm an chomhaid gan sonrú. Bain triail eile as.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "Ionchur neamhbhailí. Iontráil ? chun cabhair a fháil.\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "Theip ar ordú %s"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr ""
 "Seans go leanann %s ar aghaidh ar an imleabhar seo: tá ainm teasctha sa "
 "cheanntásc"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "Ní leanann %s ar an imleabhar seo"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "Níl %s an méid ceart (%s != %s + %s)"
 
-#: src/buffer.c:1253
-#, fuzzy, c-format
+#: src/buffer.c:1326
+#, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
-msgstr "Tá an t-imleabhar seo as ord"
+msgstr "Tá an t-imleabhar seo as ord (%s - %s != %s)"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Lipéad ar chartlann nach comhoiriúnaithe le %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Níl an t-imleabhar %s comhoiriúnaithe le %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
@@ -770,12 +816,11 @@ msgstr ""
 "%s: ní féidir an comhadainm seo a stóráil i gceanntásc il-imleabhar GNU; "
 "teasctha"
 
-#: src/buffer.c:1621
-#, fuzzy
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
-msgstr "Níor stopadh rmtlseek ag teorainn taifid"
+msgstr "níor stop an scríobh ag teorainn bhloic"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
@@ -785,49 +830,49 @@ msgstr[2] "Níorbh fhéidir ach %lu de %lu bheart a léamh"
 msgstr[3] "Níorbh fhéidir ach %lu de %lu mbeart a léamh"
 msgstr[4] "Níorbh fhéidir ach %lu de %lu beart a léamh"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Tá difríocht idir na hábhair"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Comhadchríoch gan choinne i gcartlann"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Tá difríocht idir na cineálacha comhaid"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Tá difríocht idir na móid"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Tá difríocht idir na UIDanna"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Tá difríocht idir na GIDanna"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Tá difríocht idir na hamanna modhnaithe"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Tá difríocht idir na méideanna"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Ní ceangailte le %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Tá difríocht idir na naisc shiombalacha"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Tá difríocht idir na huimhreacha gléis"
 
@@ -849,7 +894,7 @@ msgstr "Tá comhaid sa chartlann agus a réimíreanna scriosta."
 msgid "Verification may fail to locate original files."
 msgstr "Nach féidir i gcónaí na bunchomhaid a aimsiú agus le linn fíoraithe."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
@@ -859,27 +904,27 @@ msgstr[2] "THEIP AR DHEIMHNIÚ: aimsíodh %d cheanntásc neamhbhailí"
 msgstr[3] "THEIP AR DHEIMHNIÚ: aimsíodh %d gceanntásc neamhbhailí"
 msgstr[4] "THEIP AR DHEIMHNIÚ: aimsíodh %d ceanntásc neamhbhailí"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "Bloc nialasach scoite ag %s"
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: tá clib chomhadlainne taisce %s ann; %s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "tá an luach %s as raon %s: %s..%s; ag cur %s ina ionad"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "tá an luach %s as raon %s: %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Ceanntásca ochtnártha diúltacha á gcruthú"
 
@@ -898,7 +943,7 @@ msgstr "%s: ainm comhaid rófhada (ní féidir é a scoilt); gan dumpáil"
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: ainm naisc rófhada; gan dumpáil"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
@@ -908,286 +953,272 @@ msgstr[2] "%s: %s bheart níos lú sa chomhad; ag stuáil le nialais"
 msgstr[3] "%s: %s mbeart níos lú sa chomhad; ag stuáil le nialais"
 msgstr[4] "%s: %s beart níos lú sa chomhad; ag stuáil le nialais"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: is ar chóras comhad eile é an comhad; gan dumpáil"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr "ábhar gan dumpáil"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Cineál anaithnid comhaid; ag déanamh neamhshuim air"
 
-#: src/create.c:1464
-#, c-format
-msgid "Missing links to %s.\n"
+#: src/create.c:1472
+#, fuzzy, c-format
+msgid "Missing links to %s."
 msgstr "Naisc le %s ar iarraidh.\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: comhad gan athrú; gan dumpáil"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: is ionann é agus an chartlann féin; gan dumpáil"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Scriosadh an comhad sular léadh é"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr "níor dumpáladh an chomhadlann"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: athraíodh an comhad agus á léamh"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: rinneadh neamhshuim ar an soicéad"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: rinneadh neamhshuim ar an doras"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Ag bogadh go dtí an chéad cheanntásc eile"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Comhad nach ceanntásc á scriosadh ón chartlann"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: ní dócha go bhfuil an stampa ama ársa %s ceart"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: tá an stampa ama %s %s soicind amach anseo"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Bunoscionntacht gan choinne agus comhadlann á cruthú"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr ""
 "%s: Athainmníodh an chomhadlann sularbh fhéidir a stádas a bhaint amach"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Comhaid theorantacha á mbaint amach mar ghnáthchomhaid"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr ""
 "Ag déanamh iarracht ar naisc shiombalacha a bhaint amach mar naisc chrua"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "%s á léamh\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Ní féidir an comhad a bhaint amach -- ar lean ó imleabhar eile"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "Ceanntásc ainm fada gan choinne"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Cineál anaithnid comhaid `%c', á bhaint amach mar ghnáthchomhad"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "Tá an %s reatha níos nuaí nó ar comhaois"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Níorbh fhéidir cúltaca a dhéanamh"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "Ní féidir %s a athainmniú go %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Ní féidir biseach a dhéanamh i ndiaidh earráid: ag scor"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Athainmníodh an chomhadlann ó %s"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Athainmníodh an chomhadlann"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Comhadlann nua"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Stampa ama neamhbhailí"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Am neamhbhailí mionathraithe (soicindí)"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "Am neamhbhailí mionathraithe (nanashoicindí)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Uimhir neamhbhailí gléis"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Uimhir inode as raon"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "Réimse rófhada agus an comhad roghbhlúire á léamh"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "Earráid agus an comhad roghbhlúire á léamh"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "Comhadchríoch gan choinne sa chomhad roghbhlúire"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "Luach réimse gan choinne sa chomhad roghbhlúire"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "Críochnaitheoir taifid ar iarraidh"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "Drochfhormáid incriminteach"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr ""
 "Ní thacaítear leis an leagan seo den fhormáid incriminteach: %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr "dumpdir míchumtha: bhíothas ag súil le '%c' ach fuarthas %#3o"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "dumpdir míchumtha: 'X' faoi dhó"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "dumpdir míchumtha: ainm folamh i 'R'"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "dumpdir míchumtha: 'T' gan 'R' roimhe"
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "dumpdir míchumtha: ainm folamh i 'T'"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 "dumpdir míchumtha: bhíothas ag súil le '%c' ach fuarthas deireadh na sonraí"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr "dumpdir míchumtha: níor úsáideadh 'X' riamh"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Ní féidir comhadlann shealadach a chruthú le teimpléad %s"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: ní féidir an chomhadlann a stat: gan ghlanadh"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: tá an chomhadlann ar ghléas eile ar fad; gan ghlanadh"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: %s á scriosadh\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Ní féidir scriosadh a dhéanamh"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: ag fágáil ar lár"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "bloc %s: ** bloc de NULanna **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "bloc %s: ** Deireadh comhaid **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "bloc %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Bearnaí sa cheanntásc; ag súil le luach uimhriúil %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1195,141 +1226,160 @@ msgstr ""
 "ag glacadh le comhlánú dénártha"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Tá an luach ochtnártha %.*s as raon %s sa chartlann"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Tá ceanntásca le bunuimhir 64 i léig sa chartlann"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "Teaghrán %s le sín agus bunuimhir 64 as raon %s sa chartlann"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Tá an luach le bunuimhir 256 as raon %s sa chartlann"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Tá %.*s sa chartlann; ag súil le luach uimhriúil %s"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Tá an luach cartlainne %s as raon %s: %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " nasc le %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " cineál anaithnid comhaid %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Nasc Fada--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Ainm Fada--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Ceanntásc Imleabhair--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Ar lean ag beart %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Comhadlann á cruthú:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "%s á athainmniú go %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Ní féidir athainmniú go %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "%s á athainmniú go %s arís\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Ní féidir an chomhadlann reatha a shábháil"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Ní féidir an chomhadlann reatha a athrú"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Scriosadh an comhad sular léadh é"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Scriosadh an comhad sular léadh é"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "macphróiseas"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "bealach idir próisis"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr "Aimsíodh saoróga in ainmneacha comhaid."
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr "Úsáid --wildcards chun comhoiriúnú patrún a chumasú, nó --no-wildcards"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "chun an rabhadh seo a mhúchadh."
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Ní sa chartlann é"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Níl rud riachtanach sa chartlann"
 
-#: src/tar.c:79
+#: src/names.c:894
+#, fuzzy
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr "Níl --preserve-order comhoiriúnach do --listed-incremental"
+
+#: src/names.c:900
+#, fuzzy
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr "Níl --preserve-order comhoiriúnach do --listed-incremental"
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Tá an gnáth-ionchur de dhíth ar na roghanna `-%s' agus `-%s'"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Formáid neamhbhailí chartlainne"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "Níl roghanna GNU ar fáil d'fhormáid neamh-chomhoiriúnach chartlainne"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
@@ -1337,7 +1387,7 @@ msgstr ""
 "Stíl anaithnid athfhriotail `%s'. Bain triail as `%s --quoting-style=help' "
 "chun liosta a fheiceáil."
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1357,7 +1407,7 @@ msgstr ""
 "(foclach).\n"
 "  tar -xf cartlann.tar        # Bain gach comhad amach as cartlann.tar.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1379,87 +1429,80 @@ msgstr ""
 "bhfuil\n"
 "  never, simple   déan cúltacaí simplí i gcónaí\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Príomh-mhód oibre:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "taispeáin an t-ábhar i gcartlann"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "bain comhaid as cartlann"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "cruthaigh cartlann nua"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "taispeáin difríochtaí idir cartlann agus córas comhaid"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "iarcheangail le deireadh cartlainne"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "ná hiarcheangail ach comhaid mhionathraithe leis an gcartlann"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "iarcheangail comhaid tar le cartlann"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "scrios as an gcartlann (nach ar théipeanna maighnéadacha!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr "tástáil lipéad imleabhair na cartlainne agus scoir"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Mionathraitheoirí oibríochta:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "caith le gannchomhaid go héifeachtach"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr "PRÍOMH[.MION]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 "socraigh leagan fhormáid na ngannchomhad le húsáid (--sparse intuigthe)"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "déan cúltaca incriminteach de shean-nós GNU"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "COMHAD"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "déan cúltaca incriminteach nua-aoise GNU"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr ""
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "ná scoir le stádas earráide má tá comhad doléite ann"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "UIMHIR"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1471,122 +1514,126 @@ msgstr ""
 "extract nó --list agus nuair a thugtar liosta comhad ar líne na n-orduithe "
 "nó leis an rogha -T; de réir réamhshocraithe UIMHIR=1"
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "tá an chartlann inchuardaithe"
 
-#: src/tar.c:418
+#: src/tar.c:436
+#, fuzzy
+msgid "archive is not seekable"
+msgstr "tá an chartlann inchuardaithe"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 "ná seiceáil uimhreacha gléasanna agus cartlanna incriminteacha á gcruthú"
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 "seiceáil uimhreacha gléasanna agus cartlanna incriminteacha á gcruthú "
 "(réamhshocrú)"
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "Rialú forscríofa:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "fíoraigh an chartlann i ndiaidh ag scríobh"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "scrios comhaid i ndiaidh iad a chur leis an gcartlann"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "ná forscríobh comhaid atá ann le linn baint amach"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 "ná forscríobh comhaid atá ann má tá siad níos nuaí ná na cinn sa chartlann"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "forscríobh comhaid atá ann le linn baint amach"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "scrios gach comhaid sula scríobhtar air"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "folmhaigh géagchóras sula mbaintear comhadlann amach"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "ná forscríobh meiteashonraí comhadlainne"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 "forscríobh meiteashonraí de chomhadlanna atá ann agus cartlanna á mbaint "
 "amach (réamhshocrú)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Roghnaigh sruth aschurtha:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "bain comhaid amach agus scríobh ar an ngnáth-aschur"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "ORDÚ"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "píopaigh comhaid bhainte go ríomhchlár eile"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "ná bac le cóid scortha na macphróiseas"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr "láimhseáil cóid scortha nach nialas ó mhacphróisis mar earráidí"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Tréithe comhaid á láimhseáil:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "éiligh AINM mar úinéir de chomhaid bhreise"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "éiligh AINM mar ghrúpa de chomhaid bhreise"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "DÁTA-NÓ-COMHAD"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "socraigh am mionathraithe na gcomhad nua de réir DÁTA-NÓ-COMHAD"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "ATHRUITHE"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "déan ATHRUITHE ar mhód de chomhaid bhreise"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "MODH"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1596,27 +1643,31 @@ msgstr ""
 "ndiaidh na comhaid a léamh (MODH='replace', réamhshocraithe), nó gan a "
 "bheith ag socrú na n-amanna sa chéad áit (MODH='system')"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "ná bain am mionathraithe an chomhaid"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+#, fuzzy
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr "bain triail as úinéireacht a choinneáil"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+#, fuzzy
+msgid "extract files as yourself (default for ordinary users)"
 msgstr "bain comhaid amach mar thusa féin"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "bain úsáid as uimhreacha d'ainmneacha úsáideora/grúpa"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr "bain eolas faoi cheadanna (réamhshocrú don fhorúsáideoir)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
@@ -1624,15 +1675,15 @@ msgstr ""
 "cuir umask an úsáideora i bhfeidhm agus ceadanna á mbaint ón chartlann "
 "(réamhshocrú do ghnáthúsáideoirí)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "sórtáil ainmneacha le cur in oiriúint"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "ar comhbhrí le -p agus -s araon"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
@@ -1640,139 +1691,139 @@ msgstr ""
 "ná socraigh amanna mionathraithe ná ceadanna de na comhadlanna go dtí go "
 "bhfuil an bhaint curtha i gcrích"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "cealaigh an éifeacht de rogha --delay-directory-restore"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "Roghnú gléis agus malartú:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "CARTLANN"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "bain úsáid as cartlann chomhaid nó gléas CARTLANN"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "is logánta í an chartlann fiú má tá idirstad ina hainm"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "bain úsáid as ORDÚ in ionad rmt"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "bain úsáid as ORDÚ cian in ionad rsh"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "sonraigh tiomántán agus a dhlús"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "cruthaigh/liostaigh/bain amach cartlann le hiliomad imleabhair"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "athraigh téip i ndiaidh UIMHIR × 1024 beart"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "rith script i ndiaidh gach téip (-M intuigthe)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "úsáid/nuashonraigh an uimhir imleabhair i gCOMHAD"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Blocáil ghléis:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "BLOIC"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "BLOIC × 512 beart sa taifead"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "UIMHIR beart sa taifead, iolraí de 512"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "déan neamhshuim ar bhloic nialasacha sa chartlann (is ionann le EOF)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "athbhlocáil le linn léimh (le píopaí 4.2BSD)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Roghnú formáide:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "FORMÁID"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "cruthaigh cartlann san fhormáid seo"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "Is FORMÁID ceann de na rudaí seo:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "seanfhormáid V7 tar"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "formáid de réir GNU tar <= 1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "formáid de réir GNU tar 1.13"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "formáid POSIX 1003.1-1988 (ustar)"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "formáid POSIX 1003.1-2001 (pax)"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "ar comhbhrí le pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "is ionann le --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "is ionann le --format=posix"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "lorgfhocal[[:]=luach][,lorgfhocal[[:]=luach]]..."
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "rialaigh lorgfhocail pax"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "TÉACS"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
@@ -1780,105 +1831,79 @@ msgstr ""
 "cruthaigh cartlann le TÉACS mar ainm imleabhair; úsáid TÉACS mar phatrún "
 "globála ar an ainm imleabhair agus an chartlann á liostú/baint amach"
 
-#: src/tar.c:593
+#: src/tar.c:613
 msgid "Compression options:"
 msgstr "Roghanna comhbhrúite:"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr "úsáid iarmhír na cartlainne chun an modh comhbhrúite a dhéanamh amach"
 
-#: src/tar.c:597
-#, fuzzy
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
-msgstr "úsáid iarmhír na cartlainne chun an modh comhbhrúite a dhéanamh amach"
-
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "scag an chartlann le bzip2"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "scag an chartlann le gzip"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "scag an chartlann le compress"
-
-#: src/tar.c:609
-msgid "filter the archive through lzma"
-msgstr "scag an chartlann le lzma"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "scag an chartlann le gzip"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "scag an chartlann le gzip"
+msgstr ""
+"ná húsáid iarmhír na cartlainne chun an clár comhbhrúite a dhéanamh amach"
 
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "CLÁR"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "scag le CLÁR (ní foláir -d)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Roghnú comhaid logánta:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 "cuir an COMHAD sainithe leis an gcartlann (is áisiúil an rogha seo nuair atá "
 "dais ag tosach an chomhadainm)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "COMHADLANN"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "athraigh go dtí COMHADLANN"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "tóg ainmneacha le baint/cruthú as comhad COMHAD"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "léigh ainmneacha, foirceanta le NULanna; múch -C"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
-msgstr ""
+msgstr "díchumasaigh an rogha --null roimhe seo"
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 "bain comharthaí athfhriotail ó chomhadainmneacha a léadh le -T (réamhshocrú)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr "ná bain comharthaí athfhriotail ó chomhadainmneacha a léadh le -T"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "PATRÚN"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "fág comhaid as an áireamh, tugtha mar PHATRÚN"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "fág as an áireamh aon phatrún atá i gCOMHAD"
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
@@ -1886,90 +1911,94 @@ msgstr ""
 "gabh thar ábhar na gcomhadlann ina bhfuil CACHEDIR.TAG, seachas an comhad "
 "clibe féin"
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "gabh thar gach rud faoi chomhadlanna ina bhfuil CACHEDIR.TAG"
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "gabh thar chomhadlanna ina bhfuil CACHEDIR.TAG"
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr "gabh thar ábhar na gcomhadlann ina bhfuil COMHAD, seachas COMHAD féin"
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr "gabh thar gach rud faoi chomhadlanna ina bhfuil COMHAD"
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr "gabh thar chomhadlanna a bhfuil COMHAD iontu"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr "gabh thar chomhadlanna a bhaineann le córas rialaithe foinsí"
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "ná téigh isteach i bhfochomhadlanna go huathoibríoch"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "ná fág an córas comhaid seo agus cartlann á cruthú"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "téigh isteach i gcomhadlanna (réamhshocrú)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "ná struipeáil `/' tosaigh ó ainmneacha comhaid"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 "lean naisc shiombalacha; cartlannaigh agus dumpáil na comhaid a nascann na "
 "naisc leo"
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 "lean naisc chrua; cartlannaigh agus dumpáil na comhaid a nascann na naisc leo"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "AINM-BAILL"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "tosaigh ag ball AINM-BAILL sa chartlann"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "ná sábháil comhaid níos nuaí ná DÁTA-NÓ-COMHAD"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "DÁTA"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "déan comparáid le dáta/am modhnaithe"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "MODH"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "déan cúltaca sula scriostar, roghnaigh modh oibre maidir le leaganacha"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "TEAGHRÁN"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1977,92 +2006,101 @@ msgstr ""
 "déan cúltaca roimh bhaint, agus sáraigh an gnáth-iarmhír ('~' mura dtugtar é "
 "leis an athróg thimpeallachta SIMPLE_BACKUP_SUFFIX)"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr "Trasfhoirmiú ainmneacha comhaid:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr "struipeáil UIMHIR comhpháirt tosaigh ó ainmneacha comhaid"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "SLONN"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 "Úsáid ordú ionadaíochta SLONN, i bhformáid \"sed\", chun ainmneacha comhaid "
 "a thrasfhoirmiú"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 "Roghanna maidir le comhoiriúnú ainmneacha comhaid (cuirfear iad seo i "
 "bhfeidhm do phatrúin eisiata agus do phatrúin iniata araon):"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr "ná bí cásíogair"
 
 # subject is "exclude patterns"
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr "comhoiriúnaíonn patrúin do thosach ainm an chomhaid"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr "comhoiriúnaíonn patrúin tar éis gach `/' (réamhshocrú i gcás eisiata)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr "dealaigh idir litreacha beaga/móra (réamhshocrú)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr "úsáid saoróga (réamhshocrú do phatrúin eisiata)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "comhoiriúnú teaghráin carachtar ar charachtar"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr "ní ghlacann saoróga le `/'"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr "comhoiriúnaíonn saoróga do `/' (réamhshocrú le patrúin eisiata)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Aschur faisnéiseach:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "taispeáin gach comhad atá próiseáilte, go foclach"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+#, fuzzy
+msgid "warning control"
+msgstr "Rialú forscríofa:"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr "cuir dul chun cinn ar taispeáint, gach UIMHIRú taifid (réamhshocrú 10)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr "GNÍOMH"
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr "déan GNÍOMH ag gach seicphointe"
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "taispeáin eolas mura bhfuil gach nasc dumpáilte"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "COMHARTHA"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2074,27 +2112,27 @@ msgstr ""
 "Ceadaítear na comharthaí seo a leanas: SIGHUP, SIGQUIT, SIGINT, SIGUSR1 agus "
 "SIGUSR2; glacfar leis na hainmneacha céanna gan an réimír SIG freisin"
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "taispeáin dátaí mionathraithe de réir UTC"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "scríobh aschur foclach i gCOMHAD"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "taispeáin bloc sa chartlann le gach teachtaireacht"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "iarr deimhniú ar gach gníomh"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "taispeáin réamhshocruithe tar"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
@@ -2102,33 +2140,33 @@ msgstr ""
 "agus á liostú nó á bhaint amach, taispeáin gach comhadlann nach bhfuil "
 "comhoiriúnaithe don chuardach"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr "taispeáin ainmneacha comhaid/cartlainne i ndiaidh trasfhoirmithe"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "STÍL"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 "socraigh stíl athfhriotail ainmneacha; féach thíos le haghaidh luachanna "
 "bailí do STÍL"
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "cuir carachtair athfhriotail timpeall na carachtair ó TEAGHRÁN"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "ná húsáid comharthaí athfhriotail timpeall carachtair ó TEAGHRÁN"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Roghanna Comhoiriúnachta:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
@@ -2136,56 +2174,64 @@ msgstr ""
 "is ionann le --old-archive le linn cruthaithe; is ionann le --no-same-owner "
 "le linn baint"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Roghanna eile:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "cuir bac ar úsáid de roghanna gurbh fhéidir leo a bheith urchóideach"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Ná tabhair ach ceann de na roghanna `-Acdtrux'"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Roghanna contrártha comhbhrúite"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "Comhartha anaithnid: %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "Comhad samplach dáta gan aimsiú"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Formáid dáta anaithnid; ag baint úsáid as %s in ionad %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "Rogha %s: Ag caitheamh le dáta `%s' mar %s"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s: léadh an liosta comhad cheana"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s: tá carachtar nialasach sa chomhadainm a léadh"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "scag an chartlann le xz"
+
+#: src/tar.c:1290
+#, fuzzy
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr "Argóintí bailí do roghanna --quoting-style:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2193,111 +2239,123 @@ msgstr ""
 "\n"
 "Luachanna réamhshocraithe don tar *seo*:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Fachtóir bacainneach neamhbhailí"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Fad téipe neamhbhailí"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+#, fuzzy
+msgid "Invalid incremental level value"
+msgstr "Drochfhormáid incriminteach"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Níos mó ná spriocdháta amháin"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr "Leagan neamhbhailí ar fhormáid na ngannchomhad"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr "ní thacaítear le --atime-preserve='system' ar an chóras seo"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr "ní mór do luach --checkpoint a bheith ina slánuimhir"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: Grúpa neamhbhailí"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Mód neamhbhailí ar rogha"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Uimhir neamhbhailí"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Úinéir neamhbhailí"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
+"tá an rogha --preserve dulta i léig, bain úsáid as --preserve-permissions --"
+"preserve-order ina háit"
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Méid taifid neamhbhailí"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Ní foláir méid taifid a bheith iolraí de %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Tá líon na mball neamhbhailí"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr "Ní cheadaítear ach aon rogha --to-command amháin"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "Tá an argóint dlúis míchumtha: %s"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "Dlús anaithnid: `%c'"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "Níl na roghanna `-[0-7][lmh]' ar fáil sa leagan seo tar"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[COMHAD]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Tá gá le hargóint ar an seanrogha `%c'."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "tá an rogha --occurrence gan bhrí in éagmais liosta comhad"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "níl an rogha --occurrence ar fáil sa mhód iarrtha"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Ní foláir an rogha `-M' le níos mó ná cartlann amháin"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Ní féidir --listed-incremental a úsáid le --newer"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+#, fuzzy
+msgid "--level is meaningless without --listed-incremental"
+msgstr "Níl --preserve-order comhoiriúnach do --listed-incremental"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
@@ -2307,50 +2365,51 @@ msgstr[2] "%s: Lipéad imleabhair rófhada (%lu bheart ar a mhéad)"
 msgstr[3] "%s: Lipéad imleabhair rófhada (%lu mbeart ar a mhéad)"
 msgstr[4] "%s: Lipéad imleabhair rófhada (%lu beart ar a mhéad)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Ní féidir cartlanna le hiliomad imleabhair a fhíorú"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Ní féidir cartlanna comhbhrúite a fhíorú"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Ní féidir úsáid a bhaint as cartlanna il-ranna comhbhrúite"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "Ní féidir cartlanna comhbhrúite a iarcheangal"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "níl an rogha --pax-option le fáil ach le cartlanna POSIX"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
-msgstr ""
+msgstr "Ní cheadaítear fad an imleabhair a bheith níos lú ná an mhéid taifid"
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
-msgstr ""
+msgstr "Níl --preserve-order comhoiriúnach do --listed-incremental"
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Ní chruthófar cartlann fholamh (go cladhartha)"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Níl na roghanna `-Aru' ar fáil in éineacht le `-f -'"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Ní foláir rogha amháin de `-Acdtrux' ar a laghad"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
-msgstr ""
+msgstr "Scor le stádas teipthe de bharr earráidí roimhe seo"
 
 #: src/update.c:86
 #, c-format
@@ -2362,53 +2421,58 @@ msgstr[2] "%s: Chrap an comhad %s bheart"
 msgstr[3] "%s: Chrap an comhad %s mbeart"
 msgstr[4] "%s: Chrap an comhad %s beart"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "Tá an lorgfhocal %s anaithnid nó nach bhfuil sé curtha i bhfeidhm fós"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Stampa ama as raon"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "Ní féidir an patrún %s a úsáid"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "Ní féidir an lorgfhocal %s a shárú"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "Ceanntásc míchumtha breisithe: fad ar iarraidh"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr "Fad an cheanntáisc breisithe as raon"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "Fad %*s as raon sa cheanntásc breisithe"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr "Ceanntásc míchumtha breisithe: spás bán ar iarraidh tar éis an fhaid"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Ceanntásc míchumtha breisithe: sín chothroime ar iarraidh"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr "Ceanntásc míchumtha breisithe: líne nua ar iarraidh"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr ""
 "Lorgfhocal anaithnid `%s' sa cheanntásc breisithe; ag déanamh neamhshuim air"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
@@ -2416,29 +2480,29 @@ msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "Tá an ceanntásc breisithe %s=%s as raon %s..%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Ceanntásc míchumtha breisithe: %s=%s neamhbhailí"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Ceanntásc míchumtha breisithe: %s=%s sa bhreis"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 "Ceanntásc míchumtha breisithe: %s neamhbhailí: bhíothas ag súil le "
 "teormharcóir %c"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr "Ceanntásc míchumtha breisithe: %s neamhbhailí: corruimhir de luachanna"
@@ -2479,7 +2543,7 @@ msgstr "Seicphointe scríofa %u"
 msgid "Read checkpoint %u"
 msgstr "Seicphointe léimh %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
@@ -2488,89 +2552,95 @@ msgstr ""
 "paxutils.\n"
 "Is iad na ROGHANNA:\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr "Roghanna - cruthú comhad:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "MÉID"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "Cruthaigh comhad leis an MÉID seo"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "Scríobh i gcomhad AINM, in ionad an ghnáth-aschuir"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "Léigh ainmneacha comhaid ó COMHAD"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr "Léann -T ainmneacha, foirceanta le NULanna"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 "Líon an comhad leis an PATRÚN sonraithe. Is é PATRÚN 'default' nó 'zeros'"
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "Méid bhloic sa gannchomhad"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 "Cruthaigh gannchomhad. Tugtar an mapa comhaid ar an chuid eile de líne na n-"
 "orduithe."
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr "FRITHÁIREAMH"
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr "Léim go dtí an FRITHÁIREAMH roimh scríobh na sonraí"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr "Roghanna - staitisticí comhaid"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 "Taispeáin inneachar an struct stat le haghaidh gach comhad sonraithe. "
 "FORMÁID réamhshocraithe: "
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr "Roghanna - feidhmiú sioncrónach:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr " [ROGHA...]"
+
+#: tests/genfile.c:165
+#, fuzzy
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 "Rith an tORDÚ sonraithe. Is áisiúil an rogha seo le --checkpoint agus ceann "
 "de --cut, --append, nó --touch"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 "Déan an gníomh sonraithe (féach thíos) nuair a shroichtear seicphointe UIMHIR"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr "Socraigh an dáta le haghaidh an chéad rogha --touch eile"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr "Taispeáin na seicphointí a ritheadh agus stádas scortha den ORDÚ"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
@@ -2578,7 +2648,7 @@ msgstr ""
 "Gníomhartha rite sioncrónaigh. Ritear iad seo nuair a shroichtear an uimhir "
 "sheicphointe a sonraíodh leis an rogha --checkpoint"
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
@@ -2586,146 +2656,214 @@ msgstr ""
 "Teasc COMHAD go dtí an mhéid a sonraíodh leis an rogha --length roimhe seo "
 "(nó teasc go dtí 0, mura sonraítear an rogha seo)"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 "Iarcheangail MÉID beart le COMHAD. Tógtar MÉID ón rogha --length roimhe seo."
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "Nuashonraigh na hamanna rochtana/mionathraithe de CHOMHAD"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "Rith ORDÚ"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "Méid neamhbhailí: %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Uimhir as raon: %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr "Méid diúltach: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "theip ar stat(%s)"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
-msgstr ""
+msgstr "fad iarrtha %lu, fíorfhad %lu"
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
-msgstr ""
+msgstr "ní gannchomhad é an comhad cruthaithe"
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "Earráid agus uimhir á parsáil i ngar do `%s'"
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "Formáid anaithnid ar an dáta"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[ARGÓINTÍ...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "ní féidir `%s' a oscailt"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 msgid "cannot seek"
 msgstr "ní féidir 'seek' a dhéanamh"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "tá carachtar nialasach sa chomhadainm"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 "ní féidir gannchomhaid a chruthú ar an ngnáth-aschur; úsáid rogha --file"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "masc mícheart (i ngar do `%s')"
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr "Réimse anaithnid `%s'"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "ní féidir an t-am a shocrú ar `%s'"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "ní féidir `%s' a oscailt"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "D'éirigh leis an ordú\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "Theip ar an ordú le stádas %d\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "Stopadh an t-ordú le comhartha %d\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "Stopadh an t-ordú ar chomhartha %d\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "Rinne an t-ordú córdhumpa\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "Ordú críochnaithe\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "Tá ainmneacha comhaid de dhíth ar --stat"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "an iomarca argóintí"
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: rogha neamhcheadaithe -- %c\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Seol tuairiscí fabhtanna chuig <%s>.\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "%s á léamh\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Ní féidir biseach a dhéanamh i ndiaidh earráid: ag scor"
+
+#~ msgid "suppress this warning."
+#~ msgstr "chun an rabhadh seo a mhúchadh."
+
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "scag an chartlann le bzip2"
+
+#~ msgid "filter the archive through gzip"
+#~ msgstr "scag an chartlann le gzip"
+
+#~ msgid "filter the archive through compress"
+#~ msgstr "scag an chartlann le compress"
+
+#~ msgid "filter the archive through lzma"
+#~ msgstr "scag an chartlann le lzma"
+
+#~ msgid "filter the archive through lzop"
+#~ msgstr "scag an chartlann le lzop"
+
+#~ msgid "Input string too long"
+#~ msgstr "Teaghrán ionchurtha rófhada"
+
+#~ msgid "Number syntax error"
+#~ msgstr "Earráid chomhréire in uimhir"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Ní féidir maolán a dháileadh\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Ní féidir maolán a dháileadh"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Bain triail as `%s --help' chun tuilleadh eolais a fháil.\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Úsáid: %s [ROGHA]\n"
+#~ "Láimhseáil tiomántán téipe, agus glac le horduithe ó chianphróiseas.\n"
+#~ "\n"
+#~ "  --version  Taispeáin eolas faoin leagan.\n"
+#~ "  --help     Taispeáin an chabhair seo.\n"
+
+#~ msgid "Seek offset error"
+#~ msgstr "Earráid i bhfritháireamh 'seek'"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Comhadchríoch gan choinne"
 
 #~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
 #~ msgstr "Rabhadh: níl an rogha -I ar fáil; ar mhaith leat -j nó -T?"
 
-#, fuzzy
-#~ msgid "cancel effect of the previous --transform-links option"
-#~ msgstr "cealaigh an éifeacht de rogha --delay-directory-restore"
-
 #~ msgid "Error exit delayed from previous errors"
 #~ msgstr "Earráid; tobscor moillithe ó earráidí roimhe seo"
 
@@ -2761,9 +2899,6 @@ msgstr "an iomarca argóintí"
 #~ msgid "Unknown demangling command %s"
 #~ msgstr "Ordú anaithnid díchoscartha %s"
 
-#~ msgid "Time stamp out of range"
-#~ msgstr "Stampa ama as raon"
-
 #~ msgid "Modification time (seconds) out of range"
 #~ msgstr "Am mionathraithe (soicindí) as raon"
 
@@ -2776,9 +2911,6 @@ msgstr "an iomarca argóintí"
 #~ msgid "Error reading time stamp"
 #~ msgstr "Earráid agus stampa ama á léamh"
 
-#~ msgid "Unexpected EOF"
-#~ msgstr "Comhadchríoch gan choinne"
-
 #~ msgid "same as -N"
 #~ msgstr "ar comhbhrí le -N"
 
index d67ca8aa6dba19cc22668d7ab8bb362cd2ebb21d..80ef7438bc6e43bcebca3ae81310f1b82f79243a 100644 (file)
Binary files a/po/gl.gmo and b/po/gl.gmo differ
index ecfb076da41293d82f20f99e961ee3c2c91fc684..170fc842351483bedaf026811e8c1662c81e7ca5 100644 (file)
--- a/po/gl.po
+++ b/po/gl.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tar 1.13.25\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
 "PO-Revision-Date: 2002-03-26 19:17+0100\n"
 "Last-Translator: Jacobo Tarrío Barreiro <jtarrio@iname.com>\n"
 "Language-Team: Galician <gpul-traduccion@ceu.fi.udc.es>\n"
@@ -14,73 +14,73 @@ msgstr ""
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "argumento %s non válido para %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "argumento %s ambiguo para %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Os argumentos válidos son:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr ""
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr ""
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr ""
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr ""
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr ""
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
 msgstr ""
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr ""
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr ""
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 #, fuzzy
 msgid " [OPTION...]"
 msgstr ""
 "\n"
 "Emprego: %s [OPCIÓN]...\n"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, fuzzy, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Escriba '%s --help' para máis información.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, fuzzy, c-format
 msgid "Report bugs to %s.\n"
 msgstr ""
@@ -88,214 +88,121 @@ msgstr ""
 "Informe dos erros no programa a <bug-tar@gnu.org>.\n"
 "Informe dos erros na traducción a <proxecto@trasno.net>.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Erro do sistema descoñecido"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr ""
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr ""
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr ""
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr ""
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr ""
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr ""
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr ""
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr ""
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, fuzzy, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: a opción \"%s\" precisa dun argumento\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr ""
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr ""
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: a opción \"%s\" é ambigua\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: a opción \"--%s\" non admite un argumento\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: a opción \"%c%s\" non admite un argumento\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: a opción \"%s\" precisa dun argumento\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: opción \"--%s\" non recoñecida\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: opción \"%c%s\" non recoñecida\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: opción non admitida -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: opción non válida -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: a opción precisa dun argumento -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: a opción \"-W %s\" é ambigua\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: a opción \"-W %s\" non admite un argumento\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "memoria esgotada"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, fuzzy, c-format
 msgid "unable to record current working directory"
 msgstr "Non se puido obte-lo directorio actual"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, fuzzy, c-format
 msgid "failed to return to initial working directory"
 msgstr "Non se pode armacena-lo directorio de traballo"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Non se pode %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Aviso: Non se pode %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Non se pode cambia-lo modo a %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Non se pode cambia-la propiedade ao uid %lu, gid %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Non se pode libar a %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, fuzzy, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Erro de lectura no byte %s, lendo %lu bytes"
-msgstr[1] "%s: Erro de lectura no byte %s, lendo %lu bytes"
-
-#: lib/paxerror.c:192
-#, fuzzy, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Aviso: Erro de lectura no byte %s, lendo %lu bytes"
-msgstr[1] "%s: Aviso: Erro de lectura no byte %s, lendo %lu bytes"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Non se pode saltar a %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Aviso: Non se pode saltar a %s"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Non se pode crear unha ligazón simbólica a %s"
-
-#: lib/paxerror.c:349
-#, fuzzy, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Graváronse só %lu de %lu bytes"
-msgstr[1] "%s: Graváronse só %lu de %lu bytes"
-
-#: lib/paxnames.c:155
-#, fuzzy, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Eliminadndo o \"%.*s\" inicial dos nomes dos membros"
-
-#: lib/paxnames.c:156
-#, fuzzy, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Eliminadndo o \"%.*s\" inicial dos nomes dos membros"
-
-#: lib/paxnames.c:169
-#, fuzzy
-msgid "Substituting `.' for empty member name"
-msgstr "Eliminadndo o \"%.*s\" inicial dos nomes dos membros"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr ""
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -309,17 +216,17 @@ msgstr ""
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "\""
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "\""
 
@@ -329,7 +236,7 @@ msgstr "\""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr ""
 
@@ -339,38 +246,28 @@ msgstr ""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr ""
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Servicio non dispoñible"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "entrada estándar"
-
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "saída estándar"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Non se pode executar un intérprete de comandos remoto"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -381,19 +278,19 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, fuzzy, c-format
 msgid "Written by %s.\n"
 msgstr "Escrito por François Pinard"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, fuzzy, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Escrito por François Pinard"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, fuzzy, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Escrito por François Pinard"
@@ -401,7 +298,7 @@ msgstr "Escrito por Fran
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -411,7 +308,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -421,7 +318,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -431,7 +328,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -441,7 +338,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -452,7 +349,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -463,7 +360,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -475,183 +372,334 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 "\n"
 "Informe dos erros no programa a <bug-tar@gnu.org>.\n"
 "Informe dos erros na traducción a <proxecto@trasno.net>.\n"
 
-#: lib/version-etc.c:182
-#, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
+"\n"
+"Informe dos erros no programa a <bug-tar@gnu.org>.\n"
+"Informe dos erros na traducción a <proxecto@trasno.net>.\n"
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:253
+#, c-format
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Non se pode reservar espacio para o buffer\n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Non se pode %s"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Aviso: Non se pode %s"
+
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Non se pode cambia-lo modo a %s"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Non se pode reservar espacio para o buffer"
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Non se pode cambia-la propiedade ao uid %lu, gid %lu"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:127
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Escriba '%s --help' para máis información.\n"
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Non se pode libar a %s"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:179 lib/paxerror.c:211
 #, fuzzy, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Erro de lectura no byte %s, lendo %lu bytes"
+msgstr[1] "%s: Erro de lectura no byte %s, lendo %lu bytes"
+
+#: lib/paxerror.c:192
+#, fuzzy, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Aviso: Erro de lectura no byte %s, lendo %lu bytes"
+msgstr[1] "%s: Aviso: Erro de lectura no byte %s, lendo %lu bytes"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Non se pode saltar a %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Aviso: Non se pode saltar a %s"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Non se pode crear unha ligazón simbólica a %s"
+
+#: lib/paxerror.c:349
+#, fuzzy, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Graváronse só %lu de %lu bytes"
+msgstr[1] "%s: Graváronse só %lu de %lu bytes"
+
+#: lib/paxnames.c:155
+#, fuzzy, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Eliminadndo o \"%.*s\" inicial dos nomes dos membros"
+
+#: lib/paxnames.c:156
+#, fuzzy, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Eliminadndo o \"%.*s\" inicial dos nomes dos membros"
+
+#: lib/paxnames.c:169
+#, fuzzy
+msgid "Substituting `.' for empty member name"
+msgstr "Eliminadndo o \"%.*s\" inicial dos nomes dos membros"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
 msgstr ""
-"Emprego: %s [OPCIÓN]\n"
-"Manipula unha unidade de fita, aceptando comandos dun proceso remoto.\n"
-"\n"
-"  --version  Amosar información da versión.\n"
-"  --help  Amosar esta axuda.\n"
 
-#: rmt/rmt.c:397
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Servicio non dispoñible"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "entrada estándar"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "saída estándar"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
+msgstr ""
+
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Non se pode executar un intérprete de comandos remoto"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Dirección de desprazamento fóra de rango"
+
+#: rmt/rmt.c:419
 #, fuzzy
-msgid "Seek offset error"
-msgstr "Desprazamento fóra de rango"
+msgid "Invalid seek direction"
+msgstr "Proporcionouse na opción un modo non válido"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Marca de tempo non válida"
+
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Desprazamento fóra de rango"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Dirección de desprazamento fóra de rango"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Lonxitude da fita non válida"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Desprazamento fóra de rango"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: Fin de ficheiro prematura\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Fin de ficheiro prematura"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "%s: opción non válida -- %c\n"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Fin de ficheiro inesperado nos nomes alterados"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr ""
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr ""
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "Non se puido abrir %s"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr ""
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Comando lixo"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Isto non semella un arquivo tar"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 #, fuzzy
 msgid "Total bytes written"
 msgstr "Bytes totais escritos: %s (%sB, %sB/s)\n"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr ""
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, fuzzy, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Bytes totais escritos: %s (%sB, %sB/s)\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(canalización)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Valor non válido para record_size"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Non se proporcionou o nome do arquivo"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Non se poden verifica-los arquivos da entrada/saída estándar"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr ""
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Non se poden actualiza-los arquivos comprimidos"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "No comezo da cinta, saíndo agora"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Demasiados erros, saíndo"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, fuzzy, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Tamaño do rexistro = %lu bloques"
 msgstr[1] "Tamaño do rexistro = %lu bloques"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, fuzzy, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Bloque desaliñado (%lu bytes) no arquivo"
 msgstr[1] "Bloque desaliñado (%lu bytes) no arquivo"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr "Non se pode recuar no arquivo; pode ser ilexible sen -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr ""
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: contén un número de volume non válido"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Desbordamento no número de volume"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Prepare o volume #%d para %s e prema enter: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "Chegouse á fin de ficheiro onde se esperaba unha resposta do usuario"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "AVISO: O arquivo está incompleto"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, fuzzy, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -663,125 +711,125 @@ msgstr ""
 " !          Executar outro intérprete de comandos\n"
 " ?          Amosar esta lista\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr ""
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr ""
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Non hai novos volumes; saíndo.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr ""
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr ""
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, fuzzy, c-format
 msgid "%s command failed"
 msgstr "O comando \"%s\" fallou"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, fuzzy, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s non continúa neste volume"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s non continúa neste volume"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s ten un tamaño incorrecto (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, fuzzy, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Este volume está fora da secuencia"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "O arquivo non está etiquetado para coincidir con %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "O volume %s non coincide con %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
 msgstr ""
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 #, fuzzy
 msgid "write did not end on a block boundary"
 msgstr "A fin do ficheiro (EOF) do arquivo %s non se atopa no límite do bloque"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, fuzzy, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "So se puido ler %lu de %lu bytes"
 msgstr[1] "So se puido ler %lu de %lu bytes"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "O contido é diferente"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Fin de ficheiro inesperado no arquivo"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "O tipo de ficheiro é diferente"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "O modo é diferente"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Os uid son diferentes"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Os gid son diferentes"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "A data de modificación é diferente"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "O tamaño é diferente"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Non ligado a %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "A ligazón simbólica é diferente"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "O número de dispositivo é diferente"
 
@@ -804,34 +852,34 @@ msgstr ""
 msgid "Verification may fail to locate original files."
 msgstr ""
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, fuzzy, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "FALLO NA VERIFICACION: detectáronse %d cabeceiras non válidas"
 msgstr[1] "FALLO NA VERIFICACION: detectáronse %d cabeceiras non válidas"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr ""
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr ""
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "valor %s fóra do rango de %s %s..%s; substituíndo %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "valor %s fóra do rango de %s %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Xerando cabeceiras octais negativas"
 
@@ -850,297 +898,283 @@ msgstr "%s: ficheiro sen cambios; non se envorca"
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: ficheiro sen cambios; non se envorca"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, fuzzy, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: O ficheiro encolleu %s bytes; enchendo con ceros"
 msgstr[1] "%s: O ficheiro encolleu %s bytes; enchendo con ceros"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: o ficheiro está nun sistema de ficheiros diferente; non se envorca"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 #, fuzzy
 msgid "contents not dumped"
 msgstr " (memoria volcada)"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Tipo de ficheiro descoñecido; ignórase este ficheiro"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, fuzzy, c-format
-msgid "Missing links to %s.\n"
+msgid "Missing links to %s."
 msgstr " ligazón a %s\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: ficheiro sen cambios; non se envorca"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: o ficheiro é o arquivo; non se envorca"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Ficheiro eliminado antes da súa lectura"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr ""
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: o ficheiro cambiou mentres se lía"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: ignórase o socket"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: ignórase a porta"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Pasando á seguinte cabeceira"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Borrando o que non sexan cabeceiras do arquivo"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr ""
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, fuzzy, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: a marca de tempo %s está %lu segundos no futuro"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Inconsistencia inesperada ao crea-lo directorio"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Renomeouse o directorio antes de poder estrae-lo seu estado"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Extraendo os ficheiros contiguos coma ficheiros normais"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Tentando extrae-las ligazóns simbólicas coma ligazóns duras"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Lendo %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Non se pode extraer -- o ficheiro é continuación doutro volume"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 #, fuzzy
 msgid "Unexpected long name header"
 msgstr "Fin de ficheiro (EOF) inesperado no arquivo"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, fuzzy, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr ""
 "%s: Tipo de ficheiro \"%c\" descoñecido, extraéndoo coma ficheiro normal"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr ""
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Non se puido copiar este ficheiro"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, fuzzy, c-format
 msgid "Cannot rename %s to %s"
 msgstr "%s: Non se pode renomear a %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "O erro non é recuperable: sáese agora"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, fuzzy, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Renomeouse o directorio"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Renomeouse o directorio"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: O directorio é novo"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Marca de tempo non válida"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 #, fuzzy
 msgid "Invalid modification time (seconds)"
 msgstr "Proporcionouse na opción un modo non válido"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr ""
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Número de dispositivo non válido"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Número de inode non válido"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr ""
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 #, fuzzy
 msgid "Read error in snapshot file"
 msgstr "Erro de lectura en %s"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 #, fuzzy
 msgid "Unexpected EOF in snapshot file"
 msgstr "Fin de ficheiro (EOF) inesperado no arquivo"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 #, fuzzy
 msgid "Unexpected field value in snapshot file"
 msgstr "Fin de ficheiro (EOF) inesperado no arquivo"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr ""
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr ""
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr ""
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr ""
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr ""
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr ""
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr ""
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr ""
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr ""
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, fuzzy, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Non se pode reservar memoria para o factor de bloqueo %d"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr ""
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, fuzzy, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: o ficheiro está nun sistema de ficheiros diferente; non se envorca"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Borrando %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Non se pode eliminar"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Omitíndoo"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "bloque %s: ** Bloque de nulos **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "bloque %s: ** Fin de Ficheiro **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "bloque %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr ""
 "Atopáronse espacios na cabeceira onde se esperaba un valor númerico de %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1148,147 +1182,162 @@ msgstr ""
 "a 2"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "O valor octal do arquivo %.*s está fóra do rango de %s"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "O arquivo contén cabeceiras base-64 obsoletas"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "A cadea base-64 asinada do arquivo %s está fóra do rango de %s"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "O valor base-256 do arquivo está fóra do rango de %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "O arquivo contén %.*s onde se esperaba un valor numérico de %s"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "O valor do arquivo %s está fóra do rango de %s %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " ligazón a %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " Tipo de ficheiro %s descoñecido\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr ""
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr ""
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Cabeceira de Volume--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Continúa no byte %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Creando o directorio:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Renomeando %s a %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Non se pode renomear a %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Renomeando %s a %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Non se pode armacena-lo directorio de traballo"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Non se pode cambia-lo directorio de traballo"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Ficheiro eliminado antes da súa lectura"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Ficheiro eliminado antes da súa lectura"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "proceso fillo"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "canle interproceso"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
-msgstr ""
-
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:601
+msgid "Pattern matching characters used in file names"
 msgstr ""
 
-#: src/names.c:597
-msgid "suppress this warning."
+#: src/names.c:603
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Non atopado no arquivo"
 
-#: src/names.c:615
+#: src/names.c:622
 #, fuzzy, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Non atopado no arquivo"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "As opcións \"-%s\" e \"-%s\" precisan da entrada estándar"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, fuzzy, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Grupo non válido"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "Quérense as características de GNU no formato de arquivo incompatible"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
 msgstr ""
 
-#: src/tar.c:336
+#: src/tar.c:347
 #, fuzzy
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
@@ -1309,7 +1358,7 @@ msgstr ""
 "                               # dando moitos datos\n"
 "  %s -xf arquivo.tar           # Extraer tódolos ficheiros de arquivo.tar.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 #, fuzzy
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
@@ -1331,87 +1380,80 @@ msgstr ""
 "  nil, existing   numera se existen copias de seguridade numeradas\n"
 "  never, simple   sempre fai copias de seguridade sinxelas\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr ""
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr ""
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr ""
 
-#: src/tar.c:378
+#: src/tar.c:394
 #, fuzzy
 msgid "create a new archive"
 msgstr "Fin de ficheiro inesperado no arquivo"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr ""
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr ""
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr ""
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr ""
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr ""
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr ""
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr ""
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr ""
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr ""
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr ""
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:408
-msgid "do not exit with nonzero on unreadable files"
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
 msgstr ""
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
+#: src/tar.c:426
+msgid "do not exit with nonzero on unreadable files"
 msgstr ""
 
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1419,580 +1461,568 @@ msgid ""
 "command line or via the -T option; NUMBER defaults to 1"
 msgstr ""
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr ""
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr ""
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr ""
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr ""
 
-#: src/tar.c:432
+#: src/tar.c:452
 #, fuzzy
 msgid "remove files after adding them to the archive"
 msgstr "Borrando a especificación de unidade dos nomes do arquivo"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr ""
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr ""
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr ""
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr ""
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr ""
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr ""
 
-#: src/tar.c:455
+#: src/tar.c:475
 #, fuzzy
 msgid "extract files to standard output"
 msgstr "Erro ao gravar na saída estándar"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr ""
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr ""
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr ""
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr ""
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr ""
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr ""
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr ""
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr ""
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr ""
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr ""
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
 "place (METHOD='system')"
 msgstr ""
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr ""
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr ""
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
 msgstr ""
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr ""
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
 msgstr ""
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr ""
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr ""
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr ""
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr ""
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr ""
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr ""
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr ""
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr ""
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr ""
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr ""
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr ""
 
-#: src/tar.c:536
+#: src/tar.c:556
 #, fuzzy
 msgid "create/list/extract multi-volume archive"
 msgstr "Non se pode verifica-los arquivos multi-volume"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr ""
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr ""
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr ""
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr ""
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr ""
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr ""
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr ""
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr ""
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr ""
 
-#: src/tar.c:562
+#: src/tar.c:582
 #, fuzzy
 msgid "Archive format selection:"
 msgstr "Arquivar da entrada estándar"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr ""
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr ""
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr ""
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr ""
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr ""
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr ""
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr ""
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr ""
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr ""
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr ""
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr ""
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr ""
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr ""
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr ""
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
 msgstr ""
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Opcións de compresión conflictivas"
 
-#: src/tar.c:595
+#: src/tar.c:615
 #, fuzzy
 msgid "use archive suffix to determine the compression program"
 msgstr "Non se puido escribir no programa de compresión"
 
-#: src/tar.c:597
+#: src/tar.c:617
 #, fuzzy
 msgid "do not use archive suffix to determine the compression program"
 msgstr "Non se puido escribir no programa de compresión"
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr ""
-
-#: src/tar.c:602
-#, fuzzy
-msgid "filter the archive through gzip"
-msgstr "%s: o ficheiro é o arquivo; non se envorca"
-
-#: src/tar.c:606
-#, fuzzy
-msgid "filter the archive through compress"
-msgstr "%s: o ficheiro é o arquivo; non se envorca"
-
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "%s: o ficheiro é o arquivo; non se envorca"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "%s: o ficheiro é o arquivo; non se envorca"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "%s: o ficheiro é o arquivo; non se envorca"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr ""
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr ""
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr ""
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr ""
 
-#: src/tar.c:625
+#: src/tar.c:641
 #, fuzzy
 msgid "change to directory DIR"
 msgstr "Non se pode cambia-lo directorio de traballo"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr ""
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr ""
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr ""
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr ""
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr ""
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr ""
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr ""
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr ""
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr ""
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr ""
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr ""
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr ""
 
-#: src/tar.c:664
+#: src/tar.c:682
 #, fuzzy
 msgid "don't strip leading `/'s from file names"
 msgstr "Eliminadndo o \"%.*s\" inicial dos nomes dos membros"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr ""
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr ""
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr ""
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr ""
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr ""
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr ""
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr ""
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
 msgstr ""
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr ""
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr ""
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr ""
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr ""
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr ""
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr ""
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr ""
 
-#: src/tar.c:710
+#: src/tar.c:728
 #, fuzzy
 msgid "wildcards do not match `/'"
 msgstr "O volume %s non coincide con %s"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr ""
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr ""
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr ""
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr ""
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr ""
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2000,275 +2030,291 @@ msgid ""
 "accepted"
 msgstr ""
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr ""
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr ""
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr ""
 
-#: src/tar.c:741
+#: src/tar.c:761
 #, fuzzy
 msgid "ask for confirmation for every action"
 msgstr "Non se puido le-la confirmación do usuario"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr ""
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr ""
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr ""
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr ""
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr ""
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr ""
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr ""
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr ""
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr ""
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr ""
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Non pode especificar máis dunha das opcións \"-Acdtrux\""
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Opcións de compresión conflictivas"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, fuzzy, c-format
 msgid "Unknown signal name: %s"
 msgstr " Tipo de ficheiro %s descoñecido\n"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 #, fuzzy
 msgid "Date sample file not found"
 msgstr "Non se atopou o ficheiro de data"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Substituíndo o formato de data descoñecido %2$s por %1$s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr ""
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, fuzzy, c-format
 msgid "%s: file list already read"
 msgstr "%s: o ficheiro é o arquivo; non se envorca"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr ""
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "%s: o ficheiro é o arquivo; non se envorca"
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr ""
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
 msgstr ""
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Factor de bloqueo non válido"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Lonxitude da fita non válida"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr ""
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Máis dunha data de umbral"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr ""
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr ""
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr ""
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: Grupo non válido"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Proporcionouse na opción un modo non válido"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 #, fuzzy
 msgid "Invalid number"
 msgstr "Número de inode non válido"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Propietario non válido"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Tamaño de rexistro non válido"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "O tamaño do rexistro debe ser múltiplo de %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 #, fuzzy
 msgid "Invalid number of elements"
 msgstr "Lonxitude da fita non válida"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr ""
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr ""
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, fuzzy, c-format
 msgid "Unknown density: `%c'"
 msgstr "Patrón descoñecido `%s'"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "Opcións `-[0-7][lmh]' non soportadas por *este* tar"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr ""
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "A antiga opción \"%c\" precisa dun argumento."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr ""
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr ""
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 #, fuzzy
 msgid "Multiple archive files require `-M' option"
 msgstr "Varios ficheiros de arquivo requiren a opción \"-M\""
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Non se pode combinar --listed-incremental con --newer"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr ""
+
+#: src/tar.c:2404
 #, fuzzy, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: A etiqueta do volume é longa de máis (o límite é %lu bytes)"
 msgstr[1] "%s: A etiqueta do volume é longa de máis (o límite é %lu bytes)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Non se pode verifica-los arquivos multi-volume"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Non se poden verifica-los arquivos comprimidos"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Non se poden empregar arquivos comprimidos multi-volume"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 #, fuzzy
 msgid "Cannot concatenate compressed archives"
 msgstr "Non se poden actualiza-los arquivos comprimidos"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr ""
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "De xeito cobarde rexéitase crear un ficheiro baleiro"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "As opcións \"-Aru\" son incompatibles con \"-f -\""
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Debe especificar unha das opcións \"-Acdtrux\""
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2280,79 +2326,84 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: O ficheiro encolleu %s bytes"
 msgstr[1] "%s: O ficheiro encolleu %s bytes"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr ""
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Marca de tempo fóra de rango"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr ""
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr ""
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr ""
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr ""
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, fuzzy, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "A cadea base-64 asinada do arquivo %s está fóra do rango de %s"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr ""
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr ""
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr ""
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr ""
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, fuzzy, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "O valor do arquivo %s está fóra do rango de %s %s..%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr ""
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr ""
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr ""
@@ -2393,236 +2444,304 @@ msgstr "Punto de control de escritura %d"
 msgid "Read checkpoint %u"
 msgstr "Punto de control de lectura %d"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 #, fuzzy
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
 msgstr "Xera-los ficheiros de datos para a suite de probas de GNU tar.\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 #, fuzzy
 msgid "File creation options:"
 msgstr "Opcións de compresión conflictivas"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr ""
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr ""
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 #, fuzzy
 msgid "Write to file NAME, instead of standard output"
 msgstr "Erro ao gravar na saída estándar"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr ""
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr ""
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr ""
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr ""
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr ""
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr ""
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr ""
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr ""
+"\n"
+"Emprego: %s [OPCIÓN]...\n"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr ""
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 #, fuzzy
 msgid "Update the access and modification times of FILE"
 msgstr "%s: Non se puido cambia-la hora de acceso e modificación"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr ""
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, fuzzy, c-format
 msgid "Invalid size: %s"
 msgstr "Marca de tempo non válida"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, fuzzy, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Número de inode fóra de rango"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr ""
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr ""
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr ""
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, fuzzy, c-format
 msgid "Unknown date format"
 msgstr "Erro do sistema descoñecido"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr ""
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, fuzzy, c-format
 msgid "cannot open `%s'"
 msgstr "Non se puido abrir %s"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 #, fuzzy
 msgid "cannot seek"
 msgstr "Non se pode pechar"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr ""
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr ""
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, fuzzy, c-format
 msgid "Unknown field `%s'"
 msgstr "Patrón descoñecido `%s'"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, fuzzy, c-format
 msgid "cannot set time on `%s'"
 msgstr "Non se puido evalua-lo ficheiro %s"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "Non se puido abrir %s"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr ""
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, fuzzy, c-format
 msgid "Command failed with status %d\n"
 msgstr "O fillo morreu co sinal %d"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr ""
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr ""
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, fuzzy, c-format
 msgid "--stat requires file names"
 msgstr "--Nomes de ficheiro alterados--\n"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr ""
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: opción non admitida -- %c\n"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
-#~ msgstr "Aviso: a opción -I non está soportada; ¿quería dicir -j ou -T?"
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Informe dos erros no programa a <bug-tar@gnu.org>.\n"
+#~ "Informe dos erros na traducción a <proxecto@trasno.net>.\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Lendo %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "O erro non é recuperable: sáese agora"
+
+#, fuzzy
+#~ msgid "filter the archive through compress"
+#~ msgstr "%s: o ficheiro é o arquivo; non se envorca"
+
+#, fuzzy
+#~ msgid "filter the archive through lzma"
+#~ msgstr "%s: o ficheiro é o arquivo; non se envorca"
+
+#, fuzzy
+#~ msgid "filter the archive through lzop"
+#~ msgstr "%s: o ficheiro é o arquivo; non se envorca"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Non se pode reservar espacio para o buffer\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Non se pode reservar espacio para o buffer"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Escriba '%s --help' para máis información.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Emprego: %s [OPCIÓN]\n"
+#~ "Manipula unha unidade de fita, aceptando comandos dun proceso remoto.\n"
+#~ "\n"
+#~ "  --version  Amosar información da versión.\n"
+#~ "  --help  Amosar esta axuda.\n"
+
+#, fuzzy
+#~ msgid "Seek offset error"
+#~ msgstr "Desprazamento fóra de rango"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Fin de ficheiro prematura"
 
 #~ msgid "block size"
 #~ msgstr "tamaño de bloque"
@@ -2654,18 +2773,12 @@ msgstr ""
 #~ msgid "Visible long name error"
 #~ msgstr "Erro no nome longo visible"
 
-#~ msgid "Time stamp out of range"
-#~ msgstr "Marca de tempo fóra de rango"
-
 #~ msgid "Device number out of range"
 #~ msgstr "Número de dispositivo fóra de rango"
 
 #~ msgid "Visible longname error"
 #~ msgstr "Erro de nome longo visible"
 
-#~ msgid "Unexpected EOF in mangled names"
-#~ msgstr "Fin de ficheiro inesperado nos nomes alterados"
-
 #~ msgid "Renamed %s to %s"
 #~ msgstr "Renomeado %s a %s"
 
@@ -3064,6 +3177,9 @@ msgstr ""
 #~ msgid "Obsolete option name replaced by --read-full-records"
 #~ msgstr "Nome de opción obsoleta substituído por --read-full-records"
 
+#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgstr "Aviso: a opción -I non está soportada; ¿quería dicir -j ou -T?"
+
 #~ msgid "Obsolete option name replaced by --touch"
 #~ msgstr "Nome de opción obsoleta substituído por --touch"
 
index d1d175abadc78b9e07159ac1cfab68eb8e63f574..05afdbc28c9819229c97688e595747bdf531afaf 100644 (file)
Binary files a/po/hr.gmo and b/po/hr.gmo differ
index 97187181aff62a5a2b709229a60dc9be0d5519d5..78dac0856ca3b273158c4f8f25c853c89234e492 100644 (file)
--- a/po/hr.po
+++ b/po/hr.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tar 1.13.25\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
 "PO-Revision-Date: 2002-04-26 10:49+MET(DST)(UTC+2)\n"
 "Last-Translator: Mirsad Todorovac <mtodorov_69@yahoo.com>\n"
 "Language-Team: Croatian <lokalizacija@linux.hr>\n"
@@ -16,287 +16,194 @@ msgstr ""
 "Content-Type: text/plain; charset=iso-8859-2\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "pogre¹an argument %s za %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "nejednoznaèan argument %s za %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Ispravni argumenti su:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr ""
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr ""
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr ""
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr ""
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr ""
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
 msgstr ""
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr ""
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr ""
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 #, fuzzy
 msgid " [OPTION...]"
 msgstr ""
 "\n"
 "Kori¹tenje: %s [OPCIJA]...\n"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, fuzzy, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Poku¹ajte `%s --help' za vi¹e informacija.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, fuzzy, c-format
 msgid "Report bugs to %s.\n"
 msgstr ""
 "\n"
 "Prijavi gre¹ke i bugove na <bug-tar@gnu.org>.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Nepoznata pogre¹ka u sistemu"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr ""
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr ""
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr ""
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr ""
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr ""
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr ""
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr ""
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr ""
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, fuzzy, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: za opciju `%s' neophodan je argument\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr ""
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr ""
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: opcija `%s' nije jednoznaèna\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: opcija `--%s' ne dozvoljava argument\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: opcija `%c%s' ne dozvoljava argument\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: za opciju `%s' neophodan je argument\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: ne prepoznajem opciju `--%s'\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: ne prepoznajem opciju `%c%s'\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: ilegalna opcija -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: pogre¹na opcija -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: opcija zahtijeva neophodan argument -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: opcija `-W %s' nije jednoznaèna\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: opcija `-W %s' ne dozvoljava argument\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "iscrpljena memorija"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, fuzzy, c-format
 msgid "unable to record current working directory"
 msgstr "Ne mogu promijeniti radni direktorij"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, fuzzy, c-format
 msgid "failed to return to initial working directory"
 msgstr "Ne mogu pohraniti radni direktorij"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Ne mogu %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Upozorenje: Ne mogu %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Ne mogu promijeniti mod u %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Ne mogu promijeniti vlasni¹tvo na uid %lu, gid %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Ne mogu napraviti hard link na %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, fuzzy, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Pogre¹ka u èitanju na bajtu %s, èitam %lu bajtova"
-msgstr[1] "%s: Pogre¹ka u èitanju na bajtu %s, èitam %lu bajtova"
-
-#: lib/paxerror.c:192
-#, fuzzy, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Upozorenje: Pogre¹ka u èitanju na bajtu %s, èitam %lu bajtova"
-msgstr[1] "%s: Upozorenje: Pogre¹ka u èitanju na bajtu %s, èitam %lu bajtova"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Neuspjeli seek na %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Upozorenje: Neuspjeli seek na %s"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Ne mogu kreirati simbolièki link prema %s"
-
-#: lib/paxerror.c:349
-#, fuzzy, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Upsje¹no zapisao samo %lu od %lu bajtova"
-msgstr[1] "%s: Upsje¹no zapisao samo %lu od %lu bajtova"
-
-#: lib/paxnames.c:155
-#, fuzzy, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Uklanjam vodeæe `%.*s' iz imena èlanova"
-
-#: lib/paxnames.c:156
-#, fuzzy, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Uklanjam vodeæe `%.*s' iz imena èlanova"
-
-#: lib/paxnames.c:169
-#, fuzzy
-msgid "Substituting `.' for empty member name"
-msgstr "Uklanjam vodeæe `%.*s' iz imena èlanova"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr ""
-
 #
 # MT -- FIXME -- for now this is left untranslated, until we
 # come to UTF-8 or something alike (20020412)
@@ -313,17 +220,17 @@ msgstr ""
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "`"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "'"
 
@@ -333,7 +240,7 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr ""
 
@@ -343,39 +250,28 @@ msgstr ""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr ""
 
-#: lib/rtapelib.c:299
+#: gnu/version-etc.c:76
 #, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Servis nije dostupan"
-
-# FIXME -- verify against source
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "stdin -- standardni ulaz"
-
-#: lib/rtapelib.c:306
-#, c-format
-msgid "stdout"
-msgstr "stdout -- standardni ulaz"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Ne mogu pokrenuti udaljenu (remote) ljusku"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -386,19 +282,19 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, fuzzy, c-format
 msgid "Written by %s.\n"
 msgstr "Napisao François Pinard."
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, fuzzy, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Napisao François Pinard."
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, fuzzy, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Napisao François Pinard."
@@ -406,7 +302,7 @@ msgstr "Napisao Fran
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -416,7 +312,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -426,7 +322,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -436,7 +332,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -446,7 +342,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -457,7 +353,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -468,7 +364,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -480,186 +376,337 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 "\n"
 "Prijavi gre¹ke i bugove na <bug-tar@gnu.org>.\n"
 
-#: lib/version-etc.c:182
-#, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
+"\n"
+"Prijavi gre¹ke i bugove na <bug-tar@gnu.org>.\n"
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:253
+#, c-format
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Ne mogu alocirati prostor za meðuspremnik\n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Ne mogu %s"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Upozorenje: Ne mogu %s"
+
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Ne mogu promijeniti mod u %s"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Ne mogu alocirati prostor za meðuspremnik"
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Ne mogu promijeniti vlasni¹tvo na uid %lu, gid %lu"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:127
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Poku¹ajte `%s --help' za vi¹e informacija.\n"
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Ne mogu napraviti hard link na %s"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:179 lib/paxerror.c:211
 #, fuzzy, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Pogre¹ka u èitanju na bajtu %s, èitam %lu bajtova"
+msgstr[1] "%s: Pogre¹ka u èitanju na bajtu %s, èitam %lu bajtova"
+
+#: lib/paxerror.c:192
+#, fuzzy, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Upozorenje: Pogre¹ka u èitanju na bajtu %s, èitam %lu bajtova"
+msgstr[1] "%s: Upozorenje: Pogre¹ka u èitanju na bajtu %s, èitam %lu bajtova"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Neuspjeli seek na %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Upozorenje: Neuspjeli seek na %s"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Ne mogu kreirati simbolièki link prema %s"
+
+#: lib/paxerror.c:349
+#, fuzzy, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Upsje¹no zapisao samo %lu od %lu bajtova"
+msgstr[1] "%s: Upsje¹no zapisao samo %lu od %lu bajtova"
+
+#: lib/paxnames.c:155
+#, fuzzy, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Uklanjam vodeæe `%.*s' iz imena èlanova"
+
+#: lib/paxnames.c:156
+#, fuzzy, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Uklanjam vodeæe `%.*s' iz imena èlanova"
+
+#: lib/paxnames.c:169
+#, fuzzy
+msgid "Substituting `.' for empty member name"
+msgstr "Uklanjam vodeæe `%.*s' iz imena èlanova"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
 msgstr ""
-"Kori¹tenje: %s [OPCIJA]\n"
-"Upravljaj jedinicom trake, prihvaæajuæi naredbe od udaljenih procesa.\n"
-"\n"
-"  --version  Informacije o verziji programskih ispisa.\n"
-"  --help  Ispi¹i ovu pomoæ.\n"
 
-# FIXME -- find xlation for 'seek offset' -- TM
-#: rmt/rmt.c:397
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Servis nije dostupan"
+
+# FIXME -- verify against source
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "stdin -- standardni ulaz"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "stdout -- standardni ulaz"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
+msgstr ""
+
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Ne mogu pokrenuti udaljenu (remote) ljusku"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Seek smjer izvan opsega"
+
+#: rmt/rmt.c:419
 #, fuzzy
-msgid "Seek offset error"
-msgstr "Seek ofset izvan opsega"
+msgid "Invalid seek direction"
+msgstr "Pogre¹an mod dan opcijom"
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Pogre¹na oznaka vremena"
 
 # FIXME -- find xlation for 'seek offset' -- TM
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Seek ofset izvan opsega"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Seek smjer izvan opsega"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Pogre¹na duljina trake"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+# FIXME -- find xlation for 'seek offset' -- TM
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Seek ofset izvan opsega"
+
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: Prerani eof\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Prerani kraj datoteke"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "%s: pogre¹na opcija -- %c\n"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Neoèekivani EOF u arhivi"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr ""
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr ""
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "%s: Neuspjeli seek na %s"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr ""
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Neispravna naredba"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Ovo ne izgleda kao tar arhiva"
 
 # FIXME -- ovo neæe raditi ako je prevedeno -- Denis?
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 #, fuzzy
 msgid "Total bytes written"
 msgstr "Ukupno ispisano bajtova: %s (%sB, %sB/s)\n"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr ""
 
 # FIXME -- ovo neæe raditi ako je prevedeno -- Denis?
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, fuzzy, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Ukupno ispisano bajtova: %s (%sB, %sB/s)\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(cjevovod - pipe)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Pogre¹na vrijednost za record_size"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Nije dano ime arhive"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Ne mogu verificirati stdin/stdout arhive"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr ""
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Ne mogu a¾urirati komprimirane arhive"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Poèetak trake, zavr¹avam"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Previ¹e pogre¹aka, zavr¹avam"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, fuzzy, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Velièina sloga = %lu blokova"
 msgstr[1] "Velièina sloga = %lu blokova"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, fuzzy, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Neporavnat (unaligned) blok (%lu bajtova) unutar arhive"
 msgstr[1] "Neporavnat (unaligned) blok (%lu bajtova) unutar arhive"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr "Ne mogu se pomicati unazad unutar arhive; mo¾e biti neèitljiva bez -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr ""
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: sadr¾i pogre¹an broj dijela arhive"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Prekoraèenje u broju dijela arhive"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Pripremite dio arhive #%d za %s i pritisni <RETURN>:"
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "Naðen EOF gdje sam oèekivao odgovor korisnika"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "UPOZORENJE: Arhiva nije kompletirana"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, fuzzy, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -671,126 +718,126 @@ msgstr ""
 " !          Pokreni podljusku operativnog sistema\n"
 " ?          Ispi¹i ovu listu\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr ""
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr ""
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Nema novog dijela arhive; zavr¹avam.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr ""
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr ""
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, fuzzy, c-format
 msgid "%s command failed"
 msgstr "Neuspjela `%s' naredba"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, fuzzy, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s nije nastavljen za ovom dijelu arhive"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s nije nastavljen za ovom dijelu arhive"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s je pogre¹ne velièine (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, fuzzy, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Ovaj dio arhive je izvan slijeda"
 
 # FIXME -- clean against source! (TM)
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Arhiva nije oznaèena labelom da odgovara %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Dio arhive %s ne odgovara %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
 msgstr ""
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
 msgstr ""
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, fuzzy, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Uspio proèitati samo %lu od %lu bajtova"
 msgstr[1] "Uspio proèitati samo %lu od %lu bajtova"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Sadr¾aji se razlikuju"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Neoèekivani EOF u arhivi"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Tipovi datoteka se razlikuju"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Mod se razlikuje"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Uid se razlikuje"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Gid se razlikuje"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Mod time (vrijeme modifikacije) se razlikuje"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Velièina se razlikuje"
 
 # FIXME -- language purists might lynch me for this "polinkan" -- TM
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Nije polinkan na %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Simbolièki link se razlikuje"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Broj ureðaja (device number) se razlikuje"
 
@@ -812,35 +859,35 @@ msgstr ""
 msgid "Verification may fail to locate original files."
 msgstr ""
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, fuzzy, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "NEUSPJELA VERIFIKACIJA: detektirano %d pogre¹nih zaglavlja"
 msgstr[1] "NEUSPJELA VERIFIKACIJA: detektirano %d pogre¹nih zaglavlja"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr ""
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr ""
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "vrijednost %s izvan %s raspona %s..%s; substituiram %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "vrijednost %s izvan %s raspona %s..%s"
 
 # FIXME -- find `pade¾' here from source
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Generiram negativna oktalna zaglavlja"
 
@@ -859,296 +906,282 @@ msgstr "%s: datoteka nepromijenjena; ne arhiviram ju"
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: datoteka nepromijenjena; ne arhiviram ju"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, fuzzy, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: Datoteka se skratila za %s bajtova; nadopunjujemo nulama"
 msgstr[1] "%s: Datoteka se skratila za %s bajtova; nadopunjujemo nulama"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: datoteka je na drugom datoteènom sustavu; ne arhiviram ju"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr ""
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Nepoznat tip datoteke; datoteka ignorirana"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, fuzzy, c-format
-msgid "Missing links to %s.\n"
+msgid "Missing links to %s."
 msgstr " link do %s\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: datoteka nepromijenjena; ne arhiviram ju"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: datoteka je arhiva; ne arhiviram ju"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Datoteka uklonjena (removed) prije nego ¹to smo ju proèitali"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr ""
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: datoteka se promijenila dok smo ju èitali"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: socket ignoriran"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: door ignoriran"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Preskaèem do slijedeæeg zaglavlja"
 
 # FIXME -- non-header dubious -- clean against source! -- TM
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Bri¹em neispravno zaglavlje iz arhive"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr ""
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, fuzzy, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: oznaka vremena %s je %lu sekundi u buduænost"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Neoèekivana nekonzistentnost kod otvaranja direktorija"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Direktoriju promijenjeno ime prije nego ¹to mu je dobavljen status"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Ekstrahiram neprekinute datoteke kao regularne datoteke"
 
 # FIXME -- 'hard links' -- TM
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Poku¹avam ekstrakciju simbolièkih linkova kao hard linkova"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Èitam %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr ""
 "%s: Ne mogu ekstrahirati -- datoteka se nastavlja iz drugog dijela arhive"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 #, fuzzy
 msgid "Unexpected long name header"
 msgstr "Neoèekivan EOF u mangliranim imenima"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, fuzzy, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Nepoznat tip datoteke '%c', ekstrahiran kao normalna datoteka"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr ""
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Nisam uspio napraviti backup ove datoteke"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, fuzzy, c-format
 msgid "Cannot rename %s to %s"
 msgstr "%s: Ne mogu preimenovati u %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Gre¹ka iz koje se ne mogu oporaviti: zavr¹avam s radom"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, fuzzy, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Direktoriju promijenjeno ime"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Direktoriju promijenjeno ime"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Novi direktorij"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Pogre¹na oznaka vremena"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 #, fuzzy
 msgid "Invalid modification time (seconds)"
 msgstr "Pogre¹an mod dan opcijom"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr ""
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Pogre¹an broj ureðaja"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Pogre¹an inode broj"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr ""
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 #, fuzzy
 msgid "Unexpected EOF in snapshot file"
 msgstr "Neoèekivani EOF u arhivi"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr ""
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr ""
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr ""
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr ""
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr ""
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr ""
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr ""
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr ""
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr ""
 
 # FIXME -- blocking factor -- can't translate (ask others) -- TM
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, fuzzy, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Ne mogu alocirati memoriju za faktor pakiranja u blokove %d"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr ""
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, fuzzy, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: datoteka je na drugom datoteènom sustavu; ne arhiviram ju"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Bri¹em %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Ne mogu obrisati"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Izostavljam"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "blok %s: ** Blok ispunjen NULama **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "blok %s: ** Kraj datoteke **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "blok %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Razmaci u zaglavlju gdje se oèekuje numerièka %s vrijednost"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1156,150 +1189,165 @@ msgstr ""
 "komplement"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Oktalna vrijednost iz arhive %.*s je izvan %s opsega"
 
 # FIXME -- obsolescent -- TM
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Arhiva sadr¾i base-64 zaglavlja zastarjelog formata"
 
 # FIXME??
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "Base-64 vrijednost s predznakom %s iz arhive je izvan %s opsega"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Base-256 vrijednost iz arhive je izvan %s opsega"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Arhiva sadr¾i %.*s gdje je oèekivana numerièka %s vrijednost"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Vrijednost %s iz arhive je izvan %s opsega %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " link do %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " nepoznat tip datoteke %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr ""
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr ""
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Zaglavlje dijela arhive--\n"
 
 # FIXME -- clarify against source -- TM
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Nastavljeno s bajtom %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Kreiram direktorij:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Preimenujem %s u %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Ne mogu preimenovati u %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Preimenujem %s natrag u %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Ne mogu pohraniti radni direktorij"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Ne mogu promijeniti radni direktorij"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Datoteka uklonjena (removed) prije nego ¹to smo ju proèitali"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Datoteka uklonjena (removed) prije nego ¹to smo ju proèitali"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "podproces"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "meðuprocesni kanal"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
-msgstr ""
-
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:601
+msgid "Pattern matching characters used in file names"
 msgstr ""
 
-#: src/names.c:597
-msgid "suppress this warning."
+#: src/names.c:603
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Nije naðeno u arhivi"
 
-#: src/names.c:615
+#: src/names.c:622
 #, fuzzy, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Nije naðeno u arhivi"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Opcije `-%s' i `-%s' obje zahtijevaju standardni ulaz"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, fuzzy, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Pogre¹na grupa"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "GNU specijalne pogodnosti zatra¾ene na nekompatibilnom formatu arhive"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
 msgstr ""
 
-#: src/tar.c:336
+#: src/tar.c:347
 #, fuzzy
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
@@ -1319,7 +1367,7 @@ msgstr ""
 "op¹irno.\n"
 "  %s -xf arhiva.tar           # Ekstrahiraj sve datoteke iz arhiva.tar.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 #, fuzzy
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
@@ -1340,87 +1388,80 @@ msgstr ""
 "  nil, existing   pobrojani ako pobrojani veæ postoje, inaèe jednostavni\n"
 "  never, simple   uvijek radi jednostavne backupe\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr ""
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr ""
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr ""
 
-#: src/tar.c:378
+#: src/tar.c:394
 #, fuzzy
 msgid "create a new archive"
 msgstr "Neoèekivani EOF u arhivi"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr ""
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr ""
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr ""
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr ""
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr ""
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr ""
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr ""
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr ""
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr ""
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr ""
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:408
-msgid "do not exit with nonzero on unreadable files"
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
 msgstr ""
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
+#: src/tar.c:426
+msgid "do not exit with nonzero on unreadable files"
 msgstr ""
 
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1428,578 +1469,566 @@ msgid ""
 "command line or via the -T option; NUMBER defaults to 1"
 msgstr ""
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr ""
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr ""
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr ""
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr ""
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr ""
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr ""
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr ""
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr ""
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr ""
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr ""
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr ""
 
-#: src/tar.c:455
+#: src/tar.c:475
 #, fuzzy
 msgid "extract files to standard output"
 msgstr "Pogre¹ka u pisanju na standardni izlaz"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr ""
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr ""
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr ""
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr ""
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr ""
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr ""
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr ""
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr ""
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr ""
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr ""
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
 "place (METHOD='system')"
 msgstr ""
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr ""
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr ""
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
 msgstr ""
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr ""
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
 msgstr ""
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr ""
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr ""
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr ""
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr ""
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr ""
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr ""
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr ""
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr ""
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr ""
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr ""
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr ""
 
 # FIXME -- volume -- find more suitable (ask others) -- TM
-#: src/tar.c:536
+#: src/tar.c:556
 #, fuzzy
 msgid "create/list/extract multi-volume archive"
 msgstr "Ne mogu verificirati vi¹edjelne arhive"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr ""
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr ""
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr ""
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr ""
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr ""
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr ""
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr ""
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr ""
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr ""
 
-#: src/tar.c:562
+#: src/tar.c:582
 #, fuzzy
 msgid "Archive format selection:"
 msgstr "Konfliktne opcije formata arhive"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr ""
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr ""
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr ""
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr ""
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr ""
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr ""
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr ""
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr ""
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr ""
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr ""
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr ""
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr ""
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr ""
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr ""
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
 msgstr ""
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Konfliktne opcije za kompresiju"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:597
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr ""
-
-#: src/tar.c:602
-#, fuzzy
-msgid "filter the archive through gzip"
-msgstr "%s: datoteka je arhiva; ne arhiviram ju"
-
-#: src/tar.c:606
-#, fuzzy
-msgid "filter the archive through compress"
-msgstr "%s: datoteka je arhiva; ne arhiviram ju"
-
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "%s: datoteka je arhiva; ne arhiviram ju"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "%s: datoteka je arhiva; ne arhiviram ju"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "%s: datoteka je arhiva; ne arhiviram ju"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr ""
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr ""
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr ""
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr ""
 
-#: src/tar.c:625
+#: src/tar.c:641
 #, fuzzy
 msgid "change to directory DIR"
 msgstr "Ne mogu promijeniti radni direktorij"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr ""
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr ""
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr ""
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr ""
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr ""
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr ""
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr ""
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr ""
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr ""
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr ""
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr ""
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr ""
 
-#: src/tar.c:664
+#: src/tar.c:682
 #, fuzzy
 msgid "don't strip leading `/'s from file names"
 msgstr "Uklanjam vodeæe `%.*s' iz imena èlanova"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr ""
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr ""
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr ""
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr ""
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr ""
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr ""
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr ""
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
 msgstr ""
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr ""
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr ""
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr ""
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr ""
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr ""
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr ""
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr ""
 
-#: src/tar.c:710
+#: src/tar.c:728
 #, fuzzy
 msgid "wildcards do not match `/'"
 msgstr "Dio arhive %s ne odgovara %s"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr ""
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr ""
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr ""
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr ""
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr ""
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2007,227 +2036,242 @@ msgid ""
 "accepted"
 msgstr ""
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr ""
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr ""
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr ""
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr ""
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr ""
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr ""
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr ""
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr ""
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr ""
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr ""
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr ""
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr ""
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr ""
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr ""
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Ne mo¾ete navesti vi¹e od jedne od `-Acdtrux' opcija"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Konfliktne opcije za kompresiju"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, fuzzy, c-format
 msgid "Unknown signal name: %s"
 msgstr " nepoznat tip datoteke %s\n"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 #, fuzzy
 msgid "Date sample file not found"
 msgstr "Datoteka s datumom nije pronaðena"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Substituiram %s za nepoznat format datuma %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr ""
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, fuzzy, c-format
 msgid "%s: file list already read"
 msgstr "%s: datoteka je arhiva; ne arhiviram ju"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr ""
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "%s: datoteka je arhiva; ne arhiviram ju"
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr ""
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
 msgstr ""
 
 # FIXME -- clarify this against source and man -- TM
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Pogre¹an faktor pakiranja u blokove"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Pogre¹na duljina trake"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr ""
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Vi¹e od jednog datuma s pragom (threshold)"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr ""
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr ""
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr ""
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: Pogre¹na grupa"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Pogre¹an mod dan opcijom"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 #, fuzzy
 msgid "Invalid number"
 msgstr "Pogre¹an inode broj"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Pogre¹an vlasnik"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Pogre¹na velièina sloga (record)"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Velièina sloga (record) mora biti vi¹ekratnik %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 #, fuzzy
 msgid "Invalid number of elements"
 msgstr "Pogre¹na duljina trake"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr ""
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr ""
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr ""
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "Opcije `-[0-7][lmh]' nisu podr¾ane od strane *ovog* tar-a"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr ""
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Stara opcija `%c' zahtijeva obavezan argument."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr ""
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr ""
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 #, fuzzy
 msgid "Multiple archive files require `-M' option"
 msgstr "Vi¹edjelne arhive zahtijevaju `-M' opciju"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Ne mogu kombinirati --listed-incremental s --newer"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr ""
+
+#: src/tar.c:2404
 #, fuzzy, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
@@ -2235,49 +2279,50 @@ msgstr[0] "%s: Oznaka dijela arhive je preduga
 msgstr[1] "%s: Oznaka dijela arhive je predugaèka (limit je %lu bajtova)"
 
 # FIXME -- volume -- find more suitable (ask others) -- TM
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Ne mogu verificirati vi¹edjelne arhive"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Ne mogu verificirati komprimirane arhive"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Ne mogu koristiti vi¹edjelne komprimirane arhive"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 #, fuzzy
 msgid "Cannot concatenate compressed archives"
 msgstr "Ne mogu a¾urirati komprimirane arhive"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr ""
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
 # LOL -- TM
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Kukavièki odbijam kreirati praznu arhivu!"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Opcije `-Aru' nisu kompatibilne s `-f -'"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Morate specificirati jednu od `-Acdtrux' opcija"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2289,80 +2334,85 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: Datoteka se skratila za %s bajtova"
 msgstr[1] "%s: Datoteka se skratila za %s bajtova"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr ""
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Oznaka vremena izvan opsega"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr ""
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr ""
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr ""
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr ""
 
 # FIXME??
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, fuzzy, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "Base-64 vrijednost s predznakom %s iz arhive je izvan %s opsega"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr ""
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr ""
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr ""
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr ""
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, fuzzy, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "Vrijednost %s iz arhive je izvan %s opsega %s..%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr ""
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr ""
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr ""
@@ -2403,236 +2453,304 @@ msgstr "To
 msgid "Read checkpoint %u"
 msgstr "Toèka provjere èitanja %d"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 #, fuzzy
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
 msgstr "Generiraj podatkovne datoteke za GNU tar skup test programa.\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 #, fuzzy
 msgid "File creation options:"
 msgstr "Konfliktne opcije za kompresiju"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr ""
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr ""
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 #, fuzzy
 msgid "Write to file NAME, instead of standard output"
 msgstr "Pogre¹ka u pisanju na standardni izlaz"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr ""
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr ""
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr ""
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr ""
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr ""
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr ""
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr ""
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr ""
+"\n"
+"Kori¹tenje: %s [OPCIJA]...\n"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr ""
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr ""
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr ""
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, fuzzy, c-format
 msgid "Invalid size: %s"
 msgstr "Pogre¹na oznaka vremena"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, fuzzy, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Inode broj izvan opsega"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr ""
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr ""
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr ""
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, fuzzy, c-format
 msgid "Unknown date format"
 msgstr "Nepoznata pogre¹ka u sistemu"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr ""
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr ""
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 #, fuzzy
 msgid "cannot seek"
 msgstr "Ne mogu zatvoriti"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr ""
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr ""
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, fuzzy, c-format
 msgid "Unknown field `%s'"
 msgstr " nepoznat tip datoteke %s\n"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, fuzzy, c-format
 msgid "cannot set time on `%s'"
 msgstr "%s: Neuspjeli seek na %s"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "%s: Neuspjeli seek na %s"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr ""
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, fuzzy, c-format
 msgid "Command failed with status %d\n"
 msgstr "Potproces zavr¹io uz signal %d"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr ""
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr ""
 
 # FIXME -- 'mangled filenames'???
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, fuzzy, c-format
 msgid "--stat requires file names"
 msgstr "--Manglirana imena datoteka--\n"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr ""
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: ilegalna opcija -- %c\n"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
-#~ msgstr "Upozorenje: opcija -I nije podr¾ana; mo¾da ste mislili -j ili -T?"
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Prijavi gre¹ke i bugove na <bug-tar@gnu.org>.\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Èitam %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Gre¹ka iz koje se ne mogu oporaviti: zavr¹avam s radom"
+
+#, fuzzy
+#~ msgid "filter the archive through compress"
+#~ msgstr "%s: datoteka je arhiva; ne arhiviram ju"
+
+#, fuzzy
+#~ msgid "filter the archive through lzma"
+#~ msgstr "%s: datoteka je arhiva; ne arhiviram ju"
+
+#, fuzzy
+#~ msgid "filter the archive through lzop"
+#~ msgstr "%s: datoteka je arhiva; ne arhiviram ju"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Ne mogu alocirati prostor za meðuspremnik\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Ne mogu alocirati prostor za meðuspremnik"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Poku¹ajte `%s --help' za vi¹e informacija.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Kori¹tenje: %s [OPCIJA]\n"
+#~ "Upravljaj jedinicom trake, prihvaæajuæi naredbe od udaljenih procesa.\n"
+#~ "\n"
+#~ "  --version  Informacije o verziji programskih ispisa.\n"
+#~ "  --help  Ispi¹i ovu pomoæ.\n"
+
+# FIXME -- find xlation for 'seek offset' -- TM
+#, fuzzy
+#~ msgid "Seek offset error"
+#~ msgstr "Seek ofset izvan opsega"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Prerani kraj datoteke"
 
 #~ msgid "block size"
 #~ msgstr "velièina bloka"
@@ -2669,9 +2787,6 @@ msgstr ""
 #~ msgid "Visible long name error"
 #~ msgstr "Vidljiva pogre¹ka u dugom imenu"
 
-#~ msgid "Time stamp out of range"
-#~ msgstr "Oznaka vremena izvan opsega"
-
 #~ msgid "Device number out of range"
 #~ msgstr "Broj ureðaja izvan opsega"
 
@@ -3083,6 +3198,9 @@ msgstr ""
 #~ msgid "Obsolete option name replaced by --read-full-records"
 #~ msgstr "Zastarjelo ime opcije zamijenjeno s --read-full-records"
 
+#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgstr "Upozorenje: opcija -I nije podr¾ana; mo¾da ste mislili -j ili -T?"
+
 #~ msgid "Obsolete option name replaced by --touch"
 #~ msgstr "Zastarjelo ime opcije zamijenjeno s --touch"
 
index e4442331c4665be74c312a29bd4672fe4dc757e7..1640973853d0b1c7014a5c173a97f27d6197337a 100644 (file)
Binary files a/po/hu.gmo and b/po/hu.gmo differ
index ab792f300c34217b609dee2d7eef8859dad491c7..76fadda15a47926869e45a8469c74f29c447089d 100644 (file)
--- a/po/hu.po
+++ b/po/hu.po
@@ -1,14 +1,15 @@
 # Hungarian translation of the GNU tar.
-# Copyright (C) 2002, 2006, 2007, 2008 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 # This file is distributed under the same license as the tar package.
+#
 # Gábor István <stive@mezobereny.hu>, 2002.
-# Gabor Kelemen <kelemeng@gnome.hu>, 2006, 2007, 2008.
+# Gabor Kelemen <kelemeng@gnome.hu>, 2006, 2007, 2008, 2009, 2010.
 msgid ""
 msgstr ""
-"Project-Id-Version: tar 1.20\n"
+"Project-Id-Version: tar 1.22.91\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
-"PO-Revision-Date: 2008-05-11 16:11+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
+"PO-Revision-Date: 2010-02-23 20:01+0100\n"
 "Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
 "MIME-Version: 1.0\n"
@@ -17,47 +18,47 @@ msgstr ""
 "X-Generator: KBabel 1.11.4\n"
 "Plural-Forms:  nplurals=2; plural=(n != 1);\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "a(z) „%s” argumentum érvénytelen a következőhöz: %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "a(z) „%s” argumentum nem egyértelmű a következőhöz: „%s”"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Az érvényes argumentumok a következők:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: %s értéke nem nagyobb, mint %s"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: Az ARGP_HELP_FMT paraméter egy értéket igényel"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: Az ARGP_HELP_FMT paraméternek pozitívnak kell lennie"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: Ismeretlen ARGP_HELP_FMT paraméter"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Szemét az ARGP_HELP_FMT-ben: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -65,241 +66,145 @@ msgstr ""
 "A hosszú kapcsolók kötelező vagy elhagyható argumentumai a megfelelő rövid "
 "kapcsolókhoz is kötelezőek vagy elhagyhatóak."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Használat:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr "  vagy: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [KAPCSOLÓ...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr ""
 "További információkért próbálja kiadni a „%s --help” vagy „%s --usage” "
 "parancsokat.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "A hibák a(z) %s címen jelenthetők.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Ismeretlen rendszerhiba"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "ezen súgószöveg megjelenítése"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "rövid használati utasítás megjelenítése"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "NÉV"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "a program nevének beállítása"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "MP"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "szünet MP másodpercre (alapértelmezetten 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "a programverzió kiírása"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(PROGRAMHIBA) A verziószám ismeretlen???"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: túl sok argumentum\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr "(PROGRAMHIBA) A kapcsolót fel kellett volna ismerni???"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr "íráshiba"
 
-#: lib/getopt.c:526 lib/getopt.c:542
+#: gnu/getopt.c:531 gnu/getopt.c:547
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: a(z) „%s” kapcsoló nem egyértelmű\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
+#: gnu/getopt.c:580 gnu/getopt.c:584
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: a(z) „--%s” kapcsoló nem enged meg argumentumot\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
+#: gnu/getopt.c:593 gnu/getopt.c:598
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: a(z) „%c%s” kapcsoló nem enged meg argumentumot\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: a(z) „%s” kapcsolóhoz argumentum szükséges\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
+#: gnu/getopt.c:698 gnu/getopt.c:701
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: a(z) „--%s” kapcsoló ismeretlen\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
+#: gnu/getopt.c:709 gnu/getopt.c:712
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: a(z) „%c%s” kapcsoló ismeretlen\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
+#: gnu/getopt.c:761 gnu/getopt.c:764
 #, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: illegális kapcsoló -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: érvénytelen kapcsoló -- „%c”\n"
 
-#: lib/getopt.c:768 lib/getopt.c:771
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
 #, c-format
-msgid "%s: invalid option -- %c\n"
-msgstr "%s: érvénytelen kapcsoló -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: a kapcsoló egy argumentumot igényel -- „%c”\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
+#: gnu/getopt.c:884 gnu/getopt.c:900
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: a kapcsoló egy argumentumot igényel -- %c\n"
-
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: a „-W %s” kapcsoló nem egyértelmű\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
+#: gnu/getopt.c:924 gnu/getopt.c:942
 #, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: a „-W %s” kapcsoló nem enged meg argumentumot\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "elfogyott a memória"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, c-format
 msgid "unable to record current working directory"
 msgstr "A munkakönyvtár nem jegyezhető fel"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, c-format
 msgid "failed to return to initial working directory"
 msgstr "a visszatérés meghiúsult a kiinduló munkakönyvtárba"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: a következő függvény meghiúsult: %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Figyelmeztetés: a következő függvény meghiúsult: %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Nem lehet %s módba váltani"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Nem módosítható a tulajdonos uid-ja %lu, gid-je %lu értékekre"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Nem hozható létre közvetlen link a következőre: %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Olvasási hiba a(z) %s. bájtnál, %lu bájt beolvasása közben"
-msgstr[1] "%s: Olvasási hiba a(z) %s. bájtnál, %lu bájt beolvasása közben"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] ""
-"%s: Figyelmeztetés: Olvasási hiba a(z) %s. bájtnál, %lu bájt beolvasása "
-"közben"
-msgstr[1] ""
-"%s: Figyelmeztetés: Olvasási hiba a(z) %s. bájtnál, %lu bájt beolvasása "
-"közben"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Nem lehet a(z) %s helyre pozicionálni"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Figyelmeztetés: Nem lehet a(z) %s helyre pozicionálni"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Nem hozható létre szimbolikus link a következőre: %s"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Csak %lu bájt került kiírásra, összesen %lu bájtból"
-msgstr[1] "%s: Csak %lu bájt került kiírásra, összesen %lu bájtból"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "A kezdő „%s” eltávolítása a nevek elejéről"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "A kezdő „%s” eltávolítása a közvetlen linkek céljaiból"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Egy . helyettesítése az üres tagnév helyett"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Egy . helyettesítése a közvetlen link üres célja helyett"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -313,17 +218,17 @@ msgstr "Egy . helyettesítése a közvetlen link üres célja helyett"
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "”"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "”"
 
@@ -333,7 +238,7 @@ msgstr "”"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[iIyY]"
 
@@ -343,39 +248,28 @@ msgstr "^[iIyY]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[nN]"
 
-#: lib/rtapelib.c:299
+#: gnu/version-etc.c:76
 #, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/TCP: A szolgáltatás nem érhető el"
+msgid "Packaged by %s (%s)\n"
+msgstr "Csomagolta: %s (%s)\n"
 
-#: lib/rtapelib.c:303
+#: gnu/version-etc.c:79
 #, c-format
-msgid "stdin"
-msgstr "szabványos bemenet"
-
-#: lib/rtapelib.c:306
-#, c-format
-msgid "stdout"
-msgstr "szabványos kimenet"
-
-#: lib/rtapelib.c:512
-#, c-format
-msgid "Cannot execute remote shell"
-msgstr "Nem futtatható távoli parancssor"
+msgid "Packaged by %s\n"
+msgstr "Csomagolta: %s\n"
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr "(C)"
 
-#: lib/version-etc.c:67
-#, fuzzy
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -392,19 +286,19 @@ msgstr ""
 "\n"
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr "Írta: %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Írta: %s és %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Írta: %s, %s és %s.\n"
@@ -412,7 +306,7 @@ msgstr "Írta: %s, %s és %s.\n"
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -424,7 +318,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -436,7 +330,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -448,7 +342,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -460,7 +354,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -474,7 +368,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -488,7 +382,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -503,183 +397,330 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 "\n"
-"A programhibákat a(z) <%s> címen jelentheted.\n"
+"A hibák a(z) %s címen jelenthetők.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:249
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
-msgstr ""
+msgid "Report %s bugs to: %s\n"
+msgstr "A(z) %s hibái a(z) %s címen jelenthetők.\n"
+
+#: gnu/version-etc.c:253
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "A(z) %s honlapja: <%s>\n"
+
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+msgstr "A(z) %s honlapja: <http://www.gnu.org/software/%s/>.\n"
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
+"Általános segítség a GNU szoftverek használatához: <http://www.gnu.org/"
+"gethelp/>.\n"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: a következő függvény meghiúsult: %s"
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "A bemeneti karakterlánc túl hosszú"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Figyelmeztetés: a következő függvény meghiúsult: %s"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "Számszintaxis hiba"
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Nem lehet %s módba váltani"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Nem foglalható hely a puffernek\n"
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Nem módosítható a tulajdonos uid-ja %lu, gid-je %lu értékekre"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Nem foglalható hely a puffernek"
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Nem hozható létre közvetlen link a következőre: %s"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:179 lib/paxerror.c:211
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "További információkért adja ki a „%s --help” parancsot.\n"
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Olvasási hiba a(z) %s. bájtnál, %lu bájt beolvasása közben"
+msgstr[1] "%s: Olvasási hiba a(z) %s. bájtnál, %lu bájt beolvasása közben"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:192
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] ""
+"%s: Figyelmeztetés: Olvasási hiba a(z) %s. bájtnál, %lu bájt beolvasása "
+"közben"
+msgstr[1] ""
+"%s: Figyelmeztetés: Olvasási hiba a(z) %s. bájtnál, %lu bájt beolvasása "
+"közben"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Nem lehet a(z) %s helyre pozicionálni"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Figyelmeztetés: Nem lehet a(z) %s helyre pozicionálni"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Nem hozható létre szimbolikus link a következőre: %s"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Csak %lu bájt került kiírásra, összesen %lu bájtból"
+msgstr[1] "%s: Csak %lu bájt került kiírásra, összesen %lu bájtból"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "A kezdő „%s” eltávolítása a nevek elejéről"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "A kezdő „%s” eltávolítása a közvetlen linkek céljaiból"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Egy . helyettesítése az üres tagnév helyett"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Egy . helyettesítése a közvetlen link üres célja helyett"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/TCP: A szolgáltatás nem érhető el"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "szabványos bemenet"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "szabványos kimenet"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Használat: %s [KAPCSOLÓ]\n"
-"Egy szalagmeghajtó kezelése, egy távoli folyamattól származó parancsok\n"
-"elfogadása.\n"
-"\n"
-"  --version  Kiírja a verzióinformációkat\n"
-"  --help     Ezen súgó megjelenítése\n"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "Keresésieltolás-hiba"
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Nem futtatható távoli parancssor"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "A keresési irány kívül esik a tartományon"
+
+#: rmt/rmt.c:419
+msgid "Invalid seek direction"
+msgstr "Érvénytelen pozicionálási irány"
+
+#: rmt/rmt.c:427
+msgid "Invalid seek offset"
+msgstr "Érvénytelen pozicionálási eltolás"
+
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "A keresési eltolás kívül esik a tartományon"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "A keresési irány kívül esik a tartományon"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+msgid "Invalid byte count"
+msgstr "Érvénytelen bájtszám"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
-msgstr "rmtd: Idő előtti fájlvége\n"
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+msgid "Byte count out of range"
+msgstr "A bájtszám kívül esik a tartományon"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
+#: rmt/rmt.c:539
+msgid "Premature eof"
 msgstr "Idő előtti fájlvége"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:582
+msgid "Invalid operation code"
+msgstr "Érvénytelen működési kód"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr "A művelet nem támogatott"
+
+#: rmt/rmt.c:645
+msgid "Unexpected arguments"
+msgstr "Váratlan paraméterek"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+"Szalagos meghajtó manipulálása, parancsok elfogadása távoli folyamattól"
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "SZÁM"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr "hibakeresési szint beállítása"
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "FÁJL"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr "hibakeresés kimeneti fájlnevének beállítása"
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, c-format
+msgid "cannot open %s"
+msgstr "a(z) %s nem nyitható meg"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "túl sok argumentum"
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
-msgstr "Fölösleges parancs"
+msgstr "Értelmetlen parancs"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Ez nem úgy néz ki, mint egy tar archívum"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Kiírt bájtok teljes száma"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "Olvasott bájtok teljes száma"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Törölt bájtok teljes száma: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(cső)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "A record_size értéke érvénytelen"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Nem adott meg archívumnevet"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Nem ellenőrizhető az archívum, ha a szabványos be/kimenetet használja"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "Az archívum tömörített. Használja a(z) %s kapcsolót."
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Tömörített archívumok nem frissíthetők"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "A szalag eleje, most kilépek"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Túl sok hiba, kilépek"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Rekordméret = %lu blokk"
 msgstr[1] "Rekordméret = %lu blokk"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Kitöltetlen blokk (%lu bájt) az archívumban"
 msgstr[1] "Kitöltetlen blokk (%lu bájt) az archívumban"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr ""
 "Nem törölhető vissza az archív fájl, lehet hogy olvashatatlan lesz a -i "
 "nélkül"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "az rmtlseek nem állt meg egy rekord határán"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: érvénytelen kötetszámot tartalmaz"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Kötetszám-túlcsordulás"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Készítse elő a(z) %d kötetet %s számára és üssön entert:"
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
-msgstr "EOF ahol a program felhasználói választ várt"
+msgstr "Fájlvége a várt felhasználói válasz helyett"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "FIGYELMEZTETÉS: Az archívum befejezetlen"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -690,67 +731,67 @@ msgstr ""
 " q          A Tar megszakítása\n"
 " y vagy újsor  A művelet folytatása\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !          Új parancsértelmező hívása\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?          Ezen lista kiírása\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Nincs új kötet, kilépés.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "Nincs megadva fájlnév, próbálkozzon újra.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "Érvénytelen bemenet. A súgó a ? beírásával kérhető le.\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "A(z) „%s” parancs meghiúsult"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr ""
 "%s lehetséges, hogy ezen a köteten folytatódott: a fejléc csonkolt nevet "
 "tartalmaz"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s nem folytatódik ezen a köteten"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s mérete hibás (%s != %s + %s)"
 
-#: src/buffer.c:1253
-#, fuzzy, c-format
+#: src/buffer.c:1326
+#, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
-msgstr "Ez a kötet túl van a sorozaton"
+msgstr "Ez a kötet kívül esik a sorozaton (%s - %s != %s)"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Az archívum nincs úgy címkézve, hogy megfeleljen a következőhöz: %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "A(z) %s kötet nem felel meg a következőnek: %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
@@ -758,61 +799,60 @@ msgstr ""
 "%s: a fájlnév túl hosszú egy GNU többkötetes fejlécben való tároláshoz, "
 "csonkításra került"
 
-#: src/buffer.c:1621
-#, fuzzy
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
-msgstr "az rmtlseek nem állt meg egy rekord határán"
+msgstr "az írás nem egy rekord határán fejeződött be"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Csak %lu bájt olvasható %lu bájtból"
 msgstr[1] "Csak %lu bájt olvasható %lu bájtból"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "A tartalom eltér"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
-msgstr "Váratlan EOF az archívumban"
+msgstr "Váratlan fájlvége jel az archívumban"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "A fájltípus eltér"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "A mód eltér"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Az Uid eltér"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "A Gid eltér"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "A módosítási idő eltér"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "A méret eltér"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Nincs a következőre linkelve: %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "A szimbolikus link eltér"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Az eszközszám eltér"
 
@@ -836,36 +876,36 @@ msgid "Verification may fail to locate original files."
 msgstr ""
 "Lehetséges, hogy az ellenőrzés nem fogja megtalálni az eredeti fájlokat."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "AZ ELLENŐRZÉS SIKERTELEN: %d érvénytelen fejléc található"
 msgstr[1] "AZ ELLENŐRZÉS SIKERTELEN: %d érvénytelen fejléc található"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "Egy magányos nulla blokk %s helyen"
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: fájl gyorsítótár-könyvtár címkét tartalmaz (%s); %s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr ""
 "a(z) %s érték a(z) %s %s...%s tartományán kívül esik, helyettesítve a "
 "következővel: %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "a(z) %s érték a(z) %s %s...%s tartományán kívül esik"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Negatív oktális fejlécek előállítása"
 
@@ -884,295 +924,281 @@ msgstr "%s: a fájlnév túl hosszú (nem darabolható), nem kerül kiírásra"
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: a fájlnév túl hosszú, nem kerül kiírásra"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: a fájl zsugorítva %s bájtra, nullákkal kerül kitöltésre"
 msgstr[1] "%s: a fájl zsugorítva %s bájtra, nullákkal kerül kitöltésre"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: a fájl eltérő fájlrendszeren van, nem kerül kiírásra"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr "a tartalom nem került kiírásra"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Ismeretlen fájltípus, fájl a figyelmen kívül hagyva"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, c-format
-msgid "Missing links to %s.\n"
-msgstr "Hiányzó linkek a következőre: „%s”.\n"
+msgid "Missing links to %s."
+msgstr "Hiányzó linkek a következőre: „%s”."
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: a fájl változatlan, nem kerül kiírásra"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: a fájl az archívumban van, nem kerül kiírásra"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: a fájl el lett távolítva a beolvasás előtt"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr "a könyvtár nem került kiírásra"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: a fájl módosult olvasás közben"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: a foglalat figyelmen kívül hagyva"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: ajtó figyelmen kívül hagyva"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Ugrás a következő fejlécre"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "A nem fejlécek törlése az archívumból"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: valószínűtlenül régi időbélyeg: %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: a(z) %s időbélyeg %s másodperccel a jövőbe mutat"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Váratlan inkonzisztencia a könyvtár létrehozása során"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: a könyvtár átnevezésre került az állapotának kinyerése előtt"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "A folytonos fájlok kibontása normál fájlként"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Kísérlet a szimbolikus linkek kibontására közvetlen linkként"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "%s olvasása\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: nem lehet kibontani -- a fájl egy másik köteten folytatódik"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "Váratlan hosszú névfejléc"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Ismeretlen fájltípus: „%c”, normál fájlként lesz kibontva"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "A jelenlegi „%s” újabb vagy egyező korú"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Nem sikerült biztonsági mentést készíteni erről a fájlról"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "%s: Nem nevezhető át a következőre: %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "A hiba nem hozható helyre: kilépés"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: A könyvtár át lett nevezve a következőről: %s"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: a könyvtár át lett nevezve"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: a könyvtár új"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Érvénytelen időbélyeg"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Érvénytelen módosítási idő (másodperc)"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "Érvénytelen módosítási idő (nanomásodperc)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Érvénytelen eszközszám"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Érvénytelen inode-szám"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "Túl hosszú mező a pillanatképfájl olvasása közben"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "Olvasási hiba a pillanatképfájlban"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "Váratlan fájlvége a pillanatképfájlban"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "Váratlan mezőérték a pillanatképfájlban"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "Hiányzó rekordlezáró"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "Hibás növekményes fájlformátum"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr "Nem támogatott növekményes formátumverzió: %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr ""
 "Rosszul formázott kiíratási könyvtár: a várt „%c” helyett %#3o található"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "Rosszul formázott kiíratási könyvtár: az „X” többször szerepel"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "Rosszul formázott kiíratási könyvtár: üres név az „R”-ben"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "Rosszul formázott kiíratási könyvtár: a „T”-t nem előzi meg az „R”"
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "Rosszul formázott kiíratási könyvtár: üres név a „T”-ben"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 "Rosszul formázott kiíratási könyvtár: a várt „%c” helyett az adatok vége "
 "található"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr ""
 "Rosszul formázott kiíratási könyvtár: az „X” soha nem került felhasználásra"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr ""
 "Nem hozható létre ideiglenes könyvtár a következő sablon használatával: %s"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: a könyvtár nem kerül törlésre: nem érhető el"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: a fájl egy másik eszközön van: nem kerül törlésre"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: %s törlése\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: nem távolítható el"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: kihagyás"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "blokk %s: ** A blokk üres **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
-msgstr "blokk %s: ** A fájl vége **\n"
+msgstr "blokk %s: ** Fájlvége **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "blokk %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr ""
 "Üres értékek a fejléc azon részében, ahol a program a(z) %s számértéket várta"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1180,145 +1206,164 @@ msgstr ""
 "feltételezi, hogy kettes komplemens"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Az archívum %.*s oktális értéke túllépi a(z) %s tartományt"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Az archívum elavulófélben levő base-64-es fejléceket tartalmaz"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr ""
 "Az archívum előjeles base-64 karakterlánca (%s) túllépi a(z) %s tartományt"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Az archívum base-256-os értéke túllépi a(z) %s tartományt"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Az archívum %.*s értéket tartalmaz, ahol a program %s számértéket vár"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Az archívum %s értéke túllépi a(z) %s %s..%s tartományát"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " link a következőre: %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " ismeretlen fájltípus: %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Hosszú link--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Hosszú név--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Kötetfejléc--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Folytatva %s bájttól--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Könyvtár létrehozása:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "%s átnevezése a következőre: %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Nem nevezhető át a következőre: %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "%s helyreállítása a következő névre: %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "A munkakönyvtár nem menthető"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "A munkakönyvtár nem módosítható"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: a fájl el lett távolítva a beolvasás előtt"
+
+#: src/misc.c:774
+#, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: a könyvtár el lett távolítva a beolvasás előtt"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "gyermekfolyamat"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "folyamatközi csatorna"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr "Mintaillesztő karaktereket használt a fájlnevekben. "
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 "Használja a --wildcards kapcsolót a mintaillesztés engedélyezéséhez vagy a --"
 "no-wildcards kapcsolót "
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "ezen figyelmeztetés elnyomásához."
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Nem található az archívumban"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: A szükséges előfordulás nem található az archívumban"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+"A -C használata fájllistán belül nem engedélyezett a --listed-incremental "
+"kapcsolóval"
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr "Csak egy -C engedélyezett a --listed-incremental kapcsolóval"
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr ""
 "A(z) „-%s” és a(z) „-%s” kapcsolók mind a szabványos bemenetet igénylik"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Érvénytelen archívumformátum"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "GNU szolgáltatásokat kértél inkompatibilis az archívumformátumokon"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
@@ -1326,7 +1371,7 @@ msgstr ""
 "A(z) „%s” idézési stílus ismeretlen. Próbálja a „%s --quoting-style=help” "
 "parancsot segítségért."
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1347,7 +1392,7 @@ msgstr ""
 "  tar -xf archívum.tar         # Kibontja az összes fájlt az archívum.tar\n"
 "                                   fájlból.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1369,88 +1414,81 @@ msgstr ""
 "                  egyébként egyszerű\n"
 "  never, simple   mindig egyszerű mentés létrehozása\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Fő működési mód:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "felsorolja egy archívum tartalmát"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "fájlok kibontása egy archívumból"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "új archívum létrehozása"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "különbségek keresése az archívum és a fájlrendszer között"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "fájlok hozzáfűzése egy archívum végéhez"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "csak az archívumban lévő másolatnál újabb fájlok hozzáfűzése"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "tar fájlok hozzáfűzése egy archívumhoz"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "törlés az archívumból (szalagon nem működik!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr "az archívum kötetcímkéjének tesztelése és kilépés"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Műveletmódosítók:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "ritka fájlok hatékony kezelése"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr "MAGAS[.ALACSONY]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 "a használandó ritka formátum verziójának beállítása (magával vonja\n"
 " a --sparse kapcsolót)"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "régi GNU formátumú növekményes mentés kezelése"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "FÁJL"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "új GNU formátumú növekményes mentés kezelése"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr "kiíratási szint a létrehozott listázott növekményes archívumhoz"
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "ne lépjen ki nem nulla értékkel ha a fájl olvashatatlan"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "SZÁM"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1463,119 +1501,122 @@ msgstr ""
 "átadásra a parancssoron vagy a -T kapcsolón keresztül. A SZÁM "
 "alapértelmezett értéke az 1."
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "az archívum kereshető"
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr "az archívumban nem lehet pozicionálni"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr "ne ellenőrizze az eszközszámokat növekményes archívumok létrehozásakor"
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 "eszközszámok ellenőrzése növekményes archívumok létrehozásakor "
 "(alapértelmezett)"
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "Felülírás felügyelete:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "kísérlet az archívum ellenőrzésére annak kiírása után"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "fájlok eltávolítása azok archívumhoz adása után"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "ne cserélje a meglévő fájlokat kibontáskor"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr "ne cserélje az archív változatuknál újabb meglévő fájlokat"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "meglévő fájlok felülírása kibontáskor"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "minden egyes fájl eltávolítása a rá történő kibontás előtt"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "hierarchiák kiürítése könyvtár kibontása előtt"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "meglévő könyvtárak metaadatainak megőrzése"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 "meglévő könyvtárak metaadatainak felülírása kibontáskor (alapértelmezett)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Kimeneti adatfolyam kiválasztása:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "fájlok kibontása a szabványos kimenetre"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "PARANCS"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "kibontott fájlok továbbítása másik program számára"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "utódok kilépési kódjainak figyelmen kívül hagyása"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr "az utódok nem nulla kilépési kódjainak kezelése hibaként"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Fájlattribútumok kezelése:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "a NÉV kényszerítése a hozzáadott fájlok tulajdonosaként"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "a NÉV kényszerítése a hozzáadott fájlok csoportjaként"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "DÁTUM-VAGY-FÁJL"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "a DÁTUM-VAGY-FÁJL dátumnál újabb fájlok mtime értékének beállítása"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "MÓDOSÍTÁSOK"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "a (szimbolikus) mód módosítások kényszerítése a hozzáadott fájlokra"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "MÓDSZER"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1585,29 +1626,34 @@ msgstr ""
 "olvasás után történő visszaállításával (MÓDSZER='replace'; alapértelmezett) "
 "vagy az időpontok be nem állításával az első helyen (MÓDSZER='system')"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "ne bontsa ki a fájl módosításának időpontját"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
-msgstr "próbálja azonos tulajdonossal kibontani a fájlokat"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
+msgstr ""
+"próbálja az archívumban létezővel azonos tulajdonossal kibontani a fájlokat "
+"(alapértelmezett a rendszergazdának)"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
-msgstr "fájlok kibontása az Ön nevében"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
+msgstr ""
+"fájlok kibontása a saját nevében (alapértelmezett normál felhasználóknak)"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "mindig számok használata a felhasználó- vagy csoportnevekhez"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 "a fájl jogosultságaival kapcsolatos információk kibontása (alapértelmezett a "
 "rendszergazda számára)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
@@ -1615,15 +1661,15 @@ msgstr ""
 "a felhasználó umask értékének alkalmazása a jogosultságok kibontásakor az "
 "archívumból (alapértelmezett az egyszerű felhasználók számára)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "kibontandó nevek rendezése, az archívumnak való megfelelés érdekében"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "azonos, mint a -p és -s egyszerre"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
@@ -1631,139 +1677,139 @@ msgstr ""
 "kibontott könyvtárak módosítási idői és jogosultságai beállításának "
 "késleltetése a kibontás befejeztéig"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "a --delay-directory-restore kapcsoló hatásának megszüntetése"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "Eszköz kiválasztása és váltása:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "ARCHÍVUM"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "az ARCHÍVUM archívumfájl vagy -eszköz használata"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "az archívumfájl helyi, még ha tartalmaz is kettőspontot"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "az adott rmt PARANCS használata az rmt helyett"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "a távoli PARANCS használata az rsh helyett"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "meghajtó és sűrűség megadása"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "többkötetes archívum létrehozása/listázása/kibontása"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "szalagváltás a SZÁM x 1024 bájt kiírása után"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "parancsfájl futtatása minden egyes szalag végén (-M esetén)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "a FÁJLBAN található számú kötet használata/frissítése"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Eszközblokkolás:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "BLOKK"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "rekordonként BLOKK x 512 bájt"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "SZÁM bájt rekordonként, az 512 többszöröse"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "nullázott blokkok (EOF) mellőzése az archívumban"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "újrablokkolás olvasáskor (4.2BSD csövekhez)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Archívumformátum kiválasztása:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "FORMÁTUM"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "az adott formátumú archívum létrehozása"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "A FORMÁTUM a következők egyike:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "régi V7 tar formátum"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "A tar <= 1.12 által használt GNU formátum"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "GNU tar 1.13.x formátum"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "POSIX 1003.1-1988 (ustar) formátum"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "POSIX 1003.1-2001 (pax) formátum"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "azonos a pax formátummal"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "azonos a --format=v7 formátummal"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "azonos a --format=posix formátummal"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "kulcsszó[[:]=érték][,kulcsszó[[:]=érték]..."
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "a pax kulcsszavak irányítása"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "SZÖVEG"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
@@ -1771,106 +1817,80 @@ msgstr ""
 "archívum létrehozása a SZÖVEG kötetnévvel. Listázáskor vagy kibontáskor "
 "használja a kötetnév keresési mintájaként a SZÖVEGET"
 
-#: src/tar.c:593
+#: src/tar.c:613
 msgid "Compression options:"
 msgstr "Tömörítési kapcsolók:"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr "archívum kiterjesztésének használata a tömörítőprogram meghatározására"
 
-#: src/tar.c:597
-#, fuzzy
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
-msgstr "archívum kiterjesztésének használata a tömörítőprogram meghatározására"
-
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "az archívum tömörítése a bzip2 használatával"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "az archívum tömörítése a gzip használatával"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "az archívum tömörítése a compress használatával"
-
-#: src/tar.c:609
-msgid "filter the archive through lzma"
-msgstr "az archívum tömörítése az lzma használatával"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "az archívum tömörítése a gzip használatával"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "az archívum tömörítése a gzip használatával"
+msgstr ""
+"ne használja az archívum kiterjesztését a tömörítőprogram meghatározására"
 
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "PROG"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "tömörítése a PROG használatával (el kell fogadnia a -d kapcsolót)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Helyi fájlválasztás:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 "az adott FÁJL hozzáadása az archívumhoz (hasznos, ha neve kötőjellel "
 "kezdődik)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "KÖNYVTÁR"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "váltás a KÖNYVTÁR könyvtárba"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "kibontandó nevek lekérdezése vagy létrehozás a FÁJLBÓL"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "a -T nullal lezárt neveket olvas, letiltja a -C kapcsolót"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
-msgstr ""
+msgstr "a korábbi --null kapcsoló hatásának letiltása"
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 "a -T segítségével beolvasott fájlnevek idézettségének megszüntetése "
 "(alapértelmezett)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr "ne szüntesse meg a -T segítségével beolvasott fájlnevek idézettségét"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "MINTA"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "a MINTAKÉNT megadott fájlok kihagyása"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "a FÁJLBAN megadott minták kihagyása"
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
@@ -1878,92 +1898,96 @@ msgstr ""
 "a CACHEDIR.TAG-et tartalmazó könyvtárak tartalmának kihagyása, a címkefájl "
 "kivételével"
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "a CACHEDIR.TAG-et tartalmazó könyvtárak alatt minden kihagyása"
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "a CACHEDIR.TAG-et tartalmazó könyvtárak kihagyása"
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 "a FÁJLT tartalmazó könyvtárak tartalmának kihagyása, a FÁJL kivételével"
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr "a FÁJLT tartalmazó könyvtárak alatt minden kihagyása"
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr "a FÁJLT tartalmazó könyvtárak kihagyása"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr "verziókezelő-könyvtárak kihagyása"
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr "mentési és zárolási fájlok kihagyása"
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "ne lépjen be automatikusan a könyvtárakba"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "az archívum létrehozásakor maradjon a helyi fájlrendszeren"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "belépés a könyvtárakba rekurzívan (alapértelmezett)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "ne vágja le a kezdő „/” jelet a fájlnevekből"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 "szimbolikus linkek követése; az általuk mutatott fájlok archiválása és "
 "kiíratása"
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 "közvetlen linkek követése; az általuk mutatott fájlok archiválása és "
 "kiíratása"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "TAGNÉV"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "kezdés a TAGNÉV tagnál az archívumban"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "csak a DÁTUM-VAGY-FÁJL dátumnál újabb fájlok tárolása"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "DÁTUM"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "dátum és idő összehasonlítása ha csak a dátum módosult"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "FELÜGYELET"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "mentés eltávolítás előtt, a FELÜGYELET verzió kiválasztása"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "KARAKTERLÁNC"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1971,94 +1995,102 @@ msgstr ""
 "mentés eltávolítás előtt, a szokásos utótag („~”, hacsak a "
 "SIMPLE_BACKUP_SUFFIX környezeti változó nem bírálja felül) felülbírálása"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr "Fájlnév-átalakítások:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr "a fájlnevek SZÁM darab kezdő összetevőjének levágása kibontáskor"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "KIFEJEZÉS"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 "A KIFEJEZÉS sed helyettesítőkifejezés használata fájlnevek átalakítására"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 "Fájlnévillesztés beállításai (érintik mind a kihagyási, mind a felvételi "
 "mintákat):"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr "kis- és nagybetűk figyelmen kívül hagyása"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr "a minták illesztése a fájlnevek elejére"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr "a minták illesztése bármely / után (alapértelmezett kihagyáskor)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr "kis- és nagybetűkre érzékeny illesztés (alapértelmezett)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr "helyettesítő karakterek használata (alapértelmezett kihagyáskor)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "szó szerinti karakterlánc-illesztés"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr "a helyettesítő karakterek nem illeszkednek a perjelre"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr ""
 "a helyettesítőkarakterek illeszkednek a „/” jelre (alapértelmezett "
 "kihagyáskor)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Informatív kimenet:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "feldolgozott fájlok bőbeszédű listázása"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr "KULCSSZÓ"
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr "figyelmeztetés felügyelete"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 "előrehaladási üzenetek megjelenítése minden SZÁM. rekordnál (alapértelmezés: "
 "10)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr "MŰVELET"
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr "a MŰVELET végrehajtása minden ellenőrzőponton"
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "üzenet kiírása, ha nem minden link került kiíratásra"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "SZIGNÁL"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2070,27 +2102,27 @@ msgstr ""
 "Az engedélyezett szignálok: SIGHUP, SIGQUIT, SIGINT, SIGUSR1 és SIGUSR2; a "
 "SIG előtag nélküli nevek is elfogadottak"
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "a fájlmódosítási dátumok kiírása UTC szerint"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "bőbeszédű kimenet küldése a FÁJLBA"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "az archívumon belüli blokkszám megjelenítése minden egyes üzenettel"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "megerősítés kérése minden egyes művelethez"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "a tar alapértelmezéseinek megjelenítése"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
@@ -2098,31 +2130,31 @@ msgstr ""
 "listázáskor vagy kibontáskor minden egyes, a keresési feltételnek meg nem "
 "felelő könyvtár listázása"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr "fájl- vagy archívumnevek megjelenítése átalakítás után"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "STÍLUS"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr "az idézési stílus beállítása, az érvényes STÍLUS értékeket lásd alább"
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "a KARAKTERLÁNCBÓL származó karakterek kiegészítő idézése"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "a KARAKTERLÁNCBÓL származó karakterek idézésének letiltása"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Kompatibilitási kapcsolók:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
@@ -2130,56 +2162,64 @@ msgstr ""
 "létrehozáskor megegyezik a --old-archive kapcsolóval; kibontáskor a --no-"
 "same-owner kapcsolóval"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Egyéb kapcsolók:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "néhány potenciálisan káros kapcsoló használatának letiltása"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
-msgstr "A következő kapcsolók közül egynél többet nem használhat: „-Acdtrux”"
+#: src/tar.c:927
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
+msgstr ""
+"A következő kapcsolók közül egynél többet nem használhat: „-Acdtrux” vagy „--"
+"test-label”"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "A tömörítési kapcsolók ütköznek"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "Ismeretlen szignálnév: %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "A dátummintafájl nem található"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "%s cseréje az ismeretlen %s dátumformátumhoz"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "„%s” kapcsoló: A(z) „%s” dátum kezelése mint %s"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s: a fájllista már be van olvasva"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s: a beolvasott fájlnév null karaktert tartalmaz"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
-msgstr "A --quoting-style kapcsolók érvényes argumentumai:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, c-format
+msgid "filter the archive through %s"
+msgstr "az archívum tömörítése a(z) %s használatával"
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
+msgstr "A --quoting-style kapcsoló érvényes paraméterei:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2187,163 +2227,173 @@ msgstr ""
 "\n"
 "*Ezen* tar alapértelmezései:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Érvénytelen blokkolási tényező"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Érvénytelen szalagméret"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr "Hibás növekményszintérték"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Egynél több küszöbdátum"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr "Érvénytelen ritka verzió érték"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr ""
 "Az --atime-preserve='system' nem támogatott ezen az operációs rendszeren"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr "A --checkpoint értéke nem egy egész"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
-msgstr "%s: Érvénytelen csoport"
+#: src/tar.c:1830
+msgid "Invalid group"
+msgstr "Érvénytelen csoport"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Érvénytelen mód került megadásra a kapcsolóban"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Érvénytelen szám"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Érvénytelen tulajdonos"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
+"A --preserve kapcsoló elavult, használja a --preserve-permissions --preserve-"
+"order kapcsolókat helyette"
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Érvénytelen rekordméret"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "A rekordméretnek %d többszörösének kell lennie."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Érvénytelen elemszám"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr "Csak egy --to-command kapcsoló engedélyezett"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "Rosszul formázott sűrűségargumentum: %s"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "Ismeretlen sűrűség: „%c”"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "A „-[0-7][lmh]” kapcsolókat *ez* a tar NEM támogatja"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[FÁJL]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "A régi „%c” kapcsoló paramétert igényel."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "a --occurrence értelmetlen fájllista nélkül"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "a --occurrence nem használható a kért működési módban"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Több archívumfájl esetén szükséges a „-M” kapcsoló"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr ""
 "A --listed-incremental és a --newer kapcsolók nem használhatók egyszerre"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr "a --level értelmetlen a --listed-incremental nélkül"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: A kötetcímke túl hosszú (a korlát %lu bájt)"
 msgstr[1] "%s: A kötetcímke túl hosszú (a korlát %lu bájt)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "A többkötetes archívumok nem ellenőrizhetők"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "A tömörített archívumok nem ellenőrizhetők"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Nem használhatók többkötetes tömörített archívumok"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "Tömörített archívumok nem fűzhetők össze"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "a --pax kapcsoló csak POSIX archívumokon használható"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
-msgstr ""
+msgstr "A kötet hossza nem lehet kisebb a rekord méreténél"
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
-msgstr ""
+msgstr "a --preserve-order nem kompatibilis a --listed-incremental kapcsolóval"
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Üres archívum létrehozása visszautasítva"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Az „-Aru” kapcsolók összeférhetetlenek a „-f” kapcsolóval"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
-msgstr "A következő kapcsolók közül egyikét meg kell adnia: „-Acdtrux”"
+#: src/tar.c:2592
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
+msgstr ""
+"Meg kell adnia a következő kapcsolók egyikét: „-Acdtrux” vagy „--test-label”"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
-msgstr ""
+msgstr "Kilépés hibaállapottal a korábbi hibák miatt"
 
 #: src/update.c:86
 #, c-format
@@ -2352,84 +2402,88 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: A fájl zsugorítva %s bájttal"
 msgstr[1] "%s: A fájl zsugorítva %s bájttal"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "A(z) %s kulcsszó ismeretlen vagy még nincs megvalósítva"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+msgid "Time stamp is out of allowed range"
+msgstr "Az időbélyeg kívül esik az engedélyezett tartományon"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "A(z) %s minta nem használható"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "A(z) %s minta nem bírálható felül"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "Rosszul formázott kiterjesztett fejléc: a hossz hiányzik"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr "A kiterjesztett fejléc hossza kívül esik a tartományon"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "A kiterjesztett fejléc %*s hossza kívül esik a tartományon"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr ""
-"Rosszul formázott kiterjesztett fejléc: a hossz után hiányzik egy üreshely "
+"Rosszul formázott kiterjesztett fejléc: a hossz után hiányzik egy üres hely "
 "karakter"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "A kiterjesztett fejléc hibás: egy egyenlőségjel hiányzik"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr "Rosszul formázott kiterjesztett fejléc: az újsor hiányzik"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr ""
 "A(z) „%s” ismeretlen kiterjesztett fejléc kulcsszó figyelmen kívül marad"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr "Az előállított kulcsszó/érték pár túl hosszú (kulcsszó: %s, hossz: %s)"
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "A kiterjesztett fejléc %s=%s értéke túllépi a(z) %s..%s tartományát"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Rosszul formázott kiterjesztett fejléc: érvénytelen %s=%s"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Rosszul formázott kiterjesztett fejléc: többlet %s=%s"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 "Rosszul formázott kiterjesztett fejléc: érvénytelen %s: váratlan határoló (%"
 "c)"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr ""
@@ -2472,7 +2526,7 @@ msgstr "%u. írási ellenőrzőpont"
 msgid "Read checkpoint %u"
 msgstr "%u. olvasási ellenőrzőpont"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
@@ -2480,91 +2534,95 @@ msgstr ""
 "a genfiles adatfájlokat kezel a GNU paxutils tesztcsomag számára.\n"
 "A KAPCSOLÓK:\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr "Fájllétrehozási kapcsolók:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "MÉRET"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "Az adott MÉRETŰ fájl létrehozása"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "Írás a NÉV nevű fájlba a szabványos kimenet helyett"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "Fájlnevek beolvasása a FÁJLBÓL"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr "a -T nullal lezárt neveket olvas"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 "A fájl feltöltése az adott MINTÁVAL. A MINTA a 'default' (alapértelmezett) "
 "vagy 'zeros' (nullák) egyike"
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "Egy blokk mérete ritka fájlhoz"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 "Ritka fájl előállítása. A parancssor többi része megadja a fájlleképezést."
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr "ELTOLÁS"
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr "Az adott eltolásra pozicionálás az adatok kiírása előtt"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr "Fájlstatisztika kapcsolói:"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 "A stat struktúra tartalmának kiírása minden egyes megadott fájlhoz. Az "
 "alapértelmezett FORMÁTUM: "
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr "Szinkron végrehajtási kapcsolók:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+msgid "OPTION"
+msgstr "KAPCSOLÓ"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
-"Az adott PARANCS végrehajtása. Hasznos a --checkpoint és a --cut, --append "
-"vagy --touch egyikével"
+"Az adott ARGS végrehajtása. Hasznos a --checkpoint és a --cut, --append, --"
+"touch vagy --unlink egyikével"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 "Az adott művelet (lásd alább) végrehajtása a SZÁM-adik ellenőrzőpont elérése "
 "után"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr "Dátum beállítása a következő --touch kapcsoló számára"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 "Végrehajtott ellenőrzőpontok és a PARANCS kilépési állapotának megjelenítése"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
@@ -2572,7 +2630,7 @@ msgstr ""
 "Szinkron végrehajtási tevékenységek. Ezek a --checkpoint kapcsoló által "
 "megadott számú ellenőrzőpont elérésekor kerülnek végrehajtásra."
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
@@ -2580,149 +2638,147 @@ msgstr ""
 "A FÁJL csonkolása az előző --length kapcsoló által megadott méretre (vagy "
 "nullára, ha nincs megadva)"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 "MÉRET bájt hozzáfűzése a FÁJLHOZ. A MÉRETET az előző --length kapcsoló adja "
 "meg."
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "A FÁJL hozzáférési és módosítási idejének frissítése"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "A PARANCS végrehajtása"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr "A FÁJL törlése"
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "Érvénytelen méret: %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr "A szám kívül esik az engedélyezett tartományon: %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr "Negatív méret: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "a stat(%s) meghiúsult"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
-msgstr ""
+msgstr "a kért fájlhossz %lu, a tényleges %lu"
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
-msgstr ""
+msgstr "a létrehozott fájl nem ritka"
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "Hiba a(z) „%s” közelében található szám elemzésekor"
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "Ismeretlen dátumformátum"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[ARGUMENTUMOK...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "a(z) „%s” nem nyitható meg"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 msgid "cannot seek"
 msgstr "Nem lehet pozicionálni"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "a fájlnév null karaktert tartalmaz"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 "nem állíthatók elő ritka fájlok a szabványos kimeneten, használja a --file "
 "kapcsolót"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "helytelen maszk (a(z) „%s” közelében)"
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr "Ismeretlen mező: „%s”"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "nem állítható be az idő a következőn: „%s”"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, c-format
+msgid "cannot unlink `%s'"
+msgstr "a(z) „%s” nem törölhető"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "A parancs sikeresen befejeződött\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "A parancs meghiúsult a következő állapottal: %d\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "A parancs befejeződött a következő szignállal: %d\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "A parancs leállítva a következő szignállal: %d\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "A parancs hibakeresési kimenetet adott vissza\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "A parancs befejeződött\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "a --stat fájlneveket igényel"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "túl sok argumentum"
-
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
-#~ msgstr ""
-#~ "Figyelmeztetés: a „-l” kapcsoló nem támogatott; talán a „-j” vagy a „-T” "
-#~ "egyikére gondolt?"
-
-#, fuzzy
-#~ msgid "cancel effect of the previous --transform-links option"
-#~ msgstr "a --delay-directory-restore kapcsoló hatásának megszüntetése"
+#~ msgid "Cannot resolve hostname %s"
+#~ msgstr "Nem oldható fel a gépnév (%s)"
 
-#~ msgid "Error exit delayed from previous errors"
-#~ msgstr "A hibás kilépés késleltetve a korábbi hibákból"
+#~ msgid "suppress this warning."
+#~ msgstr "ezen figyelmeztetés elnyomásához."
index 04860ac72f3ebb255edaf721c35f4a878fd6ec9b..df037d0ecb874f5dc274e692ea99dd6eeae13a85 100644 (file)
Binary files a/po/id.gmo and b/po/id.gmo differ
index a86f4c9ce88010115b14ff44d6ea086fea00e3ad..0127933a83e1a2ca5094893b95e2c4d8137baf5f 100644 (file)
--- a/po/id.po
+++ b/po/id.po
@@ -2,14 +2,14 @@
 # Copyright (C) 1999, 2002 Free Software Foundation, Inc.
 # This file is distributed under the same license as the tar package.
 # Tedi Heriyanto <tedi_h@gmx.net>, 1999, 2002.
-# Arif E. Nugroho <arif_endro@yahoo.com>, 2008.
+# Arif E. Nugroho <arif_endro@yahoo.com>, 2008, 2009, 2010.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: tar 1.21\n"
+"Project-Id-Version: tar 1.22.91\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
-"PO-Revision-Date: 2008-12-30 12:30+0700\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
+"PO-Revision-Date: 2010-02-14 07:00+0700\n"
 "Last-Translator: Arif E. Nugroho <arif_endro@yahoo.com>\n"
 "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
 "MIME-Version: 1.0\n"
@@ -17,283 +17,191 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "argumen %s untuk %s tidak valid"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "argumen %s untuk %s ambigu"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Argumen yang valid adalah:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: %s nilai lebih kecil atau sama dengan %s"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: ARGP_HELP_FMT parameter membutuhkan sebuah nilai"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: ARGP_HELP_FMT parameter harus positif"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: Parameter ARGP_HELP_FMT tidak diketahui"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Sampah dalam ARGP_HELP_FMT: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
 msgstr ""
-"Argumen wajib atau opsional ke opsi panjang juga wajib atau opsional untuk "
-"argumen pendek yang berkorespondennya."
+"Argumen wajib atau opsional ke pilihan panjang juga wajib atau opsional "
+"untuk argumen pendek yang berkorespondennya."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Penggunaan:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr "  atau: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
-msgstr " [OPSI...]"
+msgstr " [PILIHAN...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Coba `%s --help' atau `%s --usage' untuk informasi lebih lanjut.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "Laporkan bug ke %s.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Kesalahan sistem tidak dikenal"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "berikan daftar bantuan ini"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "berikan sebuah pesan penggunaan singkat"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "NAMA"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "set nama aplikasi"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "SECS"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "berhenti untuk DETIK detik (baku 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "tampilkan versi aplikasi"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(APLIKASI ERROR) Tidak ada versi yang dikenal!?"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: Terlalu banyak argumen\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
-msgstr "(APLIKASI ERROR) Opsi seharusnya telah dikenali!?"
+msgstr "(APLIKASI ERROR) Pilihan seharusnya telah dikenali!?"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr "error menulis"
 
-#: lib/getopt.c:526 lib/getopt.c:542
+#: gnu/getopt.c:531 gnu/getopt.c:547
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
-msgstr "%s: opsi `%s' ambigu\n"
+msgid "%s: option '%s' is ambiguous\n"
+msgstr "%s: pilihan '%s' ambigu\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
+#: gnu/getopt.c:580 gnu/getopt.c:584
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
-msgstr "%s: opsi `--%s' tidak mengijinkan sebuah argumen\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: pilihan '--%s' tidak mengijinkan sebuah argumen\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
+#: gnu/getopt.c:593 gnu/getopt.c:598
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
-msgstr "%s: opsi `%c%s' tidak mengijinkan sebuah argumen\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: pilihan '%c%s' tidak mengijinkan sebuah argumen\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
-msgstr "%s: opsi `%s' membutuhkan sebuah argumen\n"
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: pilihan '%s' membutuhkan sebuah argumen\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
+#: gnu/getopt.c:698 gnu/getopt.c:701
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
-msgstr "%s: opsi tidak dikenal `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: pilihan tidak dikenal '--%s'\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
+#: gnu/getopt.c:709 gnu/getopt.c:712
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
-msgstr "%s: opsi tidak dikenal `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: pilihan tidak dikenal '%c%s'\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
+#: gnu/getopt.c:761 gnu/getopt.c:764
 #, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: opsi -- %c tidak legal\n"
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: pilihan -- '%c' tidak valid\n"
 
-#: lib/getopt.c:768 lib/getopt.c:771
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
 #, c-format
-msgid "%s: invalid option -- %c\n"
-msgstr "%s: opsi -- %c tidak valid\n"
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: pilihan membutuhkan sebuah argumen -- '%c'\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
+#: gnu/getopt.c:884 gnu/getopt.c:900
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: opsi membutuhkan sebuah argumen -- %c\n"
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: pilihan '-W %s' ambigu\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
+#: gnu/getopt.c:924 gnu/getopt.c:942
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
-msgstr "%s: opsi `-W %s' ambigu\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: pilihan '-W %s' tidak mengijinkan sebuah argumen\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
-msgstr "%s: opsi `-W %s' tidak mengijinkan sebuah argumen\n"
-
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "kehabisan memori"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, c-format
 msgid "unable to record current working directory"
 msgstr "tidak dapat menyimpan direktori kerja sekarang"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, c-format
 msgid "failed to return to initial working directory"
 msgstr "gagal untuk kembali ke direktori kerja inisial"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Tidak dapat %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Peringatan: Tidak dapat %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Tidak dapat mengganti mode ke %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Tidak dapat merubah kepemilikan ke uid %lu, gid %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Tidak dapat membuat hard link ke %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Error pembacaan di byte %s, ketika membaca %lu byte"
-msgstr[1] "%s: Error pembacaan di byte %s, ketika membaca %lu byte"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Peringatan: Error pembacaan di byte %s, ketika membaca %lu byte"
-msgstr[1] "%s: Peringatan: Error pembacaan di byte %s, ketika membaca %lu byte"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Tidak dapat mencari ke %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Peringatan: Tidak dapat mencari ke %s"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Tidak dapat membuat symlink ke %s"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Hanya dapat menulis %lu dari %lu byte"
-msgstr[1] "%s: Hanya dapat menulis %lu dari %lu byte"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Menghilangkan awalan `%s' dari nama anggota"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Menghilangkan awalan `%s' dari target hard link"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Mengganti `.' untuk nama anggota kosong"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Mengganti `.' untuk target hard link kosong"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -307,17 +215,17 @@ msgstr "Mengganti `.' untuk target hard link kosong"
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "`"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "'"
 
@@ -327,7 +235,7 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[yY]"
 
@@ -337,39 +245,28 @@ msgstr "^[yY]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[nN]"
 
-#: lib/rtapelib.c:299
+#: gnu/version-etc.c:76
 #, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Service tidak tersedia"
+msgid "Packaged by %s (%s)\n"
+msgstr "Dibungkus oleh %s (%s)\n"
 
-#: lib/rtapelib.c:303
+#: gnu/version-etc.c:79
 #, c-format
-msgid "stdin"
-msgstr "stdin"
-
-#: lib/rtapelib.c:306
-#, c-format
-msgid "stdout"
-msgstr "stdout"
-
-#: lib/rtapelib.c:512
-#, c-format
-msgid "Cannot execute remote shell"
-msgstr "Tidak dapat menjalankan remote shell"
+msgid "Packaged by %s\n"
+msgstr "Dibungkus oleh %s\n"
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr "(C)"
 
-#: lib/version-etc.c:67
-#, fuzzy
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -379,8 +276,8 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Lisensi GPLv3+: GNU GPL versi 3 atau lebih <http://gnu.org/licenses/gpl."
-"html>\n"
+"Lisensi GPLv3+: GNU GPL versi 3 atau selanjutnya <http://gnu.org/licenses/"
+"gpl.html>\n"
 "Ini adalah aplikasi bebas: anda bebas untuk mengubah dan "
 "mendistribusikannya.\n"
 "TIDAK ADA GARANSI disini, sampai batas yang diijinkan oleh hukum yang "
@@ -388,19 +285,19 @@ msgstr ""
 "\n"
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr "Ditulis oleh %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Ditulis oleh %s dan %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Ditulis oleh %s, %s, dan %s.\n"
@@ -408,7 +305,7 @@ msgstr "Ditulis oleh %s, %s, dan %s.\n"
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -420,7 +317,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -432,7 +329,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -444,7 +341,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -456,7 +353,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -470,7 +367,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -484,7 +381,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -499,181 +396,322 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 "\n"
-"Laporkan bug ke <%s>.\n"
+"Laporkan bug ke: %s\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:249
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
-msgstr ""
+msgid "Report %s bugs to: %s\n"
+msgstr "Laporkan %s bug ke: %s\n"
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
-msgstr ""
+#: gnu/version-etc.c:253
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s halaman rumah: <%s>\n"
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "Masukan string terlalu panjang"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+msgstr "%s halaman rumah: <http://www.gnu.org/software/%s/>\n"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "Sintaks jumlah error"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+msgstr "Bantuan umum menggunakan aplikasi GNU: <http://www.gnu.org/gethelp/>\n"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Tidak dapat mengalokasi buffer space\n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Tidak dapat %s"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Tidak dapat mengalokasi buffer space"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Peringatan: Tidak dapat %s"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:93
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Coba `%s --help' untuk informasi lebih lanjut.\n"
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Tidak dapat mengganti mode ke %s"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:101
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Tidak dapat merubah kepemilikan ke uid %lu, gid %lu"
+
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Tidak dapat membuat hard link ke %s"
+
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Error pembacaan di byte %s, ketika membaca %lu byte"
+msgstr[1] "%s: Error pembacaan di byte %s, ketika membaca %lu byte"
+
+#: lib/paxerror.c:192
+#, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Peringatan: Error pembacaan di byte %s, ketika membaca %lu byte"
+msgstr[1] "%s: Peringatan: Error pembacaan di byte %s, ketika membaca %lu byte"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Tidak dapat mencari ke %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Peringatan: Tidak dapat mencari ke %s"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Tidak dapat membuat symlink ke %s"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Hanya dapat menulis %lu dari %lu byte"
+msgstr[1] "%s: Hanya dapat menulis %lu dari %lu byte"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Menghilangkan awalan `%s' dari nama anggota"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Menghilangkan awalan `%s' dari target hard link"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Mengganti `.' untuk nama anggota kosong"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Mengganti `.' untuk target hard link kosong"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Service tidak tersedia"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "stdin"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "stdout"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Penggunaan: %s [OPSI]\n"
-"Manipulasi sebuah tape drive, menerima perintah dari proses remote.\n"
-"\n"
-"  --version  Tampilkan informasi versi.\n"
-"  --help     Tampilkan bantuan ini.\n"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "Offset pencarian error"
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Tidak dapat menjalankan remote shell"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Arah pencarian di luar jangkauan"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:419
+msgid "Invalid seek direction"
+msgstr "Arah pencarian tidak valid"
+
+#: rmt/rmt.c:427
+msgid "Invalid seek offset"
+msgstr "Ofset pencarian tidak valid"
+
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Offset pencarian di luar jangkauan"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Arah pencarian di luar jangkauan"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+msgid "Invalid byte count"
+msgstr "Jumlah byte tidak valid"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+msgid "Byte count out of range"
+msgstr "Jumlah byte di luar jangkauan"
+
+#: rmt/rmt.c:539
+msgid "Premature eof"
+msgstr "EOF prematur"
+
+#: rmt/rmt.c:582
+msgid "Invalid operation code"
+msgstr "Kode operasi tidak valid"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
-msgstr "rmtd: EOF prematur\n"
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr "Operasi tidak didukung"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Akhir dari berkas prematur"
+#: rmt/rmt.c:645
+msgid "Unexpected arguments"
+msgstr "Unexpected tidak terduga"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr "Manipulasi sebuah tape drive, menerima perintah dari proses remote"
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "NOMOR"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr "tentukan tingkat penelusuran"
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "BERKAS"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr "tentukan keluaran nama berkas penelusuran"
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, c-format
+msgid "cannot open %s"
+msgstr "tidak dapat membuka %s"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "terlalu banyak argumen"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Perintah sampah"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Ini sepertinya bukan sebuah tar archive"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Total byte ditulis"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "Total byte dibaca"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Total byte dihapus: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(pipe)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Nilai record_size tidak valid"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Tidak diberikan nama archive"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Tidak dapat memverifikasi stdin/stdout archive"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
-msgstr "Archive terkompres. Gunakan %s opsi"
+msgstr "Archive terkompres. Gunakan %s pilihan"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Tidak dapat update compressed archives"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Berada pada awal tape, berhenti sekarang"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Terlalu banyak errors, berhenti"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Ukuran record = %lu blok"
 msgstr[1] "Ukuran record = %lu blok"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Blok tidak sesuai (%lu byte) dalam arsip"
 msgstr[1] "Blok tidak sesuai (%lu byte) dalam arsip"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr ""
 "Tidak dapat backspace file archives; kemungkinan tidak bisa dibaca tanpa -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek tidak dapat berhenti di sebuah batas rekaman"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: berisi nomor volum yang tidak valid"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Nomor volum overflow"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Mempersiapkan volume #%d untuk %s dan tekan return: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "EOF pada saat user reply diharapkan"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "PERINGATAN: Archive tidak lengkap"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -685,65 +723,65 @@ msgstr ""
 " q             Batalkan tar\n"
 " y or newline  Lanjutkan operasi\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !             Spawn sebuah subshell\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?             Tampilkan daftar ini\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Tidak ada new volume; keluar.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "Nama berkas tidak dispesifikasikan. Coba lagi.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "Masukan tidak valid. Ketik ? untuk bantuan.\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "Perintah %s gagal"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s mungkin dilanjutkan di volume ini: header berisi nama terpotong"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s tidak dilanjutkan di volume ini"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s adalah ukuran yang salah (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Volume ini di luar urutan (%s - %s != %s)"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Label archive tidak cocok dengan %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Volume %s tidak sesuai dengan %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
@@ -751,60 +789,60 @@ msgstr ""
 "%s: nama berkas terlalu panjang untuk diurutkan dalam sebuah GNU multivolume "
 "header, dipotong"
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
 msgstr "tulis tidak berhenti di batas blok"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Hanya dapat membaca %lu dari %lu byte"
 msgstr[1] "Hanya dapat membaca %lu dari %lu byte"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Isi berbeda"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Unexpected EOF dalam archive"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Tipe berkas berbeda"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Mode berbeda"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Uid berbeda"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Gid berbeda"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Mod time berbeda"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Ukuran berbeda"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Tidak dilink ke %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Symlink berbeda"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Nomor perangkat berbeda"
 
@@ -826,34 +864,34 @@ msgstr "Archive berisi nama berkas dengan awalan dihapus."
 msgid "Verification may fail to locate original files."
 msgstr "Verifikasi mungkin gagal untuk menemukan berkas orisinil."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "GAGAL VERIFIKASI: header %d tidak valid terdeteksi"
 msgstr[1] "GAGAL VERIFIKASI: header %d tidak valid terdeteksi"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "Sebuah lone blok nol di %s"
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: berisi sebuah cache direktori tag %s; %s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "nilai %s dari %s di luar jangkauan %s..%s; menggantikan %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "nilai %s dari %s di luar dari jangkauan %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Membuat header oktal negatif"
 
@@ -873,432 +911,437 @@ msgstr ""
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: nama link terlalu panjang; tidak di-dump"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
-msgstr[0] "%s: File diperkecil %s byte; dipadding dengan nol"
-msgstr[1] "%s: File diperkecil %s byte; dipadding dengan nol"
+msgstr[0] "%s: Berkas diperkecil %s byte; dipadding dengan nol"
+msgstr[1] "%s: Berkas diperkecil %s byte; dipadding dengan nol"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: file berada pada filesistem yang berbeda; tidak di-dump"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr "isi tidak didump"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Tipe file tidak dikenal; file diabaikan"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, c-format
-msgid "Missing links to %s.\n"
-msgstr "Hilang link ke %s.\n"
+msgid "Missing links to %s."
+msgstr "Hilang hubungan ke %s."
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: berkas tidak berubah; tidak di-dump"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: berkas adalah archive; tidak di-dump"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: File dihapus sebelum kita membacanya"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr "direktori tidak didump"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: berkas berubah saat kita membacanya"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: soket diabaikan"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: door diabaikan"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Skip ke header berikutnya"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Menghapus non-header dari archive"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: implausibly penanda waktu lama %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: penanda %s adalah %s dalam masa datang"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Inkonsistensi tidak diharapkan ketika membuat direktori"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Direktori diganti nama sebelum statusnya dapat diperoleh"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Sedang extract contiguous file sebagai regular file"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Mencoba extract symbolic link sebagai hard link"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Membaca %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr ""
 "%s: Tidak dapat mengekstrak -- berkas adalah kelanjutan dari volume lain"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "Tidak terduga nama header panjang"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Tipe berkas tidak dikenal '%c', diekstraksi sebagai berkas normal"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "Saat ini %s adalah lebih baru atau berumuran sama"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Tidak dapat melakukan backup berkas ini"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "Tidak dapat mengubah nama %s ke %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Error tidak dapat diperbaiki: keluar sekarang"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Direktori telah diubah nama dari %s"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Direktori telah diganti nama"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Direktori adalah baru"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Time stamp tidak valid"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Waktu modifikasi (detik) tidak valid"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "waktu modifikasi (nano detik) tidak valid"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Nomor perangkat tidak valid"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Nomor inode tidak valid"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "Field terlalu panjang ketika membaca berkas snapshot"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "Pembacaan error dalam berkas snapshot"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "Tidak terduga EOF dalam berkas snapshot"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "Tidak terduga nilai field dalam berkas snapshot"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "Hilang pengakhir rekaman"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "Format berkas incremental buruk"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr "Versi format incremental tidak didukung: %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr "Salah bentuk dumpdir: diduga '%c' tetapi ditemukan %#3o"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "Salah bentuk dumpdir: 'X' terduplikasi"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "Salah bentuk dumpdir: nama kosong dalam 'R'"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "Salah bentuk dumpdir: 'T' tidak diawali oleh 'R'"
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "Salah bentuk dumpdir: nama kosong dalam 'T'"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr "Salah bentuk dumpdir: diduga '%c' tetapi ditemukan akhir dari data"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr "Salah bentuk dumpdir: 'X' tidak pernah digunakan"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Tidak dapat membuat direktori sementara menggunakan template %s"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: Tidak menghapus direktori: tidak dapat memperoleh statistik"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: direktori berada di perangkat yang berbeda: tidak menghapus"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Menghapus %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Tidak dapat menghapus"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Mengabaikan"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "blok %s: ** Blok dari KOSONG **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "blok %s: ** Akhir dari Berkas **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "blok %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Kosong dalam header saat diharapkan nilai %s numerik"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr "Nilai oktal arsip %.*s di luar batasan %s; asumsikan komplemen dua"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Nilai oktal arsip %.*s di luar batasan %s"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Arsip berisikan header base-64 yang kadaluarsas"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "Arsip yang ditandatangahi dengan string base-64 %s di luar batasan %s"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Nilai arsip base-256 di luar batasan %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Arsip berisikan %.*s ketika nilai numerik %s diharapkan"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Nilai arsip %s dari %s di luar batasan %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " link ke %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " tipe file tidak dikenal %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Link Panjang--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Nama Panjang--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Volume Header--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Diteruskan pada byte %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Membuat direktori:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Mengganti nama %s ke %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s:Tidak dapat mengganti nama ke %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Mengganti nama %s kembali ke %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Tidak dapat menyimpan direktori kerja"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Tidak bisa pindah direktori kerja"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Berkas dihapus sebelum kita membacanya"
+
+#: src/misc.c:774
+#, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Direktori dihapus sebelum kita membacanya"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "proses anak"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "saluran interproses"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr "Pola pencocokan karakter digunakan dalam nama berkas. Mohon,"
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 "gunakan --wildcards untuk mengaktifkan pencocokan pola, atau --no-wildcards "
 "untuk"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "menekan peringatan ini."
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Tidak ditemukan dalam archive"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Kejadian yang diinginkan tidak ditemukan dalam archive"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+"Menggunakan pilihan -C didalam daftar berkas tidak diijinkan dengan --listed-"
+"incremental"
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr "Hanya satu pilihan -C yang diijinkan dengan --listed-incremental"
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
-msgstr "Opsi `-%s' dan `-%s' membutuhkan standard masukan"
+msgstr "Pilihan `-%s' dan `-%s' membutuhkan standard masukan"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Format archive tidak valid"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "Feature GNU dibutuhkan untuk format archive yang tidak kompatibel"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
@@ -1306,7 +1349,7 @@ msgstr ""
 "Gaya quoting `%s' tidak diketahui. Coba `%s --quoting-style=help' untuk "
 "memperoleh daftar."
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1326,7 +1369,7 @@ msgstr ""
 "secara rinci.\n"
 "  tar -xf archive.tar          # Bongkar semua berkas dari archive.tar.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1347,211 +1390,207 @@ msgstr ""
 "sebaliknya\n"
 "  never, simple   selalu buat sederhana backups\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Mode operasi utama:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "daftar isi dari sebuah archive"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "ekstrak berkas dari sebuah archive"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "buat sebuah archive baru"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "cari perbedaan diantara archive dan sistem berkas"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "tambahkan berkas ke akhir dari sebuah archive"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "hanya tambahkan berkas yang lebih bari dari salinan dalam archive"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "tambahkan berkas tar ke sebuah archive"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "hapus dari archive (bukan dalam pita mag!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr "test label volume archive dan keluar"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Pemodifikasi operasi:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "tangani berkas sparse secara efisien"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr "MAJOR[.MINOR]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 "set versi dari format sparse untuk digunakan (mengimplikasikan --sparse)"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "tangani format GNU lama incremental backup"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "BERKAS"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "tangani format GNU barus incremental backup"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr "tingkat `dump' untuk pembuatan `listed-incremental archive'"
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "jangan keluar dengan bukan nol dalam berkas tidak dapat dibaca"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "NOMOR"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
 "diff, --extract or --list and when a list of files is given either on the "
 "command line or via the -T option; NUMBER defaults to 1"
 msgstr ""
-"proses hanya JUMLAH pertemuan dari setiap berkas dalam archive; opsi ini "
+"proses hanya JUMLAH pertemuan dari setiap berkas dalam archive; pilihan ini "
 "hanya berlaku dalam konjungsi dengan satu dari sub perintah --delete, --"
 "diff, --extract atau --list dan ketika sebuah daftar dari berkas diberikan "
-"baik dalam baris perintah atau melalui opsi -T; JUMLAH baku ke 1"
+"baik dalam baris perintah atau melalui pilihan -T; JUMLAH baku ke 1"
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "pencarian tidak dapat dilakukan dalam archive"
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr "pencarian tidak dapat dilakukan dalam archive"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 "tidak dapat memeriksa nomor perangkat ketika membuat archive incremental"
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr "periksa nomor perangkat ketika membuat incremental archive (baku)"
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "Overwrite kontrol:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "mencoba untuk memverifikasi archive setelah menulisnya"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "hapus berkas setelah menambahkannya ke archive"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "jangan timpa berkas yang sudah ada ketika mengekstrak"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 "jangan timpa berkas yang sudah ada yang lebih baru dari salinan archivenya"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "overwrite berkas yang sudah ada ketika mengekstrak"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "hapus setiap berkas sebelum mengekstrak diatasnya"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "kosongkan susunan sebelum mengekstrak ke direktori"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "jaga metadata dari direktori yang sudah ada"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 "overwrite metadata dari direktori yang sudah ada ketika mengekstrak (baku)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Pilih stream keluaran:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "ekstrak berkas ke standar keluaran"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "PERINTAH"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "pipe berkas terekstrak ke aplikasi lain"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "abaikan kode keluaran dari anak"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr "perlakukan kode keluaran bukan nol dari anak sebagai error"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Penanganan dari atribut berkas:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "paksa NAMA sebagai pemilik untuk berkas yang ditambahkan"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "paksa NAMA sebagai grup untuk berkas yang ditambahkan"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "DATE-ATAU-BERKAS"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "set mtime untuk berkas yang ditambahkan dari DATE-OR-FILE"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "PERUBAHAN"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "paksa PERUBAHAN (simbolik) mode untuk berkas yang ditambahkan"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "METODE"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1561,27 +1600,31 @@ msgstr ""
 "setelah membaca (METODE='replace'; baku) atau dengan tidak menset waktu di "
 "tempat pertama (METODE='system')"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "jangan ekstrak waktu modifikasi berkas"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
-msgstr "mencoba mengekstrak berkas dengan kepemilikan yang sama"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
+msgstr ""
+"mencoba mengekstrak berkas dengan kepemilikan yang sama yang ada dalam "
+"archive (baku untuk pengguna super)"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
-msgstr "ekstrak berkas seperti dirimu"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
+msgstr "ekstrak berkas seperti dirimu (baku untuk pengguna biasa)"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "selalu gunakan nomor untuk nama pengguna/grup"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr "ekstrak informasi mengenai ijin berkas (baku untuk superuser)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
@@ -1589,15 +1632,15 @@ msgstr ""
 "aplikasikan umask pengguna ketika mengekstrak ijin dari archive (baku untuk "
 "pengguna biasa)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "urutkan nama untuk mengekstrak supaya cocok dengan archive"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "sama seperti baik -p dan -s"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
@@ -1605,139 +1648,139 @@ msgstr ""
 "tunda konfigurasi waktu modifikasi dan ijin untuk direktori terekstrak "
 "sampai akhir dari ekstrasi"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
-msgstr "batalkan efek dari opsi --delay-directory-restore"
+msgstr "batalkan efek dari pilihan --delay-directory-restore"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "Pemilihan dan pengubahan perangkat:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "ARCHIVE"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "gunakan berkas archive atau perangkat ARCHIVE"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "berkas archive adalah lokal walaupun ini memiliki sebuah kolon"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "gunakan PERINTAH rmt yang diberikan daripad rmt"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "gunakan PERINTAH remote daripada rsh"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "spesifikasikan drive dan kepadatan"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "buat/daftar/ekstrak multi-volume archive"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "ubah pita setelah menulis ANGKA x 1024 bytes"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "jalankan script di akhir dari setiap pite (mengimplikasikan -M)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "gunakan/update jumlah volume dalam BERKAS"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Bloking perangkat:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "BLOK"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "BLOK x 512 byte per detik"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "JUMLAH dari byte per rekaman, kelipatan dari 512"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "abaikan blok yang dinolkan dalam archive (berarti EOF)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "reblok saat kita baca (untuk 4.2BSD pipes)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Pemilihan format archive:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "FORMAT"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "buat archive dari format yang diberikan"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "FORMAT adalah satu dari berikut:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "format tar lama V7"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "format gnu tar <= 1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "format GNU tar 1.13.x"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "format POSIX 1003.1-1988 (ustar)"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "format POSIX 1003.1-2001 (pax)"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "sama seperti pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "sama seperti --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "sama seperti --format=posix"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "kata kunci[[:]=nilai][,kata kunci[[:]=nilai]]..."
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "kontrol kata kunci pax"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "TEKS"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
@@ -1745,103 +1788,77 @@ msgstr ""
 "buat archive dengan nama volume TEKS; di waktu daftar/ekstrak, gunakan TEKS "
 "sebagai sebuah pola globbing untuk nama volume"
 
-#: src/tar.c:593
+#: src/tar.c:613
 msgid "Compression options:"
-msgstr "Opsi kompresi:"
+msgstr "Pilihan kompresi:"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr "gunaka nama akhiran archive untuk menentukan aplikasi kompresi"
 
-#: src/tar.c:597
-#, fuzzy
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr "jangan gunakan nama akhiran archive untuk menentukan aplikasi kompresi"
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "saring archive melalui bzip2"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "saring archive melalui gzip"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "saring archive melalui compress"
-
-#: src/tar.c:609
-msgid "filter the archive through lzma"
-msgstr "saring archive melalui lzma"
-
-#: src/tar.c:611
-msgid "filter the archive through lzop"
-msgstr "saring archive melalui lzop"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "saring archive melalui gzip"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "PROG"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "saring melalui PROG (harus menerima -d)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Pemilihan berkas lokal:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 "tambahkan berkas yang diberikan ke archive (berguna jika namanya berawal "
 "dengan sebuah dash)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "DIR"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "pindah ke direktori DIR"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "dapatkan nama untuk ekstrak atau buat dari BERKAS"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T baca nama berakhiran kosong, non-aktifkan -C"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
-msgstr "non-aktifkan efek dari opsi --null sebelumnya"
+msgstr "non-aktifkan efek dari pilihan --null sebelumnya"
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr "unquote nama berkas baca dengan -T (baku)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr "jangan unquote nama berkas baca dengan -T"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "POLA"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "jangan masukan berkas, berikan sebagai sebuah POLA"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "jangan masukan pola yang terdaftar dalam BERKAS"
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
@@ -1849,89 +1866,93 @@ msgstr ""
 "jangan masukan isi dari direktori berisi CACHEDIR.TAG, kecuali untuk berkas "
 "tag itu sendiri"
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "jangan masukan apapun dibawah direktori berisi CACHEDIR.TAG"
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "jangan masukan direktori berisi CACHEDIR.TAG"
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 "jangan masukan isi dari direktori berisi BERKAS, kecuali untuk BERKAS itu "
 "sendiri"
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr "jangan masukan apapun dibawah direktori berisi BERKAS"
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr "jangan masukan direktori berisi BERKAS"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr "jangan masukan direktori sistem pengontrol direktori"
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr "abaikan berkas cadangan dan berkas kunci"
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "hindari penurunan secara otomatis dalam direktori"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "tetap dalam sistem berkas lokal ketika membuat archive"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "rekursif kedalam direktori (baku)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "jangan hilangkan awalan `/' dari nama berkas"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr "ikuti symlinks; berkas archive dan dump yang mereka tunjuk ke"
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr "ikuti hard links; berkas archive dan dump yang mereka refer ke"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "NAMA-ANGGOTA"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "berawal di anggota NAMA-ANGGOTA dalam archive"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "hanya simpan berkas lebih baru dari DATE-OR-FILE"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "TANGGAL"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "bandingkan tanggal dan waktu hanya ketika data berubah"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "KONTROL"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "backup sebelum penghapusan, pilih PENGONTROL versi"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "STRING"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1939,88 +1960,97 @@ msgstr ""
 "backup sebelum penghapusan, override akhiran biasa ('~' kecuali di override "
 "oleh variabel lingkungan SIMPLE_BACKUP_SUFFIX)"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr "Transformasi nama berkas:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr ""
 "hilangkan NOMOR yang mengawali komponen dari nama berkas di waktu ekstraksi"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "EKSPRESI"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr "gunakan sed EKSPRESI replace untuk mengubah nama berkas"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
-msgstr "Opsi nama berkas cocok (mempengaruhi baik pola exclude dan include):"
+msgstr ""
+"Pilihan nama berkas cocok (mempengaruhi baik pola exclude dan include):"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr "abaikan perbedaan huruf besar dan huruf kecil"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr "pencocokan pola nama berkas mulai"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr "pencocokan polah setelah `/' apapun (baku untuk exclusion)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr "pencocokan dengan memperhatikan huruf besar dan huruf kecil (baku)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr "gunakan wildcards (baku untuk exclusion)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "pencocok verbatim string"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr "wildcards tidak cocok `/'"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr "wildcards cocok `/' (baku untuk exclusion)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Keluaran informative:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "proses daftar berkas secara verbose"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr "KATA KUNCI"
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr "pengendali peringatan"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr "tampilkan pesan perkembangan setiap rekaman ke ANGKA (baku 10)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr "AKSI"
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr "jalankan AKSI disetiap titik pemeriksaan"
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "tampilkan sebuah pesan jika tidak seluruh link didump"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "SINYAL"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2032,27 +2062,27 @@ msgstr ""
 "adalah: SIGHUP, SIGQUIT, SIGINT, SIGUSR1 dan SIGUSR2; nama tanpa awalah SIG "
 "juga diterima"
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "tampilkan waktu modifikasi berkas dalam UTC"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "kirim keluaran verbose ke BERKAS"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "tampilkan jumlah blok didalam archive dengan setiap pesan"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "minta konfirmasi untuk setiap aksi"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "tampilkan tar baku"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
@@ -2060,31 +2090,31 @@ msgstr ""
 "ketika mendaftar atau mengekstrak, daftar setiap direktori yang tidak cocok "
 "dengan kriteria pencarian"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr "tampilkan berkas atau nama berkas setelah transformasi"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "GAYA"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr "set nama quoting gaya; lihat dibawah untuk nilai GAYA yang valid"
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "sebagai tambahan karakter quote dari STRING"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "non-aktifkan quoting untuk karakter dari STRING"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
-msgstr "Opsi yang kompatibel:"
+msgstr "Pilihan yang kompatibel:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
@@ -2092,56 +2122,64 @@ msgstr ""
 "ketika membuat, sama seperti --old-archive; ketika mengekstrak, sama seperti "
 "--no-same-owner"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
-msgstr "Opsi lain:"
+msgstr "Pilihan lain:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
-msgstr "non-aktifkan penggunaan dari opsi berbahaya yang berpotensial"
+msgstr "non-aktifkan penggunaan dari pilihan berbahaya yang berpotensial"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
-msgstr "Anda tidak bisa menjalankan lebih dari satu opsi `-Acdtrux'"
+#: src/tar.c:927
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
+msgstr ""
+"Anda tidak bisa menspesifikasikan lebih dari satu pilihan `-Acdtrux' atau `--"
+"test-label'"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
-msgstr "Opsi kompresi konflik"
+msgstr "Pilihan kompresi konflik"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "Nama sinyal: %s tidak dikenal"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "Tanggal contoh berkas tidak ditemukan"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Menggantikan %s untuk format tanggal tidak dikenal %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
-msgstr "Opsi %s: memperlakukan tanggal `%s' sebagai %s"
+msgstr "Pilihan %s: memperlakukan tanggal `%s' sebagai %s"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s: daftar berkas telah dibaca"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s: nama berkas yang dibaca berisi karakter nul"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
-msgstr "Argumen yang valid untuk opsi --quoting-style adalah:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, c-format
+msgid "filter the archive through %s"
+msgstr "saring archive melalui %s"
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
+msgstr "Argumen yang valid untuk pilihan --quoting-style adalah:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2149,160 +2187,169 @@ msgstr ""
 "\n"
 "*Ini* tar baku ke:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Faktor bloking tidak valid"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Panjang tape tidak valid"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr "Nilai tingkat peningkatan tidak valid"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Lebih dari satu treshold date"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr "Nilai versi sparse tidak valid"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
-msgstr "opsi --atime-preserve='system' tidak didukung di platform ini"
+msgstr "pilihan --atime-preserve='system' tidak didukung di platform ini"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr "nilai --checkpoint bukan sebuah integer"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
-msgstr "%s: grup tidak valid"
+#: src/tar.c:1830
+msgid "Invalid group"
+msgstr "Grup tidak valid"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
-msgstr "Mode tidak tepat diberikan pada opsi"
+msgstr "Mode tidak tepat diberikan pada pilihan"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Nomor tidak valid"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Pemilik tidak valid"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
-"Opsi --preserve sudah ditinggalkan, lebih baik gunakan --preserve-"
+"Pilihan --preserve sudah ditinggalkan, lebih baik gunakan --preserve-"
 "permissions --preserve-order"
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Ukuran record tidak valid"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Jumlah record harus kelipatan dari %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Jumlah dari elemen tidak valid"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
-msgstr "Hanya satu opsi --to-command yang diijinkan"
+msgstr "Hanya satu pilihan --to-command yang diijinkan"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "Salah bentuk kepadatan argumen: %s"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "Kepadatan tidak diketahui: `%c'"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
-msgstr "Opsi `-[0-7][lmh]' tidak didukung oleh tar *ini*"
+msgstr "Pilihan `-[0-7][lmh]' tidak didukung oleh tar *ini*"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[BERKAS]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
-msgstr "Opsi 'lama' `%c' membutuhkan argument."
+msgstr "Pilihan 'lama' `%c' membutuhkan argument."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "--occurrence tidak berarti tanpa sebuah daftar berkas"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "--occurrence tidak dapat digunakan dalam mode operasi yang diminta"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
-msgstr "Berkas multiple archive membutuhkan opsi '-M'"
+msgstr "Berkas multiple archive membutuhkan pilihan '-M'"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Tidak dapat menggabungkan --listed-incremental dengan --newer"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr "--level tidak berarti tanpa --listed-incremental"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: Label volume terlalu panjang (batasnya adalah %lu byte)"
 msgstr[1] "%s: Label volume terlalu panjang (batasnya adalah %lu byte)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Tidak dapat verifikasi multi-volume archives"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Tidak dapat verify compressed archives"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Tidak dapat menggunakan multi-volume compressed archives"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "Tidak dapat update compressed archives"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "--pax-option hanya dapat digunakan dalam archive POSIX"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr "Panjang volume tidak dapat lebih kecil dari ukuran rekaman"
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr "--preserve-order tidak kompatibel dengan --listed-incremental"
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Secara takut menolak untuk membuat sebuah archive kosong"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
-msgstr "Opsi '-Aru' tidak kompatibel dengan `-f -'"
+msgstr "Pilihan '-Aru' tidak kompatibel dengan `-f -'"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
-msgstr "Anda harus menggunakan salah satu dari opsi `-Acdtrux'"
+#: src/tar.c:2592
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
+msgstr ""
+"Anda harus menspesifikasikan salah satu dari pilihan `-Acdtrux' atau `--test-"
+"label'"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr "Keluar dengan status gagal karena error error sebelumnya"
@@ -2311,55 +2358,59 @@ msgstr "Keluar dengan status gagal karena error error sebelumnya"
 #, c-format
 msgid "%s: File shrank by %s byte"
 msgid_plural "%s: File shrank by %s bytes"
-msgstr[0] "%s: file mengecil sebanyak %s byte"
-msgstr[1] "%s: file mengecil sebanyak %s byte"
+msgstr[0] "%s: Berkas mengecil sebanyak %s byte"
+msgstr[1] "%s: Berkas mengecil sebanyak %s byte"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "Kata kunci %s tidak diketahui atau belum diimplementasikan"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+msgid "Time stamp is out of allowed range"
+msgstr "Penanda waktu di luar dari jangkauan yang diijinkan"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "Pola %s tidak dapat digunakan"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "Kata kunci %s tidak dapat dioverride"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "Salah bentuk ekstensi header: hilang panjang"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr "Ekstensi panjang header diluar dari jangkauan yang diijinkan"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "Ekstensi panjang header %*s diluar dari jangkauan"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr "Salah bentuk ekstensi header: hilang blank setelah panjang"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Salah bentuk ekstensi header: hilang tanda sama dengan"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr "Salah bentuk ekstensi header: hilang baris baru"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr "Mengabaikan kata kunci ekstensi `%s' yang tidak diketahui"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
@@ -2368,27 +2419,27 @@ msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "Ekstensi header %s=%s diluar dari jangkauan %s..%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Salah bentuk ekstensi header: tidak valid %s=%s"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Salah bentuk ekstensi header: kelebihan %s=%s"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr "Salah bentuk ekstensi header: tidak valid %s: tidak diduga pembatas %c"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr "Salah bentuk ekstensi header: tidak valid %s: jumlah dari nilai ganjil"
@@ -2429,245 +2480,324 @@ msgstr "Menulis titik pemeriksaan %u"
 msgid "Read checkpoint %u"
 msgstr "Membaca titik pemeriksaan %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
 msgstr ""
 "genfile memanipulasi berkas data untuk suite pemeriksaan GNU paxutils.\n"
-"OPSI adalah:\n"
+"PILIHAN adalah:\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
-msgstr "Opsi pembuatan berkas:"
+msgstr "Pilihan pembuatan berkas:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "UKURAN"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "Buat berkas dari UKURAN yang diberikan"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "Tulis ke berkas NAMA, daripada ke standar keluaran"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "Baca nama berkas dari BERKAS"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr "-T baca nama berakhiran null"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr "Isi berkas dengan POLA yang diberikan. POLA adalah 'baku' atau 'nol'"
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "Ukuran dari sebuah blok untuk berkas sparse"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr "Buat berkas sparse. Sisa dari baris perintah memberikan peta berkas."
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr "OFSET"
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr "Cari ke ofset yang diberikan sebelum menulis data"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
-msgstr "Opsi statistik berkas:"
+msgstr "Pilihan statistik berkas:"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 "Tampilkan isi dari statistik struk untuk setiap berkas yang diberikan. "
 "FORMAT baku adalah: "
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
-msgstr "opsi eksekusi synchronous:"
+msgstr "pilihan eksekusi synchronous:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+msgid "OPTION"
+msgstr "PILIHAN"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
-"Jalankan PERINTAH yang diberikan. Berguna dengan --checkpoint dan satu dari "
-"--cut, --append, --touch"
+"Jalankan ARG. Berguna dengan --checkpoint dan satu dari --cut, --append, --"
+"touch, --unlink"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 "Lakukan aksi yang diberikan (lihat dibawah) ketika mencapai titik "
 "pemeriksaan NOMOR"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
-msgstr "Set tanggal untuk opsi --touch selanjutnya"
+msgstr "Set tanggal untuk pilihan --touch selanjutnya"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 "Tampilkan titik pemeriksaan yang dijalankan dan status keluar dari PERINTAH"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
 "Aksi eksekusi synchronous. Ini dijalankan ketika titik pemeriksaan nomor "
-"yang diberikan oleh opsi --checkpoint dicapai."
+"yang diberikan oleh pilihan --checkpoint dicapai."
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
-"Potong BERKAS ke ukuran yang dispesifikasikan oleh opsi --length sebelumnya "
-"(atau 0, jika ini tidak diberikan)"
+"Potong BERKAS ke ukuran yang dispesifikasikan oleh pilihan --length "
+"sebelumnya (atau 0, jika ini tidak diberikan)"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
-"Tambahkan UKURAN bytes ke BERKAS. UKURAN yang diberikan oleh opsi --length "
-"sebelumnya."
+"Tambahkan UKURAN bytes ke BERKAS. UKURAN yang diberikan oleh pilihan --"
+"length sebelumnya."
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "Update waktu akses dan modifikasi dari BERKAS"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "Jalankan PERINTAH"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr "Putus BERKAS"
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "Ukuran: %s tidak valid"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Jumlah diluar dari jangkauan yang diijinkan: %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr "Ukuran negatif: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "stat(%s) gagal"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr "panjang berkas yang diminta %lu, sebenernya %lu"
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr "pembuatan berkas tidak sparse"
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "Error parsing nomor didekat `%s'"
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "Format tanggal tidak diketahui"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[ARG...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "tidak dapat membuka `%s'"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 msgid "cannot seek"
 msgstr "Tidak dapat mencari"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "nama berkas berisi karakter null"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
-"tidak dapat menghasilkan berkas sparse di standar keluaran, gunakan opsi --"
-"file"
+"tidak dapat menghasilkan berkas sparse di standar keluaran, gunakan pilihan "
+"--file"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "mask tidak benar (didekat `%s')"
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr "Field `%s' tidak diketahui"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "tidak dapat menset waktu di `%s'"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, c-format
+msgid "cannot unlink `%s'"
+msgstr "tidak dapat memutus `%s'"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "Perintah keluar secara sukses\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "Perintah gagal dengan status %d\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "Perintah berakhir di sinyal %d\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "Perintah berhenti di sinyal %d\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "Perintah memberika core dump\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "Perintah berakhir\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "--stat membutuhkan nama berkas"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "terlalu banyak argumen"
+#~ msgid "Cannot resolve hostname %s"
+#~ msgstr "Tidak dapat menemukan alamat dari nama host %s"
+
+#~ msgid "suppress this warning."
+#~ msgstr "menekan peringatan ini."
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: pilihan -- %c tidak legal\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Laporkan bug ke <%s>.\n"
+
+#~ msgid "Input string too long"
+#~ msgstr "Masukan string terlalu panjang"
+
+#~ msgid "Number syntax error"
+#~ msgstr "Sintaks jumlah error"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Tidak dapat mengalokasi buffer space\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Tidak dapat mengalokasi buffer space"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Coba `%s --help' untuk informasi lebih lanjut.\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Penggunaan: %s [PILIHAN]\n"
+#~ "Manipulasi sebuah tape drive, menerima perintah dari proses remote.\n"
+#~ "\n"
+#~ "  --version  Tampilkan informasi versi.\n"
+#~ "  --help     Tampilkan bantuan ini.\n"
+
+#~ msgid "Seek offset error"
+#~ msgstr "Offset pencarian error"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Akhir dari berkas prematur"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Membaca %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Error tidak dapat diperbaiki: keluar sekarang"
+
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "saring archive melalui bzip2"
+
+#~ msgid "filter the archive through gzip"
+#~ msgstr "saring archive melalui gzip"
+
+#~ msgid "filter the archive through compress"
+#~ msgstr "saring archive melalui compress"
+
+#~ msgid "filter the archive through lzma"
+#~ msgstr "saring archive melalui lzma"
+
+#~ msgid "filter the archive through lzop"
+#~ msgstr "saring archive melalui lzop"
 
 #~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
 #~ msgstr ""
@@ -2706,9 +2836,6 @@ msgstr "terlalu banyak argumen"
 #~ msgid "Visible long name error"
 #~ msgstr "Kesalahan visible long file name"
 
-#~ msgid "Time stamp out of range"
-#~ msgstr "Time stamp di luar batasan"
-
 #~ msgid "Device number out of range"
 #~ msgstr "Nomor device di luar batasan"
 
@@ -2759,7 +2886,7 @@ msgstr "terlalu banyak argumen"
 #~ "for the equivalent short option also.  Similarly for optional arguments.\n"
 #~ msgstr ""
 #~ "\n"
-#~ "Bila long option menunjukkan argumen sebagai mandatory, maka opsi "
+#~ "Bila long option menunjukkan argumen sebagai mandatory, maka pilihan "
 #~ "tersebut\n"
 #~ "adalah mandatory juga untuk short option. Hal yang sama berlaku untuk\n"
 #~ "optional argumen.\n"
@@ -3098,28 +3225,28 @@ msgstr "terlalu banyak argumen"
 #~ "Default `tar' *ini* adalah `-f%s -b%d'.\n"
 
 #~ msgid "Obsolete option, now implied by --blocking-factor"
-#~ msgstr "Opsi tidak berlaku lagi, gunakan --blocking-factor"
+#~ msgstr "Pilihan tidak berlaku lagi, gunakan --blocking-factor"
 
 #~ msgid "Obsolete option name replaced by --blocking-factor"
-#~ msgstr "Opsi tidak berlaku lagi, digantikan oleh --blocking-factor"
+#~ msgstr "Pilihan tidak berlaku lagi, digantikan oleh --blocking-factor"
 
 #~ msgid "Obsolete option name replaced by --read-full-records"
-#~ msgstr "Opsi tidak berlaku lagi, digantikan oleh --read-full-records"
+#~ msgstr "Pilihan tidak berlaku lagi, digantikan oleh --read-full-records"
 
 #~ msgid "Obsolete option name replaced by --touch"
-#~ msgstr "Opsi tidak berlaku lagi, digantikan oleh --touch"
+#~ msgstr "Pilihan tidak berlaku lagi, digantikan oleh --touch"
 
 #~ msgid "Obsolete option name replaced by --absolute-names"
-#~ msgstr "Opsi tidak berlaku lagi, digantikan oleh --absolute-names"
+#~ msgstr "Pilihan tidak berlaku lagi, digantikan oleh --absolute-names"
 
 #~ msgid "Obsolete option name replaced by --block-number"
-#~ msgstr "Opsi tidak berlaku lagi, digantikan oleh --block-number"
+#~ msgstr "Pilihan tidak berlaku lagi, digantikan oleh --block-number"
 
 #~ msgid "Warning: the -y option is not supported; perhaps you meant -j?"
 #~ msgstr "Peringatan: option -y tidak didukung; mungkin maksud anda -j?"
 
 #~ msgid "Obsolete option name replaced by --backup"
-#~ msgstr "Opsi tidak berlaku lagi, digantikan oleh --backup"
+#~ msgstr "Pilihan tidak berlaku lagi, digantikan oleh --backup"
 
 #~ msgid "Written by John Gilmore and Jay Fenlason."
 #~ msgstr "Ditulis oleh John Gilmore dan Jay Fenlason."
@@ -3133,7 +3260,7 @@ msgstr "terlalu banyak argumen"
 #~ "      --help                 display this help and exit\n"
 #~ "      --version              output version information and exit\n"
 #~ msgstr ""
-#~ "Bila long option menunjukkan argumen sebagai mandatory, maka opsi "
+#~ "Bila long option menunjukkan argumen sebagai mandatory, maka pilihan "
 #~ "tersebut\n"
 #~ "adalah mandatory juga untuk short option. \n"
 #~ "\n"
index 23c51279ed14c0e1924697e001cf9f3030450484..e5c718e8033753b33c3522af5d99b3dbe44160f8 100644 (file)
Binary files a/po/it.gmo and b/po/it.gmo differ
index ed8574203ce521869fc2b53901c427054fbd223c..974ca729ffd1dc696a530123ba9f498da4aae4bf 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -8,10 +8,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: tar 1.21\n"
+"Project-Id-Version: tar 1.22\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
-"PO-Revision-Date: 2009-01-15 21:46+0100\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
+"PO-Revision-Date: 2009-04-05 21:45+0200\n"
 "Last-Translator: Milo Casagrande <milo@casagrande.name>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
 "MIME-Version: 1.0\n"
@@ -19,47 +19,47 @@ msgstr ""
 "Content-Transfer-Encoding: 8-bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "argomento %s non valido per %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "argomento %s ambiguo per %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Gli argomenti validi sono:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: il valore %s è minore o uguale a %s"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: il parametro ARGP_HELP_FMT richiede un valore"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: il parametro ARGP_HELP_FMT deve essere positivo"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: parametro ARGP_HELP_FMT sconosciuto"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Spazzatura in ARGP_HELP_FMT: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -67,237 +67,143 @@ msgstr ""
 "Gli argomenti obbligatori o facoltativi per le opzioni estese lo sono anche "
 "per le corrispondenti opzioni brevi."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Uso:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr "  o: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [OPZIONE...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Usare \"%s --help\" o \"%s --usage\" per ulteriori informazioni.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "Segnalare i bug a %s.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Errore di sistema sconosciuto"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "Mostra questo aiuto"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "Mostra un breve messaggio sull'uso"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "NOME"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "Imposta il nome del programma"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "SEC"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "Resta in attesa per SEC secondi (predefinito 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "Stampa la versione del programma"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(ERRORE DEL PROGRAMMA) Nessuna versione conosciuta."
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: troppi argomenti\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr "(ERRORE DEL PROGRAMMA) L'opzione dovrebbe essere stata riconosciuta."
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr "Errore di scrittura"
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: l'opzione \"%s\" è ambigua\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: l'opzione \"--%s\" non accetta un argomento\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: l'opzione \"%c%s\" non accetta un argomento\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: l'opzione \"%s\" richiede un argomento\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: opzione \"--%s\" non riconosciuta\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: opzione \"%c%s\" non riconosciuta\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: opzione non lecita -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: opzione non valida -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: l'opzione richiede un argomento -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: l'opzione \"-W %s\" è ambigua\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: l'opzione \"-W %s\" non accetta un argomento\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "memoria esaurita"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, c-format
 msgid "unable to record current working directory"
 msgstr "Impossibile registrare la directory di lavoro corrente"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, c-format
 msgid "failed to return to initial working directory"
 msgstr "Impossibile ritornare alla directory di lavoro iniziale"
 
-# (ndt) metto tra virgolette visto che è
-# il nome di una funzione non traducibile
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: funzione \"%s\" non riuscita"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: attenzione: funzione \"%s\" non riuscita"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: impossibile cambiare il modo a %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: impossibile cambiare il proprietario all'UID %lu e al GID %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: impossibile creare un collegamento fisico a %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: errore di lettura al byte %s leggendo %lu byte"
-msgstr[1] "%s: errore di lettura al byte %s leggendo %lu byte"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: attenzione: errore di lettura al byte %s leggendo %lu byte"
-msgstr[1] "%s: attenzione: errore di lettura al byte %s leggendo %lu byte"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: impossibile fare seek a %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: attenzione: impossibile fare seek a %s"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: impossibile creare un collegamento simbolico a %s"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: scritto solo %lu byte su %lu"
-msgstr[1] "%s: scritti solo %lu byte su %lu"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Rimozione di \"%s\" iniziale dai nomi dei membri"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Rimozione di \"%s\" iniziale dagli obiettivi dei collegamenti fisici"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Sostituzione di \".\" al nome vuoto di un membro"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Sostituzione di \".\" all'obiettivo vuoto di un collegamento fisico"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -311,17 +217,17 @@ msgstr "Sostituzione di \".\" all'obiettivo vuoto di un collegamento fisico"
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "\""
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "\""
 
@@ -331,7 +237,7 @@ msgstr "\""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[sSyY].*"
 
@@ -341,39 +247,28 @@ msgstr "^[sSyY].*"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[nN].*"
 
-#: lib/rtapelib.c:299
+#: gnu/version-etc.c:76
 #, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: servizio non disponibile"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "stdin"
-
-#: lib/rtapelib.c:306
-#, c-format
-msgid "stdout"
-msgstr "stdout"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Impossibile eseguire la shell remota"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr "©"
 
-#: lib/version-etc.c:67
-#, fuzzy
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -391,19 +286,19 @@ msgstr ""
 "\n"
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr "Scritto da %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Scritto da %s e %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Scritto da %s, %s e %s.\n"
@@ -411,7 +306,7 @@ msgstr "Scritto da %s, %s e %s.\n"
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -423,7 +318,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -435,7 +330,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -447,7 +342,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -459,7 +354,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -473,7 +368,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -487,7 +382,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -502,183 +397,334 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
-#, c-format
+#: gnu/version-etc.c:247
+#, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
+msgstr "Segnalare i bug a %s.\n"
+
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
 "\n"
 "Segnalare i bug a <%s>.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
-msgstr ""
+#: gnu/version-etc.c:255
+#, fuzzy, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+msgstr "Sito web di %s: <http://www.gnu.org/software/%s/>.\n"
+
+#: gnu/version-etc.c:258
+#, fuzzy
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+msgstr "Aiuto per l'utilizzo di software GNU: <http://www.gnu.org/gethelp/>.\n"
+
+# (ndt) metto tra virgolette visto che è
+# il nome di una funzione non traducibile
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: funzione \"%s\" non riuscita"
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "Stringa di input troppo lunga"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: attenzione: funzione \"%s\" non riuscita"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "Errore nella sintassi del numero"
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: impossibile cambiare il modo a %s"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: impossibile allocare spazio per il buffer\n"
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: impossibile cambiare il proprietario all'UID %lu e al GID %lu"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Impossibile allocare spazio per il buffer"
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: impossibile creare un collegamento fisico a %s"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:179 lib/paxerror.c:211
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Usare \"%s --help\" per ulteriori informazioni.\n"
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: errore di lettura al byte %s leggendo %lu byte"
+msgstr[1] "%s: errore di lettura al byte %s leggendo %lu byte"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:192
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: attenzione: errore di lettura al byte %s leggendo %lu byte"
+msgstr[1] "%s: attenzione: errore di lettura al byte %s leggendo %lu byte"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: impossibile fare seek a %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: attenzione: impossibile fare seek a %s"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: impossibile creare un collegamento simbolico a %s"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: scritto solo %lu byte su %lu"
+msgstr[1] "%s: scritti solo %lu byte su %lu"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Rimozione di \"%s\" iniziale dai nomi dei membri"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Rimozione di \"%s\" iniziale dagli obiettivi dei collegamenti fisici"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Sostituzione di \".\" al nome vuoto di un membro"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Sostituzione di \".\" all'obiettivo vuoto di un collegamento fisico"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: servizio non disponibile"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "stdin"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "stdout"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Uso: %s [OPZIONE]\n"
-"Manipola un'unità a nastro accettando comandi da un processo remoto.\n"
-"\n"
-"  --version  Mostra le informazioni sulla versione.\n"
-"  --help     Mostra questo aiuto.\n"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "Errore offset di seek"
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Impossibile eseguire la shell remota"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Direzione di seek fuori dell'intervallo"
+
+#: rmt/rmt.c:419
+#, fuzzy
+msgid "Invalid seek direction"
+msgstr "Modo fornito sull'opzione non valido"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Dimensione non valida: %s"
+
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Offset di seek fuori dell'intervallo"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Direzione di seek fuori dell'intervallo"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Lunghezza del nastro non valida"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Offset di seek fuori dell'intervallo"
+
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
+msgstr "rmtd: EOF prematuro\n"
+
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "Modi operativi principali:"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "EOF inatteso nell'archivio"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "NUMERO"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "FILE"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
-msgstr "rmtd: EOF prematuro\n"
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "impossibile aprire \"%s\""
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Prematura fine del file"
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "troppi argomenti"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Comando spazzatura"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Questo non sembra un archivio tar"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Byte totali scritti"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "Byte totali letti"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Byte totali eliminati: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(pipe)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Valore di record_size non valido"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Non è stato indicato il nome di un archivio"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Impossibile verificare archivi su stdin/stdout"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "L'archivio è compresso. Usare l'opzione %s."
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Impossibile aggiornare archivi compressi"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "All'inizio del nastro, uscita immediata"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Troppi errori, uscita"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Dimensioni del record = %lu blocco"
 msgstr[1] "Dimensioni del record = %lu blocchi"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Blocco non allineato nell'archivio (%lu byte)"
 msgstr[1] "Blocco non allineato nell'archivio (%lu byte)"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr ""
 "Impossibile muoversi all'indietro nel file dell'archivio; potrebbe non "
 "essere\n"
 "leggibile senza l'opzione -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek non si è fermata al limite di un record"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: contiene un numero di volume non valido"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Overflow del numero di volume"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Preparare il volume #%d per %s e premere Invio: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "Ricevuto EOF quando era attesa la risposta dell'utente"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "Attenzione: l'archivio non è completo"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -690,67 +736,67 @@ msgstr ""
 " q             Termina tar\n"
 " y o Invio     Continua l'operazione\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !             Esegue una subshell\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?             Stampa questo elenco\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Nessun nuovo volume; uscita.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "Nome file non specificato. Riprovare.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "Input non valido. Premere ? per l'aiuto.\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "comando \"%s\" non riuscito"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr ""
 "%s potrebbe continuare su questo volume: l'intestazione contiene un nome "
 "troncato"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s non continua su questo volume"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s è la dimensione sbagliata (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Questo volume è fuori sequenza (%s - %s != %s)"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "L'archivio non ha un'etichetta corrispondente a %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Il volume %s non corrisponde a %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
@@ -758,60 +804,60 @@ msgstr ""
 "%s: il nome del file è troppo lungo per essere scritto in un'intestazione "
 "GNU multi-volume, troncato"
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
 msgstr "write non si è fermata al limite di un record"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "È stato possibile leggere solo %lu byte di %lu"
 msgstr[1] "È stato possibile leggere solo %lu byte di %lu"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "I contenuti sono differenti"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "EOF inatteso nell'archivio"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "I tipi dei file sono diversi"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "I modi sono diversi"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Gli UID sono diversi"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "I GID sono diversi"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Gli orari di modifica sono diversi"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Le dimensioni sono diverse"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Non è collegato a %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "I collegamenti simbolici sono diversi"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "I numeri dei device sono diversi"
 
@@ -833,34 +879,34 @@ msgstr "L'archivio contiene nomi di file con i prefissi iniziali rimossi."
 msgid "Verification may fail to locate original files."
 msgstr "La verifica potrebbe non riuscire a trovare i file originali."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "Errore di verifica: trovata %d intestazione non valida"
 msgstr[1] "Errore di verifica: trovate %d intestazioni non valide"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "Un singolo blocco di zeri a %s"
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: contiene un'etichetta di directory cache %s; %s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "valore %s fuori dall'intervallo (%s) %s..%s; sostituzione con %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "valore %s fuori dall'intervallo (%s) %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Generazione delle intestazioni ottali negative"
 
@@ -880,119 +926,109 @@ msgstr ""
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: il nome del collegamento è troppo lungo; non archiviato"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: file ristretto di %s byte; riempito con zeri"
 msgstr[1] "%s: file ristretto di %s byte; riempito con zeri"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: il file si trova su un altro file system; non archiviato"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr "contenuti non archiviati"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: tipo di file sconosciuto; file ignorato"
 
-#: src/create.c:1464
-#, c-format
-msgid "Missing links to %s.\n"
+#: src/create.c:1472
+#, fuzzy, c-format
+msgid "Missing links to %s."
 msgstr "Collegamenti mancanti a %s.\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: il file non è modificato; non archiviato"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: il file è l'archivio; non archiviato"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: file rimosso prima di poterlo leggere"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr "directory non archiviata"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: file modificato mentre era in lettura"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: socket ignorato"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: door ignorata"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Passaggio alla prossima intestazione"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Eliminazione non-intestazione dall'archivio"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: orario %s inverosimilmente vecchio"
 
 # (ndt) problema del plurale...
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: l'orario %s è %s secondi nel futuro"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: incoerenza inaspettata nel creare la directory"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: directory rinominata prima di poterne estrarre lo stato"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Estrazione file contigui come file normali"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr ""
 "Tentativo di estrazione dei collegamenti simbolici come collegamenti fisici"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Lettura di %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: impossibile estrarre -- il file continua da un altro volume"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "Intestazione di nome lungo inattesa"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: tipo di file \"%c\" sconosciuto, estratto come file normale"
@@ -1004,175 +1040,171 @@ msgstr "%s: tipo di file \"%c\" sconosciuto, estratto come file normale"
 #               quote (file_name)));
 #        return 0;
 #      }
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "Il file %s corrente è più recente o ha la stessa data"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: impossibile eseguire il backup di questo file"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "Impossibile rinominare %s in %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Errore irrimediabile: uscita immediata"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: directory rinominata da %s"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: directory rinominata"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: la directory è nuova"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Orario non valido"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Orario di modifica non valido (secondi)"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "Orario di modifica non valido (nanosecondi)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Numero di device non valido"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Numero dell'inode non valido"
 
 # (ndt) oppure rendere snapshot come istantanea?
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "Campo troppo lungo nel leggere il file di snapshot"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "Errore di lettura nel file di snapshot"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "EOF inatteso nel file di snapshot"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "Valore del campo inatteso nel file di snapshot"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "Record finale mancante"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "Formato file incrementale errato"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr "Versione formato incrementale non supportata: %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr "dumpdir malformata: atteso \"%c\", ma trovato %#3o"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "dumpdir malformata: \"X\" duplicata"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "dumpdir malformata: nessun nome in \"R\""
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "dumpdir malformata: \"T\" non preceduta da \"R\""
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "dumpdir malformata: nessun nome in \"T\""
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr "dumpdir malformata: atteso \"%c\", ma trovata la fine dei dati"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr "dumpdir malformata: \"X\" mai usata"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Impossibile creare la directory temporanea usando il modello %s"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: eliminazione directory non eseguita: impossibile fare stat"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: la directory si trova su un altro device: non eliminata"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: eliminazione di %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: impossibile rimuoverlo"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: omesso"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "blocco %s: ** Blocco di NUL **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "blocco %s: ** Fine del file **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "blocco %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Trovati spazi nell'intestazione dove era atteso il valore numerico %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1180,143 +1212,162 @@ msgstr ""
 "che sia in complemento a due"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Il valore ottale %.*s dell'archivio è fuori dall'intervallo %s"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "L'archivio contiene intestazioni base-64 obsolete"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr ""
 "La stringa base-64 con segno %s dell'archivio è fuori dall'intervallo %s"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Il valore base-256 dell'archivio è fuori dall'intervallo %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "L'archivio contiene %.*s dove era atteso il valore numerico %s"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Il valore %s dell'archivio è fuori dall'intervallo (%s) %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " collegamento a %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " tipo di file sconosciuto %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Collegamento lungo--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Nome lungo--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Intestazione del volume--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Continua al byte %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Creazione directory:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Rinomina di %s in %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: impossibile rinominarlo in %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Rinomina di %s nuovamente in %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Impossibile salvare la directory di lavoro"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Impossibile cambiare la directory di lavoro"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: file rimosso prima di poterlo leggere"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: file rimosso prima di poterlo leggere"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "il processo figlio"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "il canale tra processi"
 
 # (ndt) pattern matching... trovare di meglio...
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr "Usati caratteri di corrispondenza nei nomi dei file. Usare "
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr "--wildcards per abilitare la corrispondenza o --no-wildcards "
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "per disattivare questo avviso."
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: non trovato nell'archivio"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: occorrenza richiesta non trovata nell'archivio"
 
-#: src/tar.c:79
+#: src/names.c:894
+#, fuzzy
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr "--preserve-order non è compatibile con --listed-incremental"
+
+#: src/names.c:900
+#, fuzzy
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr "--preserve-order non è compatibile con --listed-incremental"
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Le opzioni \"-%s\" e \"-%s\" richiedono entrambe lo standard input"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: formato dell'archivio non valido"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "Richieste funzionalità GNU su un formato di archivio incompatibile"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
@@ -1324,7 +1375,7 @@ msgstr ""
 "Stile di citazione \"%s\" non conosciuto. Provare \"%s --quoting-style=help"
 "\" per visualizzarne un elenco."
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1344,7 +1395,7 @@ msgstr ""
 "tar.\n"
 "  tar -xf archivio.tar         # Estrae tutti i file da archivio.tar.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1367,87 +1418,80 @@ msgstr ""
 "  nil, existing   Numerati se esistono backup numerati, altrimenti semplici\n"
 "  never, simple   Esegue sempre backup semplici\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Modi operativi principali:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "Elenca i contenuti dell'archivio"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "Estrae file da un archivio"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "Crea un nuovo archivio"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "Trova differenze tra l'archivio e il file system"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "Accoda i file alla fine di un archivio"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "Accoda solo i file più recenti della copia nell'archivio"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "Aggiunge il contenuto di un altro archivio"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "Elimina dall'archivio (non su nastri magnetici)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr "Verifica l'etichetta di volume dell'archivio ed esce"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Modificatori delle operazioni:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "Gestisce efficientemente i file sparsi"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr "MAJOR[.MINOR]"
 
 # (ndt) hmmm... formato sparso...
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr "Imposta la versione da usare per il formato sparso (implica --sparse)"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "gestisce i vecchi backup incrementali GNU"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "FILE"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "Gestisce il nuovo formato di backup incrementali GNU"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr ""
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "Non esce con non-zero quando ci sono file non leggibili"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "NUMERO"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1460,119 +1504,123 @@ msgstr ""
 "sulla riga di comando o attraverso l'opzione -T; il valore predefinito di "
 "NUMERO è 1"
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "L'archivio è posizionabile"
 
-#: src/tar.c:418
+#: src/tar.c:436
+#, fuzzy
+msgid "archive is not seekable"
+msgstr "L'archivio è posizionabile"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr "Non controlla i numeri del device quando crea archivi incrementali"
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 "Controlla i numeri del device quando crea archivi incrementali (predefinito)"
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "Controlli di sovrascrittura:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "Tenta di verificare l'archivio dopo averlo scritto"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "Rimuove i file dopo averli aggiunti all'archivio"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "Durante l'estrazione non sovrascrive i file esistenti"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr "Non sostituisce i file esistenti più recenti delle copie nell'archivio"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "Sovrascrive i file esistenti durante l'estrazione"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "Rimuove ogni file prima di estrarre su di esso"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "Svuota le directory prima di estrarle"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "Preserva i metadati delle directory esistenti"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 "Sovrascrive i metadati delle directory esistenti durante l'estrazione "
 "(predefinito)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Selezione stream di output:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "Estrae i file sullo standard output"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "COMANDO"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "Invia in pipe i file estratti a un altro programma"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "Ignora il codice di uscita dei figli"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr "Considera i codici di uscita non-zero come un errore"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Gestione degli attributi dei file:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "Forza NOME come proprietario per i file aggiunti"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "Forza NOME come gruppo per i file aggiunti"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "DATA-O-FILE"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "Imposta mtime per i file aggiunti da DATA-O-FILE"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "CAMBI"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "Forza il modo CAMBI (simbolico) per i file aggiunti"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "METODO"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1582,29 +1630,33 @@ msgstr ""
 "dopo la lettura (METODO=\"replace\"; predefinito) o impostando l'orario "
 "all'inizio (METODO=\"system\")"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "Non estrae l'orario di ultima modifica del file"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+#, fuzzy
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr "Cerca di estrarre i file con lo stesso proprietario"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+#, fuzzy
+msgid "extract files as yourself (default for ordinary users)"
 msgstr "Estrae i file come l'utente attuale"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "Usa sempre i numeri per i nomi di utente/gruppo"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 "Estrae informazioni riguardo i permessi dei file (predefinito per il super-"
 "utente)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
@@ -1612,15 +1664,15 @@ msgstr ""
 "Applica la umask dell'utente nell'estrarre i permessi dall'archivio "
 "(predefinito per gli utenti normali)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "Ordina i nomi da estrarre come nell'archivio"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "Come -p e -s assieme"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
@@ -1628,139 +1680,139 @@ msgstr ""
 "Ritarda l'impostazione dei tempi di modifica e dei permessi delle directory "
 "estratte al termine dell'estrazione"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "Annulla l'effetto dell'opzione --delay-directory-restore"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "Selezione e cambio del device:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "ARCHIVIO"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "Usa come archivio il file o il dispositivo ARCHIVIO"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "L'archivio è locale anche se contiene \":\""
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "Usa il COMANDO rmt indicato invece di rmt"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "Usa il COMANDO remoto invece di rsh"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "Indica drive e densità"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "Crea, elenca, estrae archivi multi-volume"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "Cambia il nastro dopo avere scritto NUMERO × 1024 byte"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "Esegue lo script alla fine di ogni nastro (implica -M)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "Usa/aggiorna il numero del volume nel FILE"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Blocchi del device:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "BLOCCHI"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "Usa record di BLOCCHI × 512 byte"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "NUMERO di byte per record, multiplo di 512"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "Ignora i blocchi a zero nell'archivio (significa EOF)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "Rifà i blocchi durante la lettura (per le pipe di 4.2BSD)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Selezione formato di archiviazione:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "FORMATO"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "Crea archivi nel formato indicato"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "FORMATO è uno dei seguenti:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "Vecchio formato di tar V7"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "Formato GNU di tar <= 1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "Formato GNU di tar 1.13.x"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "Formato POSIX 1003.1-1988 (ustar)"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "Formato POSIX 1003.1-2001 (pax)"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "Come pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "Come --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "Come --format=posix"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "PAROLA_CHIAVE[[:]=VALORE][,PAROLA_CHIAVE[[:]=VALORE], ...]"
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "Controlla le parole chiavi di pax"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "TESTO"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
@@ -1768,105 +1820,79 @@ msgstr ""
 "Crea l'archivio con TESTO come nome di volume; durante l'elencazione o "
 "l'estrazione, usa TESTO come modello di glob per ogni volume"
 
-#: src/tar.c:593
+#: src/tar.c:613
 msgid "Compression options:"
 msgstr "Opzioni di compressione:"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr ""
 "Usa il suffisso dell'archivio per determinare il programma di compressione"
 
-#: src/tar.c:597
-#, fuzzy
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr ""
 "Non usa il suffisso dell'archivio per determinare il programma di "
 "compressione"
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "Filtra l'archivio attraverso bzip2"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "Filtra l'archivio attraverso gzip"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "Filtra l'archivio attraverso compress"
-
-#: src/tar.c:609
-msgid "filter the archive through lzma"
-msgstr "Filtra l'archivio attraverso lzma"
-
-#: src/tar.c:611
-msgid "filter the archive through lzop"
-msgstr "Filtra l'archivio attraverso lzop"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "Filtra l'archivio attraverso gzip"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "PROG"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "Filtra attraverso PROG (deve accettare -d)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Selezione dei file locali:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr "Aggiunge FILE all'archivio (utile se il nome inizia con un trattino)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "DIR"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "Passa alla directory DIR"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "Prende i nomi da estrarre o creare dal file FILE"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T legge nomi terminati da NULL, disabilita -C"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr "Disabilita l'effetto dell'opzione --null precedente"
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 "Toglie i caratteri di citazione dai nomi dei file letti con -T (predefinito)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr "Non toglie i caratteri di citazione dai nomi dei file letti con -T"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "MODELLO"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "Esclude i file i cui nomi corrispondono a MODELLO"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "Esclude i modelli elencati in FILE"
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
@@ -1874,93 +1900,97 @@ msgstr ""
 "Esclude i contenuti delle directory contenenti CACHEDIR.TAG, a parte il "
 "file .TAG stesso"
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "Esclude tutto quanto all'interno di directory contenenti CACHEDIR.TAG"
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "Esclude le directory contenenti CACHEDIR.TAG"
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 "Esclude i contenuti delle directory contenenti FILE, a parte FILE stesso "
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr "Esclude tutto quanto all'interno di directory contenenti FILE"
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr "Esclude le directory contenenti FILE"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr "Esclude le directory dei sistemi di controllo della versione"
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "Non entra automaticamente nelle directory"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "Resta nel file system locale durante la creazione dell'archivio"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "Entra ricorsivamente nelle directory (predefinito)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "Non rimuove le \"/\" iniziali dai nomi dei file"
 
 # (ndt) hmmm... non molto chiara...
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 "Segue i collegamenti simbolici; archivia ed esegue il dump dei file a cui "
 "puntano"
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 "Segue i collegamenti fisici; archivia ed esegue il dump dei file a cui si "
 "riferiscono"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "NOME"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "Inizia dal membro NOME nell'archivio"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "Archivia solo i file più recenti di DATA-O-FILE"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "DATA"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "Confronta data e ora solo quando il contenuto è cambiato"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "CONTROLLO"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "Esegue un backup prima di rimuovere, usando il CONTROLLO di versione"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "STRINGA"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1968,94 +1998,103 @@ msgstr ""
 "Esegue un backup prima di rimuovere, sovrascrivendo il suffisso \"~\" a meno "
 "che non sia sovrascritto dalla variabile d'ambiente SIMPLE_BACKUP_SUFFIX"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr "Trasformazioni dei nomi di file:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr ""
 "Toglie NUMERO componenti iniziali dai nomi dei file durante l'estrazione"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "ESPRESSIONE"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 "Usa un'ESPRESSIONE di sostituzione di sed per trasformare i nomi dei file"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 "Opzioni di corrispondenza del nome del file (vale sia per i modelli di "
 "esclusione che inclusione):"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr "Non fa differenza tra maiuscole e minuscole"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr "I modelli corrispondono all'inizio del nome del file"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr ""
 "I modelli corrispondono dopo ogni \"/\" (predefinito per le esclusioni)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr "Considera diverse le maiuscole e le minuscole (predefinito)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr "Utilizza i metacaratteri (predefinito per le esclusioni)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "Corrispondenza letterale della stringa"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr "I metacaratteri non corrispondono \"/\""
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr "I metacaratteri corrispondono \"/\" (predefinito per le esclusioni)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Output informativo:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "Elenca prolissamente i file elaborati"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+#, fuzzy
+msgid "warning control"
+msgstr "Controlli di sovrascrittura:"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 "Visualizza un messaggio di avanzamento ogni NUMERO-esimo record (predefinito "
 "10)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr "AZIONE"
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr "Esegue l'azione a ogni punto di controllo"
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "Stampa un messaggio se non tutti i collegamenti sono archiviati"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "SEGNALE"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2067,27 +2106,27 @@ msgstr ""
 "sono: SIGHUP, SIGQUIT, SIGINT, SIGUSR1 e SIGUSR2; sono accettati anche i "
 "nomi senza il prefisso SIG"
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "Stampa le date di modifica dei file in formato UTC"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "Invia l'output prolisso al FILE"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "Mostra il numero di blocco nell'archivio con ogni messaggio"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "Chiede conferma per ogni azione"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "Mostra le impostazioni predefinite di tar"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
@@ -2095,33 +2134,33 @@ msgstr ""
 "All'elencazione o all'estrazione, elenca ogni directory che non corrisponde "
 "al criterio di ricerca"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr "Mostra il nome del file o dell'archivio dopo la trasformazione"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "STILE"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 "Imposta lo stile di citazione del nome; consultare più sotto per i valori di "
 "STILE consentiti"
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "Caratteri di citazione aggiuntivi da STRINGA"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "Disabilita la citazione per i caratteri dalla STRINGA"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Opzioni di compatibilità:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
@@ -2129,56 +2168,64 @@ msgstr ""
 "Alla creazione, uguale a --old-archive; all'estrazione, uguale a --no-same-"
 "owner"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Altre opzioni:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "Disabilita l'uso di alcune opzioni potenzialmente dannose"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Non è possibile indicare più di un'opzione \"-Acdtrux\""
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Conflitto tra le opzioni di compressione"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "Nome del segnale sconosciuto: %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "File campione della data non trovato"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Sostituzione di %s al posto del formato di data sconosciuto %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "Opzione %s: la data \"%s\" viene considerata come %s"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s: elenco file già letto"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s: il nome di file letto contiene un carattere NULL"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "Filtra l'archivio attraverso xz"
+
+#: src/tar.c:1290
+#, fuzzy
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr "Argomenti validi per le opzioni --quoting-style sono:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2186,48 +2233,53 @@ msgstr ""
 "\n"
 "Questo tar ha le seguenti impostazioni predefinite:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Fattore del blocco non valido"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Lunghezza del nastro non valida"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+#, fuzzy
+msgid "Invalid incremental level value"
+msgstr "Formato file incrementale errato"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Più di una data di soglia"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr "Valore versione sparsa non valido"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr "--atime-preserve=\"system\" non è supportato su questa piattaforma"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr "Il valore --checkpoint non è un intero"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: gruppo non valido"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Modo fornito sull'opzione non valido"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Numero non valido"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Proprietario non valido"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
@@ -2235,112 +2287,118 @@ msgstr ""
 "L'opzione --preserve è deprecata, usare --preserve-permissions --preserve-"
 "order"
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Dimensione del record non valida"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "La dimensione del record deve essere un multiplo di %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Numero di elementi non valido"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr "Consentita solo un'opzione --to-command"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "Argomento densità non corretto: \"%s\""
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "Densità sconosciuta: \"%c\""
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "Le opzioni \"-[0-7][lmh]\" non sono gestite da questo tar"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[FILE]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "La vecchia opzione \"%c\" richiede un argomento."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "--occurrence non ha senso senza un elenco di file"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "--occurrence non può essere usata nel modo di operazioni richiesto"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Archivi multipli richiedono l'opzione \"-M\""
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Impossibile combinare --listed-incremental e --newer"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+#, fuzzy
+msgid "--level is meaningless without --listed-incremental"
+msgstr "--preserve-order non è compatibile con --listed-incremental"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: l'etichetta di volume è troppo lunga (il limite è %lu byte)"
 msgstr[1] "%s: l'etichetta di volume è troppo lunga (il limite sono %lu byte)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Impossibile verificare archivi multi-volume"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Impossibile verificare archivi compressi"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Impossibile usare archivi multi-volume compressi"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "Impossibile concatenare archivi compressi"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "--pax-option può essere usata solo su archivi POSIX"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 "La lunghezza del volume non può essere minore della dimensione del record"
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr "--preserve-order non è compatibile con --listed-incremental"
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Rifiuto totale di creare un archivio vuoto"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Le opzioni \"-Aru\" sono incompatibili con \"-f -\""
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "È necessario specificare una delle opzioni \"-Acdtrux\""
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr "Uscita con stato di fallimento in base agli errori precedenti"
@@ -2352,52 +2410,57 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: il file si è ridotto di %s byte"
 msgstr[1] "%s: il file si è ridotto di %s byte"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "La parola chiave %s è sconosciuta o non ancora implementata"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Numero fuori dall'intervallo consentito: %s"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "Il modello %s non può essere usato"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "La parola chiave %s non può essere sostituita"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "Intestazione estesa malformata: manca la lunghezza"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr "La lunghezza intestazione estesa è fuori dall'intervallo consentito"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "La lunghezza dell'intestazione estesa %*s è fuori dall'intervallo"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr "Intestazione estesa malformata: manca lo spazio dopo la lunghezza"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Intestazione estesa malformata: manca il segno di uguale"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr "Intestazione estesa malformata: manca un newline"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr "Parola chiave sconosciuta \"%s\" dell'intestazione estesa ignorata"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
@@ -2406,28 +2469,28 @@ msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "L'intestazione estesa %s=%s è fuori dall'intervallo %s..%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Intestazione estesa malformata: %s=%s non valido"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Intestazione estesa malformata: %s=%s in eccesso"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 "Intestazione estesa malformata: %s non valido: delimitatore %c non atteso"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr ""
@@ -2469,7 +2532,7 @@ msgstr "Punto di controllo di scrittura %u"
 msgid "Read checkpoint %u"
 msgstr "Punto di controllo di lettura %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
@@ -2477,91 +2540,97 @@ msgstr ""
 "genfile manipola i file per la suite di test GNU paxutils.\n"
 "Le opzioni sono:\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr "Opzioni di creazione file:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "DIMENSIONE"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "Crea file della DIMENSIONE indicata"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "Scrive sul file NOME invece dello standard output"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "Legge i nomi dei file da FILE"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr "-T legge nomi terminati da NULL"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 "Riempie il file con il MODELLO fornito. MODELLO è \"default\" o \"zeros\""
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "Dimensione del blocco per il file sparso"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 "Genera file sparso. Il resto della riga di comando fornisce la mappa del "
 "file."
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr "OFFSET"
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr "Si posiziona all'OFFSET indicato prima di scrivere i dati"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr "Opzioni per le statistiche:"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 "Stampa i contenuti di struct stat per ogni file dato. Il FORMATO predefinito "
 "è:"
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr "Opzioni di esecuzione sincrona:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr " [OPZIONE...]"
+
+#: tests/genfile.c:165
+#, fuzzy
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 "Esegue il COMANDO dato. Utile con --checkpoint e uno tra --cut, --append, --"
 "touch"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 "Esegue l'azione indicata (consultare più sotto) al raggiungimento del punto "
 "di controllo NUMERO"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr "Imposta la data per l'opzione --touch successiva"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 "Visualizza i punti di controllo eseguiti e lo stato di uscita del COMANDO"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
@@ -2569,7 +2638,7 @@ msgstr ""
 "Azioni di esecuzione sincrona. Queste sono eseguite quando viene raggiunto "
 "il punto di controllo fornito dall'opzione --checkpoint."
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
@@ -2577,81 +2646,85 @@ msgstr ""
 "Tronca il FILE alla dimensione specificata dall'opzione --length precedente "
 "(0 se non viene fornita)"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 "Aggiunge DIMENSIONE byte al FILE. DIMENSIONE è fornita dall'opzione --length "
 "precedente."
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "Aggiorna l'orario di accesso e modifica del FILE"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "Esegue il COMANDO"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "Dimensione non valida: %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Numero fuori dall'intervallo consentito: %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr "Dimensione negativa: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "stat(%s) non riuscita"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr "lunghezza file richiesta %lu, effettiva %lu"
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr "il file creato non è sparso"
 
 # (ndt) ?
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "Errore nell'analizzare il numero vicino a \"%s\""
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "Formato data non conosciuto"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[ARGOMENTI...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "impossibile aprire \"%s\""
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 msgid "cannot seek"
 msgstr "impossibile eseguire seek"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "il nome del file contiene caratteri NULL"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
@@ -2659,60 +2732,128 @@ msgstr ""
 "file"
 
 # (ndt) ?
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "maschera non corretta (vicino a \"%s\")"
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr "Campo \"%s\" sconosciuto"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "impossibile impostare l'orario su \"%s\""
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "impossibile aprire \"%s\""
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "Comando eseguito con successo\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "Comando non riuscito con lo stato %d\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "Comando terminato al segnale %d\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "Comando fermato al segnale %d\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "Il comando ha fatto un dump del core\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "Comando terminato\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "--stat richiede i nomi dei file"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "troppi argomenti"
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: opzione non lecita -- %c\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Segnalare i bug a <%s>.\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Lettura di %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Errore irrimediabile: uscita immediata"
+
+#~ msgid "suppress this warning."
+#~ msgstr "per disattivare questo avviso."
+
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "Filtra l'archivio attraverso bzip2"
+
+#~ msgid "filter the archive through gzip"
+#~ msgstr "Filtra l'archivio attraverso gzip"
+
+#~ msgid "filter the archive through compress"
+#~ msgstr "Filtra l'archivio attraverso compress"
+
+#~ msgid "filter the archive through lzma"
+#~ msgstr "Filtra l'archivio attraverso lzma"
+
+#~ msgid "filter the archive through lzop"
+#~ msgstr "Filtra l'archivio attraverso lzop"
+
+#~ msgid "Input string too long"
+#~ msgstr "Stringa di input troppo lunga"
+
+#~ msgid "Number syntax error"
+#~ msgstr "Errore nella sintassi del numero"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: impossibile allocare spazio per il buffer\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Impossibile allocare spazio per il buffer"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Usare \"%s --help\" per ulteriori informazioni.\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Uso: %s [OPZIONE]\n"
+#~ "Manipola un'unità a nastro accettando comandi da un processo remoto.\n"
+#~ "\n"
+#~ "  --version  Mostra le informazioni sulla versione.\n"
+#~ "  --help     Mostra questo aiuto.\n"
+
+#~ msgid "Seek offset error"
+#~ msgstr "Errore offset di seek"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Prematura fine del file"
 
 #~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
 #~ msgstr ""
index c8220ce54ce16121175d03da98906ab5d59997fd..f4bb6409f3e3486969c1cc6d66173e48b119fd2c 100644 (file)
Binary files a/po/ja.gmo and b/po/ja.gmo differ
index f987c40a91a73bba1db6f06b04e13ede04445932..3fac5259e80de4bbec554d2c25c28422de0e1c72 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -1,17 +1,17 @@
-# Japanese messages for GNU tar 1.21
-# Copyright (C) 1999, 2000, 2001, 2004, 2006, 2007, 2008 Free Software Foundation, Inc.
+# Japanese messages for GNU tar 1.22.91
+# Copyright (C) 1999, 2000, 2001, 2004, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 # This file is distributed under the same license as the tar package.
-# Masahito Yamaga <ma@yama-ga.com>, 2008.
+# Masahito Yamaga <ma@yama-ga.com>, 2010.
 #  derived from the version by
 #              Daisuke Yamashita <yamad@mb.infoweb.ne.jp>, 1999-2001.
 #              Masahito Yamaga <yamaga@ipc.chiba-u.ac.jp>, 2007.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU tar 1.21\n"
+"Project-Id-Version: GNU tar 1.22.91\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
-"PO-Revision-Date: 2008-12-27 20:22+0900\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
+"PO-Revision-Date: 2010-02-13 10:46+0900\n"
 "Last-Translator: Masahito Yamaga <ma@yama-ga.com>\n"
 "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
 "MIME-Version: 1.0\n"
@@ -19,47 +19,47 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=0;\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "°ú¿ô %s ¤Ï %s ¤ËÂФ·¤Æ̵¸ú¤Ç¤¹"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "°ú¿ô %s ¤Ï %s ¤ËÂФ·¤Æ¤¢¤¤¤Þ¤¤¤Ç¤¹"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Àµ¤·¤¤°ú¿ô¤Ï:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: %s ÃͤϠ%s ¤è¤ê¾®¤µ¤¤¤«Åù¤·¤¤"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: ARGP_HELP_FMT ¥Ñ¥é¥á¡¼¥¿¤ÏÃͤ¬É¬Í×"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: ARGP_HELP_FMT ¥Ñ¥é¥á¡¼¥¿¤ÏÀµ¤ÎÃͤǤʤ±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: Ì¤ÃΤΠARGP_HELP_FMT ¥Ñ¥é¥á¡¼¥¿"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "ARGP_HELP_FMT ¤Ë¥´¥ß: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -67,235 +67,143 @@ msgstr ""
 "Ť¤¥ª¥×¥·¥ç¥ó¤ËÂФ¹¤ëɬ¿Ü¤Þ¤¿¤ÏǤ°Õ¤Î°ú¿ô¤ÏÂбþ¤¹¤ëû¤¤¥ª¥×¥·¥ç¥ó¤ËÂФ·¤Æ¤â"
 "ɬ¿Ü¤Þ¤¿¤ÏǤ°Õ¤Ç¤¹."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "»ÈÍÑË¡:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr "  ¤Þ¤¿¤Ï: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [¥ª¥×¥·¥ç¥ó...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "¤è¤ê¾Ü¤·¤¤¾ðÊó¤Ï `%s --help' ¤Þ¤¿¤Ï `%s --usage' ¤Ç.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "¥Ð¥°¥ì¥Ý¡¼¥È¤Ï %s ¤Þ¤Ç.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "ÉÔÌÀ¤Ê¥·¥¹¥Æ¥à¥¨¥é¡¼"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "¤³¤Î¥Ø¥ë¥×°ìÍ÷¤òɽ¼¨"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "û¤¤»ÈÍÑË¡¥á¥Ã¥»¡¼¥¸¤òɽ¼¨"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "NAME"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "¥×¥í¥°¥é¥à̾¤ò»ØÄê"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "SECS"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "SECS ÉÃÄä»ß (ɸ½à 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "¥×¥í¥°¥é¥à¥Ð¡¼¥¸¥ç¥ó¤òɽ¼¨"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(¥×¥í¥°¥é¥à¥¨¥é¡¼) ¥Ð¡¼¥¸¥ç¥óÉÔÌÀ!?"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: °ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr "(¥×¥í¥°¥é¥à¥¨¥é¡¼) ¥ª¥×¥·¥ç¥óǧ¼±ÉÔǽ!?"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr "½ñ¤­¹þ¤ß¥¨¥é¡¼"
 
-#: lib/getopt.c:526 lib/getopt.c:542
+#: gnu/getopt.c:531 gnu/getopt.c:547
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
-msgstr "%s: ¥ª¥×¥·¥ç¥ó `%s' ¤Ï¤¢¤¤¤Þ¤¤¤Ç¤¹\n"
+msgid "%s: option '%s' is ambiguous\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó '%s' ¤Ï¤¢¤¤¤Þ¤¤¤Ç¤¹\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
+#: gnu/getopt.c:580 gnu/getopt.c:584
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
-msgstr "%s: ¥ª¥×¥·¥ç¥ó `--%s' ¤Ë¤Ï°ú¿ô¤Ï¤¢¤ê¤Þ¤»¤ó\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó '--%s' ¤Ë°ú¿ô¤Ï¤¢¤ê¤Þ¤»¤ó\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
+#: gnu/getopt.c:593 gnu/getopt.c:598
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
-msgstr "%s: ¥ª¥×¥·¥ç¥ó `%c%s' ¤Ë¤Ï°ú¿ô¤Ï¤¢¤ê¤Þ¤»¤ó\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó '%c%s' ¤Ë°ú¿ô¤Ï¤¢¤ê¤Þ¤»¤ó\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
-msgstr "%s: ¥ª¥×¥·¥ç¥ó `%s' ¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹\n"
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó '%s' ¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
+#: gnu/getopt.c:698 gnu/getopt.c:701
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
-msgstr "%s: Ì¤ÃΤΥª¥×¥·¥ç¥ó `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: Ì¤ÃΤΥª¥×¥·¥ç¥ó '--%s'\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
+#: gnu/getopt.c:709 gnu/getopt.c:712
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
-msgstr "%s: Ì¤ÃΤΥª¥×¥·¥ç¥ó `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: Ì¤ÃΤΥª¥×¥·¥ç¥ó '%c%s'\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
+#: gnu/getopt.c:761 gnu/getopt.c:764
 #, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: ÉÔÀµ¤Ê¥ª¥×¥·¥ç¥ó -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: Ìµ¸ú¤Ê¥ª¥×¥·¥ç¥ó -- '%c'\n"
 
-#: lib/getopt.c:768 lib/getopt.c:771
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
 #, c-format
-msgid "%s: invalid option -- %c\n"
-msgstr "%s: Ìµ¸ú¤Ê¥ª¥×¥·¥ç¥ó -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹ -- '%c'\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
+#: gnu/getopt.c:884 gnu/getopt.c:900
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: ¥ª¥×¥·¥ç¥ó¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹ -- %c\n"
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó '-W %s' ¤Ï¤¢¤¤¤Þ¤¤¤Ç¤¹\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
+#: gnu/getopt.c:924 gnu/getopt.c:942
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
-msgstr "%s: ¥ª¥×¥·¥ç¥ó `-W %s' ¤Ï¤¢¤¤¤Þ¤¤¤Ç¤¹\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: ¥ª¥×¥·¥ç¥ó '-W %s' ¤Ë°ú¿ô¤Ï¤¢¤ê¤Þ¤»¤ó\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
-msgstr "%s: ¥ª¥×¥·¥ç¥ó `-W %s' ¤Ë¤Ï°ú¿ô¤Ï¤¢¤ê¤Þ¤»¤ó\n"
-
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "¥á¥â¥ê¤ò»È¤¤ÀÚ¤ê¤Þ¤·¤¿"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, c-format
 msgid "unable to record current working directory"
 msgstr "¸½ºß¤Î¥ï¡¼¥¯¥Ç¥£¥ì¥¯¥È¥ê¤òµ­Ï¿¤Ç¤­¤Þ¤»¤ó"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, c-format
 msgid "failed to return to initial working directory"
 msgstr "½é´ü¥ï¡¼¥¯¥Ç¥£¥ì¥¯¥È¥ê¤ËÌá¤ë¤Î¤Ë¼ºÇÔ¤·¤Þ¤·¤¿"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: %s ÉÔǽ"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: ·Ù¹ð: %s ÉÔǽ"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: ¥â¡¼¥É¤ò %s ¤ËÊѹ¹¤Ç¤­¤Þ¤»¤ó"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: uid %lu gid %lu ¤Ë½êÍ­¼Ô¤òÊѹ¹¤Ç¤­¤Þ¤»¤ó"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: %s ¤Ë¥Ï¡¼¥É¥ê¥ó¥¯¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: %s ¥Ð¥¤¥ÈÌܤÇÆɤ߹þ¤ß¥¨¥é¡¼ (%lu ¥Ð¥¤¥ÈÆɤ߹þ¤ßÃæ)"
-msgstr[1] "%s: %s ¥Ð¥¤¥ÈÌܤÇÆɤ߹þ¤ß¥¨¥é¡¼ (%lu ¥Ð¥¤¥ÈÆɤ߹þ¤ßÃæ)"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: ·Ù¹ð: %s ¥Ð¥¤¥ÈÌܤÇÆɤ߹þ¤ß¥¨¥é¡¼ (%lu ¥Ð¥¤¥ÈÆɤ߹þ¤ßÃæ)"
-msgstr[1] "%s: ·Ù¹ð: %s ¥Ð¥¤¥ÈÌܤÇÆɤ߹þ¤ß¥¨¥é¡¼ (%lu ¥Ð¥¤¥ÈÆɤ߹þ¤ßÃæ)"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: %s ¤Ø¤Î seek ¤¬¤Ç¤­¤Þ¤»¤ó"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: ·Ù¹ð: %s ¤Ø¤Î seek ¤¬¤Ç¤­¤Þ¤»¤ó"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: `%s' ¤Ø¤Î¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤¬ºî¤ì¤Þ¤»¤ó"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%1$s: %3$lu ¥Ð¥¤¥È¤Î¤¦¤Á¡¢%2$lu ¥Ð¥¤¥È¤Î¤ß½ñ¤­¹þ¤ß¤Þ¤·¤¿"
-msgstr[1] "%1$s: %3$lu ¥Ð¥¤¥È¤Î¤¦¤Á¡¢%2$lu ¥Ð¥¤¥È¤Î¤ß½ñ¤­¹þ¤ß¤Þ¤·¤¿"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "¥á¥ó¥Ð̾¤«¤éÀèƬ¤Î `%s' ¤ò¼è¤ê½ü¤­¤Þ¤¹"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "¥Ï¡¼¥É¥ê¥ó¥¯À褫¤éÀèƬ¤Î `%s' ¤ò¼è¤ê½ü¤­¤Þ¤¹"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "¶õ¤Î¥á¥ó¥Ð̾¤Ë `.' ¤òÂåÆþ¤·¤Þ¤¹"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "¶õ¤Î¥Ï¡¼¥É¥ê¥ó¥¯Àè¤Ë `.' ¤òÂåÆþ¤·¤Þ¤¹"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -309,17 +217,17 @@ msgstr "
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "`"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "'"
 
@@ -329,7 +237,7 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[yY]"
 
@@ -339,39 +247,28 @@ msgstr "^[yY]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[nN]"
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: ¤½¤Î¥µ¡¼¥Ó¥¹¤Ï»È¤¨¤Þ¤»¤ó"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "ɸ½àÆþÎÏ"
-
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "ɸ½à½ÐÎÏ"
+msgid "Packaged by %s (%s)\n"
+msgstr "¥Ñ¥Ã¥±¡¼¥¸²½: %s (%s)\n"
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "±ó³Ö¥·¥§¥ë¤¬¼Â¹Ô¤Ç¤­¤Þ¤»¤ó"
+msgid "Packaged by %s\n"
+msgstr "¥Ñ¥Ã¥±¡¼¥¸²½: %s\n"
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr "(C)"
 
-#: lib/version-etc.c:67
-#, fuzzy
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -387,24 +284,24 @@ msgstr ""
 "There is NO WARRANTY, to the extent permitted by law.\n"
 "\n"
 "[»²¹ÍÌõ]\n"
-"¤³¤ì¤Ï¥Õ¥ê¡¼¥½¥Õ¥È¥¦¥§¥¢¤Ç¤¹: Êѹ¹¤ÈºÆÇÛÉۤϼ«Í³¤Ç¤¹.\n"
+"¤³¤ì¤Ï¥Õ¥ê¡¼¥½¥Õ¥È¥¦¥§¥¢¤Ç¤¹. Êѹ¹¤ÈºÆÇÛÉۤϼ«Í³¤Ç¤¹.\n"
 "ˡΧ¤Çǧ¤á¤é¤ì¤ëÈϰϤǡÖ̵ÊݾڡפǤ¹.\n"
 "\n"
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr "ºî¼Ô: %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr "ºî¼Ô: %s, %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "ºî¼Ô: %s, %s, %s.\n"
@@ -412,7 +309,7 @@ msgstr "
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -424,7 +321,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -436,7 +333,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -448,7 +345,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -460,7 +357,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -474,7 +371,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -488,7 +385,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -503,181 +400,322 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 "\n"
-"¥Ð¥°¥ì¥Ý¡¼¥È¤Ï <%s> ¤Þ¤Ç.\n"
+"¥Ð¥°¥ì¥Ý¡¼¥È°¸Àè: %s\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:249
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
-msgstr ""
+msgid "Report %s bugs to: %s\n"
+msgstr "%s ¥Ð¥°¤Î¥ì¥Ý¡¼¥È°¸Àè: %s\n"
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
-msgstr ""
+#: gnu/version-etc.c:253
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s ¥Û¡¼¥à¥Ú¡¼¥¸: <%s>\n"
+
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+msgstr "%s ¥Û¡¼¥à¥Ú¡¼¥¸: <http://www.gnu.org/software/%s/>\n"
+
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+msgstr "GNU ¥½¥Õ¥È¥¦¥§¥¢»ÈÍѾå¤Î°ìÈÌŪ¥Ø¥ë¥×: <http://www.gnu.org/gethelp/>\n"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: %s ÉÔǽ"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: ·Ù¹ð: %s ÉÔǽ"
+
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: ¥â¡¼¥É¤ò %s ¤ËÊѹ¹¤Ç¤­¤Þ¤»¤ó"
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "ÆþÎÏʸ»úÎó¤¬Ä¹²á¤®¤Þ¤¹"
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: uid %lu gid %lu ¤Ë½êÍ­¼Ô¤òÊѹ¹¤Ç¤­¤Þ¤»¤ó"
+
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: %s ¤Ë¥Ï¡¼¥É¥ê¥ó¥¯¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "¿ô»úʸˡ¥¨¥é¡¼"
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: %s ¥Ð¥¤¥ÈÌܤÇÆɤ߹þ¤ß¥¨¥é¡¼ (%lu ¥Ð¥¤¥ÈÆɤ߹þ¤ßÃæ)"
+msgstr[1] "%s: %s ¥Ð¥¤¥ÈÌܤÇÆɤ߹þ¤ß¥¨¥é¡¼ (%lu ¥Ð¥¤¥ÈÆɤ߹þ¤ßÃæ)"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: ¥Ð¥Ã¥Õ¥¡¤ÎÎΰè¤ò³ÎÊݤǤ­¤Þ¤»¤ó\n"
+#: lib/paxerror.c:192
+#, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: ·Ù¹ð: %s ¥Ð¥¤¥ÈÌܤÇÆɤ߹þ¤ß¥¨¥é¡¼ (%lu ¥Ð¥¤¥ÈÆɤ߹þ¤ßÃæ)"
+msgstr[1] "%s: ·Ù¹ð: %s ¥Ð¥¤¥ÈÌܤÇÆɤ߹þ¤ß¥¨¥é¡¼ (%lu ¥Ð¥¤¥ÈÆɤ߹þ¤ßÃæ)"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "¥Ð¥Ã¥Õ¥¡Îΰè¤ò³ÎÊݤǤ­¤Þ¤»¤ó"
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: %s ¤Ø¤Î seek ¤¬¤Ç¤­¤Þ¤»¤ó"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:275
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "¤â¤Ã¤È¾Ü¤·¤¤¾ðÊó¤Ï `%s --help' ¤ÈÆþÎϤ¹¤ì¤ÐÆÀ¤é¤ì¤Þ¤¹.\n"
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: ·Ù¹ð: %s ¤Ø¤Î seek ¤¬¤Ç¤­¤Þ¤»¤ó"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:284
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: `%s' ¤Ø¤Î¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤¬ºî¤ì¤Þ¤»¤ó"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%1$s: %3$lu ¥Ð¥¤¥È¤Î¤¦¤Á¡¢%2$lu ¥Ð¥¤¥È¤Î¤ß½ñ¤­¹þ¤ß¤Þ¤·¤¿"
+msgstr[1] "%1$s: %3$lu ¥Ð¥¤¥È¤Î¤¦¤Á¡¢%2$lu ¥Ð¥¤¥È¤Î¤ß½ñ¤­¹þ¤ß¤Þ¤·¤¿"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "¥á¥ó¥Ð̾¤«¤éÀèƬ¤Î `%s' ¤ò¼è¤ê½ü¤­¤Þ¤¹"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "¥Ï¡¼¥É¥ê¥ó¥¯À褫¤éÀèƬ¤Î `%s' ¤ò¼è¤ê½ü¤­¤Þ¤¹"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "¶õ¤Î¥á¥ó¥Ð̾¤Ë `.' ¤òÂåÆþ¤·¤Þ¤¹"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "¶õ¤Î¥Ï¡¼¥É¥ê¥ó¥¯Àè¤Ë `.' ¤òÂåÆþ¤·¤Þ¤¹"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: ¤½¤Î¥µ¡¼¥Ó¥¹¤Ï»È¤¨¤Þ¤»¤ó"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "ɸ½àÆþÎÏ"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "ɸ½à½ÐÎÏ"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"»È¤¤Êý: %s [¥ª¥×¥·¥ç¥ó]\n"
-"¥Æ¡¼¥×¥É¥é¥¤¥Ö¤òÁàºî,¥ê¥â¡¼¥È¥×¥í¥»¥¹¤«¤é¤Î¥³¥Þ¥ó¥É¤ò¼õ¤±ÉÕ¤±¤Þ¤¹.\n"
-"\n"
-"  --version  ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤ò½ÐÎÏ.\n"
-"  --help     ¤³¤Î¥Ø¥ë¥×¤ò½ÐÎÏ.\n"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "¸¡º÷¥ª¥Õ¥»¥Ã¥È¥¨¥é¡¼"
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "±ó³Ö¥·¥§¥ë¤¬¼Â¹Ô¤Ç¤­¤Þ¤»¤ó"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "¸¡º÷Êý¸þ¤¬Èϰϳ°"
+
+#: rmt/rmt.c:419
+msgid "Invalid seek direction"
+msgstr "̵¸ú¤Ê¸¡º÷Êý¸þ"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:427
+msgid "Invalid seek offset"
+msgstr "̵¸ú¤Ê¸¡º÷¥ª¥Õ¥»¥Ã¥È"
+
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "¸¡º÷¥ª¥Õ¥»¥Ã¥È¤¬Èϰϳ°"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "¸¡º÷Êý¸þ¤¬Èϰϳ°"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+msgid "Invalid byte count"
+msgstr "̵¸ú¤Ê¥Ð¥¤¥È¿ô"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+msgid "Byte count out of range"
+msgstr "¥Ð¥¤¥È¿ô¤¬Èϰϳ°"
+
+#: rmt/rmt.c:539
+msgid "Premature eof"
+msgstr "¥Õ¥¡¥¤¥ë¤ÎÅÓÃ潪λ"
+
+#: rmt/rmt.c:582
+msgid "Invalid operation code"
+msgstr "̵¸ú¤ÊÁàºî¥³¡¼¥É"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr "¼ÂÁõ¤µ¤ì¤Æ¤¤¤Ê¤¤Áàºî"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
-msgstr "rmtd: Á᤹¤®¤ë eof\n"
+#: rmt/rmt.c:645
+msgid "Unexpected arguments"
+msgstr "ͽ´ü¤»¤Ì°ú¿ô"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "¥Õ¥¡¥¤¥ë¤Î½ªÃ¼¤¬Á᤹¤®¤Þ¤¹"
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr "±ó³Ö¥×¥í¥»¥¹¤«¤é¤ÎÌ¿Îá¤ò¼õ¤±ÉÕ¤±¤Æ¥Æ¡¼¥×¥É¥é¥¤¥Ö¤òÁàºî"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "NUMBER"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr "¥Ç¥Ð¥Ã¥°¥ì¥Ù¥ë¤òÀßÄê"
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "FILE"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr "¥Ç¥Ð¥Ã¥°½ÐÎÏ¥Õ¥¡¥¤¥ë̾¤òÀßÄê"
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, c-format
+msgid "cannot open %s"
+msgstr "%s ¤ò³«¤±¤Þ¤»¤ó"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹"
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "ÉÔÍפʥ³¥Þ¥ó¥É"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "¤³¤ì¤Ï tar ¥¢¡¼¥«¥¤¥Ö¤Ç¤Ï¤Ê¤¤¤è¤¦¤Ç¤¹"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Áí½ñ¤­½Ð¤·¥Ð¥¤¥È¿ô"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "ÁíÆɤ߹þ¤ß¥Ð¥¤¥È¿ô"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Áíºï½ü¥Ð¥¤¥È¿ô: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(¥Ñ¥¤¥×)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "record_size ¤¬Ìµ¸ú¤ÊÃͤǤ¹"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "¥¢¡¼¥«¥¤¥Ö̾¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "ɸ½àÆþ½ÐÎϤΥ¢¡¼¥«¥¤¥Ö¤Ï¸¡¾Ú¤Ç¤­¤Þ¤»¤ó"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "¥¢¡¼¥«¥¤¥Ö¤Ï°µ½Ì¤µ¤ì¤Æ¤¤¤Þ¤¹. %s ¥ª¥×¥·¥ç¥ó¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "°µ½Ì¤µ¤ì¤¿¥¢¡¼¥«¥¤¥Ö¤Ï¥¢¥Ã¥×¥Ç¡¼¥È¤Ç¤­¤Þ¤»¤ó"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "¥Æ¡¼¥×¤ÎÀèƬ¤Ç¤¹. ½èÍý¤òÃæ»ß¤·¤Þ¤¹"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "¥¨¥é¡¼¤¬Â¿¤¹¤®¤Þ¤¹. ½èÍý¤òÃæ»ß¤·¤Þ¤¹"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "µ­Ï¿¥µ¥¤¥º = %lu ¥Ö¥í¥Ã¥¯"
 msgstr[1] "µ­Ï¿¥µ¥¤¥º = %lu ¥Ö¥í¥Ã¥¯"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "¥¢¡¼¥«¥¤¥ÖÆâ¤Î¥¢¥é¥¤¥ó¥á¥ó¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¥Ö¥í¥Ã¥¯ (%lu ¥Ð¥¤¥È)"
 msgstr[1] "¥¢¡¼¥«¥¤¥ÖÆâ¤Î¥¢¥é¥¤¥ó¥á¥ó¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¥Ö¥í¥Ã¥¯ (%lu ¥Ð¥¤¥È)"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr ""
 "¥¢¡¼¥«¥¤¥Ö¥Õ¥¡¥¤¥ë¤ò¸å¤íÊý¸þ¤ËÌ᤻¤Þ¤»¤ó. -i ¤Ê¤·¤Ç¤ÏÆɤá¤Ê¤¤¤«¤âÃΤì¤Þ¤»¤ó."
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek ¤òµ­Ï¿¤Î¶­³¦¤Ç»ß¤á¤Þ¤»¤ó"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: Ìµ¸ú¤Ê¥Ü¥ê¥å¡¼¥àÈÖ¹æ¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "¥Ü¥ê¥å¡¼¥àÈֹ椬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤Þ¤·¤¿"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "¥Ü¥ê¥å¡¼¥à #%d (%s) ¤ò½àÈ÷¤·¤Þ¤¹. ¥ê¥¿¡¼¥ó¥­¡¼¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "¥æ¡¼¥¶¤¬±þÅú¤¹¤ë EOF ¤¬É¬ÍפȤʤê¤Þ¤¹"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "·Ù¹ð: ¥¢¡¼¥«¥¤¥Ö¤¬ÉÔ´°Á´¤Ç¤¹"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -689,67 +727,67 @@ msgstr ""
 " q             tar ¤ò½ªÎ»\n"
 " y ¤Þ¤¿¤Ï²þ¹Ô  Áàºî¤ò·Ñ³\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !             ¥µ¥Ö¥·¥§¥ë¤òµ¯Æ°\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?             ¤³¤Î¥ê¥¹¥È¤òɽ¼¨\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "¿·¤·¤¤¥Ü¥ê¥å¡¼¥à¤¬¤¢¤ê¤Þ¤»¤ó. ½ªÎ»¤·¤Þ¤¹.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "¥Õ¥¡¥¤¥ë̾¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó. ¤â¤¦°ìÅÙ.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "ÉÔÀµ¤ÊÆþÎÏ. ? ¤Ç¥Ø¥ë¥×¤òɽ¼¨\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "%s ¥³¥Þ¥ó¥É¤¬¼ºÇÔ¤·¤Þ¤·¤¿"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr ""
 "%s ¤Ï¤³¤Î¥Ü¥ê¥å¡¼¥à¾å¤Ç¤ª¤½¤é¤¯Ï¢Â³¤·¤Æ¤¤¤Þ¤¹: ¥Ø¥Ã¥À¤Ï¾Êά¤µ¤ì¤¿Ì¾Á°¤ò´Þ¤ó¤Ç"
 "¤¤¤Þ¤¹"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s ¤Ï¤³¤Î¥Ü¥ê¥å¡¼¥à¾å¤ÇϢ³¤·¤Æ¤¤¤Þ¤»¤ó"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s ¤ÏÉÔÀµ¤Ê¥µ¥¤¥º¤Ç¤¹ (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "¤³¤Î¥Ü¥ê¥å¡¼¥à¤ÏϢ³¤·¤Æ¤¤¤Þ¤»¤ó (%s - %s != %s)"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "¥¢¡¼¥«¥¤¥Ö¤Ï %s ¤Ë°ìÃפ¹¤ë¥é¥Ù¥ë¤¬ÉÕ¤¤¤Æ¤¤¤Þ¤»¤ó"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "¥Ü¥ê¥å¡¼¥à %s ¤Ï %s ¤Ë°ìÃפ·¤Þ¤»¤ó"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
@@ -757,60 +795,60 @@ msgstr ""
 "%s: ¥Õ¥¡¥¤¥ë̾¤¬Ä¹²á¤®¤Æ GNU ¥Þ¥ë¥Á¥Ü¥ê¥å¡¼¥à¥Ø¥Ã¥À¤ËÊݸ¤Ç¤­¤Ê¤¤¤Î¤ÇÀÚ¤ê¼Î¤Æ"
 "¤Þ¤¹"
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
 msgstr "½ñ¤­¹þ¤ß¤¬¥Ö¥í¥Ã¥¯¶­³¦¤Ç½ª¤ï¤Ã¤Æ¤¤¤Þ¤»¤ó"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "%lu ¥Ð¥¤¥È¤À¤±¤ò %lu ¥Ð¥¤¥È¤«¤éÆɤ߹þ¤à¤³¤È¤¬¤Ç¤­¤Þ¤·¤¿"
 msgstr[1] "%lu ¥Ð¥¤¥È¤À¤±¤ò %lu ¥Ð¥¤¥È¤«¤éÆɤ߹þ¤à¤³¤È¤¬¤Ç¤­¤Þ¤·¤¿"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "ÆâÍƤ¬°Û¤Ê¤ê¤Þ¤¹"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "¥¢¡¼¥«¥¤¥ÖÃæ¤Ëͽ´ü¤»¤Ì EOF ¤¬¤¢¤ê¤Þ¤¹"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "¥Õ¥¡¥¤¥ë¥¿¥¤¥×¤¬°Û¤Ê¤ê¤Þ¤¹"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "¥â¡¼¥É¤¬°Û¤Ê¤ê¤Þ¤¹"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "¥æ¡¼¥¶ ID ¤¬°Û¤Ê¤ê¤Þ¤¹"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "¥°¥ë¡¼¥× ID ¤¬°Û¤Ê¤ê¤Þ¤¹"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "ºÇ½ª½¤Àµ»þ¹ï¤¬°Û¤Ê¤ê¤Þ¤¹"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "¥µ¥¤¥º¤¬°Û¤Ê¤ê¤Þ¤¹"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "%s ¤Ë¥ê¥ó¥¯¤·¤Æ¤¤¤Þ¤»¤ó"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤¬°Û¤Ê¤ê¤Þ¤¹"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "¥Ç¥Ð¥¤¥¹Èֹ椬°ã¤¤¤Þ¤¹"
 
@@ -832,34 +870,34 @@ msgstr "
 msgid "Verification may fail to locate original files."
 msgstr "¸µ¤Î¥Õ¥¡¥¤¥ë¤Î½êºß³Îǧ¤Ë¼ºÇÔ¤·¤¿²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "³Îǧ¼ºÇÔ: %d ¸Ä¤Î̵¸ú¤Ê¥Ø¥Ã¥À¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿"
 msgstr[1] "³Îǧ¼ºÇÔ: %d ¸Ä¤Î̵¸ú¤Ê¥Ø¥Ã¥À¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "%s ¤ËŤ¤¥¼¥í¥Ö¥í¥Ã¥¯"
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: ¥­¥ã¥Ã¥·¥å ¥Ç¥£¥ì¥¯¥È¥ê ¥¿¥° %s ¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹; %s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "ÃÍ %s ¤Ï %s ¤ÎÈÏ°Ï %s..%s ¤Ë¤¢¤ê¤Þ¤»¤ó -- %s ¤òÂåÍÑ"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "ÃÍ %s ¤Ï %s ¤ÎÈÏ°Ï %s..%s ¤Ë¤¢¤ê¤Þ¤»¤ó"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Éé¤Î 8 ¿Ê¥Ø¥Ã¥À¤òÀ¸À®¤·¤Þ¤¹"
 
@@ -878,435 +916,439 @@ msgstr "%s: 
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: ¥ê¥ó¥¯Ì¾¤¬Ä¹²á¤®¤ë¤Î¤Ç¥À¥ó¥×¤·¤Þ¤»¤ó"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: %s ¥Ð¥¤¥È¾®¤µ¤¯¤Ê¤Ã¤¿¤Î¤Ç¡¢¥¼¥í¤ÇËä¤á¤Þ¤¹"
 msgstr[1] "%s: %s ¥Ð¥¤¥È¾®¤µ¤¯¤Ê¤Ã¤¿¤Î¤Ç¡¢¥¼¥í¤ÇËä¤á¤Þ¤¹"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: ¥Õ¥¡¥¤¥ë¤Ï°Û¤Ê¤ë¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¾å¤Ë¤¢¤ë¤Î¤Ç¥À¥ó¥×¤·¤Þ¤»¤ó"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr "ÆâÍƤò¥À¥ó¥×¤·¤Þ¤»¤ó"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Ì¤ÃΤΥե¡¥¤¥ë·Á¼°; ¥Õ¥¡¥¤¥ë¤Ï̵»ë¤µ¤ì¤Þ¤¹"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, c-format
-msgid "Missing links to %s.\n"
-msgstr "%s ¤Ø¤Î¥ê¥ó¥¯¤¬¤¢¤ê¤Þ¤»¤ó.\n"
+msgid "Missing links to %s."
+msgstr "%s ¤Ø¤Î¥ê¥ó¥¯¤¬¤¢¤ê¤Þ¤»¤ó."
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: Êѹ¹¤µ¤ì¤Æ¤¤¤Ê¤¤¤Î¤Ç¥À¥ó¥×¤·¤Þ¤»¤ó"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: ¤Ï¥¢¡¼¥«¥¤¥Ö¤Ê¤Î¤Ç¥À¥ó¥×¤·¤Þ¤»¤ó"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Æɤ߹þ¤ß°ÊÁ°¤Ëºï½ü¤µ¤ì¤Þ¤·¤¿"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤ò¥À¥ó¥×¤·¤Þ¤»¤ó"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: Æɤ߹þ¤ó¤À¥Õ¥¡¥¤¥ë¤¬Êѹ¹¤µ¤ì¤Æ¤¤¤Þ¤¹"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: ¥½¥±¥Ã¥È¤Ï̵»ë¤·¤Þ¤¹"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: door ¤Ï̵»ë¤·¤Þ¤¹"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "¼¡¤Î¥Ø¥Ã¥À¤ò¥¹¥­¥Ã¥×¤·¤Þ¤¹"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "¥¢¡¼¥«¥¤¥Ö¤«¤é¥Ø¥Ã¥À¤Ç¤Ê¤¤¤â¤Î¤òºï½ü¤·¤Þ¤¹"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: ¶²¤é¤¯¸Å¤¤¥¿¥¤¥à¥¹¥¿¥ó¥× %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: ¥¿¥¤¥à¥¹¥¿¥ó¥× %s ¤Ï %s ÉÃÀè¤ò¼¨¤·¤Æ¤¤¤Þ¤¹"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: ¥Ç¥£¥ì¥¯¥È¥êºîÀ®»þ¤ËÉÔ¬¤ÎÌ·½â¤¬µ¯¤³¤ê¤Þ¤·¤¿"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: ¥Ç¥£¥ì¥¯¥È¥ê¤Ï¾õÂÖ¤òŸ³«¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ëÁ°¤Ë̾Á°¤òÊѹ¹¤µ¤ì¤Þ¤·¤¿"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Ϣ³¤·¤¿¥Õ¥¡¥¤¥ë¤òÀµ¾ï¤Ê¥Õ¥¡¥¤¥ë¤È¤·¤Æ¼è¤ê½Ð¤·¤Þ¤¹"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤ò¥Ï¡¼¥É¥ê¥ó¥¯¤È¤·¤Æ¼è¤ê½Ð¤·¤Æ¤ß¤Þ¤¹"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "%s ¤òÆɤ߹þ¤ßÃæ¤Ç¤¹\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: ¼è¤ê½Ð¤»¤Þ¤»¤ó -- ¥Õ¥¡¥¤¥ë¤ÏÊ̤Υܥê¥å¡¼¥à¤«¤é³¤¤¤Æ¤¤¤Þ¤¹"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "ͽ´ü¤»¤ÌŤ¤Ì¾Á°¥Ø¥Ã¥À"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Ì¤ÃΤΥե¡¥¤¥ë¥¿¥¤¥× '%c', Ä̾ï¥Õ¥¡¥¤¥ë¤È¤·¤ÆÃê½Ð"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "¸½ºß¤Î %s ¤ÎÊý¤¬¿·¤·¤¤¤«Æ±¤¸"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: ¤³¤Î¥Õ¥¡¥¤¥ë¤Î¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò¼è¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "%s ¤Î̾Á°¤ò %s ¤ËÊѹ¹¤Ç¤­¤Þ¤»¤ó"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "¥¨¥é¡¼¤ò²óÉü¤Ç¤­¤Þ¤»¤ó: Ä¾¤Á¤Ë½ªÎ»¤·¤Þ¤¹"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: ¥Ç¥£¥ì¥¯¥È¥ê̾¤¬ %s ¤«¤éÊѹ¹¤µ¤ì¤Þ¤·¤¿"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: ¥Ç¥£¥ì¥¯¥È¥ê̾¤¬Êѹ¹¤µ¤ì¤Þ¤·¤¿"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: ¥Ç¥£¥ì¥¯¥È¥ê¤Ï¿·¤·¤¯ºî¤é¤ì¤Þ¤·¤¿"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "̵¸ú¤Ê¥¿¥¤¥à¥¹¥¿¥ó¥×"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "ÉÔÀµ¤ÊºÇ½ª¹¹¿·»þ¹ï (ÉÃ)"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "ÉÔÀµ¤ÊºÇ½ª¹¹¿·»þ¹ï (¥Ê¥ÎÉÃ)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "̵¸ú¤Ê¥Ç¥Ð¥¤¥¹ÈÖ¹æ¤Ç¤¹"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "̵¸ú¤Ê inode ÈÖ¹æ"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "¥¹¥Ê¥Ã¥×¥·¥ç¥Ã¥È¥Õ¥¡¥¤¥ë¤ÎÆɤ߹þ¤ßÃæ¤Ë¥Õ¥£¡¼¥ë¥É¤¬Ä¹²á¤®¤Þ¤¹"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "¥¹¥Ê¥Ã¥×¥·¥ç¥Ã¥È¥Õ¥¡¥¤¥ë¤ËÆɤ߹þ¤ß¥¨¥é¡¼"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "¥¹¥Ê¥Ã¥×¥·¥ç¥Ã¥È¥Õ¥¡¥¤¥ë¤Ëͽ´ü¤»¤Ì EOF"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "¥¹¥Ê¥Ã¥×¥·¥ç¥Ã¥È¥Õ¥¡¥¤¥ë¤Ëͽ´ü¤»¤Ì¥Õ¥£¡¼¥ë¥ÉÃÍ"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "½ªÃ¼µ­Ï¿¤Ê¤·"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "ÉÔÀµ¤ÊÁýʬ¥Õ¥¡¥¤¥ë·Á¼°"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr "̤¼ÂÁõ¤ÎÁýʬ·Á¼°¥Ð¡¼¥¸¥ç¥ó: %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr "ÉÔÀµ·Á¼°¤Î dumpdir: '%c' ¤¬¤¢¤ë¤Ù¤­¤È¤³¤í¤Ë %#3o"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "ÉÔÀµ·Á¼°¤Î dumpdir: 'X' ¤¬½ÅÊ£"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "ÉÔÀµ·Á¼°¤Î dumpdir: 'R' ¤Ë¶õ¤Î̾Á°"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "ÉÔÀµ·Á¼°¤Î dumpdir: 'T' ¤¬ 'R' ¤ÎÁ°¤Ë¤Ê¤¤"
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "ÉÔÀµ·Á¼°¤Î dumpdir: 'T' ¤Ë¶õ¤Î̾Á°"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr "ÉÔÀµ·Á¼°¤Î dumpdir: '%c' ¤¬¤¢¤ë¤Ù¤­¤È¤³¤í¤Ë¥Ç¡¼¥¿¤Î½ªÃ¼"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr "ÉÔÀµ·Á¼°¤Î dumpdir: 'X' ¤¬Ì¤»ÈÍÑ"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "¥Æ¥ó¥×¥ì¡¼¥È %s ¤ò»È¤Ã¤Æ°ì¼¡¥Ç¥£¥ì¥¯¥È¥ê¤òºî¤ì¤Þ¤»¤ó"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: ¥Ç¥£¥ì¥¯¥È¥ê¤òºï½ü¤·¤Þ¤»¤ó: ¾õÂÖ¤¬Ê¬¤«¤ê¤Þ¤»¤ó"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: ¥Ç¥£¥ì¥¯¥È¥ê¤Ï°Û¤Ê¤ë¥Ç¥Ð¥¤¥¹¾å¤Ë¤¢¤ë¤Î¤Ç¾Ãµî¤·¤Þ¤»¤ó"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: %s ¤òºï½ü\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: ºï½ü¤Ç¤­¤Þ¤»¤ó"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: ¾Êά¤·¤Þ¤¹"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "¥Ö¥í¥Ã¥¯ %s: ** NUL ¤Î¥Ö¥í¥Ã¥¯ **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "¥Ö¥í¥Ã¥¯ %s: ** ¥Õ¥¡¥¤¥ë¤Î½ªÃ¼ **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "¥Ö¥í¥Ã¥¯ %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "¿ôÃÍ %s ¤È¤Ê¤ë¤Ù¤­¥Ø¥Ã¥À°ÌÃÖ¤¬¶õ¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr "8 ¿Ê¿ôÃÍ %.*s ¤Ï %s ¤ÎÈϰϳ°¤Ç¤¹ -- 2 ¤ÎÊä¿ô¤È¸«¤Ê¤·¤Þ¤¹"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "8 ¿Ê¿ôÃÍ %.*s ¤Ï %s ¤ÎÈϰϳ°¤Ç¤¹"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "¥¢¡¼¥«¥¤¥Ö¤ËÇѤ줿 base-64 ¥Ø¥Ã¥À¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "Éä¹æÉÕ¤­ base-64 Ê¸»úÎó %s ¤Ï %s ¤ÎÈϰϳ°¤Ç¤¹"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "base-256 ÃͤϠ%s ¤ÎÈϰϳ°¤Ç¤¹"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "¥¢¡¼¥«¥¤¥Ö¤Ë %.*s ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¤³¤³¤Ï¿ôÃÍ %s ¤È¤Ê¤ë¤Ï¤º¤Ç¤¹"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "¥¢¡¼¥«¥¤¥Ö¤ÎÃÍ %s ¤Ï %s ¤ÎÈÏ°Ï %s..%s Æâ¤Ë¤¢¤ê¤Þ¤»¤ó"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " %s ¤Ø¤Î¥ê¥ó¥¯\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " ÉÔÌÀ¤Ê¥Õ¥¡¥¤¥ë¥¿¥¤¥× %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Ť¤¥ê¥ó¥¯--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Ť¤Ì¾Á°--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--¥Ü¥ê¥å¡¼¥à¥Ø¥Ã¥À--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--¥Ð¥¤¥È %s ¤ÇϢ³--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤òºîÀ®:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "̾Á°¤ò %s ¤«¤é %s ¤ËÊѹ¹¤·¤Þ¤¹\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Ì¾Á°¤ò %s ¤ËÊѹ¹¤Ç¤­¤Þ¤»¤ó"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "̾Á°¤ò %s ¤«¤é %s ¤ËÌᤷ¤Þ¤¹\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "¥ï¡¼¥¯¥Ç¥£¥ì¥¯¥È¥ê¤òÊݸ¤Ç¤­¤Þ¤»¤ó"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "¥ï¡¼¥¯¥Ç¥£¥ì¥¯¥È¥ê¤òÊѹ¹¤Ç¤­¤Þ¤»¤ó"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Æɤ߹þ¤ß°ÊÁ°¤Ëºï½ü¤µ¤ì¤Þ¤·¤¿"
+
+#: src/misc.c:774
+#, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Æɤ߹þ¤ßÁ°¤Ëºï½ü¤µ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "»Ò¥×¥í¥»¥¹"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "¥×¥í¥»¥¹´Ö¥Á¥ã¥Í¥ë"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr "¥Ñ¥¿¡¼¥ó¥Þ¥Ã¥Á¤Îʸ»ú¤¬¥Õ¥¡¥¤¥ë̾¤Ë»È¤ï¤ì¤Æ¤¤¤Þ¤¹."
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr "--wildcards ¤Ç¥Ñ¥¿¡¼¥ó¥Þ¥Ã¥Á¤òÍ­¸ú¤Ë, ¤Þ¤¿ --no-wildcards ¤Ç"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "¤³¤Î·Ù¹ð¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤."
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: ¥¢¡¼¥«¥¤¥ÖÆâ¤Ë¸«¤Ä¤«¤ê¤Þ¤»¤ó"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: ¥¢¡¼¥«¥¤¥ÖÆâ¤Ë¸«¤Ä¤«¤ê¤Þ¤»¤ó"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+"¥Õ¥¡¥¤¥ë¥ê¥¹¥ÈÆâ¤Ç -C ¥ª¥×¥·¥ç¥ó¤Ï --listed-incremental ¤È°ì½ï¤Ë»È¤¨¤Þ¤»¤ó"
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr "-C ¥ª¥×¥·¥ç¥ó¤Ï 1¤Ä¤À¤±¤Ê¤é --listed-incremental ¤È°ì½ï¤Ë»È¤¨¤Þ¤¹"
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "¥ª¥×¥·¥ç¥ó `-%s' ¤È `-%s' ¤Ï¤É¤Á¤é¤âɸ½àÆþÎϤ¬É¬ÍפǤ¹"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Ìµ¸ú¤Ê¥¢¡¼¥«¥¤¥Ö·Á¼°"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "GNU ÆÃÍ­¤Îµ¡Ç½¤Ï¡¢Èó¸ß´¹¤Ê·Á¼°¤òɬÍפȤ·¤Þ¤¹"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
 msgstr "ÉÔÌÀ¤Ê°úÍÑ·Á¼° `%s', `%s --quoting-style=help' ¤Ç°ìÍ÷ɽ¼¨."
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1325,7 +1367,7 @@ msgstr ""
 "  tar -tvf archive.tar         # archive.tar Æâ¤ÎÁ´¥Õ¥¡¥¤¥ë¤ò¾Ü¤·¤¯°ìÍ÷ɽ¼¨\n"
 "  tar -xf archive.tar          # archive.tar ¤«¤éÁ´¥Õ¥¡¥¤¥ë¤ò¼è¤ê½Ð¤¹\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1346,86 +1388,79 @@ msgstr ""
 "                  ¤½¤¦¤Ç¤Ê¤±¤ì¤Ðñ¤Ë¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò¼è¤ë\n"
 "  never, simple   ¾ï¤Ëñ½ã¤Ê¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò¼è¤ë\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "¼çÁàºî¥â¡¼¥É:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "¥¢¡¼¥«¥¤¥Ö¤ÎÆâÍƤò°ìÍ÷ɽ¼¨"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "¥¢¡¼¥«¥¤¥Ö¤«¤é¥Õ¥¡¥¤¥ë¤òÃê½Ð"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "¿·¤·¤¤¥¢¡¼¥«¥¤¥Ö¤òºîÀ®"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "¥¢¡¼¥«¥¤¥Ö¤È¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤È¤Î°ã¤¤¤ò¸«ÉÕ¤±¤ë"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "¥¢¡¼¥«¥¤¥Ö¤ÎËöÈø¤Ë¥Õ¥¡¥¤¥ë¤òÄɲÃ"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "¥¢¡¼¥«¥¤¥ÖÆâ¤Ë¤¢¤ë¥Õ¥¡¥¤¥ë¤è¤ê¿·¤·¤¤¥Õ¥¡¥¤¥ë¤Î¤ß¤òÄɲÃ"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "¥¢¡¼¥«¥¤¥Ö¤Ë tar ¥Õ¥¡¥¤¥ë¤òÄɲÃ"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "¥¢¡¼¥«¥¤¥Ö¤«¤éºï½ü (¼§µ¤¥Æ¡¼¥×¾å¤Ç¤Ï¥À¥á!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr "¥¢¡¼¥«¥¤¥Ö¤Î¥Ü¥ê¥å¡¼¥à¥é¥Ù¥ë¤ò¥Æ¥¹¥È¤·¤Æ½ªÎ»"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Áàºî¥ª¥×¥·¥ç¥ó¤ËÂФ¹¤ëÉղõ¡Ç½:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "¤Þ¤Ð¤é¤Ë¸ºß¤¹¤ë¥Õ¥¡¥¤¥ë¤ò¸ú²ÌŪ¤Ë½èÍý"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr "MAJOR[.MINOR]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr "¤Þ¤Ð¤é (sparse) ·Á¼°¤Î¥Ð¡¼¥¸¥ç¥ó¤òÀßÄê (--sparse ¤Î°ÕÌ£¤ò´Þ¤à)"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "¸Å¤¤ GNU ·Á¼°¤Î¥¤¥ó¥¯¥ê¥á¥ó¥¿¥ë¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò½èÍý"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "FILE"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "¿·¤·¤¤ GNU ·Á¼°¤Î¥¤¥ó¥¯¥ê¥á¥ó¥¿¥ë¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò½èÍý"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr "ºî¤é¤ì¤¿ listed-incremental ¥¢¡¼¥«¥¤¥Ö¤ËÂФ¹¤ë¥À¥ó¥×¥ì¥Ù¥ë"
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "Æɤ߹þ¤á¤Ê¤¤¥Õ¥¡¥¤¥ë¾å¤ËÈó¥¼¥í¤Î¾õÂ֤Ǹºß¤·¤Þ¤»¤ó"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "NUMBER"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1437,116 +1472,119 @@ msgstr ""
 "¥Õ¥¡¥¤¥ë°ìÍ÷¤¬¥³¥Þ¥ó¥É¥é¥¤¥ó¤« -T ¥ª¥×¥·¥ç¥ó·Ðͳ¤Î¤É¤Á¤é¤«¤Ç»ØÄꤵ¤ì¤¿¾ì¹ç¤Î"
 "¤ßÍ­¸ú. NUMBER ¤Ïɸ½à¤Ç 1."
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "¥¢¡¼¥«¥¤¥Ö¤Ï¸¡º÷²Äǽ"
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr "¥¢¡¼¥«¥¤¥Ö¤Ï¸¡º÷²Äǽ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr "¥¤¥ó¥¯¥ê¥á¥ó¥¿¥ë¥¢¡¼¥«¥¤¥ÖºîÀ®»þ¤Ë¥Ç¥Ð¥¤¥¹ÈÖ¹æ¤ò¥Á¥§¥Ã¥¯¤·¤Ê¤¤"
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr "¥¤¥ó¥¯¥ê¥á¥ó¥¿¥ë¥¢¡¼¥«¥¤¥ÖºîÀ®»þ¤Ë¥Ç¥Ð¥¤¥¹ÈÖ¹æ¤ò¥Á¥§¥Ã¥¯¤¹¤ë (ɸ½à)"
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "À©¸æ¤ò¾å½ñ¤­:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "¥¢¡¼¥«¥¤¥Ö¤ò½ñ¤­½Ð¤·¤¿¸å¤Ë¸¡¾Ú"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "¥Õ¥¡¥¤¥ë¤ò¥¢¡¼¥«¥¤¥Ö¤Ë²Ã¤¨¤¿¸å¤Çºï½ü"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "¼è¤ê½Ð¤¹ºÝ¤Ë´û¸¤Î¥Õ¥¡¥¤¥ë¤òÃÖ¤­´¹¤¨¤Ê¤¤"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr "¥¢¡¼¥«¥¤¥Ö¥³¥Ô¡¼¤è¤ê¿·¤·¤¤´û¸¥Õ¥¡¥¤¥ë¤òÃÖ¤­´¹¤¨¤Ê¤¤"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "¼è¤ê½Ð¤¹ºÝ¤Ë´û¸¥Õ¥¡¥¤¥ë¤ò¾å½ñ¤­"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "³Æ¡¹¤Î¥Õ¥¡¥¤¥ë¤ò¼è¤ê½Ð¤·¤Æ¾å½ñ¤­¤¹¤ëÁ°¤Ëºï½ü"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤ò¼è¤ê½Ð¤¹Á°¤Ë³¬Áؤò¶õ¤Ë"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "´û¸¥Ç¥£¥ì¥¯¥È¥ê¤Î¥á¥¿¥Ç¡¼¥¿¤òÊݸ"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr "¼è¤ê½Ð¤¹ºÝ¤Ë´û¸¥Ç¥£¥ì¥¯¥È¥ê¤Î¥á¥¿¥Ç¡¼¥¿¤ò¾å½ñ¤­ (ɸ½à)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "½ÐÎÏ¥¹¥È¥ê¡¼¥à¤òÁªÂò"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "¥Õ¥¡¥¤¥ë¤ò¼è¤ê½Ð¤·¤Æɸ½à½ÐÎϤ˽ÐÎÏ"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "COMMAND"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "¥Õ¥¡¥¤¥ë¤ò¼è¤ê½Ð¤·¤ÆÊÌ¤Î¥×¥í¥°¥é¥à¤Ë½ÐÎÏ"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "»Ò¥×¥í¥»¥¹¤Î½ªÎ»¥³¡¼¥É¤ò̵»ë"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr "»Ò¥×¥í¥»¥¹¤ÎÈó¥¼¥í½ªÎ»¥³¡¼¥É¤ò¥¨¥é¡¼¤È¤·¤Æ½èÍý"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "¥Õ¥¡¥¤¥ë°À­¤Î½èÍý"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "²Ã¤¨¤¿¥Õ¥¡¥¤¥ë¤Î½êÍ­¼Ô¤ò NAME ¤ËÊѹ¹"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "²Ã¤¨¤¿¥Õ¥¡¥¤¥ë¤Î¥°¥ë¡¼¥×¤ò NAME ¤ËÊѹ¹"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "DATE-OR-FILE"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "DATE-OR-FILE ¤«¤éÄɲåե¡¥¤¥ë¤Î mtime ¤òÀßÄê"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "CHANGES"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "²Ã¤¨¤¿¥Õ¥¡¥¤¥ë¤Î (¥·¥ó¥Ü¥ê¥Ã¥¯) ¥â¡¼¥É¤ò CHANGES ¤ËÊѹ¹"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "METHOD"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1555,181 +1593,185 @@ msgstr ""
 "ºÇ½ª¥¢¥¯¥»¥¹»þ¹ï¤ò, Æɤ߹þ¤ß¸å¤ËÉü¸µ¤¹¤ë (METHOD='replace'; É¸½à) ¤«ºÇ½é¤ËÀß"
 "Äꤷ¤Ê¤¤ (METHOD='system') ¤«¤Î¤É¤Á¤é¤«¤ÎÊýË¡¤Ç¥À¥ó¥×¥Õ¥¡¥¤¥ë¾å¤Ç°Ý»ý"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "¥Õ¥¡¥¤¥ë¤Î¹¹¿·»þ¹ï¤ò¼è¤ê½Ð¤µ¤Ê¤¤"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
-msgstr "Ʊ¤¸½êÍ­¼Ô¤Î¤Þ¤Þ¤Ç¥Õ¥¡¥¤¥ë¤ò¼è¤ê½Ð¤·¤Æ¤ß¤ë"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
+msgstr ""
+"¥¢¡¼¥«¥¤¥ÖÆâ¤ÈƱ¤¸½êÍ­¼Ô¤Î¤Þ¤Þ¤Ç¥Õ¥¡¥¤¥ë¤ò¼è¤ê½Ð¤·¤Æ¤ß¤ë (¥¹¡¼¥Ñ¡¼¥æ¡¼¥¶¤Ç¤Ï"
+"¥Ç¥Õ¥©¥ë¥È)"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
-msgstr "¤¢¤Ê¤¿¼«¿È¤Î¥Õ¥¡¥¤¥ë¤È¤·¤Æ¼è¤ê½Ð¤¹"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
+msgstr "¤¢¤Ê¤¿¼«¿È¤Î¥Õ¥¡¥¤¥ë¤È¤·¤Æ¼è¤ê½Ð¤¹ (°ìÈ̥桼¥¶¤Ç¤Ï¥Ç¥Õ¥©¥ë¥È)"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "¥æ¡¼¥¶Ì¾/¥°¥ë¡¼¥×̾¤È¤·¤Æ¾ï¤Ë¿ô»ú¤ò»È¤¦"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr "¥Õ¥¡¥¤¥ë°À­¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤òÃê½Ð (superuser ¤Ç¤Ïɸ½à)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
 msgstr ""
 "¥¢¡¼¥«¥¤¥Ö¤«¤é°À­¤òÃê½Ð¤¹¤ëºÝ¤Ë¥æ¡¼¥¶¤Î umask ¤òŬÍÑ (°ìÈ̥桼¥¶¤Ç¤Ïɸ½à)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "¥¢¡¼¥«¥¤¥Ö¤È¥Þ¥Ã¥Á¤µ¤»¤ë¤¿¤á¤Ë¼è¤ê½Ð¤¹Ì¾Á°¤òʤÓÂؤ¨"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "-p ¤È -s ¤ÎξÊý¤ò»ØÄꤷ¤¿¤â¤Î¤ÈƱ¤¸"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr ""
 "Ãê½Ð¤¬½ªÎ»¤¹¤ë¤Þ¤ÇÃê½Ð¤µ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤ÎºÇ½ª¹¹¿·»þ¹ï¤È°À­¤ÎÀßÄê¤òÃ٤餻¤ë"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "--delay-directory-restore ¥ª¥×¥·¥ç¥ó¤Î¸ú²Ì¤ò¼è¤ê¾Ã¤·"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "¥Ç¥Ð¥¤¥¹¤ÎÁªÂò¤ÈÀÚÂØ:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "ARCHIVE"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "¥¢¡¼¥«¥¤¥Ö¥Õ¥¡¥¤¥ë¤Þ¤¿¤Ï¥Ç¥Ð¥¤¥¹ ARCHIVE ¤ò»ÈÍÑ"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "¥¢¡¼¥«¥¤¥Ö¥Õ¥¡¥¤¥ë¤Ï¥³¥í¥ó¤ò´Þ¤ó¤Ç¤¤¤Æ¤â¥í¡¼¥«¥ë"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "»ØÄꤵ¤ì¤¿ rmt COMMAND ¤ò rmt ¤ÎÂå¤ï¤ê¤Ë»ÈÍÑ"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "rsh ¤ÎÂå¤ï¤ê¤Ë COMMAND ¤ò»ÈÍÑ"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "¥É¥é¥¤¥Ö¤ÈÌ©ÅÙ¤ò»ØÄê"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "¥Þ¥ë¥Á¥Ü¥ê¥å¡¼¥à¤Î¥¢¡¼¥«¥¤¥Ö¤òºîÀ®/°ìÍ÷/Ãê½Ð"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "NUMBER x 1024 ¥Ð¥¤¥È¤ò½ñ¤­½Ð¤·¤¿¸å¤Ç¥Æ¡¼¥×¤òÊѹ¹"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "³Æ¡¹¤Î¥Æ¡¼¥×¤ÎºÇ¸å¤Ç¥¹¥¯¥ê¥×¥È¤ò¼Â¹Ô (-M É¬¿Ü)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "FILE Ãæ¤Î¥Ü¥ê¥å¡¼¥àÈÖ¹æ¤ò»ÈÍÑ/¹¹¿·"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "¥Ç¥Ð¥¤¥¹¥Ö¥í¥Ã¥­¥ó¥°:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "BLOCKS"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "¥ì¥³¡¼¥É¤¢¤¿¤ê BLOCKS x 512 ¥Ð¥¤¥È"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "¥ì¥³¡¼¥É¤¢¤¿¤ê NUMBER ¥Ð¥¤¥È. 512 ¤ÎÇÜ¿ô"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "¥¢¡¼¥«¥¤¥ÖÃæ¤Î¥¼¥í¥Ö¥í¥Ã¥¯ (¤Ä¤Þ¤ê EOF) ¤ò̵»ë"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "Æɤ߽Ф·¤¿¤è¤¦¤ËºÆ¥Ö¥í¥Ã¥¯ (4.2BSD ¥Ñ¥¤¥×ÍÑ)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "¥¢¡¼¥«¥¤¥Ö·Á¼°¤ÎÁªÂò"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "FORMAT"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "»ØÄꤵ¤ì¤¿·Á¼°¤Î¥¢¡¼¥«¥¤¥Ö¤òºîÀ®"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "FORMAT ¤Ï¼¡¤Î¤¦¤Á¤Î 1¤Ä:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "¸Å¤¤ V7 tar ·Á¼°"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "GNU tar 1.12 °ÊÁ°¤Î·Á¼°"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "GNU tar 1.13.x ·Á¼°"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "POSIX 1003.1-1988 (ustar) ·Á¼°"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "POSIX 1003.1-2001 (pax) ·Á¼°"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "pax ¤ÈƱ¤¸"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "--format=v7 ¤ÈƱ¤¸"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "--format=posix ¤ÈƱ¤¸"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "keyword[[:]=value][,keyword[[:]=value]]..."
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "pax ¥­¡¼¥ï¡¼¥É¤òÀ©¸æ"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "TEXT"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
@@ -1737,189 +1779,167 @@ msgstr ""
 "¥Ü¥ê¥å¡¼¥à̾ TEXT ¤Î¥¢¡¼¥«¥¤¥Ö¤òºîÀ®. °ìÍ÷/Ãê½Ð»þ¤Ë TEXT ¤ò¥Ü¥ê¥å¡¼¥à̾¤ËÂФ¹"
 "¤ëÃê½Ð¥Ñ¥¿¡¼¥ó¤Ë»ÈÍÑ"
 
-#: src/tar.c:593
+#: src/tar.c:613
 msgid "Compression options:"
 msgstr "°µ½Ì¥ª¥×¥·¥ç¥ó:"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr "°µ½Ì¥×¥í¥°¥é¥à¤ò·è¤á¤ë¤Î¤Ë¥¢¡¼¥«¥¤¥ÖÀÜÈø¼­¤ò»ÈÍѤ¹¤ë"
 
-#: src/tar.c:597
-#, fuzzy
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr "°µ½Ì¥×¥í¥°¥é¥à¤ò·è¤á¤ë¤Î¤Ë¥¢¡¼¥«¥¤¥ÖÀÜÈø¼­¤ò»ÈÍѤ·¤Ê¤¤"
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "bzip2 ·Ðͳ¤Ç¥¢¡¼¥«¥¤¥Ö¤ò¥Õ¥£¥ë¥¿"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "gzip ·Ðͳ¤Ç¥¢¡¼¥«¥¤¥Ö¤ò¥Õ¥£¥ë¥¿"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "compress ·Ðͳ¤Ç¥¢¡¼¥«¥¤¥Ö¤ò¥Õ¥£¥ë¥¿"
-
-#: src/tar.c:609
-msgid "filter the archive through lzma"
-msgstr "lzma ·Ðͳ¤Ç¥¢¡¼¥«¥¤¥Ö¤ò¥Õ¥£¥ë¥¿"
-
-#: src/tar.c:611
-msgid "filter the archive through lzop"
-msgstr "lzop ·Ðͳ¤Ç¥¢¡¼¥«¥¤¥Ö¤ò¥Õ¥£¥ë¥¿"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "gzip ·Ðͳ¤Ç¥¢¡¼¥«¥¤¥Ö¤ò¥Õ¥£¥ë¥¿"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "PROG"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "PROG ·Ðͳ¤Ç¥Õ¥£¥ë¥¿ (-d ¤ò¼õ¤±ÉÕ¤±¤ëɬÍפ¢¤ê)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ëÁªÂò:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 "»ØÄꤵ¤ì¤¿ FILE ¤ò¥¢¡¼¥«¥¤¥Ö¤ËÄɲà(¥À¥Ã¥·¥å ' ¤Ç»Ï¤Þ¤ë¥Õ¥¡¥¤¥ë̾¤Î¾ì¹ç¤ËÊØ"
 "Íø)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "DIR"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "¥Ç¥£¥ì¥¯¥È¥ê DIR ¤Ø°ÜÆ°"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "Ãê½Ð¤Þ¤¿¤ÏºîÀ®¤¹¤ë̾Á°¤ò¥Õ¥¡¥¤¥ë FILE ¤«¤é¼èÆÀ"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T ¤¬ null ¤Ç½ª¤ï¤ë̾Á°¤òÆɤ߹þ¤ß, -C ¤ò̵¸ú²½"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr "Á°¤Î --null ¥ª¥×¥·¥ç¥ó¤Î¸ú²Ì¤ò̵¸ú²½"
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr "-T ¤ÇÆɤ߹þ¤ó¤À¥Õ¥¡¥¤¥ë̾¤ò°úÍѽªÎ»¤¹¤ë (ɸ½à)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr "-T ¤ÇÆɤ߹þ¤ó¤¿¥Õ¥¡¥¤¥ë̾¤ò°úÍѽªÎ»¤·¤Ê¤¤"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "PATTERN"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "PATTERN ¤Ë°ìÃפ¹¤ë¥Õ¥¡¥¤¥ë¤ò½ü³°"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "FILE ¤ËÎóµó¤µ¤ì¤¿¥Ñ¥¿¡¼¥ó¤ò½ü³°"
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr "¥¿¥°¥Õ¥¡¥¤¥ë¼«¿È¤ò½ü¤¯ CACHEDIR.TAG ¤ò´Þ¤à¥Ç¥£¥ì¥¯¥È¥ê¤ÎÆâÍƤò½ü³°"
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "CACHEDIR.TAG ¤ò´Þ¤à¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤ÎÁ´¤Æ¤ò½ü³°"
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "CACHEDIR.TAG ¤ò´Þ¤à¥Ç¥£¥ì¥¯¥È¥ê¤ò½ü³°"
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr "FILE ¼«¿È¤ò½ü¤¯ FILE ¤ò´Þ¤à¥Ç¥£¥ì¥¯¥È¥ê¤ÎÆâÍƤò½ü³°"
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr "FILE ¤ò´Þ¤à¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤ÎÁ´¤Æ¤ò½ü³°"
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr "FILE ¤ò´Þ¤à¥Ç¥£¥ì¥¯¥È¥ê¤ò½ü³°"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr "¥Ð¡¼¥¸¥ç¥ó´ÉÍý¥·¥¹¥Æ¥à¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ò½ü³°"
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr "¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò½ü³°¤·¤Æ¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯"
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤ò¼«Æ°Åª¤Ë²¼¤Ã¤Æ¤¤¤«¤Ê¤¤"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "¥¢¡¼¥«¥¤¥ÖºîÀ®»þ¤Ë¥í¡¼¥«¥ë¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ë¸ÂÄê"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "¥Ç¥£¥ì¥¯¥È¥ê¤ò½ç·«¤ê¤Ë²¼¤Ã¤Æ¤¤¤¯ (default)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "¥Õ¥¡¥¤¥ë̾¤«¤éÀèƬ¤Î `/' ¤ò¼è¤ê½ü¤«¤Ê¤¤"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr "¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯¤ò¤¿¤É¤ë; ¤½¤ì¤é¤¬»Ø¤¹¥Õ¥¡¥¤¥ë¤ò¥¢¡¼¥«¥¤¥Ö¤·¤Æ¥À¥ó¥×"
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr "¥Ï¡¼¥É¥ê¥ó¥¯¤ò¤¿¤É¤ë; ¤½¤ì¤é¤¬»Ø¤¹¥Õ¥¡¥¤¥ë¤ò¥¢¡¼¥«¥¤¥Ö¤·¤Æ¥À¥ó¥×"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "MEMBER-NAME"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "¥¢¡¼¥«¥¤¥ÖÃæ¤Î¥á¥ó¥Ð¡¼ MEMBER-NAME ¤Ç³«»Ï"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "DATE-OR-FILE ¤è¤ë¿·¤·¤¤¥Õ¥¡¥¤¥ë¤Î¤ß¤ò³ÊǼ"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "DATE"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "¥Ç¡¼¥¿¤¬Êѹ¹¤µ¤ì¤¿»þ¤À¤±ÆüÉÕ¤ª¤è¤Ó»þ¹ï¤òÈæ³Ó"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "CONTROL"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "ºï½üÁ°¤Ë¥Ð¡¼¥¸¥ç¥ó´ÉÍý¤ò CONTROL ¤Ë¤·¤Æ¥Ð¥Ã¥¯¥¢¥Ã¥×"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "STRING"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1927,87 +1947,95 @@ msgstr ""
 "ºï½üÁ°¤Ë¥Ð¥Ã¥¯¥¢¥Ã¥×, Ä̾ï¤ÎÀÜÈø¼­ (´Ä¶­ÊÑ¿ô SIMPLE_BACKUP_SUFFIX ¤¬Ì¤ÀßÄê¤Ê"
 "¤é '~') ¤ò¾å½ñ¤­"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr "¥Õ¥¡¥¤¥ë̾ÊÑ´¹:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr "Ãê½Ð»þ¤Ë¥Õ¥¡¥¤¥ë̾¤«¤éÀèƬ¤Î NUMER ¸Ä¤Î¥³¥ó¥Ý¥Í¥ó¥È¤ò½üµî"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "EXPRESSION"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr "¥Õ¥¡¥¤¥ë̾¤ÎÊÑ´¹¤Ë sed ¤ÎÃÖ´¹ EXPRESSION ¤ò»ÈÍÑ"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr "¥Õ¥¡¥¤¥ë̾°ìÃ×¥ª¥×¥·¥ç¥ó (½ü³°/Êñ´Þ¤Îξ¥Ñ¥¿¡¼¥ó¤ËºîÍÑ):"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr "Âçʸ»ú¾®Ê¸»ú¤ò̵»ë"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr "¥Õ¥¡¥¤¥ë̾¤ÎÀèƬ¤È¥Ñ¥¿¡¼¥ó¤¬°ìÃ×"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr "Ǥ°Õ¤Î `/' °Ê¹ß¤Ë¥Ñ¥¿¡¼¥ó¤¬°ìÃ× (ɸ½à¤Ç½ü³°)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr "Âçʸ»ú¾®Ê¸»ú¤ò¹Íθ¤·¤Æ°ìÃ× (ɸ½à)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr "¥ï¥¤¥ë¥É¥«¡¼¥É¤ò»ÈÍÑ (ɸ½à¤Ç½ü³°)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "Ãà¸ìŪʸ»úÎó°ìÃ×"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr "¥ï¥¤¥ë¥É¥«¡¼¥É¤¬ `/' ¤Ë°ìÃפ·¤Ê¤¤"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr "¥ï¥¤¥ë¥É¥«¡¼¥É¤¬ `/' ¤Ë°ìÃ× (ɸ½à¤Ç½ü³°)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "¾ðÊó:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "½èÍý¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤Î°ìÍ÷¤ò¾éŤËɽ¼¨"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr "KEYWORD"
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr "·Ù²ü´ÉÀ©"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr "NUMBER (ɸ½à 10) ÈÖÌܤε­Ï¿¤´¤È¤Ë¿ÊĽ¥á¥Ã¥»¡¼¥¸¤òɽ¼¨"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr "ACTION"
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr "³Æ¸¡Ìä¤Ç ACTION ¤ò¼Â¹Ô"
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "Á´¤Æ¤Î¥ê¥ó¥¯¤¬¥À¥ó¥×¤µ¤ì¤Ê¤¤¾ì¹ç¥á¥Ã¥»¡¼¥¸¤òɽ¼¨"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "SIGNAL"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2018,112 +2046,120 @@ msgstr ""
 "»þ¤ËÁí¥Ð¥¤¥È¿ô¤òɽ¼¨. µö²Ä¤µ¤ì¤¿ SIGNAL ¤Ï: SIGHUP, SIGQUIT, SIGINT, SIGUSR1 "
 "¤ª¤è¤Ó SIGUSR2. SIG ÀÜƬ¼­¤¬¤Ê¤¤Ì¾Á°¤Ç¤â²Ä"
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "¥Õ¥¡¥¤¥ë¤Î¹¹¿·ÆüÉÕ¤ò UTC ¤Çɽ¼¨"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "¾éĹ½ÐÎϤò FILE ¤ËÁ÷¿®"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "¥¢¡¼¥«¥¤¥ÖÆâ¤Î¥Ö¥í¥Ã¥¯¿ô¤ò³Æ¡¹¥á¥Ã¥»¡¼¥¸ÉÕ¤­¤Çɽ¼¨"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "Á´¤Æ¤ÎÆ°ºî¤ò³Îǧ"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "tar ¤Îµ¬ÄêÃͤòɽ¼¨"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr "°ìÍ÷¤äÃê½Ð»þ¤Ë, ¸¡º÷´ð½à¤Ë°ìÃפ·¤Ê¤¤¥Ç¥£¥ì¥¯¥È¥ê¤ò³Æ¡¹°ìÍ÷ɽ¼¨"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr "ÊÖ´Ô¸å¤Ë¥Õ¥¡¥¤¥ë̾¤Þ¤¿¤Ï¥¢¡¼¥«¥¤¥Ö̾¤òɽ¼¨"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "STYLE"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr "̾Á°°úÍÑ·Á¼°¤òÀßÄê. Í­¸ú¤Ê STYLE Ãͤϲ¼µ­»²¾È."
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "¹¹¤Ë STRING ¤«¤éʸ»ú¤ò°úÍÑ"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "STRING ¤«¤é¤Îʸ»ú°úÍѤò̵¸ú¤Ë"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "¸ß´¹¥ª¥×¥·¥ç¥ó:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr "ºîÀ®»þ¤Ï --old-archive ¤ÈƱ¤¸. Ãê½Ð»þ¤Ï --no-same-owner ¤ÈƱ¤¸"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "¤½¤Î¾¥ª¥×¥·¥ç¥ó:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "ÀøºßŪ¤Ë³²¤Ë¤Ê¤ë¥ª¥×¥·¥ç¥ó¤Î»ÈÍѤò̵¸ú¤Ë"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
-msgstr "`-Acdtrux' ¥ª¥×¥·¥ç¥ó¤Î¤¦¤Á 2¤Ä°Ê¾å»ØÄꤹ¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó."
+#: src/tar.c:927
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
+msgstr ""
+"`-Acdtrux' ¤Þ¤¿¤Ï `--test-label' ¥ª¥×¥·¥ç¥ó¤Î¤¦¤Á 2¤Ä°Ê¾å»ØÄꤹ¤ë¤³¤È¤Ï¤Ç¤­¤Þ"
+"¤»¤ó"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "°µ½Ì¥ª¥×¥·¥ç¥ó¤¬¿©¤¤°ã¤Ã¤Æ¤¤¤Þ¤¹"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "̤ÃΤΥ·¥°¥Ê¥ë̾: %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "ÆüÉÕ¥µ¥ó¥×¥ë¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "̤ÃΤÎÆüÉÕ¥Õ¥©¡¼¥Þ¥Ã¥È¤Î %2$s Âå¤ï¤ê¤Ë %1$s ¤È¤·¤Þ¤¹"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "¥ª¥×¥·¥ç¥ó %s: `%s' ¤ò %s ¤È¤·¤Æ°·¤¦"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s: ¥Õ¥¡¥¤¥ë°ìÍ÷¤Ï´û¤ËÆɤ߹þ¤ßºÑ¤ß"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s: Æɤ߹þ¤Þ¤ì¤¿¥Õ¥¡¥¤¥ë̾¤Ë¥Ì¥ëʸ»ú"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
-msgstr "--quoting-style ¥ª¥×¥·¥ç¥ó¤ËÂФ¹¤ëÍ­¸ú¤Ê°ú¿ô¤Ï:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, c-format
+msgid "filter the archive through %s"
+msgstr "%s ·Ðͳ¤Ç¥¢¡¼¥«¥¤¥Ö¤ò¥Õ¥£¥ë¥¿"
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
+msgstr "--quoting-style ¥ª¥×¥·¥ç¥ó¤ËÂФ¹¤ëÍ­¸ú¤Ê°ú¿ô:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2131,48 +2167,51 @@ msgstr ""
 "\n"
 "¡Ö¤³¤Î¡×tar ¤Îµ¬ÄêÃÍ:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "̵¸ú¤Ê¥Ö¥í¥Ã¥­¥ó¥°°ø»Ò"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "̵¸ú¤Ê¥Æ¡¼¥×¤ÎŤµ"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr "̵¸ú¤ÊÁýʬ¥ì¥Ù¥ëÃÍ"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "1¤Ä°Ê¾å¤ÎÉßµï¤È¤Ê¤ëÆüÉÕ"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr "̵¸ú¤Ê¤Þ¤Ð¤é (sparse) ¥Ð¡¼¥¸¥ç¥óÃÍ"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr "--atime-preserve='system' ¤Ï¤³¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr "--checkpoint ÃͤÏÀ°¿ô¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
-msgstr "%s: Ìµ¸ú¤Ê¥°¥ë¡¼¥×"
+#: src/tar.c:1830
+msgid "Invalid group"
+msgstr "̵¸ú¤Ê¥°¥ë¡¼¥×"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "¥ª¥×¥·¥ç¥ó¤Ç»ØÄꤵ¤ì¤¿¥â¡¼¥É¤Ï̵¸ú¤Ç¤¹"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "̵¸ú¤Ê¿ô"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "̵¸ú¤Ê½êÍ­¼Ô"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
@@ -2180,111 +2219,117 @@ msgstr ""
 "--preserve ¥ª¥×¥·¥ç¥ó¤ÏÇÑ»ßͽÄê¤Ê¤Î¤Ç, Âå¤ï¤ê¤Ë --preserve-permissions --"
 "preserve-order ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤"
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "̵¸ú¤Êµ­Ï¿¥µ¥¤¥º"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "µ­Ï¿¥µ¥¤¥º¤Ï %d ¤ÎÇÜ¿ô¤Ç¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó"
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "̵¸ú¤Ê¥¨¥ì¥á¥ó¥È¿ô"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr "--to-command ¥ª¥×¥·¥ç¥ó¤Ï 1¤Ä¤À¤±µö²Ä"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "ÉÔÀµ·Á¼°¤ÎÌ©ÅÙ°ú¿ô: %s"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "̤ÃΤÎÌ©ÅÙ: `%c'"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "¥ª¥×¥·¥ç¥ó `-[0-7][lmh]' ¤Ï¡Ö¤³¤Î¡×tar ¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[¥Õ¥¡¥¤¥ë]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "¸Å¤¤¥ª¥×¥·¥ç¥ó `%c' ¤Ï°ú¿ô¤òɬÍפȤ·¤Þ¤¹"
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "--occurrence ¤Ï¥Õ¥¡¥¤¥ë°ìÍ÷¤¬¤Ê¤±¤ì¤Ð̵°ÕÌ£"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "--occurrence ¤ÏÍ׵ᤵ¤ì¤¿Áàºî¥â¡¼¥É¤Ç¤Ï»È¤¨¤Þ¤»¤ó"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "ʬ³ä·¿¤Î¥¢¡¼¥«¥¤¥Ö¥Õ¥¡¥¤¥ë¤Ë¤Ï `-M' ¥ª¥×¥·¥ç¥ó¤¬É¬ÍפǤ¹"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "--listed-incremental ¤È --newer ¤È¤ò·ë¹ç¤Ç¤­¤Þ¤»¤ó"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr "--listed-incremental ¤Ê¤·¤Î --level ¤Ï̵°ÕÌ£¤Ç¤¹"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: ¥Ü¥ê¥å¡¼¥à¥é¥Ù¥ë¤¬Ä¹¤¹¤®¤Þ¤¹ (%lu ¥Ð¥¤¥ÈÀ©¸Â)"
 msgstr[1] "%s: ¥Ü¥ê¥å¡¼¥à¥é¥Ù¥ë¤¬Ä¹¤¹¤®¤Þ¤¹ (%lu ¥Ð¥¤¥ÈÀ©¸Â)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "¥Þ¥ë¥Á¥Ü¥ê¥å¡¼¥à¥¢¡¼¥«¥¤¥Ö¤ò³Îǧ¤Ç¤­¤Þ¤»¤ó"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "°µ½Ì¤µ¤ì¤¿¥¢¡¼¥«¥¤¥Ö¤Ï³Îǧ¤Ç¤­¤Þ¤»¤ó"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "¥Þ¥ë¥Á¥Ü¥ê¥å¡¼¥à¤Ë°µ½Ì¤µ¤ì¤¿¥¢¡¼¥«¥¤¥Ö¤Ï»È¤¨¤Þ¤»¤ó"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "°µ½Ì¤µ¤ì¤¿¥¢¡¼¥«¥¤¥Ö¤ÏÏ¢·ë¤Ç¤­¤Þ¤»¤ó"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "--pax-option ¤Ï POSIX ¥¢¡¼¥«¥¤¥Ö¤Ç¤Î¤ß»È¤¨¤Þ¤¹"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr "¥Ü¥ê¥å¡¼¥àĹ¤Ï¥ì¥³¡¼¥É¥µ¥¤¥º¤è¤ê¾®¤µ¤¯¤Æ¤Ï¤¤¤±¤Þ¤»¤ó"
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr "--preserve-order ¤Ï --listed-incremental ¤ÈξΩ¤·¤Þ¤»¤ó"
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "¶õ¤Î¥¢¡¼¥«¥¤¥ÖºîÀ®¤Ï¤´ÍƼϴꤤ¤Þ¤¹"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "¥ª¥×¥·¥ç¥ó `-Aru' ¤È `-f -' ¤È¤ÏÁêÍƤì¤Þ¤»¤ó"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
-msgstr "¥ª¥×¥·¥ç¥ó `-Acdtrux' ¤Î¤¦¤Á¡¢¤¤¤º¤ì¤«¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
+#: src/tar.c:2592
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
+msgstr ""
+"`-Acdtrux' ¤Þ¤¿¤Ï `--test-label' ¥ª¥×¥·¥ç¥ó¤Î¤¦¤Á¡¢¤¤¤º¤ì¤« 1¤Ä¤ò»ØÄꤷ¤Ê¤±¤ì"
+"¤Ð¤Ê¤ê¤Þ¤»¤ó"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr "Á°¤Î¥¨¥é¡¼¤Ë¤è¤ê¼ºÇÔ¥¹¥Æ¡¼¥¿¥¹¤Ç½ªÎ»¤·¤Þ¤¹"
@@ -2296,79 +2341,83 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: ¥Õ¥¡¥¤¥ë¤¬ %s ¥Ð¥¤¥È¾®¤µ¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
 msgstr[1] "%s: ¥Õ¥¡¥¤¥ë¤¬ %s ¥Ð¥¤¥È¾®¤µ¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "¥­¡¼¥ï¡¼¥É %s ¤Ï̤ÃΤޤ¿¤Ï̤¼ÂÁõ"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+msgid "Time stamp is out of allowed range"
+msgstr "¥¿¥¤¥à¥¹¥¿¥ó¥×¤¬µö²Ä¤µ¤ì¤¿Èϰϳ°¤Ç¤¹"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "¥Ñ¥¿¡¼¥ó %s ¤Ï»È¤¨¤Þ¤»¤ó"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "¥­¡¼¥ï¡¼¥É %s ¤Ïʤ¤»¤Þ¤»¤ó"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "ÉÔÀµ·Á¼°¤Î³ÈÄ¥¥Ø¥Ã¥À: Ä¹¤µ¤Î»ØÄ꤬¤¢¤ê¤Þ¤»¤ó"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr "³ÈÄ¥¥Ø¥Ã¥ÀĹ¤Ïµö²Ä¤µ¤ì¤¿Èϰϳ°¤Ç¤¹"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "³ÈÄ¥¥Ø¥Ã¥ÀĹ %*s ¤ÏÈϰϳ°¤Ç¤¹"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr "ÉÔÀµ·Á¼°¤Î³ÈÄ¥¥Ø¥Ã¥À: Ä¹¤µ¤Î¸å¤Ë¥Ö¥é¥ó¥¯¤¬¤¢¤ê¤Þ¤»¤ó"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "ÉÔÀµ·Á¼°¤Î³ÈÄ¥¥Ø¥Ã¥À: = (¥¤¥³¡¼¥ë) µ­¹æ¤¬¤¢¤ê¤Þ¤»¤ó"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr "ÉÔÀµ·Á¼°¤Î³ÈÄ¥¥Ø¥Ã¥À: ²þ¹Ô¤¬¤¢¤ê¤Þ¤»¤ó"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr "̤ÃΤγÈÄ¥¥Ø¥Ã¥À¥­¡¼¥ï¡¼¥É `%s' ¤ò̵»ë"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr "À¸À®¤µ¤ì¤¿¥­¡¼¥ï¡¼¥É¤ÈÃͤΥڥ¢¤¬Ä¹²á¤®¤Þ¤¹ (¥­¡¼¥ï¡¼¥É=%s, Ä¹¤µ=%s)"
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "³ÈÄ¥¥Ø¥Ã¥À %s=%s ¤Ï %s..%s ¤ÎÈÏ°ÏÆâ¤Ë¤¢¤ê¤Þ¤»¤ó"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "ÉÔÀµ·Á¼°¤Î³ÈÄ¥¥Ø¥Ã¥À: %s=%s ¤ÏÉÔÀµ"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "ÉÔÀµ·Á¼°¤Î³ÈÄ¥¥Ø¥Ã¥À: %s=%s ¤Ï;ʬ"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr "ÉÔÀµ·Á¼°¤Î³ÈÄ¥¥Ø¥Ã¥À: %s ¤Ï̵¸ú: Í½´ü¤»¤Ì¶èÀÚ¤êʸ»ú %c"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr "ÉÔÀµ·Á¼°¤Î³ÈÄ¥¥Ø¥Ã¥À: %s ¤Ï̵¸ú: ´ñ¿ôÃÍ"
@@ -2409,7 +2458,7 @@ msgstr "
 msgid "Read checkpoint %u"
 msgstr "¥Á¥§¥Ã¥¯¥Ý¥¤¥ó¥È %u ¤òÆɤ߹þ¤ß¤Þ¤¹"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
@@ -2417,85 +2466,89 @@ msgstr ""
 "genfile ¤Ï GNU paxutils ¥Æ¥¹¥È¥»¥Ã¥È¤ËÂФ·¤Æ¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤òÁàºî¤·¤Þ¤¹.\n"
 "¥ª¥×¥·¥ç¥ó¤Ï:\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr "¥Õ¥¡¥¤¥ëºîÀ®¥ª¥×¥·¥ç¥ó:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "SIZE"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "»ØÄꤵ¤ì¤¿ SIZE ¤Î¥Õ¥¡¥¤¥ë¤òºîÀ®"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "ɸ½à½ÐÎϤÎÂå¤ï¤ê¤Ë¥Õ¥¡¥¤¥ë NAME ¤Ë½ÐÎÏ"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "FILE ¤«¤é¥Õ¥¡¥¤¥ë̾¤òÆɤ߹þ¤ß"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr "-T ¤Ï null ¤Ç½ª¤ï¤ë̾Á°¤òÆɤ߹þ¤ß¤Þ¤¹"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 "»ØÄꤵ¤ì¤¿ PATTERN ¤Ç¥Õ¥¡¥¤¥ë¤òËä¤á¤Þ¤¹. PATTERN ¤Ï 'default' ¤Þ¤¿¤Ï 'zeros'"
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "¤Þ¤Ð¤é¤Ê (sparse) ¥Õ¥¡¥¤¥ë¤Î¥Ö¥í¥Ã¥¯¥µ¥¤¥º"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 "¤Þ¤Ð¤é¤Ê (sparse) ¥Õ¥¡¥¤¥ë¤òÀ¸À®. »Ä¤ê¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¤Ç¥Õ¥¡¥¤¥ë¥Þ¥Ã¥×¤ò»ØÄê."
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr "¥ª¥Õ¥»¥Ã¥È"
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr "¥Ç¡¼¥¿¤ò½ñ¤­½Ð¤¹Á°¤Ë»ØÄꤵ¤ì¤¿¥ª¥Õ¥»¥Ã¥È¤Þ¤Ç¸¡º÷"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr "¥Õ¥¡¥¤¥ëÅý·×¥ª¥×¥·¥ç¥ó:"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr "³Æ¡¹¤Î»ØÄê¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æ struct stat ¤ÎÆâÍƤòɽ¼¨. É¸½à FORMAT ¤Ï: "
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr "Ʊ»þ¼Â¹Ô¥ª¥×¥·¥ç¥ó:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+msgid "OPTION"
+msgstr "OPTION"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
-"»ØÄꤵ¤ì¤¿ COMMAND ¤ò¼Â¹Ô. --checkpoint ¤ª¤è¤Ó --cut, --append, --touch ¤ÎÃæ"
-"¤Î 1¤Ä¤È¤È¤â¤Ë»ÈÍѤ¹¤ë¤È¤è¤¤"
+"ARGS ¤ò¼Â¹Ô. --checkpoint ¤ª¤è¤Ó --cut, --append, --touch, --unlink ¤ÎÃæ¤Î 1"
+"¤Ä¤È¤È¤â¤Ë»ÈÍѤ¹¤ë¤È¤è¤¤"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr "¥Á¥§¥Ã¥¯¥Ý¥¤¥ó¥È NUMBER Åþã»þ¤Ë»ØÄꤵ¤ì¤¿¥¢¥¯¥·¥ç¥ó (²¼µ­»²¾È) ¤ò¼Â¹Ô"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr "¼¡¤Î --touch ¥ª¥×¥·¥ç¥ó¤ÇÆüÉÕ¤òÀßÄê"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr "¼Â¹Ô¤µ¤ì¤¿¥Á¥§¥Ã¥¯¥Ý¥¤¥ó¥È¤È COMMAND ¤Î½ªÎ»¥¹¥Æ¡¼¥¿¥¹¤òɽ¼¨"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
@@ -2503,7 +2556,7 @@ msgstr ""
 "Ʊ»þ¼Â¹Ô¥¢¥¯¥·¥ç¥ó. ¤³¤ì¤é¤Ï --checkpoint option ¤Ç»ØÄꤵ¤ì¤¿¥Á¥§¥Ã¥¯¥Ý¥¤¥ó¥È"
 "ÈÖ¹æ¤ËÅþ㤷¤¿¤È¤­¤Ë¼Â¹Ô¤µ¤ì¤ë."
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
@@ -2511,137 +2564,144 @@ msgstr ""
 "FILE ¤ò --length ¥ª¥×¥·¥ç¥ó (¤Þ¤¿¤Ï»ØÄ꤬¤Ê¤±¤ì¤Ð 0) ¤Ç»ØÄꤵ¤ì¤¿¥µ¥¤¥º¤ËÀÚ¤ê"
 "¼Î¤Æ"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr "FILE ¤Ë SIZE ¥Ð¥¤¥ÈÄɵ­. SIZE ¤ÏÁ°¤Î --length ¥ª¥×¥·¥ç¥ó¤Ç»ØÄê."
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "FILE ¤ÎºÇ½ª¥¢¥¯¥»¥¹»þ¹ï¤ÈºÇ½ª¹¹¿·»þ¹ï¤ò¹¹¿·"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "COMMAND ¤ò¼Â¹Ô"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr "FILE ¤ò unlink"
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "̵¸ú¤Ê¥µ¥¤¥º: %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Èֹ椬µö²Ä¤µ¤ì¤¿Èϰϳ°: %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr "Éé¤Î¥µ¥¤¥º: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "stat(%s) ¼ºÇÔ"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr "Í׵ᤵ¤ì¤¿¥Õ¥¡¥¤¥ëĹ %lu, ¼ÂºÝ¤ÎÃÍ %lu"
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr "ºîÀ®¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¤Ï¥¹¥Ñ¡¼¥¹¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "`%s' ¤Î¶á¤¯¤Ç¿ô»ú¤ò¹½Ê¸Ê¬ÀÏ»þ¤Ë¥¨¥é¡¼"
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "̤ÃΤÎÆüÉÕ·Á¼°"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[ARGS...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "`%s' ¤ò³«¤±¤Þ¤»¤ó"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 msgid "cannot seek"
 msgstr "Áܤ·½Ð¤»¤Þ¤»¤ó"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "¥Õ¥¡¥¤¥ë̾¤¬¥Ì¥ëʸ»ú¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 "¤Þ¤Ð¤é¤Ê (sparse) ¥Õ¥¡¥¤¥ë¤òɸ½à½ÐÎϤ˽ñ¤­½Ð¤»¤Þ¤»¤ó. --file ¥ª¥×¥·¥ç¥ó¤ò»ÈÍÑ"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "ÉÔÀµ¤Ê¥Þ¥¹¥¯ (`%s' ¤Ë¶á¤¤)"
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr "̤ÃΤΥե£¡¼¥ë¥É `%s'"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "`%s' ¤Ë»þ¹ï¤òÀßÄê¤Ç¤­¤Þ¤»¤ó"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, c-format
+msgid "cannot unlink `%s'"
+msgstr "`%s' ¤ò unlink ¤Ç¤­¤Þ¤»¤ó"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "¥³¥Þ¥ó¥É¤¬Àµ¾ï½ªÎ»\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "¥³¥Þ¥ó¥É¤¬¥¹¥Æ¡¼¥¿¥¹ %d ¤Ç¼ºÇÔ\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "¥³¥Þ¥ó¥É¤¬¥·¥°¥Ê¥ë %d ¤Ç½ªÎ»\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "¥³¥Þ¥ó¥É¤¬¥·¥°¥Ê¥ë %d ¤ÇÄä»ß\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "¥³¥Þ¥ó¥É¤¬¥³¥¢¤ò¥À¥ó¥×\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "¥³¥Þ¥ó¥É¤¬½ªÎ»\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "--stat ¤Ë¤Ï¥Õ¥¡¥¤¥ë̾¤¬É¬Í×"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "°ú¿ô¤¬Â¿¤¹¤®¤Þ¤¹"
+#~ msgid "Cannot resolve hostname %s"
+#~ msgstr "¥Û¥¹¥È̾ %s ¤ò²ò·è¤Ç¤­¤Þ¤»¤ó"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
-#~ msgstr "·Ù¹ð: -I ¥ª¥×¥·¥ç¥ó¤Ï¼õ¤±Æþ¤ì¤é¤ì¤Þ¤»¤ó -- Â¿Ê¬ -j ¤« -T ¤Ê¤Î¤Ç¤Ï?"
+#~ msgid "suppress this warning."
+#~ msgstr "¤³¤Î·Ù¹ð¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤."
index f6102f577a49a12a14eb76235b9afafc37bc7362..1e6a0e07ec92cbf79565ed7155578ac64f74dda9 100644 (file)
Binary files a/po/ko.gmo and b/po/ko.gmo differ
index 431f1235aa14e03464760d5358c8da7af0d83ec6..84d7201c466ddd2a32e54eeab3df95562c24cf73 100644 (file)
--- a/po/ko.po
+++ b/po/ko.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU tar 1.12\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
 "PO-Revision-Date: 1997-05-30 22:55+0900\n"
 "Last-Translator: Bang Jun-Young <bangjy@nownuri.net>\n"
 "Language-Team: Korean <ko@li.org>\n"
@@ -14,61 +14,61 @@ msgstr ""
 "Content-Type: text/plain; charset=EUC-KR\n"
 "Content-Transfer-Encoding: 8-bit\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, fuzzy, c-format
 msgid "invalid argument %s for %s"
 msgstr "ºÎÀûÀýÇÑ ³¯Â¥ Çü½Ä `%s'"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, fuzzy, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "¸ðÈ£ÇÑ ÆÐÅÏ `%s'"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr ""
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr ""
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr ""
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr ""
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr ""
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr ""
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
 msgstr ""
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr ""
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr ""
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 #, fuzzy
 msgid " [OPTION...]"
 msgstr ""
@@ -77,232 +77,133 @@ msgstr ""
 "\n"
 
 #
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, fuzzy, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "´õ ¸¹Àº Á¤º¸¸¦ º¸·Á¸é `%s --help' ÇϽʽÿÀ.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr ""
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "¾Ë ¼ö ¾ø´Â ½Ã½ºÅÛ ¿À·ù"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr ""
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr ""
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr ""
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr ""
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr ""
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr ""
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr ""
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr ""
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr ""
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr ""
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr ""
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
-msgstr ""
-
-#: lib/getopt.c:575 lib/getopt.c:579
+#: gnu/getopt.c:531 gnu/getopt.c:547
 #, fuzzy, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "¿À·¡µÈ ¿É¼Ç `%c'´Â Àμö°¡ ÇÊ¿äÇÕ´Ï´Ù."
 
-#: lib/getopt.c:588 lib/getopt.c:593
+#: gnu/getopt.c:580 gnu/getopt.c:584
 #, fuzzy, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "¿À·¡µÈ ¿É¼Ç `%c'´Â Àμö°¡ ÇÊ¿äÇÕ´Ï´Ù."
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
+#: gnu/getopt.c:593 gnu/getopt.c:598
 #, fuzzy, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "¿À·¡µÈ ¿É¼Ç `%c'´Â Àμö°¡ ÇÊ¿äÇÕ´Ï´Ù."
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
-msgstr ""
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr "¿À·¡µÈ ¿É¼Ç `%c'´Â Àμö°¡ ÇÊ¿äÇÕ´Ï´Ù."
 
-#: lib/getopt.c:704 lib/getopt.c:707
+#: gnu/getopt.c:698 gnu/getopt.c:701
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr ""
 
-#: lib/getopt.c:759 lib/getopt.c:762
+#: gnu/getopt.c:709 gnu/getopt.c:712
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr ""
 
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
-msgstr ""
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "record_size·Î ºÎÀûÀýÇÑ °ª"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
 #, fuzzy, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "¿À·¡µÈ ¿É¼Ç `%c'´Â Àμö°¡ ÇÊ¿äÇÕ´Ï´Ù."
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
-msgstr ""
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "¿À·¡µÈ ¿É¼Ç `%c'´Â Àμö°¡ ÇÊ¿äÇÕ´Ï´Ù."
 
-#: lib/getopt.c:932 lib/getopt.c:950
+#: gnu/getopt.c:924 gnu/getopt.c:942
 #, fuzzy, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "¿À·¡µÈ ¿É¼Ç `%c'´Â Àμö°¡ ÇÊ¿äÇÕ´Ï´Ù."
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 #, fuzzy
 msgid "memory exhausted"
 msgstr "¸Þ¸ð¸®°¡ ¹Ù´Ú³²"
 
 #
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, fuzzy, c-format
 msgid "unable to record current working directory"
 msgstr "ÇöÀç µð·ºÅ丮¸¦ ¾Ë ¼ö ¾ø½À´Ï´Ù"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, c-format
 msgid "failed to return to initial working directory"
 msgstr ""
 
-#
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, fuzzy, c-format
-msgid "%s: Cannot %s"
-msgstr "%s¸¦ ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr ""
-
-#: lib/paxerror.c:93
-#, fuzzy, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: ¸ðµå¸¦ %0.4o·Î ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
-
-#: lib/paxerror.c:101
-#, fuzzy, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: ¼ÒÀ¯ÀÚ¸¦ uid %d, gid %d·Î ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
-
-#
-#: lib/paxerror.c:127
-#, fuzzy, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "¸µÅ© %s¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, fuzzy, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%ld ¹ÙÀÌƮ°¿¡¼­ Àб⠿À·ù, %d ¹ÙÀÌÆ® ÀÐÀ½, ÆÄÀÏ %s"
-msgstr[1] "%ld ¹ÙÀÌƮ°¿¡¼­ Àб⠿À·ù, %d ¹ÙÀÌÆ® ÀÐÀ½, ÆÄÀÏ %s"
-
-#
-#: lib/paxerror.c:192
-#, fuzzy, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%ld ¹ÙÀÌƮ°¿¡¼­ Àб⠿À·ù, %d ¹ÙÀÌÆ® ÀÐÀ½, ÆÄÀÏ %s"
-msgstr[1] "%ld ¹ÙÀÌƮ°¿¡¼­ Àб⠿À·ù, %d ¹ÙÀÌÆ® ÀÐÀ½, ÆÄÀÏ %s"
-
-#
-#: lib/paxerror.c:259
-#, fuzzy, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s¿¡ ¾µ ¼ö ¾ø½À´Ï´Ù"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr ""
-
-#: lib/paxerror.c:284
-#, fuzzy, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: `%s'¿¡ ´ëÇÑ ±âÈ£¸µÅ©¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù"
-
-#: lib/paxerror.c:349
-#, fuzzy, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: %d ¹ÙÀÌÆ®(%d ¹ÙÀÌÆ® Áß)¸¸ ½è½À´Ï´Ù"
-msgstr[1] "%s: %d ¹ÙÀÌÆ®(%d ¹ÙÀÌÆ® Áß)¸¸ ½è½À´Ï´Ù"
-
-#
-#: lib/paxnames.c:155
-#, fuzzy, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Àý´ë ¸µÅ©µé¿¡¼­ ¾Õ¿¡ ºÙÀº `/'¸¦ Á¦°ÅÇÔ"
-
-#
-#: lib/paxnames.c:156
-#, fuzzy, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Àý´ë ¸µÅ©µé¿¡¼­ ¾Õ¿¡ ºÙÀº `/'¸¦ Á¦°ÅÇÔ"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr ""
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr ""
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -316,17 +217,17 @@ msgstr ""
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr ""
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr ""
 
@@ -336,7 +237,7 @@ msgstr ""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr ""
 
@@ -346,40 +247,28 @@ msgstr ""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr ""
 
-#
-#: lib/rtapelib.c:299
+#: gnu/version-etc.c:76
 #, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: ¾µ ¼ö ¾ø´Â ¼­ºñ½º"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "Ç¥ÁØÀÔ·Â"
-
-#: lib/rtapelib.c:306
-#, c-format
-msgid "stdout"
-msgstr "Ç¥ÁØÃâ·Â"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "¿ø°Ý ¼ÐÀ» ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -390,19 +279,19 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr ""
@@ -410,7 +299,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -420,7 +309,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -430,7 +319,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -440,7 +329,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -450,7 +339,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -461,7 +350,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -472,7 +361,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -484,194 +373,355 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 "\n"
 "<tar-bugs@gnu.ai.mit.edu>·Î ¹ö±×¸¦ º¸°íÇØ ÁֽʽÿÀ.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr ""
+"\n"
+"<tar-bugs@gnu.ai.mit.edu>·Î ¹ö±×¸¦ º¸°íÇØ ÁֽʽÿÀ.\n"
+
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
+#
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, fuzzy, c-format
+msgid "%s: Cannot %s"
+msgstr "%s¸¦ ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
 msgstr ""
 
+#: lib/paxerror.c:93
+#, fuzzy, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: ¸ðµå¸¦ %0.4o·Î ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
+
+#: lib/paxerror.c:101
+#, fuzzy, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: ¼ÒÀ¯ÀÚ¸¦ uid %d, gid %d·Î ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
+
 #
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: ¹öÆÛ °ø°£À» ÇÒ´çÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+#: lib/paxerror.c:127
+#, fuzzy, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "¸µÅ© %s¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù"
 
 #
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "¹öÆÛ °ø°£À» ÇÒ´çÇÒ ¼ö ¾ø½À´Ï´Ù"
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, fuzzy, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%ld ¹ÙÀÌƮ°¿¡¼­ Àб⠿À·ù, %d ¹ÙÀÌÆ® ÀÐÀ½, ÆÄÀÏ %s"
+msgstr[1] "%ld ¹ÙÀÌƮ°¿¡¼­ Àб⠿À·ù, %d ¹ÙÀÌÆ® ÀÐÀ½, ÆÄÀÏ %s"
 
 #
-#: rmt/rmt.c:304
+#: lib/paxerror.c:192
+#, fuzzy, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%ld ¹ÙÀÌƮ°¿¡¼­ Àб⠿À·ù, %d ¹ÙÀÌÆ® ÀÐÀ½, ÆÄÀÏ %s"
+msgstr[1] "%ld ¹ÙÀÌƮ°¿¡¼­ Àб⠿À·ù, %d ¹ÙÀÌÆ® ÀÐÀ½, ÆÄÀÏ %s"
+
+#
+#: lib/paxerror.c:259
+#, fuzzy, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s¿¡ ¾µ ¼ö ¾ø½À´Ï´Ù"
+
+#: lib/paxerror.c:275
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "´õ ¸¹Àº Á¤º¸¸¦ º¸·Á¸é `%s --help' ÇϽʽÿÀ.\n"
+msgid "%s: Warning: Cannot seek to %s"
+msgstr ""
+
+#: lib/paxerror.c:284
+#, fuzzy, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: `%s'¿¡ ´ëÇÑ ±âÈ£¸µÅ©¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù"
+
+#: lib/paxerror.c:349
+#, fuzzy, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: %d ¹ÙÀÌÆ®(%d ¹ÙÀÌÆ® Áß)¸¸ ½è½À´Ï´Ù"
+msgstr[1] "%s: %d ¹ÙÀÌÆ®(%d ¹ÙÀÌÆ® Áß)¸¸ ½è½À´Ï´Ù"
+
+#
+#: lib/paxnames.c:155
+#, fuzzy, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Àý´ë ¸µÅ©µé¿¡¼­ ¾Õ¿¡ ºÙÀº `/'¸¦ Á¦°ÅÇÔ"
+
+#
+#: lib/paxnames.c:156
+#, fuzzy, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Àý´ë ¸µÅ©µé¿¡¼­ ¾Õ¿¡ ºÙÀº `/'¸¦ Á¦°ÅÇÔ"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr ""
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr ""
 
-#: rmt/rmt.c:308
+#
+#: lib/rtapelib.c:299
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: ¾µ ¼ö ¾ø´Â ¼­ºñ½º"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "Ç¥ÁØÀÔ·Â"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "Ç¥ÁØÃâ·Â"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
+#
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "¿ø°Ý ¼ÐÀ» ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
 msgstr ""
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:419
+#, fuzzy
+msgid "Invalid seek direction"
+msgstr "¿É¼Ç¿¡ ºÎÀûÀýÇÑ ¸ðµå°¡ ÁÖ¾îÁü"
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "ºÎÀûÀýÇÑ ³¯Â¥ Çü½Ä `%s'"
+
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr ""
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "¿É¼Ç¿¡ ºÎÀûÀýÇÑ ¼ÒÀ¯ÀÚ°¡ ÁÖ¾îÁü"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+msgid "Byte count out of range"
+msgstr ""
+
+#
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
+msgstr "rmtd: À߸øµÈ eof\n"
+
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "record_size·Î ºÎÀûÀýÇÑ °ª"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "¾ÆÄ«À̺꿡 ¿¹±âÄ¡ ¾ÊÀº EOF"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr ""
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr ""
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
 msgstr ""
 
 #
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
-msgstr "rmtd: À߸øµÈ eof\n"
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "%s¸¦ ¿­ ¼ö ¾ø½À´Ï´Ù"
 
-#
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "À߸øµÈ ÆÄÀÏ ³¡"
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr ""
 
 #
-#: rmt/rmt.c:672
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "¾µ¸ð¾ø´Â ¸í·É"
 
 #
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "ÀÌ°ÍÀº tar ¾ÆÄ«À̺êó·³ º¸ÀÌÁö ¾Ê½À´Ï´Ù"
 
 #
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 #, fuzzy
 msgid "Total bytes written"
 msgstr "ÃÑ ¾²¿©Áø ¹ÙÀÌÆ®: "
 
 #
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 #, fuzzy
 msgid "Total bytes read"
 msgstr "ÃÑ ¾²¿©Áø ¹ÙÀÌÆ®: "
 
 #
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, fuzzy, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "ÃÑ ¾²¿©Áø ¹ÙÀÌÆ®: "
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr ""
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "record_size·Î ºÎÀûÀýÇÑ °ª"
 
 #
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "¾ÆÄ«À̺ê À̸§ÀÌ ÁÖ¾îÁöÁö ¾Ê¾Ò½À´Ï´Ù"
 
 #
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Ç¥ÁØÀÔ/Ãâ·Â ¾ÆÄ«À̺긦 °ËÁõÇÒ ¼ö ¾ø½À´Ï´Ù"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr ""
 
 #
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "¾ÐÃàµÈ ¾ÆÄ«À̺긦 °»½ÅÇÒ ¼ö ¾ø½À´Ï´Ù"
 
 #
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Å×ÀÌÇÁÀÇ ½ÃÀÛ ºÎºÐ¿¡¼­ Áö±Ý Á¾·áÇÔ"
 
 #
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "¿À·ù°¡ ³Ê¹« ¸¹¾Æ¼­ Á¾·áÇÕ´Ï´Ù"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, fuzzy, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "·¹ÄÚµå Å©±â = %d ºí·°"
 msgstr[1] "·¹ÄÚµå Å©±â = %d ºí·°"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr ""
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr ""
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr ""
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr ""
 
 #
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, fuzzy, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "º¼·ý #%d(%s¸¦ À§ÇÑ)¸¦ ÁغñÇÏ°í ¸®ÅÏÀ» Ä¡¼¼¿ä: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "»ç¿ëÀÚÀÇ ÀÀ´äÀÌ ÇÊ¿äÇÑ °÷¿¡ EOF°¡ ÀÖÀ½"
 
 #
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "°æ°í: ¾ÆÄ«À̺갡 ºÒ¿ÏÀüÇÕ´Ï´Ù"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, fuzzy, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -683,143 +733,143 @@ msgstr ""
 " !          ¼­ºê¼ÐÀ» ½ÇÇàÇÕ´Ï´Ù\n"
 " ?          ÀÌ ¸ñ·ÏÀ» ÀμâÇÕ´Ï´Ù\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr ""
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr ""
 
 #
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "»õ º¼·ýÀÌ ¾Æ´Ô; Á¾·á.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr ""
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr ""
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr ""
 
 #
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, fuzzy, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s´Â ÀÌ º¼·ý¿¡ ¿¬¼ÓµÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù"
 
 #
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s´Â ÀÌ º¼·ý¿¡ ¿¬¼ÓµÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù"
 
 #
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, fuzzy, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s´Â À߸øµÈ Å©±âÀÔ´Ï´Ù (%ld != %ld + %ld)"
 
 #
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, fuzzy, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "ÀÌ º¼·ýÀº ¼ø¼­¸¦ ¹þ¾î³µ½À´Ï´Ù"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, fuzzy, c-format
 msgid "Archive not labeled to match %s"
 msgstr "`%s'¿Í ÀÏÄ¡Çϵµ·Ï ¶óº§ÀÌ ºÙÁö ¾ÊÀº ¾ÆÄ«À̺ê"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, fuzzy, c-format
 msgid "Volume %s does not match %s"
 msgstr "º¼·ý `%s'°¡ `%s'¿Í ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
 msgstr ""
 
 #
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 #, fuzzy
 msgid "write did not end on a block boundary"
 msgstr "ºí·° °æ°è°¡ ¾Æ´Ñ ºÎºÐ¿¡¼­ ¾ÆÄ«À̺ê %sÀÇ EOF °ËÃâ"
 
 #
-#: src/compare.c:96
+#: src/compare.c:95
 #, fuzzy, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "%d ¹ÙÀÌÆ®(%ld ¹ÙÀÌÆ® Áß)¸¸ ÀÐÀ» ¼ö ÀÖ½À´Ï´Ù"
 msgstr[1] "%d ¹ÙÀÌÆ®(%ld ¹ÙÀÌÆ® Áß)¸¸ ÀÐÀ» ¼ö ÀÖ½À´Ï´Ù"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 #, fuzzy
 msgid "Contents differ"
 msgstr "¸ðµå°¡ ´Ù¸¨´Ï´Ù"
 
 #
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "¾ÆÄ«À̺꿡 ¿¹±âÄ¡ ¾ÊÀº EOF"
 
 #
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 #, fuzzy
 msgid "File type differs"
 msgstr "Å©±â°¡ ´Ù¸¨´Ï´Ù"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "¸ðµå°¡ ´Ù¸¨´Ï´Ù"
 
 #
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "uid°¡ ´Ù¸¨´Ï´Ù"
 
 #
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "gid°¡ ´Ù¸¨´Ï´Ù"
 
 #
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "º¯°æ ½Ã°¢ÀÌ ´Ù¸¨´Ï´Ù"
 
 #
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Å©±â°¡ ´Ù¸¨´Ï´Ù"
 
 #
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "%s¿¡ ¿¬°áµÇÁö ¾ÊÀ½"
 
 #
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "±âÈ£¸µÅ©°¡ ´Ù¸¨´Ï´Ù"
 
 #
-#: src/compare.c:322
+#: src/compare.c:321
 #, fuzzy
 msgid "Device number differs"
 msgstr "ÀåÄ¡ ¹øÈ£°¡ ¹Ù²î¾úÀ½"
@@ -845,34 +895,34 @@ msgid "Verification may fail to locate original files."
 msgstr ""
 
 #
-#: src/compare.c:596
+#: src/compare.c:599
 #, fuzzy, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "°ËÁõ ½ÇÆÐ: %d°³ÀÇ ºÎÀûÀýÇÑ Çì´õ°¡ °ËÃâµÊ"
 msgstr[1] "°ËÁõ ½ÇÆÐ: %d°³ÀÇ ºÎÀûÀýÇÑ Çì´õ°¡ °ËÃâµÊ"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr ""
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr ""
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr ""
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr ""
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr ""
 
@@ -894,7 +944,7 @@ msgid "%s: link name is too long; not dumped"
 msgstr "%s: º¯°æµÇÁö ¾Ê¾Ò½À´Ï´Ù; ´ýÇÁµÇÁö ¾ÊÀ½"
 
 #
-#: src/create.c:1076
+#: src/create.c:1078
 #, fuzzy, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
@@ -902,470 +952,471 @@ msgstr[0] "%s: 
 msgstr[1] "%s: ÆÄÀÏÀÌ %d ¹ÙÀÌÆ® ÁÙ¾îµë, (¿Í¿ì!)"
 
 #
-#: src/create.c:1177
+#: src/create.c:1175
 #, fuzzy, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: ´Ù¸¥ ÆÄÀϽýºÅÛ »ó¿¡ ÀÖÀ½; ´ýÇÁµÇÁö ¾ÊÀ½"
 
 #
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 #, fuzzy
 msgid "contents not dumped"
 msgstr " (ÄÚ¾î Ãâ·ÂµÊ)"
 
 #
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: ¾Ë ¼ö ¾ø´Â ÆÄÀϠŸÀÔ; ÆÄÀÏÀÌ ¹«½ÃµÊ"
 
 #
-#: src/create.c:1464
+#: src/create.c:1472
 #, fuzzy, c-format
-msgid "Missing links to %s.\n"
+msgid "Missing links to %s."
 msgstr " %s·Î ¸µÅ©\n"
 
 #
-#: src/create.c:1535
+#: src/create.c:1543
 #, fuzzy, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: º¯°æµÇÁö ¾Ê¾Ò½À´Ï´Ù; ´ýÇÁµÇÁö ¾ÊÀ½"
 
 #
-#: src/create.c:1543
+#: src/create.c:1552
 #, fuzzy, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s´Â ¾ÆÄ«À̺êÀÔ´Ï´Ù; ´ýÇÁµÇÁö ¾ÊÀ½"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr ""
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr ""
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr ""
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr ""
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr ""
 
 #
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "´ÙÀ½ Çì´õ·Î °Ç³Ê ¶Ü"
 
 #
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "¾ÆÄ«À̺꿡¼­ ºñÇì´õ ºÎºÐÀ» Á¦°ÅÇÔ"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr ""
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr ""
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr ""
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr ""
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "¿¬¼ÓµÇ¾î Àִ ÆÄÀÏÀ» ÀϹݠÆÄÀϷΠÃßÃâÇÔ"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "±âÈ£ ¸µÅ©¸¦ Çϵ堸µÅ©·Î ÃßÃâÇÏ°í ÀÖ½À´Ï´Ù"
 
-#
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "%s¸¦ Àд Áß\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, fuzzy, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "`%s'¸¦ ÃßÃâÇÒ ¼ö ¾ø½À´Ï´Ù -- ÀÌ ÆÄÀÏÀº ´Ù¸¥ º¼·ý¿¡ ¿¬¼ÓµÇ¾î ÀÖ½À´Ï´Ù"
 
 #
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 #, fuzzy
 msgid "Unexpected long name header"
 msgstr "¾ÆÄ«À̺ê ÆÄÀÏ¿¡ ¿¹±âÄ¡ ¾ÊÀº EOF"
 
 #
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, fuzzy, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: ¾Ë ¼ö ¾ø´Â ÆÄÀϠŸÀÔ; ÆÄÀÏÀÌ ¹«½ÃµÊ"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr ""
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: ÀÌ ÆÄÀÏÀ» ¹é¾÷ÇÒ ¼ö ¾ø¾ú½À´Ï´Ù"
 
 #
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "%s¸¦ %s·Î À̸§À» ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr ""
-
 #
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, fuzzy, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s µð·ºÅ丮´Â À̸§ÀÌ ¹Ù²î¾ú½À´Ï´Ù"
 
 #
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, fuzzy, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s µð·ºÅ丮´Â À̸§ÀÌ ¹Ù²î¾ú½À´Ï´Ù"
 
 #
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, fuzzy, c-format
 msgid "%s: Directory is new"
 msgstr "%s´Â »õ µð·ºÅ丮ÀÔ´Ï´Ù"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr ""
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 #, fuzzy
 msgid "Invalid modification time (seconds)"
 msgstr "¿É¼Ç¿¡ ºÎÀûÀýÇÑ ¸ðµå°¡ ÁÖ¾îÁü"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr ""
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr ""
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr ""
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr ""
 
 #
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 #, fuzzy
 msgid "Read error in snapshot file"
 msgstr "%s¿¡¼­ Àб⠿À·ù"
 
 #
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 #, fuzzy
 msgid "Unexpected EOF in snapshot file"
 msgstr "¾ÆÄ«À̺ê ÆÄÀÏ¿¡ ¿¹±âÄ¡ ¾ÊÀº EOF"
 
 #
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 #, fuzzy
 msgid "Unexpected field value in snapshot file"
 msgstr "¾ÆÄ«À̺ê ÆÄÀÏ¿¡ ¿¹±âÄ¡ ¾ÊÀº EOF"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr ""
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr ""
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr ""
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr ""
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr ""
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr ""
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr ""
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr ""
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr ""
 
 #
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, fuzzy, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "%s·Î µð·ºÅ丮¸¦ ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr ""
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr ""
 
 #
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: %s¸¦ Áö¿ò\n"
 
 #
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, fuzzy, c-format
 msgid "%s: Cannot remove"
 msgstr "%s¸¦ Áö¿ï ¼ö ¾ø½À´Ï´Ù"
 
 #
-#: src/list.c:113
+#: src/list.c:115
 #, fuzzy, c-format
 msgid "%s: Omitting"
 msgstr "%s¸¦ »ý·«"
 
-#: src/list.c:131
+#: src/list.c:133
 #, fuzzy, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "ºí·° %10ld: ** NUL·Î µÈ ºí·° **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, fuzzy, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "ºí·° %10ld: ** ÆÄÀÏÀÇ ³¡ **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, fuzzy, c-format
 msgid "block %s: "
 msgstr "ºí·° %10ld: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr ""
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr ""
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr ""
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr ""
 
 #
-#: src/list.c:803
+#: src/list.c:821
 #, fuzzy, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "ÀÌ º¼·ýÀº ¼ø¼­¸¦ ¹þ¾î³µ½À´Ï´Ù"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr ""
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr ""
 
 #
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " %s·Î ¸µÅ©\n"
 
 #
-#: src/list.c:1234
+#: src/list.c:1253
 #, fuzzy, c-format
 msgid " unknown file type %s\n"
 msgstr " ¾Ë ¼ö ¾ø´Â ÆÄÀϠŸÀÔ `%c'\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr ""
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr ""
 
 #
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--º¼·ý Çì´õ--\n"
 
 #
-#: src/list.c:1268
+#: src/list.c:1287
 #, fuzzy, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--%ld ¹ÙÀÌÆ® Â°¿¡ °è¼ÓµÊ--\n"
 
 #
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "µð·ºÅ丮¸¦ ¸¸µå´Â Áß:"
 
 #
-#: src/misc.c:456
+#: src/misc.c:502
 #, fuzzy, c-format
 msgid "Renaming %s to %s\n"
 msgstr "%s¸¦ %s·Î À̸§ ¹Ù²Þ"
 
 #
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, fuzzy, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s¸¦ %s·Î À̸§À» ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
 
 #
-#: src/misc.c:488
+#: src/misc.c:534
 #, fuzzy, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "%s¸¦ %s·Î À̸§ ¹Ù²Þ"
 
 #
-#: src/misc.c:615
+#: src/misc.c:669
 #, fuzzy
 msgid "Cannot save working directory"
 msgstr "%s·Î µð·ºÅ丮¸¦ ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
 
 #
-#: src/misc.c:621
+#: src/misc.c:675
 #, fuzzy
 msgid "Cannot change working directory"
 msgstr "%s·Î µð·ºÅ丮¸¦ ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
 
-#: src/misc.c:711
-msgid "child process"
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
 msgstr ""
 
-#: src/misc.c:720
-msgid "interprocess channel"
+#
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s µð·ºÅ丮´Â À̸§ÀÌ ¹Ù²î¾ú½À´Ï´Ù"
+
+#: src/misc.c:795
+msgid "child process"
 msgstr ""
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/misc.c:804
+msgid "interprocess channel"
 msgstr ""
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:601
+msgid "Pattern matching characters used in file names"
 msgstr ""
 
-#: src/names.c:597
-msgid "suppress this warning."
+#: src/names.c:603
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 
 #
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: ¾ÆÄ«À̺꿡 ¾øÀ½"
 
 #
-#: src/names.c:615
+#: src/names.c:622
 #, fuzzy, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: ¾ÆÄ«À̺꿡 ¾øÀ½"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "`-%s'°ú `-%s' ¿É¼ÇÀº ¸ðµÎ Ç¥ÁØ ÀÔ·ÂÀÌ ÇÊ¿äÇÕ´Ï´Ù"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, fuzzy, c-format
 msgid "%s: Invalid archive format"
 msgstr "ºÎÀûÀýÇÑ ³¯Â¥ Çü½Ä `%s'"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr ""
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
 msgstr ""
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1376,7 +1427,7 @@ msgid ""
 "  tar -xf archive.tar          # Extract all files from archive.tar.\n"
 msgstr ""
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1388,88 +1439,81 @@ msgid ""
 "  never, simple   always make simple backups\n"
 msgstr ""
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr ""
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr ""
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr ""
 
 #
-#: src/tar.c:378
+#: src/tar.c:394
 #, fuzzy
 msgid "create a new archive"
 msgstr "¾ÆÄ«À̺꿡 ¿¹±âÄ¡ ¾ÊÀº EOF"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr ""
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr ""
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr ""
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr ""
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr ""
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr ""
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr ""
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr ""
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr ""
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr ""
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:408
-msgid "do not exit with nonzero on unreadable files"
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
 msgstr ""
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
+#: src/tar.c:426
+msgid "do not exit with nonzero on unreadable files"
 msgstr ""
 
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1477,583 +1521,572 @@ msgid ""
 "command line or via the -T option; NUMBER defaults to 1"
 msgstr ""
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr ""
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr ""
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr ""
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr ""
 
 #
-#: src/tar.c:432
+#: src/tar.c:452
 #, fuzzy
 msgid "remove files after adding them to the archive"
 msgstr "¾ÆÄ«À̺꿡 Àִ À̸§µé¿¡¼­ µå¶óÀ̺ê ÁöÁ¤¹®À» Á¦°ÅÇÔ"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr ""
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr ""
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr ""
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr ""
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr ""
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr ""
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr ""
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr ""
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr ""
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr ""
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr ""
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr ""
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr ""
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr ""
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr ""
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr ""
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr ""
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
 "place (METHOD='system')"
 msgstr ""
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr ""
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr ""
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
 msgstr ""
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr ""
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
 msgstr ""
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr ""
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr ""
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr ""
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr ""
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr ""
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr ""
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr ""
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr ""
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr ""
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr ""
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr ""
 
 #
-#: src/tar.c:536
+#: src/tar.c:556
 #, fuzzy
 msgid "create/list/extract multi-volume archive"
 msgstr "´ÙÁß-º¼·ý ¾ÆÄ«À̺긦 °ËÁõÇÒ ¼ö ¾ø½À´Ï´Ù"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr ""
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr ""
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr ""
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr ""
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr ""
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr ""
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr ""
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr ""
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr ""
 
 #
-#: src/tar.c:562
+#: src/tar.c:582
 #, fuzzy
 msgid "Archive format selection:"
 msgstr "Ç¥ÁØÀԷ¿¡ ´ëÇÑ ¾ÆÄ«À̺ê"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr ""
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr ""
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr ""
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr ""
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr ""
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr ""
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr ""
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr ""
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr ""
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr ""
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr ""
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr ""
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr ""
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr ""
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
 msgstr ""
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Çò°¥¸®´Â ¾ÐÃ࠿ɼÇ"
 
-#: src/tar.c:595
+#: src/tar.c:615
 #, fuzzy
 msgid "use archive suffix to determine the compression program"
 msgstr "¾ÐÃà ÇÁ·Î±×·¥¿¡ ¾µ ¼ö ¾ø½À´Ï´Ù"
 
-#: src/tar.c:597
+#: src/tar.c:617
 #, fuzzy
 msgid "do not use archive suffix to determine the compression program"
 msgstr "¾ÐÃà ÇÁ·Î±×·¥¿¡ ¾µ ¼ö ¾ø½À´Ï´Ù"
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr ""
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr ""
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr ""
-
-#: src/tar.c:609
-msgid "filter the archive through lzma"
-msgstr ""
-
-#
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "%s´Â ¾ÆÄ«À̺êÀÔ´Ï´Ù; ´ýÇÁµÇÁö ¾ÊÀ½"
-
-#
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "%s´Â ¾ÆÄ«À̺êÀÔ´Ï´Ù; ´ýÇÁµÇÁö ¾ÊÀ½"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr ""
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr ""
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr ""
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr ""
 
 #
-#: src/tar.c:625
+#: src/tar.c:641
 #, fuzzy
 msgid "change to directory DIR"
 msgstr "%s·Î µð·ºÅ丮¸¦ ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr ""
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr ""
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr ""
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr ""
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr ""
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr ""
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr ""
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr ""
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr ""
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr ""
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr ""
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr ""
 
 #
-#: src/tar.c:664
+#: src/tar.c:682
 #, fuzzy
 msgid "don't strip leading `/'s from file names"
 msgstr "Àý´ë ¸µÅ©µé¿¡¼­ ¾Õ¿¡ ºÙÀº `/'¸¦ Á¦°ÅÇÔ"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr ""
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr ""
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr ""
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr ""
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr ""
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr ""
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr ""
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
 msgstr ""
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr ""
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr ""
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr ""
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr ""
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr ""
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr ""
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr ""
 
-#: src/tar.c:710
+#: src/tar.c:728
 #, fuzzy
 msgid "wildcards do not match `/'"
 msgstr "º¼·ý `%s'°¡ `%s'¿Í ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr ""
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr ""
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr ""
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr ""
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr ""
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2061,227 +2094,242 @@ msgid ""
 "accepted"
 msgstr ""
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr ""
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr ""
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr ""
 
 #
-#: src/tar.c:741
+#: src/tar.c:761
 #, fuzzy
 msgid "ask for confirmation for every action"
 msgstr "»ç¿ëÀÚÀÇ È®ÀÎÀ» ÀÐÀ» ¼ö ¾ø½À´Ï´Ù"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr ""
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr ""
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr ""
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr ""
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr ""
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr ""
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr ""
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr ""
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr ""
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr ""
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "`-Acdtrux' ¿É¼Ç Áß Çϳª ÀÌ»óÀ» ÁöÁ¤Çϸ頾ȠµË´Ï´Ù"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Çò°¥¸®´Â ¾ÐÃ࠿ɼÇ"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, fuzzy, c-format
 msgid "Unknown signal name: %s"
 msgstr "¾Ë ¼ö ¾ø´Â ÆÐÅÏ `%s'"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr ""
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr ""
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr ""
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr ""
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr ""
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, c-format
+msgid "filter the archive through %s"
+msgstr ""
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr ""
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
 msgstr ""
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr ""
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr ""
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr ""
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr ""
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr ""
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr ""
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr ""
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
-msgstr ""
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
+msgstr "¿É¼Ç¿¡ ºÎÀûÀýÇÑ ¼ÒÀ¯ÀÚ°¡ ÁÖ¾îÁü"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "¿É¼Ç¿¡ ºÎÀûÀýÇÑ ¸ðµå°¡ ÁÖ¾îÁü"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr ""
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 #, fuzzy
 msgid "Invalid owner"
 msgstr "¿É¼Ç¿¡ ºÎÀûÀýÇÑ ¼ÒÀ¯ÀÚ°¡ ÁÖ¾îÁü"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 #, fuzzy
 msgid "Invalid record size"
 msgstr "record_size·Î ºÎÀûÀýÇÑ °ª"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "·¹ÄÚµå Å©±â´Â %dÀÇ ¹è¼ö°¡ µÇ¾î¾ß ÇÕ´Ï´Ù."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr ""
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr ""
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr ""
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, fuzzy, c-format
 msgid "Unknown density: `%c'"
 msgstr "¾Ë ¼ö ¾ø´Â ÆÐÅÏ `%s'"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "`-[0-7][lmh]' ¿É¼ÇÀº ÀÌ tar¿¡¼± Áö¿øµÇÁö ¾Ê½À´Ï´Ù"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr ""
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "¿À·¡µÈ ¿É¼Ç `%c'´Â Àμö°¡ ÇÊ¿äÇÕ´Ï´Ù."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr ""
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr ""
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 #, fuzzy
 msgid "Multiple archive files require `-M' option"
 msgstr "´ÙÁß ¾ÆÄ«À̺ê ÆÄÀÏÀº `-M' ¿É¼ÇÀÌ ÇÊ¿äÇÕ´Ï´Ù"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr ""
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr ""
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
@@ -2289,51 +2337,52 @@ msgstr[0] ""
 msgstr[1] ""
 
 #
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "´ÙÁß-º¼·ý ¾ÆÄ«À̺긦 °ËÁõÇÒ ¼ö ¾ø½À´Ï´Ù"
 
 #
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "¾ÐÃàµÈ ¾ÆÄ«À̺긦 °ËÁõÇÒ ¼ö ¾ø½À´Ï´Ù"
 
 #
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "¾ÐÃàµÈ ´ÙÁß-º¼·ý ¾ÆÄ«À̺긦 »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù"
 
 #
-#: src/tar.c:2319
+#: src/tar.c:2431
 #, fuzzy
 msgid "Cannot concatenate compressed archives"
 msgstr "¾ÐÃàµÈ ¾ÆÄ«À̺긦 °»½ÅÇÒ ¼ö ¾ø½À´Ï´Ù"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr ""
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr ""
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "`-Aru' ¿É¼ÇÀº `-f -'°ú µ¿½Ã¿¡ ¾µ ¼ö ¾ø½À´Ï´Ù"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "`-Acdtrux' ¿É¼Çµé Áß Çϳª¸¦ ÁöÁ¤ÇؾߠÇÕ´Ï´Ù"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2346,79 +2395,83 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: ÆÄÀÏÀÌ %d ¹ÙÀÌÆ® ÁÙ¾îµë, (¿Í¿ì!)"
 msgstr[1] "%s: ÆÄÀÏÀÌ %d ¹ÙÀÌÆ® ÁÙ¾îµë, (¿Í¿ì!)"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr ""
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+msgid "Time stamp is out of allowed range"
+msgstr ""
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr ""
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr ""
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr ""
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr ""
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr ""
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr ""
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr ""
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr ""
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr ""
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr ""
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr ""
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr ""
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr ""
@@ -2461,235 +2514,268 @@ msgstr "
 msgid "Read checkpoint %u"
 msgstr "°Ë»çÁöÁ¡ %d¸¦ ÀÐÀ½"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 #, fuzzy
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
 msgstr "GNU tar ½ÃÇè µµ±¸¿ë µ¥ÀÌÅÍ ÆÄÀÏÀ» »ý¼ºÇÕ´Ï´Ù.\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 #, fuzzy
 msgid "File creation options:"
 msgstr "Çò°¥¸®´Â ¾ÐÃ࠿ɼÇ"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr ""
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr ""
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr ""
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr ""
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr ""
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr ""
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr ""
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr ""
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr ""
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr ""
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr ""
+"\n"
+"»ç¿ë¹ý: %s [¿É¼Ç]...\n"
+"\n"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr ""
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 #, fuzzy
 msgid "Update the access and modification times of FILE"
 msgstr "%s: Á¢±Ù ½Ã°¢°ú ¼öÁ¤ ½Ã°¢À» ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr ""
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, fuzzy, c-format
 msgid "Invalid size: %s"
 msgstr "ºÎÀûÀýÇÑ ³¯Â¥ Çü½Ä `%s'"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr ""
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr ""
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr ""
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr ""
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, fuzzy, c-format
 msgid "Unknown date format"
 msgstr "¾Ë ¼ö ¾ø´Â ½Ã½ºÅÛ ¿À·ù"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr ""
 
 #
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, fuzzy, c-format
 msgid "cannot open `%s'"
 msgstr "%s¸¦ ¿­ ¼ö ¾ø½À´Ï´Ù"
 
 #
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 #, fuzzy
 msgid "cannot seek"
 msgstr "%s¸¦ ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr ""
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr ""
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, fuzzy, c-format
 msgid "Unknown field `%s'"
 msgstr "¾Ë ¼ö ¾ø´Â ÆÐÅÏ `%s'"
 
 #
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, fuzzy, c-format
 msgid "cannot set time on `%s'"
 msgstr "%s¸¦ statÇÒ ¼ö ¾ø½À´Ï´Ù"
 
-#: tests/genfile.c:805
+#
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "%s¸¦ ¿­ ¼ö ¾ø½À´Ï´Ù"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr ""
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr ""
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr ""
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr ""
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr ""
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr ""
+#
+#~ msgid "Reading %s\n"
+#~ msgstr "%s¸¦ Àд Áß\n"
+
+#
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: ¹öÆÛ °ø°£À» ÇÒ´çÇÒ ¼ö ¾ø½À´Ï´Ù\n"
+
+#
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "¹öÆÛ °ø°£À» ÇÒ´çÇÒ ¼ö ¾ø½À´Ï´Ù"
+
+#
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "´õ ¸¹Àº Á¤º¸¸¦ º¸·Á¸é `%s --help' ÇϽʽÿÀ.\n"
+
+#
+#~ msgid "Premature end of file"
+#~ msgstr "À߸øµÈ ÆÄÀÏ ³¡"
 
 #~ msgid "Cannot close file #%d"
 #~ msgstr "ÆÄÀÏ #%d¸¦ ´ÝÀ» ¼ö ¾ø½À´Ï´Ù"
index 74b9bb036a78cfaf8edcd17130886435bde23d42..e53575d1132e0a05e429d7d250d12a2987d8f025 100644 (file)
Binary files a/po/ky.gmo and b/po/ky.gmo differ
index 791270fed836bde3b317641fa48d1668b505d81b..1ce343efb3fd55fbc2152b900df9de5480c9e6f6 100644 (file)
--- a/po/ky.po
+++ b/po/ky.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tar 1.18\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
 "PO-Revision-Date: 2007-09-01 01:06+0100\n"
 "Last-Translator: Azilet Beishenaliev <aziletb@gmail.com>\n"
 "Language-Team: Kirghiz <i18n-team-ky-kyrgyz@lists.sourceforge.net>\n"
@@ -19,48 +19,48 @@ msgstr ""
 "X-Poedit-Country: KYRGYZSTAN\n"
 "X-Poedit-SourceCharset: utf-8\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "%2$s үчүн %1$s аргументи жарабайт"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "%2$s үчүн %1$s аргументи так эмес"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Жарактуу аргументтер мындай:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: %s, %s'тен кичине же барабар"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: ARGP_HELP_FMT параметринин мааниси болуш керек"
 
 # положительный кыргызча кандайле?
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: ARGP_HELP_FMT параметринин мааниси оң болуш керек"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: ARGP_HELP_FMT параметри белгисиз"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "ARGP_HELP_FMT параметри бузук: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -69,239 +69,144 @@ msgstr ""
 "жараша жазылса, кыска жазылган опциялар менен да сөзсүз түрдө же тилекке "
 "жараша жазылат."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Колдонулушу:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr "  же: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [ОПЦИЯ...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Толук маалымат үчүн `%s --help' же `%s --usage' деп жазгыла.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "Каталарды бул жерге билдиргиле %s.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Белгисиз система катасы"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "Бул жардам тизмесин көрсөтөт"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "Колдонуу жөнүндө кыска маалымат көрсөтөт"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "АТЫ"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "Программага ат кой"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "СЕК"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "СЕК секунда күтүңүз (алдынала - 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "программанын версиясын көрсөтөт"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(ПРОГРАММАДА КАТА) Версиясы белгисиз!?"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: Аргументтердин саны көп\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr "(ПРОГРАММАДА КАТА) Опция билиниш керек болчу!?"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr ""
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: `%s' опциясы так эмес\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: `--%s' опциясы менен аргумент колдонулбайт\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: `%c%s' опциясы менен аргумент колдонулбайт\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: `%s' опциясы менен аргумент болуш керек\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: бул опция түшүнүксүз `--%s'\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: бул опция түшүнүксүз `%c%s'\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: мындай опция колдонулбайт -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: жараксыз опция -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: бул опциянын аргументи болуш керек -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: `-W %s' опциясы так эмес\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: `-W %s' опциясы менен аргумент колдонулбайт\n"
 
 # Памятты эмне дейбиз яя? ;)
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "Память жетпей калды"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, fuzzy, c-format
 msgid "unable to record current working directory"
 msgstr "Учурдагы папка алмаштырылбайтат"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, fuzzy, c-format
 msgid "failed to return to initial working directory"
 msgstr "Учурдагы папка сакталбайтат"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: %s кылалбайтат"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Эскертүү: %s кылалбайтат"
-
-#  mode: права доступа, муну укук абалы деп койдум
-#  жакшыраак вариант болсо алмаштырыш керек
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Укук абалын %s түрүнө алмаштыралбай калды"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Ээлик uid = %lu, gid = %lu деп алмашпай койду"
-
-#  hard link'ти түз шилтеме дебатам
-#  symbolic болсо символикалык болот
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: %s'ке түз шилтеме болбойтат"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%1$s: %3$lu байт окуу учурунда %2$s адресинде ката байт окуду"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] ""
-"%1$s: Эскертүү: %3$lu байт окуу учурунда %2$s адресинде ката байт окуду"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: %s орунуна баралбай жатат"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Эскертүү: %s орунуна баралбай жатат"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: %s'ке символикалык шилтеме жасалбайтат"
-
-#  %s: жалпы %2$lu байттан %1$lu байт гана жазылды
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%1$s: жалпы %3$lu байттан %2$lu байт гана жазылды"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Мүчө аттарынын башындагы `%s' алынып салды"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Түз шилтемелер көрсөтүп турган файлдардын башындагы `%s' алынып салды"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Бош болгон мүчө аттын ордуна `.' коюлду"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Түз шилтеме көрсөтүп турган бош файлдын ордуна `.' коюлду"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -315,17 +220,17 @@ msgstr "Түз шилтеме көрсөтүп турган бош файлды
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "„"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "“"
 
@@ -336,7 +241,7 @@ msgstr "“"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[оО]"
 
@@ -347,38 +252,28 @@ msgstr "^[оО]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[жЖ]"
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: сервис жок"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "stdin"
-
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "stdout"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Алыстагы команда процессору иштетилген жок"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -389,19 +284,19 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr ""
@@ -409,7 +304,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -419,7 +314,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -429,7 +324,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -439,7 +334,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -449,7 +344,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -460,7 +355,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -471,7 +366,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -483,179 +378,329 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
-#, c-format
+#: gnu/version-etc.c:247
+#, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
+msgstr "Каталарды бул жерге билдиргиле %s.\n"
+
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
 "\n"
 "Каталарды бул жерге билдиргиле <%s>.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-# Input string дегендин ордуна жакшы нерсе билсеңер алмаштырсаңар болот
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "Жазылган сүйлөм өтө узун"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+msgstr ""
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: %s кылалбайтат"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Эскертүү: %s кылалбайтат"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "Номердин жазуусунда ката бар"
+#  mode: права доступа, муну укук абалы деп койдум
+#  жакшыраак вариант болсо алмаштырыш керек
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Укук абалын %s түрүнө алмаштыралбай калды"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Буфер үчүн жер алыналган жок\n"
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Ээлик uid = %lu, gid = %lu деп алмашпай койду"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr " Буфер үчүн жер алыналган жок"
+#  hard link'ти түз шилтеме дебатам
+#  symbolic болсо символикалык болот
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: %s'ке түз шилтеме болбойтат"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:179 lib/paxerror.c:211
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Толук маалымат үчүн `%s --help' деп жазгыла.\n"
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%1$s: %3$lu байт окуу учурунда %2$s адресинде ката байт окуду"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:192
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] ""
+"%1$s: Эскертүү: %3$lu байт окуу учурунда %2$s адресинде ката байт окуду"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: %s орунуна баралбай жатат"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Эскертүү: %s орунуна баралбай жатат"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: %s'ке символикалык шилтеме жасалбайтат"
+
+#  %s: жалпы %2$lu байттан %1$lu байт гана жазылды
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%1$s: жалпы %3$lu байттан %2$lu байт гана жазылды"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Мүчө аттарынын башындагы `%s' алынып салды"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Түз шилтемелер көрсөтүп турган файлдардын башындагы `%s' алынып салды"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Бош болгон мүчө аттын ордуна `.' коюлду"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Түз шилтеме көрсөтүп турган бош файлдын ордуна `.' коюлду"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: сервис жок"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "stdin"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "stdout"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Колдонулушу: %s [ОПЦИЯ]\n"
-"Башка процесстен командалрды алып \"магниттик лентада сактоочту\" колдон.\n"
-"\n"
-"  --version  Версия маалыматын көрсөт.\n"
-"  --help  Бул маалыматты көрсөт.\n"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "Издөө даражасы туура эмес"
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Алыстагы команда процессору иштетилген жок"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Издөө жолу диапазондун тышында"
+
+#: rmt/rmt.c:419
+#, fuzzy
+msgid "Invalid seek direction"
+msgstr "Опцияда жарабаган укук абалы берилди"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Жараксыз көлөм: %s"
+
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Издөө даражасы диапазондун тышында"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Издөө жолу диапазондун тышында"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Лентанын узундугу жараксыз"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Издөө даражасы диапазондун тышында"
+
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: Файлдын соңу эрте келди\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Файлдын соңу эрте келди"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "Негизги иштөө абалы:"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Архивде күтүлбөгөн жерде файлдын соңу бар"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "N"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "ФАЙЛ"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "`%s' ачылбай жатат"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "аргументтердин саны көп"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Туура эмес команда"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Бул tar-архиви эмес окшойт"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Жазылган жалпы байт"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "Алынган жалпы байт"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Өчүрүлгөн жалпы байт: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(канал)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "record_size мааниси жарабайт"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Архивдин аты берилген жок"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Архивдин stdin/stdout текшерүүсү болбой жатат"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "Архив кысыштырылган абалда. %s опциясын колдонгула"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Кысыштырылган архивдерди жаңырталбай калды"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Лентанын башына келди, иш бүттү"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Өтө көп ката бар, иш бүттү"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Маалыматтын көлөмү = %lu блок"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Архивде түз жайлашпаган блок бар (%lu байт)"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr "Архивдеги файл өчпөй калды; архив ачылбаса -i деп колдонгула"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek маалыматтын чегинде токтогон жок"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: жараксыз том номери бар"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Томдун номери батпай калды"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "%2$s үчүн %1$d-томду даярдап Enter'ди басыңыз: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "Колдонуучудан жооп күтүбатканда файлдын соңу келип калды"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "ЭСКЕРТҮҮ: Архив толук эмес"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -666,125 +711,125 @@ msgstr ""
 " q\t\ttar программасынын ишин бүтүр\n"
 "y же Ввод\t\tИшти улант\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !             Команда строкасын ач\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?             Бул тизмени жаз\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Жаңы том жок; иш бүттү.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "Файлдын аты берилген жок. Кайра жазып көргүлө.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "Туура эмес ввод. Жардам үчүн ? жазгыла.\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "%s командасы аткарылбай калды"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s бул томдо уланса керек: башкы-маалыматта аты кыскартылыптыр"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s мунун бул томдо уландысы жок"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s көлөмү туура эмес (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, fuzzy, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Бул том иретте эмес"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Архивдин тамгасы %s менен келишпей жатат"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "%s тому %s менен келишпей жатат"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
 msgstr ""
 "%s: файлдын аты көп-томдук GNU башкы-маалымат үчүн өтө узун, кыскартылды"
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 #, fuzzy
 msgid "write did not end on a block boundary"
 msgstr "rmtlseek маалыматтын чегинде токтогон жок"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "%2$lu байттан %1$lu гана окулду"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Мазмундары окшобойт"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Архивде күтүлбөгөн жерде файлдын соңу бар"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Файл түрү окшошпойт"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Укук абалдары окшошпойт"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Uid окшошпойт"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Gid окшошпойт"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Алмаштыруу убактылары окшошпойт"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Көлөмү окшошпойт"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "%s жака шилтенген эмес"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Символикалык шилтеме окшошпойт"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Аспап номери окшошпойт"
 
@@ -806,33 +851,33 @@ msgstr "Архивдин ичинде префикстери алынган фа
 msgid "Verification may fail to locate original files."
 msgstr "Текшерүү учурунда алгачкы файлдар табылбай калышы мүмкүн."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "ТЕКШЕРҮҮ КАТАСЫ: %d жараксыз башкы маалымат табылды"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "%s болгон жерде нөлдүк блок бар"
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: мунун ичинде %s деген кэш-папка белгиси бар; %s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "%s мааниси %s диапазонунун тышында %s..%s; ордуна %s коюлат"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "%s мааниси %s диапазонунун тышында %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Терс сегиздик системасында башкы маалыматтар даярдалууда"
 
@@ -851,292 +896,278 @@ msgstr "%s: файлдын аты өтө узун (бөлүнбөйт); кошу
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: шилтеменин аты өтө узун; кошулбайт"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: Файл %s байтка азайды; нөлдөр менен толтурулат"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: файл башка файл-системасында; кошулбайт"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr "астындагылар кошулган жок"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Файлдын түрү белгисиз; файл каралбайт"
 
-#: src/create.c:1464
-#, c-format
-msgid "Missing links to %s.\n"
+#: src/create.c:1472
+#, fuzzy, c-format
+msgid "Missing links to %s."
 msgstr "%s жака шилтемелер жок.\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: файл алмашкан жок; кошулбайт"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: файл архив экен; кошулбайт"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Файл окулганча өчүрүлүп кетти"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr "папка кошулган жок"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: файлды окуу учурунда файл алмашты"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: сокет каралбайт"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: door каралбайт"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Эмики башкы-маалыматка өттү"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Архивде башкы-маалымат болбогондор өчүрүлөт"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: %s убакыт тамгасы өтө эски"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: %s убакыт тамгасы %s сек. келечекте"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Папка ачыбатканда күтүлбөгөн нерселер болду"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Папканын статусу билинелектен мурун аты алмашып кетти"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Удаа болгон файлдар жөнөкөй файл катары чыгарылып жатат"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Символикалык шилтемелерди түз шилтеме катары чыгарууга аракет кылынат"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "%s жактан окуп жатат\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Чыгарылган жок -- файл башка томдон уланып келиптир"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "Башкы-маалымат узун"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: `%c' файл түрү бүлгисиз, жөнөкөй файл катары чыгарылды"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "Азыркы %s жаңыраак же бирдей"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Бул файлдын резерв копиясы алыналбай калды"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "%s файлы %s деп алмаштыралбай калды"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Оңолбогон ката: иш бүттү "
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Папканын эски аты %s эле"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Папка алмаштырылды"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Папка жаңы"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Жараксыз убакыт тамгасы"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Алмашуу убагы туура эмес (секундалары)"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "Алмашуу убагы туура эмес (нано-секундалары)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Аспаптын номери жараксыз "
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Inode номери жараксыз"
 
 # фиелд, снэпшот дегендер кандай болот?
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "Снэпшот файлды окубатканда ото узун поле чыкты"
 
 # snapshot?
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "Снэпшот файлды окубатканда ката болду"
 
 # snapshot?
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "Снэпшот файлда күтүлбөгөн жерде файлдын соңу (EOF) бар"
 
 # фиелд кандай болот? snapshot?
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "Снэпшот файлда күтүлбөгөн поле(фиелд) бар"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "Записьтерди бөлүүчү символ жок"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "Файлдын форматы туура эмес"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr "Форматтын бул версиясы иштетиле албайт: %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr "Кошулуучу папка бузук: '%c' күтүлгөн бирок %#3o келди"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "Кошулуучу папка бузук: 'X' копиялары бар"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "Кошулуучу папка бузук: 'R' менен берилген ат бош"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "Кошулуучу папка бузук: 'T'дан мурун 'R' жок"
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "Кошулуучу папка бузук: 'T' менен берилген ат бош"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr "Кошулуучу папка бузук: '%c' күтүлгөн бирок датанын соңу келди"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr "Кошулуучу папка бузук: 'X' эч колдонулган жок"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "%s шаблонун колдонуп убактылуу жаңы папка ачылган жок"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: Папка өчүрүлгөн жок: stat иштебей койду"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: бул папка башка аспапта жайгашкан: өчүрүлбөйт"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: %s өчүрүлүп жатат\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Өчүрүлбөй жатат"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Муну аттады"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "блок %s: ** нөлдөр болгон блок **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "блок %s: ** Файлдын соңу **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "блок %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Башкы-маалыматта сан түрүндө %s болотурган жерде бош жерлер бар"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1144,147 +1175,164 @@ msgstr ""
 "экилик системадагы терси алынды"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr ""
 "Архивдин сегиздик системадагы мааниси болгон %.*s %s диапазонунун тышында"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Архивде эски түрдөгү base-64 башкы-маалымат бар"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "Архивдеги base-64 түрүндөгү %s сөзү %s диапазонунун тышында"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Архивдин base-256 мааниси %s диапазонунун тышында"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr ""
 "Архивдин ичинде %.*s бар, алардын ордунда сан түрүндө %s болушу керек эле"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Архивдин %s мааниси %s түрүнүн %s..%s диапазонунда эмес"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " %s жака шилтеме\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " белгисиз файл түрү %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Узун шилтеме--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Узун ат--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Томдун башкы-маалыматы--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--%s-байттан баштап уланды--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Жаңы папка ачылыбатат:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "%s'тин атын %s деп алмаштырды\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Аты %s деп алмаштыралбай калды"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "%s'тин атын кайра %s деп алмаштырды\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Учурдагы папка сакталбайтат"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Учурдагы папка алмаштырылбайтат"
 
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Файл окулганча өчүрүлүп кетти"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Файл окулганча өчүрүлүп кетти"
+
 #  орусчада дочерный процесс, бир процесс өз ичинен жаңы бир
 #  процесс жаратканда ошол чайлд процесс болот. Биз эмне дейбиз?
 #  Мен туулган процесс дейм.
-#: src/misc.c:711
+#: src/misc.c:795
 msgid "child process"
 msgstr "туулган процесс"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "процесс-аралык канал"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr "Файлдын аттарында уйкаштарды издөө үчүн колдонулган тамгалар бар."
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 "Уйкаштарды издөө үчүн --wildcards опциясын колдонуңуз, же --no-wildcards"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "опциясы менен бул эскертүүнү көрсөтпөс кыл."
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Архивде табылган жок"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Керектүү нерселер архивде табылган жок"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "`-%s' жана `-%s' опцияларына стандарт кирүү(input) керек"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Архивдин форматы жарабайт"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "Бул форматтагы архив үчүн жарабаган GNU өзгөчөлүктөрү суралууда"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
@@ -1292,7 +1340,7 @@ msgstr ""
 "Ковычкалардын түрү белгисиз - `%s'. Тизмени көрүүгө `%s --quoting-"
 "style=help' жазгыла."
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1314,7 +1362,7 @@ msgstr ""
 "  tar -xf archive.tar          # Аты archive.tar болгон архивдин ичиндеги "
 "баардык файлдарды чыгарат.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1336,89 +1384,82 @@ msgstr ""
 "жөнөкөй вариант\n"
 "  never, simple   ар дайым жөнөкөй резерв копиялар сакталат\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Негизги иштөө абалы:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "архивдин ичиндеги файлдарды тизмелейт"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "архивден файлдарды чыгарат"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "жаңы архив жаратат"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "архив менен файл система айырмаларын табат"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "файлдарды архивдин аягына кошот"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "архивдин ичиндегилерден жаңы болгон файлдарды гана кошот"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "tar файлын архивге кошот"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "архивден өчүрөт (магниттик ленталарда жарабайт!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr "архивдик томдун атын текшерет анан бүтүрөт"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Иштөөнүн модификаторлору:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "кеңири жайлашкан файлдарды эфектүү түрдө колго ал"
 
 # major, minor
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr "БАШКЫ[.КИЙИНКИ]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 "кеңири жайлаштыруу форматынын версиясын тандайт (--sparce опциясы кошулган "
 "болот)"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "эски GNU форматындагы резервдөө методун колго ал"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "ФАЙЛ"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "жаңы GNU форматындагы резервдөө методун колго ал"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr ""
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "окулбаган файлдар келгенде нөл болбогон статус менен ишти бүтүрбө"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "N"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1430,119 +1471,123 @@ msgstr ""
 "файлдардын аттары команда строкасында же -T опциясы менен берилгенде гана "
 "жарактуу болот. N-дин мааниси алдынала 1ге барабар."
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "Архивдин ичиндегилерди издесе болот"
 
-#: src/tar.c:418
+#: src/tar.c:436
+#, fuzzy
+msgid "archive is not seekable"
+msgstr "Архивдин ичиндегилерди издесе болот"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "үстүнө көчүрүү контролу:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "архивди сактагандан кийин текшерүүгө аракет кылат"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "файлдарды архивге кошулгандан кийин өчүрөт"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "файлдарды чыгаруу учурунда мурун бар болгон файлдардын ордуна көчүрбө"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr "мурун бар болгон файл архивдеги копиясындан жаңы болсо аны алмаштырба"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "чыгаруу учурунда мурун бар болгон файлдардын ордуна көчүрөт"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "бар болгон файлдын ордуна көчүрүүдөн мурун ал файлды өчүрөт"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "папканы чыгарардан мурун баардык иерархияларды өчүрөт"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "мурун бар болгон папкалардын мета-касиеттерин корго"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 "чыгаруу учурунда бар болгон папкалардын мета-даталардын үстүнө жазылат "
 "(алдынала тандалат)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Чыгаруу() жолун танда:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "файлдарды стандарт чыгарууга (output) жөнөт"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "КОМАНДА"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr ""
 "архивден чыккан файлдарды канал(pipe) жолу менен башка программага жөнөтөт"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "туулган процесстердин бүтүрүү кодторуна караба"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr "туулган процесстердин нөл болбогон бүтүрүү кодторун ката деп ишке ал"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Файлдын өзгөчөлүктөрүн колго алууда:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "кошулган файлдардын ээсин АТЫ деп кой"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "кошулган файлдардын группасын АТЫ деп кой"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "ДАТА-ЖЕ-ФАЙЛ"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "кошулган файлдардын алмашуу убактысын ДАТА-ЖЕ-ФАЙЛ дан ал"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "УКУК"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "кошулган файлдардын укук абалын УКУК деп кой"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "МЕТОД"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1552,28 +1597,32 @@ msgstr ""
 "сакта (МЕТОД='replace'; алдынала тандалат) же колдонуу убакыттарын "
 "алмашырбай туруп сактап кал (МЕТОД='system')"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "файлдын алмаштыруу убактын чыгарбайт"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+#, fuzzy
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr "ээсин ошол бойдон калтырып файлдарды чыгарууга аракет кылат"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+#, fuzzy
+msgid "extract files as yourself (default for ordinary users)"
 msgstr "файлдарды өзүңдүкү катары чыгарат"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "ээси/группа аттарын ардайым номерлер менен көрсөтөт"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 "файлдын уруксат маалыматын да чыгар (суперколдонуучуга алдынала тандалат)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
@@ -1581,15 +1630,15 @@ msgstr ""
 "архивден уруксат маалыматын чыгарыбатканда колдонуучунун umask'ын колдон "
 "(жөн колдонуучуларга алдынала тандлат)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "чыгатурган файлдарды архивдегидей кылып сортто"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "-p жана -s менен бирдей"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
@@ -1597,141 +1646,141 @@ msgstr ""
 "чыгарылган папкалардын колдонуу убакыттарын жана уруксаттарын чыгаруу иши "
 "бүткөндөн кийин коёт"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "--delay-directory-restore опциясынын эффектин токтотот"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "Аспапты тандоо жана ага өтүү:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "АРХИВ"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "АРХИВ деген архивдик файлды же аспапты колдонот"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "архивдик файлда эки точка болушуна карабастан ал локалдуу"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "rmt'нин ордуна КОМАНДА колдонулат"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "rsh'тын ордуна КОМАНДА колдонулат"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "драйв жана анын тыгыздыгын белгиле"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "көп томдуу архивди жарат/тизмеле/чыгар"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "N x 1024 байт жазгандан кийин лентаны алмаштыр"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "ар лентанын аягында скриптти иштет (-M опциясы колдонулат)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "ФАЙЛ файлынын ичиндеги том номерин колдон/жаңырт"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Аспаптын блоктолушу:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "БЛОК"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "ар маалыматка БЛОК x 512 байт түшөт"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "Ар маалыматка N байт түшөт, 512 көбөйтүндүсү"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "архивдеги нөлдүү блокторду өтүп кетет (EOF жөнүндө)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "окубатканда кайрадан блокторго бөлүп чык (4.2BSD каналдары үчүн)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Архивдин форматын тандоо:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "ФОРМАТ"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "тандалган форматта архив жаратат"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "ФОРМАТ булардан бирөө болот:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "эски V7 tar форматы"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "tar <= 1.12 версиясында болгондой GNU форматы"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "GNU tar 1.13.x форматы"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "POSIX 1003.1-1988 (ustar) форматы"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "POSIX 1003.1-2001 (pax) форматы"
 
 # pax деген gid,atime сияктуу нерселер
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "pax менен бирдей"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "--format=v7 менен бирдей"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "--format=posix менен бирдей"
 
 # keyword эмне болот?
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "ачкыч-сөз[[:]=мааниси][,ачкыч-сөз[[:]=мааниси]]..."
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "контролдоо үчүн pax ачкыч сөздөрү"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "ТЕКСТ"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
@@ -1739,105 +1788,78 @@ msgstr ""
 "том аты ТЕКСТ болгон архив жарат; тизмелөө/чыгаруу учурунда, ТЕКСТ дегенди "
 "том атынын глоб шаблону катары колдон"
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Бирбирине келишпеген кысыштыруу опциялары берилди"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:597
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "архивди bzip2 менен ишке ал"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "архивди gzip менен ишке ал"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "архивди compress менен ишке ал"
-
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "архивди gzip менен ишке ал"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "архивди gzip менен ишке ал"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "архивди gzip менен ишке ал"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "ПРОГ"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "ПРОГ менен ишке ал (-d опциясы болушу керек)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Локалдуу файлдарды тандоо:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr "ФАЙЛды архивге кош (файлдын аты тире менен баштаган учурда пайдалуу)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "ПАПКА"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "ПАПКА папкасына өт"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "чыгарылатурган же жаңы ачылатурган файлдарды АТЫ деген файлдан кара"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T опциясы нөл менен бүткөн аттарды окуйт, -C опциясы өчүрүлөт"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 "-T менен алынган файлдардын аттарындагы ковычкалар өчүрүлөт (алдынала "
 "тандалат)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr "-T менен алынган файлдардын аттарындагы ковычкалар калаберет"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "ШАБЛОН"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "ШАБЛОН менен уйкаш файлдар ишке алынбайт"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "ФАЙЛда тизмеленген шаблондор менен уйкаш файлдар ишке алынбайт"
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
@@ -1845,92 +1867,96 @@ msgstr ""
 "CACHEDIR.TAG файлы болгон папкалардын астындагылары тэг файлдан тышкарысы "
 "кошулбайт"
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "CACHEDIR.TAG файлы болгон папкалардын астындагыларынын баары кошулбайт"
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "CACHEDIR.TAG файлы болгон папкалар кошулбайт"
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 "ФАЙЛ файлы болгон папкалардын астындагылары ФАЙЛ файлындан тышкарысы "
 "кошулбайт"
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr "ФАЙЛ файлы болгон папкалардын астындагыларынын баары кошулбайт"
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr "ФАЙЛ файлы болгон папкалар кошулбайт"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "папкалардын тереңине кирип кетүүнү токтот"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "архивди жасабатканда локалдуу файл системасында кал"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "папкалардын тереңине кирет (алдынала тандалган)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "файл аттарынын башындагы '/'терди өчүрбө"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 "символикалык шилтемелерге барат; алар көрсөткөн файлдарды архивге кошот"
 
-#: src/tar.c:668
+#: src/tar.c:686
 #, fuzzy
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 "символикалык шилтемелерге барат; алар көрсөткөн файлдарды архивге кошот"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "МҮЧӨНҮН-АТЫ"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "архивдеги МҮЧӨНҮН-АТЫ мүчөсүнөн башта"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "ДАТА-ЖЕ-ФАЙЛ'дан жаңы болгон файлдарды гана сакта"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "ДАТА"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "датасы алмашканда гана дата жана убактысын салыштыр"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "CONTROL"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "өчүрөрдөн мурун копиясын сактап кал, CONTROL версиясын танда"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "STRING"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1938,93 +1964,102 @@ msgstr ""
 "өчүрөрдөн мурун копиясын сактап калат, жалпы колдонулган суфикс кошулат (бул "
 "суфикс SIMPLE_BACKUP_SUFFIX жолу менен алмаштырылбаган болсо '~' болот)"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr "Файлдын атынын алмашуулары:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr "чыгаруу учурунда файл аттарынын башындагы N компонентти алып салат"
 
 # выражение кыргызча кандай? СҮЙЛӨМ башка жерде да бар
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "СҮЙЛӨМ"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr "файлдардын аттарын алмаштыруу үчүн sed replace EXPRESSION колдонгула"
 
 # inclusion, exclusion - Kyrgyz equiv?
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr "Файлдын атына уйкаштыруу опциялары (бардык шаблондорго тиешелүү):"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr "тамгалардын чоң-кичинесине каралбайт"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr "шаблондор файлдын атынын башталышы менен уйкаштырылат"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr ""
 "шаблондор `/' символунан кийин келген ар жерде уйкашына каралат (алдынала "
 "тандалган)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr "уйкаштырууда тамгалардын чоң-кичинесине каралат (алдынала тандалган)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr "шаблондор колдонулат (иштен алынбаган файлдарга алдынала тандалат)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "кандай жазылса ошондой колдонулат"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr "шаблондор `/' символун издебейт"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr "шаблондор `/' символун издейт (алдынала тандалган)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Маалыматтандыруу:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "ишке алынган файлдарды кеңири маалыматы менен тизмеле"
 
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+#, fuzzy
+msgid "warning control"
+msgstr "үстүнө көчүрүү контролу:"
+
 #  Ушу 'record' сөзүнө жакшы котормо табалбай койдум
 #  'маалымат' деп жазыбаттым эле, бул жерде келишпей калаткен
-#: src/tar.c:722
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr "ар N записьтен кийин маалымат берип турат (алдынала 10 болот)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "баардык шилтемелер кошулбай калса билдирүү жазып чыгар"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "СИГНАЛ"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2036,27 +2071,27 @@ msgstr ""
 "SIGHUP, SIGQUIT, SIGINT, SIGUSR1 жана SIGUSR2; SIG префикси жазылбаган "
 "аттарын да колдонсо болот."
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "файлды алмаштыруу датасын UTC түрүндө көрсөт"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "чыккан кеңири маалыматты ФАЙЛ файлына жибер"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "ар билдирүүдө архивдин ичиндеги блок номерин көрсөт"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "ар ишти аткарууга макулдук сурап тур"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "tar'да алдынала коюлган опцияларды көрсөтөт"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
@@ -2064,33 +2099,33 @@ msgstr ""
 "тизмелөө же чыгаруу учурунда издөө критериясына жатпаган папкаларды да "
 "тизмелейт"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr "алмаштыруудан кийин файлдын же архивдин аттарын көрсөтөт"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "СТИЛЬ"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 "аттарга ковычка кошуу стилин тандаңыз; жарактуу СТИЛЬ түрдөрү төмөндө "
 "көрсөтүлөт."
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "STRING ичинде болгон тамгаларга кошумча ковычка кошот"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "STRING ичинде болгон тамгаларга ковычка кошпойт"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Келишүү опциялары:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
@@ -2098,56 +2133,64 @@ msgstr ""
 "жаңы архив жасабатканда --old-archive менен бирдей; чыгарыбатканда --no-same-"
 "owner менен бирдей"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Башка опциялар:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "зыяндуу көрүнгөн опцияларды колдонууга тыюуу салат"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "`-Acdtrux' опцияларынан бирөөнү гана колдоно аласыңар"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Бирбирине келишпеген кысыштыруу опциялары берилди"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "Сигналдын аты белгисиз: %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "Датанын шаблон файлы табылган жок"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Белгисиз %1$s дата форматынын ордуна %2$s коюлат"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "%s опциясы: `%s' датасын %s деп алды"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s: файл тизмеси окулган"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s: алынган файлдын атында бош тамгалар бар"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "архивди gzip менен ишке ал"
+
+#: src/tar.c:1290
+#, fuzzy
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr "--quoting-style опциясы үчүн мындай аргументтер бар:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2155,157 +2198,168 @@ msgstr ""
 "\n"
 "*Бул* tar алдынала мындай иштетилет:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Блок көлөмү жараксыз"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Лентанын узундугу жараксыз"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+#, fuzzy
+msgid "Invalid incremental level value"
+msgstr "Файлдын форматы туура эмес"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Бирден көп ченемдөөчү дата бар"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr "кеңири жайлаштыруу форматынын версиясы жарактуу эмес"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr "Бул платформада --atime-preserve='system' опциясы иштебейт"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr "--checkpoint опциясына жазылган аргумент сан эмес"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: Жараксыз группа"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Опцияда жарабаган укук абалы берилди"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Жарабаган номер"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Ээси жарабайт"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Маалымат көлөмү жарабайт"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Маалыматтын көлөмү %d көбөйтүндүсү болушу керек."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Элементтердин саны жарабайт"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr "--to-command опциясы бир эле жолу жазылыш керек"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "Тыгыздык аргументи туура эмес: %s"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "Түшүнүксүз тыгыздык: `%c'"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "*Бул* tar `-[0-7][lmh]' опцияларын иштетпейт"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[ФАЙЛ]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Эски болгон `%c' опциясына параметр керек."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "Файл тизмеси болбосо --occurrence дегендин мааниси болбойт"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "Колдонулган иштетүү абалда --occurrence колдонулбайт"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Бир нече архив файлы болсо `-M' опциясы колдонулушу керек"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "--listed-incremental менен --newer чогу колдонулбайт"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+#, fuzzy
+msgid "--level is meaningless without --listed-incremental"
+msgstr "Файл тизмеси болбосо --occurrence дегендин мааниси болбойт"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: Томдун тамгасы өтө узун (эң көп %lu байт боло алат)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Көп-томдуу архивдерди текшералбай калды"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Кысыштырылган архивдерди текшералбай калды"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Көп-томдуу кысыштырылган архивдерди колдоналбай калды"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "Кысыштырылган архивдер кошулалбайт"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "--pax-option POSIX архивдеринде гана колдонула алат"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Бош архив жаратуудан уялып баш тартып жатат"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "`-Aru' опциялары `-f -' менен келишпейт"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "`-Acdtrux' опцияларынан бирөөнү тандап колдонуңуз"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2316,83 +2370,88 @@ msgid "%s: File shrank by %s byte"
 msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: Файл %s байтка азайды"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "%s сөзү белигсиз же азырынча киргизилген эмес"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Сан жарактуу маанилердин тышында: %s"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "%s шаблону колдонулбайт"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "%s ачкыч сөзү алмаштырылбайт"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "Кеңейтилген башкы-маалымат бузук: узундук жок"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr "Кеңейтилген башкы-маалыматтын узундугу жарактуу маанилердин тышында"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "Кеңейтилген башкы-маалыматтын узундугу - %*s - диапазондун тышында"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr ""
 "Кеңейтилген башкы-маалымат бузук: узундуктан кийин бош жер (пробел) жок"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Кеңейтилген башкы-маалымат бузук: барабар символу жок"
 
 # newline эмне болот?
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr "Кеңейтилген башкы-маалымат бузук: жаңы сап жок"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr "Кеңейтилген башкы-маалыматта белгисиз `%s' сөзү каралбайт"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr "Чыккан ачкыч-сөз/маани экилиги ото узун (ачкыч-сөз=%s, узундугу=%s)"
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "%s=%s түрүндөгү кеңейтилген башкы-маалымат %s..%s диапазондун тышында"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Кеңейтилген башкы-маалымат бузук: %s=%s туура эмес"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Кеңейтилген башкы-маалымат бузук: %s=%s ашыкча көп"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 "Кеңейтилген башкы-маалымат бузук: туура эмес %s: күтүлбөгөн жерде бул - %c - "
 "бөлүүчү символ бар"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr "Кеңейтилген башкы-маалымат бузук: туура эмес %s: так санда маани бар"
@@ -2433,7 +2492,7 @@ msgstr "Жазууну текшерүү жери: %u"
 msgid "Read checkpoint %u"
 msgstr "Окуунун текшерүү жери: %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
@@ -2441,89 +2500,95 @@ msgstr ""
 "genfile, GNU paxutils пакетинин дата файлдарын ишке алат.\n"
 "ОПЦИЯЛАР мындай:\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr "Жаңы файл ачуу опциялары:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "КӨЛӨМ"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "Көсөтүлгөн КӨЛӨМдө жаңы файл ач"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "Стандарт чыгарууга жазбай, АТЫ деген файлга жаз"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "Файлдын аттарын ФАЙЛдан ал"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr "-T опциясы бош/нөл (null) менен бүткөн аттарды окуйт"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 "Файлды тандалган ШАБЛОН менен толтурат. ШАБЛОН 'default' же 'zeros' болот"
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "Кеңири жайлашкан файлдын блок көлөмү"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 "Файлды кеңири жайлаштыр. Кийинки команда строкаларында файлдын картасы бар."
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 #, fuzzy
 msgid "OFFSET"
 msgstr "ОРУН"
 
 # seek the given offset - orunga jyl
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr "данный(data) жазаардан мурун айтылган орунга жыл"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr "Файлдын статистикасынын опциялары:"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 "Алынган ар бир файл үчүн struct stat курамын көрсөтөт. Алдынала тандалган "
 "ФОРМАТ мындай: "
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr "Синхрондуу иштетүүнүн опциялары:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr " [ОПЦИЯ...]"
+
+#: tests/genfile.c:165
+#, fuzzy
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 "Жазылган КОМАНДАны иштет. Бул --checkpoint жана --cut, --append, --touch "
 "бирөөсү менен колдонулганда пайдалуу"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr "N текшерүү жерине жеткенде буларды (төмөндү карагыла) аткар"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr "Эмики --touch опциясы үчүн дата жазгыла"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr "Өтүлгөн текшерүү жердерди жана КОМАНДАнын бүтүрүү статусун көрсөтөт"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
@@ -2531,7 +2596,7 @@ msgstr ""
 "Синхрондуу аткаруу иштери. Булар --checkpoint опциясы менен берилгенн "
 "текшерүү жерине жеткенде аткарылат."
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
@@ -2539,147 +2604,215 @@ msgstr ""
 "ФАЙЛды --length опциясы менен берилген көлөмгө кыскартат (берилбеген болсо 0 "
 "болот)"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr "ФАЙЛга КӨЛӨМ байт кошот. КӨЛӨМ --length опциясы менен берилет."
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "ФАЙЛдын колдонуу жана алмашуу убакыттарын жаңылайт."
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "Бул команданы иштеткиле - КОМАНДА"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "Жараксыз көлөм: %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Сан жарактуу маанилердин тышында: %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr "Көлөмү терс сан: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "stat(%s) аткарылбай калды"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "`%s' жанындагы санды окубатканда ката чыкты"
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "Датанын форматы түшүнүксүз"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[АРГУМЕНТТЕР...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "`%s' ачылбай жатат"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 msgid "cannot seek"
 msgstr "издөө болбой калды"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "файлдын атында бош тамга бар"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 "кеңири(чоң) файлдарды стандарт чыгарууга жибералбайт, --file опциясын "
 "колдонуңуз"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "туура эмес маска (`%s' жанында)"
 
 # фиелд деген кандай болот?
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr "Белгисиз поле `%s'"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "`%s'ке убакыт аталган жок"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "`%s' ачылбай жатат"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "Команда толук аткарылды\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "Команда %d статусу менен аткарылбай калды\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "Команда %d сигналы менен жабылды\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "Команда %d сигналы менен токтотулду\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "Команда core dump менен бүттү\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "Команда жабылды\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "--stat опциясы менен файл аттары жазылыш керек"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "аргументтердин саны көп"
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: мындай опция колдонулбайт -- %c\n"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
 #~ msgstr ""
-#~ "Эскертүү: -I опциясы иштетилбейт; балким -j же -T дегиңиз келди эле?"
+#~ "\n"
+#~ "Каталарды бул жерге билдиргиле <%s>.\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "%s жактан окуп жатат\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Оңолбогон ката: иш бүттү "
+
+#~ msgid "suppress this warning."
+#~ msgstr "опциясы менен бул эскертүүнү көрсөтпөс кыл."
+
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "архивди bzip2 менен ишке ал"
+
+#~ msgid "filter the archive through gzip"
+#~ msgstr "архивди gzip менен ишке ал"
+
+#~ msgid "filter the archive through compress"
+#~ msgstr "архивди compress менен ишке ал"
 
 #, fuzzy
-#~ msgid "cancel effect of the previous --transform-links option"
-#~ msgstr "--delay-directory-restore опциясынын эффектин токтотот"
+#~ msgid "filter the archive through lzma"
+#~ msgstr "архивди gzip менен ишке ал"
+
+#, fuzzy
+#~ msgid "filter the archive through lzop"
+#~ msgstr "архивди gzip менен ишке ал"
+
+# Input string дегендин ордуна жакшы нерсе билсеңер алмаштырсаңар болот
+#~ msgid "Input string too long"
+#~ msgstr "Жазылган сүйлөм өтө узун"
+
+#~ msgid "Number syntax error"
+#~ msgstr "Номердин жазуусунда ката бар"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Буфер үчүн жер алыналган жок\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr " Буфер үчүн жер алыналган жок"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Толук маалымат үчүн `%s --help' деп жазгыла.\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Колдонулушу: %s [ОПЦИЯ]\n"
+#~ "Башка процесстен командалрды алып \"магниттик лентада сактоочту\" "
+#~ "колдон.\n"
+#~ "\n"
+#~ "  --version  Версия маалыматын көрсөт.\n"
+#~ "  --help  Бул маалыматты көрсөт.\n"
+
+#~ msgid "Seek offset error"
+#~ msgstr "Издөө даражасы туура эмес"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Файлдын соңу эрте келди"
 
 #~ msgid "block size"
 #~ msgstr "бир блоктун көлөмү"
@@ -2687,5 +2820,9 @@ msgstr "аргументтердин саны көп"
 #~ msgid "[.]NUMBER"
 #~ msgstr "[.]N"
 
+#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgstr ""
+#~ "Эскертүү: -I опциясы иштетилбейт; балким -j же -T дегиңиз келди эле?"
+
 #~ msgid "Error exit delayed from previous errors"
 #~ msgstr "Ката үчүн ишти бүтүрүү, мурунку каталардан улам кеч аткарылды"
index f0f5fd7f24c9b9d8f0878c9d2da84edd0486945c..28f239c7bcaf40f81771ccb7caeaf78a10248b65 100644 (file)
Binary files a/po/ms.gmo and b/po/ms.gmo differ
index f08d055ea23e4d801c18c4bf2cac2d0585395cd4..5f667b9ae5000be6580375ca7974260383e2906b 100644 (file)
--- a/po/ms.po
+++ b/po/ms.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tar 1.13.25\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
 "PO-Revision-Date: 2002-11-23 02:38+0800\n"
 "Last-Translator: Hasbullah Bin Pit <sebol@ikhlas.com>\n"
 "Language-Team: Malay <translation-team-ms@lists.sourceforge.net>\n"
@@ -14,287 +14,194 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "hujah tidak sah %s bagi %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "hujah kabur %s bagi %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Hujah sah adalah:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr ""
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr ""
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr ""
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr ""
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr ""
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
 msgstr ""
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr ""
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr ""
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 #, fuzzy
 msgid " [OPTION...]"
 msgstr ""
 "\n"
 "Pengunaan : %s [OPSYEN]...\n"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, fuzzy, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Cuba '%s --help' untuk maklumat lanjut.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, fuzzy, c-format
 msgid "Report bugs to %s.\n"
 msgstr ""
 "\n"
 "Lapor pepijat ke <bug-tar@gnu.org>.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Ralat sistem tidak diketahui"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr ""
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr ""
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr ""
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr ""
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr ""
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr ""
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr ""
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr ""
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, fuzzy, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: opsyen `%s' memerlukan hujah\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr ""
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr ""
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: opsyen `%s' adalah kabur\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: opsyen `--%s' tidak mengizinkan hujah\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: opsyen %c%s'  tidak mengizinkan hujah\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: opsyen `%s' memerlukan hujah\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: opsyen tidak dikenali `--%s'\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: opsyen tidak dikenali '%c%s'\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: opsyen salah  -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: opsyen tidak sah -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: opsyen memerlukan hujah -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: opsyen `-W %s' adalah kabur\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: opsyen `-W %s' tidak mengizinkan hujah\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "memori keletihan"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, fuzzy, c-format
 msgid "unable to record current working directory"
 msgstr "Tak dapat tukar direktori kerja"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, fuzzy, c-format
 msgid "failed to return to initial working directory"
 msgstr "Tak dapat simpan direktori kerja"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Tak dapat %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Amaran: Tak dapat %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Tak dapat menukar mod ke %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Tak dapat menukar pemilikan ke uid %lu, gid %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Tak dapat memaut keras ke %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, fuzzy, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: ralat pembacaan pada byte %s, membaca %lu byte"
-msgstr[1] "%s: ralat pembacaan pada byte %s, membaca %lu byte"
-
-#: lib/paxerror.c:192
-#, fuzzy, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Amaran: Ralat pembacaan pada byte %s, membaca %lu byte"
-msgstr[1] "%s: Amaran: Ralat pembacaan pada byte %s, membaca %lu byte"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Tak dapat rayau ke %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Amaran: tidak dapat rayau ke %s "
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Tak dapat mencipta symlink ke %s"
-
-#: lib/paxerror.c:349
-#, fuzzy, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Ditulis hanya %lu drpd %lu byte"
-msgstr[1] "%s: Ditulis hanya %lu drpd %lu byte"
-
-#: lib/paxnames.c:155
-#, fuzzy, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Membuang awalan  `%.*s' drpd nama ahli"
-
-#: lib/paxnames.c:156
-#, fuzzy, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Membuang awalan  `%.*s' drpd nama ahli"
-
-#: lib/paxnames.c:169
-#, fuzzy
-msgid "Substituting `.' for empty member name"
-msgstr "Membuang awalan  `%.*s' drpd nama ahli"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr ""
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -308,18 +215,18 @@ msgstr ""
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "`"
 
 # ui/galeon.glade.h:3
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "'"
 
@@ -329,7 +236,7 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr ""
 
@@ -339,38 +246,28 @@ msgstr ""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr ""
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Tiada servis"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "stdin"
-
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "stdout"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Tak boleh laksanakan shell jauh"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -381,19 +278,19 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, fuzzy, c-format
 msgid "Written by %s.\n"
 msgstr "Ditulis oleh F. Pinard."
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, fuzzy, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Ditulis oleh F. Pinard."
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, fuzzy, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Ditulis oleh F. Pinard."
@@ -401,7 +298,7 @@ msgstr "Ditulis oleh F. Pinard."
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -411,7 +308,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -421,7 +318,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -431,7 +328,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -441,7 +338,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -452,7 +349,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -463,7 +360,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -475,184 +372,334 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 "\n"
 "Lapor pepijat ke <bug-tar@gnu.org>.\n"
 
-#: lib/version-etc.c:182
-#, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
+"\n"
+"Lapor pepijat ke <bug-tar@gnu.org>.\n"
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:253
+#, c-format
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: tak dapat memperuntukkan ruang penimbal\n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Tak dapat %s"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Tak dapat memperuntukkan ruang penimbal"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Amaran: Tak dapat %s"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:93
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Cuba '%s --help' untuk maklumat lanjut.\n"
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Tak dapat menukar mod ke %s"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Tak dapat menukar pemilikan ke uid %lu, gid %lu"
+
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Tak dapat memaut keras ke %s"
+
+#: lib/paxerror.c:179 lib/paxerror.c:211
 #, fuzzy, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: ralat pembacaan pada byte %s, membaca %lu byte"
+msgstr[1] "%s: ralat pembacaan pada byte %s, membaca %lu byte"
+
+#: lib/paxerror.c:192
+#, fuzzy, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Amaran: Ralat pembacaan pada byte %s, membaca %lu byte"
+msgstr[1] "%s: Amaran: Ralat pembacaan pada byte %s, membaca %lu byte"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Tak dapat rayau ke %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Amaran: tidak dapat rayau ke %s "
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Tak dapat mencipta symlink ke %s"
+
+#: lib/paxerror.c:349
+#, fuzzy, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Ditulis hanya %lu drpd %lu byte"
+msgstr[1] "%s: Ditulis hanya %lu drpd %lu byte"
+
+#: lib/paxnames.c:155
+#, fuzzy, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Membuang awalan  `%.*s' drpd nama ahli"
+
+#: lib/paxnames.c:156
+#, fuzzy, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Membuang awalan  `%.*s' drpd nama ahli"
+
+#: lib/paxnames.c:169
+#, fuzzy
+msgid "Substituting `.' for empty member name"
+msgstr "Membuang awalan  `%.*s' drpd nama ahli"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
 msgstr ""
-"Penggunaan: %s [OPSYEN]\n"
-"Manupulasi pemacu pita, menerima arahan drpd proses jauh.\n"
-"\n"
-"  --version  Output maklumat versi.\n"
-"  --help  Output bantuan ini.\n"
 
-#: rmt/rmt.c:397
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Tiada servis"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "stdin"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "stdout"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
+msgstr ""
+
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Tak boleh laksanakan shell jauh"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Hala rayauan diluar julat"
+
+#: rmt/rmt.c:419
 #, fuzzy
-msgid "Seek offset error"
-msgstr "Offset rayauan diluar julat"
+msgid "Invalid seek direction"
+msgstr "Mod tidak sah diberi pada opsyen"
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Setem masa tidak sah"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Offset rayauan diluar julat"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Hala rayauan diluar julat"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "panjang pita tidak sah"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Offset rayauan diluar julat"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: eof tak matang\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Akhir fail tak matang"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "%s: opsyen tidak sah -- %c\n"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "EOF tanpa diduga pada arkib"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr ""
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr ""
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "%s: Tak dapat rayau ke %s"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr ""
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Arahan sampah"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Ia nampaknya bukan seperti arkib tar"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 #, fuzzy
 msgid "Total bytes written"
 msgstr "Jumlah byte ditulis: %s (%sB, %sB/s)\n"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr ""
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, fuzzy, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Jumlah byte ditulis: %s (%sB, %sB/s)\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(paip)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Nilai tidak sah bagi record_size"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Tiada nama arkib diberi"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Tak dapat menentusahkan arkib stdin/stdout"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr ""
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Tak dapat mengemaskini arkib termampat"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Pada permulaan pita, keluar sekarang"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Terlalu banyak ralat, keluar"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, fuzzy, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Saiz rekod = %lu blok"
 msgstr[1] "Saiz rekod = %lu blok"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, fuzzy, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Blok tidak dijajar (%lu byte) pada arkib"
 msgstr[1] "Blok tidak dijajar (%lu byte) pada arkib"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr "tak dapat backspace fail arkib; ia mungkin tak boleh dibaca tanpa -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr ""
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: mengandungi nombor volum yg tidak sah"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 #, fuzzy
 msgid "Volume number overflow"
 msgstr "Nombor volum melimpah"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Menyedia volum #%d bagi %s dan tekan return: "
 
 # libgnomeui/gnome-app-helper.c:127
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "EOF dimana maklumbalas pengguna dijangka"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "AMARAN: Arkib tidak lengkap"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, fuzzy, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -664,124 +711,124 @@ msgstr ""
 " !          Spawn  subshell\n"
 " ?          Cetak senarai ini\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr ""
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr ""
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Tiada volum baru; keluar.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr ""
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr ""
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, fuzzy, c-format
 msgid "%s command failed"
 msgstr "Arahan '%s' gagal"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, fuzzy, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s tidak bersambung pada volum ini"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s tidak bersambung pada volum ini"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s adalah salah saiz (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, fuzzy, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Volum ini tidak dalam turutan"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Arkib tidak dilabelkan supaya memadan %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Volum %s tidak sepadan %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
 msgstr ""
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
 msgstr ""
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, fuzzy, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Hanya boleh membaca  %lu drpd  %lu byte"
 msgstr[1] "Hanya boleh membaca  %lu drpd  %lu byte"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Kandungan berlainan"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "EOF tanpa diduga pada arkib"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Jenis fail berbeza"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Mod berbeza"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Uid berbeza"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Gid berbeza"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Masa mod berbeza"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Saiz berbeza"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Tidak dipautkan ke %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Symlink berbeza"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Nombor beranti berbeza"
 
@@ -803,34 +850,34 @@ msgstr ""
 msgid "Verification may fail to locate original files."
 msgstr ""
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, fuzzy, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "GAGAL TENTUSAH: %d pengepala tak sah dikesan"
 msgstr[1] "GAGAL TENTUSAH: %d pengepala tak sah dikesan"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr ""
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr ""
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "nilai %s diluar julat %s %s..%s; menggantikan %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "nilai %s diluar julat %s %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Menjana pengepala oktal negatif"
 
@@ -849,438 +896,439 @@ msgstr "%s: fail tidak berubah; tidak dilonggokkan"
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: fail tidak berubah; tidak dilonggokkan"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, fuzzy, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: Fail mengucup sebanyak %s byte; pad dengan sifar"
 msgstr[1] "%s: Fail mengucup sebanyak %s byte; pad dengan sifar"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: fail adalah pada sistemfail lain; tidak dilonggokkan"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr ""
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Jenis fail tak dikenali; fail diabaikan"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, fuzzy, c-format
-msgid "Missing links to %s.\n"
+msgid "Missing links to %s."
 msgstr "Pautan ke %s\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: fail tidak berubah; tidak dilonggokkan"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: fail adalah arkib; tidak dilonggokkan"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Fail dibuang sebelum kami membacanya"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr ""
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: fail berubah bila kami membacanya"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: soket diabaikan"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: pintu diabaikan"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Melangkah ke pengepala berikut"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Memadam bukan-pengepala drpd arkib"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr ""
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, fuzzy, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: setem masa %s adalah %lu pada masa akan datang"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Ketidakkonsistenan luar dugaan bila membuat direktori"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Direktori ditukarnama sebelum statusnya boleh diekstrak"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Mengekstrak fail bersambung sebagai fail biasa"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
-msgstr "Cuba mengekstrak pautan simbolik sebagai pautan keras"
-
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Membaca %s\n"
+msgstr "Cuba mengekstrak pautan simbolik sebagai pautan keras"
 
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Tak dapat ekstrak -- fail bersambung dari volum lain"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 #, fuzzy
 msgid "Unexpected long name header"
 msgstr "Penghujungan tanpa diduga data imej PNM"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, fuzzy, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Jenis fail tak dikenali '%c', diekstrak sebagai fail biasa"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr ""
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Tak dapat backup fail ini"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, fuzzy, c-format
 msgid "Cannot rename %s to %s"
 msgstr "%s: Tak dapat menukarnama ke %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Ralat adalah tidak boleh dipulihkan: keluar sekarang"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, fuzzy, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Direktori telah ditukarnama"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Direktori telah ditukarnama"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Direktori adalah baru"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Setem masa tidak sah"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 #, fuzzy
 msgid "Invalid modification time (seconds)"
 msgstr "Mod tidak sah diberi pada opsyen"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr ""
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Nombor peranti tidak sah"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Nombot inod tidak sah"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr ""
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 #, fuzzy
 msgid "Unexpected EOF in snapshot file"
 msgstr "EOF tanpa diduga pada arkib"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr ""
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr ""
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr ""
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr ""
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr ""
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr ""
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr ""
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr ""
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr ""
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, fuzzy, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Tak dapat memperuntukkan memori bagi faktor pemblokan %d"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr ""
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, fuzzy, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: fail adalah pada sistemfail lain; tidak dilonggokkan"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Memadam %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: tak dapat buang"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr ""
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "blok %s: ** Blok TIADA **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "blok %s: ** Akhir Fail **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "blok %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Pengepala kosong dimana nilai %s numerik dijangka"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr "Nilai oktal arkib %.*s diluar julat %s; anggap kedua-dua pelengkap"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Nilai oktal arkib %.*s diluar julat %s"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr ""
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "Rentetan %s base-64 ditandatangani arkibadalah diluar julat %s "
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Nilai base-256 arkub adalah diluar julat %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Arkib mengandungi %.*s dimana nilai %s numerik dijangka"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Nilai %s arkib adalah dijuar julat %s %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr "Pautan ke %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr "jenis fail tak diketahui %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr ""
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr ""
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Pengepala Volum--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Bersambung pada byte %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Mencipta direktori:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Menukarnama %s ke %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Tak dapat menukarnama ke %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Menukarnama %s kembali ke %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Tak dapat simpan direktori kerja"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Tak dapat tukar direktori kerja"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Fail dibuang sebelum kami membacanya"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Fail dibuang sebelum kami membacanya"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "proses anak"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "saluran antaraproses"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
-msgstr ""
-
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:601
+msgid "Pattern matching characters used in file names"
 msgstr ""
 
-#: src/names.c:597
-msgid "suppress this warning."
+#: src/names.c:603
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Tak dijumpai pada arkib"
 
-#: src/names.c:615
+#: src/names.c:622
 #, fuzzy, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Tak dijumpai pada arkib"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Opsyen `-%s' dan `-%s' kedua-duanya memerlukan input piawai"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, fuzzy, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Kumpulan tidak sah"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr ""
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
 msgstr ""
 
-#: src/tar.c:336
+#: src/tar.c:347
 #, fuzzy
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
@@ -1300,7 +1348,7 @@ msgstr ""
 "verbose.\n"
 "  %s -xf arkib.tar           # Ekstrak semua fail drpd arkib.tar.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1312,87 +1360,80 @@ msgid ""
 "  never, simple   always make simple backups\n"
 msgstr ""
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr ""
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr ""
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr ""
 
-#: src/tar.c:378
+#: src/tar.c:394
 #, fuzzy
 msgid "create a new archive"
 msgstr "EOF tanpa diduga pada arkib"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr ""
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr ""
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr ""
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr ""
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr ""
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr ""
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr ""
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr ""
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr ""
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr ""
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:408
-msgid "do not exit with nonzero on unreadable files"
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
 msgstr ""
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
+#: src/tar.c:426
+msgid "do not exit with nonzero on unreadable files"
 msgstr ""
 
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1400,577 +1441,565 @@ msgid ""
 "command line or via the -T option; NUMBER defaults to 1"
 msgstr ""
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr ""
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr ""
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr ""
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr ""
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr ""
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr ""
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr ""
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr ""
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr ""
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr ""
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr ""
 
-#: src/tar.c:455
+#: src/tar.c:475
 #, fuzzy
 msgid "extract files to standard output"
 msgstr "Ralat ketika menulis ke output piawai"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr ""
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr ""
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr ""
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr ""
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr ""
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr ""
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr ""
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr ""
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr ""
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr ""
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
 "place (METHOD='system')"
 msgstr ""
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr ""
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr ""
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
 msgstr ""
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr ""
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
 msgstr ""
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr ""
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr ""
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr ""
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr ""
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr ""
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr ""
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr ""
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr ""
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr ""
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr ""
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr ""
 
-#: src/tar.c:536
+#: src/tar.c:556
 #, fuzzy
 msgid "create/list/extract multi-volume archive"
 msgstr "Tak dapat menentusah arkib multi-volume"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr ""
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr ""
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr ""
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr ""
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr ""
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr ""
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr ""
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr ""
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr ""
 
-#: src/tar.c:562
+#: src/tar.c:582
 #, fuzzy
 msgid "Archive format selection:"
 msgstr "opsyen format arkib konflik"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr ""
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr ""
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr ""
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr ""
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr ""
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr ""
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr ""
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr ""
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr ""
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr ""
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr ""
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr ""
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr ""
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr ""
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
 msgstr ""
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Opsyen mampatan konflik"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:597
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr ""
-
-#: src/tar.c:602
-#, fuzzy
-msgid "filter the archive through gzip"
-msgstr "%s: fail adalah arkib; tidak dilonggokkan"
-
-#: src/tar.c:606
-#, fuzzy
-msgid "filter the archive through compress"
-msgstr "%s: fail adalah arkib; tidak dilonggokkan"
-
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "%s: fail adalah arkib; tidak dilonggokkan"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "%s: fail adalah arkib; tidak dilonggokkan"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "%s: fail adalah arkib; tidak dilonggokkan"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr ""
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr ""
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr ""
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr ""
 
-#: src/tar.c:625
+#: src/tar.c:641
 #, fuzzy
 msgid "change to directory DIR"
 msgstr "Tak dapat tukar direktori kerja"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr ""
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr ""
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr ""
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr ""
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr ""
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr ""
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr ""
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr ""
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr ""
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr ""
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr ""
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr ""
 
-#: src/tar.c:664
+#: src/tar.c:682
 #, fuzzy
 msgid "don't strip leading `/'s from file names"
 msgstr "Membuang awalan  `%.*s' drpd nama ahli"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr ""
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr ""
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr ""
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr ""
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr ""
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr ""
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr ""
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
 msgstr ""
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr ""
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr ""
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr ""
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr ""
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr ""
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr ""
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr ""
 
-#: src/tar.c:710
+#: src/tar.c:728
 #, fuzzy
 msgid "wildcards do not match `/'"
 msgstr "Volum %s tidak sepadan %s"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr ""
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr ""
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr ""
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr ""
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr ""
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -1978,274 +2007,290 @@ msgid ""
 "accepted"
 msgstr ""
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr ""
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr ""
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr ""
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr ""
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr ""
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr ""
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr ""
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr ""
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr ""
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr ""
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr ""
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr ""
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr ""
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr ""
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Anda tak boleh nyatakan lebih drpd satu opsyen `-Acdtrux'"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Opsyen mampatan konflik"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, fuzzy, c-format
 msgid "Unknown signal name: %s"
 msgstr "jenis fail tak diketahui %s\n"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 #, fuzzy
 msgid "Date sample file not found"
 msgstr "Fail tarikh tidak dijumpai"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Mengganti %s bagi format tarikh tak diketahui %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr ""
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, fuzzy, c-format
 msgid "%s: file list already read"
 msgstr "%s: fail adalah arkib; tidak dilonggokkan"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr ""
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "%s: fail adalah arkib; tidak dilonggokkan"
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr ""
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
 msgstr ""
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Faktor pemblokan tidak sah"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "panjang pita tidak sah"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr ""
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr ""
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr ""
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr ""
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr ""
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: Kumpulan tidak sah"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Mod tidak sah diberi pada opsyen"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 #, fuzzy
 msgid "Invalid number"
 msgstr "Nombot inod tidak sah"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Pemilik tidak sah"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Saiz rekod tidak sah"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Saiz rekod mesti dalam gandaan %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 #, fuzzy
 msgid "Invalid number of elements"
 msgstr "panjang pita tidak sah"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr ""
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr ""
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr ""
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "Opsyen `-[0-7][lmh]' tak disokong oleh tar *ini*"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr ""
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "OPsyen lama `%c' memerlukan hujah."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr ""
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr ""
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 #, fuzzy
 msgid "Multiple archive files require `-M' option"
 msgstr "Fail akrib beraneka memerlukan opsyen `-M'"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Tak boleh gabung  --listed-incremental dengan --newer"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr ""
+
+#: src/tar.c:2404
 #, fuzzy, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: Label volum adalah terlalu panjang (had adalah %lu byte)"
 msgstr[1] "%s: Label volum adalah terlalu panjang (had adalah %lu byte)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Tak dapat menentusah arkib multi-volume"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Tak dapat menentusahkan arkib termampat"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Tak dapat menggunakan arkib multi-volume termampat"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 #, fuzzy
 msgid "Cannot concatenate compressed archives"
 msgstr "Tak dapat mengemaskini arkib termampat"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr ""
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Secara dayus enggan mencipta arkib kosong"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Opsyen `-Aru' tak serasi dengan  `-f -'"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Anda mesti nyatakan satu drpd opsyen `-Acdtrux'"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2257,79 +2302,84 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: Fail mengecil sebanyak %s byte"
 msgstr[1] "%s: Fail mengecil sebanyak %s byte"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr ""
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Setem masa diluar julat"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr ""
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr ""
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr ""
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr ""
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, fuzzy, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "Rentetan %s base-64 ditandatangani arkibadalah diluar julat %s "
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr ""
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr ""
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr ""
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr ""
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, fuzzy, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "Nilai %s arkib adalah dijuar julat %s %s..%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr ""
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr ""
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr ""
@@ -2370,236 +2420,302 @@ msgstr "Menulis titiksemak %d"
 msgid "Read checkpoint %u"
 msgstr "Membaca titiksemak %d"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 #, fuzzy
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
 msgstr "Menjana fail data untuk suit ujian GNU tar.\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 #, fuzzy
 msgid "File creation options:"
 msgstr "Opsyen mampatan konflik"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr ""
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr ""
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 #, fuzzy
 msgid "Write to file NAME, instead of standard output"
 msgstr "Ralat ketika menulis ke output piawai"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr ""
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr ""
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr ""
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr ""
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr ""
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr ""
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr ""
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr ""
+"\n"
+"Pengunaan : %s [OPSYEN]...\n"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr ""
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr ""
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr ""
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, fuzzy, c-format
 msgid "Invalid size: %s"
 msgstr "Setem masa tidak sah"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, fuzzy, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Nombor inod diluar julat"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr ""
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr ""
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr ""
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, fuzzy, c-format
 msgid "Unknown date format"
 msgstr "Ralat sistem tidak diketahui"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr ""
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr ""
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 #, fuzzy
 msgid "cannot seek"
 msgstr "Tak dapat tutup"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr ""
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr ""
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, fuzzy, c-format
 msgid "Unknown field `%s'"
 msgstr "jenis fail tak diketahui %s\n"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, fuzzy, c-format
 msgid "cannot set time on `%s'"
 msgstr "%s: Tak dapat rayau ke %s"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "%s: Tak dapat rayau ke %s"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr ""
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, fuzzy, c-format
 msgid "Command failed with status %d\n"
 msgstr "Anak mati dengan isyarat %d"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr ""
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr ""
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, fuzzy, c-format
 msgid "--stat requires file names"
 msgstr "Nama fail modul"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr ""
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: opsyen salah  -- %c\n"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
 #~ msgstr ""
-#~ "Amaran: opsyen -I tidak disokong; mungkin and amaksudkan -j atau -T?"
+#~ "\n"
+#~ "Lapor pepijat ke <bug-tar@gnu.org>.\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Membaca %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Ralat adalah tidak boleh dipulihkan: keluar sekarang"
+
+#, fuzzy
+#~ msgid "filter the archive through compress"
+#~ msgstr "%s: fail adalah arkib; tidak dilonggokkan"
+
+#, fuzzy
+#~ msgid "filter the archive through lzma"
+#~ msgstr "%s: fail adalah arkib; tidak dilonggokkan"
+
+#, fuzzy
+#~ msgid "filter the archive through lzop"
+#~ msgstr "%s: fail adalah arkib; tidak dilonggokkan"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: tak dapat memperuntukkan ruang penimbal\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Tak dapat memperuntukkan ruang penimbal"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Cuba '%s --help' untuk maklumat lanjut.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Penggunaan: %s [OPSYEN]\n"
+#~ "Manupulasi pemacu pita, menerima arahan drpd proses jauh.\n"
+#~ "\n"
+#~ "  --version  Output maklumat versi.\n"
+#~ "  --help  Output bantuan ini.\n"
+
+#, fuzzy
+#~ msgid "Seek offset error"
+#~ msgstr "Offset rayauan diluar julat"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Akhir fail tak matang"
 
 #~ msgid "block size"
 #~ msgstr "saiz blok"
@@ -2631,9 +2747,6 @@ msgstr ""
 #~ msgid "Visible long name error"
 #~ msgstr "Ralat nama panjang boleh tampak"
 
-#~ msgid "Time stamp out of range"
-#~ msgstr "Setem masa diluar julat"
-
 #~ msgid "Device number out of range"
 #~ msgstr "Nombor peranti diluar julat"
 
@@ -2761,6 +2874,10 @@ msgstr ""
 #~ msgid "Obsolete option name replaced by --read-full-records"
 #~ msgstr "Nama opsyen ditelan zaman diganti dengan --read-full-records"
 
+#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgstr ""
+#~ "Amaran: opsyen -I tidak disokong; mungkin and amaksudkan -j atau -T?"
+
 #~ msgid "Obsolete option name replaced by --touch"
 #~ msgstr "Nama opsyen ditelan zaman diganti dengan --touch"
 
index 7b0b295336a034ca7501247a8aece9e1e2c5d85a..82630b30696cd67dd945795c264af0910c7d3b18 100644 (file)
Binary files a/po/nb.gmo and b/po/nb.gmo differ
index cfc994bd3a021ea8db8bc81112f96b4b4bd0eb3c..4dfcbffd7ecc28941d40bc8f042cb5316767238f 100644 (file)
--- a/po/nb.po
+++ b/po/nb.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU tar 1.12\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
 "PO-Revision-Date: 1997-06-05 19:39 MET DST\n"
 "Last-Translator: Espen Skjelnes Johnsen <espejohn@sn.no>\n"
 "Language-Team: Norwegian-bokmål <no@li.org>\n"
@@ -14,287 +14,193 @@ msgstr ""
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8-bit\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, fuzzy, c-format
 msgid "invalid argument %s for %s"
 msgstr "Ugyldig datoformat «%s»"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, fuzzy, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "Tvetydig mønster «%s»"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr ""
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr ""
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr ""
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr ""
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr ""
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr ""
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
 msgstr ""
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr ""
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr ""
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 #, fuzzy
 msgid " [OPTION...]"
 msgstr ""
 "\n"
 "Bruk: %s [FLAGG]...\n"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, fuzzy, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Tast «%s --help» for mer informasjon.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr ""
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Unkjent systemfeil"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr ""
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr ""
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr ""
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr ""
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr ""
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr ""
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr ""
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr ""
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr ""
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr ""
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr ""
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
-msgstr ""
-
-#: lib/getopt.c:575 lib/getopt.c:579
+#: gnu/getopt.c:531 gnu/getopt.c:547
 #, fuzzy, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "Gammelt flagg «%c» behøver et argument."
 
-#: lib/getopt.c:588 lib/getopt.c:593
+#: gnu/getopt.c:580 gnu/getopt.c:584
 #, fuzzy, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "Gammelt flagg «%c» behøver et argument."
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
+#: gnu/getopt.c:593 gnu/getopt.c:598
 #, fuzzy, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "Gammelt flagg «%c» behøver et argument."
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
-msgstr ""
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr "Gammelt flagg «%c» behøver et argument."
 
-#: lib/getopt.c:704 lib/getopt.c:707
+#: gnu/getopt.c:698 gnu/getopt.c:701
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr ""
 
-#: lib/getopt.c:759 lib/getopt.c:762
+#: gnu/getopt.c:709 gnu/getopt.c:712
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr ""
 
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
-msgstr ""
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "Ugyldig verdi for record_size"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
 #, fuzzy, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "Gammelt flagg «%c» behøver et argument."
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
-msgstr ""
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "Gammelt flagg «%c» behøver et argument."
 
-#: lib/getopt.c:932 lib/getopt.c:950
+#: gnu/getopt.c:924 gnu/getopt.c:942
 #, fuzzy, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "Gammelt flagg «%c» behøver et argument."
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 #, fuzzy
 msgid "memory exhausted"
 msgstr "Minne oppbrukt"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, fuzzy, c-format
 msgid "unable to record current working directory"
 msgstr "Kunne ikke finne navnet på aktiv filkatalog"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, c-format
 msgid "failed to return to initial working directory"
 msgstr ""
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, fuzzy, c-format
-msgid "%s: Cannot %s"
-msgstr "Kan ikke eksekvere %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr ""
-
-#: lib/paxerror.c:93
-#, fuzzy, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Kan ikke endre modus til %0.4o"
-
-#: lib/paxerror.c:101
-#, fuzzy, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Kan ikke endre eier til uid %d, gid %d"
-
-#: lib/paxerror.c:127
-#, fuzzy, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "Kan ikke lese link %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, fuzzy, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "Lesefeil ved byte %ld under lesing av %d bytes i fil %s"
-msgstr[1] "Lesefeil ved byte %ld under lesing av %d bytes i fil %s"
-
-#: lib/paxerror.c:192
-#, fuzzy, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "Lesefeil ved byte %ld under lesing av %d bytes i fil %s"
-msgstr[1] "Lesefeil ved byte %ld under lesing av %d bytes i fil %s"
-
-#: lib/paxerror.c:259
-#, fuzzy, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "Kan ikke skrive til %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr ""
-
-#: lib/paxerror.c:284
-#, fuzzy, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Kunne ikke lage symbolisk link til «%s»"
-
-#: lib/paxerror.c:349
-#, fuzzy, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Kunne bare skrive %d av %d bytes'"
-msgstr[1] "%s: Kunne bare skrive %d av %d bytes'"
-
-#
-#: lib/paxnames.c:155
-#, fuzzy, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Tar bort ledende «/» fra absolutte linker"
-
-#
-#: lib/paxnames.c:156
-#, fuzzy, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Tar bort ledende «/» fra absolutte linker"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr ""
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr ""
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -308,17 +214,17 @@ msgstr ""
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr ""
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr ""
 
@@ -328,7 +234,7 @@ msgstr ""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr ""
 
@@ -338,38 +244,28 @@ msgstr ""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr ""
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Tjenesten er ikke tilgjengelig"
-
-#: lib/rtapelib.c:303
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdin"
-msgstr "stdin"
-
-#: lib/rtapelib.c:306
-#, c-format
-msgid "stdout"
-msgstr "stdout"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Kan ikke eksekvere \"remote shell\""
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -380,19 +276,19 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr ""
@@ -400,7 +296,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -410,7 +306,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -420,7 +316,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -430,7 +326,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -440,7 +336,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -451,7 +347,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -462,7 +358,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -474,183 +370,339 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 "\n"
 "Rapporter feil til <tar-bugs@gnu.ai.mit.edu>.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr ""
+"\n"
+"Rapporter feil til <tar-bugs@gnu.ai.mit.edu>.\n"
+
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, fuzzy, c-format
+msgid "%s: Cannot %s"
+msgstr "Kan ikke eksekvere %s"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
 msgstr ""
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Kan ikke allokere buffer\n"
+#: lib/paxerror.c:93
+#, fuzzy, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Kan ikke endre modus til %0.4o"
+
+#: lib/paxerror.c:101
+#, fuzzy, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Kan ikke endre eier til uid %d, gid %d"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Kan ikke allokere plass til buffer"
+#: lib/paxerror.c:127
+#, fuzzy, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "Kan ikke lese link %s"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, fuzzy, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "Lesefeil ved byte %ld under lesing av %d bytes i fil %s"
+msgstr[1] "Lesefeil ved byte %ld under lesing av %d bytes i fil %s"
+
+#: lib/paxerror.c:192
+#, fuzzy, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "Lesefeil ved byte %ld under lesing av %d bytes i fil %s"
+msgstr[1] "Lesefeil ved byte %ld under lesing av %d bytes i fil %s"
+
+#: lib/paxerror.c:259
+#, fuzzy, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "Kan ikke skrive til %s"
+
+#: lib/paxerror.c:275
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Tast «%s --help» for mer informasjon.\n"
+msgid "%s: Warning: Cannot seek to %s"
+msgstr ""
+
+#: lib/paxerror.c:284
+#, fuzzy, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Kunne ikke lage symbolisk link til «%s»"
+
+#: lib/paxerror.c:349
+#, fuzzy, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Kunne bare skrive %d av %d bytes'"
+msgstr[1] "%s: Kunne bare skrive %d av %d bytes'"
+
+#
+#: lib/paxnames.c:155
+#, fuzzy, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Tar bort ledende «/» fra absolutte linker"
+
+#
+#: lib/paxnames.c:156
+#, fuzzy, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Tar bort ledende «/» fra absolutte linker"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr ""
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr ""
 
-#: rmt/rmt.c:308
+#: lib/rtapelib.c:299
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Tjenesten er ikke tilgjengelig"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "stdin"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "stdout"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Kan ikke eksekvere \"remote shell\""
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
 msgstr ""
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:419
+#, fuzzy
+msgid "Invalid seek direction"
+msgstr "Ugyldig modus gitt i flagg"
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Ugyldig datoformat «%s»"
+
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr ""
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Ugyldig eier gitt i flagg"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+msgid "Byte count out of range"
 msgstr ""
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: For tidlig filslutt\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "For tidlig filslutt"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "Ugyldig verdi for record_size"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Uventet filslutt i ødelagte navn"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr ""
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr ""
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "Kan ikke åpne %s"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr ""
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Ugyldig kommando"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Dette ser ikke ut som et tar-arkiv"
 
 #
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 #, fuzzy
 msgid "Total bytes written"
 msgstr "Totalt antall bytes skrevet: "
 
 #
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 #, fuzzy
 msgid "Total bytes read"
 msgstr "Totalt antall bytes skrevet: "
 
 #
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, fuzzy, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Totalt antall bytes skrevet: "
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr ""
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Ugyldig verdi for record_size"
 
 #
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Arkivnavn er ikke oppgitt"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Kan ikke verifisere stdin/stdout-arkiv"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr ""
 
 #
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Kan ikke oppdatere komprimerte arkiver"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "På begynnelsen av båndet, avslutter nå"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "For mange feil, avslutter"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, fuzzy, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Blokkstørrelse = %d enheter"
 msgstr[1] "Blokkstørrelse = %d enheter"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 #, fuzzy
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr "Kunne ikke gå tilbake i arkivfilen.  Den kan være uleselig uten -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr ""
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr ""
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr ""
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, fuzzy, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "\aGjør klar volum nummer %d for %s og trykk return: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "EOF der svar fra bruker var forventet"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "ADVARSEL: Arkivet er ufullstendig"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, fuzzy, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -662,127 +714,127 @@ msgstr ""
 " !          Start et shell\n"
 " ?          Skriv denne listen\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr ""
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr ""
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Ikke nytt volum; avslutter.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr ""
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr ""
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr ""
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, fuzzy, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s fortsetter ikke i dette volumet"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s fortsetter ikke i dette volumet"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, fuzzy, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s har feil størrelse (%ld != %ld + %ld)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, fuzzy, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Dette volumet kommer ute av rekkefølge"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, fuzzy, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Arkivet er ikke navngitt for å passe med «%s»"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, fuzzy, c-format
 msgid "Volume %s does not match %s"
 msgstr "Volumet «%s» stemmer ikke overens med «%s»"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
 msgstr ""
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 #, fuzzy
 msgid "write did not end on a block boundary"
 msgstr "Arkiv %s sluttet ikke ved en blokkgrense"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, fuzzy, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Kunne bare lese %d av %ld bytes"
 msgstr[1] "Kunne bare lese %d av %ld bytes"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 #, fuzzy
 msgid "Contents differ"
 msgstr "Modus er ulik"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Uventet filslutt i arkivet"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 #, fuzzy
 msgid "File type differs"
 msgstr "Størrelse er ulik"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Modus er ulik"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Uid er ulik"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Gid er ulik"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Modifiseringstid er ulik"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Størrelse er ulik"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Ikke linket til %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Symbolsk link er ulik"
 
-#: src/compare.c:322
+#: src/compare.c:321
 #, fuzzy
 msgid "Device number differs"
 msgstr "Enhetsnummer er endret"
@@ -805,34 +857,34 @@ msgstr ""
 msgid "Verification may fail to locate original files."
 msgstr ""
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, fuzzy, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "VERIFIKASJONSFEIL: %d ukjente arkivhoder funnet"
 msgstr[1] "VERIFIKASJONSFEIL: %d ukjente arkivhoder funnet"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr ""
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr ""
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr ""
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr ""
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr ""
 
@@ -851,443 +903,444 @@ msgstr ""
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: er uendret; ikke lagret"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, fuzzy, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "Filen %s krympet med %d bytes, fyller ut med nuller"
 msgstr[1] "Filen %s krympet med %d bytes, fyller ut med nuller"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, fuzzy, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: På et annet filesystem.  Ikke lagret"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 #, fuzzy
 msgid "contents not dumped"
 msgstr " (minnet lagret)"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Ukjent filtype; filen ble ignorert"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, fuzzy, c-format
-msgid "Missing links to %s.\n"
+msgid "Missing links to %s."
 msgstr " link til %s\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, fuzzy, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: er uendret; ikke lagret"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, fuzzy, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s er arkivet; ikke lagret"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr ""
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr ""
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr ""
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr ""
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr ""
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Hopper til neste startseksjon"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Tar bort ikke-hodedata fra arkivet"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr ""
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr ""
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr ""
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr ""
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Ekstraherer sammenhengende filer som vanlige filer"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Forsøker å ekstrahere symbolske linker som harde linker"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Leser %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, fuzzy, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "Kan ikke ekstrahere «%s» -- filen fortsetter fra et tidligere volum"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 #, fuzzy
 msgid "Unexpected long name header"
 msgstr "Uventet filslutt i arkivfilen"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, fuzzy, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "Ukjent filtype «%c» for %s, ekstrahert som en vanlig fil"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr ""
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Kunne ikke lage sikkerhetskopi av denne filen"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "Kan ikke endre navn på %s til %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr ""
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, fuzzy, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "Filkatalogen %s har endret navn"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, fuzzy, c-format
 msgid "%s: Directory has been renamed"
 msgstr "Filkatalogen %s har endret navn"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, fuzzy, c-format
 msgid "%s: Directory is new"
 msgstr "Filkatalogen %s er ny"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr ""
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 #, fuzzy
 msgid "Invalid modification time (seconds)"
 msgstr "Ugyldig modus gitt i flagg"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr ""
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr ""
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr ""
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr ""
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 #, fuzzy
 msgid "Read error in snapshot file"
 msgstr "Lesefeil på %s"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 #, fuzzy
 msgid "Unexpected EOF in snapshot file"
 msgstr "Uventet filslutt i arkivfilen"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 #, fuzzy
 msgid "Unexpected field value in snapshot file"
 msgstr "Uventet filslutt i arkivfilen"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr ""
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr ""
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr ""
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr ""
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr ""
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr ""
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr ""
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr ""
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr ""
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, fuzzy, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Kan ikke gå til filkatalogen %s"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr ""
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr ""
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Sletter %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, fuzzy, c-format
 msgid "%s: Cannot remove"
 msgstr "Kan ikke slette %s"
 
-#: src/list.c:113
+#: src/list.c:115
 #, fuzzy, c-format
 msgid "%s: Omitting"
 msgstr "Utelater %s"
 
-#: src/list.c:131
+#: src/list.c:133
 #, fuzzy, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "blokk %10ld: ** Blokk med NUL-er **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, fuzzy, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "blokk %10ld: ** Slutt på fil **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, fuzzy, c-format
 msgid "block %s: "
 msgstr "blokk %10ld: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr ""
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr ""
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr ""
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr ""
 
-#: src/list.c:803
+#: src/list.c:821
 #, fuzzy, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Dette volumet kommer ute av rekkefølge"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr ""
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr ""
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " link til %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, fuzzy, c-format
 msgid " unknown file type %s\n"
 msgstr " ukjent filtype «%c»\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr ""
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr ""
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Volumhode--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, fuzzy, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Fortsetter ved byte %ld--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Lager filkatalog:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, fuzzy, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Endret navn på %s til %s"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, fuzzy, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "Kan ikke endre navn på %s til %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, fuzzy, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Endret navn på %s til %s"
 
-#: src/misc.c:615
+#: src/misc.c:669
 #, fuzzy
 msgid "Cannot save working directory"
 msgstr "Kan ikke gå til filkatalogen %s"
 
-#: src/misc.c:621
+#: src/misc.c:675
 #, fuzzy
 msgid "Cannot change working directory"
 msgstr "Kan ikke gå til filkatalogen %s"
 
-#: src/misc.c:711
-msgid "child process"
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
 msgstr ""
 
-#: src/misc.c:720
-msgid "interprocess channel"
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "Filkatalogen %s har endret navn"
+
+#: src/misc.c:795
+msgid "child process"
 msgstr ""
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/misc.c:804
+msgid "interprocess channel"
 msgstr ""
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:601
+msgid "Pattern matching characters used in file names"
 msgstr ""
 
-#: src/names.c:597
-msgid "suppress this warning."
+#: src/names.c:603
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Finnes ikke i arkivet"
 
-#: src/names.c:615
+#: src/names.c:622
 #, fuzzy, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Finnes ikke i arkivet"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Flaggene «-%s» and «-%s» vil begge ta standard inn"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, fuzzy, c-format
 msgid "%s: Invalid archive format"
 msgstr "Ugyldig datoformat «%s»"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "GNU-funksjoner forsøkt på inkompatibelt arkiv-format"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
 msgstr ""
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1298,7 +1351,7 @@ msgid ""
 "  tar -xf archive.tar          # Extract all files from archive.tar.\n"
 msgstr ""
 
-#: src/tar.c:345
+#: src/tar.c:356
 #, fuzzy
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
@@ -1322,87 +1375,80 @@ msgstr ""
 "                  ellers enkle\n"
 "  never, simple   lag enkle sikkerhetskopier\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr ""
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr ""
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr ""
 
-#: src/tar.c:378
+#: src/tar.c:394
 #, fuzzy
 msgid "create a new archive"
 msgstr "Uventet filslutt i arkivet"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr ""
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr ""
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr ""
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr ""
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr ""
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr ""
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr ""
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr ""
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr ""
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr ""
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:408
-msgid "do not exit with nonzero on unreadable files"
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
 msgstr ""
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
+#: src/tar.c:426
+msgid "do not exit with nonzero on unreadable files"
 msgstr ""
 
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1410,577 +1456,568 @@ msgid ""
 "command line or via the -T option; NUMBER defaults to 1"
 msgstr ""
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr ""
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr ""
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr ""
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr ""
 
-#: src/tar.c:432
+#: src/tar.c:452
 #, fuzzy
 msgid "remove files after adding them to the archive"
 msgstr "Tar bort enhetsnavn fra navn i arkivet"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr ""
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr ""
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr ""
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr ""
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr ""
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr ""
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr ""
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr ""
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr ""
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr ""
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr ""
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr ""
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr ""
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr ""
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr ""
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr ""
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr ""
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
 "place (METHOD='system')"
 msgstr ""
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr ""
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr ""
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
 msgstr ""
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr ""
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
 msgstr ""
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr ""
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr ""
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr ""
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr ""
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr ""
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr ""
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr ""
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr ""
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr ""
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr ""
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr ""
 
-#: src/tar.c:536
+#: src/tar.c:556
 #, fuzzy
 msgid "create/list/extract multi-volume archive"
 msgstr "Kan ikke verifisere arkiv som går over flere volum"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr ""
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr ""
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr ""
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr ""
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr ""
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr ""
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr ""
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr ""
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr ""
 
-#: src/tar.c:562
+#: src/tar.c:582
 #, fuzzy
 msgid "Archive format selection:"
 msgstr "Arkivér til stdin"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr ""
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr ""
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr ""
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr ""
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr ""
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr ""
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr ""
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr ""
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr ""
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr ""
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr ""
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr ""
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr ""
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr ""
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
 msgstr ""
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Konflikt i kompresjonsflagg"
 
-#: src/tar.c:595
+#: src/tar.c:615
 #, fuzzy
 msgid "use archive suffix to determine the compression program"
 msgstr "Kan ikke skrive til komprimeringsprogrammet"
 
-#: src/tar.c:597
+#: src/tar.c:617
 #, fuzzy
 msgid "do not use archive suffix to determine the compression program"
 msgstr "Kan ikke skrive til komprimeringsprogrammet"
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr ""
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr ""
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr ""
-
-#: src/tar.c:609
-msgid "filter the archive through lzma"
-msgstr ""
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "%s er arkivet; ikke lagret"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "%s er arkivet; ikke lagret"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr ""
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr ""
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr ""
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr ""
 
-#: src/tar.c:625
+#: src/tar.c:641
 #, fuzzy
 msgid "change to directory DIR"
 msgstr "Kan ikke gå til filkatalogen %s"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr ""
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr ""
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr ""
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr ""
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr ""
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr ""
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr ""
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr ""
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr ""
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr ""
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr ""
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr ""
 
 #
-#: src/tar.c:664
+#: src/tar.c:682
 #, fuzzy
 msgid "don't strip leading `/'s from file names"
 msgstr "Tar bort ledende «/» fra absolutte linker"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr ""
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr ""
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr ""
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr ""
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr ""
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr ""
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr ""
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
 msgstr ""
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr ""
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr ""
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr ""
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr ""
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr ""
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr ""
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr ""
 
-#: src/tar.c:710
+#: src/tar.c:728
 #, fuzzy
 msgid "wildcards do not match `/'"
 msgstr "Volumet «%s» stemmer ikke overens med «%s»"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr ""
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr ""
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr ""
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr ""
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr ""
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -1988,276 +2025,292 @@ msgid ""
 "accepted"
 msgstr ""
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr ""
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr ""
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr ""
 
-#: src/tar.c:741
+#: src/tar.c:761
 #, fuzzy
 msgid "ask for confirmation for every action"
 msgstr "Kan ikke lese bekreftelse fra brukeren"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr ""
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr ""
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr ""
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr ""
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr ""
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr ""
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr ""
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr ""
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr ""
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr ""
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Du kan ikke angi mer enn ett av «-Acdtrux»-flaggene"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Konflikt i kompresjonsflagg"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, fuzzy, c-format
 msgid "Unknown signal name: %s"
 msgstr "Ukjent mønster «%s»"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr ""
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr ""
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr ""
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr ""
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr ""
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, c-format
+msgid "filter the archive through %s"
+msgstr ""
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr ""
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
 msgstr ""
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr ""
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr ""
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr ""
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Mer enn én grense-dato"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr ""
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr ""
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr ""
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
-msgstr ""
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
+msgstr "Ugyldig eier gitt i flagg"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Ugyldig modus gitt i flagg"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr ""
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 #, fuzzy
 msgid "Invalid owner"
 msgstr "Ugyldig eier gitt i flagg"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 #, fuzzy
 msgid "Invalid record size"
 msgstr "Ugyldig verdi for record_size"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Blokkstørrelse må være delbart på %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr ""
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr ""
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr ""
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, fuzzy, c-format
 msgid "Unknown density: `%c'"
 msgstr "Ukjent mønster «%s»"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "Flaggene «-[0-7][lmh]» støttes ikke av *denne* implementasjonen av tar"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr ""
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Gammelt flagg «%c» behøver et argument."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr ""
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr ""
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 #, fuzzy
 msgid "Multiple archive files require `-M' option"
 msgstr "Ved flere arkivfiler behøves «-M»-flagget"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr ""
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr ""
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Kan ikke verifisere arkiv som går over flere volum"
 
 #
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Kan ikke verifisere komprimerte arkiver"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Kan ikke bruke komprimerte arkiv som går over flere volum"
 
 #
-#: src/tar.c:2319
+#: src/tar.c:2431
 #, fuzzy
 msgid "Cannot concatenate compressed archives"
 msgstr "Kan ikke oppdatere komprimerte arkiver"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr ""
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "For feig til å lage et tomt arkiv"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Flaggene «-Aru» er inkompatible med «-f -»"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Du må angi ett av «-Acdtrux»-flaggene"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2269,79 +2322,83 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: Filen krympet med %d bytes, (øh!)"
 msgstr[1] "%s: Filen krympet med %d bytes, (øh!)"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr ""
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+msgid "Time stamp is out of allowed range"
+msgstr ""
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr ""
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr ""
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr ""
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr ""
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr ""
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr ""
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr ""
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr ""
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr ""
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr ""
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr ""
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr ""
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr ""
@@ -2382,232 +2439,258 @@ msgstr "Skriver kontrollpunkt %d"
 msgid "Read checkpoint %u"
 msgstr "Leser kontrollpunkt %d"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 #, fuzzy
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
 msgstr "Genrerer datafiler for GNU tar testpakke.\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 #, fuzzy
 msgid "File creation options:"
 msgstr "Konflikt i kompresjonsflagg"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr ""
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr ""
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr ""
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr ""
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr ""
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr ""
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr ""
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr ""
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr ""
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr ""
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr ""
+"\n"
+"Bruk: %s [FLAGG]...\n"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr ""
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 #, fuzzy
 msgid "Update the access and modification times of FILE"
 msgstr "%s: Kunne ikke endre aksess- og modifiseringstider"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr ""
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, fuzzy, c-format
 msgid "Invalid size: %s"
 msgstr "Ugyldig datoformat «%s»"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr ""
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr ""
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr ""
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr ""
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, fuzzy, c-format
 msgid "Unknown date format"
 msgstr "Unkjent systemfeil"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr ""
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, fuzzy, c-format
 msgid "cannot open `%s'"
 msgstr "Kan ikke åpne %s"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 #, fuzzy
 msgid "cannot seek"
 msgstr "Kan ikke eksekvere %s"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr ""
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr ""
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, fuzzy, c-format
 msgid "Unknown field `%s'"
 msgstr "Ukjent mønster «%s»"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, fuzzy, c-format
 msgid "cannot set time on `%s'"
 msgstr "Kan ikke gjøre «stat» på %s"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "Kan ikke åpne %s"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr ""
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr ""
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr ""
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr ""
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, fuzzy, c-format
 msgid "--stat requires file names"
 msgstr "--Ødelagte filnavn--\n"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr ""
+#~ msgid "Reading %s\n"
+#~ msgstr "Leser %s\n"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Kan ikke allokere buffer\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Kan ikke allokere plass til buffer"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Tast «%s --help» for mer informasjon.\n"
+
+#~ msgid "Premature end of file"
+#~ msgstr "For tidlig filslutt"
 
 #~ msgid "Cannot close file #%d"
 #~ msgstr "Kan ikke lukke fil #%d"
@@ -2827,9 +2910,6 @@ msgstr ""
 #~ msgid "Visible longname error"
 #~ msgstr "Feil på et langt navn"
 
-#~ msgid "Unexpected EOF in mangled names"
-#~ msgstr "Uventet filslutt i ødelagte navn"
-
 #~ msgid "Cannot symlink %s to %s"
 #~ msgstr "Kan ikke lage en symbolisk link fra %s til %s"
 
index d1c0c66af1fadf1ddd57fe666bcf89e99096e753..3e32023c424e6e86c188999c93d5e9f945cc6bb6 100644 (file)
Binary files a/po/nl.gmo and b/po/nl.gmo differ
index db3db2d723a9a3c0b9df2fe92e064105930da4a0..a671c82dd0747b45ef807b793416411f0be03e85 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,15 +1,15 @@
 # Dutch translations for tar.
-# Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 # This file is distributed under the same license as the tar package.
 #
 # Elros Cyriatan <cyriatan@fastmail.fm>, 2004.
 # Benno Schulenberg <benno@vertaalt.nl>, 2005, 2006, 2007, 2008.
 msgid ""
 msgstr ""
-"Project-Id-Version: tar-1.21\n"
+"Project-Id-Version: tar-1.22\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
-"PO-Revision-Date: 2008-12-27 12:51+0100\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
+"PO-Revision-Date: 2009-03-25 21:42+0100\n"
 "Last-Translator: Erwin Poeze <erwin.poeze@gmail.com>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
 "MIME-Version: 1.0\n"
@@ -17,47 +17,47 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "ongeldig argument %s van %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "argument %s van %s is niet eenduidig"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Geldige argumenten zijn:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: waarde voor '%s' is kleiner of gelijk aan %s"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: Parameter in ARGP_HELP_FMT vereist een waarde"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: Parameter in ARGP_HELP_FMT moet positief zijn"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: Onbekende parameter in ARGP_HELP_FMT"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Rommel in ARGP_HELP_FMT: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -65,237 +65,145 @@ msgstr ""
 "Een argument dat verplicht of optioneel is voor een lange optie, is dat\n"
 "ook voor de overeenkomstige korte optie."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Gebruik: "
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr "     of: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [OPTIE...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Typ '%s --help' of '%s --usage' voor meer informatie.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr ""
 "Rapporteer gebreken in het programma aan %s;\n"
 "meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Onbekende systeemfout"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "deze hulptekst tonen"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "een korte gebruikssamenvatting tonen"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "NAAM"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "de programmanaam instellen"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "SECONDEN"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "dit aantal seconden pauzeren (standaard 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "programmaversie tonen"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "**Interne programmafout**: geen versie bekend!?"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: Te veel argumenten\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr "**Interne programmafout**: optie had herkend moeten worden!?"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr "schrijffout"
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: optie '%s' is niet eenduidig\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: optie '--%s' staat geen argument toe\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: optie '%c%s' staat geen argument toe\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: optie '%s' vereist een argument\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: onbekende optie '--%s'\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: onbekende optie '%c%s'\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: ongeldige optie -- %c\n"
 
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
-msgstr "%s: ongeldige optie -- %c\n"
-
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: optie vereist een argument -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: optie '-W %s' is niet eenduidig\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: optie '-W %s' staat geen argument toe\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "onvoldoende geheugen beschikbaar"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, c-format
 msgid "unable to record current working directory"
 msgstr "kan de huidige werkmap niet vastleggen"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, c-format
 msgid "failed to return to initial working directory"
 msgstr "kan niet terugkeren naar de initiële werkmap"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Functie %s() is mislukt"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Waarschuwing: functie %s() is mislukt"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Kan modus niet wijzigen naar %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Kan eigenaar niet wijzigen naar UID %lu, GID %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "Kan geen harde koppeling maken van %s naar %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Leesfout op byte %s, tijdens lezen van %lu byte"
-msgstr[1] "%s: Leesfout op byte %s, tijdens lezen van %lu bytes"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Waarschuwing: leesfout op byte %s, tijdens lezen van %lu byte"
-msgstr[1] "%s: Waarschuwing: leesfout op byte %s, tijdens lezen van %lu bytes"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Kan in bestand niet naar %s springen"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Waarschuwing: kan in bestand niet naar %s springen"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "Kan geen symbolische koppeling maken van %s naar %s"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Slechts %lu van %lu byte geschreven"
-msgstr[1] "%s: Slechts %lu van %lu bytes geschreven"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Leidende '%s' wordt uit lidnamen weggelaten"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Leidende '%s' wordt uit doelen van harde koppelingen weggelaten"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Lege lidnaam wordt vervangen door '.'"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Lege doelnaam van harde koppeling wordt vervangen door '.'"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -309,17 +217,17 @@ msgstr "Lege doelnaam van harde koppeling wordt vervangen door '.'"
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "‘"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "’"
 
@@ -329,7 +237,7 @@ msgstr "’"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[jJyY]"
 
@@ -339,39 +247,28 @@ msgstr "^[jJyY]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[nN]"
 
-#: lib/rtapelib.c:299
+#: gnu/version-etc.c:76
 #, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Dienst is niet beschikbaar"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "standaardinvoer"
-
-#: lib/rtapelib.c:306
-#, c-format
-msgid "stdout"
-msgstr "standaarduitvoer"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Kan gindse shell niet uitvoeren"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr "©"
 
-#: lib/version-etc.c:67
-#, fuzzy
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -381,26 +278,26 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
+"Licentie GPLv3+: GNU GPL versie 3 of nieuwer <http://gnu.org/licenses/gpl."
+"html>.\n"
 "Dit is vrije software: u mag het vrijelijk wijzigen en verder verspreiden.\n"
-"De precieze licentie is GPLv3+: GNU GPL versie 3 of later.\n"
-"Zie http://gnu.org/licenses/gpl.html voor de volledige tekst.\n"
 "Er is GEEN GARANTIE, voor zover de wet dit toestaat.\n"
 "\n"
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr "Geschreven door %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Geschreven door %s en %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Geschreven door %s, %s en %s.\n"
@@ -408,7 +305,7 @@ msgstr "Geschreven door %s, %s en %s.\n"
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -420,7 +317,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -432,7 +329,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -444,7 +341,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -456,7 +353,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -470,7 +367,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -484,7 +381,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -499,182 +396,335 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
-#, c-format
+#: gnu/version-etc.c:247
+#, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
+msgstr ""
+"Rapporteer gebreken in het programma aan %s;\n"
+"meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n"
+
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
 "\n"
 "Rapporteer gebreken in het programma aan <%s>;\n"
 "meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:255
+#, fuzzy, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+msgstr "%s-beginpagina: <http://www.gnu.org/software/%s/>.\n"
+
+#: gnu/version-etc.c:258
+#, fuzzy
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
+"Algemene hulp bij het gebruik van GNU software: <http://www.gnu.org/gethelp/"
+">.\n"
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "Invoertekenreeks is te lang"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Functie %s() is mislukt"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "Syntaxfout in getal"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Waarschuwing: functie %s() is mislukt"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Kan geen bufferruimte reserveren\n"
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Kan modus niet wijzigen naar %s"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Kan geen bufferruimte reserveren"
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Kan eigenaar niet wijzigen naar UID %lu, GID %lu"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:127
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Typ '%s --help' voor meer informatie.\n"
+msgid "%s: Cannot hard link to %s"
+msgstr "Kan geen harde koppeling maken van %s naar %s"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:179 lib/paxerror.c:211
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Leesfout op byte %s, tijdens lezen van %lu byte"
+msgstr[1] "%s: Leesfout op byte %s, tijdens lezen van %lu bytes"
+
+#: lib/paxerror.c:192
+#, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Waarschuwing: leesfout op byte %s, tijdens lezen van %lu byte"
+msgstr[1] "%s: Waarschuwing: leesfout op byte %s, tijdens lezen van %lu bytes"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Kan in bestand niet naar %s springen"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Waarschuwing: kan in bestand niet naar %s springen"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "Kan geen symbolische koppeling maken van %s naar %s"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Slechts %lu van %lu byte geschreven"
+msgstr[1] "%s: Slechts %lu van %lu bytes geschreven"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Leidende '%s' wordt uit lidnamen weggelaten"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Leidende '%s' wordt uit doelen van harde koppelingen weggelaten"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Lege lidnaam wordt vervangen door '.'"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Lege doelnaam van harde koppeling wordt vervangen door '.'"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Dienst is niet beschikbaar"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "standaardinvoer"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "standaarduitvoer"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Gebruik:  %s [OPTIE]\n"
-"Een magneetband manipuleren, en opdrachten accepteren van een ander proces.\n"
-"\n"
-"  --version  programmaversie tonen\n"
-"  --help     deze hulptekst tonen\n"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "Sprongpositiefout"
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Kan gindse shell niet uitvoeren"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Sprongrichting valt buiten bereik"
+
+#: rmt/rmt.c:419
+#, fuzzy
+msgid "Invalid seek direction"
+msgstr "Ongeldige modus gegeven bij optie"
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Ongeldige grootte: %s"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Sprongpositie valt buiten bereik"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Sprongrichting valt buiten bereik"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Ongeldige bandlengte"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Sprongpositie valt buiten bereik"
+
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
+msgstr "rmtd: Voortijdig einde van bestand\n"
+
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "Hoofdbewerkingen:"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Onverwacht einde-van-bestand in archief"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "AANTAL"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "BESTAND"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
-msgstr "rmtd: Voortijdig einde van bestand\n"
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "Kan '%s' niet openen"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Voortijdig einde van bestand"
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "te veel argumenten"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Ongeldige opdracht"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Dit ziet er niet uit als een tar-archief"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Totaal aantal geschreven bytes"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "Totaal aantal gelezen bytes"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Totaal aantal verwijderde bytes: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(pijp)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Ongeldige waarde voor recordgrootte"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Geen archiefnaam opgegeven"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Kan archieven op standaardinvoer of -uitvoer niet verifiëren"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "Archief is gecomprimeerd.  Gebruik optie '%s'."
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Kan ingepakte archieven niet bijwerken"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Aan het begin van de band -- tar sluit nu af."
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Te veel fouten -- tar sluit nu af."
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Recordgrootte = %lu blok"
 msgstr[1] "Recordgrootte = %lu blokken"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Niet-uitgelijnd blok (%lu byte) in archief"
 msgstr[1] "Niet-uitgelijnd blok (%lu bytes) in archief"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr ""
 "Kan niet terugzoeken in archiefbestand; het kan onleesbaar zijn zonder -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek() is niet gestopt op een recordgrens"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: bevat een ongeldig deelnummer"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Deelnummer-overloop"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Zet deel #%d voor %s klaar en druk op Enter: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "een lege tekst, terwijl gebruikersinvoer werd verwacht"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "WAARSCHUWING: Archief is onvolledig"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -686,65 +736,65 @@ msgstr ""
 " q           tar afbreken\n"
 " y of Enter  doorgaan\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !           een subshell starten\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?           dit lijstje tonen\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Geen nieuw deel -- tar sluit af.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "Geen bestandsnaam opgegeven.  Probeer het nog eens.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "Ongeldige invoer.  Typ ? voor hulp.\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "Opdracht %s is mislukt"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s gaat mogelijk verder in dit deel: de kop bevat een afgekapte naam"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s gaat niet verder in dit deel"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s heeft een verkeerde grootte (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Dit deel valt buiten de reeks (%s - %s != %s)"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Archief is niet gemerkt als overeenkomend met %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Deel %s komt niet overeen met %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
@@ -752,60 +802,60 @@ msgstr ""
 "%s: bestandsnaam is te lang om opgeslagen te worden in een GNU-meerdelenkop; "
 "afgekapt"
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
 msgstr "write is niet gestopt op een blokgrens"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Kon slechts %lu van %lu byte lezen"
 msgstr[1] "Kon slechts %lu van %lu bytes lezen"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Inhouden verschillen"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Onverwacht einde-van-bestand in archief"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Bestandssoort verschilt"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Modus verschilt"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "UID verschilt"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "GID verschilt"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Wijzigingstijd verschilt"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Grootte verschilt"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Niet gekoppeld aan %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Symbolische koppeling verschilt"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Apparaatnummer verschilt"
 
@@ -827,34 +877,34 @@ msgstr "Archief bevat bestandsnamen waarvan de prefixen verwijderd zijn."
 msgid "Verification may fail to locate original files."
 msgstr "Een verificatie kan mogelijk de originele bestanden niet vinden."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "Verificatie is MISLUKT: %d ongeldige kop gevonden"
 msgstr[1] "Verificatie is MISLUKT: %d ongeldige koppen gevonden"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "Een los blok met nullen op %s"
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: map bevat cache-markering %s; %s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "waarde %s valt buiten bereik voor %s (%s..%s); wordt vervangen door %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "waarde %s valt buiten bereik voor %s (%s..%s)"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Er worden negatieve octale koppen gemaakt"
 
@@ -874,292 +924,278 @@ msgstr ""
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: koppelingsnaam is te lang; niet gearchiveerd"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: Bestand is gekrompen met %s byte; aangevuld met nullen"
 msgstr[1] "%s: Bestand is gekrompen met %s bytes; aangevuld met nullen"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: bestand staat op een ander bestandssysteem; niet gearchiveerd"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr "inhoud niet gearchiveerd"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Onbekende bestandssoort; bestand genegeerd"
 
-#: src/create.c:1464
-#, c-format
-msgid "Missing links to %s.\n"
+#: src/create.c:1472
+#, fuzzy, c-format
+msgid "Missing links to %s."
 msgstr "Ontbrekende koppelingen naar %s.\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: bestand is ongewijzigd; niet gearchiveerd"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: bestand is het archief zelf; niet gearchiveerd"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Bestand werd verwijderd voordat het gelezen kon worden"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr "map is niet gearchiveerd"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: bestand is gewijzigd tijdens het lezen"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: socket genegeerd"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: deur genegeerd"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Alles tot aan volgende kop wordt overgeslagen"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Niet-kop wordt uit archief verwijderd"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: onwaarschijnlijk oude tijdsstempel %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: tijdsstempel %s ligt %s seconden in de toekomst"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Onverwachte inconsistentie tijdens aanmaken van map"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Map werd hernoemd voordat de status ervan kon worden bepaald"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Aaneengesloten bestanden worden uitgepakt als gewone bestanden"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr ""
 "Poging om symbolische koppelingen als harde koppelingen uit te pakken..."
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Lezen van %s...\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Kan niet uitpakken -- bestand gaat door in een ander deel"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "Onverwachte lange-naamkop"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Onbekende bestandssoort '%c'; uitgepakt als gewoon bestand"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "Huidige %s is nieuwer of even oud"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Kan geen reservekopie van dit bestand maken"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "Kan %s niet tot %s hernoemen"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Fout is niet herstelbaar -- tar sluit nu af."
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Map is hernoemd van %s"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Map is hernoemd"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Map is nieuw"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Ongeldig tijdsstempel"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Ongeldige wijzigingstijd (seconden)"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "Ongeldige wijzigingstijd (nanoseconden)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Ongeldig apparaatnummer"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Ongeldig inode-nummer"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "Veld is te lang, tijdens lezen van snapshot-bestand"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "Leesfout tijdens lezen van snapshot-bestand"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "Onverwacht einde-van-bestand in snapshot-bestand"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "Onverwachte veldwaarde in snapshot-bestand"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "Ontbrekende record-afsluiting"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "Onjuiste incrementele bestandsindeling"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr ""
 "Niet-ondersteunde versie (%<PRIuMAX>) van incrementele bestandsindeling"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr "Onjuiste archiveringsmap: '%c' werd verwacht maar %#3o gevonden"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "Onjuiste archiveringsmap: 'X' staat er dubbel"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "Onjuiste archiveringsmap: lege naam in 'R'"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "Onjuiste archiveringsmap: 'T' werd niet voorafgegaan door 'R'"
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "Onjuiste archiveringsmap: lege naam in 'T'"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 "Onjuiste archiveringsmap: '%c' werd verwacht, maar de gegevens houden op"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr "Onjuiste archiveringsmap: 'X' is nergens gebruikt"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Kan met sjabloon %s geen tijdelijke map aanmaken"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: Map wordt niet leeggemaakt: kan de status ervan niet bepalen"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: Map staat op een ander bestandssysteem; niet leeggemaakt"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Verwijderen van %s...\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Kan niet verwijderen"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Overgeslagen"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "blok %s: ** Blok van NUL-tekens **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "blok %s: ** Einde-bestand **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "blok %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Witruimte in kop waar numerieke waarde voor %s werd verwacht"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1167,141 +1203,160 @@ msgstr ""
 "aangenomen"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Octaalwaarde %.*s in archief valt buiten bereik voor %s"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Archief bevat ouderwetse grondtal-64 koppen"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "Tekenreeks %s (met grondtal-64-met-teken) valt buiten bereik voor %s"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Grondtal-256 waarde in archief valt buiten bereik voor %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Archief bevat %.*s waar numerieke waarde voor %s werd verwacht"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Waarde %s in archief valt buiten bereik voor %s (%s..%s)"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " koppeling naar %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " onbekende bestandssoort %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Lange koppeling--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Lange naam--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Deelkop--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Verder bij byte %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Aanmaken van map:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Hernoemen van %s tot %s...\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Kan niet tot %s hernoemen"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Hernoemen van %s terug tot %s...\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Kan werkmap niet opslaan"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Kan werkmap niet wijzigen"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Bestand werd verwijderd voordat het gelezen kon worden"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Bestand werd verwijderd voordat het gelezen kon worden"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "dochterproces"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "interproces-kanaal"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr "Bestandsnamen bevatten jokertekens.  Gebruik '--wildcards'"
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr "om patroonovereenkomsten in te schakelen,"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "of '-no-wildcards' om deze melding te onderdrukken."
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Komt niet voor in archief"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Is vereist maar komt niet voor in archief"
 
-#: src/tar.c:79
+#: src/names.c:894
+#, fuzzy
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr "--preserve-order en --listed-incremental gaan niet samen"
+
+#: src/names.c:900
+#, fuzzy
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr "--preserve-order en --listed-incremental gaan niet samen"
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Opties '-%s' en '-%s' willen beide standaardinvoer gebruiken"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Ongeldige archiefindeling"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "GNU-functies gevraagd bij een incompatibele archiefindeling"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
@@ -1309,7 +1364,7 @@ msgstr ""
 "Onbekende aanhalingsstijl '%s'.  Probeer '%s --quoting-style=help' voor een "
 "overzicht."
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1329,7 +1384,7 @@ msgstr ""
 "  tar -tvf archief.tar         # Alle bestanden in archief.tar opsommen.\n"
 "  tar -xf archief.tar          # Alle bestanden van archief.tar uitpakken.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1350,87 +1405,80 @@ msgstr ""
 "  nil, existing   genummerd als ze al bestaan, anders simpel\n"
 "  never, simple   altijd simpele reservekopieën maken\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Hoofdbewerkingen:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "de inhoud van een archief opsommen"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "bestanden uit een archief uitpakken"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "een nieuw archief aanmaken"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "verschillen tussen archief en bestandssyteem vinden"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "bestanden aan het eind van een archief toevoegen"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr ""
 "alleen bestanden toevoegen die nieuwer zijn dan hun versie in het archief"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "tar-bestanden aan een archief toevoegen"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "uit het archief verwijderen (niet gebruiken bij magneetbanden!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr "label van archiefdeel controleren en stoppen"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Werkingsaanpassers:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "luchtige bestanden efficiënt verwerken"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr "HOOFD[.SUB]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr "versie van te gebruiken luchtige indeling (impliceert '--sparse')"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "oude GNU-indeling van incrementeel archief verwerken"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "BESTAND"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "nieuwe GNU-indeling van incrementeel archief verwerken"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr ""
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "niet afsluiten met een foutcode bij onleesbare bestanden"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "AANTAL"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1442,125 +1490,129 @@ msgstr ""
 "diff, --extract of --list, en wanneer een lijst van bestanden gegeven is op "
 "de opdrachtregel of via de optie -T; AANTAL is standaard 1"
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "archief is doorzoekbaar"
 
-#: src/tar.c:418
+#: src/tar.c:436
+#, fuzzy
+msgid "archive is not seekable"
+msgstr "archief is doorzoekbaar"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 "geen apparaatnummers controleren tijdens aanmaken van incrementele archieven"
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 "apparaatnummers controleren tijdens aanmaken van incrementele archieven "
 "(standaard)"
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "Overschrijvingsopties:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "het archief na het schrijven proberen te verifiëren"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "bestanden na hun toevoeging aan het archief verwijderen"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "bij het uitpakken bestaande bestanden niet vervangen"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 "bestaande bestanden die nieuwer zijn dan die in het archief niet vervangen"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "bestaande bestanden bij het uitpakken overschrijven"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "elk bestand verwijderen alvorens eroverheen uit te pakken"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "bestaande mappen leegmaken alvorens eroverheen uit te pakken"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "metagegevens van bestaande mappen behouden"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 "de metagegevens van bestaande mappen bij het uitpakken overschrijven "
 "(standaard)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Selecteren van uitvoerkanaal:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "bestanden uitpakken naar standaarduitvoer"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "OPDRACHT"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "uitgepakte bestanden via pijp naar gegeven programma sluizen"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "afsluitwaardes van dochterprocessen negeren"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr ""
 "afsluitwaardes van dochterprocessen die niet nul zijn als fout behandelen"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Behandeling van bestandskenmerken:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "toegevoegde bestanden krijgen NAAM als eigenaar"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "toegevoegde bestanden krijgen NAAM als groep"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "DATUM-OF-BESTAND"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr ""
 "wijzigingstijd zetten van bestanden die wegens DATUM-OF-BESTAND toegevoegd "
 "zijn"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "WIJZIGINGEN"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "toegevoegde bestanden krijgen (symbolische) WIJZIGINGEN in hun modus"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "MANIER"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1570,27 +1622,31 @@ msgstr ""
 "herstellen van de tijdsstempels na het lezen (MANIER='replace'; standaard), "
 "of door de tijdsstempels met rust te laten (MANIER='system')"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "bestandswijzigingstijden niet uitpakken"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+#, fuzzy
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr "bestanden proberen uit te pakken met gelijkblijvende eigenaar"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+#, fuzzy
+msgid "extract files as yourself (default for ordinary users)"
 msgstr "bestanden uitpakken als uzelf"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "altijd getallen gebruiken voor gebruikers- en groepsnamen"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr "bestandspermissies ook uitpakken (standaard voor root)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
@@ -1598,17 +1654,17 @@ msgstr ""
 "de umask van de gebruiker toepassen bij het uitpakken van bestandspermissies "
 "(standaard voor gewone gebruikers)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr ""
 "uit te pakken namen sorteren zodanig dat ze overeenkomen met de volgorde in "
 "het archief"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "hetzelfde als -p en -s samen"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
@@ -1616,139 +1672,139 @@ msgstr ""
 "het zetten van permissies en tijdsstempels van mappen uitstellen tot het "
 "einde van het uitpakken"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "het effect van de optie --delay-directory-restore ongedaan maken"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "Apparaatselectie en -wisseling:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "ARCHIEF"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "archiefbestand of apparaat ARCHIEF gebruiken"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "archiefbestand is lokaal, zelfs als het een dubbele punt bevat"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "deze OPDRACHT gebruiken in plaats van rmt"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "deze OPDRACHT gebruiken in plaats van rsh"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "schijf en dichtheid opgeven"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "meerdelig archief aanmaken/opsommen/uitpakken"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "band wisselen na schrijven van AANTAL x 1024 bytes"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "script uitvoeren aan einde van elke band (impliceert -M)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "het deelnummer in BESTAND gebruiken/bijwerken"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Blokverwerking:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "BLOKKEN"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "BLOKKEN x 512 bytes per record"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "AANTAL bytes per record (een veelvoud van 512)"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "blokken met nullen in archief negeren (betekenen einde-van-bestand)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "doorgaan met lezen tot blok compleet is (voor 4.2BSD-pijpen)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Archiefindelingskeuze:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "INDELING"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "een archief maken in de gekozen indeling"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "INDELING is een van de volgende:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "oude V7 tar-indeling"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "GNU-indeling van tar <= 1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "GNU-indeling van tar 1.13.x"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "POSIX 1003.1-1988 (ustar-indeling)"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "POSIX 1003.1-2001 (pax-indeling)"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "hetzelfde als pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "hetzelfde als --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "hetzelfde als --format=posix"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "sleutelwoord[[:]=waarde][,sleutelwoord[[:]=waarde]]..."
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "het aangeven van pax-sleutelwoorden"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "TEKST"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
@@ -1756,104 +1812,78 @@ msgstr ""
 "een archief met deelnaam TEKST maken; bij opsommen/uitpakken TEKST als "
 "zoekpatroon voor de deelnaam gebruiken"
 
-#: src/tar.c:593
+#: src/tar.c:613
 msgid "Compression options:"
 msgstr "Compressie-opties:"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr "compressieprogramma afleiden uit bestandsachtervoegsel"
 
-#: src/tar.c:597
-#, fuzzy
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr "compressieprogramma niet afleiden uit bestandsachtervoegsel"
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "het archief door 'bzip2' filteren"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "het archief door 'gzip' filteren"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "het archief door 'compress' filteren"
-
-#: src/tar.c:609
-msgid "filter the archive through lzma"
-msgstr "het archief door 'lzma' filteren"
-
-#: src/tar.c:611
-msgid "filter the archive through lzop"
-msgstr "het archief door 'lzop' filteren"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "het archief door 'gzip' filteren"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "PROGRAMMA"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "het archief door dit programma filteren (moet -d accepteren)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Lokale bestandskeuze:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 "het gegeven BESTAND aan het archief toevoegen (handig als de naam begint met "
 "een '-')"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "MAP"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "naar MAP gaan"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "namen van in of uit te pakken bestanden uit BESTAND halen"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T leest met NUL afgesloten namen, -C uitzetten"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr "het resultaat van de vorige --null-optie ongedaan maken"
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 "aanhalingstekens verwijderen rond bestandsnamen gelezen met -T (standaard)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr "aanhalingstekens niet verwijderen rond bestandsnamen gelezen met -T"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "PATROON"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "bestanden uitsluiten, gegeven als een PATROON"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "uitsluitingspatronen staan opgesomd in BESTAND"
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
@@ -1861,91 +1891,95 @@ msgstr ""
 "inhoud van mappen die CACHEDIR.TAG bevatten uitsluiten, behalve CACHEDIR.TAG "
 "zelf"
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "alles onder mappen die CACHEDIR.TAG bevatten uitsluiten"
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "mappen die CACHEDIR.TAG bevatten uitsluiten"
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 "inhoud van mappen die BESTAND bevatten uitsluiten, behalve BESTAND zelf"
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr "alles onder mappen die BESTAND bevatten uitsluiten"
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr "mappen die BESTAND bevatten uitsluiten"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr "systeemmappen van versiebeheer uitsluiten"
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "niet automatisch afdalen in mappen"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "in het lokale bestandssysteem blijven bij maken van archief"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "recursief in mappen afdalen (standaard)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "leidende '/' niet uit bestandsnamen verwijderen"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 "symbolische koppelingen volgen; de bestanden waar ze naar verwijzen "
 "archiveren"
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 "harde koppelingen volgen; de bestanden waar ze naar verwijzen archiveren"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "LIDNAAM"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "beginnen bij lid LIDNAAM in het archief"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "alleen bestanden opslaan die nieuwer zijn dan DATUM-OF-BESTAND"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "DATUM"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "datum en tijd alleen vergelijken wanneer gegevens veranderd zijn"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "MANIER"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "voor verwijdering een reservekopie maken, op de aangegeven MANIER"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "TEKENREEKS"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1954,90 +1988,99 @@ msgstr ""
 "(in plaats van '~', die standaard is tenzij door omgevingsvariable "
 "SIMPLE_BACKUP_SUFFIX veranderd)"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr "Bestandsnaam-transformaties:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr "dit AANTAL leidende componenten uit bestandsnamen verwijderen"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "EXPRESSIE"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 "deze vervangings-EXPRESSIE gebruiken om bestandsnamen met 'sed' te "
 "transformeren"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr "Bestandsnaamselectie-opties (voor zowel in- als uitsluitingspatronen)"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr "verschil tussen hoofd- en kleine letters negeren"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr "patronen komen overeen met begin van bestandsnaam"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr ""
 "patronen komen overeen met alles na een '/' (is standaard bij uitsluiting)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr "hoofdlettergevoelige vergelijking (standaard)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr "jokertekens gebruiken (is standaard bij uitsluiting)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "exacte tekenreeksvergelijking"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr "jokertekens komen niet overeen met '/'"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr "jokertekens komen overeen met '/' (is standaard bij uitsluiting)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Informatieve uitvoer:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "de verwerkte bestanden opsommen"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+#, fuzzy
+msgid "warning control"
+msgstr "Overschrijvingsopties:"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr "voortgangsberichten tonen voor elk AANTALste record (standaard 10)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr "ACTIE"
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr "bij elk controlepunt deze ACTIE uitvoeren"
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "een bericht tonen als niet alle links gearchiveerd werden"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "SIGNAAL"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2049,27 +2092,27 @@ msgstr ""
 "ontvangen wordt; mogelijke signalen zijn: SIGHUP, SIGQUIT, SIGINT, SIGUSR1 "
 "en SIGUSR2; de namen zonder het voorvoegsel SIG worden ook geaccepteerd"
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "bestandswijzigingstijden in UTC tonen"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "breedsprakige uitvoer naar BESTAND sturen"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "blokgetal binnen archief tonen bij elk bericht"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "bij elke actie om toestemming vragen"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "standaardinstellingen van tar tonen"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
@@ -2077,33 +2120,33 @@ msgstr ""
 "bij opsommen of uitpakken: elke map opsommen die niet aan zoekcriteria "
 "voldoet"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr "bestands- of archiefnamen na transformatie tonen"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "STIJL"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 "aanhalingsstijl voor namen instellen (zie verderop voor geldige waarden van "
 "STIJL)"
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "ook de tekens in TEKENREEKS aanhalen"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "de tekens in TEKENREEKS niet aanhalen"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Compatibiliteitsopties:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
@@ -2111,56 +2154,64 @@ msgstr ""
 "bij aanmaken hetzelfde als --old-archive; bij uitpakken hetzelfde als --no-"
 "same-owner"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Andere opties:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "gebruik van mogelijk gevaarlijke opties of opdrachten uitschakelen"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Slechts één van de opties 'Acdtrux' is mogelijk"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Conflicterende compressie-opties"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "Onbekende signaalnaam: %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "Voorbeeldbestand voor tijdsstempel niet gevonden"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Onbekende datumopmaak %2$s wordt vervangen door %1$s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "Optie %s: datum '%s' wordt begrepen als %s"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s: bestandenlijst is al gelezen"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s: gelezen bestandsnaam bevat een NUL-teken"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "het archief door 'xz' filteren"
+
+#: src/tar.c:1290
+#, fuzzy
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr "Geldige argumenten van --quoting-style zijn:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2168,48 +2219,53 @@ msgstr ""
 "\n"
 "*Deze* tar gebruikt de volgende standaardwaarden:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Ongeldige blokindeling"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Ongeldige bandlengte"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+#, fuzzy
+msgid "Invalid incremental level value"
+msgstr "Onjuiste incrementele bestandsindeling"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Meerdere drempeldata"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr "Ongeldig versienummer voor luchtige indeling"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr "--atime-preserve='system' is op dit platform niet mogelijk"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr "waarde van --checkpoint is geen geheel getal"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: Ongeldige groep"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Ongeldige modus gegeven bij optie"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Ongeldig nummer"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Ongeldige eigenaar"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
@@ -2217,111 +2273,117 @@ msgstr ""
 "De optie --preserve is vervallen, gebruik nu --preserve-permissions --"
 "preserve-order"
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Ongeldige recordgrootte"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Recordgrootte moet een veelvoud zijn van %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Ongeldig aantal elementen"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr "Slechts één optie --to-command is toegestaan"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "Ongeldig dichtheidsargument: %s"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "Onbekende dichtheid: '%c'"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "Opties '-[0-7][lmh]' worden niet ondersteund door *deze* tar"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[BESTAND]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Oude optie '%c' vereist een argument."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "'--occurrence' betekent niets zonder een bestandenlijst"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "'--occurrence' kan niet worden gebruikt in de gevraagde werkingsmodus"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Voor meerdere archiefbestanden is de optie '-M' vereist"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Kan '--listed-incremental' niet met '--newer' combineren"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+#, fuzzy
+msgid "--level is meaningless without --listed-incremental"
+msgstr "--preserve-order en --listed-incremental gaan niet samen"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: Deellabel is te lang (grens is %lu byte)"
 msgstr[1] "%s: Deellabel is te lang (grens is %lu bytes)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Kan meerdelige archieven niet verifiëren"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Kan ingepakte archieven niet verifiëren"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Kan geen meerdelige ingepakte archieven gebruiken"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "Kan ingepakte archieven niet samenvoegen"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "optie '--pax' kan alleen worden gebruikt bij POSIX-archieven"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr "Deellengte kan niet kleiner zijn dan de recordgrootte"
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr "--preserve-order en --listed-incremental gaan niet samen"
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Een geheel leeg archief wordt niet aangemaakt"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Opties '-Aru' gaan niet samen met '-f -'"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "U dient een van de opties '-Acdtrux' op te geven"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr "Stopt met foutstatus vanwege eerdere fouten"
@@ -2333,52 +2395,57 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: Bestand is gekrompen met %s byte"
 msgstr[1] "%s: Bestand is gekrompen met %s bytes"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "Sleutelwoord %s is onbekend of nog niet geïmplementeerd"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Getal valt buiten toegestaan bereik: %s"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "Patroon %s kan niet worden gebruikt"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "Sleutelwoord %s kan niet worden overstegen"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "Onjuiste uitgebreide kop: ontbrekende lengte"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr "Lengte van uitgebreide kop valt buiten bereik"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "Lengte %*s van uitgebreide kop valt buiten bereik"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr "Onjuiste uitgebreide kop: ontbrekende witruimte na de lengte"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Onjuiste uitgebreide kop: ontbrekend isgelijkteken"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr "Onjuiste uitgebreide kop: ontbrekend regeleinde"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr "Genegeerd: onbekend sleutelwoord '%s' in uitgebreide kop"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
@@ -2387,28 +2454,28 @@ msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr ""
 "Waarde %2$s in uitgebreide kop valt buiten bereik voor %1$s (%3$s..%4$s)"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Onjuiste uitgebreide kop: ongeldige %s=%s"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Onjuiste uitgebreide kop: overtollige %s=%s"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr "Onjuiste uitgebreide kop: ongeldige %s: onverwacht scheidingsteken %c"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr "Onjuiste uitgebreide kop: ongeldige %s: oneven aantal waarden"
@@ -2449,7 +2516,7 @@ msgstr "Schrijfcontrolepunt %u"
 msgid "Read checkpoint %u"
 msgstr "Leescontrolepunt %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
@@ -2457,91 +2524,97 @@ msgstr ""
 "genfile manipuleert gegevensbestanden voor de testreeksen van GNU paxutils.\n"
 "OPTIES zijn:\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr "Bestandsaanmaak-opties:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "GROOTTE"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "een bestand van de gegeven GROOTTE aanmaken"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "naar het bestand NAAM schrijven i.p.v. naar standaarduitvoer"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "bestandsnamen uit BESTAND lezen"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr "-T leest met NUL afgesloten namen"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 "het bestand met het gegeven PATROON vullen; PATROON is 'default' (standaard) "
 "of 'zeros' (nullen)"
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "blokgrootte voor luchtig bestand"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 "luchtig bestand genereren; de rest van de opdrachtregel specificeert de "
 "indeling"
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr "POSITIE"
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr "naar deze positie springen alvorens met schrijven te beginnen"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr "Bestandsstatistieken-opties:"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 "voor elk gegeven bestand de inhoud van de 'struct stat' printen; de "
 "standaard INDELING is: "
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr "Synchrone-uitvoer-opties:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr " [OPTIE...]"
+
+#: tests/genfile.c:165
+#, fuzzy
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 "gegeven OPDRACHT uitvoeren; dit is nuttig bij '--checkpoint' samen met één "
 "van '--cut', '--append' of '--touch'"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 "de gegeven actie uitvoeren (zie verderop) bij bereiken van het AANTALste "
 "controlepunt"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr "de datum voor de volgende '--touch'"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr "de uitgevoerde controlepunten en de afsluitwaarde van OPDRACHT tonen"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
@@ -2549,7 +2622,7 @@ msgstr ""
 "Synchroon uit te voeren acties.  Deze worden uitgevoerd bij het bereiken van "
 "het controlepunt opgegeven met de optie '--checkpoint'."
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
@@ -2557,140 +2630,214 @@ msgstr ""
 "BESTAND afkappen tot de grootte opgegeven met een voorafgaande optie '--"
 "length' (of 0 als niet gegeven)"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 "BESTAND met GROOTTE aantal bytes vergroten; deze GROOTTE is met een "
 "voorafgaande optie '--length' opgegeven"
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "de toegangs- en wijzigingstijdsstempels van BESTAND bijwerken"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "OPDRACHT uitvoeren"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "Ongeldige grootte: %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Getal valt buiten toegestaan bereik: %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr "Negatieve grootte: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "Kan status van %s niet bepalen"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr "gevraagde bestandslengte %lu, werkelijk %lu"
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr "aangemaakt bestand is niet luchtig"
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "Fout tijdens getalsontleding, nabij '%s'"
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "Onbekende datumopmaak"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[ARGUMENTEN]..."
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "Kan '%s' niet openen"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 msgid "cannot seek"
 msgstr "kan niet springen"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "Bestandsnaam bevat een NUL-teken"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 "Kan geen luchtige bestanden genereren op standaarduitvoer; gebruik de optie "
 "'--file'"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "Onjuist masker (nabij '%s')"
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr "Onbekend veld '%s'"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "Kan tijdsstempel van '%s' niet zetten"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "Kan '%s' niet openen"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "Opdracht is succesvol afgesloten\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "Opdracht is mislukt met afsluitwaarde %d\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "Opdracht is afgebroken door signaal %d\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "Opdracht is gestopt door signaal %d\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "Opdracht resulteerde in een core-dump\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "Opdracht is afgebroken\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "'--stat' vereist bestandsnamen"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "te veel argumenten"
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: ongeldige optie -- %c\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Rapporteer gebreken in het programma aan <%s>;\n"
+#~ "meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Lezen van %s...\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Fout is niet herstelbaar -- tar sluit nu af."
+
+#~ msgid "suppress this warning."
+#~ msgstr "of '-no-wildcards' om deze melding te onderdrukken."
+
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "het archief door 'bzip2' filteren"
+
+#~ msgid "filter the archive through gzip"
+#~ msgstr "het archief door 'gzip' filteren"
+
+#~ msgid "filter the archive through compress"
+#~ msgstr "het archief door 'compress' filteren"
+
+#~ msgid "filter the archive through lzma"
+#~ msgstr "het archief door 'lzma' filteren"
+
+#~ msgid "filter the archive through lzop"
+#~ msgstr "het archief door 'lzop' filteren"
+
+#~ msgid "Input string too long"
+#~ msgstr "Invoertekenreeks is te lang"
+
+#~ msgid "Number syntax error"
+#~ msgstr "Syntaxfout in getal"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Kan geen bufferruimte reserveren\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Kan geen bufferruimte reserveren"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Typ '%s --help' voor meer informatie.\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Gebruik:  %s [OPTIE]\n"
+#~ "Een magneetband manipuleren, en opdrachten accepteren van een ander "
+#~ "proces.\n"
+#~ "\n"
+#~ "  --version  programmaversie tonen\n"
+#~ "  --help     deze hulptekst tonen\n"
+
+#~ msgid "Seek offset error"
+#~ msgstr "Sprongpositiefout"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Voortijdig einde van bestand"
 
 #~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
 #~ msgstr ""
index a2b793f878a4c2a1790a6319e5c0f987d11a43aa..32778062a4ecde71b12a5e9fadbf6b2621b397ac 100644 (file)
Binary files a/po/pl.gmo and b/po/pl.gmo differ
index de6d277c67501ad44e0e4630e7a158d9e3031ee5..6dd9fbd774e42a36f0cdcb14830b0b703d6db3df 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -1,17 +1,14 @@
 # Polish translation of GNU tar
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2004, 2006, 2007, 2008 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2004, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 # This file is distributed under the same license as the tar package.
-# Rafał Maszkowski <rzm@icm.edu.pl>, 1996, 1997, 2000, 2001, 2003, 2004, 2006, 2007, 2008.
+# Rafał Maszkowski <rzm@icm.edu.pl>, 1996, 1997, 2000, 2001, 2003, 2004, 2006-2010.   „
 # Thanks to Jakub Bogusz for remarks and corrections, 2003, 2004, 2007, 2008
-#
-# my „smart" mutt needs this line
-#
 msgid ""
 msgstr ""
-"Project-Id-Version: tar 1.21\n"
+"Project-Id-Version: tar 1.22.91\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
-"PO-Revision-Date: 2008-12-27 23:59+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
+"PO-Revision-Date: 2010-02-15 16:05+0200\n"
 "Last-Translator: Rafał Maszkowski <rzm@icm.edu.pl>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
 "MIME-Version: 1.0\n"
@@ -20,47 +17,47 @@ msgstr ""
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
 "|| n%100>=20) ? 1 : 2);\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "błędny argument %s opcji %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "niejednoznaczny argument %s opcji %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Prawidłowe argumenty to:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: wartość %s jest mniejsza lub równa %s"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: Parametr ARGP_HELP_FMT wymaga podania wartości"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: Parametr ARGP_HELP_FMT musi być dodatni"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: Nieznany parametr ARGP_HELP_FMT"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Śmieci w ARGP_HELP_FMT: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -68,239 +65,143 @@ msgstr ""
 "Argumenty obowiązkowe lub opcjonalne dla opcji długich są również "
 "obowiązkowe lub opcjonalne również dla odpowiadających im opcji krótkich."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Składnia:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr "  albo: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr "[OPCJE...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Użyj `%s --help' albo `%s --usage' żeby otrzymać więcej informacji\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "Raporty o błędach należy wysyłać do %s .\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Nieznany błąd systemu"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "wyświetlenie tego opisu"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "krótka informacja o opcjach"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "NAZWA"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "ustawienie nazwy programu"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "SEK"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "poczekaj SEK sekund (domyślnie 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "informacja o wersji programu"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(BŁĄD PROGRAMU) Nieznana wersja!?"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: Za dużo argumentów\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr "(BŁĄD PROGRAMU) Opcja powinna była być rozpoznana!?"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr "błąd zapisu"
 
-#: lib/getopt.c:526 lib/getopt.c:542
+#: gnu/getopt.c:531 gnu/getopt.c:547
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
-msgstr "%s: opcja ~%s' jest niejednoznaczna\n"
+msgid "%s: option '%s' is ambiguous\n"
+msgstr "%s: opcja '%s' jest niejednoznaczna\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
+#: gnu/getopt.c:580 gnu/getopt.c:584
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
-msgstr "%s: opcja `--%s' nie może mieć argumentu\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: opcja '--%s' nie może mieć argumentu\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
+#: gnu/getopt.c:593 gnu/getopt.c:598
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
-msgstr "%s: opcja `%c%s' nie może mieć argumentu\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: opcja '%c%s' nie może mieć argumentu\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
-msgstr "%s: opcja `%s' wymaga argumentu\n"
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: opcja '%s' wymaga argumentu\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
+#: gnu/getopt.c:698 gnu/getopt.c:701
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
-msgstr "%s: nierozpoznana opcja `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: nierozpoznana opcja '--%s'\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
+#: gnu/getopt.c:709 gnu/getopt.c:712
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
-msgstr "%s: nierozpoznana opcja `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: nierozpoznana opcja '%c%s'\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
+#: gnu/getopt.c:761 gnu/getopt.c:764
 #, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: nielegalna opcja -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: błędna opcja -- '%c'\n"
 
-#: lib/getopt.c:768 lib/getopt.c:771
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
 #, c-format
-msgid "%s: invalid option -- %c\n"
-msgstr "%s: błędna opcja -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: opcja wymaga argumentu -- '%c'\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
+#: gnu/getopt.c:884 gnu/getopt.c:900
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: opcja wymaga argumentu -- %c\n"
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: opcja '-W %s' jest niejednoznaczna\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
+#: gnu/getopt.c:924 gnu/getopt.c:942
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
-msgstr "%s: opcja `-W %s' jest niejednoznaczna\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: opcja '-W %s' nie może mieć argumentu\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
-msgstr "%s: opcja `-W %s' nie może mieć argumentu\n"
-
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "brak pamięci"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, c-format
 msgid "unable to record current working directory"
-msgstr "nie udało się zapisać bieżacego katalogu"
+msgstr "nie udało się zapisać bieżącego katalogu"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, c-format
 msgid "failed to return to initial working directory"
 msgstr "nie udało się powrócić do początkowego katalogu bieżącego"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Nie można %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Uwaga: Nie można %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Nie można zmienić uprawnień na %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Nie można zmienić właściciela na uid %lu, gid %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Nie można utworzyć łącza do %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Błąd czytania, bajt %s, przy czytaniu %lu bajtu"
-msgstr[1] "%s: Błąd czytania, bajt %s, przy czytaniu %lu bajtów"
-msgstr[2] "%s: Błąd czytania, bajt %s, przy czytaniu %lu bajtów"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Uwaga: Błąd czytania, bajt %s, przy czytaniu %lu bajtu"
-msgstr[1] "%s: Uwaga: Błąd czytania, bajt %s, przy czytaniu %lu bajtów"
-msgstr[2] "%s: Uwaga: Błąd czytania, bajt %s, przy czytaniu %lu bajtów"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Nie można ustawić pozycji %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Uwaga: Nie można ustawić wskaźnika na %s"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Nie można było utworzyć łącza symbolicznego do %s"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Można było zapisać tylko %lu z %lu bajtu"
-msgstr[1] "%s: Można było zapisać tylko %lu z %lu bajtów"
-msgstr[2] "%s: Można było zapisać tylko %lu z %lu bajtów"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Usunięcie początkowego `%s' z nazw plików"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr ""
-"Usunięcie początkowego `%s' z nazw plików wskazywanych przez łącza zwykłe"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Podstawienie `.' zamiast pustej nazwy"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Podstawienie `.' zamiast pustej nazwy wskazywanej przez łącze zwykłe"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -314,17 +215,17 @@ msgstr "Podstawienie `.' zamiast pustej nazwy wskazywanej przez łącze zwykłe"
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "`"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "'"
 
@@ -334,7 +235,7 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[yYtT]"
 
@@ -344,39 +245,28 @@ msgstr "^[yYtT]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[nN]"
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Usługa niedostępna"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "stdin"
-
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "stdout"
+msgid "Packaged by %s (%s)\n"
+msgstr "Pakowane przez %s (%s)\n"
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Nie można uruchomić zdalnego shella"
+msgid "Packaged by %s\n"
+msgstr "Pakowane przez %s\n"
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr "(C)"
 
-#: lib/version-etc.c:67
-#, fuzzy
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -386,26 +276,26 @@ msgid ""
 "\n"
 msgstr ""
 "\n"
-"Licencja GPLv3+: GNU GPL wersja 3 albo późniejsza  <http://gnu.org/licenses/"
-"gpl.html>\n"
+"Licencja GPLv3+: GNU GPL wersja 3 albo późniejsza http://gnu.org/licenses/"
+"gpl.html\n"
 "To jest wolne oprogramowanie: możesz je modyfikować i rozpowszechniać.\n"
 "Autorzy NIE DAJĄ GWARANCJI w granicach dozwolonych prawem.\n"
 "\n"
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr "Napisany przez %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Napisany przez %s i %s\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Napisany przez %s, %s i %s.\n"
@@ -413,7 +303,7 @@ msgstr "Napisany przez %s, %s i %s.\n"
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -425,7 +315,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -437,7 +327,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -449,7 +339,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -461,7 +351,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -475,7 +365,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -489,7 +379,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -504,136 +394,284 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 "\n"
-"Raporty o błędach należy wysyłać do %s .\n"
+"O błędach programu poinformuj %s\n"
+"O błędach tłumaczenia poinformuj translation-team-pl@lists.sourceforge.net\n"
+
+#: gnu/version-etc.c:249
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Raporty o błędach %s należy wysyłać do %s\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
+msgstr "Strona domowa %s: %s\n"
+
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+msgstr "Strona domowa %s: http://www.gnu.org/software/%s/\n"
+
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
+"Informacje o używaniu oprogramowania GNU: http://www.gnu.org/gethelp/\n"
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Nie można %s"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Uwaga: Nie można %s"
+
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Nie można zmienić uprawnień na %s"
+
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Nie można zmienić właściciela na uid %lu, gid %lu"
+
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Nie można utworzyć łącza do %s"
+
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Błąd czytania, bajt %s, przy czytaniu %lu bajtu"
+msgstr[1] "%s: Błąd czytania, bajt %s, przy czytaniu %lu bajtów"
+msgstr[2] "%s: Błąd czytania, bajt %s, przy czytaniu %lu bajtów"
+
+#: lib/paxerror.c:192
+#, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Uwaga: Błąd czytania, bajt %s, przy czytaniu %lu bajtu"
+msgstr[1] "%s: Uwaga: Błąd czytania, bajt %s, przy czytaniu %lu bajtów"
+msgstr[2] "%s: Uwaga: Błąd czytania, bajt %s, przy czytaniu %lu bajtów"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Nie można ustawić pozycji %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Uwaga: Nie można ustawić wskaźnika na %s"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Nie można było utworzyć łącza symbolicznego do %s"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Można było zapisać tylko %lu z %lu bajtu"
+msgstr[1] "%s: Można było zapisać tylko %lu z %lu bajtów"
+msgstr[2] "%s: Można było zapisać tylko %lu z %lu bajtów"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Usunięcie początkowego `%s' z nazw plików"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
 msgstr ""
+"Usunięcie początkowego `%s' z nazw plików wskazywanych przez łącza zwykłe"
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "Za długi napis na wejściu"
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Podstawienie `.' zamiast pustej nazwy"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "Błąd syntaktyczny w liczbie"
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Podstawienie `.' zamiast pustej nazwy wskazywanej przez łącze zwykłe"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Nie można przydzielić miejsca na bufor\n"
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Usługa niedostępna"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Nie można przydzielić miejsca na bufor"
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "stdin"
 
-#: rmt/rmt.c:304
+#: lib/rtapelib.c:306
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Spróbuj `%s --help' żeby otrzymać więcej informacji\n"
+msgid "stdout"
+msgstr "stdout"
 
-#: rmt/rmt.c:308
+#: lib/rtapelib.c:429
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Składnia: %s [OPCJA]\n"
-"Manipulacja napędem taśmowym, przyjmowanie komend od zdalnych procesów.\n"
-"\n"
-"  --version  Wypisanie informacji o wersji.\n"
-"  --help     Pokazanie informacji o opcjach.\n"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "Błąd pozycji w pliku"
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Nie można uruchomić zdalnego shella"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Sposób ustawiania pozycji w pliku spoza zakresu"
+
+#: rmt/rmt.c:419
+msgid "Invalid seek direction"
+msgstr "Błędne kierunek przesuwania wskaźnika pozycji"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:427
+msgid "Invalid seek offset"
+msgstr "Błędne przesunięcie wskaźnika pozycji"
+
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Pozycja w pliku poza zakresem"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Sposób ustawiania pozycji w pliku spoza zakresu"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+msgid "Invalid byte count"
+msgstr "Błędna liczba bajtów"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+msgid "Byte count out of range"
+msgstr "Liczba bajtów poza zakresem"
+
+#: rmt/rmt.c:539
+msgid "Premature eof"
+msgstr "Przedwczesny EOF"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
-msgstr "rmtd: Przedwczesny EOF\n"
+#: rmt/rmt.c:582
+msgid "Invalid operation code"
+msgstr "Błędny kod operacji"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Przedwczesny koniec pliku"
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr "Operacja nie przewidziana"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:645
+msgid "Unexpected arguments"
+msgstr "Nieoczekiwany argumenty"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+"Posługiwanie się napędem taśmowym, przyjmowanie poleceń od zdalnego procesu"
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "LICZBA"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr "ustawienie poziomu wypisywania informacji diagnostycznych"
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "PLIK"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr "plik do zapisywania informacji diagnostycznych"
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, c-format
+msgid "cannot open %s"
+msgstr "nie można otworzyć %s"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "za dużo argumentów"
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Bezsensowna komenda"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "To nie wygląda jak archiwum tar"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Licza zapisanych bajtów"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "Liczba przeczytanych bajtów"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Liczba skasowanych bajtów: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(pipe)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Błędna wartość record_size"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Nie podana nazwa archiwum"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Nie można zweryfikować archiwum z/do stdin/stdout"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "Archiwum jest skompresowane. Należy użyć opcji %s"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Nie można uaktualnić archiwum skompresowanego"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Na początku taśmy, teraz kończę"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Za dużo błędów, kończę"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
@@ -641,7 +679,7 @@ msgstr[0] "Rozmiar rekordu = %lu blok"
 msgstr[1] "Rozmiar rekordu = %lu bloki"
 msgstr[2] "Rozmiar rekordu = %lu bloków"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
@@ -649,38 +687,38 @@ msgstr[0] "Nierówny blok (%lu bajt) w archiwum"
 msgstr[1] "Nierówny blok (%lu bajty) w archiwum"
 msgstr[2] "Nierówny blok (%lu bajtów) w archiwum"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr "Nie można się cofnąć w pliku archiwum; może nie być czytelny bez -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek nie zatrzymał się na granicy rekordów"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: zawiera błędny numer części"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Przepełnienie numeru części"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Przygotuj część numer %d dla %s i naciśnij return: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "EOF kiedy była oczekiwana odpowiedź użytkownika"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "UWAGA: Archiwum jest niekompletne"
 
 # rare case when `for parts' translates into `części' for both sing. and plural in Polish - rzm
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -691,68 +729,68 @@ msgstr ""
 " q             Zakończenie programu tar\n"
 " y albo Enter  Kontynuacja\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !             Uruchomienie powłoki\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?             Wypisanie tej listy\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Brak nowej części; zakończenie pracy.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "Brak nazwy pliku. Spróbuj jeszcze raz.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr ""
 "Błędne dane wejściowe. Wciśnij ? żeby przeczytać informacje pomocnicze\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "%s polecenie zwróciło błąd"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr ""
 "%s prawdopodobnie jest kontynuowany w tej części: nagłówek zawiera skróconą "
 "nazwę"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s nie jest kontynuowany w tej części"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s to zły rozmiar (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Ta część nie jest w kolejności (%s - %s != %s)"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Etykieta archiwum nie pasuje do %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Część %s nie pasuje do %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
@@ -760,11 +798,11 @@ msgstr ""
 "%s: nazwa pliku jest za długa do zapisania w nagłówku wieloczęściowego "
 "archiwum GNU, zostanie skrócona"
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
 msgstr "zapis nie zakończył się na granicy bloków"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
@@ -772,49 +810,49 @@ msgstr[0] "Można było przeczytać tylko %lu z %lu bajtu"
 msgstr[1] "Można było przeczytać tylko %lu z %lu bajtów"
 msgstr[2] "Można było przeczytać tylko %lu z %lu bajtów"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Zawartości się różnią"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Nieoczekiwany EOF w archiwum"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Różne typy plików"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Uprawnienia się różnią"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Uid się różni"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Gid się różni"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Czas modyfikacji się różni"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Rozmiar się różni"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Nie dołączony do %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Łącze symboliczne się różni"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Różnią się numery urządzeń"
 
@@ -836,7 +874,7 @@ msgstr "Archiwum zawiera nazwy plików bez początkowych elementów ścieżek."
 msgid "Verification may fail to locate original files."
 msgstr "Podczas weryfikacji mogą nie być znalezione pliki lokalne"
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
@@ -844,28 +882,28 @@ msgstr[0] "BŁĄD WERYFIKACJI: wykryto %d błędny nagłówek"
 msgstr[1] "BŁĄD WERYFIKACJI: wykryto %d błędne nagłówki"
 msgstr[2] "BŁĄD WERYFIKACJI: wykryto %d błędnych nagłówków"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "Samotny blok zerowy przy %s"
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: zawiera znacznik katalogu pamięci podręcznej %s; %s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "wartość %s z %s poza zakresem %s..%s; podstawione %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "wartość %s z %s poza zakresem %s..%s"
 
 # hm? - rzm
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Tworzenie ujemnych nagłówków ósemkowych"
 
@@ -885,7 +923,7 @@ msgstr ""
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: nazwa łącza jest za długa; nie została zapisana"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
@@ -893,282 +931,268 @@ msgstr[0] "%s: Plik skurczył się o %s bajt; jest dopełniany zerami"
 msgstr[1] "%s: Plik skurczył się o %s bajty; jest dopełniany zerami"
 msgstr[2] "%s: Plik skurczył się o %s bajtów; jest dopełniany zerami"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: plik w innym systemie plików; nie został zapisany"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr "zawartość nie została zapisana"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Nieznany typ pliku; plik zignorowany"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, c-format
-msgid "Missing links to %s.\n"
-msgstr "Brakujące łącza do %s.\n"
+msgid "Missing links to %s."
+msgstr "Brakujące łącza do %s."
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: plik jest niezmieniony; nie został zapisany"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: plik jest w tym archiwum; nie został zapisany"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Plik usunięty zanim został przeczytany"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr "katalog nie został zapisany"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: plik zmienił się w trakcie czytania"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: zignorowane gniazdo z nazwą"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: zignorowany plik door"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Przeskoczenie do następnego nagłówka"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Kasowanie z archiwum nie-nagłówka"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: niemożliwie stara data %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: znacznik czasowy %s jest przesunięty o %s s w przyszłość"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Nieoczekiwana niespójność przy zakładaniu katalogu"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Katalog zmienił nazwę zanim można było odtworzyć jego status"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Odtwarzanie plików ciągłych (nie sparse) jako zwykłych"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Próba odtworzenia łącza symbolicznego jako zwykłego"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Czytam %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Nie można odtworzyć -- plik jest kontynuowany z innej części"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "Niespodziewany nagłówek z długą nazwą"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Nieznany typ pliku `%c', odtworzony jako plik zwykły"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "Aktualny %s jest nowszy albo w tym samym wieku"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Nie można było zrobić kopii zapasowej tego pliku"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "Nie można przemianować %s na %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Błąd nie do naprawienia: koniec"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Nazwa katalogu została zmieniona z %s"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Nazwa katalogu została zmieniona"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Katalog jest nowy"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Błędny czas pliku"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Błędny czas modyfikacji (sekundy)"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "Błędny czas modyfikacji (nanosekundy)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Błędny numer urządzenia"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Błędny numer inodu"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "Za długie pole w pliku migawkowym"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "Błąd czytania pliku migawkowego"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "Nieoczekiwany EOF w pliku migawkowym"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "Nieoczekiwana wartość pola w pliku migawkowym"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "Brakujące zakończenie rekordu"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "Zły format pliku przyrostowego"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr "Nie obsługiwana wersja formatu przyrostowego: %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr "Zły format katalogu zrzutów: oczekiwano '%c', znaleziono %#3o"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "Zły format katalogu zrzutów: powtórzone 'X'"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "Zły format katalogu zrzutów: pusta nazwa w 'R'"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "Zły format katalogu zrzutów: 'T' nie jest poprzedzone przez 'R'"
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "Zły format katalogu zrzutów: pusta nazwa w 'T'"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr "Zły format katalogu zrzutów: oczekiwano '%c', znaleziono koniec danych"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr "Zły format katalogu zrzutów: nigdy nie użyte 'X'"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Nie można utworzyć katalogu tymczasowego przy użyciu wzorca %s"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: Bez skasowania katalogu: nie można odczytać stanu"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: katalog na innym urządzeniu: bez skasowania"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Usunięcie %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Nie można usunąć"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Pominięty"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "blok %s: ** Blok zer **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "blok: %s: ** Koniec pliku **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "blok %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Odstępy w nagłówku zamiast spodziewanej wartości numerycznej %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1176,142 +1200,161 @@ msgstr ""
 "jak uzupełnienie dwójkowe"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Wartość ósemkowa %.*s w archiwum jest spoza zakresu %s"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Archiwum zawiera przestarzałe nagłówki base64"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "W archiwum jest łańcuch base64 %s spoza zakresu %s"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Wartość base256 w archiwum jest spoza zakresu %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Archiwum zawiera %.*s tam gdzie oczekiwana była liczba %s"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Wartość %s w archiwum jest spoza zakresu %s %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " łącze do %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " nieznany typ pliku %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Długie łącze--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Długa nazwa--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Nagłówek części--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Kontynuacja od bajtu %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Tworzony jest katalog:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Nazwa %s zmieniona na %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Nie można przemianować na %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Nazwa zmieniona z %s z powrotem na %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Nie można zapisać bieżącego katalogu"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Nie można zmienić katalogu"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Plik usunięty zanim został przeczytany"
+
+#: src/misc.c:774
+#, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Katalog usunięty zanim został przeczytany"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "proces potomny"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "kanał między procesami"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr "W nazwach plików użyto znaków dopasowania wzorców. Proszę"
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 "użyć --wildcards aby włączyć porównywanie wzorców albo --no-wildcards żeby"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "wyłączyć to ostrzeżenie"
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Nie znalazłem w archiwum"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Brak podanego wystąpienia pliku w archiwum"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+"Nie jest dozwolone używanie opcji -C wewnątrz listy plików razem z --listed-"
+"incremental"
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr "Z --listed-incremental można użyć tylko jednej opcji -C"
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Opcje `-%s' i `-%s' obie chcą dostępu do standardowego wejścia"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Błędny format archiwum"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "Próba użycia rozszerzeń GNU z niekompatybilnym formatem archiwum"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
@@ -1319,7 +1362,7 @@ msgstr ""
 "Nieznany styl cytowania `%s'. Użyj `%s --quoting-style=help' żeby zobaczyć "
 "listę."
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1338,7 +1381,7 @@ msgstr ""
 "tar.\n"
 "  tar -xf archive.tar          # rozpakowanie plików z archive.tar.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1361,86 +1404,79 @@ msgstr ""
 "proste\n"
 "  never, simple   proste kopie zapasowe\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Podstawowe tryby działania:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "wypisanie zawartości archiwum"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "rozpakowanie plików z archiwum"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "utworzenie nowego archiwum"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "sprawdzenie różnic między archiwum i plikami na dysku"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "dołączenie plików na końcu archiwum"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "dołączenie tylko plików nowszych niż kopie w archiwum"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "dołączenie plików tar do archiwum"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "skasowanie plików z archiwum (nie na taśmie!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr "przetestowanie etykiety archiwum i wyjście"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Modyfikatory działania:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "efektywne przetwarzanie plików rzadkich"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr "MAJOR[.MINOR]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr "ustawienie wersji używanego formatu plików rzadkich (włącza --sparse)"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "backup przyrostowy w starym formacie GNU"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "PLIK"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "backup przyrostowy w nowym formacie GNU"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr "numer poziomu tworzonej albo oglądanej przyrostowej kopii zapasowej"
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "bez zakończenia błędem jeżeli niedostępne pliki"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "LICZBA"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1452,121 +1488,124 @@ msgstr ""
 "plików jest podana w linii poleceń albo przez opcję -T. LICZBA domyślnie "
 "wynosi 1."
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "archiwum o swobodnym dostępie"
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr "archiwum bez swobodnego dostępu"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr "bez sprawdzania numerów urządzeń przy tworzeniu archiwów przyrostowych"
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr "ze sprawdzaniem numerów urządzeń przy tworzeniu archiwów przyrostowych"
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "Sterowanie zamazywaniem"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "próba weryfikacji archiwum po zapisaniu"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "usunięcie plików po dodaniu do archiwum"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "bez zamazania istniejących plików rozpakowanymi"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 "bez zastępowania istniejących plików, które są nowsze niż ich kopie w "
 "archiwum"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "nadpisywanie istniejących plików"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "usunięcie każdego pliku przed zamazaniem go rozpakowanym plikiem"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "opróżnianie starych katalogów przed rozpakowaniem kopii z archiwum"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "zachowanie metadanych istniejących katalogów"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 "nadpisywanie metadanych istniejących katalogów przy rozpakowywaniu "
 "(domyslnie)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Wybór strumienia wyjściowego"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "rozpakowanie plików na standardowe wyjście"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "POLECENIE"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "przekazanie rozpakowywanych plików do innego programu"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "zignorowanie kodów wyjścia procesów potomnych"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr ""
 "traktowanie niezerowych kodów wyjściowych procesów potomnych jako błędu"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Przetwarzanie atrybutów plików:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "nadanie właściciela NAZWA dodanym plikom"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "nadanie grupy NAZWA dodanym plikom"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "DATA_ALBO_PLIK"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "ustawianie czasu modyfikacji dodanych plików z DATA_ALBO_PLIK"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "ZMIANY"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "ZMIANA uprawnień dodanych plików (podanych symbolicznie)"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "METODA"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1576,28 +1615,34 @@ msgstr ""
 "czytaniu (METODA='replace'; domyślnie) albo przez nieustawianie czasu "
 "(METODA='system')"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "bez odtworzenia czasu modyfikacji rozpakowanego pliku"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
-msgstr "staranie się o odtworzenie właścicieli plików"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
+msgstr ""
+"staranie się o odtworzenie właścicieli plików według zapisu w archiwum "
+"(domyślnie dla superusera)"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
-msgstr "rozpakowanie plików jako własności rozpakowującego"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
+msgstr ""
+"rozpakowanie plików jako własności rozpakowującego (domyślnie dla zwykłych "
+"użytkowników)"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "używanie numerów, nie nazw użytkowników/grup"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 "odtworzenie informacji o uprawnieniach plików (domyślnie dla superusera)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
@@ -1605,15 +1650,15 @@ msgstr ""
 "użycie umask użytkownika przy odtwarzaniu uprawnień z archiwum (domyślnie "
 "dla zwykłych użytkowników)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "pliki do rozpakowania posortowane jak w archiwum"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "to samo co równocześnie -p i -s"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
@@ -1621,139 +1666,139 @@ msgstr ""
 "ustawianie czasów zmian i uprawnień odtworzonych katalogów opóźnione do "
 "końca rozpakowywania"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "wyłączenie efektu opcji --delay-directory-restore"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "Wybór i przełączanie urządzeń:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "ARCHIWUM"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "użycie pliku lub urządzenia ARCHIWUM"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "plik archiwum lokalny, nawet jeżeli ma dwukropek"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "użyj POLECENIA zamiast /etc/rmt"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "użyj POLECENIA zamiast rsh"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "podanie napędu i gęstości"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "tworzenie/wypisanie/rozpakowanie archiwum wieloczęściowego"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "zmiana taśmy po zapisaniu LICZBA x 1024 bajtów"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "uruchomienie skryptu na końcu taśmy (włącza -M)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "użycie/uaktualnienie numeru części w PLIKU"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Parametry bloków:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "BLOKI"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "BLOKI x 512 bajtów na rekord"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "LICZBA bajtów w rekordzie, wielokrotność 512"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "ignorowanie wyzerowanych bloków w archiwum (oznacza EOF)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "podzielenie na bloki przy odczycie (dla pipe 4.2BSD)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Wybór formatu archiwum:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "FORMAT"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "utworzenie archiwum w danym formacie."
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "FORMAT może być jednym z następujących:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "stary format tara z V7"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "format GNU dla tara <= 1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "format tara GNU 1.13"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "format POSIX 1003.1-1988 (ustar)"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "format POSIX 1003.1-2001 (pax)"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "to samo co pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "to samo co --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "to samo co --format=posix"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "słowo_kluczowe[[:]=wartość][,słowo_kluczowe[[:]=wartość]]..."
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "ustawianie słów kluczowych formatu pax"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "TEKST"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
@@ -1761,107 +1806,80 @@ msgstr ""
 "utworzenie archiwum z nazwą wolumenu TEKST. Przy wypisywaniu/rozpakowaniu "
 "TEKST będzie użyty jako wzorzec dopasowania dla nazwy"
 
-#: src/tar.c:593
+#: src/tar.c:613
 msgid "Compression options:"
 msgstr "Opcje kompresji"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
-msgstr ""
-"użycie przyrostka nazwy archiwum do wyznaczenia programu kompresującego"
+msgstr "użycie przyrostka nazwy archiwum do ustalenia programu kompresującego"
 
-#: src/tar.c:597
-#, fuzzy
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr ""
 "bez używania przyrostka nazwy archiwum do wyznaczenia programu kompresującego"
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "filtrowanie archiwum przez bzip2"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "filtrowanie archiwum przez gzip"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "filtrowanie archiwum przez compress"
-
-#: src/tar.c:609
-msgid "filter the archive through lzma"
-msgstr "filtrowanie archiwum przez lzma"
-
-#: src/tar.c:611
-msgid "filter the archive through lzop"
-msgstr "filtrowanie archiwum przez lzop"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "filtrowanie archiwum przez gzip"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "PROGRAM"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "filtrowanie przez PROGRAM (akceptujący -d)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Wybór plików lokalnych:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 "dodanie podanego PLIKU do archiwum (przydatne jeżeli jego nazwa startuje od "
 "myślnika)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "KATALOG"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "przejście do KATALOGU"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "nazwy plików do rozpakowania lub spakowania z PLIKU"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T czyta nazwy zakończone zerem, wyłącz -C"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr "wyłączenie efektu użycia opcji --null"
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 "usunięcie znaków cytowania z nazw plików czytanych poprzez opcję -T "
 "(domyślnie)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr "bez usuwania znaków cytowania z nazw plików czytanych poprzez opcję -T"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "WZORZEC"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "wykluczenie nazw pasujących do WZORCA"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "wykluczenie nazw pasujących do wzorców w PLIKU"
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
@@ -1869,87 +1887,91 @@ msgstr ""
 "wykluczenie katalogów zawierających znacznik pamięci podręcznej CACHEDIR."
 "TAG, oprócz samych plików znacznika"
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "wykluczenie katalogów zawierających CACHEDIR.TAG i ich podkatalogów"
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "wykluczenie katalogów zawierających CACHEDIR.TAG"
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr "wykluczenie katalogów zawierających PLIK, ale nie samego PLIKU"
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr "wykluczenie katalogów zawierających PLIK i ich podkatalogów"
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr "wykluczenie katalogów zawierających PLIK"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr "wykluczenie katalogów systemu administrowania wersjami"
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr "wykluczenie plików kopii zapasowych i rezerwacji zasobów"
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "bez automatycznego zagłębiania się w katalogi"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "pozostanie w jednym systemie plików"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "zagłębianie się w podkatalogi (domyślnie)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "bez usuwania początkowego `/' z nazw plików"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr "archiwizacja plików, na które wskazują łącza symboliczne"
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr "archiwizacja plików, na które wskazują łącza zwykłe"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "NAZWA-PLIKU"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "zaczęcie od pliku NAZWA-PLIKU w archiwum"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "zapisanie tylko plików nowszych niż DATA albo data PLIKU"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "DATA"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "porównywanie daty i czasu tylko dla zmienionych danych"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "TRYB"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "kopia zapasowa przed usunięciem, wybranie TRYBU zarządzania wersjami"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "NAPIS"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1957,92 +1979,100 @@ msgstr ""
 "kopia zapasowa przed usunięciem, zmiana domyślnego przyrostka ('~', jeżeli "
 "nie zmieniony przez zmienną środowiska SIMPLE_BACKUP_SUFFIX)"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr "Zmiany nazwy plików:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr ""
 "ucięcie przed rozpakowaniem LICZBY początkowych elementów ścieżki z nazw "
 "plików"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "WYRAŻENIE"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr "użycie WYRAŻENIA zamiany sed-a do przekształcenia nazw plików"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 "Opcje filtracji nazw plików (dotyczą zarówno wzorców wykluczania jak "
 "włączania):"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr "traktowanie tak samo małych i wielkich liter"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr "nazwy porównywane od początków nazw plików"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr "wzorce odnoszą się do nazw po każdym / (domyślnie)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr "odróżnianie małych i wielkich liter (domyślnie)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr "używanie wildcards (domyślnie dla wykluczania)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "dosłowne porównywanie napisów"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr "wildcards nie są porównywane z `/'"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr "wildcards są porównywane z '/' (domyślnie dla wykluczania)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Informacje:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "wypisywanie szczegółów o przetwarzanych plikach"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr "SŁOWO KLUCZOWE"
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr "sterowanie ostrzeżeniami"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 "wypisywanie co ILE rekordów informacji o przetwarzaniu (domyslnie co 10)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr "AKCJA"
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr "wykonanie AKCJI przy każdym punkcie kontrolnym"
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "wypisanie komunikatu jeżeli nie wszytkie łącza zostały zapisane"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "SYGNAŁ"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2054,27 +2084,27 @@ msgstr ""
 "sygnały: SIGHUP, SIGQUIT, SIGINT, SIGUSR1 i SIGUSR2; nazwy bez prefiksu SIG "
 "są też akceptowane"
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "wypisanie dat modyfikacji plików w UTC"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "zapisanie dokładnych informacji w PLIKU"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "pokazanie przy każdym komunikacie numeru bloku w archiwum"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "proszenie o potwierdzenie każdego działania"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "wypisanie domyślnych ustawień tar-a"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
@@ -2082,33 +2112,33 @@ msgstr ""
 "wypisywanie każdego katalogu nie pasującego do kryteriów szukania przy "
 "wypisywaniu albo rozpakowywaniu archiwum"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr "pokazanie nazw plików albo archiwów po przeszktałceniu"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "STYL"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 "ustawienie stylu ujmowania nazw w cudzysłowy; poniżej dozwolone wartości "
 "STYLU"
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "dodatkowe ujmowanie w znaki cytowania znaków z ŁAŃCUCHA"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "wyłączenie ujmowania w znaki cytowania znaków z ŁAŃCUCHA"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Opcje kompatybilności:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
@@ -2116,56 +2146,63 @@ msgstr ""
 "przy tworzeniu: to samo co --old-archive przy odtwarzaniu: to co --no-same-"
 "owner"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Inne opcje:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "wyłączenie używania potencjalnie szkodliwych opcji"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
-msgstr "Nie można podać więcej niż jednej opcji z `-Acdtrux'"
+#: src/tar.c:927
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
+msgstr ""
+"Nie można podać więcej niż jednej opcji z `-Acdtrux' albo `--test-label'"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Niezgodne opcje kompresji"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "Nieznana nazwa sygnału: %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "Nie znaleziono pliku z datą"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Postawienie %s w miejscu nieznanego formatu daty %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "Opcja %s: Potraktowanie daty `%s' jako %s"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s: lista plików już przeczytana"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s: przeczytana nazwa pliku zawiera znak NUL"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
-msgstr "Argumenty opcji --quoting-style:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, c-format
+msgid "filter the archive through %s"
+msgstr "filtrowanie archiwum przez %s"
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
+msgstr "Prawidłowe argumenty dla opcji --quoting-style:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2173,48 +2210,51 @@ msgstr ""
 "\n"
 "*Ten* tar ma domyślne parametry:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Błędny współczynnik łączenia w bloki"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Błędna długość taśmy"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr "Błędny numer poziomu przyrostowej kopii zapasowej"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Więcej niż jedna data graniczna"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr "Błędna wartość wersji plików rzadkich"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr "ten system nie pozwala na użycie --atime-preserve='system'"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr "wartość --checkpoint nie jest liczbą całkowitą"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
-msgstr "%s: błędna grupa"
+#: src/tar.c:1830
+msgid "Invalid group"
+msgstr "Błędna grupa"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Błędne uprawnienia podane w opcji"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Błędny numer"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Błędny właściciel"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
@@ -2222,64 +2262,68 @@ msgstr ""
 "Opcja --preserve jest przestarzała, zamiast niej użyj --preserve-permissions "
 "--preserve-order"
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Błędna wielkość rekordu"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Rozmiar rekordu musi być wielokrotnością %d"
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Błędna ilość elementów"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr "Wolno użyć tylko jednej opcji polecenia --to-command"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "Błędna specyfikacja gęstości: %s"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "Nieznana gęstość: `%c'"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "Opcje `-[0-7][lmh]' nie są używane w *tym* tarze"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[PLIK]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Stara opcja `%c' wymaga argumentu."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "--occurrence nie ma znaczenia bez listy plików"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "--occurrence nie może być użyte w tym trybie"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Archiwum składające się z wielu plików wymaga opcji `-M'"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Nie można połączyć --listed-incremental z --newer"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr "opcja --level nic nie znaczy bez użycia --listed-incremental"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
@@ -2287,47 +2331,47 @@ msgstr[0] "%s: Za długa etykieta części (może mieć do %lu bajtu)"
 msgstr[1] "%s: Za długa etykieta części (może mieć do %lu bajtów)"
 msgstr[2] "%s: Za długa etykieta części (może mieć do %lu bajtów)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Nie można zweryfikować archiwum wieloczęściowego"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Nie można zweryfikować archiwum skompresowanego"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Nie można używać wieloczęściowego archiwum skompresowanego"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "Nie można połączyć skompresowanych archiwów"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "--pax-option może być użyta tylko przy archiwach POSIX-owych"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr "Długość części nie może być mniejsza od wielkości rekordu"
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr "opcja --preserve-order nie może być używana z --listed-incremental"
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Tchórzliwie odmawiam utworzenia pustego archiwum"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Opcje `-Aru' są niekompatybilne z `-f -'"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
-msgstr "Musisz podać jedną z opcji `-Acdtrux'"
+#: src/tar.c:2592
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
+msgstr "Musisz podać jedną z opcji `-Acdtrux' albo `--test-label'"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr "Zakończenie w stanie błędu z powodu uprzednich błędów"
@@ -2340,52 +2384,56 @@ msgstr[0] "%s: Plik skurczył się o %s bajt"
 msgstr[1] "%s: Plik skurczył się o %s bajty"
 msgstr[2] "%s: Plik skurczył się o %s bajtów"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "Słowo kluczowe %s jest nieznane albo jeszcze nie zaimplementowane"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+msgid "Time stamp is out of allowed range"
+msgstr "Czas spoza dozwolonego zakresu"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "Nie może być użyty wzorzec %s"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "Słowo kluczowe %s nie może być zastąpione"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "Błędny nagłówek rozszerzony: brakuje długości"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr "Długość nagłówka rozszerzonego jest poza dozwolonym zakresem"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "Długośc nagłówka rozszerzonego %*s jest poza zakresem"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr "Błędny nagłówek rozszerzony: brakuje odstępu po długości"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Błędny nagłówek rozszerzony: brakuje znaku równości"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr "Błędny nagłówek rozszerzony: brakuje znaku mowej linii"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr "Zignorowane nieznane słowo kluczowe nagłówka rozszerzonego `%s'"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
@@ -2394,27 +2442,27 @@ msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "Nagłówek rozszerzony - %s=%s jest poza zakresem %s..%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Błędny nagłówek rozszerzony: błędny %s=%s"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Błędny nagłówek rozszerzony: nadmiarowe %s=%s"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr "Błędny nagłówek rozszerzony: błędny %s: niespodziewany ogranicznik %c"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr "Błędny nagłówek rozszerzony: błędny %s: nieparzysta liczba wartości"
@@ -2455,7 +2503,7 @@ msgstr "Punkt kontrolny zapisu %u"
 msgid "Read checkpoint %u"
 msgstr "Punkt kontrolny czytania %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
@@ -2463,86 +2511,90 @@ msgstr ""
 "genfile służy do operacji na plikach w ramach zestawu testów GNU paxutils.\n"
 "OPCJE:\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr "Opcje tworzenia plików:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "ROZMIAR"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "Utworzenie pliku o podanym ROZMIARZE"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "Pisanie na pliku NAZWA zamiast na standardowe wyjście"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "Czytanie nazw plików z PLIKU"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr "-T czyta nazwy zakończone zerem"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr "Wypełnienie pliku podanym WZORCEM. WZORZEC to 'default' albo 'zeros'"
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "Rozmiar bloku pliku rzadkiego"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr "Utworzenie pliku rzadkiego. Reszta argumentów określa mapę pliku."
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr "POZYCJA"
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr "Ustawienie pozycji zapisu przez zapisem danych"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr "Opcje statystyki plików"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 "Wypisanie zawartości  struct stat  dla każdego podanego pliku. Domyślny "
 "FORMAT: "
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr "Opcje równoczesnego wykonywania:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+msgid "OPTION"
+msgstr "OPCJA"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
-"Wykonanie podanego POLECENIA. Przydatne z --checkpoint i jednym z --cut, --"
-"append albo --touch"
+"Wykonanie ARGUMENTÓW. Przydatne z --checkpoint i jednym z --cut, --append, --"
+"touch albo --unlink"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 "Wykonanie podanej akcji (zobacz niżej) po napotkaniu punktu kontrolnego NUMER"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr "Ustaw datę następnej opcji --touch"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr "Wypisanie wykonanych punktów kontrolnych i kodu wyjścia POLECENIA"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
@@ -2550,7 +2602,7 @@ msgstr ""
 "Akcje równoczesnego wykonania. Są podejmowane po osiągnięciu punktu "
 "kontrolnego o numerze podanym przez opcję --checkpoint"
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
@@ -2558,139 +2610,146 @@ msgstr ""
 "Obcięcie PLIKU do rozmiaru podanego przez poprzednia opcję --length (albo 0, "
 "jeżeli nie został podany)"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 "Dodanie ROZMIAR bajtów do PLIKU. ROZMIAR jak podany przez poprzednią opcję --"
 "length."
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "Uaktualnienie czasów dostepu i modyfikacji PLIKU"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "Wykonanie POLECENIA"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr "Usunięcie PLIKU"
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "Błędny rozmiar: %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Liczba spoza dozwolonego zakresu: %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr "Ujemny rozmiar: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "błąd stat(%s)"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr "żądana długość pliku %lu, faktyczna %lu"
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr "utworzony plik nie jest rzadki"
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "Błąd przetwarzania liczby blisko `%s'"
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "Nieznany format daty"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[ARGUMENTY...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "nie można otworzyć `%s'"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 msgid "cannot seek"
 msgstr "nie można ustawić pozycji"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "nazwa pliku zawiera znak NUL"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 "nie można utworzyć pliku rzadkiego na standardowym wyjściu, użyj opcji --file"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "nieprawidłowa maska (koło `%s')"
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr " Nieznane pole `%s'"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "nie można ustawić czasu na `%s'"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, c-format
+msgid "cannot unlink `%s'"
+msgstr "nie można usunąć `%s'"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "Polecenie zakończyło się poprawnie\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "Polecenie zakończyło się niepoprawnie z kodem %d\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "Polecenie zostało zakończone sygnałem %d\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "Polecenie zostało zatrzymane sygnałem %d\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "Został zapisany obraz pamięci (core dump) polecenia\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "Polecenie zakończone\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "--stat wymaga podania nazwy pliku"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "za dużo argumentów"
+#~ msgid "Cannot resolve hostname %s"
+#~ msgstr "Nieznany adres nazwy %s"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
-#~ msgstr "Uwaga: opcja -I nie jest używana, może chodzi o -j albo -T?"
+#~ msgid "suppress this warning."
+#~ msgstr "wyłączyć to ostrzeżenie"
index 9fd5232f9f39fbf1981157f7e3f97297e94ab983..0a5f0f6d76a84419796bf1a77b28efb9c978ebb7 100644 (file)
Binary files a/po/pt.gmo and b/po/pt.gmo differ
index 5212a156d94d8061c8adef29a6ec7d345385bf31..57516eae18853cce29d35efa375f1c887e8412c6 100644 (file)
--- a/po/pt.po
+++ b/po/pt.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tar 1.11.9\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
 "PO-Revision-Date: 1996-04-20 21:50\n"
 "Last-Translator: António José Coutinho <ajc@di.uminho.pt>\n"
 "Language-Team: Portuguese <pt@li.org>\n"
@@ -14,47 +14,47 @@ msgstr ""
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8-bit\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, fuzzy, c-format
 msgid "invalid argument %s for %s"
 msgstr "Formato de data inválido \"%s\""
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr ""
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr ""
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr ""
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr ""
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr ""
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr ""
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr ""
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 #, fuzzy
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
@@ -63,247 +63,147 @@ msgstr ""
 "Os argumentos obrigatórios ou opcionais para as opções longas também\n"
 "são obrigatórios ou opcionais para as correspondentes opções curtas.\n"
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr ""
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr ""
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 #, fuzzy
 msgid " [OPTION...]"
 msgstr ""
 "\n"
 "Forma de usar: %s [OPÇÃO]...\n"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, fuzzy, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Para mais informação, tente \"%s --help\".\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr ""
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Erro desconhecido, do sistema"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr ""
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr ""
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr ""
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr ""
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr ""
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr ""
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr ""
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr ""
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr ""
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr ""
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 #, fuzzy
 msgid "write error"
 msgstr "Escreve-se registo\n"
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
-msgstr ""
-
-#: lib/getopt.c:575 lib/getopt.c:579
+#: gnu/getopt.c:531 gnu/getopt.c:547
 #, fuzzy, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "A antiga opção `%c' exige um argumento."
 
-#: lib/getopt.c:588 lib/getopt.c:593
+#: gnu/getopt.c:580 gnu/getopt.c:584
 #, fuzzy, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "A antiga opção `%c' exige um argumento."
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
+#: gnu/getopt.c:593 gnu/getopt.c:598
 #, fuzzy, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "A antiga opção `%c' exige um argumento."
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
-msgstr ""
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr "A antiga opção `%c' exige um argumento."
 
-#: lib/getopt.c:704 lib/getopt.c:707
+#: gnu/getopt.c:698 gnu/getopt.c:701
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr ""
 
-#: lib/getopt.c:759 lib/getopt.c:762
+#: gnu/getopt.c:709 gnu/getopt.c:712
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr ""
 
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
-msgstr ""
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "Valor inválido para tamanho de registo (record_size)"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
 #, fuzzy, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "A antiga opção `%c' exige um argumento."
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
-msgstr ""
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "A antiga opção `%c' exige um argumento."
 
-#: lib/getopt.c:932 lib/getopt.c:950
+#: gnu/getopt.c:924 gnu/getopt.c:942
 #, fuzzy, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "A antiga opção `%c' exige um argumento."
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr ""
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, fuzzy, c-format
 msgid "unable to record current working directory"
 msgstr "Não se conseguiu determinar a directoria corrente"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, c-format
 msgid "failed to return to initial working directory"
 msgstr ""
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, fuzzy, c-format
-msgid "%s: Cannot %s"
-msgstr "Não se consegue duplicar %s com \"dup\""
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr ""
-
-#: lib/paxerror.c:93
-#, fuzzy, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Não se pode mudar para o modo para %0.4o"
-
-#: lib/paxerror.c:101
-#, fuzzy, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Não se pode mudar o dono (owner) para \"uid\" %d, \"gid\" %d"
-
-#: lib/paxerror.c:127
-#, fuzzy, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "Não se consegue ler a ligação (\"link\") %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, fuzzy, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] ""
-"Erro de leitura no \"byte\" %ld, durante a leitura de %d \"bytes\" do "
-"ficheiro %s"
-msgstr[1] ""
-"Erro de leitura no \"byte\" %ld, durante a leitura de %d \"bytes\" do "
-"ficheiro %s"
-
-#: lib/paxerror.c:192
-#, fuzzy, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] ""
-"Erro de leitura no \"byte\" %ld, durante a leitura de %d \"bytes\" do "
-"ficheiro %s"
-msgstr[1] ""
-"Erro de leitura no \"byte\" %ld, durante a leitura de %d \"bytes\" do "
-"ficheiro %s"
-
-#: lib/paxerror.c:259
-#, fuzzy, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "Não se consegue escrever em %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr ""
-
-#: lib/paxerror.c:284
-#, fuzzy, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Não se conseguiu criar uma ligação simbólica (link) para `%s'"
-
-#: lib/paxerror.c:349
-#, fuzzy, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Apenas se conseguiu escrever %d de um total de %d bytes"
-msgstr[1] "%s: Apenas se conseguiu escrever %d de um total de %d bytes"
-
-#: lib/paxnames.c:155
-#, fuzzy, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Retira-se \"/\" das ligações (\"links\") absolutas "
-
-#: lib/paxnames.c:156
-#, fuzzy, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Retira-se \"/\" das ligações (\"links\") absolutas "
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr ""
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr ""
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -317,17 +217,17 @@ msgstr ""
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr ""
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr ""
 
@@ -337,7 +237,7 @@ msgstr ""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr ""
 
@@ -347,38 +247,28 @@ msgstr ""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr ""
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Serviço indisponível"
-
-#: lib/rtapelib.c:303
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdin"
+msgid "Packaged by %s (%s)\n"
 msgstr ""
 
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:79
 #, c-format
-msgid "stdout"
+msgid "Packaged by %s\n"
 msgstr ""
 
-#: lib/rtapelib.c:512
-#, c-format
-msgid "Cannot execute remote shell"
-msgstr "Não se consegue executar uma \"shell\" remota"
-
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -389,19 +279,19 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr ""
@@ -409,7 +299,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -419,7 +309,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -429,7 +319,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -439,7 +329,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -449,7 +339,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -460,7 +350,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -471,7 +361,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -483,178 +373,336 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Mudou-se o nome %s para %s"
+
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, fuzzy, c-format
+msgid "%s: Cannot %s"
+msgstr "Não se consegue duplicar %s com \"dup\""
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
 msgstr ""
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Não se consegue reservar espaço temporário (\"buffers\")\n"
+#: lib/paxerror.c:93
+#, fuzzy, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Não se pode mudar para o modo para %0.4o"
+
+#: lib/paxerror.c:101
+#, fuzzy, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Não se pode mudar o dono (owner) para \"uid\" %d, \"gid\" %d"
+
+#: lib/paxerror.c:127
+#, fuzzy, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "Não se consegue ler a ligação (\"link\") %s"
+
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, fuzzy, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] ""
+"Erro de leitura no \"byte\" %ld, durante a leitura de %d \"bytes\" do "
+"ficheiro %s"
+msgstr[1] ""
+"Erro de leitura no \"byte\" %ld, durante a leitura de %d \"bytes\" do "
+"ficheiro %s"
+
+#: lib/paxerror.c:192
+#, fuzzy, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] ""
+"Erro de leitura no \"byte\" %ld, durante a leitura de %d \"bytes\" do "
+"ficheiro %s"
+msgstr[1] ""
+"Erro de leitura no \"byte\" %ld, durante a leitura de %d \"bytes\" do "
+"ficheiro %s"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Não se consegue reservar espaço temporário (\"buffer\")"
+#: lib/paxerror.c:259
+#, fuzzy, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "Não se consegue escrever em %s"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:275
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Para mais informação, tente \"%s --help\".\n"
+msgid "%s: Warning: Cannot seek to %s"
+msgstr ""
+
+#: lib/paxerror.c:284
+#, fuzzy, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Não se conseguiu criar uma ligação simbólica (link) para `%s'"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:349
+#, fuzzy, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Apenas se conseguiu escrever %d de um total de %d bytes"
+msgstr[1] "%s: Apenas se conseguiu escrever %d de um total de %d bytes"
+
+#: lib/paxnames.c:155
+#, fuzzy, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Retira-se \"/\" das ligações (\"links\") absolutas "
+
+#: lib/paxnames.c:156
+#, fuzzy, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Retira-se \"/\" das ligações (\"links\") absolutas "
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr ""
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr ""
+
+#: lib/rtapelib.c:299
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Serviço indisponível"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
 msgstr ""
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
 msgstr ""
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
-msgid "Seek offset out of range"
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
 
-#: rmt/rmt.c:428
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Não se consegue executar uma \"shell\" remota"
+
+#: rmt/rmt.c:413
 msgid "Seek direction out of range"
 msgstr ""
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:419
+msgid "Invalid seek direction"
+msgstr ""
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Formato de data inválido \"%s\""
+
+#: rmt/rmt.c:433
+msgid "Seek offset out of range"
+msgstr ""
+
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+msgid "Invalid byte count"
+msgstr ""
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+msgid "Byte count out of range"
+msgstr ""
+
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: Fim de ficheiro prematuro\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Fim-de-ficheiro prematuro"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "Valor inválido para tamanho de registo (record_size)"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Fim de ficheiro inesperado nos nomes truncados"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr ""
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr ""
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "Não se consegue abrir %s"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr ""
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Comando desconhecido"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Isto  não se parece a um arquivo \"tar\""
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 #, fuzzy
 msgid "Total bytes written"
 msgstr "Número total de de \"bytes\" escritos: %d\n"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 #, fuzzy
 msgid "Total bytes read"
 msgstr "Número total de de \"bytes\" escritos: %d\n"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, fuzzy, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Número total de de \"bytes\" escritos: %d\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr ""
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Valor inválido para tamanho de registo (record_size)"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 #, fuzzy
 msgid "No archive name given"
 msgstr "Não deram nome de arquivo, que  fazer?"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Não se pode  de verificar arquivos stdin ou stdout"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr ""
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 #, fuzzy
 msgid "Cannot update compressed archives"
 msgstr "Não se pode actualizar o verificar um arquivo comprimido"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "No princípio da fita, pára-se imediatamente"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Erros de mais: termina-se"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, fuzzy, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Tamanho de bloco (blocksize) = blocos de %d"
 msgstr[1] "Tamanho de bloco (blocksize) = blocos de %d"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 #, fuzzy
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr "Não se conseguiu recuar o arquivo; pode ser ilegível sem -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr ""
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr ""
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr ""
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, fuzzy, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "\aPreparar o volume no. %d para  %s e premir \"Return\": "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr ""
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "ATENÇÃO: O arquivo está incompleto"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, fuzzy, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -666,133 +714,133 @@ msgstr ""
 " !          Criar uma \"sub-shell\" (interpretador de comandos)\n"
 " ?          Escrever esta lista\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr ""
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr ""
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Não há novo volume; termina-se. \n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr ""
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr ""
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr ""
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, fuzzy, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s não tem continuidade neste volume"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s não tem continuidade neste volume"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, fuzzy, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s não é a dimensão correcta (%ld != %ld + %ld)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, fuzzy, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Este volume está fora da sequência"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, fuzzy, c-format
 msgid "Archive not labeled to match %s"
 msgstr "O arquivo não tem etiqueta e não condiz com %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, fuzzy, c-format
 msgid "Volume %s does not match %s"
 msgstr "O volume não condiz!  %s!=%s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
 msgstr ""
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 #, fuzzy
 msgid "write did not end on a block boundary"
 msgstr ""
 "O fim-de-ficheiro do arquivo %s não se encontra na fronteira de um bloco"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, fuzzy, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "%s: Só se pôde ler  %d de um total de %ld \"bytes\"\n"
 msgstr[1] "%s: Só se pôde ler  %d de um total de %ld \"bytes\"\n"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 #, fuzzy
 msgid "Contents differ"
 msgstr "Tempo de modificação"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Fim de ficheiro inesperado no arquivo"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 #, fuzzy
 msgid "File type differs"
 msgstr "%s: Ligação (\"link\") simbólica é diferente\n"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr ""
 
-#: src/compare.c:206
+#: src/compare.c:205
 #, fuzzy
 msgid "Uid differs"
 msgstr "%s: %s diferente\n"
 
-#: src/compare.c:208
+#: src/compare.c:207
 #, fuzzy
 msgid "Gid differs"
 msgstr "%s: %s diferente\n"
 
-#: src/compare.c:212
+#: src/compare.c:211
 #, fuzzy
 msgid "Mod time differs"
 msgstr "Tempo de modificação"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 #, fuzzy
 msgid "Size differs"
 msgstr "%s: Ligação (\"link\") simbólica é diferente\n"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, fuzzy, c-format
 msgid "Not linked to %s"
 msgstr "%s: Não está ligado a %s\n"
 
-#: src/compare.c:293
+#: src/compare.c:292
 #, fuzzy
 msgid "Symlink differs"
 msgstr "%s: Ligação (\"link\") simbólica é diferente\n"
 
-#: src/compare.c:322
+#: src/compare.c:321
 #, fuzzy
 msgid "Device number differs"
 msgstr "%s: Os números do periférico mudaram\n"
@@ -817,34 +865,34 @@ msgstr ""
 msgid "Verification may fail to locate original files."
 msgstr ""
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, fuzzy, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "ERRO DE VERIFICAÇÃO: Encontraram-se %d cabeçalhos inválidos"
 msgstr[1] "ERRO DE VERIFICAÇÃO: Encontraram-se %d cabeçalhos inválidos"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr ""
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr ""
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr ""
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr ""
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr ""
 
@@ -863,448 +911,449 @@ msgstr ""
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: não foi modificado; não será arquivado"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, fuzzy, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "O ficheiro %s diminuiu em %d \"bytes\", será completado com zeros"
 msgstr[1] "O ficheiro %s diminuiu em %d \"bytes\", será completado com zeros"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, fuzzy, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: Está num outro sistema de ficheiros; não será arquivado"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 #, fuzzy
 msgid "contents not dumped"
 msgstr " (imagem da memória despejada \"core dumped\")"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Tipo de ficheiro desconhecido; ficheiro ignorado"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, fuzzy, c-format
-msgid "Missing links to %s.\n"
+msgid "Missing links to %s."
 msgstr " ligação para %s\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, fuzzy, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: não foi modificado; não será arquivado"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, fuzzy, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s é o arquivo; não será arquivado"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr ""
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr ""
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr ""
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr ""
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr ""
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Salta para próximo cabeçalho"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Apaga-se do arquivo um não-cabeçalho"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr ""
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr ""
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr ""
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr ""
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Estão-se a extrair ficheiros contíguos como sendo ficheiros normais"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr ""
 "Está-se a tentar extrair ligações simbólicas (sym. links) como ligações "
 "físicas (hard links)"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Leitura de %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, fuzzy, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr ""
 "Não se pode extraír `%s' -- é a continuação de um ficheiro de outro volume"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 #, fuzzy
 msgid "Unexpected long name header"
 msgstr "Fim de ficheiro inesperado no ficheiro de arquivo"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, fuzzy, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr ""
 "Tipo \"%c\" do ficheiro \"%s\" desconhecido; extrai-se como um ficheiro "
 "normal"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr ""
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr ""
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "Não se consegue mudar o nome de %s para %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr ""
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, fuzzy, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "Mudou-se o nome do directoria %s"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, fuzzy, c-format
 msgid "%s: Directory has been renamed"
 msgstr "Mudou-se o nome do directoria %s"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, fuzzy, c-format
 msgid "%s: Directory is new"
 msgstr "O directoria %s é novo"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr ""
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr ""
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr ""
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr ""
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr ""
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr ""
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 #, fuzzy
 msgid "Read error in snapshot file"
 msgstr "Erro de leitura sobre %s"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 #, fuzzy
 msgid "Unexpected EOF in snapshot file"
 msgstr "Fim de ficheiro inesperado no ficheiro de arquivo"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 #, fuzzy
 msgid "Unexpected field value in snapshot file"
 msgstr "Fim de ficheiro inesperado no ficheiro de arquivo"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr ""
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr ""
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr ""
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr ""
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr ""
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr ""
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr ""
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr ""
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr ""
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, fuzzy, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Não se pode mudar para a directoria %s"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr ""
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr ""
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Apaga-se  %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, fuzzy, c-format
 msgid "%s: Cannot remove"
 msgstr "Não se consegue apagar %s"
 
-#: src/list.c:113
+#: src/list.c:115
 #, fuzzy, c-format
 msgid "%s: Omitting"
 msgstr "Omite-se %s"
 
-#: src/list.c:131
+#: src/list.c:133
 #, fuzzy, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "bloco %10ld: ** Bloco de NULs **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, fuzzy, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "bloco %10ld: ** Fim-de-ficheiro **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, fuzzy, c-format
 msgid "block %s: "
 msgstr "bloco %10ld: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr ""
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr ""
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr ""
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr ""
 
-#: src/list.c:803
+#: src/list.c:821
 #, fuzzy, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Este volume está fora da sequência"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr ""
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr ""
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " ligação para %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, fuzzy, c-format
 msgid " unknown file type %s\n"
 msgstr " tipo de ficheiro desconhecido \"%c\"\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr ""
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr ""
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Cabeçalho de volume--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, fuzzy, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Continua no \"byte\" %ld--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Criação de directoria::"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, fuzzy, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Mudou-se o nome %s para %s"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, fuzzy, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "Não se consegue mudar o nome de %s para %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, fuzzy, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Mudou-se o nome %s para %s"
 
-#: src/misc.c:615
+#: src/misc.c:669
 #, fuzzy
 msgid "Cannot save working directory"
 msgstr "Não se pode mudar para a directoria %s"
 
-#: src/misc.c:621
+#: src/misc.c:675
 #, fuzzy
 msgid "Cannot change working directory"
 msgstr "Não se pode mudar para a directoria %s"
 
-#: src/misc.c:711
-msgid "child process"
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
 msgstr ""
 
-#: src/misc.c:720
-msgid "interprocess channel"
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "Mudou-se o nome do directoria %s"
+
+#: src/misc.c:795
+msgid "child process"
 msgstr ""
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/misc.c:804
+msgid "interprocess channel"
 msgstr ""
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:601
+msgid "Pattern matching characters used in file names"
 msgstr ""
 
-#: src/names.c:597
-msgid "suppress this warning."
+#: src/names.c:603
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Não foi encontrado no arquivo"
 
-#: src/names.c:615
+#: src/names.c:622
 #, fuzzy, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Não foi encontrado no arquivo"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Ambas as opções `-%s' e `-%s' precisam do \"standard input\""
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, fuzzy, c-format
 msgid "%s: Invalid archive format"
 msgstr "Formato de data inválido \"%s\""
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr ""
 "Estão-se a querer propriedades GNU num arquivo com formato incompatível"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
 msgstr ""
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1315,7 +1364,7 @@ msgid ""
 "  tar -xf archive.tar          # Extract all files from archive.tar.\n"
 msgstr ""
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1327,87 +1376,80 @@ msgid ""
 "  never, simple   always make simple backups\n"
 msgstr ""
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr ""
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr ""
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr ""
 
-#: src/tar.c:378
+#: src/tar.c:394
 #, fuzzy
 msgid "create a new archive"
 msgstr "Fim de ficheiro inesperado no arquivo"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr ""
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr ""
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr ""
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr ""
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr ""
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr ""
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr ""
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr ""
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr ""
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr ""
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:408
-msgid "do not exit with nonzero on unreadable files"
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
 msgstr ""
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
+#: src/tar.c:426
+msgid "do not exit with nonzero on unreadable files"
 msgstr ""
 
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1415,575 +1457,566 @@ msgid ""
 "command line or via the -T option; NUMBER defaults to 1"
 msgstr ""
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr ""
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr ""
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr ""
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr ""
 
-#: src/tar.c:432
+#: src/tar.c:452
 #, fuzzy
 msgid "remove files after adding them to the archive"
 msgstr "Retira-se a especificação do \"drive\" aos nomes no arquivo"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr ""
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr ""
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr ""
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr ""
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr ""
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr ""
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr ""
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr ""
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr ""
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr ""
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr ""
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr ""
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr ""
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr ""
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr ""
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr ""
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr ""
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
 "place (METHOD='system')"
 msgstr ""
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr ""
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr ""
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
 msgstr ""
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr ""
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
 msgstr ""
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr ""
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr ""
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr ""
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr ""
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr ""
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr ""
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr ""
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr ""
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr ""
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr ""
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr ""
 
-#: src/tar.c:536
+#: src/tar.c:556
 #, fuzzy
 msgid "create/list/extract multi-volume archive"
 msgstr "Não se pode verificar arquivos multi-volume"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr ""
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr ""
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr ""
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr ""
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr ""
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr ""
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr ""
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr ""
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr ""
 
-#: src/tar.c:562
+#: src/tar.c:582
 #, fuzzy
 msgid "Archive format selection:"
 msgstr "Arquivo para stdin"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr ""
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr ""
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr ""
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr ""
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr ""
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr ""
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr ""
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr ""
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr ""
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr ""
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr ""
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr ""
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr ""
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr ""
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
 msgstr ""
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Há conflitos entre as opções de compressão"
 
-#: src/tar.c:595
+#: src/tar.c:615
 #, fuzzy
 msgid "use archive suffix to determine the compression program"
 msgstr "Não se consegue escrever para o programa de compressão"
 
-#: src/tar.c:597
+#: src/tar.c:617
 #, fuzzy
 msgid "do not use archive suffix to determine the compression program"
 msgstr "Não se consegue escrever para o programa de compressão"
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr ""
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr ""
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr ""
-
-#: src/tar.c:609
-msgid "filter the archive through lzma"
-msgstr ""
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "%s é o arquivo; não será arquivado"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "%s é o arquivo; não será arquivado"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr ""
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr ""
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr ""
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr ""
 
-#: src/tar.c:625
+#: src/tar.c:641
 #, fuzzy
 msgid "change to directory DIR"
 msgstr "Não se pode mudar para a directoria %s"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr ""
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr ""
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr ""
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr ""
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr ""
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr ""
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr ""
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr ""
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr ""
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr ""
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr ""
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr ""
 
-#: src/tar.c:664
+#: src/tar.c:682
 #, fuzzy
 msgid "don't strip leading `/'s from file names"
 msgstr "Retira-se \"/\" das ligações (\"links\") absolutas "
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr ""
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr ""
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr ""
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr ""
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr ""
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr ""
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr ""
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
 msgstr ""
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr ""
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr ""
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr ""
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr ""
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr ""
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr ""
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr ""
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr ""
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr ""
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr ""
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr ""
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr ""
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr ""
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -1991,275 +2024,291 @@ msgid ""
 "accepted"
 msgstr ""
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr ""
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr ""
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr ""
 
-#: src/tar.c:741
+#: src/tar.c:761
 #, fuzzy
 msgid "ask for confirmation for every action"
 msgstr "Não se consegue obter confirmação, do utilizador"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr ""
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr ""
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr ""
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr ""
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr ""
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr ""
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr ""
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr ""
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr ""
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr ""
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Não se pode especificar mais do que uma das opções \"-Acdtrux\""
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Há conflitos entre as opções de compressão"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, fuzzy, c-format
 msgid "Unknown signal name: %s"
 msgstr "Opção \"%c\" desconhecida"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr ""
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr ""
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr ""
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr ""
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr ""
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, c-format
+msgid "filter the archive through %s"
+msgstr ""
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr ""
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
 msgstr ""
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr ""
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr ""
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr ""
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr ""
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr ""
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr ""
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr ""
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
-msgstr ""
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
+msgstr "Valor inválido para tamanho de registo (record_size)"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr ""
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr ""
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr ""
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 #, fuzzy
 msgid "Invalid record size"
 msgstr "Valor inválido para tamanho de registo (record_size)"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "O tamanho dos registos tem que ser múltiplo de %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr ""
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 #, fuzzy
 msgid "Only one --to-command option allowed"
 msgstr "Só se permite uma opção de compressão"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr ""
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, fuzzy, c-format
 msgid "Unknown density: `%c'"
 msgstr "Opção \"%c\" desconhecida"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "As opções \"-[0-7][lmh]\" não são suportadas por *este* tar"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr ""
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "A antiga opção `%c' exige um argumento."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr ""
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr ""
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 #, fuzzy
 msgid "Multiple archive files require `-M' option"
 msgstr "Para usar vários arquivos é necessária a opção \"-M\""
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr ""
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr ""
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Não se pode verificar arquivos multi-volume"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 #, fuzzy
 msgid "Cannot verify compressed archives"
 msgstr "Não se pode actualizar o verificar um arquivo comprimido"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Não se pode de usar arquivos multi-volume comprimidos"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 #, fuzzy
 msgid "Cannot concatenate compressed archives"
 msgstr "Não se pode actualizar o verificar um arquivo comprimido"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr ""
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Recusa-se, covardemente, a criar um arquivo vazio"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "As opções \"-Aru\" são imcompatíveis com \"-f -\""
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Tem que se especificar uma das opções \"-Acdtrux\""
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2271,79 +2320,83 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: O ficheiro diminui em %d bytes, (desgraça!)"
 msgstr[1] "%s: O ficheiro diminui em %d bytes, (desgraça!)"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr ""
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+msgid "Time stamp is out of allowed range"
+msgstr ""
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr ""
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr ""
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr ""
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr ""
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr ""
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr ""
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr ""
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr ""
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr ""
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr ""
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr ""
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr ""
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr ""
@@ -2384,231 +2437,257 @@ msgstr "Escreve-se o ponto de verifica
 msgid "Read checkpoint %u"
 msgstr "Leu-se o ponto de verificação %d"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
 msgstr ""
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 #, fuzzy
 msgid "File creation options:"
 msgstr "Há conflitos entre as opções de compressão"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr ""
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr ""
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr ""
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr ""
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr ""
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr ""
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr ""
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr ""
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr ""
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr ""
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr ""
+"\n"
+"Forma de usar: %s [OPÇÃO]...\n"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr ""
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 #, fuzzy
 msgid "Update the access and modification times of FILE"
 msgstr "Não se conseguiu modificar os tempos de acesso e modificação de %s"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr ""
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, fuzzy, c-format
 msgid "Invalid size: %s"
 msgstr "Formato de data inválido \"%s\""
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr ""
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr ""
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr ""
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr ""
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, fuzzy, c-format
 msgid "Unknown date format"
 msgstr "Erro desconhecido, do sistema"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr ""
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, fuzzy, c-format
 msgid "cannot open `%s'"
 msgstr "Não se consegue abrir %s"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 #, fuzzy
 msgid "cannot seek"
 msgstr "Não se consegue executar %s"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr ""
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr ""
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, fuzzy, c-format
 msgid "Unknown field `%s'"
 msgstr "Opção \"%c\" desconhecida"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, fuzzy, c-format
 msgid "cannot set time on `%s'"
 msgstr "Não se consegue executar \"stat\" para o ficheiro %s"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "Não se consegue abrir %s"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr ""
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr ""
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr ""
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr ""
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, fuzzy, c-format
 msgid "--stat requires file names"
 msgstr "--Nomes de ficheiros truncados--\n"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr ""
+#~ msgid "Reading %s\n"
+#~ msgstr "Leitura de %s\n"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Não se consegue reservar espaço temporário (\"buffers\")\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Não se consegue reservar espaço temporário (\"buffer\")"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Para mais informação, tente \"%s --help\".\n"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Fim-de-ficheiro prematuro"
 
 #~ msgid "Cannot close file #%d"
 #~ msgstr "Não se consegue fechar o ficheiro #%d"
@@ -2845,9 +2924,6 @@ msgstr ""
 #~ msgid "Visible longname error"
 #~ msgstr "Erro evidente num nome longo"
 
-#~ msgid "Unexpected EOF in mangled names"
-#~ msgstr "Fim de ficheiro inesperado nos nomes truncados"
-
 #~ msgid "Cannot symlink %s to %s"
 #~ msgstr "Não se pode criar uma ligação (\"link\") simbólica de  %s para %s"
 
index 58505cd07a5f19e1debec1904ee249f8b10ea594..0e52ec58c984082e7e6fd340fc21c37dcbe0f0cf 100644 (file)
Binary files a/po/pt_BR.gmo and b/po/pt_BR.gmo differ
index 3e2b6c953a25f17d347a8246711beb4cbed512f0..03bea5c3d586708e6c15e08c90ca3fc92622b35f 100644 (file)
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tar 1.13.25\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
 "PO-Revision-Date: 2002-11-27 20:30-0300\n"
 "Last-Translator: Alexandre Folle de Menezes <afmenez@terra.com.br>\n"
 "Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n"
@@ -19,73 +19,73 @@ msgstr ""
 "Content-Type: text/plain; charset=ISO-8859-1\n"
 "Content-Transfer-Encoding: 8-bit\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "argumento %s inválido para %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "argumento %s ambíguo para %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Os argumentos válidos são:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr ""
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr ""
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr ""
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr ""
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr ""
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
 msgstr ""
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr ""
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr ""
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 #, fuzzy
 msgid " [OPTION...]"
 msgstr ""
 "\n"
 "Uso: %s [OPÇÃO]...\n"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, fuzzy, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Tente `%s --help' para mais informações.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, fuzzy, c-format
 msgid "Report bugs to %s.\n"
 msgstr ""
@@ -93,214 +93,121 @@ msgstr ""
 "Informar erros no programa para <bug-tar@gnu.org>.\n"
 "Informar erros na tradução para <afmenez@terra.com.br>.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Erro de sistema desconhecido"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr ""
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr ""
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr ""
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr ""
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr ""
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr ""
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr ""
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr ""
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, fuzzy, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: a opção `%s' exige um argumento\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr ""
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr ""
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: a opção `%s' é ambígua\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: a opção `--%s' não admite um argumento\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: a opção `%c%s' não admite um argumento\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: a opção `%s' exige um argumento\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: opção `--%s' não reconhecida\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: opção `%c%s' não reconhecida\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: opção ilegal -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: opção inválida -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: a opção exige um argumento -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: a opção `-W %s' é ambígua\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: a opção `-W %s' não aceita um argumento\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "memória esgotada"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, fuzzy, c-format
 msgid "unable to record current working directory"
 msgstr "Impossível mudar o diretório de trabalho"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, fuzzy, c-format
 msgid "failed to return to initial working directory"
 msgstr "Impossível salvar diretório de trabalho"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Não é possível %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Atenção: Não é possível %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Impossível mudar modo para %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Impossível alterar dono para uid %lu, gid %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Impossível fazer link para %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, fuzzy, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Erro de leitura no byte %s, lendo %lu bytes"
-msgstr[1] "%s: Erro de leitura no byte %s, lendo %lu bytes"
-
-#: lib/paxerror.c:192
-#, fuzzy, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Aviso: Erro de leitura no byte %s, lendo %lu bytes"
-msgstr[1] "%s: Aviso: Erro de leitura no byte %s, lendo %lu bytes"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Impossível saltar para %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Aviso: Não é possível saltar para %s"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Impossível criar link simbólico para %s"
-
-#: lib/paxerror.c:349
-#, fuzzy, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Gravados apenas %lu de um total de %lu bytes"
-msgstr[1] "%s: Gravados apenas %lu de um total de %lu bytes"
-
-#: lib/paxnames.c:155
-#, fuzzy, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Removendo `%.*s' inicial dos nomes dos membros"
-
-#: lib/paxnames.c:156
-#, fuzzy, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Removendo `%.*s' inicial dos nomes dos membros"
-
-#: lib/paxnames.c:169
-#, fuzzy
-msgid "Substituting `.' for empty member name"
-msgstr "Removendo `%.*s' inicial dos nomes dos membros"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr ""
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -314,17 +221,17 @@ msgstr ""
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "`"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "'"
 
@@ -334,7 +241,7 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr ""
 
@@ -344,38 +251,28 @@ msgstr ""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr ""
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Serviço não disponível"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "entrada padrão (stdin)"
-
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "saída padrão (stdout)"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Impossível executar um shell remoto"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -386,19 +283,19 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, fuzzy, c-format
 msgid "Written by %s.\n"
 msgstr "Escrito por François Pinard"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, fuzzy, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Escrito por François Pinard"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, fuzzy, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Escrito por François Pinard"
@@ -406,7 +303,7 @@ msgstr "Escrito por Fran
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -416,7 +313,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -426,7 +323,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -436,7 +333,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -446,7 +343,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -457,7 +354,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -468,7 +365,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -480,184 +377,335 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 "\n"
 "Informar erros no programa para <bug-tar@gnu.org>.\n"
 "Informar erros na tradução para <afmenez@terra.com.br>.\n"
 
-#: lib/version-etc.c:182
-#, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
+"\n"
+"Informar erros no programa para <bug-tar@gnu.org>.\n"
+"Informar erros na tradução para <afmenez@terra.com.br>.\n"
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:253
+#, c-format
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Impossível alocar espaço para buffer\n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Não é possível %s"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Atenção: Não é possível %s"
+
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Impossível mudar modo para %s"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Impossível alocar espaço para buffer"
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Impossível alterar dono para uid %lu, gid %lu"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:127
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Tente `%s --help' para mais informações.\n"
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Impossível fazer link para %s"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:179 lib/paxerror.c:211
 #, fuzzy, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Erro de leitura no byte %s, lendo %lu bytes"
+msgstr[1] "%s: Erro de leitura no byte %s, lendo %lu bytes"
+
+#: lib/paxerror.c:192
+#, fuzzy, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Aviso: Erro de leitura no byte %s, lendo %lu bytes"
+msgstr[1] "%s: Aviso: Erro de leitura no byte %s, lendo %lu bytes"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Impossível saltar para %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Aviso: Não é possível saltar para %s"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Impossível criar link simbólico para %s"
+
+#: lib/paxerror.c:349
+#, fuzzy, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Gravados apenas %lu de um total de %lu bytes"
+msgstr[1] "%s: Gravados apenas %lu de um total de %lu bytes"
+
+#: lib/paxnames.c:155
+#, fuzzy, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Removendo `%.*s' inicial dos nomes dos membros"
+
+#: lib/paxnames.c:156
+#, fuzzy, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Removendo `%.*s' inicial dos nomes dos membros"
+
+#: lib/paxnames.c:169
+#, fuzzy
+msgid "Substituting `.' for empty member name"
+msgstr "Removendo `%.*s' inicial dos nomes dos membros"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
 msgstr ""
-"Uso: %s [OPÇÃO]\n"
-"Manipula uma unidade de fita, aceitando comandos de um processo remoto.\n"
-"\n"
-"  --version  Mostra informações de versão.\n"
-"  --help   Mostra esta ajuda.\n"
 
-#: rmt/rmt.c:397
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Serviço não disponível"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "entrada padrão (stdin)"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "saída padrão (stdout)"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
+msgstr ""
+
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Impossível executar um shell remoto"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Direção de procura fora de faixa"
+
+#: rmt/rmt.c:419
 #, fuzzy
-msgid "Seek offset error"
-msgstr "Deslocamento de procura fora de faixa"
+msgid "Invalid seek direction"
+msgstr "Modo inválido informado na opção"
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Carimbo de horário inválido"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Deslocamento de procura fora de faixa"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Direção de procura fora de faixa"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Tamanho da fita inválido"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Deslocamento de procura fora de faixa"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: Fim de arquivo prematuro\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Fim de arquivo prematuro"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "%s: opção inválida -- %c\n"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Final-de-arquivo inesperado no arquivo-tar"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr ""
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr ""
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "%s: Impossível saltar para %s"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr ""
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Comando sem sentido"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Este não parece ser um arquivo-tar"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 #, fuzzy
 msgid "Total bytes written"
 msgstr "Total de bytes escritos: %s (%sB, %sB/s)\n"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr ""
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, fuzzy, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Total de bytes escritos: %s (%sB, %sB/s)\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(pipe)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Valor inválido para \"record_size\""
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Nome de arquivo-tar não informado"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr ""
 "Impossível verificar arquivos-tar de entrada/saída padrão (stdin/stdout)"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr ""
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Impossível atualizar arquivos-tar compactados"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "No princípio da fita, encerrando agora"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Muitos erros, encerrando"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, fuzzy, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Tamanho de registro = %lu blocos"
 msgstr[1] "Tamanho de registro = %lu blocos"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, fuzzy, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Bloco desalinhado (%lu bytes) no arquivo-tar"
 msgstr[1] "Bloco desalinhado (%lu bytes) no arquivo-tar"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr "Impossível recuar no arquivo-tar; pode estar ilegível sem -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr ""
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: contém um número de volume inválido"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Sobrecarga de número de volumes"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Prepare o volume #%d para %s e tecle Enter: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "Fim-de-arquivo onde era esperado resposta do usuário"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "AVISO: O arquivo-tar está incompleto"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, fuzzy, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -669,124 +717,124 @@ msgstr ""
 " !          Criar um \"sub-shell\"\n"
 " ?          Mostra esta lista\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr ""
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr ""
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Nenhum volume novo; encerrando.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr ""
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr ""
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, fuzzy, c-format
 msgid "%s command failed"
 msgstr "comando `%s' falhou"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, fuzzy, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s não continua neste volume"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s não continua neste volume"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s é o tamanho errado (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, fuzzy, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Este volume está fora de sequência"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "O arquivo-tar não rotulado para casar com %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "O volume %s não casa com %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
 msgstr ""
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
 msgstr ""
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, fuzzy, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Só foi possível ler %lu de %lu bytes"
 msgstr[1] "Só foi possível ler %lu de %lu bytes"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "O conteúdo é diferente"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Final-de-arquivo inesperado no arquivo-tar"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "O tipo de arquivo é diferente"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Os modos são diferentes"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Os uid são diferentes"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "os gid são diferentes"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Os horários de modificação são diferentes"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Os tamanhos são diferentes"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Não está \"linkado\" a %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "O (\"Link\") simbólico é diferente"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "O número de dispositivo é diferente"
 
@@ -809,34 +857,34 @@ msgstr ""
 msgid "Verification may fail to locate original files."
 msgstr ""
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, fuzzy, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "ERRO DE VERIFICAÇÃO: detectados %d cabeçalhos inválidos"
 msgstr[1] "ERRO DE VERIFICAÇÃO: detectados %d cabeçalhos inválidos"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr ""
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr ""
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "valor %s fora da faixa %s: %s..%s; substituindo %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "valor %s fora da faixa %s: %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Gerando cabeçalhos octais negativos"
 
@@ -855,292 +903,278 @@ msgstr "%s: arquivo sem altera
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: arquivo sem alterações; não será arquivado"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, fuzzy, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: o arquivo diminuiu %s bytes; completando com zeros"
 msgstr[1] "%s: o arquivo diminuiu %s bytes; completando com zeros"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: arquivo está em outro sistema de arquivos; não será arquivado"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr ""
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Tipo de arquivo desconhecido; arquivo ignorado"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, fuzzy, c-format
-msgid "Missing links to %s.\n"
+msgid "Missing links to %s."
 msgstr " link para %s\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: arquivo sem alterações; não será arquivado"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: arquivo é o arquivo-tar; não será arquivado"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: arquivo removido antes de ser lido"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr ""
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: arquivo alterado enquanto estava sendo lido"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: \"socket\" ignorado"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: porta ignorada"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Pulando para o próximo cabeçalho"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Removendo um não-cabeçalho do arquivo-tar"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr ""
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, fuzzy, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: o carimbo de horário %s está %lu s no futuro"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Inconsistência inesperada ao criar diretório"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Diretório renomeado antes de se poder extrair seu estado"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Extraindo arquivos contíguos como sendo arquivos normais"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
-msgstr "Tentativa de extrair \"links\" simbólicos como \"links\" físicos"
-
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Lendo %s\n"
+msgstr "Tentativa de extrair \"links\" simbólicos como \"links\" físicos"
 
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Impossível extrair -- arquivo é a continuação de outro volume"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 #, fuzzy
 msgid "Unexpected long name header"
 msgstr "Fim de arquivo inesperado nos nomes cifrados"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, fuzzy, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Tipo de arquivo '%c' desconhecido; extraindo como arquivo normal"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr ""
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Impossível fazer backup deste arquivo"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, fuzzy, c-format
 msgid "Cannot rename %s to %s"
 msgstr "%s: Impossível renomear para %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Erro não é recuperável: saindo agora"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, fuzzy, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Diretório foi renomeado"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Diretório foi renomeado"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: O diretório é novo"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Carimbo de horário inválido"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 #, fuzzy
 msgid "Invalid modification time (seconds)"
 msgstr "Modo inválido informado na opção"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr ""
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Número de dispositivo inválido"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Número de inode inválido"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr ""
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 #, fuzzy
 msgid "Unexpected EOF in snapshot file"
 msgstr "Final-de-arquivo inesperado no arquivo-tar"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr ""
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr ""
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr ""
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr ""
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr ""
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr ""
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr ""
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr ""
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr ""
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, fuzzy, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Impossível alocar memória para um fator de bloco %d"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr ""
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, fuzzy, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: arquivo está em outro sistema de arquivos; não será arquivado"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Removendo %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Impossível remover"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Omitindo"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "bloco %s: ** Bloco de NULs **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "bloco %s: ** Fim-de-arquivo **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "bloco %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Espaço em branco no cabeçalho onde valor numérico `%s' era esperado"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1148,147 +1182,162 @@ msgstr ""
 "complemento de dois"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "O valor octal do arquivo-tar %.*s está fora de faixa %s"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "o arquivo-tar contém cabeçalhos base-64 obsoletos"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "A string base-64 assinada do arquivo-tar %s está fora de faixa %s"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "O valor base-256 de arquivo-tar está fora da faixa %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "O arquivo-tar contém %.*s onde valor numérico %s era esperado"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "o valor do arquivo-tar %s está fora da faixa %s: %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " link para %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " tipo de arquivo \"%s\" desconhecido\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr ""
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr ""
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Cabeçalho de volume--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Continua no byte %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Criando de diretório:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Renomeando %s para %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Impossível renomear para %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Renomeando %s de volta para %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Impossível salvar diretório de trabalho"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Impossível mudar o diretório de trabalho"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: arquivo removido antes de ser lido"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: arquivo removido antes de ser lido"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "processo filho"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "canal interprocesso"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
-msgstr ""
-
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:601
+msgid "Pattern matching characters used in file names"
 msgstr ""
 
-#: src/names.c:597
-msgid "suppress this warning."
+#: src/names.c:603
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Não foi encontrado no arquivo-tar"
 
-#: src/names.c:615
+#: src/names.c:622
 #, fuzzy, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Não foi encontrado no arquivo-tar"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Ambas as opções `-%s' e `-%s' exigem a entrada padrão"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, fuzzy, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Grupo inválido"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "Desejadas características GNU num arquivo-tar com formato incompatível"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
 msgstr ""
 
-#: src/tar.c:336
+#: src/tar.c:347
 #, fuzzy
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
@@ -1308,7 +1357,7 @@ msgstr ""
 "  %s -tvf arquivo.tar         # Lista todos os arquivos em arquivo.tar.\n"
 "  %s -xf arquivo.tar          # Extrai todos os arquivos de arquivo.tar\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 #, fuzzy
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
@@ -1330,87 +1379,80 @@ msgstr ""
 "  nil, existing   numera se existe backup numerado, se não faz simples\n"
 "  never, simple   sempre faz backups simples\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr ""
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr ""
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr ""
 
-#: src/tar.c:378
+#: src/tar.c:394
 #, fuzzy
 msgid "create a new archive"
 msgstr "Final-de-arquivo inesperado no arquivo-tar"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr ""
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr ""
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr ""
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr ""
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr ""
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr ""
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr ""
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr ""
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr ""
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr ""
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:408
-msgid "do not exit with nonzero on unreadable files"
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
 msgstr ""
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
+#: src/tar.c:426
+msgid "do not exit with nonzero on unreadable files"
 msgstr ""
 
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1418,577 +1460,565 @@ msgid ""
 "command line or via the -T option; NUMBER defaults to 1"
 msgstr ""
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr ""
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr ""
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr ""
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr ""
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr ""
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr ""
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr ""
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr ""
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr ""
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr ""
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr ""
 
-#: src/tar.c:455
+#: src/tar.c:475
 #, fuzzy
 msgid "extract files to standard output"
 msgstr "Erro ao escrever para saída padrão"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr ""
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr ""
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr ""
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr ""
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr ""
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr ""
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr ""
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr ""
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr ""
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr ""
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
 "place (METHOD='system')"
 msgstr ""
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr ""
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr ""
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
 msgstr ""
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr ""
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
 msgstr ""
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr ""
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr ""
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr ""
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr ""
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr ""
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr ""
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr ""
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr ""
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr ""
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr ""
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr ""
 
-#: src/tar.c:536
+#: src/tar.c:556
 #, fuzzy
 msgid "create/list/extract multi-volume archive"
 msgstr "Impossível verificar arquivos-tar multi-volume"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr ""
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr ""
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr ""
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr ""
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr ""
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr ""
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr ""
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr ""
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr ""
 
-#: src/tar.c:562
+#: src/tar.c:582
 #, fuzzy
 msgid "Archive format selection:"
 msgstr "Opções de formato do arquivo-tar conflitantes"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr ""
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr ""
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr ""
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr ""
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr ""
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr ""
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr ""
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr ""
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr ""
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr ""
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr ""
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr ""
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr ""
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr ""
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
 msgstr ""
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Opções de compressão conflitantes"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:597
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr ""
-
-#: src/tar.c:602
-#, fuzzy
-msgid "filter the archive through gzip"
-msgstr "%s: arquivo é o arquivo-tar; não será arquivado"
-
-#: src/tar.c:606
-#, fuzzy
-msgid "filter the archive through compress"
-msgstr "%s: arquivo é o arquivo-tar; não será arquivado"
-
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "%s: arquivo é o arquivo-tar; não será arquivado"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "%s: arquivo é o arquivo-tar; não será arquivado"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "%s: arquivo é o arquivo-tar; não será arquivado"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr ""
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr ""
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr ""
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr ""
 
-#: src/tar.c:625
+#: src/tar.c:641
 #, fuzzy
 msgid "change to directory DIR"
 msgstr "Impossível mudar o diretório de trabalho"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr ""
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr ""
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr ""
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr ""
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr ""
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr ""
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr ""
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr ""
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr ""
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr ""
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr ""
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr ""
 
-#: src/tar.c:664
+#: src/tar.c:682
 #, fuzzy
 msgid "don't strip leading `/'s from file names"
 msgstr "Removendo `%.*s' inicial dos nomes dos membros"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr ""
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr ""
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr ""
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr ""
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr ""
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr ""
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr ""
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
 msgstr ""
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr ""
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr ""
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr ""
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr ""
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr ""
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr ""
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr ""
 
-#: src/tar.c:710
+#: src/tar.c:728
 #, fuzzy
 msgid "wildcards do not match `/'"
 msgstr "O volume %s não casa com %s"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr ""
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr ""
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr ""
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr ""
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr ""
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -1996,274 +2026,290 @@ msgid ""
 "accepted"
 msgstr ""
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr ""
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr ""
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr ""
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr ""
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr ""
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr ""
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr ""
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr ""
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr ""
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr ""
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr ""
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr ""
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr ""
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr ""
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Não é possível especificar mais do que uma das opções \"-Acdtrux\""
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Opções de compressão conflitantes"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, fuzzy, c-format
 msgid "Unknown signal name: %s"
 msgstr " tipo de arquivo \"%s\" desconhecido\n"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 #, fuzzy
 msgid "Date sample file not found"
 msgstr "Arquivo de datas não encontrado"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Substituindo %s pelo formato de data desconhecido %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr ""
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, fuzzy, c-format
 msgid "%s: file list already read"
 msgstr "%s: arquivo é o arquivo-tar; não será arquivado"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr ""
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "%s: arquivo é o arquivo-tar; não será arquivado"
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr ""
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
 msgstr ""
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Fator de blocagem inválido"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Tamanho da fita inválido"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr ""
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Mais do que uma data limite"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr ""
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr ""
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr ""
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: Grupo inválido"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Modo inválido informado na opção"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 #, fuzzy
 msgid "Invalid number"
 msgstr "Número de inode inválido"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Dono inválido"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Tamanho de registro inválido"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "O tamanho dos registros tem que ser múltiplo de %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 #, fuzzy
 msgid "Invalid number of elements"
 msgstr "Tamanho da fita inválido"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr ""
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr ""
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr ""
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "As opções \"-[0-7][lmh]\" não são suportadas por *este* tar"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr ""
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "A opção antiga `%c' exige um argumento."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr ""
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr ""
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 #, fuzzy
 msgid "Multiple archive files require `-M' option"
 msgstr "Múltiplos arquivos-tar é exigem a opção \"-M\""
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Impossivel combinar --listed-incremental com --newer"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr ""
+
+#: src/tar.c:2404
 #, fuzzy, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: O rótulo do volume é longo demais (o limite é %lu bytes)"
 msgstr[1] "%s: O rótulo do volume é longo demais (o limite é %lu bytes)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Impossível verificar arquivos-tar multi-volume"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Impossível verificar arquivos-tar compactados"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Impossível usar arquivos-tar compactados multi-volume"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 #, fuzzy
 msgid "Cannot concatenate compressed archives"
 msgstr "Impossível atualizar arquivos-tar compactados"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr ""
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Recusando a criar um arquivo-tar vazio"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "As opções `-Aru' são incompatíveis com `-f -'"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Deve ser especificada uma das opções \"-Acdtrux\""
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2275,79 +2321,84 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: O arquivo encolheu %s bytes"
 msgstr[1] "%s: O arquivo encolheu %s bytes"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr ""
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Carimbo de horário fora da faixa"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr ""
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr ""
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr ""
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr ""
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, fuzzy, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "A string base-64 assinada do arquivo-tar %s está fora de faixa %s"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr ""
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr ""
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr ""
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr ""
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, fuzzy, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "o valor do arquivo-tar %s está fora da faixa %s: %s..%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr ""
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr ""
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr ""
@@ -2388,236 +2439,303 @@ msgstr "Ponto de verifica
 msgid "Read checkpoint %u"
 msgstr "Ponto de verificação de leitura %d"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 #, fuzzy
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
 msgstr "Gera arquivos de dados para pacote de testes GNU tar.\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 #, fuzzy
 msgid "File creation options:"
 msgstr "Opções de compressão conflitantes"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr ""
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr ""
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 #, fuzzy
 msgid "Write to file NAME, instead of standard output"
 msgstr "Erro ao escrever para saída padrão"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr ""
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr ""
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr ""
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr ""
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr ""
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr ""
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr ""
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr ""
+"\n"
+"Uso: %s [OPÇÃO]...\n"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr ""
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr ""
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr ""
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, fuzzy, c-format
 msgid "Invalid size: %s"
 msgstr "Carimbo de horário inválido"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, fuzzy, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Número do inode fora de faixa"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr ""
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr ""
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr ""
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, fuzzy, c-format
 msgid "Unknown date format"
 msgstr "Erro de sistema desconhecido"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr ""
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr ""
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 #, fuzzy
 msgid "cannot seek"
 msgstr "Impossível fechar"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr ""
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr ""
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, fuzzy, c-format
 msgid "Unknown field `%s'"
 msgstr " tipo de arquivo \"%s\" desconhecido\n"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, fuzzy, c-format
 msgid "cannot set time on `%s'"
 msgstr "%s: Impossível saltar para %s"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "%s: Impossível saltar para %s"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr ""
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, fuzzy, c-format
 msgid "Command failed with status %d\n"
 msgstr "O processo filho morreu com o sinal %d"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr ""
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr ""
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, fuzzy, c-format
 msgid "--stat requires file names"
 msgstr "--Nomes de arquivos truncados--\n"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr ""
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: opção ilegal -- %c\n"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
 #~ msgstr ""
-#~ "Aviso: a opção -I não é suportada; talvez a intenção fosse -j ou -T?"
+#~ "\n"
+#~ "Informar erros no programa para <bug-tar@gnu.org>.\n"
+#~ "Informar erros na tradução para <afmenez@terra.com.br>.\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Lendo %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Erro não é recuperável: saindo agora"
+
+#, fuzzy
+#~ msgid "filter the archive through compress"
+#~ msgstr "%s: arquivo é o arquivo-tar; não será arquivado"
+
+#, fuzzy
+#~ msgid "filter the archive through lzma"
+#~ msgstr "%s: arquivo é o arquivo-tar; não será arquivado"
+
+#, fuzzy
+#~ msgid "filter the archive through lzop"
+#~ msgstr "%s: arquivo é o arquivo-tar; não será arquivado"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Impossível alocar espaço para buffer\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Impossível alocar espaço para buffer"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Tente `%s --help' para mais informações.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Uso: %s [OPÇÃO]\n"
+#~ "Manipula uma unidade de fita, aceitando comandos de um processo remoto.\n"
+#~ "\n"
+#~ "  --version  Mostra informações de versão.\n"
+#~ "  --help   Mostra esta ajuda.\n"
+
+#, fuzzy
+#~ msgid "Seek offset error"
+#~ msgstr "Deslocamento de procura fora de faixa"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Fim de arquivo prematuro"
 
 #~ msgid "block size"
 #~ msgstr "tamanho de bloco"
@@ -2649,9 +2767,6 @@ msgstr ""
 #~ msgid "Visible long name error"
 #~ msgstr "Erro evidente de nome longo"
 
-#~ msgid "Time stamp out of range"
-#~ msgstr "Carimbo de horário fora da faixa"
-
 #~ msgid "Device number out of range"
 #~ msgstr "Número do dispositivo fora de faixa"
 
@@ -3048,6 +3163,10 @@ msgstr ""
 #~ msgid "Obsolete option name replaced by --read-full-records"
 #~ msgstr "Nome de opção obsoleta substituído por --read-full-records"
 
+#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgstr ""
+#~ "Aviso: a opção -I não é suportada; talvez a intenção fosse -j ou -T?"
+
 #~ msgid "Obsolete option name replaced by --touch"
 #~ msgstr "Nome de opção obsoleta substituído por --touch"
 
index d752f9750407e0bf36fb040be1fa83c2ad88713e..6ca8d607e390be8e38805bbe0a4a7f305d51b1e7 100644 (file)
Binary files a/po/ro.gmo and b/po/ro.gmo differ
index 18a060e02d05a398e93a4eaf67a2204dbd29e8e9..b72ef8843974d83aac47a5eced20e40ec7a6979f 100644 (file)
--- a/po/ro.po
+++ b/po/ro.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tar 1.15.1\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
 "PO-Revision-Date: 2005-07-15 12:00-0500\n"
 "Last-Translator: Laurentiu Buzdugan <lbuz@rolix.org>\n"
 "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
@@ -16,47 +16,47 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "argument invalid %s pentru %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "argument ambiguu %s pentru %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Argumente valide sunt:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr ""
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: parametrul ARGP_HELP_FMT necesitã o valoare"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, fuzzy, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: parametrul ARGP_HELP_FMT necesitã o valoare"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: parametru ARGP_HELP_FMT necunoscut"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Gunoi în ARGP_HELP_FMT: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -64,239 +64,147 @@ msgstr ""
 "Argumentele obligatorii sau opþionale pentru opþiunile lungi sunt "
 "obligatorii sau opþionale ºi pentru opþiunile corespunzãtoare scurte."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Folosire:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr " sau: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [OPÞIUNE...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr ""
 "Încercaþi `%s --help' sau `%s --usage'  pentru informaþii suplimentare.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "Raportaþi bug-uri la %s.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Eroare sistem necunoscutã"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 #, fuzzy
 msgid "give this help list"
 msgstr "Afiºeazã aceastã listã de ajutor"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 #, fuzzy
 msgid "give a short usage message"
 msgstr "Afiºeazã un scurt mesaj despre folosire"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "NUME"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr ""
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr ""
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr ""
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 #, fuzzy
 msgid "print program version"
 msgstr "Afiºeazã versiunea programului"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr ""
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, fuzzy, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: opþiunea `%s' necesitã un argument\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr ""
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr ""
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: opþiunea `%s' este ambiguã\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: opþiunea `--%s' nu permite un argument\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: opþiunea `%c%s' nu permite un argument\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: opþiunea `%s' necesitã un argument\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: opþiunea `--%s' nu este recunoscutã\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: opþiunea `%c%s' bu este recunoscutã\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: opþiune ilegalã -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: opþiune invalidã -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: opþiunea necesitã un argument -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: opþiunea `-W %s' este ambiguã\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: opþiunea `-W %s' nu permite un argument\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "memorie epuizatã"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, fuzzy, c-format
 msgid "unable to record current working directory"
 msgstr "Nu pot schimba directorul în care lucrez"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, fuzzy, c-format
 msgid "failed to return to initial working directory"
 msgstr "Nu pot salva directorul în care lucrez"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Nu pot %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Avertisment: Nu pot %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Nu pot schimba modul ca %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Nu pot schimba proprietatea cãtre uid %lu, gid %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Nu pot crea hard link cãtre %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, fuzzy, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Eroare citire la octet %s, citind %lu octet"
-msgstr[1] "%s: Eroare citire la octet %s, citind %lu octeþi"
-
-#: lib/paxerror.c:192
-#, fuzzy, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Avertisment: Eroare citire la octet %s, citind %lu octet"
-msgstr[1] "%s: Avertisment: Eroare citire la octet %s, citind %lu octeþi"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Nu pot cãuta (seek) cãtre %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Avertisment: Nu pot cãuta (seek) cãtre %s"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Nu pot crea symlink cãtre %s"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Am scris numai %lu din %lu octet"
-msgstr[1] "%s: Am scris numai %lu din %lu octeþi"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Eliminãm primul `%s' din numele membrilor"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Eliminãm primul `%s' din destinaþiile hard link"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Înlocuiesc `.' pentru nume de membrii goale"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Înlocuiesc `.' pentru destinaþii hard link goale"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -310,17 +218,17 @@ msgstr "
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "`"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "'"
 
@@ -330,7 +238,7 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr ""
 
@@ -340,38 +248,28 @@ msgstr ""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr ""
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Serviciu indisponibil"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "stdin"
-
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "stdout"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Nu pot executa shell remote"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -382,19 +280,19 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr ""
@@ -402,7 +300,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -412,7 +310,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -422,7 +320,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -432,7 +330,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -442,7 +340,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -453,7 +351,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -464,7 +362,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -476,183 +374,330 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
-#, c-format
+#: gnu/version-etc.c:247
+#, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
+msgstr "Raportaþi bug-uri la %s.\n"
+
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
 "\n"
 "Raportaþi bug-uri la <%s>.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr ""
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Nu pot %s"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Nu pot aloca spaþiu memorie intermediarã\n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Avertisment: Nu pot %s"
+
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Nu pot schimba modul ca %s"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Nu pot aloca spaþiu memorie intermediarã"
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Nu pot schimba proprietatea cãtre uid %lu, gid %lu"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:127
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Încercaþi `%s --help' pentru informaþii suplimentare.\n"
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Nu pot crea hard link cãtre %s"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:179 lib/paxerror.c:211
 #, fuzzy, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Eroare citire la octet %s, citind %lu octet"
+msgstr[1] "%s: Eroare citire la octet %s, citind %lu octeþi"
+
+#: lib/paxerror.c:192
+#, fuzzy, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Avertisment: Eroare citire la octet %s, citind %lu octet"
+msgstr[1] "%s: Avertisment: Eroare citire la octet %s, citind %lu octeþi"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Nu pot cãuta (seek) cãtre %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Avertisment: Nu pot cãuta (seek) cãtre %s"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Nu pot crea symlink cãtre %s"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Am scris numai %lu din %lu octet"
+msgstr[1] "%s: Am scris numai %lu din %lu octeþi"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Eliminãm primul `%s' din numele membrilor"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Eliminãm primul `%s' din destinaþiile hard link"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Înlocuiesc `.' pentru nume de membrii goale"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Înlocuiesc `.' pentru destinaþii hard link goale"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Serviciu indisponibil"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "stdin"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "stdout"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Folosire: %s [OPÞIUNE]\n"
-"Manipuleazã o unitate de bandã, acceptând comenzi de la un proces remote.\n"
-"\n"
-"  --version   Afiºeazã informaþii versiune.\n"
-"  --help      Afiºeazã acest mesaj.\n"
 
-#: rmt/rmt.c:397
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Nu pot executa shell remote"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Direcþie cãutare (seek direction) în afara domeniului"
+
+#: rmt/rmt.c:419
 #, fuzzy
-msgid "Seek offset error"
-msgstr "Decalaj cãutare (seek offset) în afara domeniului"
+msgid "Invalid seek direction"
+msgstr "Mod invalid furnizat ca opþiune"
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Înregistrare timp invalidã"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Decalaj cãutare (seek offset) în afara domeniului"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Direcþie cãutare (seek direction) în afara domeniului"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Lungime de bandã invalidã"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Decalaj cãutare (seek offset) în afara domeniului"
+
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: eof prematur\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Sfârºit de fiºier prematur"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "Mod de operare principal:"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "EOF neaºteptat în arhivã"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "NUMÃR"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "FIªIER"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "%s: Nu pot cãuta (seek) cãtre %s"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr ""
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Comandã gunoi"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Aceasta nu pare a fi o arhivã tar"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 #, fuzzy
 msgid "Total bytes written"
 msgstr "Numãr total octeþi scriºi: %s (%s, %s/s)\n"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr ""
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, fuzzy, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Numãr total octeþi scriºi: %s (%s, %s/s)\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(pipe)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Valoare invalidã pentru record_size"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Nume arhivã nu a fost furnizat"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Nu pot verifica arhive atdin/stdout"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "Arhiva este compresatã. Folosiþi opþiunea %s."
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Nu pot actualiza arhive comprimate"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "La începutul benzii, ieºim acum"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Prea multe erori, ieºim"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Dimensiune înregistrare = %lu bloc"
 msgstr[1] "Dimensiune înregistrare = %lu blocuri"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Bloc ne-aliniat (%lu octet) în arhivã"
 msgstr[1] "Bloc ne-aliniat (%lu octeþi) în arhivã"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr ""
 "Nu pot backspace fiºierul arhivã; acesta ar putea fi de necitit fãrã -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek nu s-a oprit la limita unei înregistrãri"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: conþine numãr volum invalid"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Depãºire domeniu numãr volum"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Preparã volum #%d pentru %s ºi apasã tasta return: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "EOF unde era aºteptat rãspunsul utilizatorului"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "AVERTISMENT: Arhiva este incompletã"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, fuzzy, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -664,126 +709,126 @@ msgstr ""
 " !          Lanseazã un subshell\n"
 " ?          Afiºeazã aceastã listã de opþiuni\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr ""
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr ""
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Nici un volum nou; terminãm.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr ""
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr ""
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, fuzzy, c-format
 msgid "%s command failed"
 msgstr "`%s' comanda a eºuat"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, fuzzy, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s nu este continuat pe acest volum"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s nu este continuat pe acest volum"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s este de dimensiune greºitã (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, fuzzy, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Acest volum este în afara secvenþei"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Arhiva nu este etichetatã sã se potriveascã cu %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Volumul %s nu se potriveºte cu %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, fuzzy, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
 msgstr ""
 "%s: nume fiºier prea lung pentru a fi storat într-un antet GNU multivolum"
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 #, fuzzy
 msgid "write did not end on a block boundary"
 msgstr "rmtlseek nu s-a oprit la limita unei înregistrãri"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Am putut citi doar %lu din %lu octet"
 msgstr[1] "Am putut citi doar %lu din %lu octeþi"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Conþinuturile diferã"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "EOF neaºteptat în arhivã"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Tipul fiºierelor diferã"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Modurile diferã"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Uid diferã"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Gid diferã"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Timp modificare diferã"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Dimensiunea diferã"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Nu este link-at cãtre %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Symlink diferã"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Numãr dispozitiv diferã"
 
@@ -806,34 +851,34 @@ msgstr "Arhiva con
 msgid "Verification may fail to locate original files."
 msgstr "Verificare ar putea eºua sã gãseascã fiºierele originale."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "VERIFICàEªEC: detectat %d antet invalid"
 msgstr[1] "VERIFICàEªEC: detectat %d antete invalide"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "Un bloc zero singuratic la %s"
 
-#: src/create.c:67
+#: src/create.c:68
 #, fuzzy, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: conþine o etichetã de director cache; nimic generat"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "valoarea %s în afara %s intervalului %s..%s; înlocuiesc %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "valoarea %s în afara %s intervalului %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Generez antete octale negative"
 
@@ -852,295 +897,281 @@ msgstr "%s: numele fi
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: numele link-ului este prea lung; nimic generat"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: Fiºier scurtat cu %s octet; completat cu zerouri"
 msgstr[1] "%s: Fiºier scurtat cu %s octeþi; completat cu zerouri"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: fiºierul este pe un sistem de fiºiere diferit; nimic generat"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr ""
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Tip de fiºier necunoscut; fiºier ignorat"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, fuzzy, c-format
-msgid "Missing links to %s.\n"
+msgid "Missing links to %s."
 msgstr "Link lipsã cãtre '%s'.\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: fiºierul este neschimbat; nimic generat"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: fiºierul este în arhivã; nimic generat"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Fiºier ºters înainte de a-l putea citi"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 #, fuzzy
 msgid "directory not dumped"
 msgstr "%s: conþine o etichetã de director cache; nimic generat"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: fiºier schimbat în timp ce îl citeam"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: socket ignorat"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: uºã ignoratã"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Sãrim la urmãtorul antet"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "ªtergem non-antet din arhivã"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: înregistrare de timp neverosimilã %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, fuzzy, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: înregistrare timp %s este %lu sec în viitor"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Inconsistenþã neaºteptatã când cream directorul"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Director redenumit înainte de a fi putut extrage starea sa"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Extragem fiºiere contigue ca fiºiere normale"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Încerc extragerea link-urilor simbolice ca link-uri hard"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Citesc %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Nu pot extrage -- fiºierul este continuat din altã arhivã"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 #, fuzzy
 msgid "Unexpected long name header"
 msgstr "EOF neaºteptat în numele amestecate"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, fuzzy, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Tip de fiºier necunoscut '%c', extras ca fiºier normal"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, fuzzy, c-format
 msgid "Current %s is newer or same age"
 msgstr "`%s' curent este mai nou"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Nu am putut arhiva (backup) acest fiºier"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, fuzzy, c-format
 msgid "Cannot rename %s to %s"
 msgstr "%s: Nu pot redenumi ca %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Nu-mi pot reveni din eroare: termin acum"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, fuzzy, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Directorul a fost redenumit"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Directorul a fost redenumit"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Directorul este nou"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Înregistrare timp invalidã"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 #, fuzzy
 msgid "Invalid modification time (seconds)"
 msgstr "Mod invalid furnizat ca opþiune"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr ""
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Numãr dispozitiv invalid"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Numãr inode invalid"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr ""
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 #, fuzzy
 msgid "Unexpected EOF in snapshot file"
 msgstr "EOF neaºteptat în arhivã"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr ""
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr ""
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr ""
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr ""
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr ""
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 #, fuzzy
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "Argument densitate malformat: '%s'"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr ""
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 #, fuzzy
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "Argument densitate malformat: '%s'"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr ""
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr ""
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: Nu curãþ director: nu pot determina statistici"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: directorul este pe un dispozitiv (device) diferit; necurãþat"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: ªtergem %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Nu pot ºterge"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Omis"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "bloc %s: ** Bloc de NUL-uri **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "bloc %s: ** Sfârºit de fiºier **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "bloc %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Spaþii libere în antet unde valoare %s numericã aºteptatã"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1148,147 +1179,163 @@ msgstr ""
 "lui doi"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Valoare octalã arhivã %.*s este în afara %s intervalului"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Arhiva conþine antete în baza-64 depãºite"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "ªir în baza-64 (semnãtura arhivei) %s este în afara %s intervalului"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Valoare baza-256 a arhivei este în afara %s intervalului"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Arhiva conþine %.*s unde valoare %s numericã aºteptatã"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, fuzzy, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Valoare arhivã %s este în afara %s intervalului %s.%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " link cãtre %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " tip fiºier necunoscut %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Link Lung--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Nume Lung--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Antet Volum--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Continuat la octet %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Creez director:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Redenumesc %s ca %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Nu pot redenumi ca %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Redenumesc %s înapoi ca %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Nu pot salva directorul în care lucrez"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Nu pot schimba directorul în care lucrez"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Fiºier ºters înainte de a-l putea citi"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Fiºier ºters înainte de a-l putea citi"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "proces copil"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "canal între-procese"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
-msgstr ""
-
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
-msgstr ""
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
+msgstr "pattern-urile de excludere potrivesc începutul numelor de fiºiere"
 
-#: src/names.c:597
-msgid "suppress this warning."
+#: src/names.c:603
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Nu a fost gãsit în arhivã"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Lucrul cerut nu a fost gãsit în arhivã"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Opþiunile `-%s' ºi `-%s' vor amândouã intrarea standard"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Format arhivã invalid"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "Capabilitãþi GNU cerute pentru un format de arhivã incompatibil"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
 msgstr ""
 
-#: src/tar.c:336
+#: src/tar.c:347
 #, fuzzy
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
@@ -1316,7 +1363,7 @@ msgstr ""
 "  nil, existing   numeroteazã dacã existã backup numerotat, altfel simplu\n"
 "  never, simple   întotdeauna creazã backup simplu\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 #, fuzzy
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
@@ -1345,86 +1392,79 @@ msgstr ""
 "  nil, existing   numeroteazã dacã existã backup numerotat, altfel simplu\n"
 "  never, simple   întotdeauna creazã backup simplu\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Mod de operare principal:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "listeazã conþinutul unei arhive"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "extrage fiºiere dintr-o arhivã"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "creazã o nouã arhivã"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "gãseºte diferenþele dintre arhive ºi sistemul de fiºiere"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "adaugã fiºiere la sfârºitul unei arhive"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "adaugã numai fiºierele mai noi decât copia din arhivã"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "adaugã fiºiere tar la o arhivã"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "ºterge din arhivã (nu pe benzi magnetice!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr ""
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Modificatori operaþie:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "manipuleazã eficient fiºierele rerefiate (sparse)"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr ""
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "foloseºte vechiul format GNU pentru backup incremental"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "FIªIER"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "foloseºte noul format GNU pentru backup incremental"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr ""
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "nu termina cu non-zero pentru fiºiere ce nu pot fi citite"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "NUMÃR"
-
-#: src/tar.c:410
+#: src/tar.c:428
 #, fuzzy
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
@@ -1437,306 +1477,314 @@ msgstr ""
 "--diff, --extract sau --list ºi când o listã de fiºiere este datã fie în "
 "linia de comandã sau folosind opþiunea -T.  Implicit, NUMBER=1."
 
-#: src/tar.c:416
+#: src/tar.c:434
 #, fuzzy
 msgid "archive is seekable"
 msgstr "Arhiva este cãutabilã"
 
-#: src/tar.c:418
+#: src/tar.c:436
+#, fuzzy
+msgid "archive is not seekable"
+msgstr "Arhiva este cãutabilã"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr ""
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "încearcã sã verifici arhiva dupã scrierea sa"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "ºterge fiºierele dupã ce acestea sunt adãugate la arhivã"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "nu înlocui fiºierele existente la extragere"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 "nu înlocui fiºierele existente care sunt mai noi decât copiile acestora din "
 "arhivã"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "supra-scrie fiºierele existente la extragere"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "ºterge fiecare fiºier înainte de a extrage peste acesta"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "goleºte ierarhiile înainte de a extrage un director"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "pãstrazã metadata directoarelor existente"
 
-#: src/tar.c:446
+#: src/tar.c:466
 #, fuzzy
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr "supra-scrie fiºierele existente la extragere"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr ""
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "extrage fiºierele la ieºirea standard"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "COMANDÃ"
 
-#: src/tar.c:457
+#: src/tar.c:477
 #, fuzzy
 msgid "pipe extracted files to another program"
 msgstr "extrage fiºierele la ieºirea standard"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr ""
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr ""
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Manipulare atribute fiºiere:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "forþeazã NUME ca proprietar pentru fiºierele adãugate"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "forþeazã NUME ca grup pentru fiºierele adãugate"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "DATA-FIªIERULUI"
 
-#: src/tar.c:473
+#: src/tar.c:493
 #, fuzzy
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "stocheazã numai fiºiere mai noi decât DATA-FIªIERULUI"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "SCHIMBÃRI"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "forþeazã mod (simbolic) SCHIMBÃRI pentru fiºierele adãugate"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr ""
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
 "place (METHOD='system')"
 msgstr ""
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "nu extrage timpul de modificare al fiºierului"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+#, fuzzy
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr "încearcã extragerea fiºierelor cu aceleaºi drepturi (ownership)"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+#, fuzzy
+msgid "extract files as yourself (default for ordinary users)"
 msgstr "extrage fiºierele ca dvs. însuºi"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "foloseºte întotdeauna numere pentru numele utilizator/grup"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
 msgstr ""
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "sorteazã numele de extras sã se potriveascã cu arhiva"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "la fel ca -p ºi -s"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr ""
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr ""
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "Selectare ºi schimbare unitate:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "ARHIVÃ"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "foloseºte fiºier arhivã sau unitate ARHIVÃ"
 
-#: src/tar.c:514
+#: src/tar.c:534
 #, fuzzy
 msgid "archive file is local even if it has a colon"
 msgstr "fiºier arhivã este local chiar când are un :"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "foloseºte rmt COMANDàîn loc de rmt"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "foloseºte remote COMANDàîn loc de rsh"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "specificã unitate ºi densitate"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "creazã/listeazã/extrage arhiva pe volume multiple"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "schimbã banda dupã scriere a NUMÃR x 1024 octeþi"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "ruleazã script la terminarea fiecãrei benzi (implicã -M)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "foloseºte/actualizeazã numãrul de volum în FIªIER"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Blocuri unitate:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "BLOCURI"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "BLOCURI x 512 octeþi pe întregistrare"
 
-#: src/tar.c:553
+#: src/tar.c:573
 #, fuzzy
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "DIMENSIUNE octeþi pe înregistrare, multiplu de 12"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "ignorã blocuri zero-uate în arhivã (înseamnã EOF)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "redimensioneazã bloc în timpul citirii (pentru pipe-uri BSD4.2"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Selecþie format arhivã:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "FORMAT"
 
-#: src/tar.c:565
+#: src/tar.c:585
 #, fuzzy
 msgid "create archive of the given format"
 msgstr "creazã arhiva de formatul dat."
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "FORMAT este unul din urmãtoarele"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "vechiul format tar V7"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "oldgnu    formatul GNU format ca pentru tar <= 1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "formatul GNU tar 1.13.x"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "formatul POSIX 1003.1-1988 (ustar)"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "formatul POSIX 1003.1-2001 (pax)"
 
-#: src/tar.c:578
+#: src/tar.c:598
 #, fuzzy
 msgid "same as pax"
 msgstr "ca ºi pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "ca ºi --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "ca ºi --format=posix"
 
-#: src/tar.c:585
+#: src/tar.c:605
 #, fuzzy
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "cuvânt_cheie[[:]=valoare][,cuvânt_cheie[[:]=valoare], ...]"
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "controleazã cuvintele cheie pax"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "TEXT"
 
-#: src/tar.c:588
+#: src/tar.c:608
 #, fuzzy
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
@@ -1745,196 +1793,173 @@ msgstr ""
 "creazã arhivã nu nume volum NUME. La listare/extragere, foloseºte TEXT ca "
 "pattern de globbing"
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Opþiunile de compresie sunt în conflict"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:597
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "filtrazã arhiva prin bzip2"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "filtreazã arhiva prin gzip"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "filtreazã arhiva prin compress"
-
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "filtreazã arhiva prin gzip"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "filtreazã arhiva prin gzip"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "filtreazã arhiva prin gzip"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "PROG"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "filtreazã prin PROG (trebuie sã accepte -d)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Selecþie fiºier local:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "DIR"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "schimbã în directorul DIR"
 
-#: src/tar.c:627
+#: src/tar.c:643
 #, fuzzy
 msgid "get names to extract or create from FILE"
 msgstr "obþine numele de extras sau creat din fiºierul NUME"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T citeºte nume terminate cu null, deactiveazã cu -C"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr ""
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "PATTERN"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "exclude fiºiere, date ca un PATTERN"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "pattern-urile de excludere sunt listate în FIªIER"
 
-#: src/tar.c:641
+#: src/tar.c:657
 #, fuzzy
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr "exclude directoarele ce conþin o etichetã cache"
 
-#: src/tar.c:644
+#: src/tar.c:660
 #, fuzzy
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "exclude directoarele ce conþin o etichetã cache"
 
-#: src/tar.c:647
+#: src/tar.c:663
 #, fuzzy
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "exclude directoarele ce conþin o etichetã cache"
 
-#: src/tar.c:649
+#: src/tar.c:665
 #, fuzzy
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr "exclude directoarele ce conþin o etichetã cache"
 
-#: src/tar.c:652
+#: src/tar.c:668
 #, fuzzy
 msgid "exclude everything under directories containing FILE"
 msgstr "exclude directoarele ce conþin o etichetã cache"
 
-#: src/tar.c:654
+#: src/tar.c:670
 #, fuzzy
 msgid "exclude directories containing FILE"
 msgstr "exclude directoarele ce conþin o etichetã cache"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "evitã coborârea automatã în directoare"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "stai în sistemul de fiºire local la creare arhivei"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "coboarã recursiv în directoare (implicit)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "nu elimina primul `/' din numele fiºierelor"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "NUME-MEMBRU"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "începe la membrul NUME-MEMBRU în arhivã"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "stocheazã numai fiºiere mai noi decât DATA-FIªIERULUI"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "DATA"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "comparã data ºi timpul numai când a fost schimbatã data"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "CONTROL"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "fã backup înainte de ºtergere, alege CONTROL pentru versiuni"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "ªIR"
 
-#: src/tar.c:679
+#: src/tar.c:697
 #, fuzzy
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
@@ -1943,95 +1968,103 @@ msgstr ""
 "fã backup înainte de ºtergere, înlocuieºte prefixul normal ('~' în afarã de "
 "cazul când este determinat de variabila de mediu SIMPLE_BACKUP_SUFFIX"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr ""
 
-#: src/tar.c:686
+#: src/tar.c:704
 #, fuzzy
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr "eliminã NUMÃR componente de la începutul numelor fiºierelor"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr ""
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 
-#: src/tar.c:698
+#: src/tar.c:716
 #, fuzzy
 msgid "ignore case"
 msgstr "în excluderi ignorã cazul caracterelor (minuscule/majuscule)"
 
-#: src/tar.c:700
+#: src/tar.c:718
 #, fuzzy
 msgid "patterns match file name start"
 msgstr "pattern-urile de excludere potrivesc începutul numelor de fiºiere"
 
-#: src/tar.c:702
+#: src/tar.c:720
 #, fuzzy
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr "pattern-urile de excludere potrivesc dupã orice / (implicit)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 #, fuzzy
 msgid "case sensitive matching (default)"
 msgstr "excluderea depinde de caz (minuscule/majuscule) (implicit)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr ""
 
-#: src/tar.c:710
+#: src/tar.c:728
 #, fuzzy
 msgid "wildcards do not match `/'"
 msgstr "wildcard-urile în pattern-urile de excludere nu potrivesc '/'"
 
-#: src/tar.c:712
+#: src/tar.c:730
 #, fuzzy
 msgid "wildcards match `/' (default for exclusion)"
 msgstr "wildcard-urile din pattern-urile de excludere potrivesc '/' (implicit)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Ieºire informativã:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "listeazã cu amãnunte fiºierele procesate"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr ""
+
+#: src/tar.c:742
 #, fuzzy
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr "afiºeazã mesaje despre progres la fiecare al 10-a înregistrare"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "afiºeazã un mesaj dacã nu toate link-urile sunt prelucrate"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr ""
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2039,28 +2072,28 @@ msgid ""
 "accepted"
 msgstr ""
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "afiºeazã datele de modificare a fiºierelor în UTC"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "trimite ieºire detaliatã în FIªIER"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "aratã numãrul blocului din arhivã pentru fiecare mesaj"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "cere confirmare pentru fiecare acþiune"
 
-#: src/tar.c:744
+#: src/tar.c:764
 #, fuzzy
 msgid "show tar defaults"
 msgstr "Aratã valorire implicite folosite de tar"
 
-#: src/tar.c:746
+#: src/tar.c:766
 #, fuzzy
 msgid ""
 "when listing or extracting, list each directory that does not match search "
@@ -2069,88 +2102,95 @@ msgstr ""
 "La listare sau extragere, listeazã fiecare director care nu se potriveºte cu "
 "criteriile de cãutare"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr ""
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr ""
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr ""
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr ""
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Opþiuni compatibilitate:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 #, fuzzy
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr "la creare, ca ºi --old-archive.  La extragere, ca ºi --no-same-owner"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Alte opþiuni:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr ""
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Nu puteþi specifica mai mult de una dintre opþiunile `-Acdtrux'"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Opþiunile de compresie sunt în conflict"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, fuzzy, c-format
 msgid "Unknown signal name: %s"
 msgstr " tip fiºier necunoscut %s\n"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 #, fuzzy
 msgid "Date sample file not found"
 msgstr "Fiºier date nu a fost gãsit"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Înlocuim %s pentru format de datã necunoscut %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, fuzzy, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "Tratez data `%s' ca %s + %ld nanosecundã"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, fuzzy, c-format
 msgid "%s: file list already read"
 msgstr "%s: fiºierul este în arhivã; nimic generat"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr ""
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "filtreazã arhiva prin gzip"
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr ""
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2158,159 +2198,169 @@ msgstr ""
 "\n"
 "*Acest* tar foloseºte implicit:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Factor blocuri invalid"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Lungime de bandã invalidã"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr ""
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Mai mult de o singurã datã limitã"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr ""
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr ""
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr ""
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: Grup invalid"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Mod invalid furnizat ca opþiune"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Numãr invalid"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Proprietar invalid"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Dimensiune înregistrare invalidã"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Dimensiune înregistrare trebuie sã fie un multiplu de %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Numãr invalid de elemente"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr ""
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, fuzzy, c-format
 msgid "Malformed density argument: %s"
 msgstr "Argument densitate malformat: '%s'"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, fuzzy, c-format
 msgid "Unknown density: `%c'"
 msgstr "Densitate necunoscutã: '%c'"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "Opþiunile `-[0-7][lmh]' nu sunt suportate de *acest* tar"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[FIªIER]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Vechea opþiune `%c' necesitã un argument."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "--occurrence n-are sens fãrã o listã de fiºiere"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "--occurrence nu poate fi folosit în modul de operare cerut"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Fiºiere de arhivã multiple necesitã opþiunea `-M'"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Nu puteþi combina --listed-incremental cu --newer"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+#, fuzzy
+msgid "--level is meaningless without --listed-incremental"
+msgstr "--occurrence n-are sens fãrã o listã de fiºiere"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: Eticheta volumului este prea lungã (limita este %lu octet)"
 msgstr[1] "%s: Eticheta volumului este prea lungã (limita este %lu octeþi)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Nu pot verifica arhive pe volume multiple"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Nu pot verifica arhive comprimate"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Nu pot folosi arhive comprimate pe volume multiple"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 #, fuzzy
 msgid "Cannot concatenate compressed archives"
 msgstr "Nu pot actualiza arhive comprimate"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "--pax-option poate fi folosit numai pentru arhive POSIX"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Refuz categoric sã creez o arhivã goalã"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Opþiunile `-Aru' sunt incompatibile cu `-f -'"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Trebuie sã specificaþi una din opþiunile `-Acdtrux'"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2322,82 +2372,87 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: Fiºier scurtat cu %s octet"
 msgstr[1] "%s: Fiºier scurtat cu %s octeþi"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, fuzzy, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "Cuvânt_cheie %s necunoscut sau încã neimplementat"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Înregistrare timp în afara domeniului"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "Pattern-ul %s nu poate fi folosit"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "Cuvânt_cheie %s nu poate fi înlocuit (overridden)"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 #, fuzzy
 msgid "Malformed extended header: missing length"
 msgstr "Antet extins malformat: lipseºte semnul egal"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr ""
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, fuzzy, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "ªir în baza-64 (semnãtura arhivei) %s este în afara %s intervalului"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 #, fuzzy
 msgid "Malformed extended header: missing blank after length"
 msgstr "Antet extins malformat: lipseºte spaþiu liber dupã lungime"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Antet extins malformat: lipseºte semnul egal"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 #, fuzzy
 msgid "Malformed extended header: missing newline"
 msgstr "Antet extins malformat: lipseºte semnul egal"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr ""
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, fuzzy, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "Valoare arhivã %s este în afara %s intervalului %s.%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, fuzzy, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Antet extins malformat: lipseºte semnul egal"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, fuzzy, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Antet extins malformat: lipseºte semnul egal"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, fuzzy, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr "Antet extins malformat: lipseºte semnul egal"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, fuzzy, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr "Antet extins malformat: lipseºte semnul egal"
@@ -2438,240 +2493,309 @@ msgstr "Scrie punct de verificare %d"
 msgid "Read checkpoint %u"
 msgstr "Citeºte punct de verificare %d"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
 msgstr ""
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 #, fuzzy
 msgid "File creation options:"
 msgstr "Alte opþiuni:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr ""
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 #, fuzzy
 msgid "Create file of the given SIZE"
 msgstr "creazã arhiva de formatul dat."
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 #, fuzzy
 msgid "Write to file NAME, instead of standard output"
 msgstr "extrage fiºierele la ieºirea standard"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 #, fuzzy
 msgid "Read file names from FILE"
 msgstr "Am citit %s octeþi de la %s"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 #, fuzzy
 msgid "-T reads null-terminated names"
 msgstr "-T citeºte nume terminate cu null, deactiveazã cu -C"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr ""
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr ""
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 #, fuzzy
 msgid "Seek to the given offset before writing data"
 msgstr "încearcã sã verifici arhiva dupã scrierea sa"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr ""
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr ""
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr " [OPÞIUNE...]"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr ""
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr ""
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 #, fuzzy
 msgid "Execute COMMAND"
 msgstr "COMANDÃ"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, fuzzy, c-format
 msgid "Invalid size: %s"
 msgstr "Înregistrare timp invalidã"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, fuzzy, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Numãr inode în afara intervalului"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr ""
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr ""
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr ""
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, fuzzy, c-format
 msgid "Unknown date format"
 msgstr "Eroare sistem necunoscutã"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr ""
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr ""
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 #, fuzzy
 msgid "cannot seek"
 msgstr "%s: Nu pot cãuta (seek) cãtre %s"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr ""
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr ""
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, fuzzy, c-format
 msgid "Unknown field `%s'"
 msgstr " tip fiºier necunoscut %s\n"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, fuzzy, c-format
 msgid "cannot set time on `%s'"
 msgstr "%s: Nu pot cãuta (seek) cãtre %s"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "%s: Nu pot cãuta (seek) cãtre %s"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr ""
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr ""
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr ""
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr ""
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, fuzzy, c-format
 msgid "--stat requires file names"
 msgstr "--Amestecat numele fiºierelor--\n"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr ""
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: opþiune ilegalã -- %c\n"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
 #~ msgstr ""
-#~ "Avertisment: opþiunea -I nu este suportatã; aþi dorit cumva -j sau -T?"
+#~ "\n"
+#~ "Raportaþi bug-uri la <%s>.\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Citesc %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Nu-mi pot reveni din eroare: termin acum"
+
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "filtrazã arhiva prin bzip2"
+
+#~ msgid "filter the archive through gzip"
+#~ msgstr "filtreazã arhiva prin gzip"
+
+#~ msgid "filter the archive through compress"
+#~ msgstr "filtreazã arhiva prin compress"
+
+#, fuzzy
+#~ msgid "filter the archive through lzma"
+#~ msgstr "filtreazã arhiva prin gzip"
+
+#, fuzzy
+#~ msgid "filter the archive through lzop"
+#~ msgstr "filtreazã arhiva prin gzip"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Nu pot aloca spaþiu memorie intermediarã\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Nu pot aloca spaþiu memorie intermediarã"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Încercaþi `%s --help' pentru informaþii suplimentare.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Folosire: %s [OPÞIUNE]\n"
+#~ "Manipuleazã o unitate de bandã, acceptând comenzi de la un proces "
+#~ "remote.\n"
+#~ "\n"
+#~ "  --version   Afiºeazã informaþii versiune.\n"
+#~ "  --help      Afiºeazã acest mesaj.\n"
+
+#, fuzzy
+#~ msgid "Seek offset error"
+#~ msgstr "Decalaj cãutare (seek offset) în afara domeniului"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Sfârºit de fiºier prematur"
 
 #~ msgid "block size"
 #~ msgstr "dimensiune bloc"
@@ -2696,9 +2820,6 @@ msgstr ""
 #~ msgid "Visible long name error"
 #~ msgstr "Eroare nume lung evidentã"
 
-#~ msgid "Time stamp out of range"
-#~ msgstr "Înregistrare timp în afara domeniului"
-
 #~ msgid "Device number out of range"
 #~ msgstr "Numãr dispozitiv în afara intervalului"
 
@@ -2792,6 +2913,10 @@ msgstr ""
 #~ "   59 Temple Place, Suite 330, Boston, MA 02111-1307  USA\n"
 #~ "\n"
 
+#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgstr ""
+#~ "Avertisment: opþiunea -I nu este suportatã; aþi dorit cumva -j sau -T?"
+
 #~ msgid "Semantics of -l option will change in the future releases."
 #~ msgstr "Semantica opþiunii -l se va schimba în versiunile viitoare."
 
index feb394fd2eb799a6abe6ed97b57e798d4ba478ea..7a8b40fa54267ce6ebcd4dda55c76af4a5aedf0c 100644 (file)
Binary files a/po/ru.gmo and b/po/ru.gmo differ
index 0f3807ae02f9ad768289a28bbf4095dd73dc3746..80c4a467deef95274717726cd397e380feed04ad 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -1,62 +1,65 @@
 # Translation of tar messages to Russian
-# Copyright (C) 1998, 1999, 2004, 2006 Free Software Foundation, Inc.
-# This file is distributed under the same license as the cpio package.
+# Copyright (C) 1998, 1999, 2004, 2006, 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the tar package.
 # Const Kaplinsky <const@ce.cctpu.edu.ru>, 1998, 1999.
 # Pavel Maryanov <acid_jack@ukr.net>, 2004, 2006, 2008.
+# Yuri Kozlov <yuray@komyakino.ru>, 2009.
+#
 msgid ""
 msgstr ""
-"Project-Id-Version: tar 1.19\n"
+"Project-Id-Version: tar 1.22\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
-"PO-Revision-Date: 2008-01-18 01:00+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
+"PO-Revision-Date: 2009-10-11 16:43+0200\n"
 "Last-Translator: Pavel Maryanov <acid_jack@ukr.net>\n"
 "Language-Team: Russian <gnu@mx.ru>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
-msgstr "невеÑ\80ный аргумент %s для %s"
+msgstr "недопÑ\83Ñ\81Ñ\82имый аргумент %s для %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "неоднозначный аргумент %s для %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Допустимые аргументы:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: Значение %s меньше или равно %s"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: Для параметра ARGP_HELP_FMT требуется значение"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: Параметра ARGP_HELP_FMT должен быть положительным"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: Неизвестный параметр ARGP_HELP_FMT"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Мусор в ARGP_HELP_FMT: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -64,236 +67,144 @@ msgstr ""
 "Обязательные или необязательные аргументы для длинный опций также являются "
 "обязательными или необязательными для соответствующих коротких опций."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Использование:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr " или: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [ОПЦИЯ...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr ""
 "Попробуйте `%s --help' или `%s --usage' для получения дополнительной "
 "информации.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "Отчеты об ошибках отправляйте на %s.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Неизвестная системная ошибка"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "вывод этой справки"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "вывод короткого сообщения об использовании"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "ИМЯ"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "определяет название программы"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "СЕК"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "ожидание в течение заданных СЕКУНД (по умолчанию 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "вывод версии программы"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(ОШИБКА ПРОГРАММЫ) Неизвестная версия?!"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: Слишком много аргументов\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr "(ОШИБКА ПРОГРАММЫ) Опция должна была быть распознана?!"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
-msgstr ""
+msgstr "ошибка записи"
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: опция `%s' не однозначна\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: опция `--%s' не разрешает использовать аргумент\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: опция `%c%s' не разрешает использовать аргумент\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: для опции `%s' требуется аргумент\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: нераспознанная опция `--%s'\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: нераспознанная опция `%c%s'\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: недопустимая опция -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: неверная опция  -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: для опции требуется аргумент -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: опция `-W %s' не однозначна\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: опция `-W %s' не разрешает использовать аргумент\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "память исчерпана"
 
-#: lib/openat-die.c:35
-#, fuzzy, c-format
-msgid "unable to record current working directory"
-msgstr "Невозможно изменить рабочий каталог"
-
-#: lib/openat-die.c:48
-#, fuzzy, c-format
-msgid "failed to return to initial working directory"
-msgstr "Невозможно сохранить рабочий каталог"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Невозможно %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Предупреждение: Невозможно %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Невозможно изменить права доступа на %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Невозможно изменить владельца на uid %lu, gid %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Невозможно создать жёсткую ссылку на %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Ошибка чтения с позиции %s при чтении %lu байт"
-msgstr[1] "%s: Ошибка чтения с позиции %s при чтении %lu байт"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Предупреждение: Ошибка чтения с позиции %s при чтении %lu байт"
-msgstr[1] "%s: Предупреждение: Ошибка чтения с позиции %s при чтении %lu байт"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Невозможно найти в %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Предупреждение: Невозможно найти в %s"
-
-#: lib/paxerror.c:284
+#: gnu/openat-die.c:36
 #, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Невозможно создать символическую ссылку на %s"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Записан только %lu байт из %lu"
-msgstr[1] "%s: Записано только %lu байт из %lu"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Удаляется начальный `%s' из имен объектов"
+msgid "unable to record current working directory"
+msgstr "невозможно зарегистрировать текущий рабочий каталог"
 
-#: lib/paxnames.c:156
+#: gnu/openat-die.c:54
 #, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Удаляются начальные `%s' из целей жестких ссылок"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "`.' заменяются пустыми именами объектов"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "`.' заменяются пустыми целями жестких ссылок"
+msgid "failed to return to initial working directory"
+msgstr "не удалось вернуться в первоначальный рабочий каталог"
 
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
@@ -308,17 +219,17 @@ msgstr "`.' заменяются пустыми целями жестких сс
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "`"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "'"
 
@@ -328,7 +239,7 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[yY]"
 
@@ -338,38 +249,28 @@ msgstr "^[yY]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[nN]"
 
-#: lib/rtapelib.c:299
+#: gnu/version-etc.c:76
 #, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Служба недоступна"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "stdin"
-
-#: lib/rtapelib.c:306
-#, c-format
-msgid "stdout"
-msgstr "stdout"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Невозможно запустить удалённый командный процессор"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
-msgstr ""
+msgstr "(C)"
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -378,279 +279,453 @@ msgid ""
 "There is NO WARRANTY, to the extent permitted by law.\n"
 "\n"
 msgstr ""
+"\n"
+"Лицензия GPLv3+: GNU GPL версии 3 или новее <http://gnu.org/licenses/gpl."
+"html>\n"
+"Это свободное ПО: вы можете продавать и распространять его.\n"
+"Нет НИКАКИХ ГАРАНТИЙ до степени, разрешённой законом.\n"
+"\n"
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
-msgstr ""
+msgstr "Программа создана %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
-msgstr ""
+msgstr "Программа создана %s и %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
-msgstr ""
+msgstr "Программа создана %s, %s и %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "and %s.\n"
 msgstr ""
+"Программа создана %s, %s, %s\n"
+"и %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, and %s.\n"
 msgstr ""
+"Программа создана %s, %s, %s,\n"
+"%s и %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, and %s.\n"
 msgstr ""
+"Программа создана %s, %s, %s,\n"
+"%s, %s и %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, %s, and %s.\n"
 msgstr ""
+"Программа создана %s, %s, %s,\n"
+"%s, %s, %s и %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, %s, %s,\n"
 "and %s.\n"
 msgstr ""
+"Программа создана %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"и %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, %s, %s,\n"
 "%s, and %s.\n"
 msgstr ""
+"Программа создана %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s и %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, %s, %s,\n"
 "%s, %s, and others.\n"
 msgstr ""
+"Программа создана %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s и другими.\n"
 
 #. TRANSLATORS: The placeholder indicates the bug-reporting address
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
-#, c-format
+#: gnu/version-etc.c:247
+#, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
-msgstr ""
-"\n"
-"Отчёты об ошибках отправляйте на <%s>.\n"
+"Report bugs to: %s\n"
+msgstr "Отчеты об ошибках отправляйте на %s.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Отчеты об ошибках отправляйте на %s.\n"
+
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
-msgstr ""
+#: gnu/version-etc.c:255
+#, fuzzy, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+msgstr "Домашняя страница %s: <http://www.gnu.org/software/%s/>.\n"
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "Слишком длинная входная строка"
+#: gnu/version-etc.c:258
+#, fuzzy
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+msgstr "Справка по работе с ПО GNU: <http://www.gnu.org/gethelp/>.\n"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "Ошибка синтаксиса числа"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Функция %s завершилась с ошибкой"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Невозможно выделить буферное пространство\n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Предупреждение: Функция %s завершилась с ошибкой"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Невозможно выделить буферное пространство"
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Невозможно изменить права доступа на %s"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:101
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Попробуйте `%s --help' для получения дополнительной информации.\n"
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Невозможно изменить владельца на uid %lu, gid %lu"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:127
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Невозможно создать жёсткую ссылку на %s"
+
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Ошибка чтения с позиции %s при чтении %lu байта"
+msgstr[1] "%s: Ошибка чтения с позиции %s при чтении %lu байт"
+msgstr[2] "%s: Ошибка чтения с позиции %s при чтении %lu байт"
+
+#: lib/paxerror.c:192
+#, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Предупреждение: Ошибка чтения с позиции %s при чтении %lu байта"
+msgstr[1] "%s: Предупреждение: Ошибка чтения с позиции %s при чтении %lu байт"
+msgstr[2] "%s: Предупреждение: Ошибка чтения с позиции %s при чтении %lu байт"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Невозможно найти в %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Предупреждение: Невозможно найти в %s"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Невозможно создать символическую ссылку на %s"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Записан только %lu байт из %lu"
+msgstr[1] "%s: Записано только %lu байта из %lu"
+msgstr[2] "%s: Записано только %lu байт из %lu"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Удаляется начальный `%s' из имен объектов"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Удаляются начальные `%s' из целей жестких ссылок"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "`.' заменяются пустыми именами объектов"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "`.' заменяются пустыми целями жестких ссылок"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Служба недоступна"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "stdin"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "stdout"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Использование: %s [ОПЦИЯ]\n"
-"Управляет накопителями на магнитной ленте, принимая команды из удалённого "
-"процесса.\n"
-"\n"
-"  --version  Вывод информации о версии.\n"
-"  --help     Вывод этой справки.\n"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "Ошибка смещения поиска"
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Невозможно запустить удалённый командный процессор"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Направление поиска за пределами диапазона"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:419
+#, fuzzy
+msgid "Invalid seek direction"
+msgstr "В опции указан неверный режим доступа"
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Недопустимый размер: %s"
+
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Смещение поиска за пределами диапазона"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Направление поиска за пределами диапазона"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Неверная длина ленты"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Смещение поиска за пределами диапазона"
+
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: Преждевременный конец файла\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Преждевременный конец файла"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "Основной режим работы:"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Неожиданный конец файла в архиве"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "N"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "ФАЙЛ"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "невозможно открыть `%s'"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "слишком много аргументов"
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Неверная команда"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Это не похоже на tar-архив"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Всего записано байт"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "Всего прочитано байт"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Всего удалено байт: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(канал)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Неверное значение для record_size"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Не указано имя архива"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Невозможно проверить архив на stdin/stdout"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "Архив сжат. Используйте опцию %s"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Невозможно обновить сжатые архивы"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Начало ленты, завершение работы"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Слишком много ошибок, завершение работы"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Размер записи = %lu блок"
-msgstr[1] "Размер записи = %lu блоков"
+msgstr[1] "Размер записи = %lu блока"
+msgstr[2] "Размер записи = %lu блоков"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Невыровненный блок (%lu байт) в архиве"
-msgstr[1] "Невыровненный блок (%lu байт) в архиве"
+msgstr[1] "Невыровненный блок (%lu байта) в архиве"
+msgstr[2] "Невыровненный блок (%lu байт) в архиве"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr ""
 "Невозможно вернуться назад на один архивный файл; он может быть нечитаемым "
 "без -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek не остановился на границе записи"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: содержит неверный номер тома"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Переполнение номера тома"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Приготовьте том Номер %d для %s и нажмите Enter: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "Конец файла вместо ожидаемого ответа пользователя"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "ПРЕДУПРЕЖДЕНИЕ: Архив не полный"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -660,68 +735,68 @@ msgstr ""
 " n [имя]       Указание нового имени файла для следующего (и последующих) "
 "томов\n"
 " q             Выход из tar\n"
-" y или [нов.строка] Продолжение операциия\n"
+" y или [нов.строка] Продолжение операции\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !             Порождение подпроцесса командного процессора\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?             Вывод этого списка\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Нет нового тома, завершение работы.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "Не указано имя имя файла. Попробуйте ещё раз.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "Неверные входные данные. Наберите ? для получения справки.\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "Сбой команды %s"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr ""
 "%s, возможно, продолжается на этом томе - в заголовке находится усечённое имя"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s не продолжается на этом томе"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s является неверным размером (%s != %s + %s)"
 
-#: src/buffer.c:1253
-#, fuzzy, c-format
+#: src/buffer.c:1326
+#, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
-msgstr "ЭÑ\82оÑ\82 Ñ\82ом Ð½Ð°Ñ\80Ñ\83Ñ\88аеÑ\82 Ð¿Ð¾Ñ\81ледоваÑ\82елÑ\8cноÑ\81Ñ\82Ñ\8c"
+msgstr "ЭÑ\82оÑ\82 Ñ\82ом Ð²Ð½Ðµ Ð¿Ð¾Ñ\81ледоваÑ\82елÑ\8cноÑ\81Ñ\82и (%s - %s != %s)"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Метка архива не соответствует %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Том %s не соответствует %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
@@ -729,61 +804,61 @@ msgstr ""
 "%s: слишком длинное имя файла для сохранения в многотомном заголовке GNU; "
 "обрезано"
 
-#: src/buffer.c:1621
-#, fuzzy
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
-msgstr "rmtlseek не остановился на границе записи"
+msgstr "запись не остановилась на границе блока"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Можно было прочитать только %lu байт из %lu"
-msgstr[1] "Можно было прочитать только %lu байт из %lu"
+msgstr[1] "Можно было прочитать только %lu байта из %lu"
+msgstr[2] "Можно было прочитать только %lu байт из %lu"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
-msgstr "Содержимое отличается"
+msgstr "Содержимое различно"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Неожиданный конец файла в архиве"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Типы файлов отличаются"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Права доступа отличаются"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Uid отличаются"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Gid отличаются"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Время изменения отличается"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Размеры отличаются"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Не ссылается на %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Символические ссылки отличаются"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Номера устройств отличаются"
 
@@ -805,41 +880,42 @@ msgstr "Архив содержит файлы с именами, из кото
 msgid "Verification may fail to locate original files."
 msgstr "При проверке оригинальные файлы могут быть не найдены."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "СБОЙ ПРОВЕРКИ: обнаружен %d неверный заголовок"
-msgstr[1] "СБОЙ ПРОВЕРКИ: обнаружено %d неверных заголовков"
+msgstr[1] "СБОЙ ПРОВЕРКИ: обнаружено %d неверных заголовка"
+msgstr[2] "СБОЙ ПРОВЕРКИ: обнаружено %d неверных заголовков"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "Нулевой блок в %s"
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: содержит каталог с кэшем тегов %s; %s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "значение %s за пределами %s диапазона %s..%s; заменяется на %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "значение %s за пределами %s диапазона %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Создаются отрицательные восьмеричные заголовки"
 
 #: src/create.c:624 src/create.c:687
 #, c-format
 msgid "%s: file name is too long (max %d); not dumped"
-msgstr "%s: имя файла слишком длинное (максисмум %d); не сброшено"
+msgstr "%s: имя файла слишком длинное (максимум %d); не сброшено"
 
 #: src/create.c:634
 #, c-format
@@ -851,289 +927,276 @@ msgstr "%s: имя файла слишком длинное (не может б
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: имя ссылки слишком длинное; не сброшено"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: Файл урезан на %s байт; дополнен нулями"
-msgstr[1] "%s: Файл урезан на %s байт; дополнен нулями"
+msgstr[1] "%s: Файл урезан на %s байта; дополнен нулями"
+msgstr[2] "%s: Файл урезан на %s байт; дополнен нулями"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: файл находится на другой файловой системе; не сброшен"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr "содержимое не сброшено"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Неизвестный тип файла; файл проигнорирован"
 
-#: src/create.c:1464
-#, c-format
-msgid "Missing links to %s.\n"
+#: src/create.c:1472
+#, fuzzy, c-format
+msgid "Missing links to %s."
 msgstr "Отсутствуют ссылки на %s.\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: файл не изменён; не сброшен"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: файл является архивом; не сброшен"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Файла удален до его считывания"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr "каталог не сброшен"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: файл изменился во время чтения"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: сокет проигнорирован"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: door проигнорирован"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Пропускается до следующего заголовка"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Удаляется не-заголовок из архива"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: невероятно старая временная метка %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: временная метка %s - %s с в будущем "
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Неожиданная противоречивость при создании каталога"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Каталог переименован до того, как мог быть извлечен его статус"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Непрерывные файлы извлекаются как обычные"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Выполняется попытка извлечь символические ссылки как жесткие"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Считывается %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Невозможно извлечь -- файл продолжается с другого тома"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "Непредвиденный длинный заголовок имени"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Неизвестный тип файла `%c', извлечён как обычный файл"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "Текущий %s более новый или такого же возраста"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Невозможно было выполнить резервное копирование этот файла"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "Невозможно переименовать %s в %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Неисправимая ошибка: завершение работы"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Каталог был переименован из %s"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Каталог был переименован"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Каталог новый"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Неверная временная метка"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Неверное время изменения (секунды) "
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "Неверное время изменения (наносекунды)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Неверный номер устройства"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Неверный номер inode"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "Слишком длинное поле при чтении из snapshot-файла"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "Ошибка чтения snapshot-файла"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "Неожиданный конец файла snapshot-файле"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "Неожиданное значения поля в snapshot-файле"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "Отсутствует указатель конца записи"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "Неверный формат инкрементного файла"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr "Неподдерживаемая версия инкрементного формата: %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr "Неверно сформирован dump-каталог: ожидался '%c', а найден %#3o"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "Неверно сформирован dump-каталог: 'X' повторяется"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "Неверно сформирован dump-каталог: пустое имя в 'R'"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "Неверно сформирован dump-каталог: перед 'T' не стоит 'R'"
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "Неверно сформирован dump-каталог: пустое имя в 'T'"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr "Неверно сформирован dump-каталог: ожидался '%c', а найден конец данных"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr "Неверно сформирован dump-каталог: 'X' ни разу не использован"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Невозможно создать временный каталог с помощью шаблона %s"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: Каталог не удалён: невозможно выполнить stat"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: Каталог находится на другом устройстве: не удален"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Удаляется %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Невозможно удалить"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Пропускается"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "блок %s: ** Блок нулей **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "блок %s: ** Конец файла **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "блок %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "В заголовке пустое поле вместо ожидаемого числового значения %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1141,142 +1204,161 @@ msgstr ""
 "дополнение до двух"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Восьмеричное значение архива %.*s за пределами диапазона %s"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Архив содержит устаревающие заголовки base-64"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "Архив подписан строкой base-64 %s за пределами диапазона %s"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Значение base-256 архива за пределами диапазона %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Заголовок содержит %.*s вместо ожидаемого числового значения %s"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Значение архива %s за пределами %s диапазона %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " ссылка на %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " неизвестный тип файла %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Длинная ссылка--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Длинное имя--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Заголовок тома--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Продолжение с позиции %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Создание каталога:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "%s переименован в %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Невозможно переименовать в %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "%s переименовывается назад в %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Невозможно сохранить рабочий каталог"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Невозможно изменить рабочий каталог"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Файла удален до его считывания"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Файла удален до его считывания"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "дочерний процесс"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "межпроцессорный канал"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr "В именах файлов используются символы подстановки."
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 "Используйте --wildcards, чтобы задействовать эти символы, или --no-wildcards,"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "чтобы отключить вывод этого предупреждения."
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Не найден в архиве"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Требуемое вхождение не найдено в архиве"
 
-#: src/tar.c:79
+#: src/names.c:894
+#, fuzzy
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr "--preserve-order несовместим с --listed-incremental"
+
+#: src/names.c:900
+#, fuzzy
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr "--preserve-order несовместим с --listed-incremental"
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Обе опции `-%s' и `-%s' используют стандартный ввод"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Неверный формат архива"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "Запрошены расширения GNU для несовместимого формата архива"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
@@ -1284,7 +1366,7 @@ msgstr ""
 "Неизвестный стиль цитирования `%s'. Воспользуйтесь `%s --quoting-style=help' "
 "для получения полного списка. "
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1303,7 +1385,7 @@ msgstr ""
 "архиве archive.tar.\n"
 "  tar -xf archive.tar          # Извлечение всех файлов из archive.tar.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1324,87 +1406,80 @@ msgstr ""
 "простые\n"
 "  never, simple   всегда создавать простые резервные копии\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Основной режим работы:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "вывод списка содержимого архива"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "извлечение файлов из архива"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "создание нового архива"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "поиск различий между архивом и файловой системой"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "добавление файлов в конец архива"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "добавление в архив только более новых файлов"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
-msgstr "пÑ\80иÑ\81оедининие tar-файлов к архиву"
+msgstr "пÑ\80иÑ\81оединение tar-файлов к архиву"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "удаление из архива (не на магнитных лентах!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr "проверка метки тома архива и выход"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Модификаторы:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "эффективная обработка разрежённых файлов"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr "MAJOR[.MINOR]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 "установить версию используемого формата разрежения (подразумевает --sparse)"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
-msgstr "обработка добавочного резервирования старого формата GNU"
-
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "ФАЙЛ"
+msgstr "обработка добавочного резервирования старого формата GNU"
 
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "обработка добавочного резервирования нового формата GNU"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr ""
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "не завершать работу при ненулевом статусе для нечитаемых файлов"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "N"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1416,121 +1491,126 @@ msgstr ""
 "list, и когда список файлов задан либо в командной строке, либо через опцию -"
 "T. По умолчанию N равен 1."
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "доступен поиск по архиву"
 
-#: src/tar.c:418
+#: src/tar.c:436
+#, fuzzy
+msgid "archive is not seekable"
+msgstr "доступен поиск по архиву"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
-msgstr ""
+msgstr "не проверять номера устройств при создании инкрементных архивов"
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
+"проверять номера устройств при создании инкрементных архивов (по умолчанию)"
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "Управление перезаписью:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "попытка проверить архив после его записи"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "удаление файлов после их добавления в архив"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "не перезаписывать существующие файлы при извлечении"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 "не перезаписывать существующие файлы, которые более новые, чем их копии в "
 "архиве"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "перезапись существующих файлов при извлечении"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "удаление каждого файла до извлечения поверх него"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "очистка всей иерархии до извлечения каталога"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "сохранение метаданных существующих каталогов"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr "перезапись существующих файлов при извлечении (по умолчанию)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Выбор выходного потока:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "извлекать файлы на стандартный вывод"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "КОМАНДА"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "перенаправлять извлечённые файлы в другую программу"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "игнорировать коды завершения дочерних процессов"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr "считать ненулевые коды завершения дочерних процессов как ошибку"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Обработка атрибутов файлов:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr ""
-"пÑ\80инÑ\83диÑ\82елÑ\8cно Ñ\83Ñ\81Ñ\82анаваливаÑ\82Ñ\8c Ð\98Ð\9cЯ Ð² ÐºÐ°Ñ\87еÑ\81Ñ\82ве Ð²Ð»Ð°Ð´ÐµÐ»Ñ\8cÑ\86а Ð´Ð»Ñ\8f Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð½Ñ\8bÑ\85 Ñ\84айлов"
+"принудительно устанавливать ИМЯ в качестве владельца для добавленных файлов"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr ""
-"пÑ\80инÑ\83диÑ\82елÑ\8cно Ñ\83Ñ\81Ñ\82анаваливаÑ\82Ñ\8c Ð\98Ð\9cЯ Ð² ÐºÐ°Ñ\87еÑ\81Ñ\82ве Ð³Ñ\80Ñ\83ппÑ\8b Ð´Ð»Ñ\8f Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð½Ñ\8bÑ\85 Ñ\84айлов"
+"принудительно устанавливать ИМЯ в качестве группы для добавленных файлов"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "ДАТА-ИЛИ-ФАЙЛ"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
-msgstr "Ñ\83Ñ\81Ñ\82анаваливаÑ\82Ñ\8c Ð´Ð»Ñ\8f Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð½Ñ\8bÑ\85 Ñ\84айлов mtime Ð¸Ð· Ð\94Ð\90ТЫ-Ð\98Ð\9bÐ\98-ФÐ\90Ð\99Ð\9bÐ\90"
+msgstr "устанавливать для добавленных файлов mtime из ДАТЫ-ИЛИ-ФАЙЛА"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "РЕЖИМ"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr ""
 "принудительно устанавливать (символьный) РЕЖИМ доступа для добавляемых файлов"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "СПОСОБ"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1540,29 +1620,33 @@ msgstr ""
 "после чтения (СПОСОБ='replace'; используется по умолчанию) или не установки "
 "времени в первую очередь (СПОСОБ='system')"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "не извлекать время изменения файла"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+#, fuzzy
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr "попытаться извлечь файлы с тем же владельцем"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+#, fuzzy
+msgid "extract files as yourself (default for ordinary users)"
 msgstr "извлекать файлы как свои собственные"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "использовать числа вместо имён владельца/группы"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 "извлекать информацию о правах доступа к файлу (по умолчанию для "
 "суперпользователя)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
@@ -1570,15 +1654,15 @@ msgstr ""
 "применять umask пользователя при извлечении прав доступа из архива (по "
 "умолчанию для обычных пользователей)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "сортировать извлекаемые имена в том же порядке, что и в архиве"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "эквивалент -p и -s"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
@@ -1586,140 +1670,140 @@ msgstr ""
 "не устанавливать время изменения и права доступа извлечённых каталогов до "
 "завершения процесса извлечения"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "отменить действие опции --delay-directory-restore"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "Выбор и переключение устройств:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "АРХИВ"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "использовать файл или устройство АРХИВ"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "файл архива является локальным, даже если содержит двоеточие"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "использовать указанную КОМАНДУ rmt вместо rmt"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "использовать удалённую КОМАНДУ вместо rsh"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "указать устройство и плотность"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "создание/листинг/извлечение многотомных архивов"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "сменить ленту после записи ЧИСЛО x 1024 байт"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr ""
 "запустить скрипт по окончании каждой ленты (подразумевается использование -М)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "использовать/обновлять номера тома в ФАЙЛЕ"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Разбиение на блоки:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "БЛОКИ"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "число БЛОКОВ x 512 байт на запись"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "ЧИСЛО байт на запись, кратное 512"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "игнорировать нулевые блоки в архиве (т.е. EOF)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "заново разбивать на блоки при чтении (для каналов 4.2BSD)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Формата архива:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "ФОРМАТ"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "создать архив в указанном формате"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "ФОРМАТОМ может быть:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "старый формат tar V7"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "формат GNU как в tar <= 1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "формат GNU tar 1.13.х"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "формат POSIX 1003.1-1988 (ustar)"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "формат POSIX 1003.1-2001 (pax)"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "эквивалент pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "эквивалент --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "эквивалент --format=posix"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "keyword[[:]=значение][,keyword[[:]=значение]]..."
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "управляющие ключевые слова pax"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "ТЕКСТ"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
@@ -1727,103 +1811,76 @@ msgstr ""
 "создать архив с именем тома ТЕКСТ; при листинге/извлечении использовать "
 "ТЕКСТ в качестве шаблона подстановки"
 
-#: src/tar.c:593
-#, fuzzy
+#: src/tar.c:613
 msgid "Compression options:"
-msgstr "Ð\9aонÑ\84ликÑ\82 Ð¾Ð¿Ñ\86ий Ñ\81жаÑ\82иÑ\8f"
+msgstr "Ð\9eпÑ\86ии Ñ\81жаÑ\82иÑ\8f:"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
-msgstr ""
+msgstr "использовать суффикс архива для определения программы сжатия"
 
-#: src/tar.c:597
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
-msgstr ""
-
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "пропустить архив через bzip2"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "пропустить архив через gzip"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "пропустить архив через compress"
+msgstr "не использовать суффикс архива для определения программы сжатия"
 
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "пропустить архив через gzip"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "пропустить архив через gzip"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "пропустить архив через gzip"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "ПРОГ"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "пропустить архив через ПРОГ (должна поддерживать -d)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Выбор локальных файлов:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
-msgstr "добавить указаный ФАЙЛ в архив (полезно, если имя начинается с дефиса)"
+msgstr ""
+"добавить указанный ФАЙЛ в архив (полезно, если имя начинается с дефиса)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "КАТАЛОГ"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "перейти в КАТАЛОГ"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "загрузить из ФАЙЛА имена для извлечения или создания"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T читает строки, оканчивающиеся нулём, отключает опцию -C"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
-msgstr ""
+msgstr "выключить воздействие предыдущей опции --null"
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr "убрать кавычки с имён файлов, прочитанных с опцией -T (по умолчанию)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr "не убирать кавычки с имён файлов, прочитанных с опцией -T"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "ШАБЛОН"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "исключать файлы, определённые ШАБЛОНОМ"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "исключать шаблоны, перечисленных в ФАЙЛЕ"
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
@@ -1831,90 +1888,93 @@ msgstr ""
 "исключать содержимое каталогов с файлом CACHEDIR.TAG за исключением самого "
 "файла с тегами"
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "исключать всё содержимое каталогов, содержащих файл CACHEDIR.TAG"
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "исключать каталоги, содержащие файл CACHEDIR.TAG"
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr "исключать каталоги, содержащие ФАЙЛ, за исключением самого ФАЙЛА"
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr "исключать всё содержимое каталогов, содержащих ФАЙЛ"
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr "исключать каталоги с ФАЙЛОМ"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr "исключать каталоги CVS"
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "отключить автоматический спуск в каталоги"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "оставаться в локальной файловой системе при создании архива"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "рекурсивный спуск по каталогам (по умолчанию)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "не удалять начальные `/' из имен файлов"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 "следовать по символьным ссылкам и сохранять файлы, на которые они указывают"
 
-#: src/tar.c:668
-#, fuzzy
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
-"следовать по символьным ссылкам и сохранять файлы, на которые они указывают"
+"следовать по жёстким ссылкам и сохранять файлы, на которые они указывают"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "ИМЯ-ЧЛЕНА"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "начинать с члена ИМЯ-ЧЛЕНА в архиве"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "сохранять только те файлы, которые новее ДАТЫ-ИЛИ-ФАЙЛА"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "ДАТА"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "сравнивать дату и время, только если изменены данные"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "УПРАВЛЕНИЕ"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "делать копию перед удалением, УПРАВЛЕНИЕ выбора версий"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "СТРОКА"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1922,93 +1982,102 @@ msgstr ""
 "делать копию перед удалением, переопределяет обычный суффикс ('~', если "
 "только он не переопределён переменной окружения SIMPLE_BACKUP_SUFFIX)"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
-msgstr "Преобразвание имён файлов:"
+msgstr "Ð\9fÑ\80еобÑ\80азование Ð¸Ð¼Ñ\91н Ñ\84айлов:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr ""
 "удалять указанное ЧИСЛО начальных компонентов из имён файлов перед "
 "извлечением"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "РАСШИРЕНИЕ"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr "использовать замену РАСШИРЕНИЯ sed'ом для преобразования имён файлов"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
-"Ð\9fаÑ\80амеÑ\82Ñ\80Ñ\8b Ñ\88аблонов Ð¿Ð¾Ð´Ñ\81Ñ\82ановки Ð´Ð»Ñ\8f Ð¸Ð¼Ñ\91н Ñ\84айлов (влÑ\8fÑ\8eÑ\82 Ð½Ð° Ñ\88аблÑ\8eны включения и "
+"Ð\9eпÑ\86ии Ñ\88аблонов Ð¿Ð¾Ð´Ñ\81Ñ\82ановки Ð´Ð»Ñ\8f Ð¸Ð¼Ñ\91н Ñ\84айлов (влиÑ\8fÑ\8eÑ\82 Ð½Ð° Ñ\88аблоны включения и "
 "исключения):"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
-msgstr "игноÑ\80иÑ\80иÑ\80оваÑ\82Ñ\8c Ñ\80егиÑ\81Ñ\82Ñ\80"
+msgstr "игнорировать регистр"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr "шаблоны начала имени файла"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr "шаблоны после любого '/' (по умолчанию для исключаемых)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr "с учётом регистра (по умолчанию)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr "использовать маски (по умолчанию для исключаемых)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "точное соответствие строке"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr "маски не соответствуют '/'"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
-msgstr "маски соответствут '/' (по умолчанию для исключаемых)"
+msgstr "маÑ\81ки Ñ\81ооÑ\82веÑ\82Ñ\81Ñ\82вÑ\83Ñ\8eÑ\82 '/' (по Ñ\83молÑ\87аниÑ\8e Ð´Ð»Ñ\8f Ð¸Ñ\81клÑ\8eÑ\87аемÑ\8bÑ\85)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Вывод информации:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "подробный листинг обрабатываемых файлов"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+#, fuzzy
+msgid "warning control"
+msgstr "Управление перезаписью:"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 "вывод сообщений о ходе выполнения через каждые ЧИСЛО записей (по умолчанию "
 "10)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
-msgstr ""
+msgstr "ДЕЙСТВИЕ"
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
-msgstr ""
+msgstr "выполнять ДЕЙСТВИЕ на каждой контрольной точке"
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "вывод сообщений, если сохранены не все ссылки"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "СИГНАЛ"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2020,27 +2089,27 @@ msgstr ""
 "SIGQUIT, SIGINT, SIGUSR1 и SIGUSR2. Также разрешается использовать имена без "
 "префикса SIG"
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "вывод даты изменения файла в формате UTC"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "отправить подробный вывод данных в FILE"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "выводить номера блоков архива в каждом сообщении"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "запрашивать подтверждение для каждого действия"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "показать значения tar по умолчанию"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
@@ -2048,31 +2117,31 @@ msgstr ""
 "при выводе листинга или извлечении показывать все каталоги, не "
 "соответствующем условию поиска"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr "показывать имена файлов или архивов после преобразования"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "СТИЛЬ"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr "установить стиль цитирования имён. Значения для СТИЛЯ см. ниже"
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "дополнительно цитировать символы из СТРОКИ"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "отключить цитирование символов из СТРОКИ"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Опции совместимости:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
@@ -2080,56 +2149,64 @@ msgstr ""
 "при создании, эквивалент --old-archive; при извлечении, эквивалент --no-same-"
 "owner"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Другие опции:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "отключить использование некоторых потенциально опасных опций"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Указать можно не более одной опции `-Acdtrux'"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Конфликт опций сжатия"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "Неизвестное название сигнала: %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "Файл с образцом даты не найден"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "%s заменяется на неизвестный формат даты %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "Опция `%s': дата '%s' рассматривается как %s"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s: список файлов уже прочитан"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s: в прочитанном имени файла присутствует пустой символ"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
-msgstr "Допустимые агрументы для опций --quoting-style:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "пропустить архив через xz"
+
+#: src/tar.c:1290
+#, fuzzy
+msgid "Valid arguments for the --quoting-style option are:"
+msgstr "Допустимые аргументы для опций --quoting-style:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2137,217 +2214,237 @@ msgstr ""
 "\n"
 "Значения по умолчанию *этого* tar:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Неверный размер ёмкости блока"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Неверная длина ленты"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+#, fuzzy
+msgid "Invalid incremental level value"
+msgstr "Неверный формат инкрементного файла"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Больше одной пороговой даты"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr "Неверное значение версии разрежения"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr "--atime-preserve='system' не поддерживается на этой платформе"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
-msgstr "значение --checkpoint не явлется целым числом"
+msgstr "значение --checkpoint не является целым числом"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: Неверная группа"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "В опции указан неверный режим доступа"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Неверное число"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Неверный владелец"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
+"Опция --preserve устарела, используйте --preserve-permissions --preserve-"
+"order"
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Неверный размер записи"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Размер записи должен быть кратен %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Неверное число элементов"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr "Разрешается использовать только одну опцию --to-command"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "Неверно сформирован аргумент плотности: %s"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "Неизвестная плотность: '%c'"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "Опции `-[0-7][lmh]' не поддерживаются *этим* tar'ом"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[ФАЙЛ]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Для старой опции `%c' нужно указать аргумент."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "--occurrence бесполезна без списка файлов"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
-msgstr "--occurrence не может быть использована запрошеном режиме работы"
+msgstr "--occurrence Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ\82 Ð±Ñ\8bÑ\82Ñ\8c Ð¸Ñ\81полÑ\8cзована Ð·Ð°Ð¿Ñ\80оÑ\88енном Ñ\80ежиме Ñ\80абоÑ\82Ñ\8b"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Для нескольких файлов архивов требуется опция `-M'"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Нельзя комбинировать --listed-incremental с --newer"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+#, fuzzy
+msgid "--level is meaningless without --listed-incremental"
+msgstr "--preserve-order несовместим с --listed-incremental"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: Метка тома слишком длинная (максимум %lu байт)"
-msgstr[1] "%s: Метка тома слишком длинная (максимум %lu байт)"
+msgstr[1] "%s: Метка тома слишком длинная (максимум %lu байта)"
+msgstr[2] "%s: Метка тома слишком длинная (максимум %lu байт)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Невозможно проверить многотомные архивы"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Невозможно проверить сжатые архивы"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Невозможно использовать многотомные сжатые архивы"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "Невозможно объединить сжатые архивы"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "--pax-option может быть использована только с архивами POSIX"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
-msgstr ""
+msgstr "Размер тома не может быть меньше размера записи"
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
-msgstr ""
+msgstr "--preserve-order несовместим с --listed-incremental"
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Робкий отказ от создания пустого архива"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Опции `-Aru' не совместимы с `-f -'"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Вы должны указать одну из опций `-Acdtrux'"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
-msgstr ""
+msgstr "Завершение работы с состоянием неисправности с из-за возникших ошибок"
 
 #: src/update.c:86
 #, c-format
 msgid "%s: File shrank by %s byte"
 msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: Файл урезан на %s байт"
-msgstr[1] "%s: Файл урезан на %s байт"
+msgstr[1] "%s: Файл урезан на %s байта"
+msgstr[2] "%s: Файл урезан на %s байт"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "Неизвестное или ещё не реализованное ключевое слово %s"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Число за пределами допустимого диапазона: %s"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "Шаблон %s не может быть использован"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "Ключевое слово %s не может быть перекрыто"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "Неверно сформирован расширенный заголовок: отсутствует длина"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr "Длина расширенного заголовка за пределами допустимого диапазона"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "Длина расширенного заголовка %*s за пределами допустимого диапазона"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr ""
 "Неверно сформирован расширенный заголовок: после длины отсутствует пробел"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Неверно сформирован расширенный заголовок: отсутствует знак равенства "
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr ""
 "Неверно сформирован расширенный заголовок: отсутствует знак новой строки"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
-msgstr "Игнорируется неизвестное клоючевое слово расширенного заголовка `%s'"
+msgstr "Игнорируется неизвестное ключевое слово расширенного заголовка `%s'"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
@@ -2356,29 +2453,29 @@ msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "Расширенный заголовок %s=%s за пределами диапазона %s..%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Неверно сформирован расширенный заголовок: неверный %s=%s"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Неверно сформирован расширенный заголовок: превышен %s=%s"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 "Неверно сформирован расширенный заголовок: неверный %s: непредвиденный "
 "разделитель %c"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr ""
@@ -2386,22 +2483,22 @@ msgstr ""
 "значений"
 
 #: src/checkpoint.c:107
-#, fuzzy, c-format
+#, c-format
 msgid "%s: not a valid timeout"
-msgstr "%s: Ð\9dевеÑ\80наÑ\8f Ð³Ñ\80Ñ\83ппа"
+msgstr "%s: Ð½ÐµÐ´Ð¾Ð¿Ñ\83Ñ\81Ñ\82имое Ð²Ñ\80емÑ\8f Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ\8f"
 
 #: src/checkpoint.c:112
 #, c-format
 msgid "%s: unknown checkpoint action"
-msgstr ""
+msgstr "%s: неизвестное действие контрольной точки"
 
 #: src/checkpoint.c:132
 msgid "write"
-msgstr ""
+msgstr "запись"
 
 #: src/checkpoint.c:132
 msgid "read"
-msgstr ""
+msgstr "чтение"
 
 #. TRANSLATORS: This is a ``checkpoint of write operation'',
 #. *not* ``Writing a checkpoint''.
@@ -2421,7 +2518,7 @@ msgstr "Контрольная точка записи %u"
 msgid "Read checkpoint %u"
 msgstr "Контрольная точка чтения %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
@@ -2430,88 +2527,94 @@ msgstr ""
 "от GNU.\n"
 "ОПЦИИ:\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr "Опции создания файла:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "РАЗМЕР"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "Создание файла указанного РАЗМЕРА"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "Запись в файл с ИМЕНЕМ, а не на стандартный вывод"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "Чтение имён файла из ФАЙЛА"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr "-T читает строки, оканчивающиеся нулём"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr "Заполнение файла заданным ШАБЛОНОМ. ШАБЛОН - это 'default' или 'zeros'"
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "Размер блока для разрежённого файла"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 "Создание разрежённого файла. Остальная часть команды определяет карту файла."
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr "СМЕЩЕНИЕ"
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr "Искать до указанного смещения перед записью данных"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr "Опции статистики по файлам:"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 "Вывод содержимого структуры stat для всех указанных файлов. ФОРМАТ по "
 "умолчанию:"
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr "Опции синхронного выполнения:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr " [ОПЦИЯ...]"
+
+#: tests/genfile.c:165
+#, fuzzy
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
-"Ð\92Ñ\8bполнение Ñ\83казанной Ð\9aÐ\9eÐ\9cÐ\90Ð\9dÐ\94Ы. Ð\9fолезно Ð²Ð¼ÐµÑ\81Ñ\82е Ñ\81 Ð¿Ð°Ñ\80амеÑ\82Ñ\80ом --checkpoint Ð¸ "
-"одним Ð¸Ð·  --cut, --append, --touch"
+"Ð\92Ñ\8bполнение Ñ\83казанной Ð\9aÐ\9eÐ\9cÐ\90Ð\9dÐ\94Ы. Ð\9fолезно Ð²Ð¼ÐµÑ\81Ñ\82е Ñ\81 Ð¾Ð¿Ñ\86ией --checkpoint Ð¸ Ð¾Ð´Ð½Ð¾Ð¹ "
+"из --cut, --append, --touch"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 "Выполнение указанного действия (см. ниже) до достижения контрольной точки с "
 "заданным НОМЕРОМ"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
-msgstr "Указание Ð´Ð°Ñ\82Ñ\8b Ð´Ð»Ñ\8f Ñ\81ледÑ\83Ñ\8eÑ\89его Ð¿Ð°Ñ\80амеÑ\82Ñ\80а --touch"
+msgstr "Указание Ð´Ð°Ñ\82Ñ\8b Ð´Ð»Ñ\8f Ñ\81ледÑ\83Ñ\8eÑ\89ей Ð¾Ð¿Ñ\86ии --touch"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr "Показать выполненные контрольные точки и статус выхода КОМАНДЫ"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
@@ -2519,7 +2622,7 @@ msgstr ""
 "Синхронное выполнение действий. Они выполняются при достижении контрольной "
 "точки с номером, определённым опцией --checkpoint."
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
@@ -2527,297 +2630,209 @@ msgstr ""
 "Усечь ФАЙЛ до размера, определённого предыдущей опцией --length (или 0, если "
 "не указан)"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 "Добавить РАЗМЕР байт к ФАЙЛУ. РАЗМЕР определяется предыдущей опцией --length."
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "Обновить время последнего доступа и изменения ФАЙЛА."
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "Выполнить КОМАНДУ"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "Недопустимый размер: %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Число за пределами допустимого диапазона: %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr "Отрицательный размер: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "Сбой stat(%s)"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
-msgstr ""
+msgstr "запрошенная длина файла %lu, реальная %lu"
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
-msgstr ""
+msgstr "созданный файл не является разреженным"
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "Ошибка разбора числа возле `%s'"
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "Неизвестный формат даты"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[АРГУМЕНТЫ...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "невозможно открыть `%s'"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 msgid "cannot seek"
 msgstr "невозможно найти"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "в имени файла присутствует пустой символ"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 "невозможно вывести разрежённые файлы на стандартный вывод; используйте опцию "
 "--file"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "неверная маска (возле `%s')"
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr "Неизвестное поле `%s'"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "невозможно установить время в `%s'"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "невозможно открыть `%s'"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "Команда успешно выполнена\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "Сбой команды; состояние: %d\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "Команда завершена по сигналу %d\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "Команда остановлена по сигналу %d\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "Команда сбросила дамп памяти\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "Команда завершена\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "для опции --stat нужны имена файлов"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "слишком много аргументов"
-
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
-#~ msgstr ""
-#~ "Предупреждение: опция -I не поддерживается; может имелась в виду -j или -"
-#~ "T?"
-
-#, fuzzy
-#~ msgid "cancel effect of the previous --transform-links option"
-#~ msgstr "отменить действие опции --delay-directory-restore"
-
-#~ msgid "[.]NUMBER"
-#~ msgstr "[.]ЧИСЛО"
-
-#~ msgid "Error exit delayed from previous errors"
-#~ msgstr "Выход, отложенный по результатам предыдущих ошибок"
-
-#~ msgid "block size"
-#~ msgstr "размер блока"
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: недопустимая опция -- %c\n"
 
 #~ msgid ""
-#~ "This program comes with NO WARRANTY, to the extent permitted by law.\n"
-#~ "You may redistribute it under the terms of the GNU General Public "
-#~ "License;\n"
-#~ "see the file named COPYING for details."
-#~ msgstr ""
-#~ "Эта программа поставляется БЕЗ ГАРАНТИИ в маскимальной степени,\n"
-#~ "допускаемой применимым законодательством. Вы можете распространять\n"
-#~ "ее далее согласно условиям GNU General Public License; дополнительную\n"
-#~ "информацию смотрите в файле COPYING."
-
-#~ msgid "rmtd: Garbage command %c\n"
-#~ msgstr "rmtd: Неверная команда %c\n"
-
-#~ msgid "WARNING: No volume header"
-#~ msgstr "ПРЕДУПРЕЖДЕНИЕ: Нет метки тома"
-
-#~ msgid "Visible long name error"
-#~ msgstr "По-видимому, ошибка за длинного имени"
-
-#~ msgid "Time stamp out of range"
-#~ msgstr "Временная метка за пределами диапазона"
-
-#~ msgid "Device number out of range"
-#~ msgstr "Номер устройства за пределами диапазона"
-
-#~ msgid "Visible longname error"
-#~ msgstr "По-видимому, ошибка длинного имени"
-
-#~ msgid "Renamed %s to %s"
-#~ msgstr "%s переименован в %s"
-
-#~ msgid "%s: Cannot symlink to %s"
-#~ msgstr "%s: Невозможно создать символическую ссылку на %s"
-
-#~ msgid "Symlinked %s to %s"
-#~ msgstr "Создана символьная ссылка %s на %s"
-
-#~ msgid "Unknown demangling command %s"
-#~ msgstr "Неизвестная команда %s для восстановления рубленых имен"
-
-#~ msgid "Missing file name after -C"
-#~ msgstr "Отсутствует имя файла после -C"
-
-#~ msgid "don't change access times on dumped files"
-#~ msgstr "не изменять время доступа для сброшенных файлов"
-
-#~ msgid "extract permissions information"
-#~ msgstr "извлечение информации о разрешениях"
-
-#~ msgid "do not extract permissions information"
-#~ msgstr "не извлекать информацию о разрешениях"
-
-#~ msgid "FILE-OF-NAMES"
-#~ msgstr "ФАЙЛ-С-ИМЕНАМИ"
-
-#~ msgid "exclude patterns are plain strings"
-#~ msgstr "исключение шаблонов, являющихся обычными строками"
-
-#~ msgid "dump instead the files symlinks point to"
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
 #~ msgstr ""
-#~ "сохранение символических ссылок вместо файлов, на которые они указывают"
+#~ "\n"
+#~ "Отчёты об ошибках отправляйте на <%s>.\n"
 
-#~ msgid "same as -N"
-#~ msgstr "эквивалент -N"
+#~ msgid "Input string too long"
+#~ msgstr "Слишком длинная входная строка"
 
-#~ msgid "exclude patterns use wildcards (default)"
-#~ msgstr ""
-#~ "переменной окружения SIMPLE_BACKUP_SUFFIX, за исключением шаблонов, "
-#~ "использующих маски (по умолчанию)"
+#~ msgid "Number syntax error"
+#~ msgstr "Ошибка синтаксиса числа"
 
-#~ msgid "print total bytes written while creating archive"
-#~ msgstr "вывод общего объема записанных байт при создании архива"
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Невозможно выделить буферное пространство\n"
 
-#~ msgid "Print license and exit"
-#~ msgstr "Ð\92Ñ\8bвод Ð»Ð¸Ñ\86ензии Ð¸ Ð²Ñ\8bÑ\85од"
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Ð\9dевозможно Ð²Ñ\8bделиÑ\82Ñ\8c Ð±Ñ\83Ñ\84еÑ\80ное Ð¿Ñ\80оÑ\81Ñ\82Ñ\80анÑ\81Ñ\82во"
 
-#~ msgid ""
-#~ "Based on the work of John Gilmore and Jay Fenlason. See AUTHORS\n"
-#~ "for complete list of authors.\n"
-#~ msgstr ""
-#~ "Основан на результатах работы Джона Гилмора (John Gilmore) и Джея "
-#~ "Фенлансона\n"
-#~ "(Jay Fenlason). Полный список авторов смотрите в файле AUTHORS.\n"
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Попробуйте `%s --help' для получения дополнительной информации.\n"
 
 #~ msgid ""
-#~ "   GNU tar is free software; you can redistribute it and/or modify\n"
-#~ "   it under the terms of the GNU General Public License as published by\n"
-#~ "   the Free Software Foundation; either version 2 of the License, or\n"
-#~ "   (at your option) any later version.\n"
-#~ "\n"
-#~ "   GNU tar is distributed in the hope that it will be useful,\n"
-#~ "   but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-#~ "   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
-#~ "   GNU General Public License for more details.\n"
-#~ "\n"
-#~ "   You should have received a copy of the GNU General Public License\n"
-#~ "   along with GNU tar; if not, write to the Free Software\n"
-#~ "   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  "
-#~ "USA\n"
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
 #~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
 #~ msgstr ""
-#~ "   GNU tar является открытым программным обеспечением; вы можете\n"
-#~ "   распространять ее далее и/или изменять ее согласно условиями GNU\n"
-#~ "   General Public License, опубликованной Free Software Foundation 2-й\n"
-#~ "   версии или (на ваше усмотрение) любой другой более поздней версии.\n"
-#~ "\n"
-#~ "   GNU tar распространяется в надежде, что она будет полезна,\n"
-#~ "   но БЕЗ ВСЯКОЙ ГАРАНТИИ; даже без подразумеваемой гарантии\n"
-#~ "   ПРИГОДНОСТИ ДЛЯ ПРОДАЖИ или ПРИМЕНИМОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. За "
-#~ "более\n"
-#~ "   подробной информацией обращайтесь к GNU General Public License.\n"
+#~ "Использование: %s [ОПЦИЯ]\n"
+#~ "Управляет накопителями на магнитной ленте, принимая команды из удалённого "
+#~ "процесса.\n"
 #~ "\n"
-#~ "   Вы должны были получить копию GNU General Public License вместе с "
-#~ "этой\n"
-#~ "   программой; если это не так, сообщите об этом Free Software "
-#~ "Foundation,\n"
-#~ "   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. \n"
+#~ "  --version  Вывод информации о версии.\n"
+#~ "  --help     Вывод этой справки.\n"
 
-#~ msgid "Semantics of -l option will change in the future releases."
-#~ msgstr "СеманÑ\82ика Ð¾Ð¿Ñ\86ии -l Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ\82Ñ\81Ñ\8f Ð² Ð±Ñ\83дÑ\83Ñ\89иÑ\85 Ð²ÐµÑ\80Ñ\81иÑ\8fÑ\85."
+#~ msgid "Seek offset error"
+#~ msgstr "Ð\9eÑ\88ибка Ñ\81меÑ\89ениÑ\8f Ð¿Ð¾Ð¸Ñ\81ка"
 
-#~ msgid "Please use --one-file-system option instead."
-#~ msgstr "Пожалуйста, используйте вместо неё опцию --one-file-system."
+#~ msgid "Premature end of file"
+#~ msgstr "Преждевременный конец файла"
 
-#~ msgid "Warning: the -y option is not supported; perhaps you meant -j?"
-#~ msgstr ""
-#~ "Предупреждение: опция -y не поддерживается; возможно вы имели в виду -j?"
+#~ msgid "Reading %s\n"
+#~ msgstr "Считывается %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Неисправимая ошибка: завершение работы"
+
+#~ msgid "suppress this warning."
+#~ msgstr "чтобы отключить вывод этого предупреждения."
+
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "пропустить архив через bzip2"
 
-#~ msgid "Error in writing to standard output"
-#~ msgstr "Ð\9eÑ\88ибка Ð¿Ñ\80и Ð·Ð°Ð¿Ð¸Ñ\81и Ð½Ð° Ñ\81Ñ\82андаÑ\80Ñ\82нÑ\8bй Ð²Ñ\8bвод"
+#~ msgid "filter the archive through gzip"
+#~ msgstr "пÑ\80опÑ\83Ñ\81Ñ\82иÑ\82Ñ\8c Ð°Ñ\80Ñ\85ив Ñ\87еÑ\80ез gzip"
 
-#~ msgid "%s: Read error at byte %s, reading %lu byte"
-#~ msgid_plural "%s: Read error at byte %s, reading %lu bytes"
-#~ msgstr[0] "%s: Ошибка чтения с позиции %s, считывается %lu байт"
-#~ msgstr[1] "%s: Ошибка чтения с позиции %s, считываются %lu байт"
+#~ msgid "filter the archive through compress"
+#~ msgstr "пропустить архив через compress"
 
-#~ msgid "--Mangled file names--\n"
-#~ msgstr "--Рубленые имена файлов--\n"
+#~ msgid "filter the archive through lzma"
+#~ msgstr "пропустить архив через lzma"
 
-#~ msgid "Unexpected EOF in mangled names"
-#~ msgstr "Ð\9dеожиданнÑ\8bй ÐºÐ¾Ð½ÐµÑ\86 Ñ\84айла Ð² Ñ\80Ñ\83бленÑ\8bÑ\85 Ð¸Ð¼ÐµÐ½Ð°Ñ\85"
+#~ msgid "filter the archive through lzop"
+#~ msgstr "пÑ\80опÑ\83Ñ\81Ñ\82иÑ\82Ñ\8c Ð°Ñ\80Ñ\85ив Ñ\87еÑ\80ез lzop"
index 1510e0e8a87dd96a38b72d4ce34c70ab8f48f19e..be06d16b0ab8b0c8bb98f03972a7d85a2ec89b7f 100644 (file)
Binary files a/po/sk.gmo and b/po/sk.gmo differ
index d1bc869a89aba67ade4a0dcc1df2822dd0fe4cb3..5fa77b1ceff89cbaf16f00a4d6cd42187ea9b5d0 100644 (file)
--- a/po/sk.po
+++ b/po/sk.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tar- \n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
 "PO-Revision-Date: 2002-02-10 12:00CEST\n"
 "Last-Translator: Martin Lacko <lacko@host.sk>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
@@ -15,73 +15,73 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: KBabel 0.9.5\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "argument %s je pre %s neplatný"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "argument %s nie je pre %s jednoznaèný"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Platné argumenty sú:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr ""
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr ""
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr ""
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr ""
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr ""
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
 msgstr ""
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr ""
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr ""
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 #, fuzzy
 msgid " [OPTION...]"
 msgstr ""
 "\n"
 "Pou¾itie: %s [PREPÍNAÈ]...\n"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, fuzzy, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Viac informácií získate príkazom `%s --help'.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, fuzzy, c-format
 msgid "Report bugs to %s.\n"
 msgstr ""
@@ -90,214 +90,121 @@ msgstr ""
 "pripomienky k pkekladu zasielajte na adresu <sk-i18n@lists.linux.sk> "
 "(slovensky).\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Neznáma systémová chyba"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr ""
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr ""
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr ""
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr ""
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr ""
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr ""
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr ""
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr ""
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, fuzzy, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: prepínaè `%s' vy¾aduje argument\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr ""
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr ""
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: prepínaè %s nie je jednoznaèný\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: prepínaè `--%s' musí by» zadaný bez argumentov\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: prepínaè `%c%s' musí by» zadaný bez argumentu\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: prepínaè `%s' vy¾aduje argument\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: neznámy prepínaè `--%s'\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: neznámy prepínaè `%c%s'\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: neznámy prepínaè -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: neznámy prepínaè -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: prepínaè vy¾aduje argument -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: prepínaè `-W %s' nie je jednoznaèný\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: prepínaè `-W %s' musí by» zadaný bez argumentu\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "Pamä» vyèerpaná"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, fuzzy, c-format
 msgid "unable to record current working directory"
 msgstr "Pracovný adresár nie je mo¾né zmeni»"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, fuzzy, c-format
 msgid "failed to return to initial working directory"
 msgstr "Pracovný adresár nie je mo¾né uchova»"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Nedá sa %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Varovanie: Nedá sa %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Práva nie je mo¾né zmeni» na %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Vlastníctvo nie je mo¾né zmeni» na uid %lu, gid %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Odkaz na %s nie je mo¾né vytvori»"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, fuzzy, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Chyba pri èítaní na bajte %s, èítanie %lu bajtov"
-msgstr[1] "%s: Chyba pri èítaní na bajte %s, èítanie %lu bajtov"
-
-#: lib/paxerror.c:192
-#, fuzzy, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Varovanie: Chyba pri èítaní na bajte %s, èítanie %lu bajtov"
-msgstr[1] "%s: Varovanie: Chyba pri èítaní na bajte %s, èítanie %lu bajtov"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Nedá sa zmeni» pozícia v súbore na %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Varovanie: Ukazovateµ v súbore nie je mo¾né premiestni» na %s"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Symbolický odkaz na `%s' nie je mo¾né vytvori»"
-
-#: lib/paxerror.c:349
-#, fuzzy, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Zapísané iba %lu z %lu bajtov"
-msgstr[1] "%s: Zapísané iba %lu z %lu bajtov"
-
-#: lib/paxnames.c:155
-#, fuzzy, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Odstraòujem úvodné `%.*s' z názvov súborov"
-
-#: lib/paxnames.c:156
-#, fuzzy, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Odstraòujem úvodné `%.*s' z názvov súborov"
-
-#: lib/paxnames.c:169
-#, fuzzy
-msgid "Substituting `.' for empty member name"
-msgstr "Odstraòujem úvodné `%.*s' z názvov súborov"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr ""
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -311,17 +218,17 @@ msgstr ""
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "`"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "'"
 
@@ -331,7 +238,7 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr ""
 
@@ -341,38 +248,28 @@ msgstr ""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr ""
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Slu¾ba nie je k dispozícii"
-
-#: lib/rtapelib.c:303
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdin"
-msgstr "stdin"
-
-#: lib/rtapelib.c:306
-#, c-format
-msgid "stdout"
-msgstr "stdout"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Vzdialený shell nie je mo¾né spusti»"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -383,19 +280,19 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, fuzzy, c-format
 msgid "Written by %s.\n"
 msgstr "Written by F. Pinard."
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, fuzzy, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Written by F. Pinard."
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, fuzzy, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Written by F. Pinard."
@@ -403,7 +300,7 @@ msgstr "Written by F. Pinard."
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -413,7 +310,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -423,7 +320,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -433,7 +330,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -443,7 +340,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -454,7 +351,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -465,7 +362,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -477,184 +374,336 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 "\n"
 "  Chyby v programe oznamujte na adresa <bug-tar@gnu.org> (iba anglicky),\n"
 "pripomienky k pkekladu zasielajte na adresu <sk-i18n@lists.linux.sk> "
 "(slovensky).\n"
 
-#: lib/version-etc.c:182
-#, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
+"\n"
+"  Chyby v programe oznamujte na adresa <bug-tar@gnu.org> (iba anglicky),\n"
+"pripomienky k pkekladu zasielajte na adresu <sk-i18n@lists.linux.sk> "
+"(slovensky).\n"
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:253
+#, c-format
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Miesto pre buffer nie je mo¾né alokova»\n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Nedá sa %s"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Varovanie: Nedá sa %s"
+
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Práva nie je mo¾né zmeni» na %s"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Miesto pre buffer nie je mo¾né alokova»"
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Vlastníctvo nie je mo¾né zmeni» na uid %lu, gid %lu"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:127
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Viac informácií získate príkazom `%s --help'.\n"
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Odkaz na %s nie je mo¾né vytvori»"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:179 lib/paxerror.c:211
 #, fuzzy, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Chyba pri èítaní na bajte %s, èítanie %lu bajtov"
+msgstr[1] "%s: Chyba pri èítaní na bajte %s, èítanie %lu bajtov"
+
+#: lib/paxerror.c:192
+#, fuzzy, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Varovanie: Chyba pri èítaní na bajte %s, èítanie %lu bajtov"
+msgstr[1] "%s: Varovanie: Chyba pri èítaní na bajte %s, èítanie %lu bajtov"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Nedá sa zmeni» pozícia v súbore na %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Varovanie: Ukazovateµ v súbore nie je mo¾né premiestni» na %s"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Symbolický odkaz na `%s' nie je mo¾né vytvori»"
+
+#: lib/paxerror.c:349
+#, fuzzy, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Zapísané iba %lu z %lu bajtov"
+msgstr[1] "%s: Zapísané iba %lu z %lu bajtov"
+
+#: lib/paxnames.c:155
+#, fuzzy, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Odstraòujem úvodné `%.*s' z názvov súborov"
+
+#: lib/paxnames.c:156
+#, fuzzy, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Odstraòujem úvodné `%.*s' z názvov súborov"
+
+#: lib/paxnames.c:169
+#, fuzzy
+msgid "Substituting `.' for empty member name"
+msgstr "Odstraòujem úvodné `%.*s' z názvov súborov"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
 msgstr ""
-"Pou¾itie: %s [PREPÍNAÈ]\n"
-"Manipuluje s archívom, prjíma príkazy vzdialeného procesu.\n"
-"\n"
-"  --version     Vypí¹e oznaèenie verzie\n"
-"  --help        Vypí¹e túto nápovedu\n"
 
-#: rmt/rmt.c:397
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Slu¾ba nie je k dispozícii"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "stdin"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "stdout"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
+msgstr ""
+
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Vzdialený shell nie je mo¾né spusti»"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Smer posunu v súbore je mimo rozsah"
+
+#: rmt/rmt.c:419
 #, fuzzy
-msgid "Seek offset error"
-msgstr "Veµkos» pozície v súbore je mimo rozsah"
+msgid "Invalid seek direction"
+msgstr "Zadáné chybné práva"
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Neplatný èas súboru"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Veµkos» pozície v súbore je mimo rozsah"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Smer posunu v súbore je mimo rozsah"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Neplatná då¾ka pásky"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Veµkos» pozície v súbore je mimo rozsah"
+
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: Predèasný koniec súboru\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Predèasný koniec súboru"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "%s: neznámy prepínaè -- %c\n"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Neoèekávaný koniec archívu"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr ""
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr ""
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "%s: Nedá sa zmeni» pozícia v súbore na %s"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr ""
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Neznámy príkaz"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Toto pravdepodobne nie je tar archiv"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 #, fuzzy
 msgid "Total bytes written"
 msgstr "Celkom zapísané bajtov: %s (%sB, %sB/s)\n"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr ""
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, fuzzy, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Celkom zapísané bajtov: %s (%sB, %sB/s)\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(rúra)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Chybná hodnota pre veµkos» záznamu"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Meno archívu nebolo zadané"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Stdin/Stdout archív nie je mo¾né otvori»"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr ""
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Komprimovaný archív nie je mo¾né aktualizova»"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Páska na zaèiatku, konèím"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Príli¹ mnoho chýb, konèím"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, fuzzy, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Veµkos» záznamu = %lu blokov"
 msgstr[1] "Veµkos» záznamu = %lu blokov"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, fuzzy, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Nezarovnaný blok (%lu bajtov) v archíve"
 msgstr[1] "Nezarovnaný blok (%lu bajtov) v archíve"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr "V archíve sa nie je mo¾né vráti», bez -i mô¾e by» neèitateµný"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr ""
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: vracia chybné èíslo zväzku"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Èíslo zväzku preteèené"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Pripravte zväzok #%d pre archív %s a stlaète return:"
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "Namiesto u¾ívateµskej odpovede bol zadaný koniec súboru"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "VAROVANIE: Archiv je nekompletný"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, fuzzy, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -666,124 +715,124 @@ msgstr ""
 " !          Vytvorenie podshellu\n"
 " ?          Vypísanie tejto nápovedy\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr ""
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr ""
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Nie je nový zväzok; konèím.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr ""
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr ""
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, fuzzy, c-format
 msgid "%s command failed"
 msgstr "'%s' príkaz zlyhal"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, fuzzy, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s nepokraèuje na tomto zväzku"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s nepokraèuje na tomto zväzku"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s je chybnej då¾ky (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, fuzzy, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Tento zväzok nie je následníkem predchádzajúceho"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Pre vyhodnotenie vzorky `%s' musí by» archív pomenovaný"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Zväzok %s nezodpovedá vzorke %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
 msgstr ""
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
 msgstr ""
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, fuzzy, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Dá sa èíta» iba %lu z %lu bajtov"
 msgstr[1] "Dá sa èíta» iba %lu z %lu bajtov"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Obsah sa lí¹i"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Neoèekávaný koniec archívu"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Typ súboru sa lí¹i"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Práva sa lí¹ia"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Uid sa lí¹i"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Gid sa lí¹i"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Èas poslednej úpravy sa lí¹i"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Veµkos» sa lí¹i"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Nie je odkazom na %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Symbolický odkaz sa lí¹i"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Èíslo zariadenia sa lí¹i"
 
@@ -805,34 +854,34 @@ msgstr ""
 msgid "Verification may fail to locate original files."
 msgstr ""
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, fuzzy, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "CHYBNÉ OVERENIE: nájdených chybných hlavièiek: %d"
 msgstr[1] "CHYBNÉ OVERENIE: nájdených chybných hlavièiek: %d"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr ""
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr ""
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "hodnota %s typu %s je mimo rozsah %s..%s; nahradzujem za %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "hodnota %s typu %s je mimo rozsah %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Generujem záporné osmièkové hlavièky"
 
@@ -851,293 +900,279 @@ msgstr "%s: s
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: súbor nie je zmenený; neaktualizovaný"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, fuzzy, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: Súbor je krat¹í o : %s bajtov; Doplòujem nulami."
 msgstr[1] "%s: Súbor je krat¹í o : %s bajtov; Doplòujem nulami."
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: súbor je na inom súborovom systéme; nearchivovaný"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr ""
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Neznámy typ súboru; súbor ignorovaný"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, fuzzy, c-format
-msgid "Missing links to %s.\n"
+msgid "Missing links to %s."
 msgstr " odkaz na %s\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: súbor nie je zmenený; neaktualizovaný"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: súbor je archiv; nearchivovaný"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Súbor zmazaný skôr ako mohl by» èítaný"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr ""
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: súbor bol poèas èítania zmenený"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: soket ignorovaný"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: dvere ignorované"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Preskakujem na ïal¹iu hlavièku"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Z archívu je mazané to, èo nie je hlavièka"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr ""
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, fuzzy, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: èasová nálepka %s je %lu z dátumu budúcnosti"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Neoèakávaná nekonzistencia, pri vytvárení adresára"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr ""
 "%s: Prieèinok bol premenovaný predtým, ako mohol by» extrahovaný jeho stav"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Súvisle ulo¾ené súbory rozbaµujem ako obyèajné súbory"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Skú¹am rozbali» symbolické odkazy ako pevné odkazy"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Èítanie z %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Nedá sa rozbali» -- súbor je pokraèovaním iného zväzku"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 #, fuzzy
 msgid "Unexpected long name header"
 msgstr "Neoèakávaný koniec v rozsekanom mene"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, fuzzy, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Neznámy typ súboru `%c', rozbalený ako normálny súbor"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr ""
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Tento súbor nebolo mo¾né zálohova»"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, fuzzy, c-format
 msgid "Cannot rename %s to %s"
-msgstr "%s: nie je mo¾né premenova» na %s"
-
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Z chyby sa nie je mo¾né zotavi»: ukonèuje sa"
+msgstr "%s: nie je mo¾né premenova» na %s"
 
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, fuzzy, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Adresár bol premenovaný"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Adresár bol premenovaný"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Adresár je nový"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Neplatný èas súboru"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 #, fuzzy
 msgid "Invalid modification time (seconds)"
 msgstr "Zadáné chybné práva"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr ""
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Neplatné èíslo zariadenia"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Neplatné èíslo i-uzlu"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr ""
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 #, fuzzy
 msgid "Unexpected EOF in snapshot file"
 msgstr "Neoèekávaný koniec archívu"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr ""
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr ""
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr ""
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr ""
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr ""
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr ""
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr ""
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr ""
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr ""
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, fuzzy, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Pre blokový faktor (blokov na záznam) %d nie je mo¾né alokovat pamä»"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr ""
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, fuzzy, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: súbor je na inom súborovom systéme; nearchivovaný"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Ma¾em %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Nedá sa zmaza»"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Vynechávam"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "blok %s: ** Blok NUL **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "blok %s: ** Konec súboru **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "blok %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Medzery v hlavièke na mieste, kde je oèakávaná èíselná hodnota typu %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1145,147 +1180,162 @@ msgstr ""
 "complement"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Osmièková hodnota %.*s typu %s je mimo rozsah"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Archív obsahuje zastaralé base-64 hlavièky"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "Hodnota base-64 typu %s je mimo %s rozsah"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Hodnota base-256 typu %s je mimo rozsah"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Archív obsahuje %.*s tam, kde je oèakaváná èísalná hodnota typu %s"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Hodnota %s typu %s je mimo rozsah %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " odkaz na %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " neznámy typ súboru %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr ""
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr ""
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Hlavièka zväzku--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Pokraèované od %s bajtu--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Vytváram adresár:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Premenovávam %s na %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: nie je mo¾né premenova» na %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Premenovávám %s spä» na %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Pracovný adresár nie je mo¾né uchova»"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Pracovný adresár nie je mo¾né zmeni»"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Súbor zmazaný skôr ako mohl by» èítaný"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Súbor zmazaný skôr ako mohl by» èítaný"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "potomok"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "meziprocesový kanál"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
-msgstr ""
-
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:601
+msgid "Pattern matching characters used in file names"
 msgstr ""
 
-#: src/names.c:597
-msgid "suppress this warning."
+#: src/names.c:603
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: V archíve nenájdený"
 
-#: src/names.c:615
+#: src/names.c:622
 #, fuzzy, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: V archíve nenájdený"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Prepínaèe `-%s' a `-%s' vy¾adujú ¹tandardný vstup"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, fuzzy, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Chybná skupina"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "GNU roz¹írenia po¾adované na nekompatibilnom formáte archívu"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
 msgstr ""
 
-#: src/tar.c:336
+#: src/tar.c:347
 #, fuzzy
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
@@ -1304,7 +1354,7 @@ msgstr ""
 "  %s -tvf archív.tar         # Podrobne vypí¹e v¹etky súbory v archív.tar.\n"
 "  %s -xf archív.tar          # Rozbalí v¹etky súbory z archív.tar.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 #, fuzzy
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
@@ -1330,87 +1380,80 @@ msgstr ""
 "                  existujú, inak tvorí jednoduché\n"
 "  never, simple   tvorí v¾dy jednoduché zálo¾né kópie súborov\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr ""
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr ""
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr ""
 
-#: src/tar.c:378
+#: src/tar.c:394
 #, fuzzy
 msgid "create a new archive"
 msgstr "Neoèekávaný koniec archívu"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr ""
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr ""
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr ""
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr ""
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr ""
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr ""
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr ""
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr ""
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr ""
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr ""
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:408
-msgid "do not exit with nonzero on unreadable files"
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
 msgstr ""
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
+#: src/tar.c:426
+msgid "do not exit with nonzero on unreadable files"
 msgstr ""
 
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1418,577 +1461,565 @@ msgid ""
 "command line or via the -T option; NUMBER defaults to 1"
 msgstr ""
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr ""
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr ""
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr ""
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr ""
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr ""
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr ""
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr ""
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr ""
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr ""
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr ""
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr ""
 
-#: src/tar.c:455
+#: src/tar.c:475
 #, fuzzy
 msgid "extract files to standard output"
 msgstr "Chyba pri zápise na ¹tandardný výstup"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr ""
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr ""
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr ""
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr ""
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr ""
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr ""
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr ""
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr ""
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr ""
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr ""
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
 "place (METHOD='system')"
 msgstr ""
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr ""
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr ""
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
 msgstr ""
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr ""
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
 msgstr ""
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr ""
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr ""
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr ""
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr ""
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr ""
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr ""
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr ""
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr ""
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr ""
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr ""
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr ""
 
-#: src/tar.c:536
+#: src/tar.c:556
 #, fuzzy
 msgid "create/list/extract multi-volume archive"
 msgstr "Víczväzkový archív nie je mo¾né otvori»"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr ""
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr ""
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr ""
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr ""
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr ""
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr ""
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr ""
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr ""
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr ""
 
-#: src/tar.c:562
+#: src/tar.c:582
 #, fuzzy
 msgid "Archive format selection:"
 msgstr "Odporujúce si archívne formáty"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr ""
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr ""
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr ""
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr ""
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr ""
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr ""
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr ""
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr ""
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr ""
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr ""
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr ""
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr ""
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr ""
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr ""
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
 msgstr ""
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Odporujúce si kompresné prepínaèe"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:597
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr ""
-
-#: src/tar.c:602
-#, fuzzy
-msgid "filter the archive through gzip"
-msgstr "%s: súbor je archiv; nearchivovaný"
-
-#: src/tar.c:606
-#, fuzzy
-msgid "filter the archive through compress"
-msgstr "%s: súbor je archiv; nearchivovaný"
-
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "%s: súbor je archiv; nearchivovaný"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "%s: súbor je archiv; nearchivovaný"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "%s: súbor je archiv; nearchivovaný"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr ""
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr ""
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr ""
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr ""
 
-#: src/tar.c:625
+#: src/tar.c:641
 #, fuzzy
 msgid "change to directory DIR"
 msgstr "Pracovný adresár nie je mo¾né zmeni»"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr ""
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr ""
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr ""
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr ""
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr ""
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr ""
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr ""
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr ""
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr ""
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr ""
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr ""
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr ""
 
-#: src/tar.c:664
+#: src/tar.c:682
 #, fuzzy
 msgid "don't strip leading `/'s from file names"
 msgstr "Odstraòujem úvodné `%.*s' z názvov súborov"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr ""
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr ""
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr ""
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr ""
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr ""
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr ""
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr ""
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
 msgstr ""
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr ""
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr ""
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr ""
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr ""
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr ""
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr ""
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr ""
 
-#: src/tar.c:710
+#: src/tar.c:728
 #, fuzzy
 msgid "wildcards do not match `/'"
 msgstr "Zväzok %s nezodpovedá vzorke %s"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr ""
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr ""
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr ""
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr ""
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr ""
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -1996,274 +2027,290 @@ msgid ""
 "accepted"
 msgstr ""
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr ""
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr ""
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr ""
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr ""
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr ""
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr ""
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr ""
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr ""
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr ""
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr ""
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr ""
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr ""
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr ""
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr ""
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Viac ako jeden prepínaè `-Acdtrux' nemô¾e by» zadaných"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Odporujúce si kompresné prepínaèe"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, fuzzy, c-format
 msgid "Unknown signal name: %s"
 msgstr " neznámy typ súboru %s\n"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 #, fuzzy
 msgid "Date sample file not found"
 msgstr "Dátumový súbor nebol nájdený"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Zamieòam %s za neznámy dátumový formát %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr ""
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, fuzzy, c-format
 msgid "%s: file list already read"
 msgstr "%s: súbor je archiv; nearchivovaný"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr ""
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "%s: súbor je archiv; nearchivovaný"
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr ""
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
 msgstr ""
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Neplatný poèet bajtov na záznam"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Neplatná då¾ka pásky"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr ""
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Viac ako jeden poèiatoèný dátum"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr ""
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr ""
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr ""
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: Chybná skupina"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Zadáné chybné práva"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 #, fuzzy
 msgid "Invalid number"
 msgstr "Neplatné èíslo i-uzlu"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Neplatný vlastník"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Chybná veµkos» záznamu"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Veµkos» záznamu musí by» násobok %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 #, fuzzy
 msgid "Invalid number of elements"
 msgstr "Neplatná då¾ka pásky"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr ""
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr ""
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr ""
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "Prepínaè `-[0-7][lmh]' nie je podporovaný týmto tarom"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr ""
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Prepínaè `%c' vy¾aduje argument."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr ""
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr ""
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 #, fuzzy
 msgid "Multiple archive files require `-M' option"
 msgstr "Viac archivaèných súborov vy¾aduje prepínaè `-M'"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "--listed-incremental a --newer nie je mo¾né kombinova»"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr ""
+
+#: src/tar.c:2404
 #, fuzzy, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: Meno zväzku je príli¹ dlhé (limit je %lu bajtov)"
 msgstr[1] "%s: Meno zväzku je príli¹ dlhé (limit je %lu bajtov)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Víczväzkový archív nie je mo¾né otvori»"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Komprimovaný archív nie je mo¾né otvori»"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Viaczväzkový komprimovaný archív nie je mo¾né vytvori»"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 #, fuzzy
 msgid "Cannot concatenate compressed archives"
 msgstr "Komprimovaný archív nie je mo¾né aktualizova»"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr ""
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Vytvorenie prázdneho archívu odmietnuté."
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Prepínaèe `-Aru' a `--delete' sú nezlúèiteµné s prepínaèom `-f -'"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Musíte zada» jeden z prepínaèov `-Acdtrux'"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2275,79 +2322,84 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: Súbor skrátený o bajtov: %s"
 msgstr[1] "%s: Súbor skrátený o bajtov: %s"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr ""
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Èas súboru mimo rozsah"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr ""
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr ""
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr ""
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr ""
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, fuzzy, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "Hodnota base-64 typu %s je mimo %s rozsah"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr ""
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr ""
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr ""
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr ""
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, fuzzy, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "Hodnota %s typu %s je mimo rozsah %s..%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr ""
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr ""
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr ""
@@ -2388,237 +2440,304 @@ msgstr "Zapisujem testovac
 msgid "Read checkpoint %u"
 msgstr "Èítanie testovacieho bodu %d"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 #, fuzzy
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
 msgstr "Generujem datové súbory pre testovanie GNU taru.\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 #, fuzzy
 msgid "File creation options:"
 msgstr "Odporujúce si kompresné prepínaèe"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr ""
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr ""
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 #, fuzzy
 msgid "Write to file NAME, instead of standard output"
 msgstr "Chyba pri zápise na ¹tandardný výstup"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr ""
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr ""
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr ""
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr ""
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr ""
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr ""
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr ""
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr ""
+"\n"
+"Pou¾itie: %s [PREPÍNAÈ]...\n"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr ""
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr ""
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr ""
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, fuzzy, c-format
 msgid "Invalid size: %s"
 msgstr "Neplatný èas súboru"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, fuzzy, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Èíslo i-uzlu mimo rozsah"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr ""
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr ""
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr ""
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, fuzzy, c-format
 msgid "Unknown date format"
 msgstr "Neznáma systémová chyba"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr ""
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr ""
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 #, fuzzy
 msgid "cannot seek"
 msgstr "Nedá sa zatvori»"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr ""
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr ""
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, fuzzy, c-format
 msgid "Unknown field `%s'"
 msgstr " neznámy typ súboru %s\n"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, fuzzy, c-format
 msgid "cannot set time on `%s'"
 msgstr "%s: Nedá sa zmeni» pozícia v súbore na %s"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "%s: Nedá sa zmeni» pozícia v súbore na %s"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr ""
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, fuzzy, c-format
 msgid "Command failed with status %d\n"
 msgstr "Potomok bol ukonèený signálom %d"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr ""
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr ""
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, fuzzy, c-format
 msgid "--stat requires file names"
 msgstr "--Rozdelené meno súboru--\n"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr ""
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: neznámy prepínaè -- %c\n"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
 #~ msgstr ""
-#~ "Varovanie: prepínaè -I nie je podporovaný; pravdepodobne budete chcie» "
-#~ "pou¾i» -j alebo -T!"
+#~ "\n"
+#~ "  Chyby v programe oznamujte na adresa <bug-tar@gnu.org> (iba anglicky),\n"
+#~ "pripomienky k pkekladu zasielajte na adresu <sk-i18n@lists.linux.sk> "
+#~ "(slovensky).\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Èítanie z %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Z chyby sa nie je mo¾né zotavi»: ukonèuje sa"
+
+#, fuzzy
+#~ msgid "filter the archive through compress"
+#~ msgstr "%s: súbor je archiv; nearchivovaný"
+
+#, fuzzy
+#~ msgid "filter the archive through lzma"
+#~ msgstr "%s: súbor je archiv; nearchivovaný"
+
+#, fuzzy
+#~ msgid "filter the archive through lzop"
+#~ msgstr "%s: súbor je archiv; nearchivovaný"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Miesto pre buffer nie je mo¾né alokova»\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Miesto pre buffer nie je mo¾né alokova»"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Viac informácií získate príkazom `%s --help'.\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Pou¾itie: %s [PREPÍNAÈ]\n"
+#~ "Manipuluje s archívom, prjíma príkazy vzdialeného procesu.\n"
+#~ "\n"
+#~ "  --version     Vypí¹e oznaèenie verzie\n"
+#~ "  --help        Vypí¹e túto nápovedu\n"
+
+#, fuzzy
+#~ msgid "Seek offset error"
+#~ msgstr "Veµkos» pozície v súbore je mimo rozsah"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Predèasný koniec súboru"
 
 #~ msgid "block size"
 #~ msgstr "veµkos» bloku"
@@ -2650,9 +2769,6 @@ msgstr ""
 #~ msgid "Visible long name error"
 #~ msgstr "Viditeµná chyba dlhého mena"
 
-#~ msgid "Time stamp out of range"
-#~ msgstr "Èas súboru mimo rozsah"
-
 #~ msgid "Device number out of range"
 #~ msgstr "Èíslo zariadenia je mimo rozsah"
 
@@ -3060,6 +3176,11 @@ msgstr ""
 #~ msgid "Obsolete option name replaced by --read-full-records"
 #~ msgstr "Zastaralý prepínaè, nahradený prepínaèom --read-full-records"
 
+#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgstr ""
+#~ "Varovanie: prepínaè -I nie je podporovaný; pravdepodobne budete chcie» "
+#~ "pou¾i» -j alebo -T!"
+
 #~ msgid "Obsolete option name replaced by --touch"
 #~ msgstr "Zastaralý prepínaè, nahradený prepínaèom --touch"
 
index 8fb7184c1c12cc079a4befe68491cd4b9be71d57..ca7f52f88cdb10593104c805e2041a96410c9031 100644 (file)
Binary files a/po/sl.gmo and b/po/sl.gmo differ
index 33da6ba4f02c40507a950390e02e3c2c42d57ec4..d6f5a479bcd2c9f719c18a31d7128953afa1fe45 100644 (file)
--- a/po/sl.po
+++ b/po/sl.po
@@ -1,16 +1,16 @@
 # -*- mode: po; coding: utf-8; -*- Slovenian message catalog for GNU Tar
-# Copyright (C) 1996, 1999, 2000, 2001, 2005, 2006, 2007 Free Software Foundation, Inc.
-# Primož Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>, 1996, 1999, 2000, 2001, 2005, 2006, 2007.
-#
-#  $Id: tar-1.19.sl.po,v 1.1 2007/10/17 08:26:36 peterlin Exp $
+# Copyright (C) 1996, 1999, 2000, 2001, 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the tar package.
+# Primož Peterlin <primozz.peterlin@gmail.com>, 1996, 1999, 2000, 2001, 2005, 2006, 2007, 2009.
 #
+# $Id: tar-1.22.sl.po 1.2 2009/05/09 09:09:31 Primoz Exp $
 msgid ""
 msgstr ""
-"Project-Id-Version: tar 1.19\n"
+"Project-Id-Version: tar 1.22\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
-"PO-Revision-Date: 2007-10-17 10:26+0200\n"
-"Last-Translator: Primož Peterlin <primoz.peterlin@biofiz.mf.uni-lj.si>\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
+"PO-Revision-Date: 2009-05-09 11:09+0200\n"
+"Last-Translator: Primož Peterlin <primozz.peterlin@gmail.com>\n"
 "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -18,47 +18,47 @@ msgstr ""
 "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
 "%100==4 ? 3 : 0);\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "neveljaven argument %s za %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "dvoumen argument %s za %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Veljavni argumenti so:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: vrednost %s je manj ali enako od %s"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: parameter ARGP_HELP_FMT zahteva podano vrednost"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: vrednost parametra ARGP_HELP_FMT mora biti pozitivna"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: neznan parameter ARGP_HELP_FMT"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Smetje v ARGP_HELP_FMT: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -66,242 +66,142 @@ msgstr ""
 "Argumenti, ki so bodisi obvezni bodisi neobvezni za dolge oblike izbir, so "
 "obvezni/neobvezni tudi za kratke oblike."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Uporaba:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr "  ali: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [IZBIRA...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Poskusite »%s --help« ali »%s --usage« za izčrpnejša navodila.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "Poročila o napakah javite na %s.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Neznana sistemska napaka"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "poda ta seznam pomoči"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "poda kratka navodila za uporabo"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "IME"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "nastavi ime programa"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "SEK"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "premor SEK sekund (privzeto 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "izpis izdaje programa"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(PROGRAMSKA NAPAKA) Različica ni poznana?!"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: Preveč argumentov\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr "(PROGRAMSKA NAPAKA) Izbira bi morala biti prepoznana?!"
 
-#: lib/closeout.c:112
-#, fuzzy
+#: gnu/closeout.c:114
 msgid "write error"
-msgstr "Pisanje zapisa\n"
+msgstr "napaka pri pisanju"
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: izbira »%s« ni enoznačna\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: izbira »--%s« ne dovoljuje argumenta\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: izbira »%c%s« ne dovoljuje argumenta\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: izbira »%s« zahteva argument\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: neprepoznana izbira »--%s«\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: neprepoznana izbira »%c%s«\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: nedovoljena izbira -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: neveljavna izbira -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: izbira zahteva argument -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: izbira »-W %s« je dvoumna\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: izbira »-W %s« ne dovoljuje argumenta\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "zmanjkalo pomnilnika"
 
-#: lib/openat-die.c:35
-#, fuzzy, c-format
-msgid "unable to record current working directory"
-msgstr "Ni mogoče izvedeti trenutnega imenika"
-
-#: lib/openat-die.c:48
-#, fuzzy, c-format
-msgid "failed to return to initial working directory"
-msgstr "Delovnega imenika ni mogoče shraniti"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Ni mogoče %s"
-
-# POZOR -- oblike "to stat a file" slovenscina ne pozna
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Opozorilo: Ni mogoče %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Zaščite ni mogoče spremeniti na %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Ni mogoče spremeniti lastnika in skupina na UID %lu GID %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Trda povezava na %s ni mogoča"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Napaka pri branju pri bajtu %s, med branjem %lu bajtov"
-msgstr[1] "%s: Napaka pri branju pri bajtu %s, med branjem %lu bajta"
-msgstr[2] "%s: Napaka pri branju pri bajtu %s, med branjem %lu bajtov"
-msgstr[3] "%s: Napaka pri branju pri bajtu %s, med branjem %lu bajtov"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Opozorilo: Napaka pri branju pri bajtu %s, prebrano %lu bajtov"
-msgstr[1] "%s: Opozorilo: Napaka pri branju pri bajtu %s, prebran %lu bajt"
-msgstr[2] "%s: Opozorilo: Napaka pri branju pri bajtu %s, prebrana %lu bajta"
-msgstr[3] "%s: Opozorilo: Napaka pri branju pri bajtu %s, prebrani %lu bajti"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Pozicioniranje na %s ni mogoče"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Opozorilo: Pozicioniranje na %s ni mogoče"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Ni mogoče ustvariti simbolne povezave na %s"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Zapisanih samo %lu od skupno %lu bajtov"
-msgstr[1] "%s: Zapisan samo %lu od skupno %lu bajtov"
-msgstr[2] "%s: Zapisana samo %lu od skupno %lu bajtov"
-msgstr[3] "%s: Zapisani samo %lu od skupno %lu bajtov"
-
-#: lib/paxnames.c:155
+#: gnu/openat-die.c:36
 #, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Odstranjujemo vodilne »%s« iz imen elementov"
+msgid "unable to record current working directory"
+msgstr "ni mogoče zabeležiti trenutnega imenika"
 
-#: lib/paxnames.c:156
+#: gnu/openat-die.c:54
 #, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Odstranjujemo vodilne »%s« iz imen trdih povezav"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Nadomeščamo manjkajoča imena elementov s ».«"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Nadomeščamo manjkajoča imena trdih povezav s ».«<"
+msgid "failed to return to initial working directory"
+msgstr "vrnitev v začetni delovni imenik ni mogoča"
 
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
@@ -316,17 +216,17 @@ msgstr "Nadomeščamo manjkajoča imena trdih povezav s ».«<"
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "»"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "«"
 
@@ -336,7 +236,7 @@ msgstr "«"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[dDjJ]"
 
@@ -346,38 +246,28 @@ msgstr "^[dDjJ]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[nN]"
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Storitev ni dosegljiva"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "standardni vhod"
-
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "standardni izhod"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Ni mogoče pognati nelokalne ukazne lupine"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
-msgstr ""
+msgstr "©"
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -386,232 +276,412 @@ msgid ""
 "There is NO WARRANTY, to the extent permitted by law.\n"
 "\n"
 msgstr ""
+"\n"
+"GPLv3+: GNU GPL, 3. izdaja ali poznejša <http://www.gnu.org/licenses/gpl."
+"html>\n"
+"To je prosto programje; lahko ga redistribuirate in/ali spreminjate.\n"
+"Za izdelek ni NOBENEGA JAMSTVA, do z zakonom dovoljene meje.\n"
+"\n"
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
-#, fuzzy, c-format
+#: gnu/version-etc.c:104
+#, c-format
 msgid "Written by %s.\n"
-msgstr "Avtor François Pinard."
+msgstr "Avtor(ica): %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
-#, fuzzy, c-format
+#: gnu/version-etc.c:108
+#, c-format
 msgid "Written by %s and %s.\n"
-msgstr "Avtor François Pinard."
+msgstr "Avtorja %s in %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
-#, fuzzy, c-format
+#: gnu/version-etc.c:112
+#, c-format
 msgid "Written by %s, %s, and %s.\n"
-msgstr "Avtor François Pinard."
+msgstr "Avtorji %s, %s in %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "and %s.\n"
 msgstr ""
+"Avtorji: %s, %s, %s\n"
+"in %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, and %s.\n"
 msgstr ""
+"Avtorji: %s, %s, %s,\n"
+"%s in %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, and %s.\n"
 msgstr ""
+"Avtorji: %s, %s, %s,\n"
+"%s, %s in %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, %s, and %s.\n"
 msgstr ""
+"Avtorji: %s, %s, %s,\n"
+"%s, %s, %s in %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, %s, %s,\n"
 "and %s.\n"
 msgstr ""
+"Avtorji: %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"in %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, %s, %s,\n"
 "%s, and %s.\n"
 msgstr ""
+"Avtorji: %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s in %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, %s, %s,\n"
 "%s, %s, and others.\n"
 msgstr ""
+"Avtorji: %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s in drugi.\n"
 
 #. TRANSLATORS: The placeholder indicates the bug-reporting address
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
-#, c-format
+#: gnu/version-etc.c:247
+#, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
+msgstr "Poročila o napakah javite na %s.\n"
+
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
 "\n"
-"Poročila o napakah javite na <%s>.\n"
+"Napake v programu sporočite na <%s>.\n"
+"Napake v prevodu sporočite na <translation-team-sl@lists.sourceforge.net>\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
-msgstr ""
+#: gnu/version-etc.c:255
+#, fuzzy, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+msgstr "Spletna stran %s: <http://www.gnu.org/software/%s/>.\n"
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr ""
+#: gnu/version-etc.c:258
+#, fuzzy
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+msgstr "Splošna pomoč za rabo programja GNU: <http://www.gnu.org/gethelp/>.\n"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "Napaka v skladnji števila"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Ni mogoče %s"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Ni mogoče rezervirati prostora za medpomnilnik\n"
+# POZOR -- oblike "to stat a file" slovenscina ne pozna
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Opozorilo: Ni mogoče %s"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Ni mogoče rezervirati prostora za medpomnilnik"
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Zaščite ni mogoče spremeniti na %s"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:101
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Poskusite »%s --help« za izčrpnejša navodila.\n"
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Ni mogoče spremeniti lastnika in skupina na UID %lu GID %lu"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:127
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
-msgstr ""
-"Uporaba: %s [IZBIRA]\n"
-"Rokovanje s tračno enoto, ob sprejemu ukazov oddaljenega procesa.\n"
-"\n"
-"  --version  različica programa\n"
-"  --help     ta navodila\n"
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Trda povezava na %s ni mogoča"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "Napaka pri odmiku pri seek"
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Napaka pri branju pri bajtu %s, med branjem %lu bajtov"
+msgstr[1] "%s: Napaka pri branju pri bajtu %s, med branjem %lu bajta"
+msgstr[2] "%s: Napaka pri branju pri bajtu %s, med branjem %lu bajtov"
+msgstr[3] "%s: Napaka pri branju pri bajtu %s, med branjem %lu bajtov"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
-msgid "Seek offset out of range"
-msgstr "Odmik pri seek izven obsega"
+#: lib/paxerror.c:192
+#, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Opozorilo: Napaka pri branju pri bajtu %s, prebrano %lu bajtov"
+msgstr[1] "%s: Opozorilo: Napaka pri branju pri bajtu %s, prebran %lu bajt"
+msgstr[2] "%s: Opozorilo: Napaka pri branju pri bajtu %s, prebrana %lu bajta"
+msgstr[3] "%s: Opozorilo: Napaka pri branju pri bajtu %s, prebrani %lu bajti"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Pozicioniranje na %s ni mogoče"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Opozorilo: Pozicioniranje na %s ni mogoče"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Ni mogoče ustvariti simbolne povezave na %s"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Zapisanih samo %lu od skupno %lu bajtov"
+msgstr[1] "%s: Zapisan samo %lu od skupno %lu bajtov"
+msgstr[2] "%s: Zapisana samo %lu od skupno %lu bajtov"
+msgstr[3] "%s: Zapisani samo %lu od skupno %lu bajtov"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Odstranjujemo vodilne »%s« iz imen elementov"
 
-#: rmt/rmt.c:428
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Odstranjujemo vodilne »%s« iz imen trdih povezav"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Nadomeščamo manjkajoča imena elementov s ».«"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Nadomeščamo manjkajoča imena trdih povezav s ».«<"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Storitev ni dosegljiva"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "standardni vhod"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "standardni izhod"
+
+#: lib/rtapelib.c:429
+#, fuzzy, c-format
+msgid "Cannot connect to %s: resolve failed"
+msgstr "Pozicija %s v datoteki %s ni dostopna"
+
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Ni mogoče pognati nelokalne ukazne lupine"
+
+#: rmt/rmt.c:413
 msgid "Seek direction out of range"
 msgstr "Smer pri seek izven obsega"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:419
+#, fuzzy
+msgid "Invalid seek direction"
+msgstr "Podana zaščita ni veljavna"
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Neveljavna oznaka časa"
+
+#: rmt/rmt.c:433
+msgid "Seek offset out of range"
+msgstr "Odmik pri seek izven obsega"
+
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Neveljavna dolžina traku"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Odmik pri seek izven obsega"
+
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: Predčasen znak za konec datoteke\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Predčasen znak za konec datoteke"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "Glavni načini delovanja:"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Nepričakovan znak za konec datoteke med predelanimi imeni"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "N"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "DATOTEKA"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "Ni mogoče odpreti %s"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr ""
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Neveljaven ukaz"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "To ne deluje kot arhiv ,tar'"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Skupno zapisanih bajtov"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "Skupno prebranih bajtov"
 
-#: src/buffer.c:365
-#, fuzzy, c-format
+#: src/buffer.c:396
+#, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Skupno izbrisanih bajtov: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(cev)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Neveljavna vrednost za dolžino zapisa (record_size)"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Ime arhiva ni podano"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Arhivov na stdin/stdout ni mogoče preveriti"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "Arhiv je stisnjen. Uporabite izbiro %s"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Stisnjenega arhiva ni mogoče ažurirati"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Na začetku traku, končujem"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Preveč napak, končujem"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
@@ -620,7 +690,7 @@ msgstr[1] "Dolžina zapisa = %lu blok"
 msgstr[2] "Dolžina zapisa = %lu bloka"
 msgstr[3] "Dolžina zapisa = %lu bloki"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
@@ -629,37 +699,37 @@ msgstr[1] "Neporavnan blok (%lu bajt) v arhivu"
 msgstr[2] "Neporavnan blok (%lu bajta) v arhivu"
 msgstr[3] "Neporavnan blok (%lu bajti) v arhivu"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr "Nazaj po arhivu ne gre, morda ni berljiv brez izbire -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek se ni ustavil na meji zapisa"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: vsebuje neveljavno številko dela"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Prekoračitev številke dela"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Pripravite del #%d za %s in pritisnite Return: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "Znak EOF na mestu, kjer se pričakuje odgovor uporabnika"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "POZOR: Arhiv nepopoln"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -670,65 +740,65 @@ msgstr ""
 " q             Končamo tar\n"
 " y, newline    Nadaljujemo z delovanjem\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !             Poženemo ukazno podlupino\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?             Ta seznam uzazov\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Novega dela ni, konec.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
-msgstr ""
+msgstr "Ime datoteke ni določeno. Poskusite znova.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "Neveljaven vnos. Vtipkajte ? za pomoč.\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "ukaz %s neuspešen"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s se morda nadaljuje v tem delu: zaglavje vsebuje porezano ime"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s se ne nadaljuje v tem delu"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s je napačne velikosti (%s != %s + %s)"
 
-#: src/buffer.c:1253
-#, fuzzy, c-format
+#: src/buffer.c:1326
+#, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
-msgstr "Ta del ne sodi v zaporedje"
+msgstr "Ta del ne sodi v zaporedje (%s - %s != %s)"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Arhiv ni označen skladno z %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Del %s ne ustreza %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
@@ -736,12 +806,11 @@ msgstr ""
 "%s: ime datoteke je predolgo za zapis v zaglavje GNU večdelnega arhiva; "
 "porezano"
 
-#: src/buffer.c:1621
-#, fuzzy
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
-msgstr "Arhiv %s se ne konča s koncem bloka"
+msgstr "pisanje se ni končalo s koncem bloka"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
@@ -750,49 +819,49 @@ msgstr[1] "Prebrati je bilo moč samo %lu od %lu bajta"
 msgstr[2] "Prebrati je bilo moč samo %lu od %lu bajtov"
 msgstr[3] "Prebrati je bilo moč samo %lu od %lu bajtov"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Vsebina se razlikuje"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Nepričakovan znak za konec datoteke v arhivu"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Zvrst datoteke se razlikuje"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Način se razlikuje"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Številka uporabnika (UID) se razlikuje"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Številka skupine (GID) se razlikuje"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Čas zadnje spremembe se razlikuje"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Velikost se razlikuje"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Ni povezana z %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Simbolna povezava se razlikuje"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Številka enote se razlikuje"
 
@@ -814,7 +883,7 @@ msgstr "Arhiv vsebuje imena datotek z odstranjenimi vodilnimi predponami."
 msgid "Verification may fail to locate original files."
 msgstr "Verifikacija morda ne bo uspela locirati izvornih datotek."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
@@ -823,27 +892,27 @@ msgstr[1] "NAPAKA PRI PREVERJANJU: najdena %d neveljavna glava"
 msgstr[2] "NAPAKA PRI PREVERJANJU: najdeni %d neveljavni glavi"
 msgstr[3] "NAPAKA PRI PREVERJANJU: najdene %d neveljavne glave"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "Osamljeni ničelni blok pri %s"
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: vsebuje značko medpomnilniškega imenika %s; %s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "vrednost %s od %s obseg %s..%s; zamenjano %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "vrednost %s od %s obseg %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Ustvarjanje negativnih osmiških glav"
 
@@ -862,7 +931,7 @@ msgstr "%s: ime datoteke je predolgo (ni mogoče deliti); brez iznosa"
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: ime povezave je predolgo; brez iznosa"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
@@ -871,436 +940,440 @@ msgstr[1] "%s: Datoteka skrčena za %s bajt; dopolnjeno z ničlami"
 msgstr[2] "%s: Datoteka skrčena za %s bajta; dopolnjeno z ničlami"
 msgstr[3] "%s: Datoteka skrčena za %s bajte; dopolnjeno z ničlami"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: datoteka je na drugem datotečnem sistemu; brez iznosa"
 
 # POZOR Imamo za to kak izraz?
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr "vsebina ni iznešena"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Neznan tip datoteke; datoteka ignorirana"
 
-#: src/create.c:1464
-#, c-format
-msgid "Missing links to %s.\n"
+#: src/create.c:1472
+#, fuzzy, c-format
+msgid "Missing links to %s."
 msgstr "Manjkajo povezave na %s.\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: datoteka je nespremenjena; brez iznosa"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: datoteka je arhiv; brez iznosa"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Datoteka je bila odstranjena, preden smo jo prebrali"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr "imenik ni iznašen"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: Datoteka je bila spremenjena med branjem"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: vtičnica ignorirana"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: vrata ignorirana"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Preskok na naslednjo glavo"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Brisanje ne-glave iz arhiva"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: neverjetno stara časovna oznaka %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: oznaka časa %s je %s s v prihodnosti"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Nepričakovana neskladnost pri ustvarjanju imenika"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Imenik preimenovan, preden je bilo moč izvleči njegov status"
 
 # POZOR! "contiguous files" so datoteke, ki so zapisane na disku
 # na zaporednih sektorjih (na tistih OS, ki jih podpirajo).
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Neprekinjene datoteke izvlečemo kot navadne"
 
 # POZOR! Grdo!
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Simbolne povezave poskusimo dearhivirati kot trde"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Branje %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Dearhivacija ni mogoča - datoteka se nadaljuje iz prejšnjega dela"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "Nepričakovano zaglavje z dolgim imenom"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Neznana vrsta datoteke »%c«, dearhiviramo kot navadno datoteko"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "Obstoječa »%s« je novejša ali enako stara"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Varnostne kopije te datoteke ni moč napraviti"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "Preimenovanje %s v %s ni mogoče"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Napake ni moč popraviti: zapuščamo"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Imenik je bil preimenovan z %s"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Imenik je bil preimenovan"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Imenik je nov"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Neveljavna oznaka časa"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Neveljaven čas spremembe (sekunde)"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "Neveljaven čas spremembe (nanosekunde)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Neveljavna številka enote"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Neveljavna številka inoda"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "Predolgo polje pri branju trenutnega posnetka"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "Napaka pri branju trenutnega posnetka"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "Nepričakovan znak za konec datoteke v trenutnem posnetku"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "Nepričakovana vrednost polja v trenutnem posnetku"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "Manjkajoč zaključek zapisa"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "Okvarjen inkrementalni zapis datoteke"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr "Nepodprta različica inkrementalnega zapisa: %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr ""
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr ""
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 #, fuzzy
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "Okvarjen argument gostote: »%s«"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr ""
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 #, fuzzy
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "Okvarjen argument gostote: »%s«"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr ""
 
-#: src/incremen.c:1551
-#, fuzzy, c-format
+#: src/incremen.c:1615
+#, c-format
 msgid "Cannot create temporary directory using template %s"
-msgstr "Ni mogoče rezervirati pomnilnika za bločni faktor %d"
+msgstr "Ni mogoče ustvariti začasnega imenika po šabloni %s"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: Imenika ne čistimo: statistika zanj ni dosegljiva"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: imenik je na drugi napravi; brez čiščenja"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Brišemo %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Odstranitev ni mogoča"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Izpuščeno"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "blok %s: ** Blok znakov NUL **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "blok %s: ** Konec datoteke **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "blok %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Na mestu v glavi, kjer pričakujemo številčno vrednost %s, so presledki"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
 "Osmiška vrednost arhiva %.*s izven obsega %s; privzemamo dvojiški komplement"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Osmiška vrednost arhiva %.*s izven obsega %s"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Arhiv vsebuje zastarele glave oblike base-64"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "Podpis %s oblike base-64 v arhivu je izven obsega %s"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Vrednost base-256 v arhivu izven obsega %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Arhiv vsebuje %.*s na mestu, kjer pričakujemo številčno vrednost %s"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Vrednost arhiva %s je izven obsega %s: %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " povezava na %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " neznan tip datoteke %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Dolga povezava--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Dolgo ime--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Glava dela--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Nadaljevanje pri bajtu %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Ustvarjamo imenik:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Preimenujemo %s v %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Preimenovanje v %s ni mogoče"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Preimenujemo %s nazaj v %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Delovnega imenika ni mogoče shraniti"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Delovnega imenika ni mogoče spremeniti"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Datoteka je bila odstranjena, preden smo jo prebrali"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Datoteka je bila odstranjena, preden smo jo prebrali"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "proces naslednik"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "medprocesni kanal"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
-msgstr ""
-
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
-msgstr ""
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
+msgstr "vzorci se ujemajo z začetkom imena datoteke"
 
-#: src/names.c:597
-msgid "suppress this warning."
+#: src/names.c:603
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Ni najdeno v arhivu"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Zahtevane pojavitve ni moč najti v arhivu"
 
-#: src/tar.c:79
+#: src/names.c:894
+#, fuzzy
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr "Izbiri --preserve-order in --listed-incremential sta nezdružljivi"
+
+#: src/names.c:900
+#, fuzzy
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr "Izbiri --preserve-order in --listed-incremential sta nezdružljivi"
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Izbiri »-%s« in »-%s« obe zahtevata standardni vhod"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Neveljavna oblika arhiva"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "Razširitve GNU izbrane na nezdružljivem formatu arhiva"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
 msgstr ""
 "Neznan slog narekovajev »%s«. Poskusite »%s --quoting-style=help« za seznam."
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1321,7 +1394,7 @@ msgstr ""
 "  tar -xf arhiv.tar             # Izvlečemo vse datoteke iz arhiva arhiv."
 "tar.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1344,87 +1417,79 @@ msgstr ""
 "                  sicer enostavne\n"
 "  never, simple   vedno enostavne varnostne kopije\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Glavni načini delovanja:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "izpis vsebine arhiva"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "izvlečenje datoteke iz arhiva"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "ustvarjanje novega arhiva"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "iskanje razlik med arhivom in datotečnim sistemom"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "dodajanje datotek na konec arhiva"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "dodajanje novih datotek, če so novejše od že arhiviranih"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "zlivanje arhivov"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "brisanje datotek iz arhiva (ne deluje na traku!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr ""
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Določila delovanja:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "ekonomično ravnanje z razpršenimi datotekami"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr ""
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "stari zapis GNU za inkrementalne arhive"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "DATOTEKA"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "novi zapis GNU za inkrementalne arhive"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr ""
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "nadaljuj z branjem, tudi če datoteke ni moč prebrati"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "N"
-
-#: src/tar.c:410
-#, fuzzy
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1436,118 +1501,123 @@ msgstr ""
 "list, pri čemer je seznam datotek podan bodisi v ukazni vrstici, bodisi z "
 "izbiro -T. Privzeta vrednost N je 1."
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "po arhivu je mogoče iskati"
 
-#: src/tar.c:418
+#: src/tar.c:436
+#, fuzzy
+msgid "archive is not seekable"
+msgstr "po arhivu je mogoče iskati"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
-msgstr ""
+msgstr "pri izdelavi inkrementalnega arhiva ne preverjaj številke naprav"
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
+"pri izdelavi inkrementalnega arhiva preverjaj številke naprav (privzeto)"
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "Nadzor nad pisanjem prek:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "s poskusom preverjanja zapisanega arhiva"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "pobriši datoteke, potem ko so arhivirane"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "pri izvlačenju ne piši prek obstoječih datotek"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr "ne piši prek obstoječih datotek, novejših od arhiviranih"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "pri izvlačenju piši prek obstoječih datotek"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr ""
 "s poprejšnjim brisanjem obstoječih datotek pri izvlačenju istoimenskih novih"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "izprazni hierarhije pred izvlačenjem imenikov"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "ohrani metainformacije o obstoječih imenikih"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr "pri izvlačenju piši prek metapodatkov obstoječih imenikov (privzeto)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Izbira izhodnega toka:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "datoteke izvleci na standardni izhod"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "UKAZ"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "datoteke napelji na vhod drugega programa"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "prezri izhodne kode hčerinskih procesov"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr "obravnavaj neničelne izhodne kode hčerinskih procesov kot napako"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Ravnanje z atributi datotek:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "pri dodajanju datotek spremenimo lastnika v IME"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "pri dodajanju datotek spremenimo skupino v IME"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "DATUM-ČAS"
 
-#: src/tar.c:473
+#: src/tar.c:493
 #, fuzzy
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "shrani le datoteke, novejše od DATUM-ČAS"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "SPREMEMBE"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "zahtevaj (simbolne) SPREMEMBE zaščite za dodane datoteke"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "METODA"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1557,29 +1627,33 @@ msgstr ""
 "branju (METODA=replace, privzeto) ali tako, da se časa sploh ne nastavi "
 "(METODA=system)"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "brez izvlačenja časa spremembe"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+#, fuzzy
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr "z ohranitvijo lastništva, če je mogoče"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+#, fuzzy
+msgid "extract files as yourself (default for ordinary users)"
 msgstr "pri izvlačenju prepišemo lastništvo nase"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "s številčnimi vrednostmi UID/GID namesto imen"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 "izvleci podatke o dovoljenjih za dostop do datotek (privzeto za "
 "administratorja)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
@@ -1587,15 +1661,15 @@ msgstr ""
 "uporabi uporabnikovo masko umask pri izvlačenju dovoljenj za dostop do "
 "datotek (privzeto za uporabnike)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "imena razvrstimo tako, da se ujemajo z arhivom"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "isto kot -p in -s skupaj"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
@@ -1603,140 +1677,140 @@ msgstr ""
 "počakaj do končanega izvlačenja, preden nastavimo čase sprememb in "
 "dovoljenja za dostop za izvlečene imenike"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "prekliči učinek izbire --delay-directory-restore"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "Izbira enote in preklapljanje:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "ARHIV"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "uporabi datoteko ali enoto ARHIV"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "arhiv je lokalen kljub dvopičju v imenu datoteke"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "uporabi navedeni UKAZ rmt namesto rmt"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "uporabi nelokalen UKAZ namesto rsh"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "določi enoto in gostoto zapisa"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "ustvari/pregledaj/izvleci arhiva v več delih"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "menjava traku po ŠT x 1024 zapisanih bajtih"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "poženi SKRIPT po koncu traku (privzema -M)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "uporabimo/ažuriramo število dela v DATOTEKI"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Bločna razdelitev enote:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "BLOKI"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "dolžina zapisa BLOKI × 512 bajtov"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "ŠTEVILO bajtov v zapisu (večkratnik 512)"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "ne meni se za bloke ničel (EOF)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "razdeli na bloke ob branju (cevovodi 4.2BSD)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Izbira oblike arhiva:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "OBLIKA"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "ustvari arhiv v navedeni obliki"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "OBLIKA je nekaj od naštetega:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "oblika starega V7 tar"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "stara oblika GNU tar <= 1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "oblika GNU tar 1.13.x"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "oblika POSIX 1003.1-1988 (ustar)"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "oblika POSIX 1003.1-2001 (pax)"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "isto kot pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "isto kot --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "isto kot --format=posix"
 
-#: src/tar.c:585
+#: src/tar.c:605
 #, fuzzy
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "ključna-beseda[[:]=vrednost][,ključna-beseda[[:]=vrednost],...]"
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "krmilne ključne besede pax"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "VZOREC"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
@@ -1744,200 +1818,171 @@ msgstr ""
 "ustvari arhiv z imenom dela IME; pri izpisu seznama/izvlečku je lahko IME "
 "regularni izraz za ime dela"
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Nasprotujoče si izbire glede stiskanja arhiva"
 
-#: src/tar.c:595
+#: src/tar.c:615
 #, fuzzy
 msgid "use archive suffix to determine the compression program"
 msgstr "Pisanje na vhod programa za stiskanje ne gre"
 
-#: src/tar.c:597
+#: src/tar.c:617
 #, fuzzy
 msgid "do not use archive suffix to determine the compression program"
 msgstr "Pisanje na vhod programa za stiskanje ne gre"
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "filtriraj arhiv skozi bzip2"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "filtriraj arhiv skozi gzip"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "filtriraj arhiv skozi compress"
-
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "filtriraj arhiv skozi gzip"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "filtriraj arhiv skozi gzip"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "filtriraj arhiv skozi gzip"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "PROGRAM"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "filtriraj skozi PROGRAM (sprejemati mora izbiro -d)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Izbira lokalne datoteke:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr "dodaj navedeno DATOTEKO v arhiv (za imena datotek, ki se začnejo z »-«)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "IMENIK"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "pomik v navedeni IMENIK"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "preberi seznam datotek z navedene DATOTEKE"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T prebere z \\000 terminirana imena; onemogoči -C"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
-msgstr ""
+msgstr "prekliči učinek prejšnje izbire --null"
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr "odstrani narekovaje iz imen datotek, prebranih s -T (privzeto)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr "ne odstrani narekovajev iz imen datotek, prebranih s -T"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "VZOREC"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "brez datotek, ki jih opisuje VZOREC"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "brez datotek, ustrezajočim vzorcem, prebranih z DATOTEKE"
 
-#: src/tar.c:641
-#, fuzzy
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
-msgstr "brez imenikov, ki vsebujejo značko medpomnilnika"
+msgstr ""
+"brez vsebine imenikov, ki vsebujejo značko CACHEDIR.TAG, razen značke same"
 
-#: src/tar.c:644
-#, fuzzy
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
-msgstr "brez imenikov, ki vsebujejo značko medpomnilnika"
+msgstr ""
+"brez imenikov, ki vsebujejo značko CACHEDIR.TAG, in vseh njihovih podimenikov"
 
-#: src/tar.c:647
-#, fuzzy
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
-msgstr "brez imenikov, ki vsebujejo značko medpomnilnika"
+msgstr "brez imenikov, ki vsebujejo značko CACHEDIR.TAG"
 
-#: src/tar.c:649
-#, fuzzy
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
-msgstr "brez imenikov, ki vsebujejo značko medpomnilnika"
+msgstr "brez vsebine imenikov, ki vsebujejo DATOTEKO, razen DATOTEKE same"
 
-#: src/tar.c:652
-#, fuzzy
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
-msgstr "brez imenikov, ki vsebujejo značko medpomnilnika"
+msgstr "brez imenikov, ki vsebujejo DATOTEKO, in vseh njihovih podimenikov"
 
-#: src/tar.c:654
-#, fuzzy
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
-msgstr "brez imenikov, ki vsebujejo značko medpomnilnika"
+msgstr "brez imenikov, ki vsebujejo DATOTEKO"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
+msgstr "brez imenikov sistema za nadzor različic"
+
+#: src/tar.c:674
+msgid "exclude backup and lock files"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "podimenikov ne vključujemo avtomatično"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "pri arhiviranju izpusti datoteke na nelokalnih datotečnih sistemih"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "rekurzivno vključi vse podimenike"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "ne odstrani vodilnih »/« iz imen datotek"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr "sledi simbolnim povezavam; arhiviraj/iznesi ciljne datoteke"
 
-#: src/tar.c:668
-#, fuzzy
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
-msgstr "sledi simbolnim povezavam; arhiviraj/iznesi ciljne datoteke"
+msgstr "sledi trdim povezavam; arhiviraj/iznesi ciljne datoteke"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "IME"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "začenši z navedenim IMENOM v arhivu"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "shrani le datoteke, novejše od DATUM-ČAS"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "DATUM"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "primerjaj datum in uro le, kadar se podatki spremenijo"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "TIP"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr ""
 "varnostna kopija pred brisanjem, z možnostjo izbire TIPA varnostne kopije"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "NIZ"
 
-#: src/tar.c:679
-#, fuzzy
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1945,97 +1990,98 @@ msgstr ""
 "varnostna kopija pred brisanjem; prekličemo običajno PRIPONO (»~«, razen če "
 "lupinska spremenljivka SIMPLE_BACKUP_SUFFIX določa drugače)"
 
-#: src/tar.c:684
-#, fuzzy
+#: src/tar.c:702
 msgid "File name transformations:"
-msgstr "Druge izbire:"
+msgstr "Pretvorbe imen datotek:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 #, fuzzy
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr "izpusti ŠTEVILO vodilnih komponent iz imen datotek"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "IZRAZ"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 
-#: src/tar.c:698
-#, fuzzy
+#: src/tar.c:716
 msgid "ignore case"
-msgstr "izključitveni vzorci ne razlikujejo med malimi in velikimi črkami"
+msgstr "brez razlike med malimi in velikimi črkami"
 
-#: src/tar.c:700
-#, fuzzy
+#: src/tar.c:718
 msgid "patterns match file name start"
-msgstr "izključitveni vzorci opisujejo celotno ime datoteke"
+msgstr "vzorci se ujemajo z začetkom imena datoteke"
 
-#: src/tar.c:702
-#, fuzzy
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr ""
-"izključitveni vzorci opisujejo ime datoteke od znaka »/« dalje (privzeto)"
+"vzorci se ujemajo od kateregakoli znaka »/« dalje (privzeto pri izključitvi)"
 
-#: src/tar.c:704
-#, fuzzy
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
-msgstr ""
-"izključitveni vzorci razlikujejo med malimi in velikimi črkami (privzeto)"
+msgstr "pri ujemanje se razlikuje med malimi in velikimi črkami (privzeto)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
-msgstr "uporabi nadomestne znake (privzeto za izločanje)"
+msgstr "uporabi nadomestne znake (privzeto za izključitvi)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "dobesedno ujemanje nizov"
 
-#: src/tar.c:710
-#, fuzzy
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
-msgstr "izključitveni vzorci ne opisujejo »/«"
+msgstr "nadomestni znaki se ne ujemajo z »/«"
 
-#: src/tar.c:712
-#, fuzzy
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
-msgstr "izključitveni vzorci opisujejo tudi »/« (privzeto)"
+msgstr "nadomestni znaki se ujemajo z »/« (privzeto pri izključitvi)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Informativni izpisi:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "z izčrpnim izpisom obdelanih datotek"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+#, fuzzy
+msgid "warning control"
+msgstr "Nadzor nad pisanjem prek:"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr "izpiši poročilo o napredku pri vsakem N-tem zapisu (privzeto 10)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
-msgstr ""
+msgstr "DEJANJE"
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
-msgstr ""
+msgstr "na vsaki kontrolni točki izvedi DEJANJE"
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "izpiši sporočilo, če niso zapisane vse povezave"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "SIGNAL"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2043,119 +2089,124 @@ msgid ""
 "accepted"
 msgstr ""
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "z izpisom časov sprememb datotek v UTC"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "zapiši izčrpno poročilo v DATOTEKO"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "z izpisom zaporednega bloka v arhivu ob vsakem sporočilu"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "vprašaj za potrditev pri vsakem koraku"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "prikaži privzete nastavitve"
 
-#: src/tar.c:746
-#, fuzzy
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr ""
-"Pri izpisu seznama ali izvlačenju izpiši vsak imenik, ki ne ustreza iskalnim "
+"pri izpisu seznama ali izvlačenju izpiši vsak imenik, ki ne ustreza iskalnim "
 "pogojem"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
-msgstr ""
+msgstr "prikaži imena datotek ali arhivov po pretvorbi"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "SLOG"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr "nastavi slog navajanja imen; glej spodaj za veljavne SLOGE"
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr ""
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr ""
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Združljivostne izbire:"
 
-#: src/tar.c:764
-#, fuzzy
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr ""
-"pri ustvarjanju arhiva isto kot --old-archive; pri izvlačenju isto kot --no-"
+"ob ustvarjanju arhiva isto kot --old-archive; ob izvlačenju isto kot --no-"
 "same-owner"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Druge izbire:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
-msgstr ""
+msgstr "onemogoči rabo nekaterih potencialno škodljivih izbir"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "Naenkrat je dovoljena največ ena od izbir »-Acdtrux«"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Nasprotujoče si izbire glede stiskanja arhiva"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, fuzzy, c-format
 msgid "Unknown signal name: %s"
-msgstr " neznan tip datoteke %s\n"
+msgstr "Neznano ime signala: %s"
 
-#: src/tar.c:1010
-#, fuzzy
+#: src/tar.c:1017
 msgid "Date sample file not found"
-msgstr "Datoteke z datumom ni najti"
+msgstr "Datoteke z vzorcem datuma ni najti"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Nadomeščamo %s za neznan format datuma %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr ""
 
-#: src/tar.c:1120
-#, fuzzy, c-format
+#: src/tar.c:1132
+#, c-format
 msgid "%s: file list already read"
-msgstr "%s: datoteka je arhiv; brez iznosa"
+msgstr "%s: seznam datotek je že prebran"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
-msgstr ""
+msgstr "%s: prebrano ime datoteke vsebuje znak \\0"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
-msgstr ""
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "filtriraj arhiv skozi gzip"
 
-#: src/tar.c:1253
+#: src/tar.c:1290
+#, fuzzy
+msgid "Valid arguments for the --quoting-style option are:"
+msgstr "Veljavni argumenti pri izbirah --quoting-style so:"
+
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2163,111 +2214,121 @@ msgstr ""
 "\n"
 "Privzete vrednosti *tega* programa tar:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Neveljaven faktor blokiranja"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Neveljavna dolžina traku"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+#, fuzzy
+msgid "Invalid incremental level value"
+msgstr "Okvarjen inkrementalni zapis datoteke"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Več kot en pražni podatek"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr ""
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr ""
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr ""
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: Neveljavna skupina"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Podana zaščita ni veljavna"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Neveljavno število"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Neveljaven lastnik"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Neveljavna dolžina zapisa"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Dolžina zapisa mora biti večkratnik %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Neveljavno število elementov"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
-msgstr ""
+msgstr "Dovoljena je le ena izbira --to-command"
 
-#: src/tar.c:1968
-#, fuzzy, c-format
+#: src/tar.c:2100
+#, c-format
 msgid "Malformed density argument: %s"
-msgstr "Okvarjen argument gostote: »%s«"
+msgstr "Okvarjen argument gostote: %s"
 
-#: src/tar.c:1994
-#, fuzzy, c-format
+#: src/tar.c:2126
+#, c-format
 msgid "Unknown density: `%c'"
 msgstr "Neznana gostota: »%c«"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "*Ta* izvedba tar ne podpira izbir »-[0-7][lmh]«"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[DATOTEKA]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Stara izbira »%c« zahteva argument."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "--occurrence nima pomena brez seznama datotek"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "--occurrence ni mogoče uporabiti v zahtevanem načinu delovanja"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Več arhivskih datotek zahteva izbiro »-M«"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Izbire --listed-incremental ni mogoče kombinirati z --newer"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+#, fuzzy
+msgid "--level is meaningless without --listed-incremental"
+msgstr "Izbiri --preserve-order in --listed-incremential sta nezdružljivi"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
@@ -2276,48 +2337,48 @@ msgstr[1] "%s: Oznaka dela je predolga (omejitev je %lu bajt)"
 msgstr[2] "%s: Oznaka dela je predolga (omejitev je %lu bajta)"
 msgstr[3] "%s: Oznaka dela je predolga (omejitev je %lu bajti)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Arhivov v več delih ni mogoče preveriti"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Stisnjenega arhiva ni mogoče preveriti"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Stisnjeni arhivi v več delih niso mogoči"
 
-#: src/tar.c:2319
-#, fuzzy
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
-msgstr "Stisnjenega arhiva ni mogoče ažurirati"
+msgstr "Stisnjenega arhiva ni mogoče združevati"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "izbira --pax-option je mogoča le na arhivih POSIX"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
-msgstr ""
+msgstr "Dolžina dela ne more biti manjša od velikosti zapisa"
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
-msgstr ""
+msgstr "Izbiri --preserve-order in --listed-incremential sta nezdružljivi"
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Zahteva po odprtju praznega arhiva bojazljivo zavrnjena"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Izbire »-Aru« so nezdružljive z »-f -«"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "Ena od izbir »-Acdtrux« je obvezna"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2331,83 +2392,88 @@ msgstr[1] "%s: Datoteka skrčena za %s bajt"
 msgstr[2] "%s: Datoteka skrčena za %s bajta"
 msgstr[3] "%s: Datoteka skrčena za %s bajte"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, fuzzy, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "Ključna beseda %s je bodisi neznana, bodisi še ni izvedena"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Oznaka časa izven obsega"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "Vzorca %s ni mogoče uporabiti"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "Ključne besede %s ni mogoče preklicati"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 #, fuzzy
 msgid "Malformed extended header: missing length"
 msgstr "Poškodovana razširjena glava: manjka enačaj"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 #, fuzzy
 msgid "Extended header length is out of allowed range"
 msgstr "Podpis %s oblike base-64 v arhivu je izven obsega %s"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, fuzzy, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "Podpis %s oblike base-64 v arhivu je izven obsega %s"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 #, fuzzy
 msgid "Malformed extended header: missing blank after length"
 msgstr "Poškodovana razširjena glava: za dolžino manjka presledek"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Poškodovana razširjena glava: manjka enačaj"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 #, fuzzy
 msgid "Malformed extended header: missing newline"
 msgstr "Poškodovana razširjena glava: manjka enačaj"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr ""
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, fuzzy, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "Vrednost arhiva %s je izven obsega %s: %s.%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, fuzzy, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Poškodovana razširjena glava: manjka enačaj"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, fuzzy, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Poškodovana razširjena glava: manjka enačaj"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, fuzzy, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr "Poškodovana razširjena glava: manjka enačaj"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, fuzzy, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr "Poškodovana razširjena glava: manjka enačaj"
@@ -2450,250 +2516,324 @@ msgstr "Oznaka pisanja %u"
 msgid "Read checkpoint %u"
 msgstr "Oznaka branja %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 #, fuzzy
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
 msgstr "Ustvarimo podatkovne datoteke za testno zbirko GNU tar.\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 #, fuzzy
 msgid "File creation options:"
 msgstr "Druge izbire:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr ""
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 #, fuzzy
 msgid "Create file of the given SIZE"
 msgstr "ustvari arhiv v navedeni obliki."
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 #, fuzzy
 msgid "Write to file NAME, instead of standard output"
 msgstr "datoteke izvleci na standardni izhod"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 #, fuzzy
 msgid "Read file names from FILE"
 msgstr "Prebranih %s bajtov iz %s"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 #, fuzzy
 msgid "-T reads null-terminated names"
 msgstr "-T prebere z \\000 terminirana imena; onemogoči -C"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr ""
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr ""
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 #, fuzzy
 msgid "Seek to the given offset before writing data"
 msgstr "s poskusom preverjanja zapisanega arhiva"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr ""
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr ""
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr " [IZBIRA...]"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr ""
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 #, fuzzy
 msgid "Update the access and modification times of FILE"
 msgstr "%s: Časa zadnje spremembe in dostopa ni možno spremeniti"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 #, fuzzy
 msgid "Execute COMMAND"
 msgstr "UKAZ"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, fuzzy, c-format
 msgid "Invalid size: %s"
 msgstr "Neveljavna oznaka časa"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, fuzzy, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Številka inoda izven obsega"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, fuzzy, c-format
 msgid "Negative size: %s"
 msgstr "Neveljavna oznaka časa"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr ""
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr ""
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, fuzzy, c-format
 msgid "Unknown date format"
 msgstr "Neznana sistemska napaka"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr ""
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, fuzzy, c-format
 msgid "cannot open `%s'"
 msgstr "Ni mogoče odpreti %s"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 #, fuzzy
 msgid "cannot seek"
 msgstr "Ni mogoče zapreti"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr ""
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr ""
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, fuzzy, c-format
 msgid "Unknown field `%s'"
 msgstr " neznan tip datoteke %s\n"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, fuzzy, c-format
 msgid "cannot set time on `%s'"
 msgstr "Ni mogoče do statistike za datoteko %s"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "Ni mogoče odpreti %s"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr ""
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, fuzzy, c-format
 msgid "Command failed with status %d\n"
 msgstr "Naslednik umrl s signalom %d"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr ""
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr ""
 
 #  POZOR  Je to res to?
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, fuzzy, c-format
 msgid "--stat requires file names"
 msgstr "--Predelana imena datotek--\n"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr ""
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: nedovoljena izbira -- %c\n"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
-#~ msgstr "Opozorilo: izbira -I ni podprta; ste želeli -j ali -T?"
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Napake v programu sporočite na <%s>.\n"
+#~ "Napake v prevodu sporočite na <translation-team-sl@lists.sourceforge."
+#~ "net>\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "Branje %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Napake ni moč popraviti: zapuščamo"
+
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "filtriraj arhiv skozi bzip2"
+
+#~ msgid "filter the archive through gzip"
+#~ msgstr "filtriraj arhiv skozi gzip"
+
+#~ msgid "filter the archive through compress"
+#~ msgstr "filtriraj arhiv skozi compress"
 
 #, fuzzy
-#~ msgid "cancel effect of the previous --transform-links option"
-#~ msgstr "prekliči učinek izbire --delay-directory-restore"
+#~ msgid "filter the archive through lzma"
+#~ msgstr "filtriraj arhiv skozi gzip"
+
+#, fuzzy
+#~ msgid "filter the archive through lzop"
+#~ msgstr "filtriraj arhiv skozi gzip"
+
+#~ msgid "Input string too long"
+#~ msgstr "Vhodni niz je predolg"
+
+#~ msgid "Number syntax error"
+#~ msgstr "Napaka v skladnji števila"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Ni mogoče rezervirati prostora za medpomnilnik\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Ni mogoče rezervirati prostora za medpomnilnik"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Poskusite »%s --help« za izčrpnejša navodila.\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Uporaba: %s [IZBIRA]\n"
+#~ "Rokovanje s tračno enoto, ob sprejemu ukazov oddaljenega procesa.\n"
+#~ "\n"
+#~ "  --version  različica programa\n"
+#~ "  --help     ta navodila\n"
+
+#~ msgid "Seek offset error"
+#~ msgstr "Napaka pri odmiku pri seek"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Predčasen znak za konec datoteke"
 
 #~ msgid "[.]NUMBER"
 #~ msgstr "[.]N"
 
+#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgstr "Opozorilo: izbira -I ni podprta; ste želeli -j ali -T?"
+
 #~ msgid "Error exit delayed from previous errors"
 #~ msgstr "Izhod ob napaki zakasnjen zaradi prejšnjih napak"
 
@@ -2710,9 +2850,6 @@ msgstr ""
 #~ msgid "rmtd: Garbage command %c\n"
 #~ msgstr "rmtd: Neveljaven ukaz %c\n"
 
-#~ msgid "Time stamp out of range"
-#~ msgstr "Oznaka časa izven obsega"
-
 #~ msgid "Modification time (seconds) out of range"
 #~ msgstr "Čas spremembe (sekunde) izven obsega"
 
@@ -2726,9 +2863,6 @@ msgstr ""
 #~ msgid "--Mangled file names--\n"
 #~ msgstr "--Predelana imena datotek--\n"
 
-#~ msgid "Unexpected EOF in mangled names"
-#~ msgstr "Nepričakovan znak za konec datoteke med predelanimi imeni"
-
 #~ msgid "Renamed %s to %s"
 #~ msgstr "Datoteka %s preimenovana v %s"
 
@@ -3349,9 +3483,6 @@ msgstr ""
 #~ msgid "Cannot allocate memory for diff buffer of %lu bytes"
 #~ msgstr "Ni možno rezervirati pomnilnika za %lu bajtov medpomnilnika za diff"
 
-#~ msgid "Cannot seek to %s in file %s"
-#~ msgstr "Pozicija %s v datoteki %s ni dostopna"
-
 #~ msgid "Wrote %s of %s bytes to file %s"
 #~ msgstr "Zapisano %s od %s bajtov na datoteko %s"
 
index 22c997c4cf83878593ce3dd2c64ff7dcc5aee2b9..4da97eac4530ba6faeb714606f0caf7c3dc50e10 100644 (file)
Binary files a/po/sv.gmo and b/po/sv.gmo differ
index 82299524ca11dd46e6d6dcfee57d58a530c412bb..d41e5863600f3adc151696a695040ac0209530ad 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,15 +1,15 @@
 # Swedish messages for tar
-# Copyright © 1996, 2001, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# Copyright © 1996, 2001, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 # This file is distributed under the same license as the tar package.
-# Jan Djärv <jan.h.d@swipnet.se>, 2000, 2001, 2004, 2006, 2007, 2008
-# Revision: 1.91
+# Jan Djärv <jan.h.d@swipnet.se>, 2000, 2001, 2004, 2006, 2007, 2008, 2009, 2010
+# Revision: 1.98
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: tar 1.21\n"
+"Project-Id-Version: tar 1.22.91\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
-"PO-Revision-Date: 2008-12-29 11:37+0100\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
+"PO-Revision-Date: 2010-02-18 12:48+0100\n"
 "Last-Translator: Jan Djärv <jan.h.d@swipnet.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
 "MIME-Version: 1.0\n"
@@ -17,47 +17,47 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "ogiltigt argument %s för %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "tvetydigt argument %s för %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Giltiga argument är:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: %s värde är mindre eller lika med %s"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: Parameter från ARGP_HELP_FMT kräver ett värde."
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: Parameter från ARGP_HELP_FMT måste vara positiv."
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: Okänd ARGP_HELP_FMT-parameter"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Skräp i ARGP_HELP_FMT: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -65,24 +65,24 @@ msgstr ""
 "Obligatoriska respektive valfria argument för långa flaggor är obligatoriska "
 "repektive valfria även för motsvarande korta."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Användning:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr "  eller: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [FLAGGA...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Försök med \"%s --help\" eller \"%s --usage\" för mer information.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr ""
@@ -90,213 +90,121 @@ msgstr ""
 "Rapportera fel eller synpunkter på översättningen till <tp-sv@listor.tp-sv."
 "se>.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Okänt systemfel"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "visa denna hjälptext"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "ge ett kort hjälpmeddelande"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "NAMN"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "ange programnamnet"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "SEK"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "vänta i SEK sekunder (standardvärde 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "visa programversion"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(PROGRAMFEL) Ingen version känd!?"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: För många argument\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr "(PROGRAMFEL) Flagga borde ha känts igen!?"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr "skrivfel"
 
-#: lib/getopt.c:526 lib/getopt.c:542
+#: gnu/getopt.c:531 gnu/getopt.c:547
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: flaggan \"%s\" är tvetydig\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
+#: gnu/getopt.c:580 gnu/getopt.c:584
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
-msgstr "%s: flagga \"--%s\" tar inget argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: flaggan \"--%s\" tar inget argument\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
+#: gnu/getopt.c:593 gnu/getopt.c:598
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
-msgstr "%s: flagga \"%c%s\" tar inget argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: flaggan \"%c%s\" tar inget argument\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
-msgstr "%s: flagga \"%s\" kräver ett argument\n"
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: flaggan \"%s\" kräver ett argument\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
+#: gnu/getopt.c:698 gnu/getopt.c:701
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: okänd flagga \"--%s\"\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
+#: gnu/getopt.c:709 gnu/getopt.c:712
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: okänd flagga \"%c%s\"\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
+#: gnu/getopt.c:761 gnu/getopt.c:764
 #, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: otillåten flagga -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: ogiltig flagga -- \"%c\"\n"
 
-#: lib/getopt.c:768 lib/getopt.c:771
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
 #, c-format
-msgid "%s: invalid option -- %c\n"
-msgstr "%s: ogiltig flagga -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: flaggan kräver ett argument -- \"%c\"\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
+#: gnu/getopt.c:884 gnu/getopt.c:900
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: flaggan kräver ett argument -- %c\n"
-
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: flaggan \"-W %s\" är tvetydig\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
+#: gnu/getopt.c:924 gnu/getopt.c:942
 #, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
-msgstr "%s: flagga \"-W %s\" tar inget argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: flaggan \"-W %s\" tar inget argument\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "minnet slut"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, c-format
 msgid "unable to record current working directory"
 msgstr "kan inte lagra nuvarande arbetskatalog"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, c-format
 msgid "failed to return to initial working directory"
 msgstr "kan inte gå tillbaka till initial arbetskatalog"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Funktion \"%s\" misslyckades"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Varning: Funktion \"%s\" misslyckades"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Kan inte ändra rättigheter till %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Kan inte byta ägare (chown) till uid %lu, gid %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Kan inte skapa hård länk till %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Läsfel vid byte %s, när %lu byte lästes"
-msgstr[1] "%s: Läsfel vid byte %s, när %lu bytes lästes"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Varning: Läsfel vid byte %s, när %lu byte lästes"
-msgstr[1] "%s: Varning: Läsfel vid byte %s, när %lu bytes lästes"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Kunde inte flytta (seek) till %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Varning: Kunde inte flytta (seek) till %s"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Kan inte skapa symbolisk länk till %s"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Skrev bara %lu av %lu byte"
-msgstr[1] "%s: Skrev bara %lu av %lu byte"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Tar bort inledande \"%s\" från namnen i arkivet"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Tar bort inledande \"%s\" från mål för hårda länkar"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Ersätter tomma namn i arkivet med \".\""
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Ersätter tomt mål för hård länk med \".\""
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -310,17 +218,17 @@ msgstr "Ersätter tomt mål för hård länk med \".\""
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "\""
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "\""
 
@@ -330,7 +238,7 @@ msgstr "\""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[yYjJ]"
 
@@ -340,39 +248,28 @@ msgstr "^[yYjJ]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[nN]"
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Tjänsten är inte tillgänglig"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "standard in"
-
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "standard ut"
+msgid "Packaged by %s (%s)\n"
+msgstr "Paketerad av %s (%s)\n"
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Kan inte exekvera fjärrskal"
+msgid "Packaged by %s\n"
+msgstr "Paketerad av %s\n"
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr "©"
 
-#: lib/version-etc.c:67
-#, fuzzy
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -383,24 +280,24 @@ msgid ""
 msgstr ""
 "\n"
 "Licens GPLv3+: GNU GPL version 3 eller senare <http://gnu.org/licenses/gpl."
-"html>\n"
+"html>.\n"
 "Detta program är fri programvara.  Du kan modifiera och distribuera den.\n"
 "Det finns inte NÅGON SOM HELST GARANTI, till den grad som lagen tillåter.\n"
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr "Skrivet av %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Skrivet av %s och %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Skrivet av %s, %s och %s.\n"
@@ -408,7 +305,7 @@ msgstr "Skrivet av %s, %s och %s.\n"
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -420,7 +317,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -432,7 +329,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -444,7 +341,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -456,7 +353,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -470,7 +367,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -484,7 +381,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -499,182 +396,327 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 "\n"
-"Rapportera fel till <%s>.\n"
-"Rapportera fel eller synpunkter på översättningen till <sv@li.org>.\n"
+"Rapportera fel till %s.\n"
+"Rapportera fel eller synpunkter på översättningen till <tp-sv@listor.tp-sv."
+"se>.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:249
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "Report %s bugs to: %s\n"
 msgstr ""
+"Rapportera fel på %s till %s.\n"
+"Rapportera fel eller synpunkter på översättningen till <tp-sv@listor.tp-sv."
+"se>.\n"
+
+#: gnu/version-etc.c:253
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s hemsida: <%s>\n"
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+msgstr "%s hemsida: <http://www.gnu.org/software/%s/>.\n"
+
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
+"Allmän användarhjälp för GNU-mjukvara: <http://www.gnu.org/gethelp/>.\n"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Funktion \"%s\" misslyckades"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Varning: Funktion \"%s\" misslyckades"
+
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Kan inte ändra rättigheter till %s"
+
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Kan inte byta ägare (chown) till uid %lu, gid %lu"
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "Indatasträng är för lång"
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Kan inte skapa hård länk till %s"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "Syntaxfel för tal"
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Läsfel vid byte %s, när %lu byte lästes"
+msgstr[1] "%s: Läsfel vid byte %s, när %lu bytes lästes"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Kan inte allokera buffert\n"
+#: lib/paxerror.c:192
+#, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Varning: Läsfel vid byte %s, när %lu byte lästes"
+msgstr[1] "%s: Varning: Läsfel vid byte %s, när %lu bytes lästes"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Kan inte allokera buffert"
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Kunde inte flytta (seek) till %s"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:275
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Försök med \"%s --help\" för mer information.\n"
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Varning: Kunde inte flytta (seek) till %s"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:284
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Kan inte skapa symbolisk länk till %s"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Skrev bara %lu av %lu byte"
+msgstr[1] "%s: Skrev bara %lu av %lu byte"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Tar bort inledande \"%s\" från namnen i arkivet"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Tar bort inledande \"%s\" från mål för hårda länkar"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Ersätter tomma namn i arkivet med \".\""
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Ersätter tomt mål för hård länk med \".\""
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Tjänsten är inte tillgänglig"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "standard in"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "standard ut"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Användning: %s [FLAGGA]\n"
-"Manipulera en bandstation genom att ta emot kommandon från en annan "
-"process.\n"
-"\n"
-"  --version  Visa versionsinformation.\n"
-"  --help     Visa denna hjälptext.\n"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Kan inte exekvera fjärrskal"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Positioneringsriktning har ogiltigt värde"
+
+#: rmt/rmt.c:419
+msgid "Invalid seek direction"
+msgstr "Ogiltig sökriktning"
+
+#: rmt/rmt.c:427
+msgid "Invalid seek offset"
 msgstr "Ogiltigt positioneringsvärde"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Positioneringsvärde är utanför giltigt intervall"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Positioneringsriktning har ogiltigt värde"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+msgid "Invalid byte count"
+msgstr "Ogiltigt byte-antal"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
-msgstr "rmtd: För tidigt filslut\n"
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+msgid "Byte count out of range"
+msgstr "Byte-antal är utanför giltigt intervall"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
+#: rmt/rmt.c:539
+msgid "Premature eof"
 msgstr "För tidigt filslut"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:582
+msgid "Invalid operation code"
+msgstr "Felaktig operationskod"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr "Operationsläge stöds inte"
+
+#: rmt/rmt.c:645
+msgid "Unexpected arguments"
+msgstr "Oväntade argument"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr "Styr en bandstation, acceptera kommandon från en fjärrptocess"
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "NUMMER"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr "sätt felsökningsnivå"
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "FIL"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr "sätt felsökningsfilnamn"
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, c-format
+msgid "cannot open %s"
+msgstr "kan inte öppna \"%s\""
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "för många argument"
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Okänt kommando"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Det här ser inte ut som ett tar-arkiv"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Summa skrivna byte"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "Summa lästa byte"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Summa borttagna byte: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(rör)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Ogiltigt värde på record_size"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Arkivnamn saknas"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Kan inte verifiera standard in/ut-arkiv"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "Arkivet är komprimerat. Använd flaggan %s"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Komprimerade arkiv kan inte uppdateras"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Vid bandets början, avslutar nu"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "För många fel, avslutar"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Poststorlek = %lu block"
 msgstr[1] "Poststorlek = %lu block"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Block ej vid blockgräns (%lu byte) i arkivet"
 msgstr[1] "Block ej vid blockgräns (%lu byte) i arkivet"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr "Kunde inte söka bakåt i arkivfilen, den kan vara oläsbar utan -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek stannade inte på en postgräns"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: innehåller ogiltigt volymnummer"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Volymnummer flödade över"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Gör iordning volym nummer %d för %s och tryck vagnretur:"
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "Filslut vid förväntat användarsvar"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "VARNING: Arkivet är ofullständigt"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -685,66 +727,66 @@ msgstr ""
 " q              Avsluta programmet\n"
 " y eller nyrad  Fortsätt\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !              Starta ett underskal\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?              Skriv denna lista\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Ingen ny volym; avslutar.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "Filnamn inte angivet, försök igen.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "Ogiltig indata. Skriv ? för hjälp.\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "kommandot \"%s\" misslyckades"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr ""
 "%s fortsätter möjligen i denna volym: huvudet innehåller ett trunkerat namn"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s fortsätter inte i denna volym"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s har fel storlek (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Denna volym kommer inte i rätt ordning (%s - %s != %s)"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Arkivet är inte märkt för att stämma med %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Volym %s överensstämmer inte med %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
@@ -752,60 +794,60 @@ msgstr ""
 "%s: filnamnet är för långt för att lagras i huvudet för ett GNU "
 "multivolymsarkiv, trunkerat"
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
 msgstr "skrivning stannade inte på en blockgräns"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Kunde bara läsa %lu av %lu byte"
 msgstr[1] "Kunde bara läsa %lu av %lu byte"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Innehållet är olika"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Oväntat filslut i arkivet"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Filtyper är olika"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Rättigheterna är olika"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Uid är olika"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Gid är olika"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Modifieringstiderna är olika"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Storlekarna är olika"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Inte länkad till %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Symboliska länkar är olika"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Enhetsnummer är olika"
 
@@ -827,34 +869,34 @@ msgstr "Arkivet innehåller filnamn med inledande prefix borttaget."
 msgid "Verification may fail to locate original files."
 msgstr "Verifiering kan misslyckas med att hitta originalfiler."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "VERIFIKATIONSFEL: %d felaktigt arkivhuvud upptäckt"
 msgstr[1] "VERIFIKATIONSFEL: %d felaktiga arkivhuvuden upptäckta"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "Ett ensamt nollblock vid %s"
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: innehåller en cachekatalog-tagg %s; %s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "%s är utanför intervallet för %s: %s..%s, byter till %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "%s är utanför intervallet för %s: %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Genererar negativa oktala värden i arkivhuvudet"
 
@@ -873,290 +915,276 @@ msgstr "%s: filnamnet är för långt (kan ej delas); inte arkiverad"
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: länknamn är för långt; inte arkiverad"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: Fil krympte med %s byte, fyller ut med nolltecken"
 msgstr[1] "%s: Fil krympte med %s byte, fyller ut med nolltecken"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: filen finns på ett annat filsystem; inte arkiverad"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr "innehållet inte arkiverat"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Okänd filtyp; filen ignorerad"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, c-format
-msgid "Missing links to %s.\n"
-msgstr "Det fattas länkar till \"%s\".\n"
+msgid "Missing links to %s."
+msgstr "Det fattas länkar till \"%s\"."
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: filen är oförändrad; inte arkiverad"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: filen är själva arkivet; inte arkiverad"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Fil borttagen innan vi läste den"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr "katalog inte arkiverad"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: Fil ändrades under tiden vi läste den"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: socketfil ignorerad"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: door-fil ignorerad"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Hoppar till nästa filhuvud"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Tar bort icke-huvuddata från arkivet"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: orimligt gammal tidsstämpel %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: tidsvärde %s är %s sekunder i framtiden"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Oväntad inkonsistens när katalog skapades"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Katalog bytte namn innan dess status kunde extraheras"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Extraherar sammanhängande filer som vanliga filer"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Försöker extrahera symboliska länkar som hårda länkar"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Läser %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Kan inte extrahera -- filen fortsätter från en annan volym"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "Oväntat huvud för långt filnamn"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Okänd filtyp \"%c\", extraherad som en normal fil"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "Nuvarade \"%s\" är nyare eller lika gammal"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s kunde inte säkerhetskopieras"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "Kan inte byta namn på %s till %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Felet kan inte åtgärdas, avslutar nu"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Katalogen har bytt namn från %s"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Katalogen har bytt namn"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Katalogen är ny"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Ogiltigt värde på tidsvärde"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Ogiltig modifikationstid (sekunder)"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "Ogiltig modifikationstid (nanosekunder)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Ogiltigt enhetsnummer"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Ogiltigt inodnummer"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "Fält för långt när ögonblicksfil lästes"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "Läsfel i ögonblicksfil"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "Oväntat filslut i ögonblicksfil"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "Oväntat fältvärde i ögonblicksfil"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "Postavslutare fattas"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "Felaktigt filformat för inkrementell säkerhetskopiering"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr ""
 "Formatversion för inkrementell säkerhetskopiering stöds inte: %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr "Felaktig dumpkatalog: förväntade \"%c\" men hittade %#3o"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "Felaktig dumpkatalog: \"X\" duplicerad"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "Felaktig dumpkatalog: tomt namn i \"R\""
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "Felaktig dumpkatalog: \"T\" föregås inte av \"R\""
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "Felaktig dumpkatalog: tomt namn i \"T\""
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr "Felaktig dumpkatalog: förväntade \"%c\" men hittade dataslut"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr "Felaktig dumpkatalog: \"X\" används inte"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Kan inte skapa temporärkatalog med mall %s"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: Rensar inte katalog: kunde inte ta status"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: katalogen finns på ett annat filsystem; inte rensad"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Tar bort %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Kan inte ta bort"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Utelämnad"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "block %s: ** Block av nolltecken **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "block %s: ** Filslut **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "block %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Blanka i huvud där numeriskt värde av typ %s förväntades"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1164,142 +1192,159 @@ msgstr ""
 "komplement"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Arkivets oktala värde %.*s är utanför intervallet för %s"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Arkivet innehåller föråldrade \"base-64\"-huvuden"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "Arkivets \"base-64\"-sträng \"%s\" är utanför intervallet för %s"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Arkivets \"base-256\"-värde är utanför intervallet för %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Arkivet innehåller %.*s där ett numeriskt värde av typ %s förväntades"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Arkivets värde %s är utanför intervallet för %s: %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " länk till %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " okänd filtyp \"%s\"\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Lång länk--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Långt namn--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Volymhuvud--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Fortsätter vid byte %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Skapar katalog:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Byter namn på %s till %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Kan inte byta namn till %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Byter namn på %s tillbaka till %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Kan inte spara arbetskatalog"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Kan inte byta arbetskatalog"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Fil borttagen innan vi läste den"
+
+#: src/misc.c:774
+#, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Katalog borttagen innan vi läste den"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "barnprocess"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "interprocesskanal"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr "Mönstermatchningstecken används i filnamn."
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 "Använd --wildcards för att slå på mönstermatchning, eller --no-wildcards för"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "att undertrycka denna varning."
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Fanns inte i arkivet"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Nödvändig förekomst hittades inte i arkivet"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr "Att används -C i en fillista är inte tillåtet med --listed-incremental"
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr "Bara en -C-flagga är tillåtet med --listed-incremental"
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Flaggorna \"-%s\" och \"-%s\" vill båda läsa från standard in"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Ogiltigt arkivformat"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "GNU-tillägg önskade i ett inkompatibelt arkivformat"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
@@ -1307,7 +1352,7 @@ msgstr ""
 "Okänd citeringsstil \"%s\". Gör \"%s --quoting-style=help för att få en "
 "lista."
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1325,7 +1370,7 @@ msgstr ""
 "  tar -tvf arkiv.tar         # Visa filer i arkiv.tar, all information.\n"
 "  tar -xf arkiv.tar          # Extrahera alla filer i arkiv.tar.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1347,87 +1392,80 @@ msgstr ""
 "annars\n"
 "  never, simple   gör alltid enkla säkerhetskopior\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Operationsläge:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "visa innehållet i arkivet"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "extrahera filer från arkivet"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "skapa ett nytt arkiv"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "visa skillnader mellan filsystemet och arkivet"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "lägg till filer på slutet av arkivet"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "lägg till filer som är nyare än de i arkivet"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "lägg till innehållet i en arkivfil till arkivet"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "ta bort från arkivet (inte för arkiv på magnetband!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr "verifiera arkivets volymnamn och avsluta."
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Modifiera operationslägen:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "hantera filer med hål mer effektivt"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr "ÖVRE[.UNDRE]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 "ange vilken formatversion som ska hantera filer med hål (implicerar --sparse)"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "hantera gamla GNU-formatet för inkrementell säkerhetskopiering"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "FIL"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "hantera nya GNU-formatet för inkrementell säkerhetskopiering"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr "dumpa nivå för \"listed-incremental\" arkiv"
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "avsluta inte med felslutstatus p.g.a. oläsbara filer"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "NUMMER"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1439,118 +1477,121 @@ msgstr ""
 "list och när en lista av filer anges antingen på kommandoraden eller med "
 "flaggan -T. Standardvärde för NUMMER är 1."
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "arkivet är sökbart"
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr "arkivet är inte sökbart"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr "kontrollera inte enhetsnummer när inkrementella arkiv skapas"
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 "kontrollera enhetsnummer när inkrementella arkiv skapas (standardvärde)"
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "Kontrollera överskrivning:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "försök verifiera arkivet efter det skapats"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "ta bort filer efter de sparats i arkivet"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "ersätt inte befintliga filer vid extrahering"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr "ersätt inte befintliga filer som är nyare än de som finns i arkivet"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "skriv över befintliga filer vid extrahering"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "ta bort befintliga filer innan de nya extraheras"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "töm kataloghierarkier före extrahering av katalog"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "bevara befintliga katalogers metadata"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 "skriv över metadata för befintliga kataloger vid extrahering (standardvärde)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Välj utdataström:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "extrahera filer till standard ut"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "KOMMANDO"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "extrahera filer till standard in för ett annat program"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "ignorera barnprocessers slutstatus"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr "behandla slutstats från barnprocesser skiljt ifrån noll som fel"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Hantering av filattribut:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "sätt NAMN som ägare för adderade filer"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "sätt NAMN som grupp för adderade filer"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "DATUM-ELLER-FIL"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "sätt modifieringstid på adderade filer från DATUM-ELLER-FIL"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "RÄTTIGHET"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "sätt (symbolisk) RÄTTIGHET för adderade filer"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "METOD"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1560,28 +1601,33 @@ msgstr ""
 "tiderna efter läsning (METOD=\"replace\", standardvärde) eller genom att "
 "inte sätta tiderna alls (METOD=\"system\")"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "extrahera inte filers modifieringstid"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
-msgstr "försök extrahera filer med samma ägare som i arkivet"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
+msgstr ""
+"försök extrahera filer med samma ägare som i arkivet (standardvärde för "
+"superanvändaren)"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
-msgstr "extrahera filer med dig själv som ägare"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
+msgstr ""
+"extrahera filer med dig själv som ägare (standardvärde för vanliga användare)"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "använd alltid tal för användar- och gruppnamn"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 "extrahera information om filrättigheter (standardvärde för superanvändare)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
@@ -1589,15 +1635,15 @@ msgstr ""
 "applicera användarens umask när rättigheter extraheras från arkivet "
 "(standardvärde för vanliga användare)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "sortera namn som ska extraheras så de passar ihop med arkivet"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "samma som både -p och -s"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
@@ -1605,139 +1651,139 @@ msgstr ""
 "fördröj sättandet av modifikationstider och rättigheter på extraherade "
 "kataloger till slutet på arkivextraheringen."
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "ta bort effekten av flaggan --delay-directory-restore"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "Enhetsval och enhetsbyte:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "ARKIV"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "använd arkivfil eller enhet ARKIV"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "arkivfilen är lokal även om namnet har kolon"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "använd KOMMANDO istället för rmt"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "använd KOMMANDO istället för rsh"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "ange enhet och densitet"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "skapa/visa/extrahera ett flervolymsarkiv"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "byt band efter det att NUMMER x 1024 byte skrivits"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "kör kommandofil vid slutet av varje band (flaggan -M sätts också)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "använd/uppdatera volymnummer i FIL"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Blockhantering:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "BLOCK"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "BLOCK x 512 byte per post"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "NUMMER byte per post, multipel av 512"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "ignorera block med enbart nolltecken (betyder filslut)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "omblocka vid läsning (för 4.2BSD-rör)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Val av arkivformat:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "FORMAT"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "skapa ett arkiv med givet format"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "FORMAT är ett av följande:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "gammalt V7 format"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "GNU-format enligt tar <= 1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "GNU-format från tar 1.13.x"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "POSIX 1003.1-1988 (ustar) format"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "POSIX 1003.1-2001 (pax) format"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "samma som pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "samma som --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "samma som --format=posix"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "nyckelord[[:]=värde][,nyckelord[[:]=värde], ...]"
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "ange nyckelord för pax"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "NAMN"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
@@ -1745,102 +1791,76 @@ msgstr ""
 "skapa ett arkiv med volymnamnet NAMN. Vid visning/extrahering är NAMN ett "
 "skalmönster (\"globbing\")"
 
-#: src/tar.c:593
+#: src/tar.c:613
 msgid "Compression options:"
 msgstr "Komprimeringsflaggor:"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr "använd arkivsuffix för att bestämma komprimeringsprogram"
 
-#: src/tar.c:597
-#, fuzzy
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr "använd inte arkivsuffix för att bestämma komprimeringsprogram"
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "filtrera arkivet genom bzip2"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "filtrera arkivet genom gzip"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "filtrera arkivet genom compress"
-
-#: src/tar.c:609
-msgid "filter the archive through lzma"
-msgstr "filtrera arkivet genom lzma"
-
-#: src/tar.c:611
-msgid "filter the archive through lzop"
-msgstr "filtrera arkivet genom lzop"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "filtrera arkivet genom gzip"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "PROG"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "filtrera genom PROG (måste förstå -d)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Filval:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 "lägg till angiven FIL till arkivet (användbart om FIL börjar med \"-\")"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "KATALOG"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "byt katalog till KATALOG"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "hämta namn att extrahera från FIL"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T läser namn åtskilda med nolltecken, -C obrukbar"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr "ta bort effekten av föregående --null-flagga"
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr "avcitera filnamn som lästs med -T (standardvärde)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr "avcitera inte filnamn som lästs med -T"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "MÖNSTER"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "utelämna filer som matchar MÖNSTER"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "utelämna filer som matchar mönster i FIL"
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
@@ -1848,87 +1868,91 @@ msgstr ""
 "utelämna innehållet i kataloger som innehåller CACHEDIR.TAG, förutom "
 "CACHEDIR.TAG själv"
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "utelämna allt i kataloger som innehåller CACHEDIR.TAG"
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "utelämna kataloger som innehåller CACHEDIR.TAG"
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr "utelämna innehållet i kataloger som innehåller FIL, förutom FIL själv"
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr "utelämna allting i kataloger som innehåller FIL"
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr "utelämna kataloger som innehåller FIL"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr "uteslut kataloger från versionshanteringssystem"
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr "exkludera säkerhetskopior och låsfiler"
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "gå inte automatiskt ned i kataloger"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "byt inte filsystem när arkivet skapas"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "gå rekursivt ned i kataloger (standardvärde)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "tag inte bort inledande \"/\" från namn"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr "följ symboliska länkar, arkivera filerna de pekar på"
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr "följ hårda länkar, arkivera filerna de pekar på"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "NAMN"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "börja med fil NAMN i arkivet"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "arkivera bara filer nyare än DATUM-ELLER-FIL"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "DATUM"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "jämför datum och tid endast för dataändringar"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "KONTROLL"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "gör säkerhetskopior före borttagning, välj typ av versionshantering"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "STRÄNG"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1937,91 +1961,99 @@ msgstr ""
 "säkerhetskopieändelsen (\"~\" om inte ändrad med miljövariabeln "
 "SIMPLE_BACKUP_SUFFIX)"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr "Filnamnstransformationer:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr ""
 "ta bort NUMMER stycken inledande komponenter från filnamn före extrahering"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "UTTRYCK"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr "använd seds ersättnings-UTTRYCK för att transformera filnamn"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 "Flaggor för filnamnsmatchning (påverkar både uteslutnings- och "
 "inkluderingsmönster):"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr "matcha gemener och versaler lika"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr "mönster måste matcha i början på filnamn"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr "mönster matchas efter \"/\" i filnamn (standardvärde vid uteslutning)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr "matcha gemener och versaler olika (standardvärde)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr "använd jokertecken (standardvärde för uteslutning)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "ordagrann strängjämförelse"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr "jokertecken matchar inte \"/\""
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr "jokertecken matchar \"/\" (standardvärde för uteslutning)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Informativ utskrift:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "visa namn på alla filer som behandlas"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr "NYCKELORD"
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr "varningskontroll"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 "visa förloppsmeddelande efter varje grupp om NUMMER poster (standardvärde 10)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr "ÅTGÄRD"
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr "utför ÅTGÄRD vid vare kontrollpunkt"
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "visa ett meddelande om inte alla länkar arkiverats"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "SIGNAL"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2032,27 +2064,27 @@ msgstr ""
 "totalt antal byte när SIGNAL levereras. Tillåta signaler är: SIGHUP, "
 "SIGQUIT, SIGINT, SIGUSR1 coh SIGUSR2. Namn utan SIG-prefix accepteras också."
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "visa filers modifieringstid i UTC"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "skicka informativa meddelanden till FIL"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "visa blocknummer inom arkivet för varje meddelande"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "fråga efter bekräftelse för varje steg"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "visa standardvärden för \"tar\""
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
@@ -2060,31 +2092,31 @@ msgstr ""
 "vid visning eller extrahering, visa varje katalog som inte matchar "
 "sökkriterium"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr "visa fil- eller arkivnamn efter transformering"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "STIL"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr "sätt citatstil för namn. Se nedan för giltiga vären på STIL."
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "citera även tecken i STRÄNG"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "citera inte tecken i STRÄNG"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Kompatibilitetsflaggor:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
@@ -2092,56 +2124,62 @@ msgstr ""
 "vid skapande, samma som --old-archive.  Vid extrahering, samma som --no-same-"
 "owner"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Andra flaggor:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "begränsa användningen av eventuellt farliga flaggor"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
-msgstr "Du kan endast ange en av flaggorna \"-Acdtrux\""
+#: src/tar.c:927
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
+msgstr "Du kan endast ange en av flaggorna \"-Acdtrux eller \"--test-label\""
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Motstridiga komprimeringsflaggor"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "Okänt signalnamn: %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "Tidsfil hittades inte"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Använder %s istället för okänt datumformat %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "Flagga %s: Tolkar tidsangivelse \"%s\" som %s"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s: fillistan redan läst"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s: filnamnet som lästes innehåller nolltecken"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, c-format
+msgid "filter the archive through %s"
+msgstr "filtrera arkivet genom %s"
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr "Giltiga argument till flaggan --quoting-style är:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2149,48 +2187,51 @@ msgstr ""
 "\n"
 "*Denna* tar har standardvärdena:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Ogiltig blockfaktor"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Ogiltig bandlängd"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr "Felaktigt värde fär inkrementell nivå"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Mer än en datumgräns"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr "Ogiltig version för filer med hål"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr "--atime-preserve='system' stöds inte på denna plattform"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr "--checkpoint-värdet är inte ett heltal"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
-msgstr "%s: Ogiltig grupp"
+#: src/tar.c:1830
+msgid "Invalid group"
+msgstr "Ogiltig grupp"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Ogiltiga rättigheter givna för flagga"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Ogiltigt nummer"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Ogiltig ägare"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
@@ -2198,111 +2239,115 @@ msgstr ""
 "Flaggan --preserve är föråldrad, använd --preserve-permissions --preserve-"
 "order istället"
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Ogiltig poststorlek"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Poststorlek måste vara en multipel av %d"
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Ogiltig antal element"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr "Endast en --to-command flagga tillåten"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "Ogiltig densitetsangivelse: %s"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "Okänd densitet: \"%c\""
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "Flaggorna \"-[0-7][lmh]\" stöds inte av *detta* tar-program"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[FIL]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Gammal flagga \"%c\" kräver ett argument"
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "--occurrence är meningslöst utan en fillista"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "--occurrence kan inte användas i det begärda operationsläget."
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Multipla arkivfiler kräver \"-M\" flaggan"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Kan inte kombinera --listed-incremental med --newer"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr "-level är meningslös utan --listed-incremental"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: Volymnamn är för långt (maxlängd är %lu byte)"
 msgstr[1] "%s: Volymnamn är för långt (maxlängd är %lu byte)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Flervolymsarkiv kan inte verifieras"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Komprimerade arkiv kan inte verifieras"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Kan inte använda komprimerade flervolymsarkiv"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "Komprimerade arkiv kan inte slås samman"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "--pax-option kan bara användas på POSIX-arkiv"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr "Volymlängden kan inte vara mindre än poststorleken"
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr "--preserve-order är inte kompatibel med --listed-incremental"
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Vägrar fegt att skapa ett tomt arkiv"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Flaggorna \"-Aru\" är inkompatibla med \"-f -\""
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
-msgstr "Du måste ange en av flaggorna \"-Acdtrux\""
+#: src/tar.c:2592
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
+msgstr "Du måste ange en av flaggorna \"-Acdtrux\" eller --test-label"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr "Avslutar med felstatus på grund av tidigare fel"
@@ -2314,79 +2359,83 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: Filen krympte med %s byte"
 msgstr[1] "%s: Filen krympte med %s byte"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "Nyckelordet %s är okänt eller inte ännu implementerat"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+msgid "Time stamp is out of allowed range"
+msgstr "Tidsstämpel är utanför giltigt intervall"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "Mönster %s kan inte användas"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "Nyckelord %s kan inte ersättas"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "Felaktigt utökat huvud: längd saknas"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr "Längd på utökat huvud är utanför giltigt intervall"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "Längd %.*s på utökat huvud är utanför giltigt intervall"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr "Felaktigt utökat huvud: blanktecken efter längdangivelse saknas"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Felaktigt utökat huvud: likamedtecken saknas"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr "Felaktigt utökat huvud: nyrad saknas"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr "Ignorerar nykelord \"%s\" i utökat huvud"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr "Genererat nyckel/värde-par är för långt (nyckel=%s, längd=%s)"
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "Utökat huvud %s=%s är utanför intervallet %s..%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Felaktigt utökat huvud: ogiltig %s=%s"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Felaktigt utökat huvud: för många %s=%s"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr "Felaktigt utökat huvud: ogiltigt %s: oväntad avskiljare %c"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr "Felaktigt utökat huvud: ogiltigt %s: udda antal värden"
@@ -2427,7 +2476,7 @@ msgstr "Kontrollpunkt för skrivning %u"
 msgid "Read checkpoint %u"
 msgstr "Kontrollpunkt för läsning %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
@@ -2435,85 +2484,89 @@ msgstr ""
 "genfile bearbetar datafiler i testsviten för GNU paxutils.\n"
 "FLAGGOR är:\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr "Flaggor för filskapande:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "STORLEK"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "Skapa ett arkiv med given STORLEK"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "Skriv till NAMN istället för till standard ut"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "Läs filnamn från FIL"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr "-T läser namn åtskilda med nolltecken"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr "Fyll filen med givet MÖNSTER. MÖNSTER är \"default\" eller \"zeros\""
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "Storlek för ett block för filer med hål"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr "Generera fil med hål. Resten av kommandoraden ger filmappningen."
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr "POSITION"
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr "Flytta till given position innan data skrivs"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr "Flaggor för filstatistik:"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 "Skriv innehållet i \"struct stat\" för varje given fil. Standardvärde på "
 "FORMAT är:"
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr "Flaggor för synkron exekvering:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+msgid "OPTION"
+msgstr "FLAGGA"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
-"Kör givet KOMMANDO. Användbart med --checkpoint och en av --cut, --append, --"
-"touch"
+"Kör ARGUMENT. Användbart med --checkpoint och en av --cut, --append, --"
+"touch, --unlink"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr "Utför angiven åtgärd (se nedan) när kontrollpunkt NUMMER nås"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr "Sätt datum för nästa --touch"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr "Visa exekverade kontrollpunkter och slutstatus på KOMMANDO"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
@@ -2521,7 +2574,7 @@ msgstr ""
 "Synkront exekverade åtgärder. Dessa exekveras när kontrollpunktnumret givet "
 "av flaggan --checkpoint nås."
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
@@ -2529,138 +2582,145 @@ msgstr ""
 "Trunkera FIL till storleken given av föregående flaggan --length (eller 0 om "
 "den inte är given)"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 "Lägg till STORLEK byte till FIL.  STORLEK är given av föregående flagga --"
 "length."
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "Uppdatera access- och modifikationstider för FIL"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "Exekvera KOMMANDO"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr "Ta bort (unlink) FIL"
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "Ogiltigt storlek: %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Nummer utanför giltigt intervall: %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr "Negativ storlek: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "status (stat) kunde ej tas på %s"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr "begärd fillängd %lu, verklig %lu"
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr "skapad fil har inte hål"
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "Fel vid parsning av tal nära \"%s\""
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "Okänt datumformat"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[ARGUMENT...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "kan inte öppna \"%s\""
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 msgid "cannot seek"
 msgstr "kan inte flytta (seek)"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "filnamnet innehåller nolltecken"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr "kan inte skapa filer med hål till standard ut, använd flaggan --file"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "felaktig mask (nära \"%s\")"
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr "Okänt fält \"%s\""
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "kan inte sätta tid på \"%s\""
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, c-format
+msgid "cannot unlink `%s'"
+msgstr "kan inte ta bort \"%s\""
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "Kommandot avslutades utan fel\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "Kommandot misslyckades med slutstatus %d\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "Kommandot terminerades av signal %d\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "Kommandot stoppades av signal %d\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "Kommandot dumpade minnet\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "Kommandot avslutade\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "--stat kräver filnamn"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "för många argument"
+#~ msgid "Cannot resolve hostname %s"
+#~ msgstr "Kan inte slå upp värdnamn %s"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
-#~ msgstr "Varning: flaggan -I stöds inte, du kanske menade -j eller -T?"
+#~ msgid "suppress this warning."
+#~ msgstr "att undertrycka denna varning."
index 0e60492bb03dd8fa3b7656fa01d7ddfa2eafb0d2..64ca8194801b13fc7e7f1c66a53173fc32185ed6 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,281 +17,189 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr ""
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr ""
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr ""
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr ""
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr ""
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr ""
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr ""
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr ""
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
 msgstr ""
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr ""
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr ""
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr ""
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr ""
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr ""
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr ""
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr ""
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr ""
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr ""
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr ""
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr ""
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr ""
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr ""
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr ""
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr ""
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr ""
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr ""
 
-#: lib/getopt.c:526 lib/getopt.c:542
+#: gnu/getopt.c:531 gnu/getopt.c:547
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr ""
 
-#: lib/getopt.c:575 lib/getopt.c:579
+#: gnu/getopt.c:580 gnu/getopt.c:584
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr ""
 
-#: lib/getopt.c:588 lib/getopt.c:593
+#: gnu/getopt.c:593 gnu/getopt.c:598
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr ""
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr ""
 
-#: lib/getopt.c:693 lib/getopt.c:696
+#: gnu/getopt.c:698 gnu/getopt.c:701
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr ""
 
-#: lib/getopt.c:704 lib/getopt.c:707
+#: gnu/getopt.c:709 gnu/getopt.c:712
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr ""
 
-#: lib/getopt.c:759 lib/getopt.c:762
+#: gnu/getopt.c:761 gnu/getopt.c:764
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
 msgstr ""
 
-#: lib/getopt.c:768 lib/getopt.c:771
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
 #, c-format
-msgid "%s: invalid option -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr ""
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
+#: gnu/getopt.c:884 gnu/getopt.c:900
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr ""
 
-#: lib/getopt.c:892 lib/getopt.c:908
+#: gnu/getopt.c:924 gnu/getopt.c:942
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr ""
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
-msgstr ""
-
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr ""
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, c-format
 msgid "unable to record current working directory"
 msgstr ""
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, c-format
 msgid "failed to return to initial working directory"
 msgstr ""
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr ""
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr ""
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr ""
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr ""
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr ""
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr ""
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr ""
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr ""
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr ""
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr ""
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr ""
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr ""
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -305,17 +213,17 @@ msgstr ""
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr ""
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr ""
 
@@ -325,7 +233,7 @@ msgstr ""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr ""
 
@@ -335,38 +243,28 @@ msgstr ""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr ""
 
-#: lib/rtapelib.c:299
+#: gnu/version-etc.c:76
 #, c-format
-msgid "exec/tcp: Service not available"
+msgid "Packaged by %s (%s)\n"
 msgstr ""
 
-#: lib/rtapelib.c:303
+#: gnu/version-etc.c:79
 #, c-format
-msgid "stdin"
-msgstr ""
-
-#: lib/rtapelib.c:306
-#, c-format
-msgid "stdout"
-msgstr ""
-
-#: lib/rtapelib.c:512
-#, c-format
-msgid "Cannot execute remote shell"
+msgid "Packaged by %s\n"
 msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -377,19 +275,19 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr ""
@@ -397,7 +295,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -407,7 +305,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -417,7 +315,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -427,7 +325,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -437,7 +335,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -448,7 +346,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -459,7 +357,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -471,173 +369,319 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:249
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "Report %s bugs to: %s\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:253
+#, c-format
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
 msgstr ""
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
 msgstr ""
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:93
 #, c-format
-msgid "Try `%s --help' for more information.\n"
+msgid "%s: Cannot change mode to %s"
 msgstr ""
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:101
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
 msgstr ""
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
 msgstr ""
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
-msgid "Seek offset out of range"
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: lib/paxerror.c:192
+#, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr ""
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
 msgstr ""
 
-#: rmt/rmt.c:428
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr ""
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr ""
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr ""
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr ""
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr ""
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr ""
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr ""
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr ""
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
+msgstr ""
+
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr ""
+
+#: rmt/rmt.c:413
 msgid "Seek direction out of range"
 msgstr ""
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:419
+msgid "Invalid seek direction"
 msgstr ""
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
+#: rmt/rmt.c:427
+msgid "Invalid seek offset"
 msgstr ""
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:433
+msgid "Seek offset out of range"
+msgstr ""
+
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+msgid "Invalid byte count"
+msgstr ""
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+msgid "Byte count out of range"
+msgstr ""
+
+#: rmt/rmt.c:539
+msgid "Premature eof"
+msgstr ""
+
+#: rmt/rmt.c:582
+msgid "Invalid operation code"
+msgstr ""
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+msgid "Unexpected arguments"
+msgstr ""
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr ""
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr ""
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, c-format
+msgid "cannot open %s"
+msgstr ""
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr ""
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr ""
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr ""
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr ""
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr ""
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr ""
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr ""
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr ""
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr ""
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr ""
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr ""
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr ""
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr ""
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr ""
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr ""
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr ""
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr ""
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr ""
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr ""
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr ""
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr ""
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -645,124 +689,124 @@ msgid ""
 " y or newline  Continue operation\n"
 msgstr ""
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr ""
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr ""
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr ""
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr ""
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr ""
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr ""
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr ""
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr ""
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr ""
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr ""
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr ""
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr ""
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
 msgstr ""
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
 msgstr ""
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr ""
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr ""
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr ""
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr ""
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr ""
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr ""
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr ""
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr ""
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr ""
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr ""
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr ""
 
@@ -784,34 +828,34 @@ msgstr ""
 msgid "Verification may fail to locate original files."
 msgstr ""
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr ""
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr ""
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr ""
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr ""
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr ""
 
@@ -830,435 +874,436 @@ msgstr ""
 msgid "%s: link name is too long; not dumped"
 msgstr ""
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr ""
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr ""
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr ""
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, c-format
-msgid "Missing links to %s.\n"
+msgid "Missing links to %s."
 msgstr ""
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr ""
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr ""
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr ""
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr ""
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr ""
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr ""
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr ""
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr ""
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr ""
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr ""
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr ""
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr ""
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr ""
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr ""
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr ""
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr ""
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr ""
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr ""
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr ""
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr ""
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr ""
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr ""
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr ""
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr ""
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr ""
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr ""
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr ""
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr ""
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr ""
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr ""
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr ""
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr ""
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr ""
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr ""
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr ""
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr ""
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr ""
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr ""
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr ""
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr ""
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr ""
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr ""
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr ""
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr ""
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr ""
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr ""
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr ""
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr ""
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr ""
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr ""
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr ""
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr ""
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr ""
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr ""
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr ""
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr ""
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr ""
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr ""
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr ""
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr ""
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr ""
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr ""
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr ""
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr ""
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr ""
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr ""
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr ""
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr ""
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr ""
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr ""
 
-#: src/misc.c:711
-msgid "child process"
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
 msgstr ""
 
-#: src/misc.c:720
-msgid "interprocess channel"
+#: src/misc.c:774
+#, c-format
+msgid "%s: Directory removed before we read it"
 msgstr ""
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/misc.c:795
+msgid "child process"
 msgstr ""
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/misc.c:804
+msgid "interprocess channel"
 msgstr ""
 
-#: src/names.c:597
-msgid "suppress this warning."
+#: src/names.c:601
+msgid "Pattern matching characters used in file names"
+msgstr ""
+
+#: src/names.c:603
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
 
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr ""
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr ""
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr ""
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr ""
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr ""
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
 msgstr ""
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1269,7 +1314,7 @@ msgid ""
 "  tar -xf archive.tar          # Extract all files from archive.tar.\n"
 msgstr ""
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1281,86 +1326,79 @@ msgid ""
 "  never, simple   always make simple backups\n"
 msgstr ""
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr ""
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr ""
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr ""
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr ""
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr ""
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr ""
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr ""
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr ""
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr ""
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr ""
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr ""
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr ""
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr ""
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr ""
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr ""
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr ""
 
-#: src/tar.c:408
-msgid "do not exit with nonzero on unreadable files"
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
 msgstr ""
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
+#: src/tar.c:426
+msgid "do not exit with nonzero on unreadable files"
 msgstr ""
 
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1368,565 +1406,558 @@ msgid ""
 "command line or via the -T option; NUMBER defaults to 1"
 msgstr ""
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr ""
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr ""
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr ""
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr ""
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr ""
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr ""
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr ""
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr ""
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr ""
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr ""
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr ""
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr ""
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr ""
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr ""
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr ""
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr ""
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr ""
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr ""
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr ""
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr ""
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr ""
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr ""
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr ""
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
 "place (METHOD='system')"
 msgstr ""
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr ""
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr ""
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
 msgstr ""
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr ""
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
 msgstr ""
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr ""
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr ""
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr ""
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr ""
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr ""
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr ""
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr ""
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr ""
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr ""
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr ""
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr ""
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr ""
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr ""
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr ""
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr ""
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr ""
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr ""
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr ""
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr ""
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr ""
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr ""
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr ""
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr ""
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr ""
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr ""
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr ""
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr ""
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr ""
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr ""
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr ""
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr ""
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr ""
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr ""
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr ""
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr ""
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr ""
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
 msgstr ""
 
-#: src/tar.c:593
+#: src/tar.c:613
 msgid "Compression options:"
 msgstr ""
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:597
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr ""
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr ""
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr ""
-
-#: src/tar.c:609
-msgid "filter the archive through lzma"
-msgstr ""
-
-#: src/tar.c:611
-msgid "filter the archive through lzop"
-msgstr ""
-
-#: src/tar.c:613
-msgid "filter the archive through xz"
-msgstr ""
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr ""
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr ""
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr ""
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr ""
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr ""
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr ""
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr ""
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr ""
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr ""
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr ""
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr ""
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr ""
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr ""
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr ""
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr ""
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr ""
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr ""
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr ""
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr ""
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr ""
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr ""
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr ""
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr ""
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr ""
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr ""
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr ""
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr ""
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr ""
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
 msgstr ""
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr ""
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr ""
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr ""
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr ""
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr ""
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr ""
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr ""
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr ""
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr ""
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr ""
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr ""
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr ""
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr ""
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr ""
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr ""
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr ""
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -1934,269 +1965,282 @@ msgid ""
 "accepted"
 msgstr ""
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr ""
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr ""
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr ""
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr ""
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr ""
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr ""
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr ""
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr ""
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr ""
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr ""
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr ""
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr ""
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr ""
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr ""
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr ""
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr ""
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr ""
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr ""
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr ""
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr ""
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr ""
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr ""
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, c-format
+msgid "filter the archive through %s"
+msgstr ""
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr ""
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
 msgstr ""
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr ""
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr ""
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr ""
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr ""
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr ""
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr ""
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr ""
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+msgid "Invalid group"
 msgstr ""
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr ""
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr ""
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr ""
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr ""
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr ""
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr ""
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr ""
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr ""
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr ""
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr ""
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr ""
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr ""
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr ""
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr ""
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr ""
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr ""
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr ""
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr ""
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr ""
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr ""
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr ""
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr ""
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr ""
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr ""
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr ""
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2208,79 +2252,83 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr ""
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+msgid "Time stamp is out of allowed range"
+msgstr ""
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr ""
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr ""
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr ""
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr ""
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr ""
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr ""
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr ""
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr ""
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr ""
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr ""
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr ""
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr ""
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr ""
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr ""
@@ -2321,225 +2369,233 @@ msgstr ""
 msgid "Read checkpoint %u"
 msgstr ""
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
 msgstr ""
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr ""
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr ""
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr ""
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr ""
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr ""
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr ""
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr ""
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr ""
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr ""
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr ""
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr ""
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+msgid "OPTION"
+msgstr ""
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr ""
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr ""
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr ""
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr ""
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr ""
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr ""
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr ""
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr ""
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr ""
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr ""
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr ""
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr ""
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 msgid "cannot seek"
 msgstr ""
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr ""
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr ""
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr ""
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr ""
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, c-format
+msgid "cannot unlink `%s'"
+msgstr ""
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr ""
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr ""
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr ""
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr ""
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr ""
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr ""
-
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr ""
index d19ac165eb734ea31bf95f26c58fdfe3e7bf58fc..278eeef00f2f5898420aff881793403449b02a08 100644 (file)
Binary files a/po/tr.gmo and b/po/tr.gmo differ
index 0abdde883c073c2f729e344d217a432ad9ca10da..d9af5cd7b1d16a0f329b63a06963d0d9d4066cd1 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tar 1.18\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
 "PO-Revision-Date: 2007-07-09 11:30+0300\n"
 "Last-Translator: Nilgün Belma Bugüner <nilgun@buguner.name.tr>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
@@ -16,47 +16,47 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: KBabel 1.11.4\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "`%2$s' için %1$s argümanı  geçersiz"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "`%2$s' için %1$s argümanı belirsiz"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Geçerli argümanlar:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: %s değeri %s değerinden küçük ya da ona eşit"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: ARGP_HELP_FMT parametresi bir değer gerektirir"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: ARGP_HELP_FMT parametresi pozitif olmalı"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: ARGP_HELP_FMT ile belirtilen parametre bilinmiyor"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "ARGP_HELP_FMT bozuk: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -64,239 +64,145 @@ msgstr ""
 "Uzun seçenekler için zorunlu veya isteğe bağlı olan argümanlar kısa "
 "seçenekler için de geçerlidir."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Kullanımı:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr "    veya: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [SEÇENEK...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Daha fazla bilgi için `%s --help' veya `%s --usage' yazın.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr ""
 "Yazılım hatalarını <%s> adresine,\n"
 "çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Bilinmeyen sistem hatası"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "bu yardım iletisi gösterilir"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "kısa bir kullanım iletisi gösterilir"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "İSİM"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "uygulama ismi"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "SAN"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "SANİYE saniye bekler (öntanımlı 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "sürüm bilgisi gösterilir"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(YAZILIM HATASI) Sürümünü bilmiyor!?"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: argüman sayısı fazla\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr "(YAZILIM HATASI) Seçenek tanınmak zorunda!?"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr ""
 
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
+#: gnu/getopt.c:531 gnu/getopt.c:547
+#, fuzzy, c-format
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: `%s' seçeneği belirsiz\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+#: gnu/getopt.c:580 gnu/getopt.c:584
+#, fuzzy, c-format
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: `--%s' seçeneği argümansız kullanılır\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: seçenek `%c%s' argümansız kullanılır\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: `%s' seçeneği bir argümanla kullanılır\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: `--%s' seçeneği bilinmiyor\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+#: gnu/getopt.c:709 gnu/getopt.c:712
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: `%c%s' seçeneği bilinmiyor\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: kuraldışı seçenek -- %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
+#: gnu/getopt.c:761 gnu/getopt.c:764
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: geçersiz seçenek -- %c\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: seçenek bir argümanla kullanılır -- %c\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: `-W %s' seçeneği belirsiz\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: `-W %s' seçeneği argümansız kullanılır\n"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "bellek tükendi"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, fuzzy, c-format
 msgid "unable to record current working directory"
 msgstr "Çalışma dizini değiştirilemez"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, fuzzy, c-format
 msgid "failed to return to initial working directory"
 msgstr "Çalışılan dizin kaydedilemez"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: %s olanaksız"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Uyarı: %s olanaksız"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Kip %s olarak değiştirilemez"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr ""
-"%s: Dosya sahipliği, Kullanıcı-kimlik %lu ve Grup-kimlik %lu olarak "
-"değiştirilemez."
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: %s'e sabit bağ kurulamıyor"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%1$s: %3$lu bayt okunurken  %2$s. baytta okuma hatası"
-msgstr[1] "%1$s: %3$lu bayt okunurken  %2$s. baytta okuma hatası"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%1$s: Uyarı: %3$lu bayt okunurken  %2$s. baytta okuma hatası"
-msgstr[1] "%1$s: Uyarı: %3$lu bayt okunurken  %2$s. baytta okuma hatası"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: %s e gidilemiyor"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Uyarı: %s e gidilemiyor"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: %s'e sembolik bağ oluşturulamıyor"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%1$s: %3$lu baytın sadece %2$lu baytı yazıldı"
-msgstr[1] "%1$s: %3$lu baytın sadece %2$lu baytı yazıldı"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Üye isimlerinden `%s' kaldırılıyor"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Sabit bağ hedeflerinden `%s' kaldırılıyor"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Boş üye ismi için `.' ikamesi"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Boş sabit bağ hedefi için `.' ikamesi"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -310,17 +216,17 @@ msgstr "Boş sabit bağ hedefi için `.' ikamesi"
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "`"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "'"
 
@@ -330,7 +236,7 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[eEyY]"
 
@@ -340,38 +246,28 @@ msgstr "^[eEyY]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[hHnN]"
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Servis yok"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "stdG"
-
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "stdÇ"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Uzak kabuk çalıştırılamıyor"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr ""
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -382,19 +278,19 @@ msgid ""
 msgstr ""
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr ""
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr ""
@@ -402,7 +298,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -412,7 +308,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -422,7 +318,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -432,7 +328,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -442,7 +338,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -453,7 +349,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -464,7 +360,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -476,181 +372,333 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
-#, c-format
+#: gnu/version-etc.c:247
+#, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
+msgstr ""
+"Yazılım hatalarını <%s> adresine,\n"
+"çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n"
+
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
 "\n"
 "Yazılım hatalarını <%s> adresine,\n"
 "çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:253
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr ""
+
+#: gnu/version-etc.c:255
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+msgstr ""
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: %s olanaksız"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Uyarı: %s olanaksız"
+
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Kip %s olarak değiştirilemez"
+
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
 msgstr ""
+"%s: Dosya sahipliği, Kullanıcı-kimlik %lu ve Grup-kimlik %lu olarak "
+"değiştirilemez."
+
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: %s'e sabit bağ kurulamıyor"
+
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%1$s: %3$lu bayt okunurken  %2$s. baytta okuma hatası"
+msgstr[1] "%1$s: %3$lu bayt okunurken  %2$s. baytta okuma hatası"
+
+#: lib/paxerror.c:192
+#, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%1$s: Uyarı: %3$lu bayt okunurken  %2$s. baytta okuma hatası"
+msgstr[1] "%1$s: Uyarı: %3$lu bayt okunurken  %2$s. baytta okuma hatası"
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "Girdi dizgesi çok uzun"
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: %s e gidilemiyor"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "Sayısal sözdizimi hatası"
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Uyarı: %s e gidilemiyor"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Tampon alanı ayrılamıyor\n"
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: %s'e sembolik bağ oluşturulamıyor"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Tampon alanı ayrılamıyor"
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%1$s: %3$lu baytın sadece %2$lu baytı yazıldı"
+msgstr[1] "%1$s: %3$lu baytın sadece %2$lu baytı yazıldı"
 
-#: rmt/rmt.c:304
+#: lib/paxnames.c:155
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Daha fazla bilgi için `%s --help' yazın.\n"
+msgid "Removing leading `%s' from member names"
+msgstr "Üye isimlerinden `%s' kaldırılıyor"
 
-#: rmt/rmt.c:308
+#: lib/paxnames.c:156
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Sabit bağ hedeflerinden `%s' kaldırılıyor"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Boş üye ismi için `.' ikamesi"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Boş sabit bağ hedefi için `.' ikamesi"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Servis yok"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "stdG"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "stdÇ"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Kullanımı: %s [SEÇENEK]\n"
-"Bir teybi uzak bağlantı üzerinden komut kabul ederek çalıştırır.\n"
-"\n"
-"  --version   Sürümü basar.\n"
-"  --help      Bu iletiyi basar.\n"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "Arama başlangıcı hatası"
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Uzak kabuk çalıştırılamıyor"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Arama yönü kapsamdışı"
+
+#: rmt/rmt.c:419
+#, fuzzy
+msgid "Invalid seek direction"
+msgstr "Seçenekte verilen kip geçersiz"
+
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "Geçersiz boyut: %s"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Arama başlangıcı kapsamdışı"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Arama yönü kapsamdışı"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "Kayıt ortamının uzunluğu geçersiz"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "Arama başlangıcı kapsamdışı"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd: Dosya sonu belirsiz\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Dosya sonu belirsiz"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "Ana işlem kipi:"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "Arşivde beklenmeyen dosya sonu"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "SAYI"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "DOSYA"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "`%s' açılamıyor"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "argüman sayısı çok fazla"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Bozuk komut"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Bu bir tar arşivi gibi görünmüyor"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Yazılan toplam bayt"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "Okunan toplam bayt"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Silinen toplam bayt: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(boru)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "record_size için geçersiz değer"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Arşiv ismi verilmemiş"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "stdG/stdÇ arşivi doğrulanamaz"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "Aeşiv sıkıştırılmış. %s seçeneğini kullanın"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Sıkıştırılmış arşivler güncellenemez"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Bandın başlangıcında, şimdilik çıkıyor"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Çok hata var, çıkıyor"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "Kayıt uzunluğu = %lu blok"
 msgstr[1] "Kayıt uzunluğu = %lu blok"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "Arşivde hizalanmamış blok (%lu bayt)"
 msgstr[1] "Arşivde hizalanmamış blok (%lu bayt)"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr "Arşiv dosyası geri alınamaz; -i olmaksızın okunamayabilir"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek bir kaydın sınırında durmadı"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: geçersiz bölüm numarası içeriyor"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Bölüm numarası kapsamdışı"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "#%d. bölümü %s için hazırlamak istiyorsanız return tuşuna basınız: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "Kullanıcı cevabı beklenirken dosya sonuna gelindi"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "UYARI: Arşiv eksik"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -661,126 +709,126 @@ msgstr ""
 " q                   Uygulama sonlandırılır\n"
 " y veya <enter>      İşlem sürdürülür\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !                   bir alt kabuk açılır\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?                    Bu listeyi basar\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Yeni bölüm yok; çıkıyor.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "Dosya ismi belirtilmemiş. Tekrar deneyin.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "Girdi geçersiz, Yardım için ? yazın.\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "%s komutu başarısız"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s belki de bu bölümde devam ediyor: başlıktaki isim kırpılmış"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s bu bölümde devam etmiyor"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s yanlış uzunluk (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, fuzzy, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Bu bölüm sıralama dışı"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Arşiv etiketi %s ile eşleşmiyor"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "%s bölümü %s ile eşleşmiyor"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
 msgstr ""
 "%s: dosya ismi GNU çoklu bölüm başlığında saklanamayacak kadar uzun, kırpıldı"
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 #, fuzzy
 msgid "write did not end on a block boundary"
 msgstr "rmtlseek bir kaydın sınırında durmadı"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Sadece %2$lu baytın %1$lu baytı okunabildi"
 msgstr[1] "Sadece %2$lu baytın %1$lu baytı okunabildi"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "İçerikler farklı"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Arşivde beklenmeyen dosya sonu"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Dosya türleri farklı"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Kipleri farklı"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Kullanıcı-kimlikler farklı"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Grup-kimlikler farklı"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Değişiklik zamanları farklı"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Uzunlukları farklı"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "%s'e bağlı değil"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Sembolik bağlar farklı"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Aygıt numaraları farklı"
 
@@ -802,35 +850,35 @@ msgstr "Arşivdeki dosya isimleri dosya yolu içermiyor."
 msgid "Verification may fail to locate original files."
 msgstr "Doğrulama, özgün dosyaların konumlanmasında başarısız olabilir."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "DOĞRULAMA BAŞARISIZ: %d geçersiz başlık saptandı"
 msgstr[1] "DOĞRULAMA BAŞARISIZ: %d geçersiz başlık saptandı"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "%s de tek başına sıfır bloğu"
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: %s arabellekleme dizini yaftasını içeriyor; %s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr ""
 "%1$s değeri, %3$s..%4$s aralığının %2$s dışında; yerine %5$s kullanılıyor"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "%1$s değeri, %3$s..%4$s aralığının %2$s dışında"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Negatif sekizlik başlık üretiliyor"
 
@@ -849,289 +897,275 @@ msgstr "%s: dosya ismi çok uzun (parçalanamıyor); dökümlenmedi"
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: bağ ismi çok uzun; dökümlenmedi"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: Dosya %s baytta kaldı; sıfırlarla dolduruluyor"
 msgstr[1] "%s: Dosya %s baytta kaldı; sıfırlarla dolduruluyor"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: dosya farklı bir dosya sisteminde; dökümlenmedi"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr "içerik dökümlenmedi"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Bilinmeyen dosya türü; dosya yoksayıldı"
 
-#: src/create.c:1464
-#, c-format
-msgid "Missing links to %s.\n"
+#: src/create.c:1472
+#, fuzzy, c-format
+msgid "Missing links to %s."
 msgstr "%s için bağlar kayıp.\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: dosya değişmedi; dökümlenmedi"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
-msgstr "%s: dosya arşivdir; dökümlenmedi"
-
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Dosya okunamadan kaldırıldı"
+msgstr "%s: dosya arşivdir; dökümlenmedi"
 
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr "dizin dökümlenmedi"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: dosya okundu olarak imlendi"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: soket yoksayıldı"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: kapı yoksayıldı"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Sonraki başlığa atlanıyor"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Arşivden başlık-olmayan siliniyor"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: makul olmayan eski tarih damgası %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: zaman damgası %s %s s gelecekte"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Dizin oluşturulurken anlaşılamayan uyumsuzluk"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: durumu çıkarılamadan dizin ismi değiştirildi"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Bitişik dosyaları normal dosyalar olarak çıkarıyor"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Sembolik bağlar, sabit bağlar olarak çıkarılmaya çalışılıyor"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "%s okunuyor\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Dosya çıkarılamaz -- dosyanın başı diğer bölümde"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "Umulmadık uzun isim başlığı"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Bilinmeyen dosya türü '%c', normal dosya olarak çıkartılıyor"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "Mevcut %s daha yeni ya da yaşıt"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Bu dosyayı yedeklemek mümkün olmadı"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "%s ismi %s olarak değiştirilemez"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Hata kurtarılabilir değil: şimdilik çıkılıyor"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Dizinin eski adı %s idi"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Dizin adı değiştirilmişti"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Dizin yeni"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Geçersiz zaman damgası"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Değişiklik zamanı (saniye cinsinden) geçersiz"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "Değişiklik zamanı (nanosaniye cinsinden) geçersiz"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Geçersiz aygıt numarası"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Geçersiz düğüm numarası"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "Anlık görüntü dosyası okunurken alan çok uzun"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "Anlık görüntü dosyasında okuma hatası"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "Anlık görüntü dosyasında beklenmeyen dosya sonu"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "Anlık görüntü dosyasında beklenmeyen alan değeri"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "Kayıt sonlandırıcı eksik"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "Arttırımlı dosya biçimi hatalı"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr "Desteklenmeyen arttırımlı biçim sürümü: %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr "dumpdir bozuk: umulan '%c' ama bulunan %#3o"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "dumpdir bozuk: 'X' yinelenmiş"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "dumpdir bozuk: 'R'deki isim boş"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "dumpdir bozuk: 'T' 'R' ile öncelenmemiş"
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "dumpdir bozuk: 'T'deki isim boş"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr "dumpdir bozuk: umulan'%c' ama bulunan veri sonu"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr "dumpdir bozuk: 'X' hiç kullanılmamış"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "%s şablonu kullanılarak geçici dizin oluşturulamıyor"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: dizin temizlenmiyor: durumlama yapılamadı"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: dizin farklı bir aygıtta: temizlenmiyor"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: %s siliniyor\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Kaldırılamaz"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Geçiliyor"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "blok %s: ** NUL bloku **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "blok %s: ** Dosya Sonu **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "blok %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Sayısal %s değeri beklenirken başlıkta boşluklar bulundu"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1139,141 +1173,158 @@ msgstr ""
 "ediliyor"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Arşiv sekizlik değeri %.*s aralığın %s dışında"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Arşiv atıl base-64 başlıklar içeriyor"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "Arşiv imzalı base-64 dizge %s, %s aralığının dışında"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Arşiv base-256 değeri %s aralığının dışında"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Arşiv %.*s içeriyor, halbuki orada sayısal %s değeri bekleniyor"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Arşiv değeri %s %s türünün %s..%s aralığının dışında"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " bağı -> %s \n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " bilinmeyen dosya türü %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Uzun  Bağ--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Uzun İsim--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Bölüm Başlığı--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Devamı bayt %s de--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Oluşturulan dizin:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "%s %s olarak değiştiriliyor\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: İsmi %s olarak değiştirilemez"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Gerisin geriye %s %s olarak değiştiriliyor\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Çalışılan dizin kaydedilemez"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Çalışma dizini değiştirilemez"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Dosya okunamadan kaldırıldı"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Dosya okunamadan kaldırıldı"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "alt süreç"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "süreçlerarası kanal"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr "Kalıp eşleme karakterleri dosya isimlerinde kullanılmış. Lütfen,"
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr "ya kalıp eşlemeyi etkin kılmak için --wildcards  kullanın,"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "ya da bu uyarıyı engellemek için --no-wildcards kullanın."
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Arşivde yok"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Arşivde bulunması gerekirken yok"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr ""
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "`-%s' ve `-%s' seçeneklerinin ikisi de standart girdi istiyor"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Geçersiz arşiv biçimi"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "GNU özellikleri ile uyumsuz arşiv biçimi"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
@@ -1281,7 +1332,7 @@ msgstr ""
 "Sarmalama şekli `%s' bilinmiyor. Listeyi almak için `%s --quoting-"
 "style=help' yazın."
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1300,7 +1351,7 @@ msgstr ""
 "  tar -tvf arşiv.tar         # arşiv.tar içindeki dosyalar listelenir\n"
 "  tar -xf arşiv.tar          # arşiv.tar'dan tüm dosyalar çıkarılır\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1321,86 +1372,79 @@ msgstr ""
 "  nil, existing   numaralıysa numaralı, değilse basit yedekleme yapılır\n"
 "  never, simple   daima basit yedekleme yapılır\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Ana işlem kipi:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "bir arşiv içeriğini listeler"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "bir arşivdeki dosyaları çıkarır"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "yeni bir arşiv oluşturur"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "arşiv ile dosya sistemi arasındaki farklar bulunur"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "dosyaları arşivin sonuna ekler"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "sadece arşivdeki kopyasından daha yeni dosyalar eklenir"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "bir arşive tar dosyaları ekler"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "arşivden siler (teyplerde değil!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr "arşiv bölüm etiketini sınar ve çıkar"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "İşlem değiştiriciler:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "seyrek dosyalar verimli şekilde elde edilir"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr "ANA[.ALT]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr "kullanılacak seyrek biçim sürümü ayarlanır (--sparse uygular)"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "GNU eski tarz arttırımlı yedekleme tanınır"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "DOSYA"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "GNU yeni tarz arttırımlı yedekleme tanınır"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr ""
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "dosyalar okunamadığında sıfırdan farklı bir değerle çıkılmaz"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "SAYI"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1412,117 +1456,121 @@ msgstr ""
 "ve dosyaların listelenmesi sırasında ya komut satırından ya da -T seçeneği "
 "üzerinden belirtilir. SAYI öntanımlı olaral 1'dir."
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "arşiv arama yapılabilen türde"
 
-#: src/tar.c:418
+#: src/tar.c:436
+#, fuzzy
+msgid "archive is not seekable"
+msgstr "arşiv arama yapılabilen türde"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr ""
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "Üsteyazma denetimi:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "yazdıktan sonra arşivi doğrulamaya çalışır"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "arşive eklendikten sonra dosyalar silinir"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "çıkarılırken mevcut dosyalar değiştirilmez"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr "arşivdeki kopyalaraından daha yeni dosyalar değiştirilmez"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "çıkarılırken mevcut dosyaların üzerine yazılır"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "çıkarılmadan önce mevcut dosya silinir"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "dizin çıkarılmadan önce alt dizinleri silinir"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "mevcut dizinlerin öznitelikleri korunur"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 "çıkarılırken mevcut dizinlerin metaverisinin üzerine yazılır (öntanımlı)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Çıktı akımını seçiniz:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "dosyalar standart çıktıya çıkarılır"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "KOMUT"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "çıkarılan dosyaları başka bir uygulamaya borular"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "altsüreçlerin çıkış kodları yoksayılır"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr "altsüreçlerin çıkış kodları sıfırdan farklıysa hata olarak ele alınır"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Dosya özniteliklerinin elde edilmesi:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "İSİM eklenen dosyaların sahibi yapılır"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "İSİM eklenen dosyaların grubu yapılır"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "DOSYA-TARİHİ"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "DOSYA-TARİHİnde eklenen dosyalar için mtime ayarlanır"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "KİP"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "KİP eklenen dosyaların (sembolik) kipi yapılır"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "YÖNTEM"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1532,28 +1580,32 @@ msgstr ""
 "değerine getirerek (YÖNTEM='replace' öntanımlıdır) ya da ilk yerindeki "
 "zamanı değiştirmeyerek (YÖNTEM='system')."
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "dosya değişiklik zamanı çıkarılmaz"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+#, fuzzy
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr "sahibi aynı olan dosyalar çıkarılmaya çalışılır"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+#, fuzzy
+msgid "extract files as yourself (default for ordinary users)"
 msgstr "dosyalar sizin sahipliğinizde çıkarılır"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "kullanıcı/grup isimleri yerine daima numaraları kullanılır"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 "dosya izinleri ile ilgili bilgileri çıkarır (root kullanıcısı için öntanımlı)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
@@ -1561,15 +1613,15 @@ msgstr ""
 "arşivden çıkarılırken izinlere kullanıcıların umask'ı uygulanır (sıradan "
 "kullanıcılar için öntanımlı)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "isimler arşivdeki sırasına göre çıkarılır"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "-p ve -s birlikte verilmiş gibi olur"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
@@ -1577,139 +1629,139 @@ msgstr ""
 "herşey çıkarılana kadar çıkarılan dizinlerin izinleri ve değişiklik "
 "zamanlarının değiştirilmesi geciktirilir"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "--delay-directory-restore seçeneğinin etkisi iptal edilir."
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "Aygıt seçimi ve aygıt değiştirme:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "ARŞİV"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "arşiv dosyası ya da ARŞİV aygıtı kullanılır"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "bir iki nokta üstüste içerse bile arşiv dosyası yereldir"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "rmt yerine rmt KOMUT kullanılır"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "rsh yerine uzak uçta KOMUT kullanılır"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "sürücü ve yoğunluk belirtilir"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "çok bölümlü arşivi oluşturur/listeler/çıkarır"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "SAYI x 1024 bayt yazıldıktan sonra band değiştirilir"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "her bandın sonunda betiği çalıştırır (-M uygular)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "DOSYAda bölüm numarası kullanılır/güncellenir"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Aygıtın blok düzeni:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "BLOK"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "kayıt başına BLOK x 512 bayt"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "512'nin katları olarak kayıt başına BOYUT bayt"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "arşivdeki sıfırlı bloklar yoksayılır (dosyasonu anlamında)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "okunmuş olarak yeniden bloklanır (4.2 BSD boruları için)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Arşiv biçimi seçimi:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "BİÇİM"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "belirtilen biçimin arşivi oluşturulur."
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "BİÇİM şunlardan biri olabilir:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "eski V7 tar biçimi"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "tar <= 1.12 için GNU biçimi"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "GNU tar 1.13.x biçimi"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "POSIX 1003.1-1988 (ustar) biçimi"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "POSIX 1003.1-2001 (pax) biçimi"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "pax ile aynı"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr " --format=v7 ile aynı"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "--format=posix ile aynı"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "isim[[:]=değer][,isim[[:]=değer]]..."
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "pax anahtar sözcüklerini denetler"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "METİN"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
@@ -1717,194 +1769,171 @@ msgstr ""
 "arşivi METİN bölüm ismiyle oluşturur; listeleme/çıkarma sırasında METİN, "
 "bölüm ismini genelleme kalıbı olarak kullanılır"
 
-#: src/tar.c:593
+#: src/tar.c:613
 #, fuzzy
 msgid "Compression options:"
 msgstr "Sıkıştırma seçenekleri çelişiyor"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:597
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr ""
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "arşivi bzip2 üzerinden geçirir"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "arşivi gzip üzerinden geçirir"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "arşivi compress üzerinden geçirir"
-
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "arşivi gzip üzerinden geçirir"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "arşivi gzip üzerinden geçirir"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "arşivi gzip üzerinden geçirir"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "UYG"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "arşivi UYG üzerinden geçirir (UYG -d kabul etmeli)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Yerel dosya seçimi:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
 "belirtilen DOSYA arşive eklenir (isim bir tire ile başlıyorsa kullanışlıdır)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "DİZİN"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "DİZİN dizinine geçilir"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "çıkarılacak ya da oluşturulacak isimler DOSYAdan alınır"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T boş karakter sonlandırmalı isimleri okur, -C iptal edilir"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr ""
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr "-T ile okunan dosyaisimlerine tırnak ayıklama uygulanır"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr "-T ile okunan dosyaisimlerine tırnak ayıklama uygulanmaz"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "ŞABLON"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "belirtilen ŞABLONa uyan dosyalar hariç tutulur"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "DOSYAdaki şablonlara uyan isimler hariç tutulur"
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr "yafta dosyası hariç, CACHEDIR.TAG içeren dizinler dışlanır"
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "CACHEDIR.TAG içeren dizinlerin altındaki herşey hariç tutulur"
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "CACHEDIR.TAG içeren dizinler hariç tutulur"
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 "DOSYA'nın kendisi hariç, DOSYA içeren dizinlerin içerikleri hariç tutulur"
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr "DOSYA içeren dizinlerin altındaki herşey hariç tutulur"
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr "DOSYA içeren dizinler hariç tutulur"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr ""
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "dizinlerde özdevinimli olarak azalan sıralamadan kaçınılır"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "arşiv oluşturulurken yerel dosya sisteminde kalınır"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "dizinlerin alt dizinlerine inilir (öntanımlı)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "dosya isimlerinin başındaki `/'lar ayrılmaz"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr ""
 "sembolik bağlar izlenir; hedeflerindeki dosyalar arşivlenir ve dökümlenir"
 
-#: src/tar.c:668
+#: src/tar.c:686
 #, fuzzy
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr ""
 "sembolik bağlar izlenir; hedeflerindeki dosyalar arşivlenir ve dökümlenir"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "ÜYE-İSMİ"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "arşivin ÜYE-İSMİ üyesinden başlanır"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "sadece DOSYA-TARİHİnden daha yeni dosyalar saklanır"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "TARİH"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "sadece veri değişecekse tarih ve saat karşılaştırılır"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "DENETİM"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "kaldırılmadan önce DENETİM sürümü seçilerek yedeklenir"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "DİZGE"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1912,89 +1941,98 @@ msgstr ""
 "kaldırmadan önce uygun sonekle yedekleme yapılır (SIMPLE_BACKUP_SUFFIX ortam "
 "değişkeni ile belirlenmemişse sonek olarak '~' kullanılır"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr "Dosya ismi dönüşümleri:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr "çıkarılırken dosya isimlerinden baştaki SAYI bileşen ayrılır"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "İFADE"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr "dosya isimleri dönüştürülürken sed değiştirme İFADEsi kullanılır"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 "Dosya ismi eşleştirme seçenekleri\n"
 "(içerme ve dışlama kalıplarının her ikisi de etkili):"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr "harf büyüklükleri önemsenmez"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr "dosya isminin başlangıcına uyan kalıplar"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr "bir /'dan sonra şablonla eşleşen kalıplar (dışlama için öntanımlı)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr "harf büyüklüklerine duyarlı eşleşme (öntanımlı)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr "genelleme kalıpları kullanılır (dışlama için öntanımlı)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "birebir dizge eşleme"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr "'/' ile eşleşmeyen genelleme kalıpları"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr "'/' ile eşleşen genelleme kalıpları (dışlama için öntanımlı)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Bilgilendirme çıktısı:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "işlenen dosyalar ayrıntılı listelenir"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
+#, fuzzy
+msgid "warning control"
+msgstr "Üsteyazma denetimi:"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr "her SAYIncı kayıtta gelişim iletisi gösterilir (öntanımlı: 10)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr ""
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr ""
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "tüm bağlar dökümlenmezse bir ileti basılır"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "SiNYAL"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2005,113 +2043,121 @@ msgstr ""
 "alındığında bayt toplamını basar; İzin verilen sinyaller: SIGHUP, SIGQUIT, "
 "SIGINT, SIGUSR1 ve SIGUSR2; SIG ile başlamayanları da kabul edilir"
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "dosya değişiklik zamanları UTC'ye göre basılır"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "ayrıntılı çıktı DOSYAya gönderilir"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "her iletide arşiv içindeki blok sayısı gösterilir"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "her eylemden önce doğrulama istenir"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "tar öntanımlıları gösterilir"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr ""
 "listeleme ya da çıkarma sırasında arama koşuluna uymayan dizinler listelenir"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr "dönüşümden sonra dosya ve arşiv isimlerini gösterir"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "ŞEKİL"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr "sarmalama şeklinin ismi; geçerli ŞEKİL değerleri için aşağıya bakınız"
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "DİZGEdeki sarmalama karakterlerine ek olarak"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "DİZGEdeki karakterler için sarmalamayı iptal eder"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Uyumluluk seçenekleri:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr "oluştururken --old-archive ile, çıkarırken --no-same-owner ile aynı"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Diğer seçenekler:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "bozuculuk olasılığı olan bazı seçeneklerin kullanımı iptal edilir"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
 msgstr "`-Acdtrux' seçenekleri birden fazla belirtilemez"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Sıkıştırma seçenekleri çelişiyor"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "Bilinmeyen  sinyal ismi: %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "Tarih örnekleri dosyası bulunamadı"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Bilinmeyen tarih biçemi %2$s yerine %1$s kullanılıyor"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "Seçenek %s: `%s' tarihi %s olarak ele alınıyor"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s: dosya listesi zaten okundu"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s: okunan dosya ismi boş karakter içeriyor"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "arşivi gzip üzerinden geçirir"
+
+#: src/tar.c:1290
+#, fuzzy
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr "--quoting-style seçeneği için geçerli değerler:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2119,158 +2165,169 @@ msgstr ""
 "\n"
 "*Bu* tar için öntanımlılar:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Bloklama çarpanı geçersiz"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Kayıt ortamının uzunluğu geçersiz"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+#, fuzzy
+msgid "Invalid incremental level value"
+msgstr "Arttırımlı dosya biçimi hatalı"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Birden fazla eşik tarihi"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr "Seyrek sürüm değeri geçersiz"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr "--atime-preserve='system' seçeneği bu platformda desteklenmiyor"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr "--checkpoint değeri bir tamsayı değil"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s: geçersiz grup"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Seçenekte verilen kip geçersiz"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Sayı geçersiz"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Sahip geçersiz"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Kayıt uzunluğu geçersiz"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Kayıt uzunluğu %d nin katları olmalı"
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Elemen sayısı geçersiz"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr "Sadece tek bir --to-command seçeneği kullanılabilir"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "Hatalı yoğunluk argümanı: %s"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "Bilinmeyen yoğunluk: '%c'"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "`-[0-7][lmh]' seçeneği *bu* tar ile desteklenmiyor"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[DOSYA]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Eski seçenek `%c' bir argümanla kullanılır."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "--occurrence bir dosya listesi olmaksızın anlamlı değil"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "--occurrence istenen işlem kipinde kullanılamaz"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Çok sayıda arşiv dosyası `-M' seçeneği gerektirir"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "--listed-incremental ile --newer birlikte kullanılamaz"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+#, fuzzy
+msgid "--level is meaningless without --listed-incremental"
+msgstr "--occurrence bir dosya listesi olmaksızın anlamlı değil"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: Bölüm etiketi çok uzun (sınır: %lu bayt)"
 msgstr[1] "%s: Bölüm etiketi çok uzun (sınır: %lu bayt)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Çok sayıda bölüm içeren arşivler doğrulanamaz"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Sıkıştırılmış arşivler doğrulanamaz"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Çok sayıda bölüm içeren sıkıştırılmış arşivler kullanılamıyor"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "Sıkıştırılmış arşivler birleştirilemez"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "--pax-option sadece POSIX arşivlerinde kullanılabilir"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr ""
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Bir boş arşivin oluşturulması ister istemez reddediliyor"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "`-Aru' seçenekleri `-f -' ile uyumsuz"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
 msgstr "`-Acdtrux' seçeneklerinden biri belirtilmeli"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr ""
@@ -2282,79 +2339,84 @@ msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: Dosya %s baytta kırpılmış"
 msgstr[1] "%s: Dosya %s baytta kırpılmış"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "%s anahtar sözcüğü ya bilinmiyor ya da henüz gerçeklenmemiş"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "Numara izin verilen aralığın dışında: %s"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "%s şablonu kullanılamıyor"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "%s anahtar sözcüğü çakıştırılamaz"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "Ek başlık bozuk: uzunluk eksik"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr "Ek başlık uzunluğu izin verilen aralığın dışında"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "Ek başlık uzunluğu %*s aralık dışında"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr "Ek başlık bozuk: uzunluktan sonra boşluk yok"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Ek başlık bozuk: eşit işareti eksik"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr "Ek başlık bozuk: satırsonu eksik"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr "Bilinmeyen ek başlık anahtar sözcüğü `%s' yoksayılıyor"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr "Üretilen isim/değer çifti çok uzun (isim=%s, uzunluk=%s)"
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "Ek başlık %s=%s, %s..%s aralığının dışında"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Ek başlık bozuk: %s=%s geçersiz"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Ek başlık bozuk: %s=%s aşırıya kaçmış"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr "Ek başlık bozuk: %s geçersiz: umulmadık %c ayracı"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr "Ek başlık bozuk: %s geçersiz: değerler tek sayıda"
@@ -2395,7 +2457,7 @@ msgstr "Yazma sınama yeri %u"
 msgid "Read checkpoint %u"
 msgstr "Okuma sınaması yeri %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
@@ -2403,86 +2465,92 @@ msgstr ""
 "genfile, GNU paxutils deneme araçları için veri dosyalarını işleme sokar.\n"
 "SEÇENEKLER:\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr "Dosya oluşturma seçenekleri:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "BOYUT"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "Dosya belirtilen BOYUTta oluşturulur"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "Dosyalar standart çıktı yerine İSİM dosyasına yazılır"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "Dosya isimleri DOSYAdan okunur"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr "-T boş karakter sonlandırmalı isimleri okur"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 "Dosyayı belirtilen ŞABLON ile doldurur. ŞABLON 'default' veya 'zeros' "
 "olabilir"
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "Seyrek dosyalar için blok boyu"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr "Seyrek dosya üretilir. Komut satırının kalanı dosya eşlemini verir."
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr "KONUM"
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr "Veriyi yazmadan önce belirtilen konuma gider"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr "Dosya istatistikleri seçenekleri:"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr ""
 "Belirtilen her dosya için stat yapısının içeriğini basar. Öntanımlı BİÇİM: "
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr "İcra eşzamanlama seçenekleri:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr " [SEÇENEK...]"
+
+#: tests/genfile.c:165
+#, fuzzy
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
 "Belirtilen KOMUT çalıştırılır. --checkpoint ile ve --cut, --append, --touch "
 "seçeneklerinden biri ile birlikte kullanışlıdır"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr "Sınama SAYIsı aşıldığında belirtilen eylem uygulanır (aşağıya bakınız)"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr "Sonraki --touch seçeneği için tarih ayarlanır"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr "İcra edilen sınamalar ve KOMUTun çıkış durumu gösterilir"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
@@ -2490,153 +2558,220 @@ msgstr ""
 "Çalıştırma eylemlerini eşzamanlar. Bunlar --checkpoint seçeneği ile "
 "belirtilen sayı aşıldığında çalıştırılırlar."
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr ""
 "DOSYA --length seçeneği ile belirtilen boyutta kırpılır (belirtilmemişse 0)"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 "DOSYAya BOYUT bayt eklenir. BOYUT evvelce --length seçeneği ile belirtilir."
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "DOSYAnın değişiklik ve erişim zamanları güncellenir"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "KOMUT çalıştırılır"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "Geçersiz boyut: %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Numara izin verilen aralığın dışında: %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr "Negatif boyut: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "stat(%s) başarısız"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr ""
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr ""
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "Sayı çözümlenirken `%s' civarında hata"
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "Bilinmeyen tarih biçimi"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[ARGÜMANLAR...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "`%s' açılamıyor"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 msgid "cannot seek"
 msgstr "konumlanamıyor"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "dosya ismi boş karakter içeriyor"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 "seyrek dosyalar standart çıktıda üretilemez, --file seçeneğini kullanın"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "kalıp yanlış (`%s' yakınında)"
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr "Bilinmeyen alan `%s'"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "zaman `%s' olarak ayarlanamaz"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "`%s' açılamıyor"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "Komut başarıyla sonlandı\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "Komut %d çıkış durumu ile başarısız oldu\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "Komut %d sinyali ile sonlandırıldı\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "Komut %d sinyali ile durduruldu\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "Komut bellek dökümü verdi\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "Komut sonlandı\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "--stat seçeneği dosya isimleri gerektirir"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "argüman sayısı çok fazla"
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: kuraldışı seçenek -- %c\n"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
 #~ msgstr ""
-#~ "Uyarı: -I seçeneği desteklenmiyor; -j ya da -T mi yazacaktınız yoksa?"
+#~ "\n"
+#~ "Yazılım hatalarını <%s> adresine,\n"
+#~ "çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "%s okunuyor\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "Hata kurtarılabilir değil: şimdilik çıkılıyor"
+
+#~ msgid "suppress this warning."
+#~ msgstr "ya da bu uyarıyı engellemek için --no-wildcards kullanın."
+
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "arşivi bzip2 üzerinden geçirir"
+
+#~ msgid "filter the archive through gzip"
+#~ msgstr "arşivi gzip üzerinden geçirir"
+
+#~ msgid "filter the archive through compress"
+#~ msgstr "arşivi compress üzerinden geçirir"
+
+#, fuzzy
+#~ msgid "filter the archive through lzma"
+#~ msgstr "arşivi gzip üzerinden geçirir"
 
 #, fuzzy
-#~ msgid "cancel effect of the previous --transform-links option"
-#~ msgstr "--delay-directory-restore seçeneğinin etkisi iptal edilir."
+#~ msgid "filter the archive through lzop"
+#~ msgstr "arşivi gzip üzerinden geçirir"
+
+#~ msgid "Input string too long"
+#~ msgstr "Girdi dizgesi çok uzun"
+
+#~ msgid "Number syntax error"
+#~ msgstr "Sayısal sözdizimi hatası"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd: Tampon alanı ayrılamıyor\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "Tampon alanı ayrılamıyor"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "Daha fazla bilgi için `%s --help' yazın.\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "Kullanımı: %s [SEÇENEK]\n"
+#~ "Bir teybi uzak bağlantı üzerinden komut kabul ederek çalıştırır.\n"
+#~ "\n"
+#~ "  --version   Sürümü basar.\n"
+#~ "  --help      Bu iletiyi basar.\n"
+
+#~ msgid "Seek offset error"
+#~ msgstr "Arama başlangıcı hatası"
+
+#~ msgid "Premature end of file"
+#~ msgstr "Dosya sonu belirsiz"
 
 #~ msgid "block size"
 #~ msgstr "blok uzunluğu"
@@ -2644,5 +2779,9 @@ msgstr "argüman sayısı çok fazla"
 #~ msgid "[.]NUMBER"
 #~ msgstr "[.]SAYI"
 
+#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
+#~ msgstr ""
+#~ "Uyarı: -I seçeneği desteklenmiyor; -j ya da -T mi yazacaktınız yoksa?"
+
 #~ msgid "Error exit delayed from previous errors"
 #~ msgstr "Hata çıkışı önceki hatalardan dolayı gecikti"
index 3a71e8dccd5f115de891c9e71066747cb4395a04..788ae4d4bc8311d14025a6eead1d24a4de194d4a 100644 (file)
Binary files a/po/uk.gmo and b/po/uk.gmo differ
index 80ccf0e7a18960766af6c045379034b9bc9ebad9..0576a5c2d07404e592dbd51eb78bfd5bf5c8a518 100644 (file)
--- a/po/uk.po
+++ b/po/uk.po
@@ -1,14 +1,14 @@
 # Ukrainian messages for GNU tar
 # This file is distributed under the same license as the tar package.
-# Copyright (C) 2008 Free Software Foundation, Inc.
-# Sergey Poznyakoff <gray@gnu.org>, 2005, 2006, 2007, 2008.
+# Copyright (C) 2010 Free Software Foundation, Inc.
+# Sergey Poznyakoff <gray@gnu.org>, 2005, 2006, 2007, 2008, 2009, 2010.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: tar 1.21\n"
+"Project-Id-Version: tar 1.23\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
-"PO-Revision-Date: 2008-12-28 16:01+0200\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
+"PO-Revision-Date: 2010-03-10 13:30+0200\n"
 "Last-Translator: Sergey Poznyakoff <gray@gnu.org>\n"
 "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
 "MIME-Version: 1.0\n"
@@ -17,286 +17,191 @@ msgstr ""
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
 "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "неправильний аргумент %s для %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "неоднозначний аргумент %s для %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Дозволені аргументи такі:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: значення %s є менше ніж або дорівнює %s"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: параметр ARGP_HELP_FMT вимагає значення"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: параметр ARGP_HELP_FMT має бути додатнім"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: Невідомий параметр ARGP_HELP_FMT"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Хибні дані в ARGP_HELP_FMT: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
 msgstr ""
 "Аргументи, обов'язкові для довгих ключів, є обов'язковими й для коротких."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Використання:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr " чи: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [ОПЦІЯ...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr ""
 "Спробуйте `%s --help' або `%s --usage' для отримання докладнішого опису.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "Про помилки звітуйте на <%s>.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Невідома системна помилка"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "вивести цю довідку"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "вивести коротке повідомлення про використання"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "НАЗВА"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "встановити назву програми"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "СЕКУНДИ"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "зачекати вказану кількість секунд (типово 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "вивести версію програми"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(ПОМИЛКА ПРОГРАМУВАННЯ) Невідома версія!?"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: Забагато аргументів\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr "(ПОМИЛКА ПРОГРАМУВАННЯ) Опція мала бути розпізнана!?"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr "помилка запису"
 
-#: lib/getopt.c:526 lib/getopt.c:542
+#: gnu/getopt.c:531 gnu/getopt.c:547
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
-msgstr "%s: опція `%s' неоднозначна\n"
+msgid "%s: option '%s' is ambiguous\n"
+msgstr "%s: опція '%s' неоднозначна\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
+#: gnu/getopt.c:580 gnu/getopt.c:584
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
-msgstr "%s: опція `--%s' не може мати аргументу\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: опція '--%s' не може мати аргументу\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
+#: gnu/getopt.c:593 gnu/getopt.c:598
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
-msgstr "%s: опція `%c%s' не може мати аргументу\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: опція '%c%s' не може мати аргументу\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
-msgstr "%s: опція `%s' вимагає аргумент\n"
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: опція '%s' вимагає аргументу\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
+#: gnu/getopt.c:698 gnu/getopt.c:701
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
-msgstr "%s: невідома опція `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: невідома опція '--%s'\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
+#: gnu/getopt.c:709 gnu/getopt.c:712
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
-msgstr "%s: невідома опція `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: невідома опція '%c%s'\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
+#: gnu/getopt.c:761 gnu/getopt.c:764
 #, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: недопустима опція -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: недійсна опція -- '%c'\n"
 
-#: lib/getopt.c:768 lib/getopt.c:771
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
 #, c-format
-msgid "%s: invalid option -- %c\n"
-msgstr "%s: Ð½ÐµÐ²Ñ\96Ñ\80на Ð¾Ð¿Ñ\86Ñ\96Ñ\8f -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: Ð¾Ð¿Ñ\86Ñ\96Ñ\8f Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ\94 Ð°Ñ\80гÑ\83менÑ\82Ñ\83 -- '%c'\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
+#: gnu/getopt.c:884 gnu/getopt.c:900
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: опція вимагає аргумент -- %c\n"
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: опція '-W %s' неоднозначна\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
+#: gnu/getopt.c:924 gnu/getopt.c:942
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
-msgstr "%s: опція `-W %s' неоднозначна\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: опція '-W %s' не може мати аргументу\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
-msgstr "%s: опція `-W %s' не може мати аргументу\n"
-
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "пам'ять вичерпана"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, c-format
 msgid "unable to record current working directory"
 msgstr "не вдається змінити поточний каталог"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, c-format
 msgid "failed to return to initial working directory"
 msgstr "не вдається зберегти поточний каталог"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Помилка у функції %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Попередження: Помилка у функції %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Не вдається змінити права доступу на %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Не вдається змінити власника на uid %lu, gid %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Не вдається створити жорстке посилання на %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Помилка в позиції %s, під час читання %lu байту"
-msgstr[1] "%s: Помилка в позиції %s, під час читання %lu байтів"
-msgstr[2] "%s: Помилка в позиції %s, під час читання %lu байтів"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Попередження: Помилка в позиції %s, під час читання %lu байту"
-msgstr[1] "%s: Попередження: Помилка в позиції %s, під час читання %lu байтів"
-msgstr[2] "%s: Попередження: Помилка в позиції %s, під час читання %lu байтів"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Не вдається виконати lseek до %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Попередження: Не вдається виконати lseek до %s"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Не вдається створити символічне посилання на %s"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Вдалося записати тільки %lu з %lu байта"
-msgstr[1] "%s: Вдалося записати тільки %lu з %lu байтів"
-msgstr[2] "%s: Вдалося записати тільки %lu з %lu байтів"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Видалення початкового префіксу `%s' з назв файлів"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Видалення початкового префіксу `%s' з назви цілі жорсткого посилання"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Підстановка `.' замість пустої назви файлу"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Підстановка `.' замість пустої назви цілі жорсткого посилання"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -310,17 +215,17 @@ msgstr "Підстановка `.' замість пустої назви ціл
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "`"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "'"
 
@@ -330,7 +235,7 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[yYтТ]"
 
@@ -340,39 +245,28 @@ msgstr "^[yYтТ]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[nNнН]"
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: сервіс відсутній"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "stdin"
-
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "stdout"
+msgid "Packaged by %s (%s)\n"
+msgstr "Пакував %s (%s)\n"
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "Ð\9dе Ð²Ð´Ð°Ð»Ð¾Ñ\81Ñ\8f Ð·Ð°Ð¿Ñ\83Ñ\81Ñ\82иÑ\82и Ð²Ñ\96ддаленÑ\83 Ð¾Ð±Ð¾Ð»Ð¾Ð½ÐºÑ\83"
+msgid "Packaged by %s\n"
+msgstr "Ð\9fакÑ\83вав %s\n"
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr "©"
 
-#: lib/version-etc.c:67
-#, fuzzy
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -384,23 +278,25 @@ msgstr ""
 "\n"
 "Ліцензія GPLv3+: GNU GPL версії 3 або пізнішої <http://gnu.org/licenses/gpl."
 "html>\n"
+"Це є вільне програмне забезпечення: ви можете змінювати та розповсюджувати "
+"його.\n"
 "Немає ЖОДНИХ ГАРАНТІЙ, в межах дозволених правом.\n"
 "\n"
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr "Автор: %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Автори: %s та %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Автори: %s, %s та %s.\n"
@@ -408,7 +304,7 @@ msgstr "Автори: %s, %s та %s.\n"
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -420,7 +316,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -432,7 +328,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -444,7 +340,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -456,7 +352,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -469,7 +365,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -483,7 +379,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -498,136 +394,283 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 "\n"
-"Про помилки звітуйте на <%s>.\n"
+"Про помилки звітуйте на %s\n"
+"Про помилки у перекладі звітуйте за адресою <translation-team-uk@lists."
+"sourceforge.net>\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:249
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
-msgstr ""
+msgid "Report %s bugs to: %s\n"
+msgstr "Про помилки у програмі %s звітуйте на %s\n"
+
+#: gnu/version-etc.c:253
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "домашня сторінка %s: <%s>\n"
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+msgstr "домашня сторінка %s: <http://www.gnu.org/software/%s/>\n"
+
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
+"Загальна допомога щодо використання ПЗ GNU: <http://www.gnu.org/gethelp/>\n"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Помилка у функції %s"
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "За довгий вхідний рядок"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Попередження: Помилка у функції %s"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "Помилка синтаксису числа"
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Не вдається змінити права доступу на %s"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Не вдається виділити простір для буфера\n"
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Не вдається змінити власника на uid %lu, gid %lu"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Не вдається виділити простір для буфера"
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Не вдається створити жорстке посилання на %s"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:179 lib/paxerror.c:211
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Спробуйте `%s --help' для отримання докладнішого опису.\n"
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Помилка в позиції %s, під час читання %lu байту"
+msgstr[1] "%s: Помилка в позиції %s, під час читання %lu байтів"
+msgstr[2] "%s: Помилка в позиції %s, під час читання %lu байтів"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:192
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
-msgstr ""
-"Використання: %s [ОПЦІЯ]\n"
-"Керує стрічковим пристроєм, отримуючи команди від віддаленого процесу.\n"
-"\n"
-"  --version  Вивести версію програми та вийти.\n"
-"  --help     Вивести цю довідку\n"
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Попередження: Помилка в позиції %s, під час читання %lu байту"
+msgstr[1] "%s: Попередження: Помилка в позиції %s, під час читання %lu байтів"
+msgstr[2] "%s: Попередження: Помилка в позиції %s, під час читання %lu байтів"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "Зміщення за межами діапазону"
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Не вдається виконати lseek до %s"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
-msgid "Seek offset out of range"
-msgstr "Зміщення за межами діапазону"
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Попередження: Не вдається виконати lseek до %s"
 
-#: rmt/rmt.c:428
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Не вдається створити символічне посилання на %s"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Вдалося записати тільки %lu з %lu байта"
+msgstr[1] "%s: Вдалося записати тільки %lu з %lu байтів"
+msgstr[2] "%s: Вдалося записати тільки %lu з %lu байтів"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Видалення початкового префіксу `%s' з назв файлів"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Видалення початкового префіксу `%s' з назви цілі жорсткого посилання"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Підстановка `.' замість пустої назви файлу"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Підстановка `.' замість пустої назви цілі жорсткого посилання"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: сервіс відсутній"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "stdin"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "stdout"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
+msgstr "Не вдалося під'єднатись до %s: неможливо встановити адресу хоста"
+
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Не вдалося запустити віддалену оболонку"
+
+#: rmt/rmt.c:413
 msgid "Seek direction out of range"
 msgstr "Напрямок зміщення за межами діапазону"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
-msgstr "rmtd: передчасне закінчення файла\n"
+#: rmt/rmt.c:419
+msgid "Invalid seek direction"
+msgstr "Помилковий напрям пошуку"
+
+#: rmt/rmt.c:427
+msgid "Invalid seek offset"
+msgstr "Помилковий зсув у файлі"
+
+#: rmt/rmt.c:433
+msgid "Seek offset out of range"
+msgstr "Зміщення за межами діапазону"
+
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+msgid "Invalid byte count"
+msgstr "Помилкова кількість байтів"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+msgid "Byte count out of range"
+msgstr "Кількість байтів за межами діапазону"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
+#: rmt/rmt.c:539
+msgid "Premature eof"
 msgstr "Передчасне закінчення файла"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:582
+msgid "Invalid operation code"
+msgstr "Недійсний код операції"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr "Операція не підтримується"
+
+#: rmt/rmt.c:645
+msgid "Unexpected arguments"
+msgstr "Неочікувані аргументи"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr "Керує стрічковим пристроєм, отримуючи команди від віддаленого процесу"
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "ЧИСЛО"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr "встановити рівень налагоджування"
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "ФАЙЛ"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr "встановити назву файлу для виходу налагоджування"
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, c-format
+msgid "cannot open %s"
+msgstr "не вдається відкрити %s"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "забагато аргументів"
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Хибна команда"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "Це не схоже на архів tar"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Записано загалом"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "Прочитано байтів загалом"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Видалено загалом: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(канал)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Недійсне значення record_size"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "Не вказано назви архіву"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "Неможливо перевіряти архів, записаний до stdout"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "Архів стиснений. Використовуйте опцію %s"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "Не можна оновлювати стиснені архіви"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "На початку стрічки, закінчуємо"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Надто багато помилок, виконання перервано"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
@@ -635,7 +678,7 @@ msgstr[0] "Розмір запису = %lu блок"
 msgstr[1] "Розмір запису = %lu блоки"
 msgstr[2] "Розмір запису = %lu блоків"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
@@ -643,39 +686,39 @@ msgstr[0] "Невірне вирівнювання блоку (%lu байт) в
 msgstr[1] "Невірне вирівнювання блоку (%lu байти) в архіві"
 msgstr[2] "Невірне вирівнювання блоку (%lu байтів) в архіві"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr ""
 "Не вдалося переміститись назад у архіві; можливо архів не можна прочитати "
 "без опції -i"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek не зупинився на межі запису"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: містить невірний номер тому"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Переповнення номера тому"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Підготуйте том #%d архіву %s ї натиснить return: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "Кінець файлу, замість очікуваної відповіді"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "ПОПЕРЕДЖЕННЯ: Незавершений архів"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -686,66 +729,66 @@ msgstr ""
 " q          Перервати роботу\n"
 " у або новий рядок  Продовжувати\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !          Викликати оболонку\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?          Вивести цю довідку\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Новий том відсутній. Завершення.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "Не вказано назви файлу. Спробуйте ще раз.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "Недійсні вхідні дані. Наберіть ? щоб отримати підказку.\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "збій виконання `%s'"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr ""
 "%s можливо продовжується у цьому томі: заголовок містить обрізану назву"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s не продовжується у цьому томі"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s є неправильним розміром (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Цей том є за межами послідовності (%s - %s != %s)"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "Назви тому відсутня в архіві. Не можна порівняти з %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Етикетка тому %s не співпадає з %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
@@ -753,11 +796,11 @@ msgstr ""
 "%s: назва файлу надто довга щоб зберегти її у заголовку тому GNU; назву "
 "обрізано"
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
 msgstr "запис не закінчився на межі блоку"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
@@ -765,49 +808,49 @@ msgstr[0] "Вдалося прочитати тільки %lu з %lu байта"
 msgstr[1] "Вдалося прочитати тільки %lu з %lu байтів"
 msgstr[2] "Вдалося прочитати тільки %lu з %lu байтів"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Різниця у змісті"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "Неочікуваний кінець файла в архіві"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Різниця у типі файлу"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Різниця у правах доступу"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Різниця у значенні UID"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Різниця у значенні GID"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Різниця у часі модифікації"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Різниця у розмірі"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Не є посиланням до %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Різниця у символічному посиланні"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Різниця у номері пристрою"
 
@@ -829,7 +872,7 @@ msgstr "Архів містить назви файлів без поперед
 msgid "Verification may fail to locate original files."
 msgstr "Перевірка може не знайти первинних файлів."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
@@ -837,28 +880,28 @@ msgstr[0] "ПОМИЛКА ПЕРЕВІРКИ: знайдено %d невірни
 msgstr[1] "ПОМИЛКА ПЕРЕВІРКИ: знайдено %d невірних заголовки"
 msgstr[2] "ПОМИЛКА ПЕРЕВІРКИ: знайдено %d невірних заголовків"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "Самотній блок нулів, зсув %s"
 
 # Не подобається мені це "кешування"...
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: містить мітку каталогу кешування `%s'; %s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "Значення %s поза межами діапазону типа %s %s..%s; заміна на %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "значення %s за межами діапазону типа %s %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Створення від'ємних вісімкових заголовків"
 
@@ -877,7 +920,7 @@ msgstr "%s: назва файлу занадто довга (не вдаєтьс
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: назва посилання занадто довга; не архівується"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
@@ -885,286 +928,272 @@ msgstr[0] "%s: Файл скоротився на %s байт; заповнен
 msgstr[1] "%s: Файл скоротився на %s байти; заповнення нулями"
 msgstr[2] "%s: Файл скоротився на %s байтів; заповнення нулями"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: файл знаходиться в іншої файлової системі; не архівується"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr "вміст не архівується"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Невідомий тип файла; Файл проігноровано"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, c-format
-msgid "Missing links to %s.\n"
-msgstr "Відсутні деякі посилання до `%s'.\n"
+msgid "Missing links to %s."
+msgstr "Відсутні деякі посилання до %s."
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: файл не змінено; не архівується"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
 msgstr "%s: файл є архівом; не архівується"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Файл було видалено перед тим як tar встиг його прочитати"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr "каталог не архівується"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: файл змінився під час читання"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: гніздо ігнорується"
 
 # FIXME: door?
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: двері ігноруються"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Перехід до наступного заголовка"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "Видалення не-заголовка з архіву"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: неймовірно стара дата %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: мітка часу %s зсунута на %s сек. до майбутнього"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Неочікувана суперечність під час створення каталогу"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Каталог перейменовано перед тим, як tar встиг витягнути його стан"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Витягування безперервних файлів у звичайні"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Спроба перетворити символічні посилання на жорсткі"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Зчитування %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Не вдається витягнути -- файл починається в іншому томі"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "Неочікуваний кінець файла у заголовку довгої назви"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Невідомий тип файлу `%c', спроба витягнути його як звичайний файл"
 
 # FIXME: або сучасний?
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "Існуючий файл `%s' є новіший"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Не вдалося створити резервну копію цього файла"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "Не вдається перейменувати %s на %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Невиправна помилка: завершення роботи"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Каталог перейменовано з %s"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Каталог перейменовано"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Новий каталог"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Невірний час файлу"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Невірна дата модифікації (секунди)"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "Недійсний час модифікації (наносекунди)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Невірний номер пристрою"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Невірний номер і-вузла"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "З файла-знімка прочитано надто довге поле"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "Помилка читання файла-знімка"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "Неочікуваний кінець файла-знімка"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "Неочікуваний кінець файла-знімка"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "Бракує ознаки кінця запису"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "Неправильний формат файла знімку"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr "Такий інкрементний формат не підтримується: %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr ""
 "Неправильно сформований dumpdir: очікувалося '%c' натомість знайдено %#3o"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "Неправильно сформований dumpdir: 'X' вказаний двічі"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "Невірний формат dumpdir: пуста назва у `R'"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "Невірний формат dumpdir: `T' без попереднього `R'"
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "Невірний формат dumpdir: пуста назва у `T'"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr ""
 "Невірний формат dumpdir: очікувалося `%c', натомість знайдено кінець файла"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr "Невірний формат dumpdir: `X' не використаний"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Не вдається створити тимчасовий каталог використовуючи шаблон %s"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: Каталог не очищується: не вдалося виконати stat"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: Каталог знаходиться на іншому пристрої: не очищується"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Стирання %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Не вдається видалити"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Пропускається"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "блок %s: ** Містить нулі **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "блок %s: ** Кінець файлу **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "блок %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Пробіли у заголовку замість очікуваного числового значення типу %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
@@ -1172,17 +1201,17 @@ msgstr ""
 "вважається, що це є двійкове доповнення"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "Вісімкове значення %.*s знаходиться поза межами діапазону типу %s"
 
 # FIXME: base=64?
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "Архів містить застарілі заголовки з основою 64"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr ""
@@ -1190,128 +1219,146 @@ msgstr ""
 "типу %s"
 
 # FIXME: base-256
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "Значення з основою 256 поза допустимими межами типу %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "Знайдено %.*s замість числового значення типу %s"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "Значення %s поза допустимими межами типу %s %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr "посилання до %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr "невідомий тип файла %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Довге посилання--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Довга назва--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Заголовок тому--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Продовжується з байту %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Створення каталогу:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Перейменовано %s у %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Не вдається перейменувати на %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Перейменовано %s назад у %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Не вдається зберегти поточний каталог"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Не вдається змінити поточний каталог"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Файл було видалено перед тим як tar встиг його прочитати"
+
+#: src/misc.c:774
+#, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Каталог було видалено перед тим як tar встиг його прочитати"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "процес-нащадок"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "канал між процесами"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
-msgstr "Назви файлів містять символи-шаблони.  Будь ласка, користайтеся"
+#: src/names.c:601
+msgid "Pattern matching characters used in file names"
+msgstr "Назви файлів містять символи-шаблони"
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr ""
-"опцією --wildcards аби увімкнути шаблони, або опцією --no-wildcards, щоб"
+"Користайтеся опцією --wildcards аби увімкнути шаблони, або опцією --no-"
+"wildcards, щоб позбутися цього повідомлення"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "усунути це повідомлення."
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s: Не знайдено в архіві"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s: Потрібну копію у архіві не знайдено"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+"Використання опції -C у переліку файлів разом з опцією --listed-incremental "
+"не дозволяється"
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr "Разом з --listed-incremental дозволяється лише одна опція -C"
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Обидві опції -%s і -%s вимагають доступу до стандартного входу"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s: Невірний формат архіву"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "Формат архіву є несумісним з розширеними властивостями GNU"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
@@ -1319,7 +1366,7 @@ msgstr ""
 "Невідомий стиль цитування `%s'. Наберіть `%s --quoting-style=help' аби "
 "отримати перелік стилів."
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1338,7 +1385,7 @@ msgstr ""
 "                               # archive.tar\n"
 "  tar -xf archive.tar          # Витягує усі файли з archive.tar.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1360,88 +1407,81 @@ msgstr ""
 "                  інакше - прості\n"
 "  never, simple   завжди створювати прості резервні копії\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Режими роботи:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "вивести вміст архіву"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "витягнути файли з архіву"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "створити новий архів"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "порівняти файли в архіві з файлами у файлової системі"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "долучити файли до існуючого архіву"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "долучати тільки такі файли, що є новішими за їх копії в архіві"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "долучити архів до архіву"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "видалити файли з архіву (не на стрічці!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr "перевірити мітку тому та вийти"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Модифікатори режиму роботи:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "заощаджувати простір під час зберігання розсіяних файлів"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr "ГОЛОВНИЙ[.ДРУГОРЯДНИЙ]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr "встановлює версію формату розсіяних файлів (вмикає --sparse)"
 
 # FIXME: incremental
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "обробка старого формату інкрементного архіву GNU"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "ФАЙЛ"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "обробка нового формату інкрементного архіву GNU"
 
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr "рівень архівної копії для створення інкрементного архіву"
+
 # FIXME: хммм...
-#: src/tar.c:408
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "ігнорувати помилки читання файлів"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "ЧИСЛО"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1453,119 +1493,122 @@ msgstr ""
 "з переліком файлів (у командному рядку або за допомогою опції -T). Типове "
 "ЧИСЛО: 1."
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "архів підтримує операцію seek"
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr "архів не підтримує операцію seek"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr "не перевіряти номери пристрою під час створювання інкрементних архівів"
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr ""
 "перевіряти номери пристрою під час створювання інкрементних архівів (типово)"
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "Керування перезаписом:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "перевірити архів після запису в нього"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "видаляти файли після додавання до архіву"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "не заміняти існуючи файли під час витягування"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr "не заміняти існуючи файли що є новішими за їх копії у архіві"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "перезаписувати існуючі файли під час витягування"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "видаляти кожний файл перед витягуванням його копії"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "спорожняти старий каталог перед витягуванням його копії з архіву"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "зберігати мета-дані існуючих каталогів"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 "перезаписувати метадані існуючих каталогів під час витягування (типово)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Вибір вихідного потоку:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "витягувати файли у стандартний вивід"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "КОМАНДА"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "передавати витягнуті файли до стандартного вводу іншої програми"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "ігнорувати коди завершення процесів-нащадків"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr "вважати ненульовий код завершення нащадка помилкою"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Обробка атрибутів файлу:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "встановлення вказаного користувача власником доданих файлів"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "встановлення групи з вказаною назвою групою власника доданих файлів"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "ДАТА-АБО-ФАЙЛ"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "встановлення часу останньої зміни доданих файлів"
 
 # Ну, і чому це CHANGES??
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "ПРАВА"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "встановлення вказаних символічно прав доступу для доданих файлів"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "МЕТОД"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1575,29 +1618,33 @@ msgstr ""
 "читання (типово, МЕТОД='replace'), або через запобігання оновленню часу "
 "(МЕТОД='system')"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "не витягувати час модифікації файлів"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
-msgstr "витягувати назву власника файлів"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
+msgstr ""
+"встановлювати власників файлів за даними з архіву (типово для супер-"
+"користувача)"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
-msgstr "стати власником витягнутих файлів"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
+msgstr "стати власником витягнутих файлів (типово для звичайного користувача)"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "завжди використовувати числа замість назв власника/групи"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 "встановлювати права доступу згідно з даними архіву (типово для супер-"
 "користувача)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
@@ -1605,15 +1652,15 @@ msgstr ""
 "встановлювати права доступу згідно зі значенням umask (типово для звичайного "
 "користувача)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "витягувати файли у порядку їх з'явлення в архіві"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "те ж, що -p -s разом"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
@@ -1621,139 +1668,139 @@ msgstr ""
 "затримати встановлення часу модифікації та прав доступу до каталогів до "
 "кінця витягування"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "відмінити дії опції --delay-directory-restore"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "Вибір та зміна пристрою:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "АРХІВ"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "використовувати вказаний файл або пристрій"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "файл архіву є локальним, навіть якщо його назва містить двокрапку"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "використовувати вказану команду замість rmt"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "використовувати вказану команду замість rsh"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "визначає пристрой та густину"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "створити, виводити зміст або витягувати файли з багатотомного архіву"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "змінити стрічку після запису ЧИСЛА x 1024 байтів"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "запускати сценарій наприкінці кожної стрічки (вмикає -M)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "використовувати/обновляти номер тому у ФАЙЛІ"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Блокування пристрою:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "ЧИСЛО-БЛОКІВ"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "розмір запису ЧИСЛО-БЛОКІВ x 512 байтів"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "встановити розмір запису у блоках по 512 байтів"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "ігнорувати нульові блоки в архіві (звичайно вказують кінець файлу)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "розбивати на блоки під час читання (для каналів 4.2BSD)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "Вибір формату архіву:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "ФОРМАТ"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "створити архів у вказаному форматі"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "ФОРМАТ будь-який з наступних:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "старий формат V7"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "формат GNU, сумісний з версією tar <= 1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "формат GNU, сумісний з версією tar 1.13.x"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "формат POSIX 1003.1-1988 (ustar)"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "формат POSIX 1003.1-2001 (pax)"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "те ж, що і pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "те ж, що і --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "те ж, що і --format=posix"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "ключове_слово[[:]=значення][,ключове_слово[[:]=значення], ...]\""
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "керування ключовими словами pax"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "ТЕКСТ"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
@@ -1761,103 +1808,77 @@ msgstr ""
 "створити архів з назвою тому \"ТЕКСТ\". Під час виводу змісту або "
 "витягування, використовувати ТЕКСТ як шаблон пошуку тому"
 
-#: src/tar.c:593
+#: src/tar.c:613
 msgid "Compression options:"
 msgstr "Опції стиснення:"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
 msgstr "вибирати програму стиснення за суфіксом архіву"
 
-#: src/tar.c:597
-#, fuzzy
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
 msgstr "не використовувати суфікс для вибору програми стиснення"
 
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "використовувати bzip2 для стиснення/розтискання архіву"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "використовувати gzip для стиснення/розтискання архіву"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "використовувати compress для стиснення/розтискання архіву"
-
-#: src/tar.c:609
-msgid "filter the archive through lzma"
-msgstr "використовувати lzma для стиснення/розтискання архіву"
-
-#: src/tar.c:611
-msgid "filter the archive through lzop"
-msgstr "використовувати lzop для стиснення/розтискання архіву"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "використовувати gzip для стиснення/розтискання архіву"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "ПРОГРАМА"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "використовувати ПРОГРАМУ для стиснення/розтискання архіву"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Вибір файлів:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr "долучити ФАЙЛ до архіву (корисне, якщо його назва починається з -)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "КАТАЛОГ"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "перейти до вказаного каталогу"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "читати назви файлів для додання/витягування з вказаного файла"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr ""
 "файл, вказаний з опцією -T, містить назви, відокремлені нульовими символами. "
 "Ця опція вимикає -C"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr "відмінити дію попередньої опції --null"
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr "усувати цитування з назв файлів прочитаних за допомогою -T (типово)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr "не усувати цитування з назв файлів прочитаних за допомогою -T"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "ШАБЛОН"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "не обробляти файли, назви яких відповідають вказаному шаблону"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "виключити назви що відповідають шаблонам, вказаним у файлі"
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
@@ -1865,88 +1886,92 @@ msgstr ""
 "не архівувати файли в каталогах, що містять CACHEDIR.TAG, з винятком самого "
 "файлу"
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "не архівувати жодні файли в каталогах, що містять CACHEDIR.TAG"
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "не архівувати каталоги, що містять CACHEDIR.TAG"
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr ""
 "не архівувати файли в каталогах, що містять ФАЙЛ, з винятком самого файлу"
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr "не архівувати жодні файли в каталогах, що містять ФАЙЛ"
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr "не архівувати каталоги, що містять ФАЙЛ"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr "не архівувати каталоги систем керування версіями"
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr "не архівувати резерві файли та файли блокування"
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "не заходити автоматично у каталоги"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "залишатися у локальної файлової системі під час створення архіву"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "рекурсивно проходити каталоги (типово)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "не видаляти початкову косу риску `/' з назв файлів"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr "Йти за символьними посиланнями: долучати файли, на яки вони вказують"
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr "Йти за жорсткими посиланнями: долучати файли, на яки вони вказують"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "НАЗВА-ФАЙЛУ"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "починати обслуговування архіву з вказаного файлу"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "долучати тільки такі файли, що є новіші за вказану дату або файл"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "ДАТА"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "порівнювати тільки дату і час зміни даних"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "РЕЖИМ"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "перед видаленням створювати резервні файли у вказаному режимі"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "РЯДОК"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1954,90 +1979,98 @@ msgstr ""
 "перед видаленням створювати резервні файли з указаним суфіксом (типово '~', "
 "якщо не перевизначено змінною середовища SIMPLE_BACKUP_SUFFIX)"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr "Перетворювання назв файлів:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr "видаляти вказане ЧИСЛО компонентів з початку назв файлів"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "ВИРАЗ"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr "перетворювати назви файлів за допомогою вказаного виразу заміни"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 "Керування порівнюванням назв (впливає на взірці як вилучення, так і "
 "долучення):"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr "шаблони ігнорують відмінності у регістрі символів"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr "порівнювати шаблони з назвами файлів починаючи від початку назви"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr ""
 "порівнювати шаблони з назвами файлів починаючи від будь-якого / (типово)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr "шаблони враховують регістр (типово)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr "користатися шаблонами (типово для вилучення)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "порівнювати назви буквально"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr "шаблони не стосуються до '/'"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr "шаблони стосуються до '/' (типово)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Інформативний вивід:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "виводити докладну інформацію про оброблені файли"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr "КЛ.-СЛОВО"
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr "керування попередженнями"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr "виводити контрольне повідомлення кожне ЧИСЛО записів (типово 10)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr "ДІЯ"
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr "виконати вказану дію у контрольному пункті"
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "виводити повідомлення якщо до архіву було додано не всі посилання"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "СИГНАЛ"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -2048,27 +2081,27 @@ msgstr ""
 "- друкувати статистику по отриманню цього сигналу; дозволеними сигналами є "
 "SIGHUP, SIGQUIT, SIGINT, SIGUSR1 і SIGUSR2, а також ці назви без префікса SIG"
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "друкувати час модифікації файлів у UTC"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "виводити детальну інформацію у ФАЙЛ"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "попереджувати кожне повідомлення номером блоку в архіві"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "Запитувати підтвердження кожної дії"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "вивести типові налаштування"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
@@ -2076,31 +2109,31 @@ msgstr ""
 "під час виведення змісту або витягування файлів друкувати назви каталогів що "
 "не відповідають критеріям пошуку"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr "показувати перетворені назви файлів"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "СТИЛЬ"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr "встановити стиль цитування; дозволені стилі див. нижче"
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "цитувати також вказані символи"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "вимкнути цитування вказаних символів"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Опції сумісності:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
@@ -2108,56 +2141,63 @@ msgstr ""
 "під час створення архіву, те ж саме, що і --old-archive. Під час "
 "витягування, те ж саме, що --no-same-owner"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Інші опції:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "заборонити користування деякими потенційно небезпечними опціями"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
-msgstr "Не можна вказувати більш ніж одну з опцій `-Acdtrux'"
+#: src/tar.c:927
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
+msgstr ""
+"Не можна вказувати більш ніж одну з опцій `-Acdtrux' або `--test-label'"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Опції стиснення конфліктують одна з другою"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "Невідомий тип файла %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "Не знайдено файл-зразок дати"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Використовується %s замість невідомого формату дати %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "Опція %s: Дату `%s' сприйнято як %s"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s: перелік файлів уже прочитано"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s: прочитана назва файла містить нульовий символ"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, c-format
+msgid "filter the archive through %s"
+msgstr "фільтрувати архів через %s"
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr "Допустимими аргументами опції --quoting-style є:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2165,48 +2205,51 @@ msgstr ""
 "\n"
 "Типові налаштування *цієї* копії програми:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Неправильний фактор блокування"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Неправильна довжина стрічки"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr "Недійсне значення для рівня архівації"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Більш ніж одна гранична дата"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr "Недійсна версія формату розсіяних файлів"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr "опція --atime-preserve='system' не підтримується на цій платформі"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr "аргумент --checkpoint мусить бути цілим числом"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
-msgstr "%s: Невірна група"
+#: src/tar.c:1830
+msgid "Invalid group"
+msgstr "Недійсна група"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Невірний формат прав доступу"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Невірне число"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Невірний власник"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
@@ -2214,65 +2257,69 @@ msgstr ""
 "Опція --preserve є застарілою, замість неї використовуйте --preserve-"
 "permissions --preserve-order"
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Невірний розмір запису"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Розмір запису має ділитися на %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Невірна кількість елементів"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr "Дозволяється лише одна опція --to-command"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "Невірний аргумент вказання густини: `%s'"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "Невідома густина: `%c'"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "Опції `-[0-7][lmh]' не підтримуються *цією* версією tar"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[ФАЙЛ]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Стара опція `%c' потребує аргументу"
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "вказання --occurrence не має сенсу без вказання переліку файлів"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr ""
 "опцію --occurrence не можна використовувати у зазначеному режимі роботи"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "Вказання декількох файлів потребує вказання опції `-M'"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Не можна використовувати --listed-incremental разом з --newer"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr "Використання --level разом з --listed-incremental не має сенсу"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
@@ -2280,47 +2327,47 @@ msgstr[0] "%s: Мітка тому є надто довга (обмеження
 msgstr[1] "%s: Мітка тому є надто довга (обмеження в %lu байти)"
 msgstr[2] "%s: Мітка тому є надто довга (обмеження в %lu байтів)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "Не можна перевіряти багатотомні архіви"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "Не можна перевіряти стиснені архіви"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "Не можна використовувати стиснення багатотомних архівів"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "Не можна з'єднувати стиснені архіви"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "Опція --pax-option використовується тільки з архівами у форматі POSIX"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr "Розмір тому не може бути більшим від розміру запису"
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr "Опція --preserve-order несумісна з --listed-incremental"
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "Полохливо відмовляюся створювати пустий архів"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Опції `-Aru' несумісні з `-f -'"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
-msgstr "Необхідно вказати одну з опцій `-Acdtrux'"
+#: src/tar.c:2592
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
+msgstr "Необхідно вказати одну з опцій `-Acdtrux' або `--test-label'"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr "Невдачне завершення внаслідок попередніх помилок"
@@ -2333,84 +2380,88 @@ msgstr[0] "%s: Файл скоротився на %s байт"
 msgstr[1] "%s: Файл скоротився на %s байти"
 msgstr[2] "%s: Файл скоротився на %s байтів"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "Ключове слово %s не є відоме або ще не реалізоване"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+msgid "Time stamp is out of allowed range"
+msgstr "Значення позначки часу поза допустимими межами"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "Шаблон %s забороняється уживати"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "Не можна перевизначити ключове слово %s"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "Невірно сформований розширений заголовок: бракує довжини"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr "Довжина розширеного заголовку є за межами діапазону"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "Довжина розширеного заголовку %*s є за межами діапазону"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr ""
 "Невірно сформований розширений заголовок: відсутній пробіл після довжини"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Невірно сформований розширений заголовок: відсутній знак рівняння"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr "Невірно сформований розширений заголовок: відсутній знак нового рядка"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr "Невідоме ключове слово `%s' іґнорується"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr "Створена пара ключове слово/значення є за довга (ключ=%s, довжина=%s)"
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr ""
 "Значення розширеного заголовку %s=%s лежить поза допустимими межами типу %s.."
 "%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Невірно сформований розширений заголовок: недійсна змінна %s=%s"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Невірно сформований розширений заголовок: зайвий %s=%s"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 "Невірно сформований розширений заголовок: змінна %s: неочікуваний розділювач "
 "%c"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr "Невірно сформований розширений заголовок %s: непарна кількість значень"
@@ -2451,7 +2502,7 @@ msgstr "Контрольна відмітка запису %u"
 msgid "Read checkpoint %u"
 msgstr "Контрольна відмітка читання %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
@@ -2459,85 +2510,90 @@ msgstr ""
 "genfile - програма обробки файлів з набору перевірок пакету GNU paxutils\n"
 "Перелік опцій:\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr "Опції створювання файлів:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "РОЗМІР"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "Створити файл заданого розміру"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "Писати у вказаний файл, замість стандартного виводу"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "Читати назви файлів з вказаного файлу"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr ""
 "файл, вказаний з опцією -T, містить назви, відокремлені нульовими символами"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 "Взірець заповнення файла: 'default' (типовий) або 'zeros' (заповнення нулями)"
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "Розмір блока розсіяного файла"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr "Створити розсіяний файл. Решта аргументів дає мапу файла."
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr "ЗСУВ"
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr "Перед записом даних перейти до вказаного зсуву в файлі"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr "Статистика файлів:"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr "Виводити вміст структури stat для кожного файла. Типовий формат: "
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr "Синхронне виконання:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+msgid "OPTION"
+msgstr "ОПЦІЯ"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
-"Виконати вказану команду. Для ужитку з опціями --cut, --append або --touch"
+"Виконати вказану команду. Для використання з опціями --cut, --append, --"
+"touch або --unlink"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr ""
 "Виконати вказану операцію (див. нижче) по досягненню контрольної відмітки"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr "Встановлює дати для наступної опції --touch"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr "Друкувати виконані операції і код завершення команди"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
@@ -2545,7 +2601,7 @@ msgstr ""
 "Операції синхронного виконання. Виконуються по досягненню контрольної "
 "відмітки, вказаної опцією --checkpoint. "
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
@@ -2553,140 +2609,139 @@ msgstr ""
 "Обрізати файл до розміру, вказаного попередньою опцією --length (до 0, якщо "
 "її не було вказано)"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr "Додати до файла кількість байтів, вказану попередньою опцією --length."
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "Поновити час доступу та модифікації файла"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "Виконати КОМАНДУ"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr "Видалити файл"
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "Невірний розмір: %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Число поза допустимими межами: %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr "Від'ємний розмір: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "збій виконання stat(%s)"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr "замовлений розмір файлу %lu, справжній -- %lu"
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr "створений файл не є розсіяним"
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "Помилка розбору числа біля `%s'"
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "Невідомий формат дати"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[АРГУМЕНТИ...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "не вдається відкрити `%s'"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 msgid "cannot seek"
 msgstr "не вдається виконати lseek"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "назва файла містить нульовий символ"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 "неможливо створювати розсіяні файли на стандартному виводі; користайтеся "
 "опцією --file"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "недійсна маска (біля `%s')"
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr "Невідоме поле `%s'"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "не вдається встановити час файла `%s'"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, c-format
+msgid "cannot unlink `%s'"
+msgstr "не вдається видалити `%s'"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "Команда завершилася успішно\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "Команда завершилася з кодом %d\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "Команда завершилася по сигналу %d\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "Команда зупинилася по сигналу %d\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "Команда скинула відбиток пам'яті\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "Команда завершилася\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "опція --stat вимагає назв файлів"
-
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "забагато аргументів"
-
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
-#~ msgstr ""
-#~ "Попередження: опція -I не підтримується. Можливо ви маєте на увазі -j або "
-#~ "-T?"
index 284ed3c1e4f3b73c28c1f1e1255bd960ca1cacbb..b2c6f5d90fbb06e9ccf86d5ccd75944d3d43cb99 100644 (file)
Binary files a/po/vi.gmo and b/po/vi.gmo differ
index 93b1e8bb9279452e843f76872db73b8afeb6af16..47c0c2e42b37bcc1da7fa4687ba834b13e4f4627 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -1,15 +1,15 @@
 # Vietnamese translation for Tar.
-# Copyright © 2009 Free Software Foundation, Inc.
+# Copyright © 2010 Free Software Foundation, Inc.
 # This file is distributed under the same license as the tar package.
 # Phan Vinh Thinh <teppi82@gmail.com>, 2005.
-# Clytie Siddall <clytie@riverland.net.au>, 2007-2009.
+# Clytie Siddall <clytie@riverland.net.au>, 2007-2010.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: tar 1.21\n"
+"Project-Id-Version: tar 1.22.91\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
-"PO-Revision-Date: 2009-01-27 18:57+0930\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
+"PO-Revision-Date: 2010-02-13 17:50+0930\n"
 "Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
 "Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
 "MIME-Version: 1.0\n"
@@ -18,47 +18,47 @@ msgstr ""
 "Plural-Forms: nplurals=1; plural=0;\n"
 "X-Generator: LocFactoryEditor 1.8\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "tham số không thích hợp %s cho %s"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "tham số không rõ ràng %s cho %s"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "Các tham số đúng là:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: giá trị %s nhỏ hơn hay bằng %s"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: tham số ARGP_HELP_FMT yêu cầu một giá trị"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: tham số ARGP_HELP_FMT phải là số dương"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: Tham số không rõ ARGP_HELP_FMT"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "Có rác trong ARGP_HELP_FMT: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
@@ -66,232 +66,143 @@ msgstr ""
 "Tham số ủy nhiệm hay tham số không bắt buộc cho các tùy chọn dài cũng đồng "
 "thời là ủy nhiệm hay không bắt buộc cho các tùy chọn ngắn tương ứng."
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "Sử dụng:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr "  hoặc: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [TÙY CHỌN...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "Hãy thử `%s --help' hoặc `%s --usage' để biết thêm thông tin.\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "Báo cáo lỗi tới %s.\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "Lỗi hệ thống không rõ"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "hiển thị trợ giúp này"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "hiển thị cách sử dụng ngắn gọn"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "TÊN"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "đặt tên chương trình"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "GIÂY"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "treo trong vòng GIÂY giây (mặc định 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "In ra phiên bản chương trình"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(LỖI CHƯƠNG TRÌNH) Không rõ phiên bản !?"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s: Quá nhiều đối số\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr "(LỖI CHƯƠNG TRÌNH) Tùy chọn nên được nhận ra !?"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr "lỗi ghi"
 
-#: lib/getopt.c:526 lib/getopt.c:542
+#: gnu/getopt.c:531 gnu/getopt.c:547
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
-msgstr "%s: tùy chọn `%s' không rõ ràng\n"
+msgid "%s: option '%s' is ambiguous\n"
+msgstr "%s: tùy chọn « %s » vẫn mơ hồ\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
+#: gnu/getopt.c:580 gnu/getopt.c:584
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
-msgstr "%s: tùy chọn `--%s' không cho phép một tham số\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: tùy chọn « --%s » không cho phép đối số\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
+#: gnu/getopt.c:593 gnu/getopt.c:598
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
-msgstr "%s: tùy chọn `%c%s' không cho phép một tham số\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: tùy chọn « %c%s » không cho phép đối số\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
-msgstr "%s: tùy chọn `%s' yêu cầu một tham số\n"
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: tùy chọn « %s » yêu cầu một đối số\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
+#: gnu/getopt.c:698 gnu/getopt.c:701
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
-msgstr "%s: tùy chọn không nhận ra `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: không nhận ra tuỳ chọn « --%s »\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
+#: gnu/getopt.c:709 gnu/getopt.c:712
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
-msgstr "%s: tùy chọn không nhận ra `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: không nhận ra tuỳ chọn « %c%s »\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
+#: gnu/getopt.c:761 gnu/getopt.c:764
 #, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: tùy chọn không cho phép -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: tùy chọn sai -- « %c »\n"
 
-#: lib/getopt.c:768 lib/getopt.c:771
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
 #, c-format
-msgid "%s: invalid option -- %c\n"
-msgstr "%s: tùy chọn không đúng -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: tùy chọn yêu cầu một đối số -- « %c »\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
+#: gnu/getopt.c:884 gnu/getopt.c:900
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: tùy chọn cần một tham số -- %c\n"
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: tùy chọn « -W %s » vẫn mơ hồ\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
+#: gnu/getopt.c:924 gnu/getopt.c:942
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
-msgstr "%s: tùy chọn `-W %s' không rõ ràng\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: tùy chọn « -W %s » không cho phép đối số\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
-msgstr "%s: tùy chọn `-W %s' không yêu cầu một tham số\n"
-
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "cạn bộ nhớ"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, c-format
 msgid "unable to record current working directory"
 msgstr "Không thể thu thư mục làm việc hiện thời"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, c-format
 msgid "failed to return to initial working directory"
 msgstr "không trở được về thư mục làm việc đầu tiên"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s: Không thể %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s: Cảnh báo: Không thể %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s: Không thay đổi được chế độ thành %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s: Không thay đổi được quyền sở hữu thành uid %lu, gid %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s: Không tạo được liên kết cứng tới %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Lỗi đọc tại byte %s, trong khi đọc %lu byte"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s: Cảnh báo: Lỗi đọc tại byte %s, trong khi đọc %lu byte"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s: Không thể tìm tới %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s: Cảnh báo: Không thể tìm tới %s"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s: Không tạo được liên kết mềm tới %s"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%s: Chỉ ghi nhớ %lu từ %lu byte"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "Xóa bỏ phần dẫn đầu `%s' từ tên của các thành viên"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "Xóa bỏ phần dẫn đầu `%s' từ đích đến của các liên kết cứng"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "Đang thay thế `.' cho tên rỗng của các thành viên"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "Đang thay thế `.' cho đích đến rỗng của liên kết cứng"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -305,17 +216,17 @@ msgstr "Đang thay thế `.' cho đích đến rỗng của liên kết cứng"
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "`"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "'"
 
@@ -325,7 +236,7 @@ msgstr "'"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[cCyY]"
 
@@ -335,39 +246,28 @@ msgstr "^[cCyY]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[kKnN]"
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: Dịch vụ không làm việc"
-
-#: lib/rtapelib.c:303
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdin"
-msgstr "Ä\91ầu vào tiêu chuẩn"
+msgid "Packaged by %s (%s)\n"
+msgstr "Ä\90óng gói bá»\9fi %s (%s)\n"
 
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:79
 #, c-format
-msgid "stdout"
-msgstr "đầu ra tiêu chuẩn"
-
-#: lib/rtapelib.c:512
-#, c-format
-msgid "Cannot execute remote shell"
-msgstr "Không thể chạy shell ở xa"
+msgid "Packaged by %s\n"
+msgstr "Đóng gói bởi %s\n"
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr "©"
 
-#: lib/version-etc.c:67
-#, fuzzy
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -384,19 +284,19 @@ msgstr ""
 "\n"
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr "Tác giả: %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr "Tác giả: %s và %s.\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "Tác giả: %s, %s và %s.\n"
@@ -404,7 +304,7 @@ msgstr "Tác giả: %s, %s và %s.\n"
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -416,7 +316,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -428,7 +328,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -440,7 +340,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -452,7 +352,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -466,7 +366,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -480,7 +380,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -495,178 +395,320 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 "\n"
-"Thông báo lỗi tới <%s>.\n"
+"Báo cáo lỗi nào cho: %s\n"
+"Báo cáo lỗi dịch nào cho Clytie: <clytie@riverland.net.au>\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:249
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
-msgstr ""
+msgid "Report %s bugs to: %s\n"
+msgstr "Báo cáo lỗi %s nào cho: %s\n"
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
+#: gnu/version-etc.c:253
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Trang chủ %s: <%s>\n"
+
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+msgstr "Trang chủ %s : <http://www.gnu.org/software/%s/>\n"
+
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
+"Trợ giúp chung về cách sử dụng phần mềm GNU : <http://www.gnu.org/gethelp/>\n"
+
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s: Không thể %s"
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "Chuỗi gõ quá dài"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s: Cảnh báo: Không thể %s"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "Lỗi cú pháp con số"
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s: Không thay đổi được chế độ thành %s"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd: Không thể phân phối không gian cho bộ đệm\n"
+#: lib/paxerror.c:101
+#, c-format
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s: Không thay đổi được quyền sở hữu thành uid %lu, gid %lu"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "Không thể phân phối không gian cho bộ đệm"
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s: Không tạo được liên kết cứng tới %s"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:179 lib/paxerror.c:211
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "Hãy thử `%s --help' để biết thêm thông tin.\n"
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Lỗi đọc tại byte %s, trong khi đọc %lu byte"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:192
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s: Cảnh báo: Lỗi đọc tại byte %s, trong khi đọc %lu byte"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s: Không thể tìm tới %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s: Cảnh báo: Không thể tìm tới %s"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s: Không tạo được liên kết mềm tới %s"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%s: Chỉ ghi nhớ %lu từ %lu byte"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "Xóa bỏ phần dẫn đầu `%s' từ tên của các thành viên"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "Xóa bỏ phần dẫn đầu `%s' từ đích đến của các liên kết cứng"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "Đang thay thế `.' cho tên rỗng của các thành viên"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "Đang thay thế `.' cho đích đến rỗng của liên kết cứng"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp: Dịch vụ không làm việc"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "đầu vào tiêu chuẩn"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "đầu ra tiêu chuẩn"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"Sử dụng: %s [TÙY_CHỌN]\n"
-"Điều khiển một ổ băng từ, chấp nhận các lệnh từ một tiến trình ở xa.\n"
-"\n"
-"  --version  Đưa ra thông tin phiên bản.\n"
-"  --help  Đưa ra trợ giúp này.\n"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "Lỗi hiệu số tìm nơi"
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "Không thể chạy shell ở xa"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "Hướng tìm kiếm vượt quá vùng cho phép"
+
+#: rmt/rmt.c:419
+msgid "Invalid seek direction"
+msgstr "Sai đặt hướng tìm nơi"
+
+#: rmt/rmt.c:427
+msgid "Invalid seek offset"
+msgstr "Sai đặt khoảng chênh tìm nơi"
+
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
 msgstr "Bộ tìm kiếm vượt quá vùng cho phép"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "Hướng tìm kiếm vượt quá vùng cho phép"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+msgid "Invalid byte count"
+msgstr "Sai đếm byte"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+msgid "Byte count out of range"
+msgstr "Số đếm byte ở ngoại phạm vi"
+
+#: rmt/rmt.c:539
+msgid "Premature eof"
+msgstr "Gặp kết thúc tập tin sớm"
+
+#: rmt/rmt.c:582
+msgid "Invalid operation code"
+msgstr "Mã thao tác sai"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr "Thao tác không được hỗ trợ"
+
+#: rmt/rmt.c:645
+msgid "Unexpected arguments"
+msgstr "Gặp đối số bất thường"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr "Thao tác một ổ băng từ, chấp nhận lệnh từ một tiến trình ở xa"
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "SỐ"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr "đặt cấp gỡ rối"
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "TẬP TIN"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr "đặt tên tập tin kết xuất gỡ rối"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
-msgstr "rmtd: Kết thúc tập tin (eof) sớm\n"
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, c-format
+msgid "cannot open %s"
+msgstr "không thể mở %s"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "Kết thúc sớm của tập tin"
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "quá nhiều đối số"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "Câu lệnh rác"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
-msgstr "Đây có vẻ không phải là một tập tin lưu trữ tar"
+msgstr "Đây có vẻ không phải là một kho lưu tar"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "Tổng số byte đã ghi"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "Tổng số byte đã đọc"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "Tổng số byte đã xoá: %s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(đường ống)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "Giá trị cho record_size không đúng"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
-msgstr "Không đưa ra tên tập tin lưu trữ"
+msgstr "Không đưa ra tên kho lưu"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
-msgstr "Không kiểm tra được tập tin lưu trữ stdin/stdout"
+msgstr "Không kiểm tra được kho lưu stdin/stdout"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
-msgstr "Tập tin lưu trữ được nén. Hãy sử dụng tùy chọn %s"
+msgstr "Kho lưu được nén. Hãy sử dụng tùy chọn %s"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
-msgstr "Không cập nhật được lưu trữ đã nén"
+msgstr "Không cập nhật được kho lưu đã nén"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "Tại đầu băng ghi âm, thoát ra bây giờ"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "Quá nhiều lỗi, đang thoát"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
-msgstr[0] "Khối chưa sắp hàng (%lu byte) trong tập tin lưu trữ"
+msgstr[0] "Kích cỡ mục ghi = %lu khối"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
-msgstr[0] "Khối chưa sắp hàng (%lu byte) trong tập tin lưu trữ"
+msgstr[0] "Khối chưa sắp hàng (%lu byte) trong kho lưu"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
-msgstr "Không thể \"tua\" lại tập tin lưu trữ; nó có thể đọc khi không có -i"
+msgstr ""
+"Không thể \"tua\" lại tập tin kho lưu; nó có thể không đọc được khi không có "
+"« -i »"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek không dừng lại tại một ranh giới bản ghi"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s: chứa số thứ tự khối không đúng"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "Số thứ tự khối thừa ra"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "Chuẩn bị khối #%d cho %s và nhấn Enter: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "Kết thúc tập tin (EOF) khi mong đợi trả lời của người dùng"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
-msgstr "CẢNH BÁO: Tập tin lưu trữ không hoàn thành"
+msgstr "CẢNH BÁO: Kho lưu không hoàn thành"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -677,65 +719,65 @@ msgstr ""
 " q          Dừng tar\n"
 " y hay dòng mới\tTiếp tục lại chạy tiến trình\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !             Tạo một trình bao con\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?             In ra danh sách này\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "Không có khối mới; đang thoát.\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "Chưa ghi rõ tên tập tin: hãy thử lại.\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "Gõ sai. (Gỏ ? để xem trợ giúp.)\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "Câu lệnh %s không thành công"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s có thể tiếp tục trên khối tin này: phần đầu chứa tên bị cắt ngắn"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s không tiếp tục trên khối này"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s là kích thước sai (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "Khối tin này vượt quá dãy cho phép (%s - %s != %s)"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
-msgstr "Tập tin lưu trữ không có nhãn tương ứng với %s"
+msgstr "Kho lưu không có nhãn tương ứng với %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "Khối %s không tương ứng %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
@@ -743,59 +785,59 @@ msgstr ""
 "%s: tên tập tin quá dài để chứa trong một phần đầu đa khối GNU nên bị cắt "
 "ngắn"
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
 msgstr "tiến trình ghi (write) không dừng lại tại một ranh giới khối"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "Chỉ đọc được %lu từ %lu byte"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "Diff nội dung"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
-msgstr "Kết thúc tập tin không mong đợi trong lưu trữ"
+msgstr "Kết thúc tập tin không mong đợi trong kho lưu"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "Diff dạng tập tin"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "Diff chế độ"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Diff Uid"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Diff Gid"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "Diff thời gian sửa đổi"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "Diff kích thước"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "Không liên kết tới %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "Diff liên kết mềm"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "Diff số thứ tự của thiết bị"
 
@@ -812,39 +854,39 @@ msgstr ""
 
 #: src/compare.c:524
 msgid "Archive contains file names with leading prefixes removed."
-msgstr "Tập tin lưu trữ chứa tên tập tin không có tiền tố ở đầu."
+msgstr "Kho lưu chứa tên tập tin không có tiền tố ở đầu."
 
 #: src/compare.c:526
 msgid "Verification may fail to locate original files."
 msgstr "Sự kiểm tra có thể không định vị được các tập tin gốc."
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "LỖI KIỂM TRA: tìm thấy %d phần đầu không đúng"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "Một khối không đơn lẻ tại %s"
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: chứa một thẻ thư mục ghi nhớ tạm %s: %s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "giá trị %s vượt quá %s phạm vi %s..%s; đang thay thế %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "giá trị %s vượt quá %s phạm vi %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "Đang tạo phần đầu hệ tám âm"
 
@@ -863,429 +905,434 @@ msgstr "%s: tên tập tin quá dài (không chia được); không được dum
 msgid "%s: link name is too long; not dumped"
 msgstr "%s: tên liên kết quá dài; không được dump"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s: Tập tin được rút ngắn %s byte; độn vào bắng các số không"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s: tập tin trên một hệ thống tập tin khác; không được dump"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr "chưa đổ nội dung"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s: Không rõ dạng tập tin; tập tin bị lờ đi"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, c-format
-msgid "Missing links to %s.\n"
-msgstr "Thiếu liên kết tới '%s'.\n"
+msgid "Missing links to %s."
+msgstr "Thiếu liên kết tới %s."
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s: tập tin chưa thay đổi; không được dump"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
-msgstr "%s: tập tin là một lưu trữ; không được dump"
+msgstr "%s: tập tin là kho lưu; không được đổ"
 
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s: Tập tin bị xóa trước khi chúng ta đọc nó"
-
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr "chưa đổ thư mục"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
 msgstr "%s: tập tin đã thay đổi khi chúng ta đọc nó"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
 msgstr "%s: socket bị lờ đi"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: cửa (door) bị lờ đi"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "Nhảy tới phần đầu tiếp theo"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
-msgstr "Xóa không phải phần đầu từ lưu trữ"
+msgstr "Xóa không phải phần đầu từ kho lưu"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s: tem thời gian cũ không hợp lý %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s: tem thời gian %s là %s giây trong tương lai"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s: Sự mâu thuẫn không mong đợi khi tạo thư mục"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s: Đổi tên thư mục trước khi có thể giải phóng trạng thái của nó"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "Giải nén các tập tin liền nhau thành những tập tin thông thường"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "Đang thử giải nén liên kết mềm thành liên kết cứng"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "Đọc %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s: Không giải nén được -- tập tin tiếp tục từ khối khác"
 
-#: src/extract.c:1150 src/list.c:1090
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "Phần đầu tên dài không mong đợi"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s: Dạng tập tin không rõ '%c' nên giải nén như tập tin thông thường"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "%s hiện thời là mới hay hay cùng thời"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s: Không thể sao lưu tập tin này"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "Không thể đổi tên %s thành %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "Lỗi không thể phục hồi: thoát bây giờ"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s: Đã đổi tên thư mục từ %s"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s: Đã đổi tên thư mục"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s: Thư mục là mới"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "Tem thời gian không đúng"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "Thời gian sửa đổi không hợp lệ (giây)"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "Thời gian sửa đổi không hợp lệ (nanô-giây)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "Số thứ tự thiết bị không đúng"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "Số thứ tự chỉ mục inode sai"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "Trường quá dài trong khi đọc tập tin ảnh chụp"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "Lỗi đọc trong tập tin ảnh chụp"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "Kết thúc tập tin (EOF) không mong đợi trong tập tin ảnh chụp"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "Giá trị trường không mong đợi trong tập tin ảnh chụp"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "Thiếu dấu giới hạn mục ghi"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "Định dạng tập tin dần sai"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr "Phiên bản định dạng dần không được hỗ trợ : %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr "Thư mục đổ dạng sai: mong đợi « %c » còn tìm %#3o"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "Thư mục đổ dạng sai: « X » đã nhân đôi"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "Thư mục đổ dạng sai: tên rỗng trong « R »"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "Thư mục đổ dạng sai: « T » không có « R » đi trướ"
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "Thư mục đổ dạng sai: tên rỗng trong « T »"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr "Thư mục đổ dạng sai: mong đợi « %c » còn tìm kết thúc dữ liệu"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr "Thư mục đổ dạng sai: « X » không bao giờ dùng"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "Không thể tạo thư mục tạm bằng mẫu %s"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s: Không làm sạch thư mục: không thể lấy trạng thái (stat)"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: thư mục trên một thiết bị khác: không làm sạch"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s: Đang xóa %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s: Không thể xóa bỏ"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s: Đang bỏ đi"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "khối %s: ** Khối của các số không (NUL) **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "khối %s: ** Kết thúc tập tin **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "khối %s: "
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "Khoảng trống trong Phần đầu trong khi mong đợi một giá trị số %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr ""
-"Giá trị hệ tám %.*s của lưu trữ vượt ra phạm vi %s; coi như phần bù của hai"
+"Giá trị hệ tám %.*s của kho lưu vượt ra phạm vi %s; coi như phần bù của hai"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
-msgstr "Giá trị hệ tám %.*s của lưu trữ vượt ra phạm vi %s"
+msgstr "Giá trị hệ tám %.*s của kho lưu vượt ra phạm vi %s"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
-msgstr "Lưu trữ chứa phần đầu base-64 không còn dùng nữa"
+msgstr "Kho lưu chứa phần đầu base-64 không còn dùng nữa"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
-msgstr "Lưu trữ ký chuỗi base-64 %s vượt ra ngoài vùng %s"
+msgstr "Kho lưu ký chuỗi base-64 %s vượt ra ngoài vùng %s"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
-msgstr "Giá trị base-256 của lưu trữ vượt ra ngoài vùng %s"
+msgstr "Giá trị base-256 của kho lưu vượt ra ngoài vùng %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
-msgstr "Lưu trữ chứa %.*s ở chỗ mong đợi giá trị số %s"
+msgstr "Kho lưu chứa %.*s ở chỗ mong đợi giá trị số %s"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
-msgstr "Giá trị lưu trữ %s vượt quá phạm vi %s (%s..%s)"
+msgstr "Giá trị kho lưu %s vượt quá phạm vi %s (%s..%s)"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " liên kết tới %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " dạng tập tin không rõ %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--Liên kết Dài--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--Tên Dài--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--Phần đầu Khối--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--Tiếp tục tại byte %s--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "Đang tạo thư mục:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "Đang đổi tên %s thành %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s: Không thể đổi tên thành %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "Đang đổi tên %s ngược lại thành %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "Không thể ghi nhớ thư mục làm việc"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "Không thay đổi được thư mục làm việc"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s: Tập tin bị xóa trước khi chúng ta đọc nó"
+
+#: src/misc.c:774
+#, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: Thư mục bị xoá trước khi chúng ta đọc nó"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "tiến trình con"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "kênh (channel) giữa các tiến trình"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr "Tên tập tin chứa ký tự khớp mẫu."
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr "Hãy dùng « --wildcards » để hiệu lực khớp mẫu,"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "hoặc dùng « --no-wildcards » để thu hồi cảnh báo này."
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
-msgstr "%s: Không tìm thấy trong lưu trữ"
+msgstr "%s: Không tìm thấy trong kho lưu"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
-msgstr "%s: Không tìm thấy phần tử yêu cầu trong lưu trữ"
+msgstr "%s: Không tìm thấy phần tử yêu cầu trong kho lưu"
+
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr ""
+"Sử dụng tuỳ chọn « -C » bên trong danh sách tập tin không được phép với « --"
+"listed-incremental »"
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr "Chỉ cho phép một tuỳ chọn « -C » với « --listed-incremental »"
 
-#: src/tar.c:79
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "Cả hai tùy chọn `-%s' và `-%s' đều muốn dữ liệu nhập vào tiêu chuẩn"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
-msgstr "%s: Định dạng lưu trữ không đúng"
+msgstr "%s: Định dạng kho lưu không đúng"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
-msgstr "Muốn tính năng GNU trên định dạng lưu trữ không tương thích"
+msgstr "Muốn tính năng GNU trên định dạng kho lưu không tương thích"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
@@ -1293,7 +1340,7 @@ msgstr ""
 "Không rõ kiểu dáng trích dẫn « %s ». Hãy thử lệnh « %s --quoting-style=help » "
 "để xem danh sách."
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1303,9 +1350,8 @@ msgid ""
 "  tar -tvf archive.tar         # List all files in archive.tar verbosely.\n"
 "  tar -xf archive.tar          # Extract all files from archive.tar.\n"
 msgstr ""
-"Chương trình `tar' của GNU ghi nhớ nhiều tập tin vào cùng một lưu trữ băng "
-"từ hay lên đĩa, và có thể phục hồi từng tập tin riêng rẽ từ kho lưu trữ "
-"này.\n"
+"Chương trình `tar' của GNU ghi nhớ nhiều tập tin vào cùng một kho lưu băng "
+"từ hay lên đĩa, và có thể phục hồi từng tập tin riêng rẽ từ kho lưu này.\n"
 "\n"
 "Ví dụ :\n"
 "  tar -cf kho.tar foo bar  # Tạo kho.tar từ các tập tin foo và bar.\n"
@@ -1313,7 +1359,7 @@ msgstr ""
 "kho.tar.\n"
 "  tar -xf kho.tar          # Giải phóng tất cả các tập tin ra từ kho.tar.\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1324,103 +1370,96 @@ msgid ""
 "  nil, existing   numbered if numbered backups exist, simple otherwise\n"
 "  never, simple   always make simple backups\n"
 msgstr ""
-"Hậu tố lưu trữ là `~', trừ khi được đặt với « --suffix » hay "
+"Hậu tố kho lưu là `~', trừ khi được đặt với « --suffix » hay "
 "SIMPLE_BACKUP_SUFFIX.\n"
 "Có thể đặt điều khiển phiên bản bằng « --backup » hay VERSION_CONTROL,\n"
 "các giá trị là:\n"
 "\n"
-"  none, off \tkhông bao giờ tạo lưu trữ\n"
-"  t, numbered     tạo lưu trữ đánh số\n"
-"  nil, existing   đánh số nếu lưu trữ tồn tại, nếu không thì đơn giản\n"
-"  never, simple   luôn luôn tạo lưu trữ đơn giản\n"
+"  none, off \tkhông bao giờ tạo kho lưu\n"
+"  t, numbered     tạo kho lưu đánh số\n"
+"  nil, existing   đánh số nếu kho lưu tồn tại, nếu không thì đơn giản\n"
+"  never, simple   luôn luôn tạo kho lưu đơn giản\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "Chế độ thao tác chính:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
-msgstr "liệt kê nội dung của một lưu trữ"
+msgstr "liệt kê nội dung của một kho lưu"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
-msgstr "giải phóng các tập tin từ một lưu trữ"
+msgstr "giải phóng các tập tin từ một kho lưu"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
-msgstr "tạo một lưu trữ mới"
+msgstr "tạo một kho lưu mới"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
-msgstr "tìm sự khác nhau giữa lưu trữ và hệ thống tập tin"
+msgstr "tìm sự khác nhau giữa kho lưu và hệ thống tập tin"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
-msgstr "thêm các tập tin vào cuối một lưu trữ"
+msgstr "thêm các tập tin vào cuối một kho lưu"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
-msgstr "chỉ thêm những tập tin mới hơn bản sao trong lưu trữ"
+msgstr "chỉ thêm những tập tin mới hơn bản sao trong kho lưu"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
-msgstr "thêm các tập tin tar vào một lưu trữ"
+msgstr "thêm các tập tin tar vào một kho lưu"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
-msgstr "xóa từ lưu trữ (không dùng trên các băng ghi âm mag!)"
+msgstr "xóa từ kho lưu (không dùng trên các băng ghi âm mag!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
-msgstr "thử nhãn khối tin lưu trữ rồi thoát"
+msgstr "thử nhãn khối tin kho lưu rồi thoát"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "Từ khóa bổ nghĩa thao tác:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "điều khiển các tập tin thưa thớt một cách có hiệu quả"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr "CHÍNH[.PHỤ]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr "đặt phiên bản của định dạng sparse cần dùng (ngụ ý « --sparse »)"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "điều khiển sao lưu incremental có định dạng GNU cũ"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "TẬP TIN"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "điều khiển sao lưu incremental có định dạng GNU mới"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr "cấp đổ cho kho lưu liệt kê tăng dần được tạo"
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "đừng thoát với giá trị khác không trên tập tin không thể đọc"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "SỐ"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
 "diff, --extract or --list and when a list of files is given either on the "
 "command line or via the -T option; NUMBER defaults to 1"
 msgstr ""
-"chỉ thực hiện trên lần xuất hiện thứ SỐ của mỗi tập tin trong lưu trữ. Tùy "
+"chỉ thực hiện trên lần xuất hiện thứ SỐ của mỗi tập tin trong kho lưu. Tùy "
 "chọn này chỉ có ý nghĩa khi kết hợp với một trong những câu lệnh con:\n"
 " --delete\t\txoá\n"
 " --diff\t\tkhác biệt\n"
@@ -1430,117 +1469,120 @@ msgstr ""
 "T ».\n"
 "Mặc định SỐ có giá trị bằng 1."
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
-msgstr "có thể tìm nơi trong kho lưu trữ"
+msgstr "có thể tìm nơi trong kho lưu"
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr "không thể tìm nơi trong kho lưu"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr "đừng kiểm tra số thứ tự thiết bị khi tạo kho nén dần"
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr "kiểm tra số thứ tự thiết bị khi tạo kho nén dần"
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "Điều khiển ghi đè:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
-msgstr "thử kiểm tra lưu trữ sau khi ghi nó"
+msgstr "thử kiểm tra kho lưu sau khi ghi nó"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
-msgstr "xóa bỏ các tập tin sau khi thêm chúng vào lưu trữ"
+msgstr "xóa bỏ các tập tin sau khi thêm chúng vào kho lưu"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "không thay thế những tập tin đã có khi giải phóng"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
-msgstr "không thay thế những tập tin đã có mà mới hơn bản sao trong lưu trữ"
+msgstr "không thay thế những tập tin đã có mà mới hơn bản sao trong kho lưu"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "ghi đè lên những tập tin đã có khi giải phóng"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "xóa bỏ quyền ưu tiên của mỗi tập tin để giải phóng và ghi đè lên nó"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "xóa sạch quyền ưu tiên trong cây thư mục để giải phóng thư mục"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "bảo quản dữ liệu mêta của các thư mục đã có"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr ""
 "ghi đè lên siêu dữ liệu của những thư mục đã có khi giải phóng (mặc định)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "Chọn luồng xuất:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "giải phóng tập tin ra đầu ra tiêu chuẩn"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "CÂU LỆNH"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "gửi các tập tin đã giải nén qua ống dẫn cho chương trình khác"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "bỏ qua mã thoát của tiến trình con"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr "xử lý mã thoát khác số không của tiến trình con như lỗi"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "Điều khiển thuộc tính tập tin:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "bắt buộc dùng TÊN làm người sở hữu cho những tập tin thêm vào"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "bắt buộc dùng TÊN làm nhóm sở hữu cho những tập tin thêm vào"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "NGÀY-CỦA-TẬP-TIN"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "đặt từ DATE-OR-FILE thời gian mtime cho các tập tin đã thêm"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "THAY ĐỔI"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "bắt buộc THAY ĐỔI chế độ (tượng trưng) cho những tập tin thêm vào"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "PHƯƠNG PHÁP"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1550,45 +1592,51 @@ msgstr ""
 "thời gian sau khi đọc (PHƯƠNG PHÁP='replace'; mặc định), hoặc bằng cách "
 "không đặt thời gian như vậy (PHƯƠNG PHÁP='system')"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "không giải phóng thời gian sửa đổi của tập tin"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
-msgstr "thử giải phóng tập tin với cùng quyền sở hữu"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
+msgstr ""
+"thử giải phóng tập tin cùng quyền sở hữu với tập tin trong kho lưu (mặc định "
+"cho siêu người dùng)"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
-msgstr "giải phóng tập tin như tự bạn"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
+msgstr ""
+"giải phóng tập tin dưới tên người dùng riêng (mặc định cho người dùng bình "
+"thường)"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "luôn luôn sử dụng số cho tên người dùng/nhóm"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr ""
 "cũng giải nén thông tin về quyền truy cập tập tin (mặc định cho siêu người "
 "dùng)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
 msgstr ""
-"áp dụng umask của người dùng khi giải nén quyền truy cập ra từ kho lưu trữ "
-"(mặc định cho người dùng bình thường)"
+"áp dụng umask của người dùng khi giải nén quyền truy cập ra từ kho lưu (mặc "
+"định cho người dùng bình thường)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
-msgstr "sắp xếp tên để giải phóng tới lưu trữ tương ứng"
+msgstr "sắp xếp tên để giải phóng tới kho lưu tương ứng"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "giống như khi có hai tùy chọn -p và -s"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
@@ -1596,242 +1644,216 @@ msgstr ""
 "hoãn đến kết thúc tiến trình giải nén việc đặt thời gian sửa đổi và quyền "
 "truy cập các thư mục đã giải nén"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "hủy hiệu ứng của tùy chọn « --delay-directory-restore »"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "Lựa chọn và chuyển đổi thiết bị:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "LƯU TRỮ"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
-msgstr "sử dụng tập tin lưu trữ hoặc thiết bị LƯU TRỮ"
+msgstr "sử dụng tập tin kho lưu hoặc thiết bị LƯU TRỮ"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
-msgstr "tập tin lưu trữ là nội bộ thậm chí nếu có một dấu hai chấm"
+msgstr "tập tin kho lưu là cục bộ thậm chí nếu có một dấu hai chấm"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "sử dụng CÂU LỆNH rmt đưa ra thay cho rmt"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "sử dụng CÂU LỆNH từ xa thay cho rsh"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "chỉ ra ổ và mật độ ghi dữ liệu"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
-msgstr "tạo/liệt kê/giải phóng lưu trữ nhiều khối"
+msgstr "tạo/liệt kê/giải phóng kho lưu nhiều khối"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "thay băng ghi âm (tape) sau khi ghi nhớ SỐ X 1024 byte"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "chạy script tại cuối mỗi băng ghi âm (có nghĩa -M)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "sử dụng/cập nhật số thứ tự khối trong TẬP TIN"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "Khối của thiết bị:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "KHỐI"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "KHỐI X 512 byte cho mỗi bản ghi"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "SỐ byte cho mỗi mục ghi, bội số cho 512"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
-msgstr "lờ đi những khối không (zero) trong lưu trữ (có nghĩa EOF)"
+msgstr "lờ đi những khối không (zero) trong kho lưu (có nghĩa EOF)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "đặt khối lại khi chúng ta đọc (cho đường ống 4.2BSD)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
-msgstr "Lựa chọn định dạng lưu trữ:"
+msgstr "Lựa chọn định dạng kho lưu:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "ĐỊNH DẠNG"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "tạo lưư trữ với định dạng đưa ra"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "ĐỊNH DẠNG là một trong số sau:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "định dạng tar V7 cũ"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "định dạng GNU theo như tar <= 1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "định dạng tar GNU 1.13.x"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "định dạng PoSIX 1003.1-1988 (ustar)"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "định dạng POSIX 1003.1-2001 (pax)"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "bằng pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "giống như --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "giống như --format=posix"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "từ_khoá[[:]=giá_trị][,từ_khoá[[:]=giá_trị]]..."
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "từ khóa điều khiển pax"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "VĂN BẢN"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
 msgstr ""
-"tạo lưu trữ với tên khối tin VĂN BẢN. Tại thời điểm liệt kê/giải phóng, sử "
+"tạo kho lưu với tên khối tin VĂN BẢN. Tại thời điểm liệt kê/giải phóng, sử "
 "dụng VĂN BẢN làm mẫu glob cho tên khối tin"
 
-#: src/tar.c:593
+#: src/tar.c:613
 msgid "Compression options:"
 msgstr "Tùy chọn nén:"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
-msgstr "dùng hậu tố lưu trữ để xác định chương trình nén"
+msgstr "dùng hậu tố kho lưu để xác định chương trình nén"
 
-#: src/tar.c:597
-#, fuzzy
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
-msgstr "không nên dùng hậu tố lưu trữ để xác định chương trình nén"
-
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "lọc lưu trữ qua bzip2"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "lọc lưu trữ qua gzip"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "lọc lưu trữ qua compress"
-
-#: src/tar.c:609
-msgid "filter the archive through lzma"
-msgstr "lọc lưu trữ qua lzma"
+msgstr "không nên dùng hậu tố kho lưu để xác định chương trình nén"
 
-#: src/tar.c:611
-msgid "filter the archive through lzop"
-msgstr "lọc kho lưu trữ qua lzop"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "lọc lưu trữ qua gzip"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "TRÌNH"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "lọc qua chương TRÌNH (phải chấp nhận -d)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "Lựa chọn tập tin nội bộ:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr ""
-"thêm vào kho lưu trữ TẬP TIN đã cho (có ích nếu tên nó bắt đầu với dấu gạch)"
+"thêm vào kho lưu TẬP TIN đã cho (có ích nếu tên nó bắt đầu với dấu gạch)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "THƯ MỤC"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "thay đổi tới thư mục THƯ MỤC"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "lấy các tên tập tin cần giải phóng hay tạo từ TẬP TIN"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T đọc tên kết thúc vô hiệu lực, tắt -C"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr "tắt hiệu ứng của tùy chọn « --null » đi trước"
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr "hủy trích dẫn các tên tập tin được đọc bằng « -T » (mặc định)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr "đừng hủy trích dẫn các tên tập tin được đọc bằng « -T »"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "MẪU"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "loại trừ những tập tin tương ứng với MẪU"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "loại trừ những mẫu liệt kê trong TẬP TIN"
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
@@ -1839,88 +1861,92 @@ msgstr ""
 "loại trữ nội dung của thư mục chứa thẻ ghi nhớ tạm CACHEDIR.TAG, trừ tập tin "
 "thẻ chính nó"
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr ""
 "loại trữ mọi thứ đều nằm dưới thư mục chứa thẻ ghi nhớ tạm CACHEDIR.TAG"
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "loại trữ thư mục chứa thẻ ghi nhớ tạm CACHEDIR.TAG"
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr "loại trữ nội dung của thư mục chứa TẬP TIN, trừ TẬP TIN chính nó"
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr "loại trữ mọi thứ đều nằm dưới thư mục chứa TẬP TIN"
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr "loại trữ thư mục chứa TẬP TIN"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr "trừ thư mục của hệ thống điều khiển phiên bản (v.d. « .svn »)"
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr "loại trừ tập tin kiểu sao lưu và khoá"
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "tránh sự giảm dần một cách tự động trong các thư mục"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
-msgstr "nằm trong hệ thống tập tin nội bộ khi tạo lưu trữ"
+msgstr "nằm trong hệ thống tập tin nội bộ khi tạo kho lưu"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "đệ quy vào các thư mục (mặc định)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "đừng bỏ `/' ở đầu tên tập tin"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
-msgstr "theo liên kết tượng trưng; lưu trữ và đổ tập tin tới đó nó chỉ"
+msgstr "theo liên kết tượng trưng; kho lưu và đổ tập tin tới đó nó chỉ"
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
-msgstr "theo liên kết cứng; lưu trữ và đổ tập tin tới đó nó chỉ"
+msgstr "theo liên kết cứng; kho lưu và đổ tập tin tới đó nó chỉ"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "TÊN-THÀNH-VIÊN"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
-msgstr "bắt đầu tại thành viên TÊN-THÀNH-VIÊN trong lưu trữ"
+msgstr "bắt đầu tại thành viên TÊN-THÀNH-VIÊN trong kho lưu"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "chỉ chứa những tập tin mới hơn NGÀY-CỦA-TẬP-TIN"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "NGÀY"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "so sánh ngày và thời gian chỉ khi dữ liệu thay đổi"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "ĐIỀU KHIỂN"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "sao lưu trước khi xóa, chọn phiên bản ĐIỀU KHIỂN"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "CHUỖI"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
@@ -1928,121 +1954,129 @@ msgstr ""
 "sao lưu trước khi xóa, ghi đè hậu tố thông thường ('~' trừ khi ghi đè bằng "
 "biến môi trường SIMPLE_BACKUP_SUFFIX)"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr "Chuyển dạng tên tập tin:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr "bỏ đi SỐ thành phần đứng đầu ra tên tập tin khi giải nén"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "BIỂU THỨC"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr "dùng « sed replace BIỂU THỨC » để chuyển dạng tên tập tin"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr ""
 "Tùy chọn khớp tên tập tin (có tác động mẫu kiểu cả hai loại trừ và bao gồm):"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr "không phân biệt chữ hoa/thường"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr "mẫu tương ứng với bắt đầu tên tập tin"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr "mẫu tương ứng sau bất kỳ / nào (mặc định để loại trừ)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr "khớp có phân biệt chữ hoa/ thường (mặc định)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr "dùng ký tự đại diện (mặc định để loại trừ)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "khớp chuỗi nghĩa chữ"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr "ký tự đại diện không tương ứng '/'"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr "ký tự đại diện tương ứng '/' (mặc định để loại trừ)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "Dữ liệu kết quả có tính thông tin:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "liệt kê một cách tỉ mỉ những tập tin được tiến hành"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr "TỪ_KHOÁ"
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr "điều khiển cảnh báo"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr "hiển thị thông báo về tiến triển sau mỗi mục ghi thứ SỐ (mặc định 10)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr "HÀNH_ĐỘNG"
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr "thực hiện HÀNH_ĐỘNG này ở mỗi điểm kiểm"
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "in ra một thông báo nếu không phải tất cả các liên kết được dump"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "TÍN HIỆU"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
 "SIGQUIT, SIGINT, SIGUSR1 and SIGUSR2; the names without SIG prefix are also "
 "accepted"
 msgstr ""
-"in ra tổng số byta sau khi xử lý kho lưu trữ ;\n"
+"in ra tổng số byte sau khi xử lý kho lưu ;\n"
 "có đối số thì in ra tổng số byte khi nhận được TÍN HIỆU này; tín hiệu được "
 "phép:\n"
 "SIGHUP, SIGQUIT, SIGINT, SIGUSR1, SIGUSR2;\n"
 "cũng chấp nhận tên không có tiền tố « SIG »."
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "in ra ngày sửa đổi tập tin theo UTC"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "gửi kết quả chi tiết tới TẬP TIN"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
-msgstr "hiên thị số thứ tự khối trong lưu trữ với mỗi thông báo"
+msgstr "hiên thị số thứ tự khối trong kho lưu với mỗi thông báo"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "hỏi xác nhận trước mỗi hành động"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "hiển thị các giá trị mặc định của tar"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
@@ -2050,32 +2084,32 @@ msgstr ""
 "khi liệt kê hay giải phóng, liệt kê mỗi thư mục không tương ứng với tiêu chí "
 "tìm kiếm"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
-msgstr "hiển thị các tên tập tin hay kho lưu trữ sau khi chuyển dạng"
+msgstr "hiển thị các tên tập tin hay kho lưu sau khi chuyển dạng"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "KIỂU DÁNG"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr ""
 "đặt kiểu dáng trích dẫn tên; xem dưới để tìm các giá trị KIỂU DÁNG hợp lệ"
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "cũng trích dẫn các ký tự của CHUỖI"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "tắt trích dẫn các ký tự của CHUỖI"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "Tùy chọn tương thích:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
@@ -2083,56 +2117,62 @@ msgstr ""
 "khi tạo, giống như « --old-archive »\n"
 "khi giải phóng, giống như « --no-same-owner »"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "Những tùy chọn khác:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "tắt sử dụng một số tùy chọn có thể gây tai hại"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
-msgstr "Không nên chỉ ra hai tùy chọn hoặc nhiều hơn trong số `-Acdtrux'"
+#: src/tar.c:927
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
+msgstr "Chỉ cho phép đưa ra một tùy chọn « -Acdtrux » hay « --test-label »"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "Mâu thuẫn giữa các tùy chọn nén"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
 msgstr "Không rõ tên tín hiệu : %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "Không tìm thấy tập tin mẫu ngày tháng"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "Đang thay thế %s cho dạng ngày tháng không rõ %s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "Tùy chọn %s: đang xử lý ngày tháng « %s » như %s"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s: danh sách tập tin đã được đọc"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s: đọc tên tập tin chứa ký tự vô giá trị"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, c-format
+msgid "filter the archive through %s"
+msgstr "lọc kho lưu qua %s"
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr "Các đối số thích hợp với tùy chọn « --quoting-style »:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2140,48 +2180,51 @@ msgstr ""
 "\n"
 "tar *này* mặc định tới:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
 msgstr "Nhân tố khối không đúng"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "Chiều dài băng ghi âm không đúng"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr "Sai đặt giá trị cấp tăng dần"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "Có nhiều ngày bắt đầu"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
 msgstr "Giá trị phiên bản sparse không hợp lệ"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr "--atime-preserve='system' không được hỗ trợ trên nền tảng này"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr "giá trị « --checkpoint » không phải số nguyên"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
-msgstr "%s: Nhóm không đúng"
+#: src/tar.c:1830
+msgid "Invalid group"
+msgstr "Nhóm không đúng"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "Đưa ra chế độ không đúng trên tùy chọn"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "Số không đúng"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "Chủ sở hữu không đúng"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
@@ -2189,111 +2232,115 @@ msgstr ""
 "Tùy chọn « --preserve » bị phản đối, hãy sử dụng tùy chọn « --preserve-"
 "permissions » « --preserve-order » để thay thế"
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "Kích thước bản ghi không đúng"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "Kích thước bản ghi phải là bội số của %d."
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "Số thứ tự của nguyên tố không đúng"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr "Cho phép chỉ một tùy chọn « --to-command »"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "Tham số mật độ dạng sai: %s"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "Mật độ không rõ : « %c »"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "tar *này* không hỗ trợ tùy chọn `-[0-7][lmh]'"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[TẬP TIN]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "Tùy chọn cũ `%c' yêu cầu một tham số."
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "--occurrence không có giá trị khi không đưa ra một danh sách tập tin"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "--occurrence không được sử dụng trong chế độ thao tác đã yêu cầu"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
-msgstr "Tập tin nhiều lưu trữ yêu cầu tùy chọn `-M'"
+msgstr "Tập tin nhiều kho lưu yêu cầu tùy chọn `-M'"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "Không thể kết hợp --listed-incremental với --newer"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr "Tùy chọn « --level » vô ích mà không có « --listed-incremental »"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s: Nhãn khối quá dài (giới hạn là %lu byte)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
-msgstr "Không thể kiểm tra lưu trữ nhiều khối"
+msgstr "Không thể kiểm tra kho lưu nhiều khối"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
-msgstr "Không thể kiểm tra lưu trữ đã nén"
+msgstr "Không thể kiểm tra kho lưu đã nén"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
-msgstr "Không thể sử dụng lưu trữ nhiều khối đã nén"
+msgstr "Không thể sử dụng kho lưu nhiều khối đã nén"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "Không thể ghép nối các kho nén"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
-msgstr "--pax-option chỉ dùng được trên lưu trữ POSIX"
+msgstr "--pax-option chỉ dùng được trên kho lưu POSIX"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr "Chiều dài khối tin không thể nhỏ hơn kích cỡ mục ghi"
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr ""
 "Tùy chọn « --preserve-order » không tương thích với « --listed-incremental »"
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
-msgstr "Từ chối tạo một lưu trữ trống rỗng"
+msgstr "Từ chối tạo một kho lưu trống rỗng"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "Các tùy chọn `-Aru' không tương thích với `-f -'"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
-msgstr "Bạn phải chỉ ra một trong các tùy chọn `-Acdtrux'"
+#: src/tar.c:2592
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
+msgstr "Bạn phải chỉ ra một trong hai tùy chọn « -Acdtrux » và « --test-label »"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr "Đang thoát với trạng thái thất bại do lỗi xảy ra trước"
@@ -2304,80 +2351,84 @@ msgid "%s: File shrank by %s byte"
 msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s: Tập tin được rút ngắn %s byte"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "Từ khóa %s không rõ hoặc chưa được thực hiện"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+msgid "Time stamp is out of allowed range"
+msgstr "Nhãn thời gian ở ngoại phạm vi"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "Không thể dùng mẫu (pattern) %s"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "Không thể ghi chèn lên từ khóa %s"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "Phần đầu mở rộng dạng sai: thiếu chiều dài"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr "Chiều dài phần đầu mở rộng ở ngoại phạm vi được phép"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "Chiều dài phần đầu mở rộng %*s ở ngoại phạm vi được phép"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr "Phần đầu mở rộng dạng sai: thiếu khoảng trắng ở sau chiều dài"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "Phần đầu mở rộng bị lỗi: thiếu dấu bằng"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr "Phần đầu mở rộng dạng sai: thiếu dòng mới"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr "Bỏ qua từ khoá phần đầu mở rộng không rõ « %s »"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr "Cặp từ khoá/giá trị đã tạo ra quá dài (từ khoá=%s, chiều dài=%s)"
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "Phần đầu mở rộng %s=%s ở ngoại phạm vi (%s..%s)"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "Phần đầu mở rộng dạng sai: %s=%s không hợp lệ"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "Phần đầu mở rộng dạng sai: %s=%s thừa"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr ""
 "Phần đầu mở rộng dạng sai: %s không hợp lệ: dấu giới hạn không mong đợi %c"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr "Phần đầu mở rộng dạng sai: %s không hợp lệ: số giá trị lẻ"
@@ -2418,7 +2469,7 @@ msgstr "Điểm kiểm tra ghi %u"
 msgid "Read checkpoint %u"
 msgstr "Điểm kiểm tra đọc %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
@@ -2426,90 +2477,95 @@ msgstr ""
 "genfile thao tác các tập tin dữ liệu cho bộ tiện ích thử paxutils của GNU.\n"
 "TÙY CHỌN:\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr "Tùy chọn tạo tập tin:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "KÍCH CỠ"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "Tạo tập tin có KÍCH CỠ đã cho"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "Ghi vào tập tin TÊN, thay vào thiết bị gõ chuẩn"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "Đọc các tên tập tin từ TẬP TIN"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr "-T đọc tên kết thúc vô hiệu lực"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr ""
 "Điền vào tập tin bằng MẪU đã cho. MẪU là:\n"
 " • default\t\tmặc định\n"
 " • zeros\t\tcác số không"
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "Kích cỡ của khối cho tập tin spare"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr ""
 "Tạo ra tập tin sparse. Phần còn lại của dòng lệnh đưa ra sơ đồ tập tin."
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr "HIỆU SỐ"
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr "Tìm nơi theo hiệu số đã cho trước khi ghi dữ liệu"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr "Tùy chọn thống kê tập tin:"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr "In ra kết xuất struct stat về mỗi tập tin đã cho. ĐỊNH DẠNG mặc định: "
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr "Tùy chọn thực hiện đồng thời:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+msgid "OPTION"
+msgstr "TÙY_CHỌN"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
-"Thực hiện LỆNH đã cho. Có ích với « --checkpoint » (điểm kiểm tra) và một "
-"của:\n"
+"Thực hiện các ĐỐI_SỐ đã cho. Có ích với « --checkpoint » (điểm kiểm tra) và "
+"một của:\n"
 " • --cut\t\tcất\n"
 " • --append\tphụ thêm\n"
-" • --touch\tsờ"
+" • --touch\tsờ\n"
+" • --unlink\tbỏ liên kết"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr "Thực hiện hành động đã cho (xem dưới) khi tới điểm kiểm tra SỐ"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr "Đặt ngày tháng cho tùy chọn « -touch » kế tiếp"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr "Hiển thị các điểm kiểm tra đã thực hiện và trạng thái thoát của LỆNH"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
@@ -2517,7 +2573,7 @@ msgstr ""
 "Các hành động thực hiện đồng thời; được thực hiện khi tới điểm kiểm tra có "
 "số được ghi rõ bằng tùy chọn « --checkpoint »."
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
@@ -2525,140 +2581,147 @@ msgstr ""
 "Cắt ngắn TẬP TIN thành kích cỡ được ghi rõ bằng tùy chọn « --length » trước "
 "(không ghi rõ thì 0)"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr ""
 "Phụ thêm KÍCH CỠ byte vào TẬP TIN. KÍCH CỠ được ghi rõ bằng tùy chọn « --"
 "length » trước."
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "Cập nhật các thời gian truy cập và sửa đổi của TẬP TIN"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "Thực hiện LỆNH"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr "Bỏ liên kết TẬP_TIN"
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "Kích cỡ không hợp lệ: %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr "Số nằm ngoài phạm vi cho phép: %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr "Kích cỡ âm: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "stat(%s) bị lỗi"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr "yêu cầu chiều dài tập tin %lu mà có %lu"
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr "đã tạo tập tin không phải thưa thớt (sparse)"
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "Lỗi phân tích số gần « %s »"
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "Không rõ định dạng ngày tháng"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[ĐỐI SỐ...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "không thể mở « %s »"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 msgid "cannot seek"
 msgstr "không thể tìm nơi"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "tên tập tin chứa ký tự vô giá trị"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr ""
 "không thể tạo ra tập tin sparse trên thiết bị gõ chuẩn: dùng tùy chọn « --"
 "file »"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "mặt nạ không đúng (gần « %s »)"
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr "Không rõ trường « %s »"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "không thể đặt thời gian trên « %s »"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, c-format
+msgid "cannot unlink `%s'"
+msgstr "không thể bỏ liên kết « %s »"
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "Lệnh đã thoát thành công\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "Lệnh bị lỗi với trạng thái %d\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "Lệnh đã chấm dứt khi nhận tín hiệu %d\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "Lệnh đã dừng chạy khi nhận tín hiệu %d\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "Lệnh đã đổ lõi\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "Lệnh đã chấm dứt\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "--stat yêu cầu tên tập tin"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "quá nhiều đối số"
+#~ msgid "Cannot resolve hostname %s"
+#~ msgstr "Không thể quyết định tên máy %s"
 
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
-#~ msgstr "Cảnh báo: không hỗ trợ tùy chọn -I, có thể bạn muốn -j hay -T?"
+#~ msgid "suppress this warning."
+#~ msgstr "hoặc dùng « --no-wildcards » để thu hồi cảnh báo này."
index d501c0efe0d51f889cce6d4439515586d1a25ebc..13bbeee20514f9bdb041b62666aa58c91b485bdf 100644 (file)
Binary files a/po/zh_CN.gmo and b/po/zh_CN.gmo differ
index 907b108ff0ba6ba28bb74773491f6a2aea3ff78a..642de848cb142615c14100ba9aa01e6e6aefc7a2 100644 (file)
 # This file is distributed under the same license as the tar package.
 # Wang Li <charles@linux.net.cn>, 2002.
 # Rongjun Mu <rongjunmu+i18n@gmail.com>, 2004.
-# Ji ZhengYu <zhengyuji@gmail.com>, 2008.
+# Ji ZhengYu <zhengyuji@gmail.com>, 2008, 2009, 2010.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: tar 1.21\n"
+"Project-Id-Version: tar 1.22.91\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
-"PO-Revision-Date: 2009-01-04 13:57+0800\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
+"PO-Revision-Date: 2010-02-16 14:27+0800\n"
 "Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n"
-"Language-Team: Chinese (simplified) <translation-team-zh-cn@lists."
-"sourceforge.net>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8-bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "%2$s 的参数 %1$s 无效"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
 msgstr "%2$s 的参数 %1$s 具有歧义"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "有效的参数为:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
 msgstr "ARGP_HELP_FMT: %s 的值小于或者等于 %s"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: ARGP_HELP_FMT 参数需要一个值"
 
-#: lib/argp-help.c:226
+#: gnu/argp-help.c:228
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
 msgstr "%.*s: ARGP_HELP_FMT 参数值必须为正"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
 msgstr "%.*s: 未知的 ARGP_HELP_FMT 参数"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "ARGP_HELP_FMT 中的参数错误: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
 msgstr "长选项和相应短选项具有相同的强制参数或可选参数。"
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
 msgstr "用法:"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
 msgstr " 或: "
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
 msgstr " [选项...]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
 msgstr "请用“%s --help”或“%s --usage”获得更多信息。\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "将错误报告发送到 %s。\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "未知的系统错误"
 
-#: lib/argp-parse.c:81 src/tar.c:774
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "显示此帮助列表"
 
-#: lib/argp-parse.c:82 src/tar.c:775
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "显示简短的用法说明"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "名称"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
 msgstr "设置程序名"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
 msgstr "秒"
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
 msgstr "挂起 SECS 秒(默认 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "打印程序版本"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
 msgstr "(程序错误)未知版本!?"
 
-#: lib/argp-parse.c:611
+#: gnu/argp-parse.c:613
 #, c-format
 msgid "%s: Too many arguments\n"
 msgstr "%s:参数太多\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
 msgstr "(程序错误)选项可否被识别!?"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
 msgstr "写错误"
 
-#: lib/getopt.c:526 lib/getopt.c:542
+#: gnu/getopt.c:531 gnu/getopt.c:547
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
-msgstr "%s:选项“%s”具有歧义\n"
+msgid "%s: option '%s' is ambiguous\n"
+msgstr "%s: 选项\"%s\"具有歧义\n"
 
-#: lib/getopt.c:575 lib/getopt.c:579
+#: gnu/getopt.c:580 gnu/getopt.c:584
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
-msgstr "%s:选项“--%s”不接受参数\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s: 选项\"--%s\"不需要参数\n"
 
-#: lib/getopt.c:588 lib/getopt.c:593
+#: gnu/getopt.c:593 gnu/getopt.c:598
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
-msgstr "%s:选项“%c%s”不接受参数\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s: 选项\"%c%s\"不需要参数\n"
 
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
-msgstr "%s:选项“%s”需要一个参数\n"
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s: 选项\"%s\"必须要参数\n"
 
-#: lib/getopt.c:693 lib/getopt.c:696
+#: gnu/getopt.c:698 gnu/getopt.c:701
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
-msgstr "%s:无法识别的选项“--%s”\n"
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s: 无法识别的选项\"--%s\"\n"
 
-#: lib/getopt.c:704 lib/getopt.c:707
+#: gnu/getopt.c:709 gnu/getopt.c:712
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
-msgstr "%s:无法识别的选项“%c%s”\n"
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s: 无法识别的选项\"%c%s\"\n"
 
-#: lib/getopt.c:759 lib/getopt.c:762
+#: gnu/getopt.c:761 gnu/getopt.c:764
 #, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s:非法选项 -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: 无效选项 -- \"%c\"\n"
 
-#: lib/getopt.c:768 lib/getopt.c:771
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
 #, c-format
-msgid "%s: invalid option -- %c\n"
-msgstr "%s:无效选项 -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: 选项需要参数 -- \"%c\"\n"
 
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
+#: gnu/getopt.c:884 gnu/getopt.c:900
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s:选项需要一个参数 -- %c\n"
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s: 选项\"-W %s\"具有歧义\n"
 
-#: lib/getopt.c:892 lib/getopt.c:908
+#: gnu/getopt.c:924 gnu/getopt.c:942
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
-msgstr "%s:选项“-W %s”具有歧义\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s: 选项\"-W %s\"不要参数\n"
 
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
-msgstr "%s:选项“-W %s”不接受参数\n"
-
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
 msgid "memory exhausted"
 msgstr "内存耗尽"
 
-#: lib/openat-die.c:35
+#: gnu/openat-die.c:36
 #, c-format
 msgid "unable to record current working directory"
 msgstr "无法记录当前工作目录"
 
-#: lib/openat-die.c:48
+#: gnu/openat-die.c:54
 #, c-format
 msgid "failed to return to initial working directory"
 msgstr "无法回到起始的工作目录"
 
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s:无法 %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s:警告:无法 %s"
-
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s:无法将模式改为 %s"
-
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s:无法将所有权改为 uid %lu,gid %lu"
-
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s:无法硬连接到 %s"
-
-#: lib/paxerror.c:179 lib/paxerror.c:211
-#, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%1$s:读入 %3$lu 字节时,在 %2$s 字节处发生读错误"
-
-#: lib/paxerror.c:192
-#, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%1$s:警告:读入 %3$lu 字节时,在 %2$s 字节处发生读错误"
-
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s:无法定位到 %s"
-
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s:警告:无法定位到 %s"
-
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s:无法创建到 %s 的符号连接"
-
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%1$s:只写入了 %3$lu 个中的 %2$lu 个字节"
-
-#: lib/paxnames.c:155
-#, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "从成员名中删除开头的“%s”"
-
-#: lib/paxnames.c:156
-#, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "从硬连接目标中删除开头的“%s”"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "为空成员名替换“.”"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "为空的硬连接替换“.”"
-
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
 #.
@@ -304,17 +214,17 @@ msgstr "为空的硬连接替换“.”"
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
 msgstr "“"
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
 msgstr "”"
 
@@ -324,7 +234,7 @@ msgstr "”"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
 msgstr "^[yY]"
 
@@ -334,39 +244,28 @@ msgstr "^[yY]"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
 msgstr "^[nN]"
 
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp:服务不可用"
-
-#: lib/rtapelib.c:303
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdin"
-msgstr "标准输入"
+msgid "Packaged by %s (%s)\n"
+msgstr "由 %s (%s) 打包\n"
 
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:79
 #, c-format
-msgid "stdout"
-msgstr "标准输出"
-
-#: lib/rtapelib.c:512
-#, c-format
-msgid "Cannot execute remote shell"
-msgstr "无法执行远程 shell"
+msgid "Packaged by %s\n"
+msgstr "由 %s 打包\n"
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
 msgstr "(C)"
 
-#: lib/version-etc.c:67
-#, fuzzy
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -379,23 +278,23 @@ msgstr ""
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
 "html>\n"
 "这是自由软件:您可以自由地更改并重新发布它。\n"
-"There is NO WARRANTY, to the extent permitted by law.\n"
+"在法律所允许的范围内不含任何担保。\n"
 "\n"
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
+#: gnu/version-etc.c:104
 #, c-format
 msgid "Written by %s.\n"
 msgstr "由 %s 所写。\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
+#: gnu/version-etc.c:108
 #, c-format
 msgid "Written by %s and %s.\n"
 msgstr "由 %s 和 %s 所写。\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
+#: gnu/version-etc.c:112
 #, c-format
 msgid "Written by %s, %s, and %s.\n"
 msgstr "由 %s,%s, 和 %s 所写。\n"
@@ -403,7 +302,7 @@ msgstr "由 %s,%s, 和 %s 所写。\n"
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -415,7 +314,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -427,7 +326,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -439,7 +338,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -451,7 +350,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -465,7 +364,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -479,7 +378,7 @@ msgstr ""
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
@@ -494,178 +393,316 @@ msgstr ""
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
+#: gnu/version-etc.c:247
 #, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
 msgstr ""
 "\n"
-"å°\86é\94\99误æ\8a¥å\91\8aå\88° <%s>ã\80\82\n"
+"å°\86é\94\99误æ\8a¥å\91\8aå\8f\91é\80\81å\88°: %sã\80\82ç¿»è¯\91é\94\99误æ\8a¥å\91\8aç»\99 <i18n-zh@googlegroups.com>\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:249
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
-msgstr ""
+msgid "Report %s bugs to: %s\n"
+msgstr "将 %s 错误报告发送到: %s\n"
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
-msgstr ""
+#: gnu/version-etc.c:253
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s 主页: <%s>\n"
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr "输入字符串太长了"
+#: gnu/version-etc.c:255
+#, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+msgstr "%s 主页: <http://www.gnu.org/software/%s/>\n"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr "编号语法错误"
+#: gnu/version-etc.c:258
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+msgstr "GNU 软件的通用帮助: <http://www.gnu.org/gethelp/>\n"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd:无法分配缓冲区空间\n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s:无法 %s"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "无法分配缓冲区空间"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s:警告:无法 %s"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:93
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "请用“%s --help”获得更多信息。\n"
+msgid "%s: Cannot change mode to %s"
+msgstr "%s:无法将模式改为 %s"
 
-#: rmt/rmt.c:308
+#: lib/paxerror.c:101
 #, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s:无法将所有权改为 uid %lu,gid %lu"
+
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s:无法硬连接到 %s"
+
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%1$s:读入 %3$lu 字节时,在 %2$s 字节处发生读错误"
+
+#: lib/paxerror.c:192
+#, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%1$s:警告:读入 %3$lu 字节时,在 %2$s 字节处发生读错误"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s:无法定位到 %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s:警告:无法定位到 %s"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s:无法创建到 %s 的符号连接"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%1$s:只写入了 %3$lu 个中的 %2$lu 个字节"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "从成员名中删除开头的“%s”"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "从硬连接目标中删除开头的“%s”"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "为空成员名替换“.”"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "为空的硬连接替换“.”"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp:服务不可用"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "标准输入"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "标准输出"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"用法:%s [选项]\n"
-"操作磁带驱动器,接受来自远程进程的命令。\n"
-"\n"
-"  --version  输出版本信息。\n"
-"  --help  输出此帮助。\n"
 
-#: rmt/rmt.c:397
-msgid "Seek offset error"
-msgstr "定位偏移量错误"
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "无法执行远程 shell"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "查寻方向超出范围"
+
+#: rmt/rmt.c:419
+msgid "Invalid seek direction"
+msgstr "无效的查寻方向"
+
+#: rmt/rmt.c:427
+msgid "Invalid seek offset"
+msgstr "无效的查寻偏移量"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
-msgstr "定位操作的偏移量超出范围"
+msgstr "查寻操作的偏移量超出范围"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "定位方向超出范围"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+msgid "Invalid byte count"
+msgstr "无效的字节数"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+msgid "Byte count out of range"
+msgstr "字节数超出范围"
+
+#: rmt/rmt.c:539
+msgid "Premature eof"
+msgstr "文件结尾出现过早"
+
+#: rmt/rmt.c:582
+msgid "Invalid operation code"
+msgstr "无效操作模式"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr "不支持的操作"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
-msgstr "rmtd:过早的 eof\n"
+#: rmt/rmt.c:645
+msgid "Unexpected arguments"
+msgstr "参数异常"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "过早的文件结尾"
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr "接受远程程序的命令操作磁带机"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "NUMBER"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr "设定调试级别"
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "FILE"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr "设定调试输出文件名"
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, c-format
+msgid "cannot open %s"
+msgstr "无法打开 %s"
+
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "参数过多"
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "垃圾命令"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
 msgstr "它似乎不像是一个 tar 归档文件"
 
-#: src/buffer.c:354 src/buffer.c:363
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
 msgstr "总计写入字节数"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
 msgstr "总计读取字节数"
 
-#: src/buffer.c:365
+#: src/buffer.c:396
 #, c-format
 msgid "Total bytes deleted: %s\n"
 msgstr "总计删除字节数:%s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(管道)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
 msgstr "record_size 的无效值"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "未给出归档文件名"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "无法验证标准输入/标准输出归档文件"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
 msgstr "归档被压缩。使用 %s 选项"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "无法更新压缩归档文件"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
 msgstr "处于磁带的起点,现在退出"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
 msgstr "错误过多,退出"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
 msgstr[0] "记录大小 = %lu 块"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "归档中未对齐的块 (%lu 字节)s"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr "无法倒回归档文件;如果没有 -i 可能无法读入它"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
 msgstr "rmtlseek 未停在记录边界处"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s:包含无效的卷编号"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "卷编号溢出"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "为 %2$s 准备卷 #%1$d 并按回车:"
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "需得到用户应答时文件结束"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "警告:归档文件不完整"
 
-#: src/buffer.c:956
+#: src/buffer.c:1003
 #, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
@@ -676,123 +713,123 @@ msgstr ""
 " q\t\t终止 tar\n"
 " y or newline\t继续操作\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
 msgstr " !             衍生出一个子 shell\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
 msgstr " ?             打印此列表\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
 msgstr "没有新的卷;退出。\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
 msgstr "未指定文件名。重试。\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
 msgstr "无效输入。输入 ? 显示帮助。\n"
 
-#: src/buffer.c:1066
+#: src/buffer.c:1113
 #, c-format
 msgid "%s command failed"
 msgstr "%s 命令失败"
 
-#: src/buffer.c:1221
+#: src/buffer.c:1294
 #, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
 msgstr "%s 在本卷可能连续: 头部包含截短的名字"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s 在本卷中不连续"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
 msgstr "%s 的大小错误 (%s != %s + %s)"
 
-#: src/buffer.c:1253
+#: src/buffer.c:1326
 #, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
 msgstr "此卷次序有误(%s - %s != %s)"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "归档未被标记为匹配 %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "卷标 %s 不匹配 %s"
 
-#: src/buffer.c:1402
+#: src/buffer.c:1530
 #, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
 msgstr "%s: 文件名太长而无法贮存在 GNU 多卷头,已被截短"
 
-#: src/buffer.c:1621
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
 msgstr "写操作未在记录边界处终止"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "仅能读入 %2$lu 中的 %1$lu 个字节"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "内容不同"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
 msgstr "归档文件中异常的 EOF"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "文件类型不同"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "访问模式不同"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Uid 不同"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Gid 不同"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "修改时间不同"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "大小不同"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
 msgstr "没有连接到 %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "符号连接不同"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
 msgstr "设备号不同"
 
@@ -814,33 +851,33 @@ msgstr "归档包含带有被移除前导字符的文件名。"
 msgid "Verification may fail to locate original files."
 msgstr "位于原始文件中的验证可能失败。"
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
 msgstr[0] "校验失败:检测到 %d 个无效的头"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "在 %s 处一个单独的零块"
 
-#: src/create.c:67
+#: src/create.c:68
 #, c-format
 msgid "%s: contains a cache directory tag %s; %s"
 msgstr "%s: 包含一个缓存目录标识 %s;%s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "值 %s 超出了 %s 的范围 %s..%s;正在替换 %s"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "值 %s 超出了 %s 的范围 %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
 msgstr "正在生成负八进制头"
 
@@ -859,435 +896,437 @@ msgstr "%s:文件名太长(不能被分割);未输出"
 msgid "%s: link name is too long; not dumped"
 msgstr "%s:连接名太长;未输出"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s:文件缩小 %s 字节;用零填充"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s:文件在不同的文件系统上;未输出"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
 msgstr "未输出内容"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
 msgstr "%s:未知的文件类型;忽略文件"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, c-format
-msgid "Missing links to %s.\n"
-msgstr "缺少到 %s 的连接。\n"
+msgid "Missing links to %s."
+msgstr "缺少到 %s 的连接。"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
-msgstr "%s文件未改变;未输出"
+msgstr "%s文件未改变;未输出"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
-msgstr "%s:文件是归档文件;未输出"
-
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s:文件在我们读入之前被删除了"
+msgstr "%s: 文件是归档文件;未输出"
 
-#: src/create.c:1591 src/incremen.c:543
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
 msgstr "未输出目录"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
-msgstr "%s在我们读入文件时文件发生了变化"
+msgstr "%s在我们读入文件时文件发生了变化"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
-msgstr "%s忽略套接字(socket)"
+msgstr "%s忽略套接字(socket)"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
 msgstr "%s: 忽略权限"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
 msgstr "跳转到下一个头"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
 msgstr "从归档文件中删除非头信息"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
 msgstr "%s:不可信的旧时间戳 %s"
 
-#: src/extract.c:215
+#: src/extract.c:229
 #, c-format
 msgid "%s: time stamp %s is %s s in the future"
 msgstr "%s:时间戳 %s 是未来的 %s 秒之后"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
 msgstr "%s:创建目录时出现意外的不一致"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
 msgstr "%s:目录名在状态信息被获取之前改变了"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
 msgstr "展开紧邻的文件为普通文件"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "正试图将符号连接展开为硬连接"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "正在读入 %s\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s:无法展开 -- 文件一直延伸至另一卷中"
 
-#: src/extract.c:1150 src/list.c:1090
-#, fuzzy
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
 msgstr "异常的长名字头部"
 
-#: src/extract.c:1156
+#: src/extract.c:1197
 #, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
 msgstr "%s:未知的文件类型“%c”,作为普通文件展开"
 
-#: src/extract.c:1181
+#: src/extract.c:1223
 #, c-format
 msgid "Current %s is newer or same age"
 msgstr "当前的“%s”更新或一样新"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
 msgstr "%s:无法备份该文件"
 
-#: src/extract.c:1355
+#: src/extract.c:1402
 #, c-format
 msgid "Cannot rename %s to %s"
 msgstr "无法将 %s 重命名为 %s"
 
-#: src/extract.c:1367
-#, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "错误不可恢复:现在退出"
-
-#: src/incremen.c:448 src/incremen.c:492
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
 msgid "%s: Directory has been renamed from %s"
 msgstr "%s:目录已改名,不再是 %s"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
 msgstr "%s:目录已被改名"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s:目录是新的"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
 msgstr "无效的时间戳"
 
-#: src/incremen.c:959
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
 msgstr "无效的修改时间(秒)"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
 msgstr "无效的修改时间(纳秒)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "无效的设备号"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "无效的 inode 号"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
 msgstr "读取目录文件时字段太长"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
 msgstr "目录文件读取错误"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
 msgstr "目录文件中异常的文件结尾(EOF)"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
 msgstr "目录文件中异常的字段值"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
 msgstr "缺少记录终止符"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
 msgstr "文件格式错误增量"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
 msgstr "不支持增量格式版本: %<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
 msgstr "错误的 dumpdir: 需要“%c”但实际为 %#3o"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
 msgstr "错误的 dumpdir: 重复的“X”"
 
-#: src/incremen.c:1462
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
 msgstr "错误的 dumpdir: “R”中有空名字"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
 msgstr "错误的 dumpdir: “R”后未紧接着用“T”"
 
-#: src/incremen.c:1481
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
 msgstr "错误的 dumpdir: “T”中有空名字"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
 msgstr "错误的 dumpdir: 需要“%c”但实际为数据结尾"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
 msgstr "错误的 dumpdir: 从未用过“X”"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
 msgstr "无法通过模板 %s 创建临时目录"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s:未清除目录:无法 stat"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s: 目录在不同的设备上: 未清除"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s:正在删除 %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s:无法删除"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
 msgstr "%s:忽略"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
 msgstr "块 %s:** 空块 **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
 msgstr "块 %s:** 文件结束 **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "块 %s:"
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
 msgstr "头中需要数值 %s 处为空白符"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr "归档的八进制值 %.*s 超出范围 %s;假定为其二进制补码"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "归档八进制值 %.*s 超出 %s 的范围"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "归档包含过时的 base-64 头"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "归档签署的 base-64 字符串 %s 超出范围 %s"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "归档的 base-256 值超出范围 %s"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "归档包含 %.*s 而需要数字值 %s"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
+#: src/list.c:872
 #, c-format
 msgid "Archive value %s is out of %s range %s..%s"
 msgstr "归档值 %s 超出 %s 的范围 %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
 msgstr " 连接到 %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
 msgstr " 未知的文件类型 %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--长连接--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--长名--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--卷头--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
 msgstr "--从 %s 字节继续--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "正在创建目录:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
 msgstr "将 %s 改名为 %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
 msgstr "%s:无法重命名为 %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "将 %s 的名字改回 %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
 msgstr "无法保存工作目录"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
 msgstr "无法改变工作目录"
 
-#: src/misc.c:711
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s:文件在我们读入之前被删除了"
+
+#: src/misc.c:774
+#, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s: 文件在读入之前被删除了"
+
+#: src/misc.c:795
 msgid "child process"
 msgstr "子进程"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
 msgstr "进程内通道"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
 msgstr "请在文件名中使用匹配字符模式。"
 
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
 msgstr "使用 --wildcards 打开模式匹配,或是 --no-wildcards 来关闭之"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr "不显示此警告。"
-
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
 msgstr "%s:归档中找不到"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
 msgstr "%s:没有在归档中找到需要的"
 
-#: src/tar.c:79
+#: src/names.c:894
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr "在文件列表中 -C 选项与 --listed-incremental 选项不许合用"
+
+#: src/names.c:900
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr "仅一个 -C 选项允许与  --listed-incremental 合用"
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
 msgstr "选项“-%s”和“-%s”都需要标准输出"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s:无效的归档格式"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
 msgstr "在不兼容的归档格式上需要 GNU 特征"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
 msgstr "未知的引用形式‘%s’。尝试用‘%s --quoting-style=help’获取列表。"
 
-#: src/tar.c:336
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1307,7 +1346,7 @@ msgstr ""
 "件。\n"
 "  tar -xf archive.tar          # 展开归档文件 archive.tar 中的所有文件。\n"
 
-#: src/tar.c:345
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1326,86 +1365,79 @@ msgstr ""
 "  nil, existing   如果编号备份存在则进行编号备份,否则进行简单备份\n"
 "  never, simple   总是使用简单备份\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "主操作模式:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "列出归档内容"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "从归档中解出文件"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
 msgstr "创建一个新归档"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "找出归档和文件系统的差异"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "追加文件至归档结尾"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "仅追加比归档中副本更新的文件"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "追加 tar 文件至归档"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "从归档(非磁带!)中删除"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
 msgstr "测试归档卷标并退出"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "操作修饰符:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
 msgstr "高效处理离散文件"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
 msgstr "MAJOR[.MINOR]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
 msgstr "设置所用的离散格式版本(隐含 --sparse)"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
 msgstr "处理老式的 GNU 格式的增量备份"
 
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "文件"
-
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
 msgstr "处理新式的 GNU 格式的增量备份"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr "所创建的增量列表归档的输出级别"
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "当遇上不可读文件时不要以非零值退出"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "NUMBER"
-
-#: src/tar.c:410
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1416,116 +1448,119 @@ msgstr ""
 "extract 或是 --list 中的一个联合使用时,此选项才有效。而且不管文件列表是以命"
 "令行形式给出或是通过 -T 选项指定的;NUMBER 值默认为 1"
 
-#: src/tar.c:416
+#: src/tar.c:434
 msgid "archive is seekable"
 msgstr "归档可检索"
 
-#: src/tar.c:418
+#: src/tar.c:436
+msgid "archive is not seekable"
+msgstr "归档不可检索"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
 msgstr "当创建增量归档时不要检查设备号"
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
 msgstr "当创建增量归档时检查设备号(默认)"
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
 msgstr "重写控制:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "在写入以后尝试校验归档"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "在添加文件至归档后删除它们"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "解压时不要替换存在的文件"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr "不要替换比归档中副本更新的已存在的文件"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "解压时重写存在的文件"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "在解压要重写的文件之前先删除它们"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
 msgstr "解压目录之前先清除目录层次"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
 msgstr "保留已存在目录的元数据"
 
-#: src/tar.c:446
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
 msgstr "解压时重写已存在目录的元数据(默认)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
 msgstr "选择输出流:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
 msgstr "解压文件至标准输出"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "COMMAND"
 
-#: src/tar.c:457
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
 msgstr "将解压的文件通过管道传送至另一个程序"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
 msgstr "忽略子进程的退出代码"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
 msgstr "将子进程的非零退出代码认为发生错误"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "操作文件属性:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
 msgstr "强制将 NAME 作为所添加的文件的所有者"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
 msgstr "强制将 NAME 作为所添加的文件的组所有者"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "DATE-OR-FILE"
 
-#: src/tar.c:473
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
 msgstr "从 DATE-OR-FILE 中为添加的文件设置 mtime"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "CHANGES"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
 msgstr "强制将所添加的文件(符号)更改为权限 CHANGES"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
 msgstr "METHOD"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
@@ -1534,452 +1569,440 @@ msgstr ""
 "在输出的文件上保留访问时间,要么通过在读取(默认 METHOD=‘replace’)后还原时间,"
 "要不就不要在第一次(METHOD=‘system’)设置时间"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "不要解压文件的修改时间"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
-msgstr "尝试解压时保持所有者关系一致"
+#: src/tar.c:504
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
+msgstr "尝试解压时保持所有者关系一致(超级用户默认此项)"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
-msgstr "将文件解压为您所有"
+#: src/tar.c:506
+msgid "extract files as yourself (default for ordinary users)"
+msgstr "将文件解压为您所有(普通用户默认此项)"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "总是以数字代表用户/组的名称"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
 msgstr "解压文件权限信息(默认只为超级用户服务)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
 msgstr "从归档中解压权限时使用用户的掩码位(默认为普通用户服务)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "为解压至匹配归档排序名称"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "与 -p 和 -s 一样"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
 msgstr "直到解压结束才设置修改时间和所解目录的权限"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
 msgstr "取消 --delay-directory-restore 选项的效果"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
 msgstr "设备选择和切换:"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "ARCHIVE"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
 msgstr "使用归档文件或 ARCHIVE 设备"
 
-#: src/tar.c:514
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "即使归档文件存在副本还是把它认为是本地归档"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
 msgstr "使用指定的 rmt COMMAND 代替 rmt"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
 msgstr "使用远程 COMMAND 代替 rsh"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "指定驱动器和压缩率"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "创建/列出/解压多卷归档文件"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "写入 NUMBER × 1024 字节后更换磁带"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "在每卷磁带最后运行脚本(隐含 -M)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "使用/更新 FILE 中的卷数"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "设备分块:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "BLOCKS"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
 msgstr "每个记录 BLOCKS x 512 字节"
 
-#: src/tar.c:553
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
 msgstr "每个记录的字节数 NUMBER,乘以 512"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "忽略归档中的零字节块(即文件结尾)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "读取时重新分块(只对 4.2BSD 管道有效)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
 msgstr "选择归档格式:"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "FORMAT"
 
-#: src/tar.c:565
+#: src/tar.c:585
 msgid "create archive of the given format"
 msgstr "创建指定格式的归档"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
 msgstr "FORMAT 是以下格式中的一种:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "old V7 tar 格式"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "GNU 格式 as per tar <= 1.12"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "GNU tar 1.13.x 格式"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "POSIX 1003.1-1988 (ustar) 格式"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "POSIX 1003.1-2001 (pax) 格式"
 
-#: src/tar.c:578
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "等同于 pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "等同于 --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "等同于 --format=posix"
 
-#: src/tar.c:585
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
 msgstr "关键字[[:]=值][,关键字[[:]=值]]..."
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "控制 pax 关键字"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "TEXT"
 
-#: src/tar.c:588
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
 msgstr "创建带有卷名 TEXT 的归档;在列出/解压时,使用 TEXT 作为卷名的模式串"
 
-#: src/tar.c:593
+#: src/tar.c:613
 msgid "Compression options:"
 msgstr "压缩选项:"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
-msgstr "使用归档后缀来决定压缩程序"
+msgstr "使用归档后缀来决定压缩程序"
 
-#: src/tar.c:597
-#, fuzzy
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
-msgstr "未使用归档后缀来决定压缩程序"
-
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "通过 bzip2 过滤归档"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "通过 gzip 过滤归档"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "通过 compress 过滤归档"
+msgstr "不使用归档后缀名来决定压缩程序"
 
-#: src/tar.c:609
-msgid "filter the archive through lzma"
-msgstr "通过 lzma 过滤归档"
-
-#: src/tar.c:611
-msgid "filter the archive through lzop"
-msgstr "通过 lzop 过滤归档"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "通过 gzip 过滤归档"
-
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "PROG"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "通过 PROG 过滤(必须是能接受 -d 选项的程序)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "本地文件选择:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
 msgstr "添加指定的 FILE 至归档(如果名字以 - 开始会很有用的)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "DIR"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "改变至目录 DIR"
 
-#: src/tar.c:627
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
 msgstr "从 FILE 中获取文件名来解压或创建文件"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T 读取以空终止的名字,-C 禁用"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
 msgstr "禁用上一次的效果 --null 选项"
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
 msgstr "以 -T 读取的文件名作为引用结束(默认)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
 msgstr "不以 -T 读取的文件名作为引用结束"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
 msgstr "PATTERN"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
 msgstr "排除以 PATTERN 指定的文件"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
 msgstr "排除 FILE 中列出的模式串"
 
-#: src/tar.c:641
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
 msgstr "除标识文件本身外,排除包含 CACHEDIR.TAG 的目录中的内容"
 
-#: src/tar.c:644
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
 msgstr "排除包含 CACHEDIR.TAG 的目录中所有内容"
 
-#: src/tar.c:647
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
 msgstr "排除包含 CACHEDIR.TAG 的目录"
 
-#: src/tar.c:649
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
 msgstr "除 FILE 自身外,排除包含 FILE 的目录中的内容"
 
-#: src/tar.c:652
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
 msgstr "排除包含 FILE 的目录中的所有内容"
 
-#: src/tar.c:654
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
 msgstr "排除包含 FILE 的目录"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
 msgstr "排除版本控制系统目录"
 
-#: src/tar.c:658
+#: src/tar.c:674
+msgid "exclude backup and lock files"
+msgstr "排除备份和锁文件"
+
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
 msgstr "避免目录中的自动降级"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "创建归档时保存在本地文件系统中"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "目录递归(默认)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "不要从文件名中清除引导符‘/’"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
 msgstr "跟踪符号链接;将它们所指向的文件归档并输出"
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
 msgstr "跟踪硬链接;将它们所指向的文件归档并输出"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "MEMBER-NAME"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "从归档中的 MEMBER-NAME 成员处开始"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "只保存比 DATE-OR-FILE 更新的文件"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "DATE"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "当只有数据改变时比较数据和时间"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "CONTROL"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
 msgstr "在删除前备份,选择 CONTROL 版本"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "STRING"
 
-#: src/tar.c:679
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
 msgstr ""
 "在删除前备份,除非被环境变量 SIMPLE_BACKUP_SUFFIX 覆盖,否则覆盖常用后缀(‘’)"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
 msgstr "文件名变换:"
 
-#: src/tar.c:686
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr "解压时从文件名中清除 NUMBER 个引导部分"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
 msgstr "EXPRESSION"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
 msgstr "使用 sed 代替 EXPRESSION 来进行文件名变换"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
 msgstr "文件名匹配选项(同时影响排除和包括模式串):"
 
-#: src/tar.c:698
+#: src/tar.c:716
 msgid "ignore case"
 msgstr "忽略大小写"
 
-#: src/tar.c:700
+#: src/tar.c:718
 msgid "patterns match file name start"
 msgstr "模式串匹配文件名头部"
 
-#: src/tar.c:702
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
 msgstr "模式串匹配任意‘/’后字符(默认对 exclusion 有效)"
 
-#: src/tar.c:704
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
 msgstr "匹配大小写(默认)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
 msgstr "使用通配符(默认对 exclusion )"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
 msgstr "逐字匹配字符串"
 
-#: src/tar.c:710
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
 msgstr "通配符不匹配‘/’"
 
-#: src/tar.c:712
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
 msgstr "通配符匹配‘/’(默认对排除操作有效)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "提示性输出:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "详细地列出处理的文件"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr "KEYWORD"
+
+#: src/tar.c:740
+msgid "warning control"
+msgstr "警告控制:"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
 msgstr "每隔 NUMBER 个记录显示进度信息(默认为 10 个)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
 msgstr "ACTION"
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
 msgstr "在每个检查点上执行 ACTION"
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
 msgstr "只要不是所有链接都被输出就打印信息"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
 msgstr "SIGNAL"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
@@ -1990,112 +2013,118 @@ msgstr ""
 "号为: SIGHUP,SIGQUIT,SIGINT,SIGUSR1 和 SIGUSR2;同时也接受不带 SIG 前缀的"
 "信号名称"
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "以 UTC 格式打印文件修改信息"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "将详细输出发送至 FILE"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "每个信息都显示归档内的块数"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "每次操作都要求确认"
 
-#: src/tar.c:744
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "显示 tar 默认选项"
 
-#: src/tar.c:746
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr "列表或解压时,列出每个不匹配查找标准的目录"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
 msgstr "显示变换后的文件名或归档名"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
 msgstr "STYLE"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
 msgstr "设置名称引用风格;有效的 STYLE 值请参阅以下说明"
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
 msgstr "来自 STRING 的额外的引用字符"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
 msgstr "禁用来自 STRING 的字符引用"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
 msgstr "兼容性选项:"
 
-#: src/tar.c:764
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr "创建归档时,相当于 --old-archive;展开归档时,相当于 --no-same-owner"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
 msgstr "其它选项:"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
 msgstr "禁用某些潜在的有危险的选项"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
-msgstr "您不能指定除“-Acdtrux”外的选项"
+#: src/tar.c:927
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
+msgstr "您不能指定超过一个\"-Acdtrux\"或是\"--test-label\"外的选项"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
 msgstr "压缩选项冲突"
 
-#: src/tar.c:986
+#: src/tar.c:993
 #, c-format
 msgid "Unknown signal name: %s"
-msgstr " 未知的信号名称: %s"
+msgstr "未知的信号名称: %s"
 
-#: src/tar.c:1010
+#: src/tar.c:1017
 msgid "Date sample file not found"
 msgstr "找不到数据样板文件"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "把未知的时间格式 %2$s 替换为 %1$s"
 
-#: src/tar.c:1043
+#: src/tar.c:1054
 #, c-format
 msgid "Option %s: Treating date `%s' as %s"
 msgstr "选项 %s: 将日期 ‘%s’ 当作 %s"
 
-#: src/tar.c:1120
+#: src/tar.c:1132
 #, c-format
 msgid "%s: file list already read"
 msgstr "%s: 文件列表已经读取"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
 msgstr "%s: 读取的文件名含有空字符"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, c-format
+msgid "filter the archive through %s"
+msgstr "通过 %s 过滤归档"
+
+#: src/tar.c:1290
+msgid "Valid arguments for the --quoting-style option are:"
 msgstr "--quoting-style 选项的有效参数为:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2103,50 +2132,53 @@ msgstr ""
 "\n"
 "此 tar 默认为:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 #, fuzzy
 msgid "Invalid blocking factor"
 msgstr "无效的块因子"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "无效的磁带长度"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+msgid "Invalid incremental level value"
+msgstr "无效的增量度"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "多于一个时间阈值"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 #, fuzzy
 msgid "Invalid sparse version value"
 msgstr "无效的离散版本值"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
 msgstr "此平台不支持 --atime-preserve=‘system’ "
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
 msgstr "--checkpoint 值不是个整数"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
-msgstr "%s:无效的组"
+#: src/tar.c:1830
+msgid "Invalid group"
+msgstr "无效的组"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "选项中给出无效的访问模式"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "无效的数字"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "无效的所有者"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
@@ -2154,110 +2186,114 @@ msgstr ""
 "--preserve 选项已经废弃了,请使用 --preserve-permissions --preserve-order 代"
 "替"
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
 msgstr "无效的记录大小"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
 msgstr "记录大小必须是 %d 的倍数。"
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "无效的元素数"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
 msgstr "仅允许使用一个 --to-command 选项"
 
-#: src/tar.c:1968
+#: src/tar.c:2100
 #, c-format
 msgid "Malformed density argument: %s"
 msgstr "错误的压缩参数: %s"
 
-#: src/tar.c:1994
+#: src/tar.c:2126
 #, c-format
 msgid "Unknown density: `%c'"
 msgstr "未知的压缩参数: ‘%c’"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
 msgstr "本 tar 不支持选项“-[0-7][lmh]”"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
 msgstr "[FILE]..."
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
 msgstr "旧选项“%c”需要参数。"
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "没有一个文件列表时 --occurrence 是没有意义的"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
 msgstr "--occurrence 不能用于请求的操作模式中"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
 msgstr "多个归档文件需要使用“-M”选项"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
 msgstr "无法在使用 --newer 的时候使用 --listed-incremental"
 
-#: src/tar.c:2292
+#: src/tar.c:2387
+msgid "--level is meaningless without --listed-incremental"
+msgstr "没有 --listed-incremental 选项的话 --level 选项是无意义的"
+
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
 msgstr[0] "%s:卷标过长 (限制为 %lu 字节)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
 msgstr "无法检验多卷归档文件"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
 msgstr "无法检验压缩归档文件"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "无法使用多卷压缩归档文件"
 
-#: src/tar.c:2319
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
 msgstr "无法联结压缩归档文件"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "--pax-option 只能用于 POSIX 归档中"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
 msgstr "卷长度不可小于记录大小"
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
 msgstr "--preserve-order 与 --listed-incremental 不匹配"
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
 msgstr "谨慎地拒绝创建空归档文件"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
 msgstr "选项“-Aru”与“-f -”不兼容"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
-msgstr "您必须从选项“-Acdtrux”中指定一个"
+#: src/tar.c:2592
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
+msgstr "您必须从\"-Acdtrux\"或是\"--test-label\"选项中指定一个"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
 msgstr "由于前次错误,将以上次的错误状态退出"
@@ -2268,79 +2304,83 @@ msgid "%s: File shrank by %s byte"
 msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s:文件缩小 %s 字节"
 
-#: src/xheader.c:156
+#: src/xheader.c:163
 #, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "关键字 %s 未知或还未实现"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+msgid "Time stamp is out of allowed range"
+msgstr "时间标记超出允许范围"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
 msgstr "不能使用模式 %s"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "不能覆盖关键字 %s"
 
-#: src/xheader.c:496
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
 msgstr "错误的扩展头: 缺少 length"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
 msgstr "扩展头长度超出所允许的范围"
 
-#: src/xheader.c:511
+#: src/xheader.c:556
 #, c-format
 msgid "Extended header length %*s is out of range"
 msgstr "扩展头长度 %*s 超出范围"
 
-#: src/xheader.c:523
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
 msgstr "错误的扩展头: length 后缺少空白符"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
 msgstr "错误的扩展头: 缺少等于符号"
 
-#: src/xheader.c:537
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
 msgstr "错误的扩展头: 缺少空行"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
 msgstr "忽略未知的扩展头关键字‘%s’"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
 msgstr "生成的关键字/值对太长了(keyword=%s, length=%s)"
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
+#: src/xheader.c:862
 #, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
 msgstr "扩展头 %s=%s 超出范围 %s..%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
 #, c-format
 msgid "Malformed extended header: invalid %s=%s"
 msgstr "错误的扩展头: %s=%s 无效"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
 #, c-format
 msgid "Malformed extended header: excess %s=%s"
 msgstr "错误的扩展头: %s=%s 溢出"
 
-#: src/xheader.c:1326
+#: src/xheader.c:1378
 #, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
 msgstr "错误的扩展头: %s 无效: 非预期的分隔符 %c"
 
-#: src/xheader.c:1336
+#: src/xheader.c:1388
 #, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
 msgstr "错误的扩展头: %s 无效: 奇怪的数值"
@@ -2381,7 +2421,7 @@ msgstr "写入操作的检查点 %u"
 msgid "Read checkpoint %u"
 msgstr "读取操作的检查点 %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
@@ -2389,84 +2429,87 @@ msgstr ""
 "genfile 为 GNU paxutils 测试软件操作数据文件。\n"
 "选项为:\n"
 
-#: tests/genfile.c:126
+#: tests/genfile.c:128
 msgid "File creation options:"
 msgstr "文件创建选项:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
 msgstr "SIZE"
 
-#: tests/genfile.c:128
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
 msgstr "创建指定 SIZE 的文件"
 
-#: tests/genfile.c:130
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
 msgstr "写入文件 NAME,而不是标准输出"
 
-#: tests/genfile.c:132
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
 msgstr "从 FILE 读取文件名"
 
-#: tests/genfile.c:134
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
 msgstr "-T 读取以 NULL 终止的名字"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
 msgstr "以指定的 PATTERN 填充文件。PATTERN 可以是‘default’或是‘zeros’"
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
 msgstr "离散文件的块大小"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 #, fuzzy
 msgid "Generate sparse file. Rest of the command line gives the file map."
 msgstr "生成离散文件。命令行其余选项指定 map 文件。"
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
 msgstr "OFFSET"
 
-#: tests/genfile.c:144
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
 msgstr "在写入数据前定位至指定的偏移位"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
 msgstr "文件统计选项:"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
 msgstr "打印每个给定文件的 stat 结构定义的内容。默认 FORMAT 是: "
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
 msgstr "同步执行选项:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+msgid "OPTION"
+msgstr "OPTION"
+
+#: tests/genfile.c:165
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
-"执行指定的 COMMAND。与 --checkpoint 或 --cut,--append,--touch 中的一个一起"
-"使用时有用"
+"执行 ARGS。与 --checkpoint 或 --cut,--append,--touch 中的一个一起使用时有用"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
 msgstr "只要达到 checkpoint NUMBER 指定的数值就执行指定的操作(见下)"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
 msgstr "为下一个 --touch 选项设定日期"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
 msgstr "显示执行的 checkpoints 以及 COMMAND 的退出状态"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
@@ -2474,142 +2517,217 @@ msgstr ""
 "同步执行操作。当达到由 --checkpoint 选项指定的 checkpoint 数值时会执行这些操"
 "作。"
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
 msgstr "截短 FILE 至由前面 --length 选项指定的大小(如果未指定的话,默认 0)"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
 msgstr "添加 SIZE 字节至 FILE。SIZE 由前面的 --length 选项指定。"
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
 msgstr "更新 FILE 的访问和修改时间"
 
-#: tests/genfile.c:190
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
 msgstr "执行 COMMAND"
 
-#: tests/genfile.c:240
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr "删除 FILE"
+
+#: tests/genfile.c:245
 #, c-format
 msgid "Invalid size: %s"
 msgstr "无效的值: %s"
 
-#: tests/genfile.c:245
+#: tests/genfile.c:250
 #, c-format
 msgid "Number out of allowed range: %s"
 msgstr "数值超出所允许的范围: %s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
 msgstr "负值: %s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
 msgstr "stat(%s) 错误"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
 msgstr "需要文件长度为 %lu,实际为 %lu"
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
 msgstr "所创建的文件非稀疏文件"
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
 msgstr "“%s”附近解析数字错误"
 
-#: tests/genfile.c:359
+#: tests/genfile.c:368
 #, c-format
 msgid "Unknown date format"
 msgstr "未知的数据格式"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
 msgstr "[ARGS...]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
 msgstr "无法打开“%s”"
 
-#: tests/genfile.c:425
+#: tests/genfile.c:435
 msgid "cannot seek"
 msgstr "无法定位"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
 msgstr "文件名包含空字符"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
 msgstr "使用 --file 选项无法在标准输出上生成离散文件"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
 msgstr "不正确的掩码(“%s”附近)"
 
-#: tests/genfile.c:591 tests/genfile.c:624
+#: tests/genfile.c:601 tests/genfile.c:634
 #, c-format
 msgid "Unknown field `%s'"
 msgstr "未知的文件掩码位“%s”"
 
-#: tests/genfile.c:651
+#: tests/genfile.c:661
 #, c-format
 msgid "cannot set time on `%s'"
 msgstr "无法设定“%s”的时间"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:700
+#, c-format
+msgid "cannot unlink `%s'"
+msgstr "无法删除 \"%s\""
+
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
 msgstr "命令成功退出\n"
 
-#: tests/genfile.c:807
+#: tests/genfile.c:828
 #, c-format
 msgid "Command failed with status %d\n"
 msgstr "命令出错,状态 %d\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
 msgstr "命令由信号 %d 终止了\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
 msgstr "命令由信号 %d 停止了\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
 msgstr "命令输出 core\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
 msgstr "命令终止\n"
 
-#: tests/genfile.c:851
+#: tests/genfile.c:872
 #, c-format
 msgid "--stat requires file names"
 msgstr "--stat 选项需要文件名"
 
-#: tests/genfile.c:864
-#, c-format
-msgid "too many arguments"
-msgstr "参数过多"
+#~ msgid "Cannot resolve hostname %s"
+#~ msgstr "无法解析主机 %s"
+
+#~ msgid "suppress this warning."
+#~ msgstr "不显示此警告。"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s:非法选项 -- %c\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to <%s>.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "将错误报告到 <%s>。\n"
+
+#~ msgid "Input string too long"
+#~ msgstr "输入字符串太长了"
+
+#~ msgid "Number syntax error"
+#~ msgstr "编号语法错误"
+
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd:无法分配缓冲区空间\n"
+
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "无法分配缓冲区空间"
+
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "请用“%s --help”获得更多信息。\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
+#~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
+#~ msgstr ""
+#~ "用法:%s [选项]\n"
+#~ "操作磁带驱动器,接受来自远程进程的命令。\n"
+#~ "\n"
+#~ "  --version  输出版本信息。\n"
+#~ "  --help  输出此帮助。\n"
+
+#~ msgid "Seek offset error"
+#~ msgstr "定位偏移量错误"
+
+#~ msgid "Premature end of file"
+#~ msgstr "过早的文件结尾"
+
+#~ msgid "Reading %s\n"
+#~ msgstr "正在读入 %s\n"
+
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "错误不可恢复:现在退出"
+
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "通过 bzip2 过滤归档"
+
+#~ msgid "filter the archive through gzip"
+#~ msgstr "通过 gzip 过滤归档"
+
+#~ msgid "filter the archive through compress"
+#~ msgstr "通过 compress 过滤归档"
+
+#~ msgid "filter the archive through lzma"
+#~ msgstr "通过 lzma 过滤归档"
+
+#~ msgid "filter the archive through lzop"
+#~ msgstr "通过 lzop 过滤归档"
 
 #~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
 #~ msgstr "警告:不支持 -I 选项,或许您的意思是 -j 或者 -T ?"
@@ -2626,9 +2744,6 @@ msgstr "参数过多"
 #~ msgid "Visible long name error"
 #~ msgstr "可见的长文件名错误"
 
-#~ msgid "Time stamp out of range"
-#~ msgstr "时间标记超出范围"
-
 #~ msgid "Device number out of range"
 #~ msgstr "设备号超出范围"
 
index 41227d65cc522791fc05090242beaef4d34ce9ee..61b79cc0ae0b3c6f59be907b47979dbbe9c761cc 100644 (file)
Binary files a/po/zh_TW.gmo and b/po/zh_TW.gmo differ
index 8baed54198e56a9c2ec3a3ad4c112c6cb8a2bf63..b4d86982884ba1393891cd4eeed68a8c9c614a25 100644 (file)
-# Traditional Chinese Messages for tar
+# Traditional Chinese Messages for tar.
 # Copyright (C) 2005 Free Software Foundation, Inc.
-# Wei-Lun Chao <chaoweilun@pcmail.com.tw>, 2005
+# This file is distributed under the same license as the tar package.
+# Wei-Lun Chao <chaoweilun@gmail.com>, 2009.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: tar 1.15.1\n"
+"Project-Id-Version: tar 1.22\n"
 "Report-Msgid-Bugs-To: bug-tar@gnu.org\n"
-"POT-Creation-Date: 2009-03-05 09:18+0200\n"
-"PO-Revision-Date: 2005-05-10 17:13+0800\n"
-"Last-Translator: Wei-Lun Chao <chaoweilun@pcmail.com.tw>\n"
+"POT-Creation-Date: 2010-03-10 12:53+0200\n"
+"PO-Revision-Date: 2009-08-30 00:17+0800\n"
+"Last-Translator: Wei-Lun Chao <chaoweilun@gmail.com>\n"
 "Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: lib/argmatch.c:133
+#: gnu/argmatch.c:135
 #, c-format
 msgid "invalid argument %s for %s"
 msgstr "%2$s 的引數 %1$s 無效"
 
-#: lib/argmatch.c:134
+#: gnu/argmatch.c:136
 #, c-format
 msgid "ambiguous argument %s for %s"
-msgstr "%2$s 的引數 %1$s 是不明確的"
+msgstr "%2$s 的引數 %1$s 是模稜兩可的"
 
-#: lib/argmatch.c:153
+#: gnu/argmatch.c:155
 #, c-format
 msgid "Valid arguments are:"
 msgstr "有效的引數為:"
 
-#: lib/argp-help.c:147
+#: gnu/argp-help.c:149
 #, c-format
 msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
-msgstr ""
+msgstr "ARGP_HELP_FMT:%s 值是少於或等於 %s"
 
-#: lib/argp-help.c:220
+#: gnu/argp-help.c:222
 #, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
 msgstr "%.*s: ARGP_HELP_FMT 參數需要一個值"
 
-#: lib/argp-help.c:226
-#, fuzzy, c-format
+#: gnu/argp-help.c:228
+#, c-format
 msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
-msgstr "%.*s: ARGP_HELP_FMT 參數需要一個值"
+msgstr "%.*s: ARGP_HELP_FMT 參數必須是正值"
 
-#: lib/argp-help.c:235
+#: gnu/argp-help.c:237
 #, c-format
 msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
-msgstr "%.*s: 未知的 ARGP_HELP_FMT 參數"
+msgstr "%.*s: 不明的 ARGP_HELP_FMT 參數"
 
-#: lib/argp-help.c:247
+#: gnu/argp-help.c:249
 #, c-format
 msgid "Garbage in ARGP_HELP_FMT: %s"
 msgstr "ARGP_HELP_FMT 中無用的資訊: %s"
 
-#: lib/argp-help.c:1246
+#: gnu/argp-help.c:1246
 msgid ""
 "Mandatory or optional arguments to long options are also mandatory or "
 "optional for any corresponding short options."
 msgstr "長選項的必須或可選用的引數也是相對應短選項的必須或可選用的引數。"
 
-#: lib/argp-help.c:1639
+#: gnu/argp-help.c:1639
 msgid "Usage:"
-msgstr "用法:"
+msgstr "用法"
 
-#: lib/argp-help.c:1643
+#: gnu/argp-help.c:1643
 msgid "  or: "
-msgstr "  或者: "
+msgstr "  或"
 
-#: lib/argp-help.c:1655
+#: gnu/argp-help.c:1655
 msgid " [OPTION...]"
-msgstr " [選項...]"
+msgstr " [選項]"
 
-#: lib/argp-help.c:1682
+#: gnu/argp-help.c:1682
 #, c-format
 msgid "Try `%s --help' or `%s --usage' for more information.\n"
-msgstr "è«\8bå\98\97試â\80\98%s --helpâ\80\99æ\88\96â\80\98%s --usageâ\80\99ä¾\86ç\8d²å\8f\96更多資訊。\n"
+msgstr "試試ã\80\8c%s --helpã\80\8dæ\88\96ã\80\8c%s --usageã\80\8d以ç\8d²å¾\97更多資訊。\n"
 
-#: lib/argp-help.c:1710 src/tar.c:1256
+#: gnu/argp-help.c:1710
 #, c-format
 msgid "Report bugs to %s.\n"
 msgstr "請向 %s 回報錯誤。\n"
 
-#: lib/argp-help.c:1929 lib/error.c:125
+#: gnu/argp-help.c:1929 gnu/error.c:155
 msgid "Unknown system error"
 msgstr "不明的系統錯誤"
 
-#: lib/argp-parse.c:81 src/tar.c:774
-#, fuzzy
+#: gnu/argp-parse.c:83
 msgid "give this help list"
 msgstr "給出這個使用方式列表"
 
-#: lib/argp-parse.c:82 src/tar.c:775
-#, fuzzy
+#: gnu/argp-parse.c:84
 msgid "give a short usage message"
 msgstr "給出簡短的使用訊息"
 
-#: lib/argp-parse.c:83 src/tar.c:468 src/tar.c:470 src/tar.c:539
-#: tests/genfile.c:129
+#: gnu/argp-parse.c:85 src/tar.c:488 src/tar.c:490 src/tar.c:559
+#: tests/genfile.c:131
 msgid "NAME"
 msgstr "名稱"
 
-#: lib/argp-parse.c:83
+#: gnu/argp-parse.c:85
 msgid "set the program name"
-msgstr ""
+msgstr "設定程式名稱"
 
-#: lib/argp-parse.c:84
+#: gnu/argp-parse.c:86
 msgid "SECS"
-msgstr ""
+msgstr ""
 
-#: lib/argp-parse.c:85 src/tar.c:780
+#: gnu/argp-parse.c:87
 msgid "hang for SECS seconds (default 3600)"
-msgstr ""
+msgstr "掛斷若干秒 (預設 3600)"
 
-#: lib/argp-parse.c:142 src/tar.c:776
-#, fuzzy
+#: gnu/argp-parse.c:144
 msgid "print program version"
 msgstr "印出程式版本"
 
-#: lib/argp-parse.c:158
+#: gnu/argp-parse.c:160
 #, c-format
 msgid "(PROGRAM ERROR) No version known!?"
-msgstr ""
+msgstr "(程式錯誤) 沒有已知版本 !?"
 
-#: lib/argp-parse.c:611
-#, fuzzy, c-format
+#: gnu/argp-parse.c:613
+#, c-format
 msgid "%s: Too many arguments\n"
-msgstr "%s:選項‘%s’需要引數\n"
+msgstr "%s:太多引數\n"
 
-#: lib/argp-parse.c:754
+#: gnu/argp-parse.c:756
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
-msgstr ""
+msgstr "(程式錯誤) 選項應該已被辨識 !?"
 
-#: lib/closeout.c:112
+#: gnu/closeout.c:114
 msgid "write error"
-msgstr ""
-
-#: lib/getopt.c:526 lib/getopt.c:542
-#, c-format
-msgid "%s: option `%s' is ambiguous\n"
-msgstr "%s:選項‘%s’是不明確的\n"
-
-#: lib/getopt.c:575 lib/getopt.c:579
-#, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
-msgstr "%s:選項‘--%s’不可配合引數使用\n"
-
-#: lib/getopt.c:588 lib/getopt.c:593
-#, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
-msgstr "%s:選項‘%c%s’不可配合引數使用\n"
-
-#: lib/getopt.c:636 lib/getopt.c:655 lib/getopt.c:971 lib/getopt.c:990
-#, c-format
-msgid "%s: option `%s' requires an argument\n"
-msgstr "%s:選項‘%s’需要引數\n"
-
-#: lib/getopt.c:693 lib/getopt.c:696
-#, c-format
-msgid "%s: unrecognized option `--%s'\n"
-msgstr "%s:無法識別的選項‘--%s’\n"
-
-#: lib/getopt.c:704 lib/getopt.c:707
-#, c-format
-msgid "%s: unrecognized option `%c%s'\n"
-msgstr "%s:無法識別的選項‘%c%s’\n"
-
-#: lib/getopt.c:759 lib/getopt.c:762
-#, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s:不合法的選項 ─ %c\n"
-
-#: lib/getopt.c:768 lib/getopt.c:771
-#, c-format
-msgid "%s: invalid option -- %c\n"
-msgstr "%s:無效的選項 ─ %c\n"
-
-#: lib/getopt.c:823 lib/getopt.c:839 lib/getopt.c:1043 lib/getopt.c:1061
-#, c-format
-msgid "%s: option requires an argument -- %c\n"
-msgstr "%s:選項需要引數 ─ %c\n"
-
-#: lib/getopt.c:892 lib/getopt.c:908
-#, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
-msgstr "%s:選項‘-W %s’是不明確的\n"
-
-#: lib/getopt.c:932 lib/getopt.c:950
-#, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
-msgstr "%s:選項‘-W %s’不可配合引數使用\n"
+msgstr "寫入錯誤"
 
-#: lib/obstack.c:423 lib/obstack.c:425 lib/xalloc-die.c:34 src/extract.c:1374
-msgid "memory exhausted"
-msgstr "記憶體耗盡"
-
-#: lib/openat-die.c:35
+#: gnu/getopt.c:531 gnu/getopt.c:547
 #, fuzzy, c-format
-msgid "unable to record current working directory"
-msgstr "無法更改使用中的目錄"
+msgid "%s: option '%s' is ambiguous\n"
+msgstr "%s:選項「%s」是模稜兩可的\n"
 
-#: lib/openat-die.c:48
+#: gnu/getopt.c:580 gnu/getopt.c:584
 #, fuzzy, c-format
-msgid "failed to return to initial working directory"
-msgstr "無法儲存使用中的目錄"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:58 lib/paxerror.c:71
-#, c-format
-msgid "%s: Cannot %s"
-msgstr "%s:無法 %s"
-
-#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
-#. Directly translating this to another language will not work, first because
-#. %s itself is not translated.
-#. Translate it as `%s: Function %s failed'.
-#: lib/paxerror.c:84
-#, c-format
-msgid "%s: Warning: Cannot %s"
-msgstr "%s:警告:無法 %s"
+msgid "%s: option '--%s' doesn't allow an argument\n"
+msgstr "%s:選項「--%s」不允許引數\n"
 
-#: lib/paxerror.c:93
-#, c-format
-msgid "%s: Cannot change mode to %s"
-msgstr "%s:無法更改模式至 %s"
+#: gnu/getopt.c:593 gnu/getopt.c:598
+#, fuzzy, c-format
+msgid "%s: option '%c%s' doesn't allow an argument\n"
+msgstr "%s:選項「%c%s」不允許引數\n"
 
-#: lib/paxerror.c:101
-#, c-format
-msgid "%s: Cannot change ownership to uid %lu, gid %lu"
-msgstr "%s:無法更改擁有者至 uid %lu,所屬群組至 gid %lu"
+#: gnu/getopt.c:641 gnu/getopt.c:660 gnu/getopt.c:963 gnu/getopt.c:982
+#, fuzzy, c-format
+msgid "%s: option '%s' requires an argument\n"
+msgstr "%s:選項「%s」需要一個引數\n"
 
-#: lib/paxerror.c:127
-#, c-format
-msgid "%s: Cannot hard link to %s"
-msgstr "%s:無法建立實際連結 (hard link) 至 %s"
+#: gnu/getopt.c:698 gnu/getopt.c:701
+#, fuzzy, c-format
+msgid "%s: unrecognized option '--%s'\n"
+msgstr "%s:無法辨識的選項「--%s」\n"
 
-#: lib/paxerror.c:179 lib/paxerror.c:211
+#: gnu/getopt.c:709 gnu/getopt.c:712
 #, fuzzy, c-format
-msgid "%s: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s:讀取 %s 位元組時錯誤,正在讀取 %lu 位元組"
+msgid "%s: unrecognized option '%c%s'\n"
+msgstr "%s:無法辨識的選項「%c%s」\n"
 
-#: lib/paxerror.c:192
+#: gnu/getopt.c:761 gnu/getopt.c:764
 #, fuzzy, c-format
-msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
-msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
-msgstr[0] "%s:警告:讀取 %s 位元組時錯誤,正在讀取 %lu 位元組"
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s:無效的選項 -- %c\n"
 
-#: lib/paxerror.c:259
-#, c-format
-msgid "%s: Cannot seek to %s"
-msgstr "%s:無法搜尋至 %s"
+#: gnu/getopt.c:814 gnu/getopt.c:831 gnu/getopt.c:1034 gnu/getopt.c:1052
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s:選項需要一個引數 -- %c\n"
 
-#: lib/paxerror.c:275
-#, c-format
-msgid "%s: Warning: Cannot seek to %s"
-msgstr "%s:警告:無法搜尋至 %s"
+#: gnu/getopt.c:884 gnu/getopt.c:900
+#, fuzzy, c-format
+msgid "%s: option '-W %s' is ambiguous\n"
+msgstr "%s:選項「-W %s」是模稜兩可的\n"
 
-#: lib/paxerror.c:284
-#, c-format
-msgid "%s: Cannot create symlink to %s"
-msgstr "%s:無法建立符號連結至 %s"
+#: gnu/getopt.c:924 gnu/getopt.c:942
+#, fuzzy, c-format
+msgid "%s: option '-W %s' doesn't allow an argument\n"
+msgstr "%s:選項「-W %s」不允許引數\n"
 
-#: lib/paxerror.c:349
-#, c-format
-msgid "%s: Wrote only %lu of %lu byte"
-msgid_plural "%s: Wrote only %lu of %lu bytes"
-msgstr[0] "%1$s:只能寫入 %3$lu 位元組中的 %2$lu 個"
+#: gnu/obstack.c:425 gnu/obstack.c:427 gnu/xalloc-die.c:36
+msgid "memory exhausted"
+msgstr "記憶體已耗盡"
 
-#: lib/paxnames.c:155
+#: gnu/openat-die.c:36
 #, c-format
-msgid "Removing leading `%s' from member names"
-msgstr "從成員名稱中移除前端的‘%s’"
+msgid "unable to record current working directory"
+msgstr "無法記錄目前的工作目錄"
 
-#: lib/paxnames.c:156
+#: gnu/openat-die.c:54
 #, c-format
-msgid "Removing leading `%s' from hard link targets"
-msgstr "從硬式連結目標中移除前端的‘%s’"
-
-#: lib/paxnames.c:169
-msgid "Substituting `.' for empty member name"
-msgstr "以‘.’來替換空白的成員名稱"
-
-#: lib/paxnames.c:170
-msgid "Substituting `.' for empty hard link target"
-msgstr "以‘.’來替換空白的硬式連結目標"
+msgid "failed to return to initial working directory"
+msgstr "回到初始工作目錄時失敗"
 
 #. TRANSLATORS:
 #. Get translations for open and closing quotation marks.
@@ -303,19 +212,19 @@ msgstr "以‘.’來替換空白的硬式連結目標"
 #. translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and
 #. should translate "'" to U+201D (RIGHT DOUBLE QUOTATION
 #. MARK).  A British English Unicode locale should instead
-#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
-#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
+#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK)
+#. and U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
 #.
 #. If you don't know what to put here, please see
 #. <http://en.wikipedia.org/wiki/Quotation_mark#Glyphs>
 #. and use glyphs suitable for your language.
-#: lib/quotearg.c:249
+#: gnu/quotearg.c:274
 msgid "`"
-msgstr ""
+msgstr ""
 
-#: lib/quotearg.c:250
+#: gnu/quotearg.c:275
 msgid "'"
-msgstr ""
+msgstr ""
 
 #. TRANSLATORS: A regular expression testing for an affirmative answer
 #. (english: "yes").  Testing the first character may be sufficient.
@@ -323,9 +232,9 @@ msgstr "’"
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^yesexpr='
-#: lib/rpmatch.c:147
+#: gnu/rpmatch.c:149
 msgid "^[yY]"
-msgstr ""
+msgstr "^[yY是]"
 
 #. TRANSLATORS: A regular expression testing for a negative answer
 #. (english: "no").  Testing the first character may be sufficient.
@@ -333,38 +242,28 @@ msgstr ""
 #. To enquire the regular expression that your system uses for this
 #. purpose, you can use the command
 #. locale -k LC_MESSAGES | grep '^noexpr='
-#: lib/rpmatch.c:160
+#: gnu/rpmatch.c:162
 msgid "^[nN]"
-msgstr ""
-
-#: lib/rtapelib.c:299
-#, c-format
-msgid "exec/tcp: Service not available"
-msgstr "exec/tcp: 無法提供服務"
-
-#: lib/rtapelib.c:303
-#, c-format
-msgid "stdin"
-msgstr "標準輸入"
+msgstr "^[nN否]"
 
-#: lib/rtapelib.c:306
+#: gnu/version-etc.c:76
 #, c-format
-msgid "stdout"
-msgstr "標準輸出"
+msgid "Packaged by %s (%s)\n"
+msgstr ""
 
-#: lib/rtapelib.c:512
+#: gnu/version-etc.c:79
 #, c-format
-msgid "Cannot execute remote shell"
-msgstr "無法執行遠端 shell"
+msgid "Packaged by %s\n"
+msgstr ""
 
 #. TRANSLATORS: Translate "(C)" to the copyright symbol
 #. (C-in-a-circle), if this symbol is available in the user's
 #. locale.  Otherwise, do not translate "(C)"; leave it as-is.
-#: lib/version-etc.c:65
+#: gnu/version-etc.c:86
 msgid "(C)"
-msgstr ""
+msgstr "©"
 
-#: lib/version-etc.c:67
+#: gnu/version-etc.c:88
 msgid ""
 "\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
@@ -373,455 +272,620 @@ msgid ""
 "There is NO WARRANTY, to the extent permitted by law.\n"
 "\n"
 msgstr ""
+"\n"
+"使用授權 GPLv3+: GNU GPL 第三版或後續版本<http://gnu.org/licenses/gpl."
+"html>。\n"
+"這是自由軟體:您可以自由變更和再次散布它。\n"
+"在法律所允許的範圍內沒有任何擔保。\n"
+"\n"
 
 #. TRANSLATORS: %s denotes an author name.
-#: lib/version-etc.c:83
-#, fuzzy, c-format
+#: gnu/version-etc.c:104
+#, c-format
 msgid "Written by %s.\n"
-msgstr "由 F. Pinard 編寫。"
+msgstr "由 %s 編寫。\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:87
-#, fuzzy, c-format
+#: gnu/version-etc.c:108
+#, c-format
 msgid "Written by %s and %s.\n"
-msgstr "由 F. Pinard 編寫。"
+msgstr "由 %s 和 %s 編寫。\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
-#: lib/version-etc.c:91
-#, fuzzy, c-format
+#: gnu/version-etc.c:112
+#, c-format
 msgid "Written by %s, %s, and %s.\n"
-msgstr "由 F. Pinard 編寫。"
+msgstr "由 %s, %s, 和 %s 編寫。\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:97
+#: gnu/version-etc.c:119
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "and %s.\n"
 msgstr ""
+"由 %s, %s, %s,\n"
+"和 %s 編寫。\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:103
+#: gnu/version-etc.c:126
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, and %s.\n"
 msgstr ""
+"寫作由 %s, %s, %s,\n"
+" %s, 和 %s 編寫。\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:109
+#: gnu/version-etc.c:133
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, and %s.\n"
 msgstr ""
+"寫作由 %s, %s, %s,\n"
+" %s, %s, 和 %s 編寫。\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:116
+#: gnu/version-etc.c:141
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, %s, and %s.\n"
 msgstr ""
+"寫作由 %s, %s, %s,\n"
+" %s, %s, %s, 和 %s 編寫。\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:123
+#: gnu/version-etc.c:149
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, %s, %s,\n"
 "and %s.\n"
 msgstr ""
+"寫作由 %s, %s, %s,\n"
+" %s, %s, %s, %s,\n"
+"和 %s 編寫。\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:131
+#: gnu/version-etc.c:158
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, %s, %s,\n"
 "%s, and %s.\n"
 msgstr ""
+"寫作由 %s, %s, %s,\n"
+" %s, %s, %s, %s,\n"
+" %s, 和 %s 編寫。\n"
 
 #. TRANSLATORS: Each %s denotes an author name.
 #. You can use line breaks, estimating that each author name occupies
 #. ca. 16 screen columns and that a screen line has ca. 80 columns.
-#: lib/version-etc.c:141
+#: gnu/version-etc.c:169
 #, c-format
 msgid ""
 "Written by %s, %s, %s,\n"
 "%s, %s, %s, %s,\n"
 "%s, %s, and others.\n"
 msgstr ""
+"寫作由 %s, %s, %s,\n"
+" %s, %s, %s, %s,\n"
+" %s, %s, 和其他人編寫。\n"
 
 #. TRANSLATORS: The placeholder indicates the bug-reporting address
 #. for this package.  Please add _another line_ saying
 #. "Report translation bugs to <...>\n" with the address for translation
 #. bugs (typically your translation team's web or email address).
-#: lib/version-etc.c:181 rmt/rmt.c:315
-#, c-format
+#: gnu/version-etc.c:247
+#, fuzzy, c-format
 msgid ""
 "\n"
-"Report bugs to <%s>.\n"
+"Report bugs to: %s\n"
+msgstr "請向 %s 回報錯誤。\n"
+
+#: gnu/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
 msgstr ""
 "\n"
-"請向 <%s> 回報錯誤。\n"
+"將錯誤回報給 <%s>。\n"
 
-#: lib/version-etc.c:182
+#: gnu/version-etc.c:253
 #, c-format
-msgid "%s home page: <http://www.gnu.org/software/%s/>.\n"
+msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: lib/version-etc.c:184
-msgid "General help using GNU software: <http://www.gnu.org/gethelp/>.\n"
-msgstr ""
+#: gnu/version-etc.c:255
+#, fuzzy, c-format
+msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+msgstr "%s 首頁:<http://www.gnu.org/software/%s/>。\n"
 
-#: rmt/rmt.c:142
-msgid "Input string too long"
-msgstr ""
+#: gnu/version-etc.c:258
+#, fuzzy
+msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
+msgstr "使用 GNU 軟體的一般說明:<http://www.gnu.org/gethelp/>。\n"
 
-#: rmt/rmt.c:161
-msgid "Number syntax error"
-msgstr ""
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:58 lib/paxerror.c:71
+#, c-format
+msgid "%s: Cannot %s"
+msgstr "%s:無法 %s"
 
-#: rmt/rmt.c:180
-msgid "rmtd: Cannot allocate buffer space\n"
-msgstr "rmtd:無法分配緩衝區空間\n"
+#. TRANSLATORS: %s after `Cannot' is a function name, e.g. `Cannot open'.
+#. Directly translating this to another language will not work, first because
+#. %s itself is not translated.
+#. Translate it as `%s: Function %s failed'.
+#: lib/paxerror.c:84
+#, c-format
+msgid "%s: Warning: Cannot %s"
+msgstr "%s:警告:無法 %s"
 
-#: rmt/rmt.c:182
-msgid "Cannot allocate buffer space"
-msgstr "無法分配緩衝區空間"
+#: lib/paxerror.c:93
+#, c-format
+msgid "%s: Cannot change mode to %s"
+msgstr "%s:無法變更模式為 %s"
 
-#: rmt/rmt.c:304
+#: lib/paxerror.c:101
 #, c-format
-msgid "Try `%s --help' for more information.\n"
-msgstr "請嘗試‘%s --help’來獲取更多資訊。\n"
+msgid "%s: Cannot change ownership to uid %lu, gid %lu"
+msgstr "%s:無法變更所有權為 uid %lu,gid %lu"
 
-#: rmt/rmt.c:308
-#, fuzzy, c-format
-msgid ""
-"Usage: %s [OPTION]\n"
-"Manipulate a tape drive, accepting commands from a remote process.\n"
-"\n"
-"  --version  Output version info.\n"
-"  --help     Output this help.\n"
+#: lib/paxerror.c:127
+#, c-format
+msgid "%s: Cannot hard link to %s"
+msgstr "%s:無法建立硬式連結到 %s"
+
+#: lib/paxerror.c:179 lib/paxerror.c:211
+#, c-format
+msgid "%s: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s:讀取 %s 位元組時錯誤,正在讀取 %lu 位元組"
+
+#: lib/paxerror.c:192
+#, c-format
+msgid "%s: Warning: Read error at byte %s, while reading %lu byte"
+msgid_plural "%s: Warning: Read error at byte %s, while reading %lu bytes"
+msgstr[0] "%s:警告:讀取 %s 位元組時錯誤,正在讀取 %lu 位元組"
+
+#: lib/paxerror.c:259
+#, c-format
+msgid "%s: Cannot seek to %s"
+msgstr "%s:無法尋指到 %s"
+
+#: lib/paxerror.c:275
+#, c-format
+msgid "%s: Warning: Cannot seek to %s"
+msgstr "%s:警告:無法尋指到 %s"
+
+#: lib/paxerror.c:284
+#, c-format
+msgid "%s: Cannot create symlink to %s"
+msgstr "%s:無法建立符號連結到 %s"
+
+#: lib/paxerror.c:349
+#, c-format
+msgid "%s: Wrote only %lu of %lu byte"
+msgid_plural "%s: Wrote only %lu of %lu bytes"
+msgstr[0] "%1$s:只能寫入 %3$lu 位元組中的 %2$lu 個"
+
+#: lib/paxnames.c:155
+#, c-format
+msgid "Removing leading `%s' from member names"
+msgstr "從成員名稱中移除前端的「%s」"
+
+#: lib/paxnames.c:156
+#, c-format
+msgid "Removing leading `%s' from hard link targets"
+msgstr "從硬式連結目標中移除前端的「%s」"
+
+#: lib/paxnames.c:169
+msgid "Substituting `.' for empty member name"
+msgstr "以「.」來替換空白的成員名稱"
+
+#: lib/paxnames.c:170
+msgid "Substituting `.' for empty hard link target"
+msgstr "以「.」來替換空白的硬式連結目標"
+
+#: lib/rtapelib.c:299
+#, c-format
+msgid "exec/tcp: Service not available"
+msgstr "exec/tcp:無法提供服務"
+
+#: lib/rtapelib.c:303
+#, c-format
+msgid "stdin"
+msgstr "標準輸入"
+
+#: lib/rtapelib.c:306
+#, c-format
+msgid "stdout"
+msgstr "標準輸出"
+
+#: lib/rtapelib.c:429
+#, c-format
+msgid "Cannot connect to %s: resolve failed"
 msgstr ""
-"用法: %s [選項]\n"
-"操控磁帶機,接收來自遠端行程的命令。\n"
-"\n"
-"  --version  輸出版本資訊。\n"
-"  --help  輸出本輔助說明。\n"
 
-#: rmt/rmt.c:397
+#: lib/rtapelib.c:515
+#, c-format
+msgid "Cannot execute remote shell"
+msgstr "無法執行遠端命令殼"
+
+#: rmt/rmt.c:413
+msgid "Seek direction out of range"
+msgstr "尋覓方向超出範圍"
+
+#: rmt/rmt.c:419
 #, fuzzy
-msgid "Seek offset error"
-msgstr "搜尋差值超出範圍以外"
+msgid "Invalid seek direction"
+msgstr "選項中的模式無效"
 
-#: rmt/rmt.c:406 rmt/rmt.c:547 rmt/rmt.c:557
+#: rmt/rmt.c:427
+#, fuzzy
+msgid "Invalid seek offset"
+msgstr "無效的大小:%s"
+
+#: rmt/rmt.c:433
 msgid "Seek offset out of range"
-msgstr "搜尋差值超出範圍以外"
+msgstr "尋覓偏移值超出範圍"
 
-#: rmt/rmt.c:428
-msgid "Seek direction out of range"
-msgstr "搜尋方向超出範圍以外"
+#: rmt/rmt.c:474 rmt/rmt.c:525 rmt/rmt.c:589
+#, fuzzy
+msgid "Invalid byte count"
+msgstr "無效的磁帶長度"
+
+#: rmt/rmt.c:480 rmt/rmt.c:531 rmt/rmt.c:595 rmt/rmt.c:606
+#, fuzzy
+msgid "Byte count out of range"
+msgstr "尋覓偏移值超出範圍"
 
-#: rmt/rmt.c:472
-msgid "rmtd: Premature eof\n"
+#: rmt/rmt.c:539
+#, fuzzy
+msgid "Premature eof"
 msgstr "rmtd:檔案突然結束\n"
 
-#: rmt/rmt.c:474
-msgid "Premature end of file"
-msgstr "檔案突然結束"
+#: rmt/rmt.c:582
+#, fuzzy
+msgid "Invalid operation code"
+msgstr "主要操作模式:"
+
+#: rmt/rmt.c:617 rmt/rmt.c:661
+msgid "Operation not supported"
+msgstr ""
+
+#: rmt/rmt.c:645
+#, fuzzy
+msgid "Unexpected arguments"
+msgstr "未預期的保存檔結尾"
+
+#: rmt/rmt.c:670
+msgid "Manipulate a tape drive, accepting commands from a remote process"
+msgstr ""
+
+#: rmt/rmt.c:677 src/tar.c:423 src/tar.c:427 src/tar.c:557 src/tar.c:572
+#: src/tar.c:703 src/tar.c:741 tests/genfile.c:167
+msgid "NUMBER"
+msgstr "數目"
+
+#: rmt/rmt.c:678
+msgid "set debug level"
+msgstr ""
+
+#: rmt/rmt.c:679 src/tar.c:421 src/tar.c:562 src/tar.c:638 src/tar.c:642
+#: src/tar.c:654 src/tar.c:664 src/tar.c:667 src/tar.c:669 src/tar.c:756
+#: tests/genfile.c:133 tests/genfile.c:181 tests/genfile.c:185
+#: tests/genfile.c:188 tests/genfile.c:194
+msgid "FILE"
+msgstr "檔案"
+
+#: rmt/rmt.c:680
+msgid "set debug output file name"
+msgstr ""
+
+#: rmt/rmt.c:696 rmt/rmt.c:764
+#, fuzzy, c-format
+msgid "cannot open %s"
+msgstr "無法開啟「%s」"
 
-#: rmt/rmt.c:672
+#: rmt/rmt.c:761 tests/genfile.c:885 tests/genfile.c:902
+#, c-format
+msgid "too many arguments"
+msgstr "太多引數"
+
+#: rmt/rmt.c:803
 msgid "Garbage command"
 msgstr "無用的命令"
 
-#: src/buffer.c:290 src/buffer.c:295 src/buffer.c:541 src/buffer.c:1128
-#: src/delete.c:210 src/list.c:167 src/update.c:165
+#: src/buffer.c:321 src/buffer.c:326 src/buffer.c:572 src/buffer.c:1176
+#: src/buffer.c:1222 src/buffer.c:1251 src/delete.c:211 src/list.c:171
+#: src/update.c:189
 msgid "This does not look like a tar archive"
-msgstr "它不像是 tar 保存檔"
+msgstr "這個看起來不像 tar 保存檔"
 
-#: src/buffer.c:354 src/buffer.c:363
-#, fuzzy
+#: src/buffer.c:385 src/buffer.c:394
 msgid "Total bytes written"
-msgstr "已寫入位元組總數: %s (%s, %s/s)\n"
+msgstr "已寫入位元組總數"
 
-#: src/buffer.c:361 src/buffer.c:375
+#: src/buffer.c:392 src/buffer.c:406
 msgid "Total bytes read"
-msgstr ""
+msgstr "已讀取位元組總數"
 
-#: src/buffer.c:365
-#, fuzzy, c-format
+#: src/buffer.c:396
+#, c-format
 msgid "Total bytes deleted: %s\n"
-msgstr "已寫å\85¥ä½\8då\85\83çµ\84總æ\95¸: %s (%s, %s/s)\n"
+msgstr "å·²å\88ªé\99¤ä½\8då\85\83çµ\84總æ\95¸ï¼\9a%s\n"
 
-#: src/buffer.c:454
+#: src/buffer.c:485
 msgid "(pipe)"
 msgstr "(管線)"
 
-#: src/buffer.c:477
+#: src/buffer.c:508
 msgid "Invalid value for record_size"
-msgstr "無效的錄大小"
+msgstr "無效的錄大小"
 
-#: src/buffer.c:480
+#: src/buffer.c:511
 msgid "No archive name given"
 msgstr "沒有指定保存檔名稱"
 
-#: src/buffer.c:524
+#: src/buffer.c:555
 msgid "Cannot verify stdin/stdout archive"
 msgstr "無法檢驗標準輸出入保存檔"
 
-#: src/buffer.c:538
+#: src/buffer.c:569
 #, c-format
 msgid "Archive is compressed. Use %s option"
-msgstr "保存檔壓縮過。使用 %s 選項"
+msgstr "保存檔壓縮過。使用 %s 選項"
 
-#: src/buffer.c:593 src/tar.c:2317
+#: src/buffer.c:626 src/tar.c:2429
 msgid "Cannot update compressed archives"
 msgstr "無法更新壓縮的保存檔"
 
-#: src/buffer.c:672
+#: src/buffer.c:705
 msgid "At beginning of tape, quitting now"
-msgstr "開始讀取磁帶時出錯,立刻退出"
+msgstr "位於磁帶起始部份,立刻退出"
 
-#: src/buffer.c:678
+#: src/buffer.c:711
 msgid "Too many errors, quitting"
-msgstr "錯誤過多,必須中止"
+msgstr "太多錯誤,離開中"
 
-#: src/buffer.c:697
+#: src/buffer.c:744
 #, c-format
 msgid "Record size = %lu block"
 msgid_plural "Record size = %lu blocks"
-msgstr[0] "錄大小 = %lu 區塊"
+msgstr[0] "錄大小 = %lu 區塊"
 
-#: src/buffer.c:718
+#: src/buffer.c:765
 #, c-format
 msgid "Unaligned block (%lu byte) in archive"
 msgid_plural "Unaligned block (%lu bytes) in archive"
 msgstr[0] "保存檔中未排列的區塊 (%lu 位元組)"
 
-#: src/buffer.c:795
+#: src/buffer.c:842
 msgid "Cannot backspace archive file; it may be unreadable without -i"
 msgstr "無法倒退保存檔檔案;沒有 -i 也許會無法讀取"
 
-#: src/buffer.c:827
+#: src/buffer.c:874
 msgid "rmtlseek not stopped at a record boundary"
-msgstr "rmtlseek 無法在錄分界處停止"
+msgstr "rmtlseek 無法在錄分界處停止"
 
-#: src/buffer.c:881
+#: src/buffer.c:928
 #, c-format
 msgid "%s: contains invalid volume number"
 msgstr "%s:包含無效的卷冊號碼"
 
-#: src/buffer.c:916
+#: src/buffer.c:963
 msgid "Volume number overflow"
 msgstr "卷冊號碼已滿"
 
-#: src/buffer.c:931
+#: src/buffer.c:978
 #, c-format
 msgid "Prepare volume #%d for %s and hit return: "
 msgstr "準備好卷冊 #%d 以完成 %s 並按下 return: "
 
-#: src/buffer.c:937
+#: src/buffer.c:984
 msgid "EOF where user reply was expected"
 msgstr "到達期待使用者回答的檔案末端"
 
-#: src/buffer.c:942 src/buffer.c:974
+#: src/buffer.c:989 src/buffer.c:1021
 msgid "WARNING: Archive is incomplete"
 msgstr "警告:保存檔不完整"
 
-#: src/buffer.c:956
-#, fuzzy, c-format
+#: src/buffer.c:1003
+#, c-format
 msgid ""
 " n name        Give a new file name for the next (and subsequent) volume(s)\n"
 " q             Abort tar\n"
 " y or newline  Continue operation\n"
 msgstr ""
-" n [名稱]   賦予下一個 (以及後續的) 卷冊一個新檔名\n"
-" q          中斷 tar\n"
-" !          產生一個子命令介面\n"
-" ?          印出本列表\n"
+" n 名稱        賦予下一個 (以及後續的) 卷冊一個新檔名\n"
+" q             放棄打包\n"
+" y 或 newline  繼續作業\n"
 
-#: src/buffer.c:961
+#: src/buffer.c:1008
 #, c-format
 msgid " !             Spawn a subshell\n"
-msgstr ""
+msgstr " !             衍生一個子命令殼\n"
 
-#: src/buffer.c:962
+#: src/buffer.c:1009
 #, c-format
 msgid " ?             Print this list\n"
-msgstr ""
+msgstr " ?             列印這個清單\n"
 
-#: src/buffer.c:969
+#: src/buffer.c:1016
 msgid "No new volume; exiting.\n"
-msgstr "沒有新卷冊;離開。\n"
+msgstr "沒有新卷冊;離開。\n"
 
-#: src/buffer.c:1002
+#: src/buffer.c:1049
 msgid "File name not specified. Try again.\n"
-msgstr ""
+msgstr "檔案名稱尚未指定。再次嘗試。\n"
 
-#: src/buffer.c:1015
+#: src/buffer.c:1062
 #, c-format
 msgid "Invalid input. Type ? for help.\n"
-msgstr ""
+msgstr "無效的輸入。按下 ? 以獲得說明。\n"
 
-#: src/buffer.c:1066
-#, fuzzy, c-format
+#: src/buffer.c:1113
+#, c-format
 msgid "%s command failed"
-msgstr "‘%s’指令失敗"
+msgstr "%s 命令失敗"
 
-#: src/buffer.c:1221
-#, fuzzy, c-format
+#: src/buffer.c:1294
+#, c-format
 msgid "%s is possibly continued on this volume: header contains truncated name"
-msgstr "%s 在本卷冊中並不連續"
+msgstr "%s 在本卷冊中可能連續:標頭含有截斷的名稱"
 
-#: src/buffer.c:1225
+#: src/buffer.c:1298
 #, c-format
 msgid "%s is not continued on this volume"
 msgstr "%s 在本卷冊中並不連續"
 
-#: src/buffer.c:1239
+#: src/buffer.c:1312
 #, c-format
 msgid "%s is the wrong size (%s != %s + %s)"
-msgstr "%s 的大小有錯 (%s != %s + %s)"
+msgstr "%s 的大小有錯 (%s != %s + %s)"
 
-#: src/buffer.c:1253
-#, fuzzy, c-format
+#: src/buffer.c:1326
+#, c-format
 msgid "This volume is out of sequence (%s - %s != %s)"
-msgstr "本卷冊已超出序列"
+msgstr "本卷冊已超出序列 (%s - %s !=%s)"
 
-#: src/buffer.c:1303
+#: src/buffer.c:1404 src/buffer.c:1430
 #, c-format
 msgid "Archive not labeled to match %s"
 msgstr "保存檔未標誌為符合 %s"
 
-#: src/buffer.c:1306
+#: src/buffer.c:1434
 #, c-format
 msgid "Volume %s does not match %s"
 msgstr "卷冊 %s 不符合 %s"
 
-#: src/buffer.c:1402
-#, fuzzy, c-format
+#: src/buffer.c:1530
+#, c-format
 msgid ""
 "%s: file name too long to be stored in a GNU multivolume header, truncated"
-msgstr "%s: 檔名太長,無法儲存於 GNU 多重卷冊表頭之中"
+msgstr "%s:檔名太長,無法儲存於 GNU 多重卷冊標頭之中,已截斷"
 
-#: src/buffer.c:1621
-#, fuzzy
+#: src/buffer.c:1749
 msgid "write did not end on a block boundary"
-msgstr "rmtlseek 無法在紀錄分界處停止"
+msgstr "並未於區段界限結束寫入"
 
-#: src/compare.c:96
+#: src/compare.c:95
 #, c-format
 msgid "Could only read %lu of %lu byte"
 msgid_plural "Could only read %lu of %lu bytes"
 msgstr[0] "只能讀取 %2$lu 位元組中的 %1$lu 個"
 
-#: src/compare.c:106 src/compare.c:388
+#: src/compare.c:105 src/compare.c:388
 msgid "Contents differ"
 msgstr "內容不同"
 
-#: src/compare.c:132 src/extract.c:790 src/incremen.c:1399 src/list.c:372
-#: src/list.c:1323
+#: src/compare.c:131 src/extract.c:830 src/incremen.c:1462 src/list.c:386
+#: src/list.c:1376 src/xheader.c:710
 msgid "Unexpected EOF in archive"
-msgstr "保存檔的檔案結尾不正常"
+msgstr "未預期的保存檔結尾"
 
-#: src/compare.c:180 src/compare.c:196 src/compare.c:314 src/compare.c:412
+#: src/compare.c:179 src/compare.c:195 src/compare.c:313 src/compare.c:412
 msgid "File type differs"
 msgstr "檔案類型不同"
 
-#: src/compare.c:183 src/compare.c:203 src/compare.c:328
+#: src/compare.c:182 src/compare.c:202 src/compare.c:327
 msgid "Mode differs"
 msgstr "模式不同"
 
-#: src/compare.c:206
+#: src/compare.c:205
 msgid "Uid differs"
 msgstr "Uid 號碼不同"
 
-#: src/compare.c:208
+#: src/compare.c:207
 msgid "Gid differs"
 msgstr "Gid 號碼不同"
 
-#: src/compare.c:212
+#: src/compare.c:211
 msgid "Mod time differs"
 msgstr "修改時間不同"
 
-#: src/compare.c:216 src/compare.c:420
+#: src/compare.c:215 src/compare.c:420
 msgid "Size differs"
 msgstr "大小不同"
 
-#: src/compare.c:270
+#: src/compare.c:269
 #, c-format
 msgid "Not linked to %s"
-msgstr "並æ\9cªé\80£結至 %s"
+msgstr "並æ\9cªé\8f\88結至 %s"
 
-#: src/compare.c:293
+#: src/compare.c:292
 msgid "Symlink differs"
 msgstr "符號連結不同"
 
-#: src/compare.c:322
+#: src/compare.c:321
 msgid "Device number differs"
-msgstr "裝置檔案號碼不同"
+msgstr "裝置編號不同"
 
 #: src/compare.c:462
 #, c-format
 msgid "Verify "
-msgstr "檢驗 "
+msgstr "驗證 "
 
 #: src/compare.c:469
-#, fuzzy, c-format
+#, c-format
 msgid "%s: Unknown file type `%c', diffed as normal file"
-msgstr "%s:不明的檔案類型‘%c’,會以普通檔案的方式作比較"
+msgstr "%s:不明檔案類型「%c」,會以普通檔案的方式作比較"
 
 #: src/compare.c:524
 msgid "Archive contains file names with leading prefixes removed."
-msgstr "保存檔包含前置文字被移除的檔案名稱。"
+msgstr "保存檔包含前置文字被移除的檔案名稱。"
 
 #: src/compare.c:526
 msgid "Verification may fail to locate original files."
-msgstr "確認動作可能無法找到原始檔案"
+msgstr "查核動作可能無法找到原始檔案"
 
-#: src/compare.c:596
+#: src/compare.c:599
 #, c-format
 msgid "VERIFY FAILURE: %d invalid header detected"
 msgid_plural "VERIFY FAILURE: %d invalid headers detected"
-msgstr[0] "確認失誤:%d 偵測到無效的表頭"
+msgstr[0] "驗證失敗:%d 偵測到無效的標頭"
 
-#: src/compare.c:612 src/list.c:144
+#: src/compare.c:617 src/list.c:148
 #, c-format
 msgid "A lone zero block at %s"
 msgstr "位於 %s 的孤立零值區塊"
 
-#: src/create.c:67
-#, fuzzy, c-format
+#: src/create.c:68
+#, c-format
 msgid "%s: contains a cache directory tag %s; %s"
-msgstr "%s:包含一個快取目錄標籤;未傾印"
+msgstr "%s:包含一個快取目錄標記 %s; %s"
 
-#: src/create.c:272
+#: src/create.c:273
 #, c-format
 msgid "value %s out of %s range %s..%s; substituting %s"
 msgstr "數值 %s 已超出 %s 的範圍 %s..%s;以 %s 替代中"
 
-#: src/create.c:278
+#: src/create.c:279
 #, c-format
 msgid "value %s out of %s range %s..%s"
 msgstr "數值 %s 已超出 %s 的範圍 %s..%s"
 
-#: src/create.c:338
+#: src/create.c:339
 msgid "Generating negative octal headers"
-msgstr "正在產生負數的八進位頭"
+msgstr "正在產生負數的八進位頭"
 
 #: src/create.c:624 src/create.c:687
 #, c-format
@@ -836,443 +900,441 @@ msgstr "%s:檔名太長 (無法分割);未傾印"
 #: src/create.c:661
 #, c-format
 msgid "%s: link name is too long; not dumped"
-msgstr "%sï¼\9aé\80£æ\8e¥名稱太長;未傾印"
+msgstr "%sï¼\9aé\8f\88çµ\90名稱太長;未傾印"
 
-#: src/create.c:1076
+#: src/create.c:1078
 #, c-format
 msgid "%s: File shrank by %s byte; padding with zeros"
 msgid_plural "%s: File shrank by %s bytes; padding with zeros"
 msgstr[0] "%s:檔案縮小了 %s 位元組;以零值填補"
 
-#: src/create.c:1177
+#: src/create.c:1175
 #, c-format
 msgid "%s: file is on a different filesystem; not dumped"
 msgstr "%s:檔案位於不同的檔案系統;未傾印"
 
-#: src/create.c:1221 src/create.c:1232 src/incremen.c:551 src/incremen.c:557
+#: src/create.c:1219 src/create.c:1230 src/incremen.c:590 src/incremen.c:596
 msgid "contents not dumped"
-msgstr ""
+msgstr "內容無法傾印"
 
-#: src/create.c:1361
+#: src/create.c:1362
 #, c-format
 msgid "%s: Unknown file type; file ignored"
-msgstr "%s:檔案類型不詳;會忽略該檔案"
+msgstr "%s:不明檔案類型;忽略該檔案"
 
-#: src/create.c:1464
+#: src/create.c:1472
 #, fuzzy, c-format
-msgid "Missing links to %s.\n"
+msgid "Missing links to %s."
 msgstr "失去至 %s 的連結。\n"
 
-#: src/create.c:1535
+#: src/create.c:1543
 #, c-format
 msgid "%s: file is unchanged; not dumped"
 msgstr "%s:檔案沒有變更;未傾印"
 
-#: src/create.c:1543
+#: src/create.c:1552
 #, c-format
 msgid "%s: file is the archive; not dumped"
-msgstr "%s:這個檔案是保存檔;未傾印"
-
-#: src/create.c:1573
-#, c-format
-msgid "%s: File removed before we read it"
-msgstr "%s:當讀取檔案時該檔案已被移除"
+msgstr "%s:檔案是保存檔;未傾印"
 
-#: src/create.c:1591 src/incremen.c:543
-#, fuzzy
+#: src/create.c:1593 src/incremen.c:583
 msgid "directory not dumped"
-msgstr "%s:包含一個快取目錄標籤;未傾印"
+msgstr "目錄未傾印"
 
-#: src/create.c:1659
+#: src/create.c:1664
 #, c-format
 msgid "%s: file changed as we read it"
-msgstr "%s:檔案在我們讀取時已變更"
+msgstr "%s:檔案在讀取時已變更"
 
-#: src/create.c:1739
+#: src/create.c:1731
 #, c-format
 msgid "%s: socket ignored"
-msgstr "%s:會忽略 socket"
+msgstr "%s:忽略通訊端"
 
-#: src/create.c:1744
+#: src/create.c:1737
 #, c-format
 msgid "%s: door ignored"
-msgstr "%s:會忽略 door"
+msgstr "%s:忽略匣門"
 
-#: src/delete.c:216 src/list.c:181 src/update.c:170
+#: src/delete.c:217 src/list.c:185 src/update.c:194
 msgid "Skipping to next header"
-msgstr "跳至下一個頭"
+msgstr "跳至下一個頭"
 
-#: src/delete.c:281
+#: src/delete.c:283
 msgid "Deleting non-header from archive"
-msgstr "從保存檔中刪除無頭者"
+msgstr "從保存檔中刪除無頭者"
 
-#: src/extract.c:198
+#: src/extract.c:211
 #, c-format
 msgid "%s: implausibly old time stamp %s"
-msgstr "%s:難以確信的舊時間記 %s"
+msgstr "%s:難以確信的舊時間記 %s"
 
-#: src/extract.c:215
-#, fuzzy, c-format
+#: src/extract.c:229
+#, c-format
 msgid "%s: time stamp %s is %s s in the future"
-msgstr "%s:時間印記 %s 代表未來的 %lu 秒"
+msgstr "%s:時間戳記 %s 代表未來的 %s 秒"
 
-#: src/extract.c:395
+#: src/extract.c:409
 #, c-format
 msgid "%s: Unexpected inconsistency when making directory"
-msgstr "%s:產生目錄時有不正常的矛盾"
+msgstr "%s:產生目錄時有未預期的不一致"
 
-#: src/extract.c:588
+#: src/extract.c:613
 #, c-format
 msgid "%s: Directory renamed before its status could be extracted"
-msgstr "%s:擷取目錄的狀態前目錄已更改了名稱"
+msgstr "%s:解開目錄狀態之前已更改了名稱"
 
-#: src/extract.c:724
+#: src/extract.c:759
 msgid "Extracting contiguous files as regular files"
-msgstr "正在解開連續的檔案為正常的檔案"
+msgstr "正在解開連續檔案為正常檔案"
 
-#: src/extract.c:997
+#: src/extract.c:1039
 msgid "Attempting extraction of symbolic links as hard links"
 msgstr "嘗試解開符號連結為硬式連結"
 
-#: src/extract.c:1054
-#, c-format
-msgid "Reading %s\n"
-msgstr "正在讀取“%s”\n"
-
-#: src/extract.c:1143
+#: src/extract.c:1183
 #, c-format
 msgid "%s: Cannot extract -- file is continued from another volume"
 msgstr "%s:無法解開 -- 檔案延續自其他卷冊"
 
-#: src/extract.c:1150 src/list.c:1090
-#, fuzzy
+#: src/extract.c:1190 src/list.c:1109
 msgid "Unexpected long name header"
-msgstr "æ\90\8dæ¯\80å\90\8d稱ç\9a\84æª\94æ¡\88çµ\90å°¾ä¸\8d正常"
+msgstr "æ\9cªé \90æ\9c\9fç\9a\84é\95·å\90\8d稱æ¨\99é ­"
 
-#: src/extract.c:1156
-#, fuzzy, c-format
+#: src/extract.c:1197
+#, c-format
 msgid "%s: Unknown file type `%c', extracted as normal file"
-msgstr "%s:不明的檔案類型‘%c’,會以普通檔案的方式抽取資料"
+msgstr "%s:不明檔案類型「%c」,會以普通檔案的方式解開資料"
 
-#: src/extract.c:1181
-#, fuzzy, c-format
+#: src/extract.c:1223
+#, c-format
 msgid "Current %s is newer or same age"
-msgstr "目前的‘%s’較新"
+msgstr "目前的 %s 較新或相同"
 
-#: src/extract.c:1227
+#: src/extract.c:1274
 #, c-format
 msgid "%s: Was unable to backup this file"
-msgstr "%s:無法備份此檔案"
+msgstr "%s:之前無法備份這個檔案"
 
-#: src/extract.c:1355
-#, fuzzy, c-format
+#: src/extract.c:1402
+#, c-format
 msgid "Cannot rename %s to %s"
-msgstr "%s:無法改名為 %s"
+msgstr "無法將 %s 重新命名為 %s"
 
-#: src/extract.c:1367
+#: src/incremen.c:482 src/incremen.c:526
 #, c-format
-msgid "Error is not recoverable: exiting now"
-msgstr "發生無法復原的錯誤:立刻退出"
-
-#: src/incremen.c:448 src/incremen.c:492
-#, fuzzy, c-format
 msgid "%s: Directory has been renamed from %s"
-msgstr "%s:目錄已被變更名稱"
+msgstr "%s:目錄已從 %s 重新命名"
 
-#: src/incremen.c:460
+#: src/incremen.c:494
 #, c-format
 msgid "%s: Directory has been renamed"
-msgstr "%s:目錄已被變更名稱"
+msgstr "%s:目錄已被重新命名"
 
-#: src/incremen.c:505
+#: src/incremen.c:539
 #, c-format
 msgid "%s: Directory is new"
 msgstr "%s:目錄是新的"
 
-#: src/incremen.c:903 src/incremen.c:920
+#: src/incremen.c:956 src/incremen.c:973
 msgid "Invalid time stamp"
-msgstr "ç\84¡æ\95\88ç\9a\84æ\99\82é\96\93æ¨\99記"
+msgstr "ç\84¡æ\95\88ç\9a\84æ\99\82é\96\93æ\88³記"
 
-#: src/incremen.c:959
-#, fuzzy
+#: src/incremen.c:1012
 msgid "Invalid modification time (seconds)"
-msgstr "選項中的模式無效"
+msgstr "無效的修改時間 (秒)"
 
-#: src/incremen.c:974
+#: src/incremen.c:1027
 msgid "Invalid modification time (nanoseconds)"
-msgstr ""
+msgstr "無效的修改時間 (奈秒)"
 
-#: src/incremen.c:994
+#: src/incremen.c:1047
 msgid "Invalid device number"
 msgstr "無效的裝置號碼"
 
-#: src/incremen.c:1009
+#: src/incremen.c:1062
 msgid "Invalid inode number"
 msgstr "無效的 inode 號碼"
 
-#: src/incremen.c:1060 src/incremen.c:1097
+#: src/incremen.c:1113 src/incremen.c:1150
 msgid "Field too long while reading snapshot file"
-msgstr ""
+msgstr "讀取快照檔時欄位太長"
 
-#: src/incremen.c:1067 src/incremen.c:1105
+#: src/incremen.c:1120 src/incremen.c:1158
 msgid "Read error in snapshot file"
-msgstr ""
+msgstr "讀取快照檔時發生錯誤"
 
-#: src/incremen.c:1069 src/incremen.c:1109 src/incremen.c:1161
-#: src/incremen.c:1219
-#, fuzzy
+#: src/incremen.c:1122 src/incremen.c:1162 src/incremen.c:1214
+#: src/incremen.c:1272
 msgid "Unexpected EOF in snapshot file"
-msgstr "保存檔的檔案結尾不正常"
+msgstr "未預期的快照檔結尾"
 
-#: src/incremen.c:1076 src/incremen.c:1116
+#: src/incremen.c:1129 src/incremen.c:1169
 msgid "Unexpected field value in snapshot file"
-msgstr ""
+msgstr "未預期的快照檔欄位值"
 
-#: src/incremen.c:1211
+#: src/incremen.c:1264
 msgid "Missing record terminator"
-msgstr ""
+msgstr "缺少記錄終止符號"
 
-#: src/incremen.c:1262 src/incremen.c:1265
+#: src/incremen.c:1325 src/incremen.c:1328
 msgid "Bad incremental file format"
-msgstr ""
+msgstr "不當的遞增檔案格式"
 
-#: src/incremen.c:1284
+#: src/incremen.c:1347
 #, c-format
 msgid "Unsupported incremental format version: %<PRIuMAX>"
-msgstr ""
+msgstr "不受支援的遞增格式版本:%<PRIuMAX>"
 
-#: src/incremen.c:1439
+#: src/incremen.c:1502
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found %#3o"
-msgstr ""
+msgstr "異常的傾印目錄:預期「%c」但是找到 %#3o"
 
-#: src/incremen.c:1449
+#: src/incremen.c:1512
 msgid "Malformed dumpdir: 'X' duplicated"
-msgstr ""
+msgstr "異常的傾印目錄:「X」重製"
 
-#: src/incremen.c:1462
-#, fuzzy
+#: src/incremen.c:1525
 msgid "Malformed dumpdir: empty name in 'R'"
-msgstr "未成形的密度引數: '%s'"
+msgstr "異常的傾印目錄:在「R」中有空的名稱"
 
-#: src/incremen.c:1475
+#: src/incremen.c:1538
 msgid "Malformed dumpdir: 'T' not preceeded by 'R'"
-msgstr ""
+msgstr "異常的傾印目錄:「R」未在「T」之前"
 
-#: src/incremen.c:1481
-#, fuzzy
+#: src/incremen.c:1544
 msgid "Malformed dumpdir: empty name in 'T'"
-msgstr "未成形的密度引數: '%s'"
+msgstr "異常的傾印目錄:在「T」中有空的名稱"
 
-#: src/incremen.c:1501
+#: src/incremen.c:1564
 #, c-format
 msgid "Malformed dumpdir: expected '%c' but found end of data"
-msgstr ""
+msgstr "異常的傾印目錄:預期「%c」但是發現資料的結束"
 
-#: src/incremen.c:1507
+#: src/incremen.c:1571
 msgid "Malformed dumpdir: 'X' never used"
-msgstr ""
+msgstr "異常的傾印目錄:「X」永不使用"
 
-#: src/incremen.c:1551
+#: src/incremen.c:1615
 #, c-format
 msgid "Cannot create temporary directory using template %s"
-msgstr ""
+msgstr "無法使用模板 %s 建立暫存目錄"
 
-#: src/incremen.c:1613
+#: src/incremen.c:1677
 #, c-format
 msgid "%s: Not purging directory: unable to stat"
 msgstr "%s:未能清空目錄;無法顯示狀態"
 
-#: src/incremen.c:1626
+#: src/incremen.c:1690
 #, c-format
 msgid "%s: directory is on a different device: not purging"
 msgstr "%s:目錄位於不同的裝置;無法清空"
 
-#: src/incremen.c:1634
+#: src/incremen.c:1698
 #, c-format
 msgid "%s: Deleting %s\n"
 msgstr "%s:正在刪除 %s\n"
 
-#: src/incremen.c:1639
+#: src/incremen.c:1703
 #, c-format
 msgid "%s: Cannot remove"
 msgstr "%s:無法移除"
 
-#: src/list.c:113
+#: src/list.c:115
 #, c-format
 msgid "%s: Omitting"
-msgstr "%s:遺漏中"
+msgstr "%s:省略中"
 
-#: src/list.c:131
+#: src/list.c:133
 #, c-format
 msgid "block %s: ** Block of NULs **\n"
-msgstr "區塊 %s:** 空虛的區塊 **\n"
+msgstr "區塊 %s:** 空區塊 **\n"
 
-#: src/list.c:155
+#: src/list.c:159
 #, c-format
 msgid "block %s: ** End of File **\n"
-msgstr "區塊 %s:** 檔案末端 **\n"
+msgstr "區塊 %s:** 檔案結尾 **\n"
 
-#: src/list.c:178 src/list.c:1063 src/list.c:1291
+#: src/list.c:182 src/list.c:1081 src/list.c:1344
 #, c-format
 msgid "block %s: "
 msgstr "區塊 %s:"
 
-#. TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.)
-#: src/list.c:671
+#. TRANSLATORS: %s is type of the value (gid_t, uid_t,
+#. etc.)
+#: src/list.c:689
 #, c-format
 msgid "Blanks in header where numeric %s value expected"
-msgstr "空白出現在預期為數值 %s 的地方"
+msgstr "空白出現在標頭中預期為數值 %s 的地方"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:726
+#: src/list.c:744
 #, c-format
 msgid "Archive octal value %.*s is out of %s range; assuming two's complement"
 msgstr "保存檔八進位數值 %.*s 超出 %s 範圍;假定為二的補數"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:737
+#: src/list.c:755
 #, c-format
 msgid "Archive octal value %.*s is out of %s range"
 msgstr "保存檔八進位數值 %.*s 超出 %s 範圍"
 
-#: src/list.c:758
+#: src/list.c:776
 msgid "Archive contains obsolescent base-64 headers"
 msgstr "保存檔含有過時的 base-64 標頭"
 
-#: src/list.c:772
+#: src/list.c:790
 #, c-format
 msgid "Archive signed base-64 string %s is out of %s range"
 msgstr "保存檔有號 base-64 字串 %s 超出 %s 範圍"
 
-#: src/list.c:803
+#: src/list.c:821
 #, c-format
 msgid "Archive base-256 value is out of %s range"
 msgstr "保存檔 base-256 值超出 %s 範圍"
 
 #. TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.)
-#: src/list.c:832
+#: src/list.c:850
 #, c-format
 msgid "Archive contains %.*s where numeric %s value expected"
 msgstr "保存檔包含 %.*s 於預期為數值 %s 的地方"
 
 #. TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.)
-#: src/list.c:854
-#, fuzzy, c-format
+#: src/list.c:872
+#, c-format
 msgid "Archive value %s is out of %s range %s..%s"
-msgstr "保存檔值 %s 已超出 %s 的範圍 %s.%s"
+msgstr "保存檔值 %s 已超出 %s 的範圍 %s..%s"
 
-#: src/list.c:1226
+#: src/list.c:1245
 #, c-format
 msgid " link to %s\n"
-msgstr " 連結 %s\n"
+msgstr " 連結 %s\n"
 
-#: src/list.c:1234
+#: src/list.c:1253
 #, c-format
 msgid " unknown file type %s\n"
-msgstr "不明的檔案類型 %s\n"
+msgstr " 不明檔案類型 %s\n"
 
-#: src/list.c:1252
+#: src/list.c:1271
 #, c-format
 msgid "--Long Link--\n"
 msgstr "--長 連 結--\n"
 
-#: src/list.c:1256
+#: src/list.c:1275
 #, c-format
 msgid "--Long Name--\n"
 msgstr "--長 名 稱--\n"
 
-#: src/list.c:1260
+#: src/list.c:1279
 #, c-format
 msgid "--Volume Header--\n"
 msgstr "--卷 冊 標 頭--\n"
 
-#: src/list.c:1268
+#: src/list.c:1287
 #, c-format
 msgid "--Continued at byte %s--\n"
-msgstr "─由第 %s 位元組繼續─\n"
+msgstr "--於第 %s 位元組繼續--\n"
 
-#: src/list.c:1296
+#: src/list.c:1349
 msgid "Creating directory:"
 msgstr "正在建立目錄:"
 
-#: src/misc.c:456
+#: src/misc.c:502
 #, c-format
 msgid "Renaming %s to %s\n"
-msgstr "正在將 %s 名為 %s\n"
+msgstr "正在將 %s 重新命名為 %s\n"
 
-#: src/misc.c:465 src/misc.c:483
+#: src/misc.c:511 src/misc.c:529
 #, c-format
 msgid "%s: Cannot rename to %s"
-msgstr "%s:無法名為 %s"
+msgstr "%s:無法重新命名為 %s"
 
-#: src/misc.c:488
+#: src/misc.c:534
 #, c-format
 msgid "Renaming %s back to %s\n"
 msgstr "將 %s 的名稱還原為 %s\n"
 
-#: src/misc.c:615
+#: src/misc.c:669
 msgid "Cannot save working directory"
-msgstr "無法儲存使用中的目錄"
+msgstr "無法儲存工作目錄"
 
-#: src/misc.c:621
+#: src/misc.c:675
 msgid "Cannot change working directory"
-msgstr "無法更改使用中的目錄"
+msgstr "無法變更工作目錄"
+
+#: src/misc.c:759
+#, c-format
+msgid "%s: File removed before we read it"
+msgstr "%s:讀取檔案之前已被移除"
+
+#: src/misc.c:774
+#, fuzzy, c-format
+msgid "%s: Directory removed before we read it"
+msgstr "%s:讀取檔案之前已被移除"
 
-#: src/misc.c:711
+#: src/misc.c:795
 msgid "child process"
-msgstr "å\89¯ç¨\8båº\8f"
+msgstr "å­\90é\80²ç¨\8b"
 
-#: src/misc.c:720
+#: src/misc.c:804
 msgid "interprocess channel"
-msgstr "行程內通道"
+msgstr "進程間通道"
 
-#. TRANSLATORS: The following three msgids form a single sentence.
-#.
-#: src/names.c:593
-msgid "Pattern matching characters used in file names. Please,"
-msgstr ""
-
-#: src/names.c:595
-msgid "use --wildcards to enable pattern matching, or --no-wildcards to"
-msgstr ""
+#: src/names.c:601
+#, fuzzy
+msgid "Pattern matching characters used in file names"
+msgstr "在檔案名稱中使用的式樣匹配字元。請,"
 
-#: src/names.c:597
-msgid "suppress this warning."
-msgstr ""
+#: src/names.c:603
+#, fuzzy
+msgid ""
+"Use --wildcards to enable pattern matching, or --no-wildcards to suppress "
+"this warning"
+msgstr "使用 --wildcards 以啟用式樣匹配,或 --no-wildcards 來"
 
-#: src/names.c:612 src/names.c:630
+#: src/names.c:619 src/names.c:637
 #, c-format
 msgid "%s: Not found in archive"
-msgstr "%s:保存檔中無法找到"
+msgstr "%s:在保存檔中找不到"
 
-#: src/names.c:615
+#: src/names.c:622
 #, c-format
 msgid "%s: Required occurrence not found in archive"
-msgstr "%s:要求的事件在保存檔中找不到"
+msgstr "%s:要求項目在保存檔中找不到"
 
-#: src/tar.c:79
+#: src/names.c:894
+#, fuzzy
+msgid ""
+"Using -C option inside file list is not allowed with --listed-incremental"
+msgstr "--preserve-order 與 --listed-incremental 不相容"
+
+#: src/names.c:900
+#, fuzzy
+msgid "Only one -C option is allowed with --listed-incremental"
+msgstr "--preserve-order 與 --listed-incremental 不相容"
+
+#: src/tar.c:81
 #, c-format
 msgid "Options `-%s' and `-%s' both want standard input"
-msgstr "選項‘-%s’與‘-%s’兩者都需要標準輸入"
+msgstr "選項「-%s」和「-%s」兩者都需要標準輸入"
 
-#: src/tar.c:156
+#: src/tar.c:158
 #, c-format
 msgid "%s: Invalid archive format"
 msgstr "%s:無效的保存檔格式"
 
-#: src/tar.c:180
+#: src/tar.c:182
 msgid "GNU features wanted on incompatible archive format"
-msgstr "不能在不兼容於 GNU 的保存檔格式中使用 GNU 功能"
+msgstr "不能在不兼容的保存檔格式中使用 GNU 功能"
 
-#: src/tar.c:241
+#: src/tar.c:250
 #, c-format
 msgid ""
 "Unknown quoting style `%s'. Try `%s --quoting-style=help' to get a list."
-msgstr ""
+msgstr "不明引號樣式「%s」。嘗試「%s --quoting-style=help」以取得清單。"
 
-#: src/tar.c:336
-#, fuzzy
+#: src/tar.c:347
 msgid ""
 "GNU `tar' saves many files together into a single tape or disk archive, and "
 "can restore individual files from the archive.\n"
@@ -1282,16 +1344,15 @@ msgid ""
 "  tar -tvf archive.tar         # List all files in archive.tar verbosely.\n"
 "  tar -xf archive.tar          # Extract all files from archive.tar.\n"
 msgstr ""
+"GNU「tar」將許多檔案一起儲存進單一磁帶或磁碟保存檔,而且可以從保存檔還原個別"
+"檔案。\n"
 "\n"
-"用法:%s [選項]... [檔案]...\n"
-"\n"
-"例子:\n"
-"  %s -cf archive.tar foo bar  # 建立包括 foo 及 bar 檔案的 archive.tar。\n"
-"  %s -tvf archive.tar         # 詳細列出 archive.tar 中的所有檔案。\n"
-"  %s -xf archive.tar          # 抽取 archive.tar 中的所有檔案。\n"
+"範例:\n"
+"  tar -cf archive.tar foo bar  # 建立包括 foo 及 bar 檔案的 archive.tar。\n"
+"  tar -tvf archive.tar         # 詳細列出 archive.tar 中的所有檔案。\n"
+"  tar -xf archive.tar          # 解開 archive.tar 中的所有檔案。\n"
 
-#: src/tar.c:345
-#, fuzzy
+#: src/tar.c:356
 msgid ""
 "The backup suffix is `~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.\n"
 "The version control may be set with --backup or VERSION_CONTROL, values "
@@ -1302,103 +1363,87 @@ msgid ""
 "  nil, existing   numbered if numbered backups exist, simple otherwise\n"
 "  never, simple   always make simple backups\n"
 msgstr ""
-"GNU‘tar’可將多個檔案儲存為磁帶或磁碟中的一個保存檔,並由保存檔還原個別的\n"
-"檔案。\n"
-"\n"
-"例子:\n"
-"  tar -cf archive.tar foo bar  # 建立包括 foo 及 bar 檔案的 archive.tar。\n"
-"  tar -tvf archive.tar         # 詳細列出 archive.tar 中的所有檔案。\n"
-"  tar -xf archive.tar          # 抽取 archive.tar 中的所有檔案。\n"
-"\n"
 "備份檔的後置字串為‘~’,除非以 --suffix 選項或是 SIMPLE_BACKUP_SUFFIX\n"
 "環境變數指定。版本控制的方式可透過 --backup 選項或 VERSION_CONTROL 環境\n"
 "變數來選擇。可用的變數值為:\n"
 "\n"
-"  t, numbered     備份檔會加上數字\n"
+"  none, off       永不製作備份  t, numbered     備份檔會加上數字\n"
 "  nil, existing   若有數字的備份檔已經存在則使用數字,否則使用普通方式備份\n"
 "  never, simple   永遠使用普通方式備份\n"
 
-#: src/tar.c:370
+#: src/tar.c:386
 msgid "Main operation mode:"
 msgstr "主要操作模式:"
 
-#: src/tar.c:373
+#: src/tar.c:389
 msgid "list the contents of an archive"
 msgstr "列出保存檔的內容"
 
-#: src/tar.c:375
+#: src/tar.c:391
 msgid "extract files from an archive"
 msgstr "從保存檔中解開檔案"
 
-#: src/tar.c:378
+#: src/tar.c:394
 msgid "create a new archive"
-msgstr "建立一個新的保存檔"
+msgstr "建立新的保存檔"
 
-#: src/tar.c:380
+#: src/tar.c:396
 msgid "find differences between archive and file system"
 msgstr "在保存檔與檔案系統之間找出差異"
 
-#: src/tar.c:383
+#: src/tar.c:399
 msgid "append files to the end of an archive"
 msgstr "加入檔案到保存檔末端"
 
-#: src/tar.c:385
+#: src/tar.c:401
 msgid "only append files newer than copy in archive"
 msgstr "只加入比保存檔中複本還新的檔案"
 
-#: src/tar.c:387
+#: src/tar.c:403
 msgid "append tar files to an archive"
 msgstr "加入 tar 檔案到保存檔中"
 
-#: src/tar.c:390
+#: src/tar.c:406
 msgid "delete from the archive (not on mag tapes!)"
 msgstr "從保存檔中刪除 (並非在磁帶上!)"
 
-#: src/tar.c:392
+#: src/tar.c:408
 msgid "test the archive volume label and exit"
-msgstr ""
+msgstr "測試保存檔卷冊標籤然後離開"
 
-#: src/tar.c:397
+#: src/tar.c:413
 msgid "Operation modifiers:"
 msgstr "運算變更項:"
 
-#: src/tar.c:400
+#: src/tar.c:416
 msgid "handle sparse files efficiently"
-msgstr "有效率地處理稀疏檔案"
+msgstr "有效率地處理稀疏檔案"
 
-#: src/tar.c:401
+#: src/tar.c:417
 msgid "MAJOR[.MINOR]"
-msgstr ""
+msgstr "MAJOR[.MINOR]"
 
-#: src/tar.c:402
+#: src/tar.c:418
 msgid "set version of the sparse format to use (implies --sparse)"
-msgstr ""
+msgstr "設定稀疏格式版本以使用 (意味著 --sparse)"
 
-#: src/tar.c:404
+#: src/tar.c:420
 msgid "handle old GNU-format incremental backup"
-msgstr "處理舊型 GNU-格式之漸進式備份"
-
-#: src/tar.c:405 src/tar.c:542 src/tar.c:622 src/tar.c:626 src/tar.c:638
-#: src/tar.c:648 src/tar.c:651 src/tar.c:653 src/tar.c:736 tests/genfile.c:131
-#: tests/genfile.c:179 tests/genfile.c:183 tests/genfile.c:186
-msgid "FILE"
-msgstr "檔案"
+msgstr "處理舊型 GNU-格式之遞增備份"
 
-#: src/tar.c:406
+#: src/tar.c:422
 msgid "handle new GNU-format incremental backup"
-msgstr "處理新型 GNU-格式之漸進式備份"
+msgstr "處理新型 GNU-格式之遞增備份"
 
-#: src/tar.c:408
+#: src/tar.c:424
+msgid "dump level for created listed-incremental archive"
+msgstr ""
+
+#: src/tar.c:426
 msgid "do not exit with nonzero on unreadable files"
 msgstr "離開無法讀取的檔案時不要回傳非零的值"
 
-#: src/tar.c:409 src/tar.c:537 src/tar.c:552 src/tar.c:685 src/tar.c:721
-#: tests/genfile.c:165
-msgid "NUMBER"
-msgstr "數目"
-
-#: src/tar.c:410
-#, fuzzy
+#: src/tar.c:428
 msgid ""
 "process only the NUMBERth occurrence of each file in the archive; this "
 "option is valid only in conjunction with one of the subcommands --delete, --"
@@ -1407,717 +1452,694 @@ msgid ""
 msgstr ""
 "只有對於每一個在保存檔中第 NUM 個出現的檔案才會處理。此選項只有與 --"
 "delete、--diff、--extract 或 --list 等次命令之一合併使用時才有效,而且要經由"
-"命令列 或是 -T 選項來提供一個檔案序列。預設的數目是 1。"
+"命令列或是 -T 選項來提供一個檔案序列。預設的數目是 1。"
 
-#: src/tar.c:416
-#, fuzzy
+#: src/tar.c:434
 msgid "archive is seekable"
-msgstr "保存檔是可搜尋的"
+msgstr "保存檔是可尋指的"
 
-#: src/tar.c:418
+#: src/tar.c:436
+#, fuzzy
+msgid "archive is not seekable"
+msgstr "保存檔是可尋指的"
+
+#: src/tar.c:438
 msgid "do not check device numbers when creating incremental archives"
-msgstr ""
+msgstr "不檢查裝置數量時建立遞增檔案"
 
-#: src/tar.c:421
+#: src/tar.c:441
 msgid "check device numbers when creating incremental archives (default)"
-msgstr ""
+msgstr "檢查裝置數量時建立遞增檔案 (預設)"
 
-#: src/tar.c:427
+#: src/tar.c:447
 msgid "Overwrite control:"
-msgstr ""
+msgstr "覆寫控制:"
 
-#: src/tar.c:430
+#: src/tar.c:450
 msgid "attempt to verify the archive after writing it"
 msgstr "嘗試在寫入之後驗證保存檔"
 
-#: src/tar.c:432
+#: src/tar.c:452
 msgid "remove files after adding them to the archive"
 msgstr "在加入檔案至保存檔之後移除它們"
 
-#: src/tar.c:434
+#: src/tar.c:454
 msgid "don't replace existing files when extracting"
 msgstr "解開時不要替換既有的檔案"
 
-#: src/tar.c:436
+#: src/tar.c:456
 msgid "don't replace existing files that are newer than their archive copies"
 msgstr "不要替換既有且比它們在保存檔中複本還新的檔案"
 
-#: src/tar.c:438
+#: src/tar.c:458
 msgid "overwrite existing files when extracting"
 msgstr "解開時覆寫既有檔案"
 
-#: src/tar.c:440
+#: src/tar.c:460
 msgid "remove each file prior to extracting over it"
 msgstr "在解開並覆寫檔案之前先移除它"
 
-#: src/tar.c:442
+#: src/tar.c:462
 msgid "empty hierarchies prior to extracting directory"
-msgstr "在解開目錄之前先清空目錄階層"
+msgstr "在解開目錄之前先清空階層結構"
 
-#: src/tar.c:444
+#: src/tar.c:464
 msgid "preserve metadata of existing directories"
-msgstr "ä¿\9dç\95\99æ\97¢æ\9c\89ç\9b®é\8c\84ç\9a\84å\8e\9få§\8b資料"
+msgstr "ä¿\9dç\95\99æ\97¢æ\9c\89ç\9b®é\8c\84ç\9a\84å¾\8c設資料"
 
-#: src/tar.c:446
-#, fuzzy
+#: src/tar.c:466
 msgid "overwrite metadata of existing directories when extracting (default)"
-msgstr "解開時覆寫既有檔案"
+msgstr "解開時覆寫既有目錄的後設資料 (預設)"
 
-#: src/tar.c:452
+#: src/tar.c:472
 msgid "Select output stream:"
-msgstr ""
+msgstr "選取輸出串流:"
 
-#: src/tar.c:455
+#: src/tar.c:475
 msgid "extract files to standard output"
-msgstr "解開檔案標準輸出"
+msgstr "解開檔案標準輸出"
 
-#: src/tar.c:456 src/tar.c:515 src/tar.c:517 tests/genfile.c:162
-#: tests/genfile.c:189
+#: src/tar.c:476 src/tar.c:535 src/tar.c:537 tests/genfile.c:191
 msgid "COMMAND"
 msgstr "命令"
 
-#: src/tar.c:457
-#, fuzzy
+#: src/tar.c:477
 msgid "pipe extracted files to another program"
-msgstr "解開檔案至標準輸出"
+msgstr "將解開的檔案管線引導到另外的程式"
 
-#: src/tar.c:459
+#: src/tar.c:479
 msgid "ignore exit codes of children"
-msgstr ""
+msgstr "忽略子進程的離開代碼"
 
-#: src/tar.c:461
+#: src/tar.c:481
 msgid "treat non-zero exit codes of children as error"
-msgstr ""
+msgstr "將子進程的非零離開代碼視為錯誤"
 
-#: src/tar.c:466
+#: src/tar.c:486
 msgid "Handling of file attributes:"
 msgstr "檔案屬性的處理:"
 
-#: src/tar.c:469
+#: src/tar.c:489
 msgid "force NAME as owner for added files"
-msgstr "強制以名稱做為加入檔案的擁有者"
+msgstr "強制以 NAME 做為加入檔案的擁有者"
 
-#: src/tar.c:471
+#: src/tar.c:491
 msgid "force NAME as group for added files"
-msgstr "強制以名稱做為加入檔案的群組"
+msgstr "強制以 NAME 做為加入檔案的群組"
 
-#: src/tar.c:472 src/tar.c:671
+#: src/tar.c:492 src/tar.c:689
 msgid "DATE-OR-FILE"
 msgstr "檔案的日期"
 
-#: src/tar.c:473
-#, fuzzy
+#: src/tar.c:493
 msgid "set mtime for added files from DATE-OR-FILE"
-msgstr "å\8fªå\84²å­\98æ¯\94 DATE-OF-FILE é\82\84æ\96°ç\9a\84æª\94æ¡\88"
+msgstr "å°\87å\8a å\85¥æª\94æ¡\88ç\9a\84 mtime è¨­å®\9aç\82º DATE-OR-FILE"
 
-#: src/tar.c:474
+#: src/tar.c:494
 msgid "CHANGES"
 msgstr "變更"
 
-#: src/tar.c:475
+#: src/tar.c:495
 msgid "force (symbolic) mode CHANGES for added files"
-msgstr "強制以(符號)變更做為加入檔案的模式"
+msgstr "強制將 (符號) 模式 CHANGES 用於已加入檔案"
 
-#: src/tar.c:477
+#: src/tar.c:497
 msgid "METHOD"
-msgstr ""
+msgstr "方法"
 
-#: src/tar.c:478
+#: src/tar.c:498
 msgid ""
 "preserve access times on dumped files, either by restoring the times after "
 "reading (METHOD='replace'; default) or by not setting the times in the first "
 "place (METHOD='system')"
 msgstr ""
+"保留傾印檔案的存取時間,若非由讀取之後的回復時間(方法=「replace」;預設),就"
+"是藉由原本不設定時間 (方法=「system」)"
 
-#: src/tar.c:482
+#: src/tar.c:502
 msgid "don't extract file modified time"
 msgstr "不要解開檔案的修改時間"
 
-#: src/tar.c:484
-msgid "try extracting files with the same ownership"
+#: src/tar.c:504
+#, fuzzy
+msgid ""
+"try extracting files with the same ownership as exists in the archive "
+"(default for superuser)"
 msgstr "嘗試以相同的擁有身分去解開檔案"
 
-#: src/tar.c:486
-msgid "extract files as yourself"
+#: src/tar.c:506
+#, fuzzy
+msgid "extract files as yourself (default for ordinary users)"
 msgstr "以自己的身分解開檔案"
 
-#: src/tar.c:488
+#: src/tar.c:508
 msgid "always use numbers for user/group names"
 msgstr "總是使用數字做為使用者/群組名稱"
 
-#: src/tar.c:490
+#: src/tar.c:510
 msgid "extract information about file permissions (default for superuser)"
-msgstr ""
+msgstr "解開檔案權限相關資訊 (預設用於超級使用者)"
 
-#: src/tar.c:494
+#: src/tar.c:514
 msgid ""
 "apply the user's umask when extracting permissions from the archive (default "
 "for ordinary users)"
-msgstr ""
+msgstr "從保存檔解開權限時套用使用者 umask (預設用於一般使用者)"
 
-#: src/tar.c:496
+#: src/tar.c:516
 msgid "sort names to extract to match archive"
 msgstr "解開時依名稱排序以符合保存檔"
 
-#: src/tar.c:499
+#: src/tar.c:519
 msgid "same as both -p and -s"
 msgstr "等同於指定 -p 與 -s"
 
-#: src/tar.c:501
+#: src/tar.c:521
 msgid ""
 "delay setting modification times and permissions of extracted directories "
 "until the end of extraction"
-msgstr ""
+msgstr "延遲設定解開目錄的修改時間和權限,直到解開結束"
 
-#: src/tar.c:504
+#: src/tar.c:524
 msgid "cancel the effect of --delay-directory-restore option"
-msgstr ""
+msgstr "取消 --delay-directory-restore 選項的效果"
 
-#: src/tar.c:509
+#: src/tar.c:529
 msgid "Device selection and switching:"
-msgstr "裝置選擇與切換:"
+msgstr "裝置選擇與切換"
 
-#: src/tar.c:511
+#: src/tar.c:531
 msgid "ARCHIVE"
 msgstr "保存檔"
 
-#: src/tar.c:512
+#: src/tar.c:532
 msgid "use archive file or device ARCHIVE"
-msgstr "使用保存檔檔案或保存檔裝置"
+msgstr "使用 ARCHIVE 檔案或 ARCHIVE 裝置"
 
-#: src/tar.c:514
-#, fuzzy
+#: src/tar.c:534
 msgid "archive file is local even if it has a colon"
 msgstr "即使具有冒號,保存檔檔案仍位於本地端"
 
-#: src/tar.c:516
+#: src/tar.c:536
 msgid "use given rmt COMMAND instead of rmt"
-msgstr "使用賦予的 rmt 命令以取代 rmt"
+msgstr "使用給定的 rmt COMMAND 以代替 rmt"
 
-#: src/tar.c:518
+#: src/tar.c:538
 msgid "use remote COMMAND instead of rsh"
-msgstr "使用遠端的命令以取代 rsh"
+msgstr "使用遠端 COMMAND 以代替 rsh"
 
-#: src/tar.c:522
+#: src/tar.c:542
 msgid "specify drive and density"
 msgstr "指定磁碟機與記錄密度"
 
-#: src/tar.c:536
+#: src/tar.c:556
 msgid "create/list/extract multi-volume archive"
 msgstr "建立/列表/解開 多重卷冊的保存檔"
 
-#: src/tar.c:538
+#: src/tar.c:558
 msgid "change tape after writing NUMBER x 1024 bytes"
 msgstr "在寫入 NUMBER x 1024 位元組之後更換磁帶"
 
-#: src/tar.c:540
+#: src/tar.c:560
 msgid "run script at end of each tape (implies -M)"
 msgstr "在每卷磁帶末端執行命令稿 (意指 -M)"
 
-#: src/tar.c:543
+#: src/tar.c:563
 msgid "use/update the volume number in FILE"
 msgstr "使用/更新 FILE 中的卷冊號碼"
 
-#: src/tar.c:548
+#: src/tar.c:568
 msgid "Device blocking:"
 msgstr "裝置分區:"
 
-#: src/tar.c:550
+#: src/tar.c:570
 msgid "BLOCKS"
 msgstr "區塊"
 
-#: src/tar.c:551
+#: src/tar.c:571
 msgid "BLOCKS x 512 bytes per record"
-msgstr "每筆錄含有 BLOCKS x 512 位元組"
+msgstr "每筆錄含有 BLOCKS x 512 位元組"
 
-#: src/tar.c:553
-#, fuzzy
+#: src/tar.c:573
 msgid "NUMBER of bytes per record, multiple of 512"
-msgstr "每筆錄 SIZE 位元組,為 512 的倍數"
+msgstr "每筆錄 SIZE 位元組,為 512 的倍數"
 
-#: src/tar.c:555
+#: src/tar.c:575
 msgid "ignore zeroed blocks in archive (means EOF)"
 msgstr "忽略保存檔中零值的區塊 (意指 EOF)"
 
-#: src/tar.c:557
+#: src/tar.c:577
 msgid "reblock as we read (for 4.2BSD pipes)"
 msgstr "讀取時重新分區 (用於 4.2BSD 管線)"
 
-#: src/tar.c:562
+#: src/tar.c:582
 msgid "Archive format selection:"
-msgstr "保存檔格式選擇:"
+msgstr "保存檔格式選擇"
 
-#: src/tar.c:564 tests/genfile.c:152
+#: src/tar.c:584 tests/genfile.c:154
 msgid "FORMAT"
 msgstr "格式"
 
-#: src/tar.c:565
-#, fuzzy
+#: src/tar.c:585
 msgid "create archive of the given format"
-msgstr "以給定格式建立保存檔"
+msgstr "以給定格式建立保存檔"
 
-#: src/tar.c:567
+#: src/tar.c:587
 msgid "FORMAT is one of the following:"
-msgstr "符合下列任一格式:"
+msgstr "符合下列任一 FORMAT:"
 
-#: src/tar.c:568
+#: src/tar.c:588
 msgid "old V7 tar format"
 msgstr "舊式 V7 tar 格式"
 
-#: src/tar.c:571
+#: src/tar.c:591
 msgid "GNU format as per tar <= 1.12"
 msgstr "tar <= 1.12 之 GNU 格式"
 
-#: src/tar.c:573
+#: src/tar.c:593
 msgid "GNU tar 1.13.x format"
 msgstr "GNU tar 1.13.x 格式"
 
-#: src/tar.c:575
+#: src/tar.c:595
 msgid "POSIX 1003.1-1988 (ustar) format"
 msgstr "POSIX 1003.1-1988 (ustar) 格式"
 
-#: src/tar.c:577
+#: src/tar.c:597
 msgid "POSIX 1003.1-2001 (pax) format"
 msgstr "POSIX 1003.1-2001 (pax) 格式"
 
-#: src/tar.c:578
-#, fuzzy
+#: src/tar.c:598
 msgid "same as pax"
 msgstr "等同 pax"
 
-#: src/tar.c:581
+#: src/tar.c:601
 msgid "same as --format=v7"
 msgstr "等同 --format=v7"
 
-#: src/tar.c:584
+#: src/tar.c:604
 msgid "same as --format=posix"
 msgstr "等同 --format=posix"
 
-#: src/tar.c:585
-#, fuzzy
+#: src/tar.c:605
 msgid "keyword[[:]=value][,keyword[[:]=value]]..."
-msgstr "關鍵字[[:]=值][,關鍵字[[:]=值], ...]"
+msgstr "關鍵字[[:]=值][,關鍵字[[:]=值]]"
 
-#: src/tar.c:586
+#: src/tar.c:606
 msgid "control pax keywords"
 msgstr "控制 pax 的關鍵字"
 
-#: src/tar.c:587
+#: src/tar.c:607
 msgid "TEXT"
 msgstr "文字"
 
-#: src/tar.c:588
-#, fuzzy
+#: src/tar.c:608
 msgid ""
 "create archive with volume name TEXT; at list/extract time, use TEXT as a "
 "globbing pattern for volume name"
 msgstr ""
-"以卷冊名稱 NAME 來建立保存檔。在列表/解開時,使用 TEXT 做為萬用比對樣式"
+"以卷冊名稱 NAME 來建立保存檔。在列表/解開時,使用 TEXT 做為卷冊名稱的萬用比對"
+"式樣"
 
-#: src/tar.c:593
-#, fuzzy
+#: src/tar.c:613
 msgid "Compression options:"
-msgstr "有關壓縮的選項互相抵觸"
+msgstr "壓縮選項:"
 
-#: src/tar.c:595
+#: src/tar.c:615
 msgid "use archive suffix to determine the compression program"
-msgstr ""
+msgstr "利用保存檔字尾決定壓縮程式"
 
-#: src/tar.c:597
+#: src/tar.c:617
 msgid "do not use archive suffix to determine the compression program"
-msgstr ""
-
-#: src/tar.c:600
-msgid "filter the archive through bzip2"
-msgstr "保存檔以 bzip2 過濾處理"
-
-#: src/tar.c:602
-msgid "filter the archive through gzip"
-msgstr "保存檔以 gzip 過濾處理"
-
-#: src/tar.c:606
-msgid "filter the archive through compress"
-msgstr "保存檔以 compress 過濾處理"
-
-#: src/tar.c:609
-#, fuzzy
-msgid "filter the archive through lzma"
-msgstr "保存檔以 gzip 過濾處理"
-
-#: src/tar.c:611
-#, fuzzy
-msgid "filter the archive through lzop"
-msgstr "保存檔以 gzip 過濾處理"
-
-#: src/tar.c:613
-#, fuzzy
-msgid "filter the archive through xz"
-msgstr "保存檔以 gzip 過濾處理"
+msgstr "不利用保存檔字尾決定壓縮程式"
 
-#: src/tar.c:614
+#: src/tar.c:619
 msgid "PROG"
 msgstr "程式"
 
-#: src/tar.c:615
+#: src/tar.c:620
 msgid "filter through PROG (must accept -d)"
 msgstr "以 PROG 過濾處理 (必須接受 -d)"
 
-#: src/tar.c:620
+#: src/tar.c:636
 msgid "Local file selection:"
 msgstr "本機檔案選擇:"
 
-#: src/tar.c:623
+#: src/tar.c:639
 msgid "add given FILE to the archive (useful if its name starts with a dash)"
-msgstr ""
+msgstr "將給定的 FILE 加入保存檔 (如果它的名稱以減號開始時就很有用)"
 
-#: src/tar.c:624
+#: src/tar.c:640
 msgid "DIR"
 msgstr "目錄"
 
-#: src/tar.c:625
+#: src/tar.c:641
 msgid "change to directory DIR"
 msgstr "更改至目錄 DIR"
 
-#: src/tar.c:627
-#, fuzzy
+#: src/tar.c:643
 msgid "get names to extract or create from FILE"
-msgstr "從檔案 NAME 中取得要解開或建立的名稱"
+msgstr "從 FILE 中取得要解開或建立的名稱"
 
-#: src/tar.c:629
+#: src/tar.c:645
 msgid "-T reads null-terminated names, disable -C"
 msgstr "-T 讀取零值終結的名稱,停用 -C"
 
-#: src/tar.c:631
+#: src/tar.c:647
 msgid "disable the effect of the previous --null option"
-msgstr ""
+msgstr "停用先前 --null 選項的效果"
 
-#: src/tar.c:633
+#: src/tar.c:649
 msgid "unquote filenames read with -T (default)"
-msgstr ""
+msgstr "去除以 -T 讀取的檔名引號 (預設)"
 
-#: src/tar.c:635
+#: src/tar.c:651
 msgid "do not unquote filenames read with -T"
-msgstr ""
+msgstr "不去除以 -T 讀取的檔名引號"
 
-#: src/tar.c:636 tests/genfile.c:135
+#: src/tar.c:652 tests/genfile.c:137
 msgid "PATTERN"
-msgstr "樣式"
+msgstr "式樣"
 
-#: src/tar.c:637
+#: src/tar.c:653
 msgid "exclude files, given as a PATTERN"
-msgstr "排除給定樣式的檔案"
+msgstr "排除給定式樣的檔案"
 
-#: src/tar.c:639
+#: src/tar.c:655
 msgid "exclude patterns listed in FILE"
-msgstr "排除 FILE 中所列出的樣式"
+msgstr "排除 FILE 中所列出的式樣"
 
-#: src/tar.c:641
-#, fuzzy
+#: src/tar.c:657
 msgid ""
 "exclude contents of directories containing CACHEDIR.TAG, except for the tag "
 "file itself"
-msgstr "排除包含了快取標記的目錄"
+msgstr "排除包含 CACHEDIR.TAG 的目錄內容,除了該標記檔案本身"
 
-#: src/tar.c:644
-#, fuzzy
+#: src/tar.c:660
 msgid "exclude everything under directories containing CACHEDIR.TAG"
-msgstr "排除包含了快取標記的目錄"
+msgstr "排除包含 CACHEDIR.TAG 的目錄之下所有東西"
 
-#: src/tar.c:647
-#, fuzzy
+#: src/tar.c:663
 msgid "exclude directories containing CACHEDIR.TAG"
-msgstr "排除包含了快取標記的目錄"
+msgstr "排除包含 CACHEDIR.TAG 的目錄"
 
-#: src/tar.c:649
-#, fuzzy
+#: src/tar.c:665
 msgid "exclude contents of directories containing FILE, except for FILE itself"
-msgstr "排除包含了快取標記的目錄"
+msgstr "排除包含 FILE 的目錄內容,除了該檔案本身"
 
-#: src/tar.c:652
-#, fuzzy
+#: src/tar.c:668
 msgid "exclude everything under directories containing FILE"
-msgstr "排除包含了快取標記的目錄"
+msgstr "排除包含 FILE 的目錄之下所有東西"
 
-#: src/tar.c:654
-#, fuzzy
+#: src/tar.c:670
 msgid "exclude directories containing FILE"
-msgstr "排除包含了快取標記的目錄"
+msgstr "排除包含 FILE 的目錄"
 
-#: src/tar.c:656
+#: src/tar.c:672
 msgid "exclude version control system directories"
+msgstr "排除版本控制系統目錄"
+
+#: src/tar.c:674
+msgid "exclude backup and lock files"
 msgstr ""
 
-#: src/tar.c:658
+#: src/tar.c:676
 msgid "avoid descending automatically in directories"
-msgstr "避免自動在目錄中降"
+msgstr "避免自動在目錄中降"
 
-#: src/tar.c:660
+#: src/tar.c:678
 msgid "stay in local file system when creating archive"
 msgstr "建立保存檔時保持在本地檔案系統中"
 
-#: src/tar.c:662
+#: src/tar.c:680
 msgid "recurse into directories (default)"
 msgstr "遞迴進入目錄 (預設)"
 
-#: src/tar.c:664
+#: src/tar.c:682
 msgid "don't strip leading `/'s from file names"
 msgstr "不要從檔案名稱中截去前導的 '/'"
 
-#: src/tar.c:666
+#: src/tar.c:684
 msgid "follow symlinks; archive and dump the files they point to"
-msgstr ""
+msgstr "跟隨符號連結;保存和傾印它們所指涉的檔案"
 
-#: src/tar.c:668
+#: src/tar.c:686
 msgid "follow hard links; archive and dump the files they refer to"
-msgstr ""
+msgstr "跟隨硬式連結;保存和傾印它們所參考的檔案"
 
-#: src/tar.c:669
+#: src/tar.c:687
 msgid "MEMBER-NAME"
 msgstr "成員-名稱"
 
-#: src/tar.c:670
+#: src/tar.c:688
 msgid "begin at member MEMBER-NAME in the archive"
 msgstr "從保存檔中名為 MEMBER-NAME 的成員開始"
 
-#: src/tar.c:672
+#: src/tar.c:690
 msgid "only store files newer than DATE-OR-FILE"
 msgstr "只儲存比 DATE-OF-FILE 還新的檔案"
 
-#: src/tar.c:674
+#: src/tar.c:692
 msgid "DATE"
 msgstr "日期"
 
-#: src/tar.c:675
+#: src/tar.c:693
 msgid "compare date and time when data changed only"
 msgstr "只有當資料變更時才比較日期和時間"
 
-#: src/tar.c:676
+#: src/tar.c:694
 msgid "CONTROL"
 msgstr "控制"
 
-#: src/tar.c:677
+#: src/tar.c:695
 msgid "backup before removal, choose version CONTROL"
-msgstr "移除前先備份,選擇版本 CONTROL"
+msgstr "移除前先備份,選擇版本 CONTROL"
 
-#: src/tar.c:678 src/tar.c:753 src/tar.c:755 tests/genfile.c:168
+#: src/tar.c:696 src/tar.c:773 src/tar.c:775 tests/genfile.c:170
 msgid "STRING"
 msgstr "字串"
 
-#: src/tar.c:679
-#, fuzzy
+#: src/tar.c:697
 msgid ""
 "backup before removal, override usual suffix ('~' unless overridden by "
 "environment variable SIMPLE_BACKUP_SUFFIX)"
 msgstr ""
-"移除前先備份並覆蓋一般後置文字 '~',除非被環境變數 SIMPLE_BACKUP_SUFFIX 所覆"
-"蓋"
+"移除之前先備份並覆寫常用後置文字 (「~」除非被環境變數 SIMPLE_BACKUP_SUFFIX 所"
+"蓋過)"
 
-#: src/tar.c:684
+#: src/tar.c:702
 msgid "File name transformations:"
-msgstr ""
+msgstr "檔案名稱變換:"
 
-#: src/tar.c:686
-#, fuzzy
+#: src/tar.c:704
 msgid "strip NUMBER leading components from file names on extraction"
 msgstr "從檔案名稱中截去以 NUMBER 為首的成分"
 
-#: src/tar.c:688
+#: src/tar.c:706
 msgid "EXPRESSION"
-msgstr ""
+msgstr "表示式"
 
-#: src/tar.c:689
+#: src/tar.c:707
 msgid "use sed replace EXPRESSION to transform file names"
-msgstr ""
+msgstr "利用 sed 將 EXPRESSION 替代為變換檔案名稱"
 
-#: src/tar.c:695
+#: src/tar.c:713
 msgid "File name matching options (affect both exclude and include patterns):"
-msgstr ""
+msgstr "檔案名稱吻合選項 (同時影響排除和包含式樣同者):"
 
-#: src/tar.c:698
-#, fuzzy
+#: src/tar.c:716
 msgid "ignore case"
-msgstr "排除時忽略大小寫"
+msgstr "忽略大小寫"
 
-#: src/tar.c:700
-#, fuzzy
+#: src/tar.c:718
 msgid "patterns match file name start"
-msgstr "排除樣式會比對檔案名稱開頭"
+msgstr "吻合檔案名稱開頭的式樣"
 
-#: src/tar.c:702
-#, fuzzy
+#: src/tar.c:720
 msgid "patterns match after any `/' (default for exclusion)"
-msgstr "排除樣式會比對任一 '/' 後端 (預設)"
+msgstr "式樣吻合任何「/」之後的式樣 (預設排除)"
 
-#: src/tar.c:704
-#, fuzzy
+#: src/tar.c:722
 msgid "case sensitive matching (default)"
-msgstr "排除樣式忽略大小寫"
+msgstr "大小寫需相符的吻合 (預設)"
 
-#: src/tar.c:706
+#: src/tar.c:724
 msgid "use wildcards (default for exclusion)"
-msgstr ""
+msgstr "使用萬用字元 (預設排除)"
 
-#: src/tar.c:708
+#: src/tar.c:726
 msgid "verbatim string matching"
-msgstr ""
+msgstr "逐字進行吻合"
 
-#: src/tar.c:710
-#, fuzzy
+#: src/tar.c:728
 msgid "wildcards do not match `/'"
-msgstr "排除樣式之萬用字元不會符合 '/'"
+msgstr "萬用字元不會吻合「/」"
 
-#: src/tar.c:712
-#, fuzzy
+#: src/tar.c:730
 msgid "wildcards match `/' (default for exclusion)"
-msgstr "排除樣式之萬用字元會符合 '/' (預設)"
+msgstr "萬用字元會吻合「/」(預設排除)"
 
-#: src/tar.c:717
+#: src/tar.c:735
 msgid "Informative output:"
 msgstr "富含資訊的輸出:"
 
-#: src/tar.c:720
+#: src/tar.c:738
 msgid "verbosely list files processed"
 msgstr "詳細列出處理過的檔案"
 
-#: src/tar.c:722
+#: src/tar.c:739
+msgid "KEYWORD"
+msgstr ""
+
+#: src/tar.c:740
 #, fuzzy
+msgid "warning control"
+msgstr "覆寫控制:"
+
+#: src/tar.c:742
 msgid "display progress messages every NUMBERth record (default 10)"
-msgstr "每 10 項紀錄顯示一次進度訊息"
+msgstr "每幾項記錄顯示一次進度訊息 (預設 10)"
 
-#: src/tar.c:724
+#: src/tar.c:744
 msgid "ACTION"
-msgstr ""
+msgstr "動作"
 
-#: src/tar.c:725
+#: src/tar.c:745
 msgid "execute ACTION on each checkpoint"
-msgstr ""
+msgstr "於每個查核點執行 ACTION"
 
-#: src/tar.c:728
+#: src/tar.c:748
 msgid "print a message if not all links are dumped"
-msgstr "如果並非所有連結都被傾印則印出一條訊息"
+msgstr "如果並非所有連結都被傾印則印出訊息"
 
-#: src/tar.c:729
+#: src/tar.c:749
 msgid "SIGNAL"
-msgstr ""
+msgstr "信號"
 
-#: src/tar.c:730
+#: src/tar.c:750
 msgid ""
 "print total bytes after processing the archive; with an argument - print "
 "total bytes when this SIGNAL is delivered; Allowed signals are: SIGHUP, "
 "SIGQUIT, SIGINT, SIGUSR1 and SIGUSR2; the names without SIG prefix are also "
 "accepted"
 msgstr ""
+"處理保存檔之後列印位元組總計;當此信號被投遞時,利用引數 - 列印位元組總計;允"
+"許的信號是:SIGHUP、SIGQUIT、SIGINT、SIGUSR1 和 SIGUSR2;不具 SIG 前綴的名稱"
+"也是可接受的"
 
-#: src/tar.c:735
+#: src/tar.c:755
 msgid "print file modification dates in UTC"
 msgstr "以 UTC 格式印出檔案修改日期"
 
-#: src/tar.c:737
+#: src/tar.c:757
 msgid "send verbose output to FILE"
 msgstr "將詳細輸出送至 FILE"
 
-#: src/tar.c:739
+#: src/tar.c:759
 msgid "show block number within archive with each message"
 msgstr "每則訊息附帶顯示在保存檔中的區塊號碼"
 
-#: src/tar.c:741
+#: src/tar.c:761
 msgid "ask for confirmation for every action"
 msgstr "任何動作都要求確認"
 
-#: src/tar.c:744
-#, fuzzy
+#: src/tar.c:764
 msgid "show tar defaults"
 msgstr "顯示 tar 預設值"
 
-#: src/tar.c:746
-#, fuzzy
+#: src/tar.c:766
 msgid ""
 "when listing or extracting, list each directory that does not match search "
 "criteria"
 msgstr "當表列或解開時,列出每一個不符合搜尋條件的目錄"
 
-#: src/tar.c:748
+#: src/tar.c:768
 msgid "show file or archive names after transformation"
-msgstr ""
+msgstr "顯示變換之後的檔案或保存檔名稱"
 
-#: src/tar.c:751
+#: src/tar.c:771
 msgid "STYLE"
-msgstr ""
+msgstr "樣式"
 
-#: src/tar.c:752
+#: src/tar.c:772
 msgid "set name quoting style; see below for valid STYLE values"
-msgstr ""
+msgstr "設定名稱引號樣式;參看下列的有效樣式值"
 
-#: src/tar.c:754
+#: src/tar.c:774
 msgid "additionally quote characters from STRING"
-msgstr ""
+msgstr "來自 STRING 的額外引號字元"
 
-#: src/tar.c:756
+#: src/tar.c:776
 msgid "disable quoting for characters from STRING"
-msgstr ""
+msgstr "停用來自字串的引號字元"
 
-#: src/tar.c:761
+#: src/tar.c:781
 msgid "Compatibility options:"
-msgstr "相容性選項:"
+msgstr "相容選項:"
 
-#: src/tar.c:764
-#, fuzzy
+#: src/tar.c:784
 msgid ""
 "when creating, same as --old-archive; when extracting, same as --no-same-"
 "owner"
 msgstr "當建立時,等同於 --old-archive。當解開時,等同於 --no-same-owner"
 
-#: src/tar.c:769
+#: src/tar.c:789
 msgid "Other options:"
-msgstr "其他選項:"
+msgstr "其他選項"
 
-#: src/tar.c:772
+#: src/tar.c:792
 msgid "disable use of some potentially harmful options"
-msgstr ""
+msgstr "停用某些潛在有害的選項"
 
-#: src/tar.c:920
-msgid "You may not specify more than one `-Acdtrux' option"
-msgstr "不可指定‘-Acdtrux’當中多於一個的選項"
+#: src/tar.c:927
+#, fuzzy
+msgid "You may not specify more than one `-Acdtrux' or `--test-label' option"
+msgstr "不可指定「-Acdtrux」當中多於一個的選項"
 
-#: src/tar.c:930
+#: src/tar.c:937
 msgid "Conflicting compression options"
-msgstr "有關壓縮的選項互相抵觸"
+msgstr "互相抵觸的壓縮選項"
 
-#: src/tar.c:986
-#, fuzzy, c-format
+#: src/tar.c:993
+#, c-format
 msgid "Unknown signal name: %s"
-msgstr "不明的檔案類型 %s\n"
+msgstr "不明的信號名稱:%s"
 
-#: src/tar.c:1010
-#, fuzzy
+#: src/tar.c:1017
 msgid "Date sample file not found"
-msgstr "找不到用作擷取時間資料的檔案"
+msgstr "找不到日期範例檔案"
 
-#: src/tar.c:1018
+#: src/tar.c:1025
 #, c-format
 msgid "Substituting %s for unknown date format %s"
 msgstr "以 %s 代替不明的日期格式 %s"
 
-#: src/tar.c:1043
-#, fuzzy, c-format
+#: src/tar.c:1054
+#, c-format
 msgid "Option %s: Treating date `%s' as %s"
-msgstr "以 %2$s + %3$ld 柰秒的格式來處理日期 '%1$s'"
+msgstr "選項 %1$s: 以 %3$s 格式來處理日期「%2$s」"
 
-#: src/tar.c:1120
-#, fuzzy, c-format
+#: src/tar.c:1132
+#, c-format
 msgid "%s: file list already read"
-msgstr "%s:這個檔案是保存檔;未傾印"
+msgstr "%s:已經讀取檔案清單"
 
-#: src/tar.c:1185
+#: src/tar.c:1198
 #, c-format
 msgid "%s: file name read contains nul character"
-msgstr ""
+msgstr "%s:所讀檔案名稱含有空值字元"
 
-#: src/tar.c:1250
-msgid "Valid arguments for --quoting-style options are:"
-msgstr ""
+#: src/tar.c:1265 src/tar.c:1269 src/tar.c:1273 src/tar.c:1277 src/tar.c:1281
+#: src/tar.c:1285
+#, fuzzy, c-format
+msgid "filter the archive through %s"
+msgstr "保存檔以 xz 過濾處理"
+
+#: src/tar.c:1290
+#, fuzzy
+msgid "Valid arguments for the --quoting-style option are:"
+msgstr "用於 --quoting-style 選項的有效引數為:"
 
-#: src/tar.c:1253
+#: src/tar.c:1294
 msgid ""
 "\n"
 "*This* tar defaults to:\n"
@@ -2125,161 +2147,173 @@ msgstr ""
 "\n"
 "*這個* tar 預設為:\n"
 
-#: src/tar.c:1294
+#: src/tar.c:1393
 msgid "Invalid blocking factor"
-msgstr "無效的分區因"
+msgstr "無效的分區因"
 
-#: src/tar.c:1401
+#: src/tar.c:1500
 msgid "Invalid tape length"
 msgstr "無效的磁帶長度"
 
-#: src/tar.c:1441
+#: src/tar.c:1511
+#, fuzzy
+msgid "Invalid incremental level value"
+msgstr "不當的遞增檔案格式"
+
+#: src/tar.c:1557
 msgid "More than one threshold date"
 msgstr "一個以上的限定日期"
 
-#: src/tar.c:1496 src/tar.c:1499
+#: src/tar.c:1612 src/tar.c:1615
 msgid "Invalid sparse version value"
-msgstr ""
+msgstr "無效的稀疏版本值"
 
-#: src/tar.c:1584
+#: src/tar.c:1700
 msgid "--atime-preserve='system' is not supported on this platform"
-msgstr ""
+msgstr "--atime-preserve='system' 於這個平台未被支援"
 
-#: src/tar.c:1609
+#: src/tar.c:1725
 msgid "--checkpoint value is not an integer"
-msgstr ""
+msgstr "--checkpoint 值不是整數"
 
-#: src/tar.c:1710
-#, c-format
-msgid "%s: Invalid group"
+#: src/tar.c:1830
+#, fuzzy
+msgid "Invalid group"
 msgstr "%s:無效的群組"
 
-#: src/tar.c:1717
+#: src/tar.c:1837
 msgid "Invalid mode given on option"
 msgstr "選項中的模式無效"
 
-#: src/tar.c:1774
+#: src/tar.c:1894
 msgid "Invalid number"
 msgstr "無效的號碼"
 
-#: src/tar.c:1796
+#: src/tar.c:1916
 msgid "Invalid owner"
 msgstr "無效的擁有者"
 
-#: src/tar.c:1822
+#: src/tar.c:1946
 msgid ""
 "The --preserve option is deprecated, use --preserve-permissions --preserve-"
 "order instead"
 msgstr ""
+"--preserve 選項不宜再用,請以 --preserve-permissions --preserve-order 做為替"
+"代"
 
-#: src/tar.c:1832
+#: src/tar.c:1956
 msgid "Invalid record size"
-msgstr "無效的錄大小"
+msgstr "無效的錄大小"
 
-#: src/tar.c:1835
+#: src/tar.c:1959
 #, c-format
 msgid "Record size must be a multiple of %d."
-msgstr "錄大小必須是 %d 的倍數。"
+msgstr "錄大小必須是 %d 的倍數。"
 
-#: src/tar.c:1872
+#: src/tar.c:2000
 msgid "Invalid number of elements"
 msgstr "無效的元素號碼"
 
-#: src/tar.c:1892
+#: src/tar.c:2020
 msgid "Only one --to-command option allowed"
-msgstr ""
+msgstr "只允許一個 --to-command 選項"
 
-#: src/tar.c:1968
-#, fuzzy, c-format
+#: src/tar.c:2100
+#, c-format
 msgid "Malformed density argument: %s"
-msgstr "未成形的密度引數: '%s'"
+msgstr "異常的密度引數:%s"
 
-#: src/tar.c:1994
-#, fuzzy, c-format
+#: src/tar.c:2126
+#, c-format
 msgid "Unknown density: `%c'"
-msgstr "未知的密度: '%c'"
+msgstr "不明的密度:「%c」"
 
-#: src/tar.c:2011
+#: src/tar.c:2143
 #, c-format
 msgid "Options `-[0-7][lmh]' not supported by *this* tar"
-msgstr "此版本的 tar 不支援‘-[0-7][lmh]’選項"
+msgstr "此版本的 tar 不支援「-[0-7][ lmh]」選項"
 
-#: src/tar.c:2046
+#: src/tar.c:2156
 msgid "[FILE]..."
-msgstr "[FILE]..."
+msgstr "[FILE]"
 
-#: src/tar.c:2152
+#: src/tar.c:2274
 #, c-format
 msgid "Old option `%c' requires an argument."
-msgstr "舊式的選項‘%c’需要引數。"
+msgstr "舊的選項「%c」需要一個引數。"
 
-#: src/tar.c:2234
+#: src/tar.c:2355
 msgid "--occurrence is meaningless without a file list"
 msgstr "若無檔案列表,--occurrence 便不具意義"
 
-#: src/tar.c:2240
+#: src/tar.c:2361
 msgid "--occurrence cannot be used in the requested operation mode"
-msgstr "--occurrence 不可使用於要求的作業模式"
+msgstr "--occurrence 無法於要求的作業模式中使用"
 
-#: src/tar.c:2270
+#: src/tar.c:2379
 msgid "Multiple archive files require `-M' option"
-msgstr "指定多個保存檔時需要‘-M’選項"
+msgstr "指定多個保存檔時需要「-M」選項"
 
-#: src/tar.c:2275
+#: src/tar.c:2384
 msgid "Cannot combine --listed-incremental with --newer"
-msgstr "無法同時使用 --listed-incremental 及 --newer 選項"
+msgstr "無法同時使用 --listed-incremental 及 --newer"
+
+#: src/tar.c:2387
+#, fuzzy
+msgid "--level is meaningless without --listed-incremental"
+msgstr "--preserve-order 與 --listed-incremental 不相容"
 
-#: src/tar.c:2292
+#: src/tar.c:2404
 #, c-format
 msgid "%s: Volume label is too long (limit is %lu byte)"
 msgid_plural "%s: Volume label is too long (limit is %lu bytes)"
-msgstr[0] "%s卷冊標籤太長 (限制為 %lu 位元組)"
+msgstr[0] "%s卷冊標籤太長 (限制為 %lu 位元組)"
 
-#: src/tar.c:2305
+#: src/tar.c:2417
 msgid "Cannot verify multi-volume archives"
-msgstr "無法檢驗多重卷冊的保存檔"
+msgstr "無法驗證多重卷冊的保存檔"
 
-#: src/tar.c:2307
+#: src/tar.c:2419
 msgid "Cannot verify compressed archives"
-msgstr "無法檢驗壓縮的保存檔"
+msgstr "無法驗證壓縮過的保存檔"
 
-#: src/tar.c:2313
+#: src/tar.c:2425
 msgid "Cannot use multi-volume compressed archives"
 msgstr "無法使用多重卷冊的壓縮保存檔"
 
-#: src/tar.c:2319
-#, fuzzy
+#: src/tar.c:2431
 msgid "Cannot concatenate compressed archives"
-msgstr "無法更新壓縮的保存檔"
+msgstr "無法串接壓縮過的檔案"
 
-#: src/tar.c:2331
+#: src/tar.c:2443
 msgid "--pax-option can be used only on POSIX archives"
 msgstr "--pax-option 只能用於 POSIX 保存檔"
 
-#: src/tar.c:2349
+#: src/tar.c:2461
 msgid "Volume length cannot be less than record size"
-msgstr ""
+msgstr "卷冊長度無法少於記錄大小"
 
-#: src/tar.c:2352
+#: src/tar.c:2464
 msgid "--preserve-order is not compatible with --listed-incremental"
-msgstr ""
+msgstr "--preserve-order 與 --listed-incremental 不相容"
 
-#: src/tar.c:2363
+#: src/tar.c:2475
 msgid "Cowardly refusing to create an empty archive"
-msgstr "拒絕建立空白的保存檔"
+msgstr "低調拒絕建立空白的保存檔"
 
-#: src/tar.c:2388
+#: src/tar.c:2501
 msgid "Options `-Aru' are incompatible with `-f -'"
-msgstr "‘-Aru’及‘-f -’選項互不兼容"
+msgstr "「-Aru」與「-f -」選項不相容"
 
-#: src/tar.c:2477
-msgid "You must specify one of the `-Acdtrux' options"
-msgstr "必須指定‘-Acdtrux’選項的其中一個"
+#: src/tar.c:2592
+#, fuzzy
+msgid "You must specify one of the `-Acdtrux' or `--test-label'  options"
+msgstr "必須指定「-Acdtrux」選項的其中一個"
 
-#: src/tar.c:2528
+#: src/tar.c:2646
 #, c-format
 msgid "Exiting with failure status due to previous errors"
-msgstr ""
+msgstr "由於先前錯誤而以失敗狀態離開"
 
 #: src/update.c:86
 #, c-format
@@ -2287,615 +2321,427 @@ msgid "%s: File shrank by %s byte"
 msgid_plural "%s: File shrank by %s bytes"
 msgstr[0] "%s:檔案縮減了 %s 位元組"
 
-#: src/xheader.c:156
-#, fuzzy, c-format
+#: src/xheader.c:163
+#, c-format
 msgid "Keyword %s is unknown or not yet implemented"
 msgstr "關鍵字 %s 為未知或尚未實作"
 
-#: src/xheader.c:182
+#: src/xheader.c:173
+#, fuzzy
+msgid "Time stamp is out of allowed range"
+msgstr "號碼超出允許的範圍:%s"
+
+#: src/xheader.c:204
 #, c-format
 msgid "Pattern %s cannot be used"
-msgstr "樣式 %s 無法被使用"
+msgstr "式樣 %s 無法使用"
 
-#: src/xheader.c:192
+#: src/xheader.c:218
 #, c-format
 msgid "Keyword %s cannot be overridden"
 msgstr "關鍵字 %s 無法被蓋過"
 
-#: src/xheader.c:496
-#, fuzzy
+#: src/xheader.c:541
 msgid "Malformed extended header: missing length"
-msgstr "未成形的擴充標頭:缺少等號"
+msgstr "異常的擴充標頭:長度缺少"
 
-#: src/xheader.c:504
+#: src/xheader.c:549
 msgid "Extended header length is out of allowed range"
-msgstr ""
+msgstr "擴充標頭長度超出允許範圍"
 
-#: src/xheader.c:511
-#, fuzzy, c-format
+#: src/xheader.c:556
+#, c-format
 msgid "Extended header length %*s is out of range"
-msgstr "保存檔有號 base-64 字串 %s 超出 %s 範圍"
+msgstr "擴充標頭長度 %*s 超出範圍"
 
-#: src/xheader.c:523
-#, fuzzy
+#: src/xheader.c:568
 msgid "Malformed extended header: missing blank after length"
-msgstr "未成形的擴充標頭:在長度之後缺少空白"
+msgstr "異常的擴充標頭:在長度之後缺少空白"
 
-#: src/xheader.c:531
+#: src/xheader.c:576
 msgid "Malformed extended header: missing equal sign"
-msgstr "未成形的擴充標頭:缺少等號"
+msgstr "異常的擴充標頭:缺少等號"
 
-#: src/xheader.c:537
-#, fuzzy
+#: src/xheader.c:582
 msgid "Malformed extended header: missing newline"
-msgstr "未成形的擴充標頭:缺少等號"
+msgstr "異常的擴充標頭:缺少新列"
 
-#: src/xheader.c:574
+#: src/xheader.c:620
 #, c-format
 msgid "Ignoring unknown extended header keyword `%s'"
-msgstr ""
+msgstr "忽略不明擴充標頭關鍵字「%s」"
 
-#: src/xheader.c:778
+#: src/xheader.c:830
 #, c-format
 msgid "Generated keyword/value pair is too long (keyword=%s, length=%s)"
-msgstr ""
+msgstr "產生的關鍵字/值對太長 (關鍵字=%s,長度=%s)"
 
 #. TRANSLATORS: The first %s is the pax extended header keyword
 #. (atime, gid, etc.).
-#: src/xheader.c:810
-#, fuzzy, c-format
+#: src/xheader.c:862
+#, c-format
 msgid "Extended header %s=%s is out of range %s..%s"
-msgstr "保存檔值 %s 已超出 %s 的範圍 %s.%s"
+msgstr "擴充標頭 %s=%s 超出範圍 %s..%s"
 
-#: src/xheader.c:941 src/xheader.c:971 src/xheader.c:1285
-#, fuzzy, c-format
+#: src/xheader.c:993 src/xheader.c:1023 src/xheader.c:1337
+#, c-format
 msgid "Malformed extended header: invalid %s=%s"
-msgstr "未成形的擴充標頭:缺少等號"
+msgstr "異常的擴充標頭:無效的 %s=%s"
 
-#: src/xheader.c:1238 src/xheader.c:1263 src/xheader.c:1313
-#, fuzzy, c-format
+#: src/xheader.c:1290 src/xheader.c:1315 src/xheader.c:1365
+#, c-format
 msgid "Malformed extended header: excess %s=%s"
-msgstr "未成形的擴充標頭:缺少等號"
+msgstr "異常的擴充標頭:過剩的 %s=%s"
 
-#: src/xheader.c:1326
-#, fuzzy, c-format
+#: src/xheader.c:1378
+#, c-format
 msgid "Malformed extended header: invalid %s: unexpected delimiter %c"
-msgstr "未成形的擴充標頭:缺少等號"
+msgstr "異常的擴充標頭:無效的 %s:未預期的分隔符號 %c"
 
-#: src/xheader.c:1336
-#, fuzzy, c-format
+#: src/xheader.c:1388
+#, c-format
 msgid "Malformed extended header: invalid %s: odd number of values"
-msgstr "未成形的擴充標頭:缺少等號"
+msgstr "異常的擴充標頭:無效的 %s:奇怪的數值數量"
 
 #: src/checkpoint.c:107
-#, fuzzy, c-format
+#, c-format
 msgid "%s: not a valid timeout"
-msgstr "%s:無效的群組"
+msgstr "%s:不是有效的時間限制"
 
 #: src/checkpoint.c:112
 #, c-format
 msgid "%s: unknown checkpoint action"
-msgstr ""
+msgstr "%s:不明查核點動作"
 
 #: src/checkpoint.c:132
 msgid "write"
-msgstr ""
+msgstr "寫入"
 
 #: src/checkpoint.c:132
 msgid "read"
-msgstr ""
+msgstr "讀取"
 
 #. TRANSLATORS: This is a ``checkpoint of write operation'',
 #. *not* ``Writing a checkpoint''.
 #. E.g. in Spanish ``Punto de comprobaci@'on de escritura'',
 #. *not* ``Escribiendo un punto de comprobaci@'on''
 #: src/checkpoint.c:222
-#, fuzzy, c-format
+#, c-format
 msgid "Write checkpoint %u"
-msgstr "寫入檢查點 %d"
+msgstr "寫入的查核點 %u"
 
 #. TRANSLATORS: This is a ``checkpoint of read operation'',
 #. *not* ``Reading a checkpoint''.
 #. E.g. in Spanish ``Punto de comprobaci@'on de lectura'',
 #. *not* ``Leyendo un punto de comprobaci@'on''
 #: src/checkpoint.c:228
-#, fuzzy, c-format
+#, c-format
 msgid "Read checkpoint %u"
-msgstr "è®\80å\85¥æª¢æ\9f¥é»\9e %d"
+msgstr "è®\80å\8f\96ç\9a\84æ\9f¥æ ¸é»\9e %u"
 
-#: tests/genfile.c:111
+#: tests/genfile.c:112
 msgid ""
 "genfile manipulates data files for GNU paxutils test suite.\n"
 "OPTIONS are:\n"
 msgstr ""
+"genfile 在 GNU paxutils 測試套件中用於操控資料檔案。\n"
+"選項:\n"
 
-#: tests/genfile.c:126
-#, fuzzy
+#: tests/genfile.c:128
 msgid "File creation options:"
-msgstr "其他選項:"
+msgstr "檔案建立選項:"
 
-#: tests/genfile.c:127 tests/genfile.c:138
+#: tests/genfile.c:129 tests/genfile.c:140
 msgid "SIZE"
-msgstr ""
+msgstr "大小"
 
-#: tests/genfile.c:128
-#, fuzzy
+#: tests/genfile.c:130
 msgid "Create file of the given SIZE"
-msgstr "以給定格式建立保存檔。"
+msgstr "以給定 SIZE 建立檔案。"
 
-#: tests/genfile.c:130
-#, fuzzy
+#: tests/genfile.c:132
 msgid "Write to file NAME, instead of standard output"
-msgstr "解開檔案至標準輸出"
+msgstr "寫入檔案 NAME,以代替標準輸出"
 
-#: tests/genfile.c:132
-#, fuzzy
+#: tests/genfile.c:134
 msgid "Read file names from FILE"
-msgstr "讀取 %s 位元組自 %s "
+msgstr "從 FILE 讀取檔案名稱"
 
-#: tests/genfile.c:134
-#, fuzzy
+#: tests/genfile.c:136
 msgid "-T reads null-terminated names"
-msgstr "-T 讀取零值終結的名稱,停用 -C"
+msgstr "-T 讀取零值終結的名稱"
 
-#: tests/genfile.c:136
+#: tests/genfile.c:138
 msgid "Fill the file with the given PATTERN. PATTERN is 'default' or 'zeros'"
-msgstr ""
+msgstr "以給定 PATTERN 填充檔案。PATTERN 是「default」或「zeros」"
 
-#: tests/genfile.c:139
+#: tests/genfile.c:141
 msgid "Size of a block for sparse file"
-msgstr ""
+msgstr "用於稀疏檔案的區塊大小"
 
-#: tests/genfile.c:141
+#: tests/genfile.c:143
 msgid "Generate sparse file. Rest of the command line gives the file map."
-msgstr ""
+msgstr "產生稀疏檔案。命令列的其餘部份給出檔案對映。"
 
-#: tests/genfile.c:143
+#: tests/genfile.c:145
 msgid "OFFSET"
-msgstr ""
+msgstr "偏移值"
 
-#: tests/genfile.c:144
-#, fuzzy
+#: tests/genfile.c:146
 msgid "Seek to the given offset before writing data"
-msgstr "å\98\97試å\9c¨å¯«å\85¥ä¹\8bå¾\8cé©\97è­\89ä¿\9då­\98æª\94"
+msgstr "寫å\85¥è³\87æ\96\99ä¹\8bå\89\8då°\8bæ\8c\87給å®\9aç\9a\84å\81\8f移å\80¼"
 
-#: tests/genfile.c:150
+#: tests/genfile.c:152
 msgid "File statistics options:"
-msgstr ""
+msgstr "檔案統計選項:"
 
-#: tests/genfile.c:153
+#: tests/genfile.c:155
 msgid "Print contents of struct stat for each given file. Default FORMAT is: "
-msgstr ""
+msgstr "列印每個給定檔案的結構狀態內容。預設 FORMAT 為:"
 
-#: tests/genfile.c:160
+#: tests/genfile.c:162
 msgid "Synchronous execution options:"
-msgstr ""
+msgstr "同步的執行選項:"
 
-#: tests/genfile.c:163
+#: tests/genfile.c:164
+#, fuzzy
+msgid "OPTION"
+msgstr " [選項…]"
+
+#: tests/genfile.c:165
+#, fuzzy
 msgid ""
-"Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, "
-"--touch"
+"Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, "
+"--unlink"
 msgstr ""
+"執行給定的 COMMAND。同時與 --checkpoint 和 --cut, --append, --touch 之一使用"
+"會有作用"
 
-#: tests/genfile.c:166
+#: tests/genfile.c:168
 msgid "Perform given action (see below) upon reaching checkpoint NUMBER"
-msgstr ""
+msgstr "當達到查核點 NUMBER 時實行給定動作 (參看以下)"
 
-#: tests/genfile.c:169
+#: tests/genfile.c:171
 msgid "Set date for next --touch option"
-msgstr ""
+msgstr "設定後續 --touch 選項所需的日期"
 
-#: tests/genfile.c:172
+#: tests/genfile.c:174
 msgid "Display executed checkpoints and exit status of COMMAND"
-msgstr ""
+msgstr "顯示已執行的查核點以及 COMMAND 的離開狀態"
 
-#: tests/genfile.c:177
+#: tests/genfile.c:179
 msgid ""
 "Synchronous execution actions. These are executed when checkpoint number "
 "given by --checkpoint option is reached."
 msgstr ""
+"同步的執行動作。當到達由 --checkpoint 選項所給定的查核點編號時,這些動作會被"
+"執行。"
 
-#: tests/genfile.c:180
+#: tests/genfile.c:182
 msgid ""
 "Truncate FILE to the size specified by previous --length option (or 0, if it "
 "is not given)"
-msgstr ""
+msgstr "依先前 --length 選項指定的大小來截斷檔案 (如果它未被給定就是 0)"
 
-#: tests/genfile.c:184
+#: tests/genfile.c:186
 msgid "Append SIZE bytes to FILE. SIZE is given by previous --length option."
-msgstr ""
+msgstr "附加 SIZE 位元組到 FILE。SIZE 是由先前 --length 選項所給定。"
 
-#: tests/genfile.c:187
+#: tests/genfile.c:189
 msgid "Update the access and modification times of FILE"
-msgstr ""
+msgstr "更新檔案的存取和修改時間"
 
-#: tests/genfile.c:190
-#, fuzzy
+#: tests/genfile.c:192
 msgid "Execute COMMAND"
-msgstr "å\91½ä»¤"
+msgstr "å\9f·è¡\8c COMMAND"
 
-#: tests/genfile.c:240
-#, fuzzy, c-format
-msgid "Invalid size: %s"
-msgstr "無效的時間標記"
+#: tests/genfile.c:195
+msgid "Unlink FILE"
+msgstr ""
 
 #: tests/genfile.c:245
-#, fuzzy, c-format
+#, c-format
+msgid "Invalid size: %s"
+msgstr "無效的大小:%s"
+
+#: tests/genfile.c:250
+#, c-format
 msgid "Number out of allowed range: %s"
-msgstr "Inode 號碼超出範圍以外"
+msgstr "號碼超出允許的範圍:%s"
 
-#: tests/genfile.c:248
+#: tests/genfile.c:253
 #, c-format
 msgid "Negative size: %s"
-msgstr ""
+msgstr "負值大小:%s"
 
-#: tests/genfile.c:261 tests/genfile.c:558
+#: tests/genfile.c:266 tests/genfile.c:568
 #, c-format
 msgid "stat(%s) failed"
-msgstr ""
+msgstr "狀態(%s) 失敗"
 
-#: tests/genfile.c:264
+#: tests/genfile.c:269
 #, c-format
 msgid "requested file length %lu, actual %lu"
-msgstr ""
+msgstr "要求檔案長度 %lu,實際則是 %lu"
 
-#: tests/genfile.c:268
+#: tests/genfile.c:273
 #, c-format
 msgid "created file is not sparse"
-msgstr ""
+msgstr "建立的不是稀疏檔案"
 
-#: tests/genfile.c:353
+#: tests/genfile.c:362
 #, c-format
 msgid "Error parsing number near `%s'"
-msgstr ""
+msgstr "剖析數字接近「%s」時發生錯誤"
 
-#: tests/genfile.c:359
-#, fuzzy, c-format
+#: tests/genfile.c:368
+#, c-format
 msgid "Unknown date format"
-msgstr "不明的系統錯誤"
+msgstr "不明的日期格式"
 
-#: tests/genfile.c:382
+#: tests/genfile.c:392
 msgid "[ARGS...]"
-msgstr ""
+msgstr "[引數…]"
 
-#: tests/genfile.c:419 tests/genfile.c:459 tests/genfile.c:512
-#: tests/genfile.c:662 tests/genfile.c:676
+#: tests/genfile.c:429 tests/genfile.c:469 tests/genfile.c:522
+#: tests/genfile.c:672 tests/genfile.c:686
 #, c-format
 msgid "cannot open `%s'"
-msgstr ""
+msgstr "無法開啟「%s」"
 
-#: tests/genfile.c:425
-#, fuzzy
+#: tests/genfile.c:435
 msgid "cannot seek"
-msgstr "close 程序失敗"
+msgstr "無法尋指"
 
-#: tests/genfile.c:442
+#: tests/genfile.c:452
 #, c-format
 msgid "file name contains null character"
-msgstr ""
+msgstr "檔案名稱含有空字元"
 
-#: tests/genfile.c:507
+#: tests/genfile.c:517
 #, c-format
 msgid "cannot generate sparse files on standard output, use --file option"
-msgstr ""
+msgstr "無法於標準輸出產生稀疏檔案,使用 --file 選項"
 
-#: tests/genfile.c:585
+#: tests/genfile.c:595
 #, c-format
 msgid "incorrect mask (near `%s')"
-msgstr ""
+msgstr "不正確遮罩 (接近「%s」)"
 
-#: tests/genfile.c:591 tests/genfile.c:624
-#, fuzzy, c-format
+#: tests/genfile.c:601 tests/genfile.c:634
+#, c-format
 msgid "Unknown field `%s'"
-msgstr "ä¸\8dæ\98\8eç\9a\84æª\94æ¡\88é¡\9eå\9e\8b %s\n"
+msgstr "ä¸\8dæ\98\8eç\9a\84æ¬\84ä½\8dã\80\8c%sã\80\8d"
 
-#: tests/genfile.c:651
-#, fuzzy, c-format
+#: tests/genfile.c:661
+#, c-format
 msgid "cannot set time on `%s'"
-msgstr "%s:無法搜尋至 %s"
+msgstr "無法設定時間為「%s」"
+
+#: tests/genfile.c:700
+#, fuzzy, c-format
+msgid "cannot unlink `%s'"
+msgstr "無法開啟「%s」"
 
-#: tests/genfile.c:805
+#: tests/genfile.c:826
 #, c-format
 msgid "Command exited successfully\n"
-msgstr ""
+msgstr "成功離開命令\n"
 
-#: tests/genfile.c:807
-#, fuzzy, c-format
+#: tests/genfile.c:828
+#, c-format
 msgid "Command failed with status %d\n"
-msgstr "å\89¯ç¨\8båº\8få\9b è¨\8aè\99\9f %d è\80\8cçª\81ç\84¶çµ\82æ­¢"
+msgstr "å\91½ä»¤ä»¥ç\8b\80æ\85\8b %d å¤±æ\95\97\n"
 
-#: tests/genfile.c:811
+#: tests/genfile.c:832
 #, c-format
 msgid "Command terminated on signal %d\n"
-msgstr ""
+msgstr "命令於信號 %d 終止\n"
 
-#: tests/genfile.c:813
+#: tests/genfile.c:834
 #, c-format
 msgid "Command stopped on signal %d\n"
-msgstr ""
+msgstr "命令於信號 %d 停止\n"
 
-#: tests/genfile.c:816
+#: tests/genfile.c:837
 #, c-format
 msgid "Command dumped core\n"
-msgstr ""
+msgstr "命令傾印核心\n"
 
-#: tests/genfile.c:819
+#: tests/genfile.c:840
 #, c-format
 msgid "Command terminated\n"
-msgstr ""
+msgstr "命令終止\n"
 
-#: tests/genfile.c:851
-#, fuzzy, c-format
-msgid "--stat requires file names"
-msgstr "--損毀的檔案名稱--\n"
-
-#: tests/genfile.c:864
+#: tests/genfile.c:872
 #, c-format
-msgid "too many arguments"
-msgstr ""
-
-#~ msgid "Warning: the -I option is not supported; perhaps you meant -j or -T?"
-#~ msgstr "警告:不再支援 -I 選項;也許你是指 -j 或 -T 選項?"
-
-#~ msgid "block size"
-#~ msgstr "區塊大小"
-
-#~ msgid ""
-#~ "This program comes with NO WARRANTY, to the extent permitted by law.\n"
-#~ "You may redistribute it under the terms of the GNU General Public "
-#~ "License;\n"
-#~ "see the file named COPYING for details."
-#~ msgstr ""
-#~ "此軟體在法律允許的限度之下不附帶任何保證。你可以根據 GNU General Public\n"
-#~ "License 中的條款重新散佈此軟體;詳請請參考檔案 COPYING。"
-
-#~ msgid "rmtd: Garbage command %c\n"
-#~ msgstr "rmtd: 無用的命令 %c\n"
-
-#~ msgid "WARNING: No volume header"
-#~ msgstr "警告: 沒有卷冊表頭"
-
-#~ msgid "Visible long name error"
-#~ msgstr "可見的過長名稱錯誤"
-
-#~ msgid "Time stamp out of range"
-#~ msgstr "時間印記超出範圍以外"
-
-#~ msgid "Device number out of range"
-#~ msgstr "裝置號碼超出範圍以外"
-
-#~ msgid "Visible longname error"
-#~ msgstr "可見的檔案名稱過長錯誤"
-
-#~ msgid "Renamed %s to %s"
-#~ msgstr "將 %s 改名為 %s"
-
-#~ msgid "%s: Cannot symlink to %s"
-#~ msgstr "%s:無法建立符號連結至 %s"
-
-#~ msgid "Symlinked %s to %s"
-#~ msgstr "建立符號連結 %s 並連至 %s"
-
-#~ msgid "Unknown demangling command %s"
-#~ msgstr "未知的指令:%s"
-
-#~ msgid "Missing file name after -C"
-#~ msgstr "-C 後缺少了檔案名稱"
-
-#~ msgid "don't change access times on dumped files"
-#~ msgstr "不要改變傾印檔案的存取時間"
-
-#~ msgid "extract permissions information"
-#~ msgstr "解開權限資訊"
-
-#~ msgid "do not extract permissions information"
-#~ msgstr "不要解開權限資訊"
-
-#~ msgid "FILE-OF-NAMES"
-#~ msgstr "符合名稱之檔案"
-
-#~ msgid "exclude patterns are plain strings"
-#~ msgstr "排除樣式為單純字串"
-
-#~ msgid "dump instead the files symlinks point to"
-#~ msgstr "傾印以替代符號連結所指向的檔案"
-
-#~ msgid "same as -N"
-#~ msgstr "等同於 -N"
-
-#~ msgid "exclude patterns use wildcards (default)"
-#~ msgstr "排除樣式會使用萬用字元 (預設)"
-
-#~ msgid "print total bytes written while creating archive"
-#~ msgstr "建立保存檔時印出寫入位元組合計"
-
-#~ msgid "Print license and exit"
-#~ msgstr "印出使用授權並離開"
+msgid "--stat requires file names"
+msgstr "--stat 需要檔案名稱"
 
-#~ msgid ""
-#~ "Based on the work of John Gilmore and Jay Fenlason. See AUTHORS\n"
-#~ "for complete list of authors.\n"
-#~ msgstr ""
-#~ "奠基於 John Gilmore 與 Jay Fenlason 的成果。\n"
-#~ "參見 AUTHORS 以獲得完整的作者列表。\n"
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s:不合法的選項 -- %c\n"
 
 #~ msgid ""
-#~ "   GNU tar is free software; you can redistribute it and/or modify\n"
-#~ "   it under the terms of the GNU General Public License as published by\n"
-#~ "   the Free Software Foundation; either version 2 of the License, or\n"
-#~ "   (at your option) any later version.\n"
-#~ "\n"
-#~ "   GNU tar is distributed in the hope that it will be useful,\n"
-#~ "   but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-#~ "   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
-#~ "   GNU General Public License for more details.\n"
-#~ "\n"
-#~ "   You should have received a copy of the GNU General Public License\n"
-#~ "   along with GNU tar; if not, write to the Free Software\n"
-#~ "   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  "
-#~ "USA\n"
 #~ "\n"
+#~ "Report bugs to <%s>.\n"
 #~ msgstr ""
-#~ "   GNU tar 是自由軟體, 您可以在自由軟體基金會所出版的 GNU\n"
-#~ "   一般公用授權書的規範下加以重新散發或且修改; 不管是第二\n"
-#~ "   或 (你認為的) 更後面的版本皆可.\n"
 #~ "\n"
-#~ "   GNU tar 的散發只是希望它能有所用途而不附有任何的保證!\n"
-#~ "   甚至也不暗示它有商品價值或能合用於特定的目的. 細節請見\n"
-#~ "   GNU 一般公用授權書.\n"
-#~ "\n"
-#~ "   正常情況下, 您在收到這個軟體的同時, 也應該收到 GNU\n"
-#~ "   一般公用授權書, 如果沒有, 請連絡自由軟體基金會, 地址是:\n"
-#~ "   59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
-#~ "   USA.\n"
-#~ "\n"
-
-#~ msgid "Semantics of -l option will change in the future releases."
-#~ msgstr "選項 -l 的語意將會在未來版本中變更。"
-
-#~ msgid "Please use --one-file-system option instead."
-#~ msgstr "請以 --one-file-system 選項替代使用。"
-
-#~ msgid "Warning: the -y option is not supported; perhaps you meant -j?"
-#~ msgstr "警告:不再支援 -y 選項;也許你是指 -j 選項?"
-
-#~ msgid "Error in writing to standard output"
-#~ msgstr "將資料寫入至標準輸出時發生錯誤"
-
-#~ msgid "Error exit delayed from previous errors"
-#~ msgstr "發生錯誤離開時因之前的錯誤而延遲"
-
-#~ msgid "Cannot dup"
-#~ msgstr "dup 程序失敗"
+#~ "將錯誤回報給 <%s>。\n"
 
-#~ msgid "Cannot use compressed or remote archives"
-#~ msgstr "無法使用壓縮或遠端保存檔"
+#~ msgid "Reading %s\n"
+#~ msgstr "正在讀取 %s\n"
 
-#~ msgid "Child returned status %d"
-#~ msgstr "副程序回傳值為 %d"
-
-#~ msgid ""
-#~ "GNU `tar' saves many files together into a single tape or disk archive, "
-#~ "and\n"
-#~ "can restore individual files from the archive.\n"
-#~ msgstr ""
-#~ "GNU‘tar’可將多個檔案儲存為磁帶或磁碟中的一個保存檔,並由保存檔還原個別的\n"
-#~ "檔案。\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "If a long option shows an argument as mandatory, then it is mandatory\n"
-#~ "for the equivalent short option also.  Similarly for optional arguments.\n"
-#~ msgstr ""
-#~ "\n"
-#~ "如果某個長選項必須使用引數,在同等的短選項中這些引數也是必須的。\n"
-#~ "選擇性的引數也有類似的規定。\n"
+#~ msgid "Error is not recoverable: exiting now"
+#~ msgstr "發生無法復原的錯誤:立刻離開"
 
-#~ msgid ""
-#~ "\n"
-#~ "Main operation mode:\n"
-#~ "  -t, --list              list the contents of an archive\n"
-#~ "  -x, --extract, --get    extract files from an archive\n"
-#~ "  -c, --create            create a new archive\n"
-#~ "  -d, --diff, --compare   find differences between archive and file "
-#~ "system\n"
-#~ "  -r, --append            append files to the end of an archive\n"
-#~ "  -u, --update            only append files newer than copy in archive\n"
-#~ "  -A, --catenate          append tar files to an archive\n"
-#~ "      --concatenate       same as -A\n"
-#~ "      --delete            delete from the archive (not on mag tapes!)\n"
-#~ msgstr ""
-#~ "\n"
-#~ "主要操作模式:\n"
-#~ "  -t, --list              列出保存檔的內容\n"
-#~ "  -x, --extract, --get    由保存檔抽取檔案\n"
-#~ "  -c, --create            建立新的保存檔\n"
-#~ "  -d, --diff, --compare   比較保存檔和檔案系統之間的差異\n"
-#~ "  -r, --append            在保存檔後加上檔案\n"
-#~ "  -u, --update            only append files newer than copy in archive\n"
-#~ "  -A, --catenate          在保存檔後加上 tar 檔案\n"
-#~ "      --concatenate       等於 -A\n"
-#~ "      --delete            由保存檔中刪除檔案 (不是由磁帶刪除)\n"
+#~ msgid "suppress this warning."
+#~ msgstr "抑制這個警告。"
 
-#~ msgid ""
-#~ "      --backup[=CONTROL]       backup before removal, choose version "
-#~ "control\n"
-#~ "      --suffix=SUFFIX          backup before removal, override usual "
-#~ "suffix\n"
-#~ msgstr ""
-#~ "      --backup[=CONTROL]       移除檔案前先備份,並使用版本控制的方式\n"
-#~ "      --suffix=後置字串        移除檔案前先備份,並自行指定備份檔的後置字"
-#~ "串\n"
+#~ msgid "filter the archive through bzip2"
+#~ msgstr "保存檔以 bzip2 過濾處理"
 
-#~ msgid "Obsolete option name replaced by --blocking-factor"
-#~ msgstr "此過時的選項名稱已由 --blocking-factor 代替"
+#~ msgid "filter the archive through gzip"
+#~ msgstr "保存檔以 gzip 過濾處理"
 
-#~ msgid "Obsolete option name replaced by --read-full-records"
-#~ msgstr "此過時的選項名稱已由 --read-full-records 代替"
+#~ msgid "filter the archive through compress"
+#~ msgstr "保存檔以 compress 過濾處理"
 
-#~ msgid "Obsolete option name replaced by --touch"
-#~ msgstr "此過時的選項名稱已由 --touch 代替"
+#~ msgid "filter the archive through lzma"
+#~ msgstr "保存檔以 lzma 過濾處理"
 
-#~ msgid "Obsolete option name replaced by --absolute-names"
-#~ msgstr "此過時的選項名稱已由 --absolute-names 代替"
+#~ msgid "filter the archive through lzop"
+#~ msgstr "保存檔以 lzop 過濾處理"
 
-#~ msgid "Obsolete option name replaced by --block-number"
-#~ msgstr "此過時的選項名稱已由 --block-number 代替"
+#~ msgid "Input string too long"
+#~ msgstr "輸入字串太長"
 
-#~ msgid "Obsolete option name replaced by --backup"
-#~ msgstr "æ­¤é\81\8eæ\99\82ç\9a\84é\81¸é \85å\90\8d稱已ç\94± --backup ä»£æ\9b¿"
+#~ msgid "Number syntax error"
+#~ msgstr "æ\95¸å­\97èª\9eæ³\95é\8c¯èª¤"
 
-#~ msgid "Written by John Gilmore and Jay Fenlason."
-#~ msgstr "由 John Gilmore 及 Jay Fenlason 編寫。"
+#~ msgid "rmtd: Cannot allocate buffer space\n"
+#~ msgstr "rmtd:無法配置緩衝區空間\n"
 
-#~ msgid ""
-#~ "Copyright (C) %s Free Software Foundation, Inc.\n"
-#~ "This is free software; see the source for copying conditions.  There is "
-#~ "NO\n"
-#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR "
-#~ "PURPOSE.\n"
-#~ msgstr ""
-#~ "版權所有 (C) %s Free Software Foundation, Inc.\n"
-#~ "這是自由軟體;請參考原始碼的版權聲明。本軟體不提供任何保證,甚至不會包括\n"
-#~ "可售性或適用於任何特定目的的保證。\n"
+#~ msgid "Cannot allocate buffer space"
+#~ msgstr "無法配置緩衝區空間"
 
-#~ msgid ""
-#~ "This is free software; see the source for copying conditions.  There is "
-#~ "NO\n"
-#~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR "
-#~ "PURPOSE.\n"
-#~ msgstr ""
-#~ "這是自由軟體;請參考原始碼的版權聲明。本軟體不提供任何保證,甚至不會包括\n"
-#~ "可售性或適用於任何特定目的的保證。\n"
+#~ msgid "Try `%s --help' for more information.\n"
+#~ msgstr "請嘗試「%s --help」以獲得更多資訊。\n"
 
 #~ msgid ""
-#~ "This program is free software; you can redistribute it and/or modify\n"
-#~ "it under the terms of the GNU General Public License as published by\n"
-#~ "the Free Software Foundation; either version 2, or (at your option)\n"
-#~ "any later version.\n"
+#~ "Usage: %s [OPTION]\n"
+#~ "Manipulate a tape drive, accepting commands from a remote process.\n"
 #~ "\n"
+#~ "  --version  Output version info.\n"
+#~ "  --help     Output this help.\n"
 #~ msgstr ""
-#~ "本程式是自由軟體;你可以根據 Free Software Foundation 所公佈的 GNU\n"
-#~ "General Public License 第二版或(自由選擇)較新的版本中的條款去重新\n"
-#~ "散佈及/或修改本軟體。\n"
+#~ "用法: %s [選項]\n"
+#~ "操控磁帶機,接收來自遠端行程的命令。\n"
 #~ "\n"
+#~ "  --version  輸出版本資訊。\n"
+#~ "  --help     輸出本輔助說明。\n"
 
-#~ msgid ""
-#~ "This program is distributed in the hope that it will be useful,\n"
-#~ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
-#~ "GNU General Public License for more details.\n"
-#~ "\n"
-#~ msgstr ""
-#~ "發佈本軟體是希望它會有用,但不會提供任何保證,甚至不會包括可售性或\n"
-#~ "適用於任何特定目的的保證。詳情請參考 GNU General Public License。\n"
-#~ "\n"
+#~ msgid "Seek offset error"
+#~ msgstr "尋覓偏移值錯誤"
 
-#~ msgid ""
-#~ "You should have received a copy of the GNU General Public License\n"
-#~ "along with this program; if not, write to the Free Software Foundation,\n"
-#~ "Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
-#~ msgstr ""
-#~ "你應該已經隨本軟體收到一份 GNU General Public License;否則請寄信至\n"
-#~ "Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,\n"
-#~ "MA 02111-1307, USA.\n"
+#~ msgid "Premature end of file"
+#~ msgstr "檔案突然結束"
index b4552128dc5ae21a7914e27526a68a1739799556..37f621a104bfca03234401b19f58300a1c8c7532 100644 (file)
@@ -4,10 +4,10 @@ EXTRA_PROGRAMS = rmt
 
 rmt_SOURCES = rmt.c
 
-INCLUDES = -I$(top_srcdir)/lib -I../ -I../lib
+INCLUDES = -I$(top_srcdir)/gnu -I../ -I../gnu -I$(top_srcdir)/lib
 
-LDADD = ../lib/lib$(PACKAGE).a $(LIBINTL)
+LDADD = ../gnu/libgnu.a $(LIBINTL)
 
 rmt_LDADD = $(LDADD) $(LIB_SETSOCKOPT)
 
-rmt.o: ../lib/configmake.h
+rmt.o: ../gnu/configmake.h
index a2c43b4c7409ebb5a42b4cf256800454f2ae92c3..de66f7498d8fdf1042f40728b062d13a4566225f 100644 (file)
@@ -1,8 +1,9 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -16,8 +17,9 @@
 
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
@@ -40,63 +42,71 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
        $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argmatch.m4 \
        $(top_srcdir)/m4/argp.m4 $(top_srcdir)/m4/backupfile.m4 \
        $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \
-       $(top_srcdir)/m4/canonicalize-lgpl.m4 \
+       $(top_srcdir)/m4/canonicalize.m4 \
        $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/chown.m4 \
        $(top_srcdir)/m4/clock_time.m4 \
        $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \
        $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
-       $(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/dirent_h.m4 \
-       $(top_srcdir)/m4/dirfd.m4 $(top_srcdir)/m4/dirname.m4 \
-       $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \
-       $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eealloc.m4 \
-       $(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
-       $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exclude.m4 \
-       $(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
+       $(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/dirent-safer.m4 \
+       $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \
+       $(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dos.m4 \
+       $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+       $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+       $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+       $(top_srcdir)/m4/exclude.m4 $(top_srcdir)/m4/extensions.m4 \
        $(top_srcdir)/m4/fchdir.m4 $(top_srcdir)/m4/fclose.m4 \
-       $(top_srcdir)/m4/fcntl-safer.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+       $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \
+       $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \
        $(top_srcdir)/m4/fileblocks.m4 $(top_srcdir)/m4/float_h.m4 \
        $(top_srcdir)/m4/fnmatch.m4 $(top_srcdir)/m4/fpending.m4 \
        $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftruncate.m4 \
        $(top_srcdir)/m4/getcwd-abort-bug.m4 \
        $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \
        $(top_srcdir)/m4/getdate.m4 $(top_srcdir)/m4/getdelim.m4 \
-       $(top_srcdir)/m4/getline.m4 $(top_srcdir)/m4/getopt.m4 \
-       $(top_srcdir)/m4/getpagesize.m4 $(top_srcdir)/m4/gettext.m4 \
-       $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \
-       $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \
+       $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getline.m4 \
+       $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \
+       $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettime.m4 \
+       $(top_srcdir)/m4/gettimeofday.m4 $(top_srcdir)/m4/glibc21.m4 \
+       $(top_srcdir)/m4/gnulib-common.m4 \
        $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/hash.m4 \
        $(top_srcdir)/m4/human.m4 $(top_srcdir)/m4/iconv.m4 \
        $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \
        $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
        $(top_srcdir)/m4/inttostr.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
        $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
-       $(top_srcdir)/m4/lchown.m4 $(top_srcdir)/m4/lib-ld.m4 \
-       $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+       $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/lchown.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 \
        $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
        $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \
        $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \
        $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/malloc.m4 \
        $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/mbchar.m4 \
        $(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrtowc.m4 \
-       $(top_srcdir)/m4/mbscasecmp.m4 $(top_srcdir)/m4/mbsinit.m4 \
-       $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mempcpy.m4 \
-       $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/mkdtemp.m4 \
-       $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/modechange.m4 \
-       $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nls.m4 \
-       $(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/openat.m4 \
-       $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/paxutils.m4 \
-       $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf.m4 \
+       $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbsrtowcs.m4 \
+       $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/memchr.m4 \
+       $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/memrchr.m4 \
+       $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkdtemp.m4 \
+       $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \
+       $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/modechange.m4 \
+       $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nl_langinfo.m4 \
+       $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/open.m4 \
+       $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/pathmax.m4 \
+       $(top_srcdir)/m4/paxutils.m4 $(top_srcdir)/m4/po.m4 \
+       $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/priv-set.m4 \
        $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/quote.m4 \
        $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \
        $(top_srcdir)/m4/readlink.m4 $(top_srcdir)/m4/realloc.m4 \
-       $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rmt.m4 \
-       $(top_srcdir)/m4/rpmatch.m4 $(top_srcdir)/m4/rtapelib.m4 \
-       $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/safe-write.m4 \
+       $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rmdir.m4 \
+       $(top_srcdir)/m4/rmt.m4 $(top_srcdir)/m4/rpmatch.m4 \
+       $(top_srcdir)/m4/rtapelib.m4 $(top_srcdir)/m4/safe-read.m4 \
+       $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/same.m4 \
        $(top_srcdir)/m4/save-cwd.m4 $(top_srcdir)/m4/savedir.m4 \
        $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/size_max.m4 \
        $(top_srcdir)/m4/sleep.m4 $(top_srcdir)/m4/snprintf.m4 \
        $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
-       $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \
+       $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \
+       $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
        $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
        $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
        $(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strcase.m4 \
@@ -112,37 +122,52 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
        $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \
        $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \
        $(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-       $(top_srcdir)/m4/unlinkdir.m4 $(top_srcdir)/m4/unlocked-io.m4 \
-       $(top_srcdir)/m4/utimbuf.m4 $(top_srcdir)/m4/utime.m4 \
-       $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
-       $(top_srcdir)/m4/utimes.m4 $(top_srcdir)/m4/vasnprintf.m4 \
-       $(top_srcdir)/m4/vsnprintf.m4 $(top_srcdir)/m4/wchar.m4 \
+       $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+       $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utimbuf.m4 \
+       $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes.m4 \
+       $(top_srcdir)/m4/vasnprintf.m4 $(top_srcdir)/m4/vasprintf.m4 \
+       $(top_srcdir)/m4/version-etc.m4 $(top_srcdir)/m4/vsnprintf.m4 \
+       $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \
        $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
-       $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wcwidth.m4 \
+       $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
        $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/write.m4 \
        $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xgetcwd.m4 \
        $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrndup.m4 \
-       $(top_srcdir)/m4/xstrtol.m4 $(top_srcdir)/configure.ac
+       $(top_srcdir)/m4/xstrtol.m4 $(top_srcdir)/m4/xvasprintf.m4 \
+       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 am__installdirs = "$(DESTDIR)$(rmtdir)"
-rmtPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(rmt_PROGRAMS)
 am_rmt_OBJECTS = rmt.$(OBJEXT)
 rmt_OBJECTS = $(am_rmt_OBJECTS)
 am__DEPENDENCIES_1 =
-am__DEPENDENCIES_2 = ../lib/lib$(PACKAGE).a $(am__DEPENDENCIES_1)
+am__DEPENDENCIES_2 = ../gnu/libgnu.a $(am__DEPENDENCIES_1)
 rmt_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
 am__depfiles_maybe = depfiles
+am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
 CCLD = $(CC)
 LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
 SOURCES = $(rmt_SOURCES)
 DIST_SOURCES = $(rmt_SOURCES)
 ETAGS = etags
@@ -152,6 +177,7 @@ ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
 ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -180,7 +206,6 @@ DEFAULT_RMT_COMMAND = @DEFAULT_RMT_COMMAND@
 DEFAULT_RMT_DIR = @DEFAULT_RMT_DIR@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
-DIRENT_H = @DIRENT_H@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
@@ -193,7 +218,6 @@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
 EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
 ERRNO_H = @ERRNO_H@
 EXEEXT = @EXEEXT@
-FCNTL_H = @FCNTL_H@
 FLOAT_H = @FLOAT_H@
 FNMATCH_H = @FNMATCH_H@
 GETOPT_H = @GETOPT_H@
@@ -205,45 +229,59 @@ GNULIB_ALPHASORT = @GNULIB_ALPHASORT@
 GNULIB_ATOLL = @GNULIB_ATOLL@
 GNULIB_BTOWC = @GNULIB_BTOWC@
 GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
 GNULIB_CHOWN = @GNULIB_CHOWN@
 GNULIB_CLOSE = @GNULIB_CLOSE@
 GNULIB_DIRFD = @GNULIB_DIRFD@
 GNULIB_DPRINTF = @GNULIB_DPRINTF@
 GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_DUP3 = @GNULIB_DUP3@
 GNULIB_ENVIRON = @GNULIB_ENVIRON@
 GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
+GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
 GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
+GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
 GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FCNTL = @GNULIB_FCNTL@
+GNULIB_FDOPENDIR = @GNULIB_FDOPENDIR@
 GNULIB_FFLUSH = @GNULIB_FFLUSH@
 GNULIB_FOPEN = @GNULIB_FOPEN@
 GNULIB_FPRINTF = @GNULIB_FPRINTF@
 GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
 GNULIB_FPUTC = @GNULIB_FPUTC@
 GNULIB_FPUTS = @GNULIB_FPUTS@
 GNULIB_FREOPEN = @GNULIB_FREOPEN@
 GNULIB_FSEEK = @GNULIB_FSEEK@
 GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FSTATAT = @GNULIB_FSTATAT@
 GNULIB_FSYNC = @GNULIB_FSYNC@
 GNULIB_FTELL = @GNULIB_FTELL@
 GNULIB_FTELLO = @GNULIB_FTELLO@
 GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
 GNULIB_FWRITE = @GNULIB_FWRITE@
 GNULIB_GETCWD = @GNULIB_GETCWD@
 GNULIB_GETDELIM = @GNULIB_GETDELIM@
 GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
 GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
 GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
 GNULIB_GETLINE = @GNULIB_GETLINE@
 GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
 GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
 GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
 GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
 GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
 GNULIB_IMAXABS = @GNULIB_IMAXABS@
 GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
 GNULIB_LCHMOD = @GNULIB_LCHMOD@
 GNULIB_LCHOWN = @GNULIB_LCHOWN@
 GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
 GNULIB_LSEEK = @GNULIB_LSEEK@
 GNULIB_LSTAT = @GNULIB_LSTAT@
 GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
@@ -266,15 +304,31 @@ GNULIB_MBSSEP = @GNULIB_MBSSEP@
 GNULIB_MBSSPN = @GNULIB_MBSSPN@
 GNULIB_MBSSTR = @GNULIB_MBSSTR@
 GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
 GNULIB_MEMMEM = @GNULIB_MEMMEM@
 GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
 GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
 GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKFIFO = @GNULIB_MKFIFO@
+GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
+GNULIB_MKNOD = @GNULIB_MKNOD@
+GNULIB_MKNODAT = @GNULIB_MKNODAT@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
 GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_MKTIME = @GNULIB_MKTIME@
+GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
+GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@
 GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
 GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
 GNULIB_OPEN = @GNULIB_OPEN@
+GNULIB_OPENAT = @GNULIB_OPENAT@
 GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_PREAD = @GNULIB_PREAD@
 GNULIB_PRINTF = @GNULIB_PRINTF@
 GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
 GNULIB_PUTC = @GNULIB_PUTC@
@@ -284,13 +338,20 @@ GNULIB_PUTS = @GNULIB_PUTS@
 GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
 GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
 GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
 GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_RMDIR = @GNULIB_RMDIR@
 GNULIB_RPMATCH = @GNULIB_RPMATCH@
 GNULIB_SCANDIR = @GNULIB_SCANDIR@
 GNULIB_SETENV = @GNULIB_SETENV@
 GNULIB_SLEEP = @GNULIB_SLEEP@
 GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
 GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_STAT = @GNULIB_STAT@
 GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
 GNULIB_STPCPY = @GNULIB_STPCPY@
 GNULIB_STPNCPY = @GNULIB_STPNCPY@
@@ -301,6 +362,7 @@ GNULIB_STRERROR = @GNULIB_STRERROR@
 GNULIB_STRNDUP = @GNULIB_STRNDUP@
 GNULIB_STRNLEN = @GNULIB_STRNLEN@
 GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRPTIME = @GNULIB_STRPTIME@
 GNULIB_STRSEP = @GNULIB_STRSEP@
 GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
 GNULIB_STRSTR = @GNULIB_STRSTR@
@@ -311,8 +373,16 @@ GNULIB_STRTOLL = @GNULIB_STRTOLL@
 GNULIB_STRTOULL = @GNULIB_STRTOULL@
 GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
 GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_SYMLINK = @GNULIB_SYMLINK@
+GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
+GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
 GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
+GNULIB_UNLINK = @GNULIB_UNLINK@
+GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
 GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_USLEEP = @GNULIB_USLEEP@
+GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
 GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
 GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
 GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
@@ -332,8 +402,11 @@ HAVE_ALPHASORT = @HAVE_ALPHASORT@
 HAVE_ATOLL = @HAVE_ATOLL@
 HAVE_BTOWC = @HAVE_BTOWC@
 HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
 HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@
 HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
 HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
 HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
 HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
@@ -358,37 +431,68 @@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
 HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
 HAVE_DPRINTF = @HAVE_DPRINTF@
 HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
 HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
-HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDOPENDIR = @HAVE_FDOPENDIR@
+HAVE_FSTATAT = @HAVE_FSTATAT@
 HAVE_FSYNC = @HAVE_FSYNC@
-HAVE_FTELLO = @HAVE_FTELLO@
 HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
 HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@
 HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
 HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
 HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
 HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
 HAVE_GETUSERSHELL = @HAVE_GETUSERSHELL@
 HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
 HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
 HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
 HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
 HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
 HAVE_LSTAT = @HAVE_LSTAT@
 HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
 HAVE_MBRLEN = @HAVE_MBRLEN@
 HAVE_MBRTOWC = @HAVE_MBRTOWC@
 HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
 HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
 HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
 HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
 HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
 HAVE_OS_H = @HAVE_OS_H@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_PREAD = @HAVE_PREAD@
 HAVE_RANDOM_H = @HAVE_RANDOM_H@
 HAVE_RANDOM_R = @HAVE_RANDOM_R@
 HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
 HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
 HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
 HAVE_RPMATCH = @HAVE_RPMATCH@
 HAVE_SCANDIR = @HAVE_SCANDIR@
 HAVE_SETENV = @HAVE_SETENV@
@@ -402,7 +506,6 @@ HAVE_STPNCPY = @HAVE_STPNCPY@
 HAVE_STRCASECMP = @HAVE_STRCASECMP@
 HAVE_STRCASESTR = @HAVE_STRCASESTR@
 HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
-HAVE_STRNDUP = @HAVE_STRNDUP@
 HAVE_STRPBRK = @HAVE_STRPBRK@
 HAVE_STRSEP = @HAVE_STRSEP@
 HAVE_STRTOD = @HAVE_STRTOD@
@@ -411,6 +514,8 @@ HAVE_STRTOULL = @HAVE_STRTOULL@
 HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
 HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
 HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
 HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@
 HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
 HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
@@ -419,11 +524,15 @@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
 HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
 HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
 HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
 HAVE_UNSETENV = @HAVE_UNSETENV@
 HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
 HAVE_VASPRINTF = @HAVE_VASPRINTF@
 HAVE_VDPRINTF = @HAVE_VDPRINTF@
 HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
 HAVE_WCRTOMB = @HAVE_WCRTOMB@
 HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
 HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
@@ -441,16 +550,14 @@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
 INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
 INTLLIBS = @INTLLIBS@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
-INTTYPES_H = @INTTYPES_H@
 LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
-LIBTAR_LIBDEPS = @LIBTAR_LIBDEPS@
-LIBTAR_LTLIBDEPS = @LIBTAR_LTLIBDEPS@
 LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
-LIB_CLOSE = @LIB_CLOSE@
 LIB_SETSOCKOPT = @LIB_SETSOCKOPT@
 LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
 LOCALE_FR = @LOCALE_FR@
@@ -465,12 +572,36 @@ MKDIR_P = @MKDIR_P@
 MSGFMT = @MSGFMT@
 MSGFMT_015 = @MSGFMT_015@
 MSGMERGE = @MSGMERGE@
+NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
 NEXT_DIRENT_H = @NEXT_DIRENT_H@
 NEXT_ERRNO_H = @NEXT_ERRNO_H@
 NEXT_FCNTL_H = @NEXT_FCNTL_H@
 NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
 NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
 NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
 NEXT_STDINT_H = @NEXT_STDINT_H@
 NEXT_STDIO_H = @NEXT_STDIO_H@
 NEXT_STDLIB_H = @NEXT_STDLIB_H@
@@ -499,25 +630,40 @@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
 PU_RMT_PROG = @PU_RMT_PROG@
 RANLIB = @RANLIB@
 REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
 REPLACE_CHOWN = @REPLACE_CHOWN@
 REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@
 REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
 REPLACE_FCHDIR = @REPLACE_FCHDIR@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
 REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@
 REPLACE_FFLUSH = @REPLACE_FFLUSH@
 REPLACE_FOPEN = @REPLACE_FOPEN@
 REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
 REPLACE_FREOPEN = @REPLACE_FREOPEN@
 REPLACE_FSEEK = @REPLACE_FSEEK@
 REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
 REPLACE_FTELL = @REPLACE_FTELL@
 REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
 REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
 REPLACE_GETLINE = @REPLACE_GETLINE@
 REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
 REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
 REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
 REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
 REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
 REPLACE_LSEEK = @REPLACE_LSEEK@
 REPLACE_LSTAT = @REPLACE_LSTAT@
@@ -527,26 +673,53 @@ REPLACE_MBSINIT = @REPLACE_MBSINIT@
 REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
 REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
 REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
 REPLACE_MEMMEM = @REPLACE_MEMMEM@
 REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKNOD = @REPLACE_MKNOD@
 REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
 REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
 REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
 REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_OPENDIR = @REPLACE_OPENDIR@
 REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_PREAD = @REPLACE_PREAD@
 REPLACE_PRINTF = @REPLACE_PRINTF@
 REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SLEEP = @REPLACE_SLEEP@
 REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
 REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
 REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
 REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
 REPLACE_STRDUP = @REPLACE_STRDUP@
 REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
 REPLACE_STRPTIME = @REPLACE_STRPTIME@
 REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
 REPLACE_STRSTR = @REPLACE_STRSTR@
 REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
 REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
 REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
 REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
 REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
@@ -554,6 +727,7 @@ REPLACE_VPRINTF = @REPLACE_VPRINTF@
 REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
 REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
 REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
 REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
 REPLACE_WCTOB = @REPLACE_WCTOB@
 REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
@@ -564,22 +738,20 @@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
 SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
 STDARG_H = @STDARG_H@
 STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
 STDINT_H = @STDINT_H@
 STRIP = @STRIP@
 SYSEXITS_H = @SYSEXITS_H@
-SYS_STAT_H = @SYS_STAT_H@
-SYS_TIME_H = @SYS_TIME_H@
 SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
 TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
 UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
 UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
 UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
 USE_NLS = @USE_NLS@
 VERSION = @VERSION@
-VOID_UNSETENV = @VOID_UNSETENV@
-WCHAR_H = @WCHAR_H@
 WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
-WCTYPE_H = @WCTYPE_H@
 WINT_T_SUFFIX = @WINT_T_SUFFIX@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
@@ -637,13 +809,14 @@ sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 rmtdir = $(DEFAULT_RMT_DIR)
 rmt_PROGRAMS = @PU_RMT_PROG@
 rmt_SOURCES = rmt.c
-INCLUDES = -I$(top_srcdir)/lib -I../ -I../lib
-LDADD = ../lib/lib$(PACKAGE).a $(LIBINTL)
+INCLUDES = -I$(top_srcdir)/gnu -I../ -I../gnu -I$(top_srcdir)/lib
+LDADD = ../gnu/libgnu.a $(LIBINTL)
 rmt_LDADD = $(LDADD) $(LIB_SETSOCKOPT)
 all: all-am
 
@@ -653,14 +826,14 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
-             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-               && exit 0; \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  rmt/Makefile'; \
-       cd $(top_srcdir) && \
-         $(AUTOMAKE) --gnits  rmt/Makefile
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits rmt/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnits rmt/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
@@ -678,26 +851,41 @@ $(top_srcdir)/configure:  $(am__configure_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
 install-rmtPROGRAMS: $(rmt_PROGRAMS)
        @$(NORMAL_INSTALL)
        test -z "$(rmtdir)" || $(MKDIR_P) "$(DESTDIR)$(rmtdir)"
-       @list='$(rmt_PROGRAMS)'; for p in $$list; do \
-         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-         if test -f $$p \
-         ; then \
-           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-          echo " $(INSTALL_PROGRAM_ENV) $(rmtPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(rmtdir)/$$f'"; \
-          $(INSTALL_PROGRAM_ENV) $(rmtPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(rmtdir)/$$f" || exit 1; \
-         else :; fi; \
-       done
+       @list='$(rmt_PROGRAMS)'; test -n "$(rmtdir)" || list=; \
+       for p in $$list; do echo "$$p $$p"; done | \
+       sed 's/$(EXEEXT)$$//' | \
+       while read p p1; do if test -f $$p; \
+         then echo "$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+           -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+       sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) files[d] = files[d] " " $$1; \
+           else { print "f", $$3 "/" $$4, $$1; } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+           if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+           test -z "$$files" || { \
+             echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(rmtdir)$$dir'"; \
+             $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(rmtdir)$$dir" || exit $$?; \
+           } \
+       ; done
 
 uninstall-rmtPROGRAMS:
        @$(NORMAL_UNINSTALL)
-       @list='$(rmt_PROGRAMS)'; for p in $$list; do \
-         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-         echo " rm -f '$(DESTDIR)$(rmtdir)/$$f'"; \
-         rm -f "$(DESTDIR)$(rmtdir)/$$f"; \
-       done
+       @list='$(rmt_PROGRAMS)'; test -n "$(rmtdir)" || list=; \
+       files=`for p in $$list; do echo "$$p"; done | \
+         sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+             -e 's/$$/$(EXEEXT)/' `; \
+       test -n "$$list" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(rmtdir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(rmtdir)" && rm -f $$files
 
 clean-rmtPROGRAMS:
        -test -z "$(rmt_PROGRAMS)" || rm -f $(rmt_PROGRAMS)
@@ -719,7 +907,7 @@ installcheck-rmtPROGRAMS: $(rmt_PROGRAMS)
        done; rm -f c$${pid}_.???; exit $$bad
 rmt$(EXEEXT): $(rmt_OBJECTS) $(rmt_DEPENDENCIES) 
        @rm -f rmt$(EXEEXT)
-       $(LINK) $(rmt_OBJECTS) $(rmt_LDADD) $(LIBS)
+       $(AM_V_CCLD)$(LINK) $(rmt_OBJECTS) $(rmt_LDADD) $(LIBS)
 
 mostlyclean-compile:
        -rm -f *.$(OBJEXT)
@@ -730,15 +918,17 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rmt.Po@am__quote@
 
 .c.o:
-@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(COMPILE) -c $<
 
 .c.obj:
-@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
@@ -748,14 +938,14 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
        unique=`for i in $$list; do \
            if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
          done | \
-         $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
              END { if (nonempty) { for (i in files) print i; }; }'`; \
        mkid -fID $$unique
 tags: TAGS
 
 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
                $(TAGS_FILES) $(LISP)
-       tags=; \
+       set x; \
        here=`pwd`; \
        list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
        unique=`for i in $$list; do \
@@ -763,29 +953,34 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
          done | \
          $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
              END { if (nonempty) { for (i in files) print i; }; }'`; \
-       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
-         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-           $$tags $$unique; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
        fi
 ctags: CTAGS
 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
                $(TAGS_FILES) $(LISP)
-       tags=; \
        list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
        unique=`for i in $$list; do \
            if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
          done | \
          $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
              END { if (nonempty) { for (i in files) print i; }; }'`; \
-       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+       test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-            $$tags $$unique
+            $$unique
 
 GTAGS:
        here=`$(am__cd) $(top_builddir) && pwd` \
-         && cd $(top_srcdir) \
-         && gtags -i $(GTAGS_ARGS) $$here
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -806,13 +1001,17 @@ distdir: $(DISTFILES)
          if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
          if test -d $$d/$$file; then \
            dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
            if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
            fi; \
-           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
          else \
-           test -f $(distdir)/$$file \
-           || cp -p $$d/$$file $(distdir)/$$file \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
            || exit 1; \
          fi; \
        done
@@ -843,6 +1042,7 @@ clean-generic:
 
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
@@ -863,6 +1063,8 @@ dvi-am:
 
 html: html-am
 
+html-am:
+
 info: info-am
 
 info-am:
@@ -871,18 +1073,28 @@ install-data-am: install-rmtPROGRAMS
 
 install-dvi: install-dvi-am
 
+install-dvi-am:
+
 install-exec-am:
 
 install-html: install-html-am
 
+install-html-am:
+
 install-info: install-info-am
 
+install-info-am:
+
 install-man:
 
 install-pdf: install-pdf-am
 
+install-pdf-am:
+
 install-ps: install-ps-am
 
+install-ps-am:
+
 installcheck-am: installcheck-rmtPROGRAMS
 
 maintainer-clean: maintainer-clean-am
@@ -920,7 +1132,8 @@ uninstall-am: uninstall-rmtPROGRAMS
        ps ps-am tags uninstall uninstall-am uninstall-rmtPROGRAMS
 
 
-rmt.o: ../lib/configmake.h
+rmt.o: ../gnu/configmake.h
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
index a043dd0c89510b1304c5bde32e32bf7b96bc650c..a3897eb56f0fc06d91417d8d92ff373d4c44a60f 100644 (file)
--- a/rmt/rmt.c
+++ b/rmt/rmt.c
@@ -1,48 +1,32 @@
-/* Remote connection server.
-
-   Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2003, 2004,
-   2005, 2006, 2007 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, write to the Free Software Foundation, Inc.,
-   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
-
-/* Copyright (C) 1983 Regents of the University of California.
-   All rights reserved.
-
-   Redistribution and use in source and binary forms are permitted provided
-   that the above copyright notice and this paragraph are duplicated in all
-   such forms and that any documentation, advertising materials, and other
-   materials related to such distribution and use acknowledge that the
-   software was developed by the University of California, Berkeley.  The
-   name of the University may not be used to endorse or promote products
-   derived from this software without specific prior written permission.
-   THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
-   WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
-   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  */
+/* This file is part of GNU Paxutils.
+   Copyright (C) 2009 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 "system.h"
 #include "system-ioctl.h"
-#include <closeout.h>
 #include <configmake.h>
-#include <safe-read.h>
-#include <full-write.h>
-#include <version-etc.h>
-#define obstack_chunk_alloc malloc
-#define obstack_chunk_free free
-#include <obstack.h>
+#include <argp.h>
+#include <argp-version-etc.h>
 #include <getopt.h>
-#include <sys/socket.h>
+#include <full-write.h>
+#include <configmake.h>
+#include <inttostr.h>
+#include <error.h>
+#include <progname.h>
+#include <c-ctype.h>
+#include <safe-read.h>
 
 #ifndef EXIT_FAILURE
 # define EXIT_FAILURE 1
 # define EXIT_SUCCESS 0
 #endif
 
-/* Maximum size of a string from the requesting program.
-   It must hold enough for any integer, possibly with a sign.  */
-#define        STRING_SIZE (UINTMAX_STRSIZE_BOUND + 1)
-
-const char *program_name;
-
-/* File descriptor of the tape device, or negative if none open.  */
-static int tape = -1;
-
-/* Buffer containing transferred data, and its allocated size.  */
-static char *record_buffer;
-static size_t allocated_size;
-
-/* Buffer for constructing the reply.  */
-static char reply_buffer[BUFSIZ];
-
-/* Obstack for arbitrary-sized strings */
-struct obstack string_stk;
-
-/* Debugging tools.  */
-
-static FILE *debug_file;
-
-#define        DEBUG(File) \
-  if (debug_file) fprintf(debug_file, File)
-
-#define        DEBUG1(File, Arg) \
-  if (debug_file) fprintf(debug_file, File, Arg)
-
-#define        DEBUG2(File, Arg1, Arg2) \
-  if (debug_file) fprintf(debug_file, File, Arg1, Arg2)
+\f
+int dbglev;
+FILE *dbgout;
+
+#define DEBUG(lev,msg)                                         \
+  do { if (dbgout && (lev) <= dbglev) fprintf (dbgout, "%s", msg); } while (0)
+#define DEBUG1(lev, fmt, x)                                            \
+  do { if (dbgout && (lev) <= dbglev) fprintf (dbgout, fmt, x); } while (0)
+#define DEBUG2(lev, fmt, x1, x2)                                       \
+  do                                                                   \
+    {                                                                  \
+      if (dbgout && (lev) <= dbglev)                                   \
+       fprintf (dbgout, fmt, x1, x2);                                  \
+    }                                                                  \
+  while (0)
+
+#define VDEBUG(lev, pfx, fmt, ap)              \
+  do                                           \
+    {                                          \
+      if (dbgout && (lev) <= dbglev)           \
+       {                                       \
+         fprintf (dbgout, "%s", pfx);          \
+         vfprintf (dbgout, fmt, ap);           \
+       }                                       \
+    }                                          \
+  while (0)
+      
 
+\f
 static void
-report_error_message (const char *string)
+trimnl (char *str)
 {
-  DEBUG1 ("rmtd: E 0 (%s)\n", string);
-
-  sprintf (reply_buffer, "E0\n%s\n", string);
-  full_write (STDOUT_FILENO, reply_buffer, strlen (reply_buffer));
+  if (str)
+    {
+      size_t len = strlen (str);
+      if (len > 1 && str[len-1] == '\n')
+       str[len-1] = 0;
+    }
 }
+  
 
-static void
-report_numbered_error (int num)
-{
-  DEBUG2 ("rmtd: E %d (%s)\n", num, strerror (num));
-
-  sprintf (reply_buffer, "E%d\n%s\n", num, strerror (num));
-  full_write (STDOUT_FILENO, reply_buffer, strlen (reply_buffer));
-}
+\f
+char *input_buf_ptr = NULL;
+size_t input_buf_size = 0;
 
-static char *
-get_string (void)
+char *
+rmt_read (void)
 {
-  for (;;)
+  ssize_t rc = getline (&input_buf_ptr, &input_buf_size, stdin);
+  if (rc > 0)
     {
-      char c;
-      if (safe_read (STDIN_FILENO, &c, 1) != 1)
-       exit (EXIT_SUCCESS);
-
-      if (c == '\n')
-       break;
-
-      obstack_1grow (&string_stk, c);
+      DEBUG1 (10, "C: %s", input_buf_ptr);
+      trimnl (input_buf_ptr);
+      return input_buf_ptr;
     }
-  obstack_1grow (&string_stk, 0);
-  return obstack_finish (&string_stk);
+  DEBUG (10, "reached EOF");
+  return NULL;
 }
 
-static void
-free_string (char *string)
+void
+rmt_write (const char *fmt, ...)
 {
-  obstack_free (&string_stk, string);
+  va_list ap;
+  va_start (ap, fmt);
+  vfprintf (stdout, fmt, ap);
+  VDEBUG (10, "S: ", fmt, ap);
 }
 
-static void
-get_string_n (char *string)
+void
+rmt_reply (uintmax_t code)
 {
-  size_t counter;
-
-  for (counter = 0; ; counter++)
-    {
-      if (safe_read (STDIN_FILENO, string + counter, 1) != 1)
-       exit (EXIT_SUCCESS);
+  char buf[UINTMAX_STRSIZE_BOUND];
+  rmt_write ("A%s\n", umaxtostr (code, buf));
+}
 
-      if (string[counter] == '\n')
-       break;
+void
+rmt_error_message (int code, const char *msg)
+{
+  DEBUG1 (10, "S: E%d\n", code);
+  DEBUG1 (10, "S: %s\n", msg);
+  DEBUG1 (1, "error: %s\n", msg);
+  fprintf (stdout, "E%d\n%s\n", code, msg);
+}
 
-      if (counter == STRING_SIZE - 1)
-       report_error_message (N_("Input string too long"));
-    }
-  string[counter] = '\0';
+void
+rmt_error (int code)
+{
+  rmt_error_message (code, strerror (code));
 }
 
-static long int
-get_long (char const *string)
+\f
+char *record_buffer_ptr;
+size_t record_buffer_size;
+
+static void
+prepare_record_buffer (size_t size)
 {
-  char *p;
-  long int n;
-  errno = 0;
-  n = strtol (string, &p, 10);
-  if (errno == ERANGE)
-    {
-      report_numbered_error (errno);
-      exit (EXIT_FAILURE);
-    }
-  if (!*string || *p)
+  if (size > record_buffer_size)
     {
-      report_error_message (N_("Number syntax error"));
-      exit (EXIT_FAILURE);
+      record_buffer_ptr = xrealloc (record_buffer_ptr, size);
+      record_buffer_size = size;
     }
-  return n;
 }
 
-static void
-prepare_input_buffer (int fd, size_t size)
+
+\f
+int device_fd = -1;
+
+struct rmt_kw
 {
-  if (size <= allocated_size)
-    return;
+  char const *name;
+  size_t len;
+  int value;
+};
 
-  if (record_buffer)
-    free (record_buffer);
+#define RMT_KW(s,v) { #s, sizeof (#s) - 1, v }
 
-  record_buffer = malloc (size);
+int
+xlat_kw (const char *s, const char *pfx,
+        struct rmt_kw const *kw, int *valp, const char **endp)
+{
+  size_t slen = strlen (s);
 
-  if (! record_buffer)
+  if (pfx)
     {
-      DEBUG (_("rmtd: Cannot allocate buffer space\n"));
-
-      report_error_message (N_("Cannot allocate buffer space"));
-      exit (EXIT_FAILURE);      /* exit status used to be 4 */
+      size_t pfxlen = strlen (pfx);
+      if (slen > pfxlen && memcmp (s, pfx, pfxlen) == 0)
+       {
+         s += pfxlen;
+         slen -= pfxlen;
+       }
     }
-
-  allocated_size = size;
-
-#ifdef SO_RCVBUF
-  if (0 <= fd)
+  
+  for (; kw->name; kw++)
     {
-      int isize = size < INT_MAX ? size : INT_MAX;
-      while (setsockopt (fd, SOL_SOCKET, SO_RCVBUF,
-                        (char *) &isize, sizeof isize)
-            && 1024 < isize)
-       isize >>= 1;
+      if (slen >= kw->len
+         && memcmp (kw->name, s, kw->len) == 0
+         && !(s[kw->len] && c_isalnum (s[kw->len])))
+       {
+         *valp = kw->value;
+         *endp = s + kw->len;
+         return 0;
+       }
     }
-#endif
+  return 1;
 }
 
-/* Decode OFLAG_STRING, which represents the 2nd argument to `open'.
-   OFLAG_STRING should contain an optional integer, followed by an optional
-   symbolic representation of an open flag using only '|' to separate its
-   components (e.g. "O_WRONLY|O_CREAT|O_TRUNC").  Prefer the symbolic
-   representation if available, falling back on the numeric
-   representation, or to zero if both formats are absent.
-
-   This function should be the inverse of encode_oflag.  The numeric
-   representation is not portable from one host to another, but it is
-   for backward compatibility with old-fashioned clients that do not
-   emit symbolic open flags.  */
-
-static int
-decode_oflag (char const *oflag_string)
+const char *
+skip_ws (const char *s)
 {
-  char *oflag_num_end;
-  int numeric_oflag = strtol (oflag_string, &oflag_num_end, 10);
-  int symbolic_oflag = 0;
-
-  oflag_string = oflag_num_end;
-  while (ISSPACE ((unsigned char) *oflag_string))
-    oflag_string++;
+  while (*s && c_isblank (*s))
+    s++;
+  return s;
+}
 
-  do
-    {
-      struct name_value_pair { char const *name; int value; };
-      static struct name_value_pair const table[] =
-      {
+static struct rmt_kw const open_flag_kw[] =
+  {
 #ifdef O_APPEND
-       {"APPEND", O_APPEND},
+    RMT_KW(APPEND, O_APPEND),
 #endif
-       {"CREAT", O_CREAT},
+    RMT_KW(CREAT, O_CREAT),
 #ifdef O_DSYNC
-       {"DSYNC", O_DSYNC},
+    RMT_KW(DSYNC, O_DSYNC),
 #endif
-       {"EXCL", O_EXCL},
+    RMT_KW(EXCL, O_EXCL),
 #ifdef O_LARGEFILE
-       {"LARGEFILE", O_LARGEFILE}, /* LFS extension for opening large files */
+    RMT_KW(LARGEFILE, O_LARGEFILE),
 #endif
 #ifdef O_NOCTTY
-       {"NOCTTY", O_NOCTTY},
+    RMT_KW(NOCTTY, O_NOCTTY),
 #endif
 #if O_NONBLOCK
-       {"NONBLOCK", O_NONBLOCK},
+    RMT_KW(NONBLOCK, O_NONBLOCK),
 #endif
-       {"RDONLY", O_RDONLY},
-       {"RDWR", O_RDWR},
+    RMT_KW(RDONLY, O_RDONLY),
+    RMT_KW(RDWR, O_RDWR),
 #ifdef O_RSYNC
-       {"RSYNC", O_RSYNC},
+    RMT_KW(RSYNC, O_RSYNC),
 #endif
 #ifdef O_SYNC
-       {"SYNC", O_SYNC},
+    RMT_KW(SYNC, O_SYNC),
 #endif
-       {"TRUNC", O_TRUNC},
-       {"WRONLY", O_WRONLY}
-      };
-      struct name_value_pair const *t;
-      size_t s;
-
-      if (*oflag_string++ != 'O' || *oflag_string++ != '_')
-       return numeric_oflag;
-
-      for (t = table;
-          (strncmp (oflag_string, t->name, s = strlen (t->name)) != 0
-           || (oflag_string[s]
-               && strchr ("ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789",
-                          oflag_string[s])));
-          t++)
-       if (t == table + sizeof table / sizeof *table - 1)
-         return numeric_oflag;
-
-      symbolic_oflag |= t->value;
-      oflag_string += s;
-    }
-  while (*oflag_string++ == '|');
-
-  return symbolic_oflag;
-}
-
-static struct option const long_opts[] =
-{
-  {"help", no_argument, 0, 'h'},
-  {"version", no_argument, 0, 'v'},
-  {0, 0, 0, 0}
-};
-
-/* In-line localization is used only if --help or --version are
-   locally used.  Otherwise, the localization burden lies with tar. */
-static void
-i18n_setup ()
-{
-  setlocale (LC_ALL, "");
-  bindtextdomain (PACKAGE, LOCALEDIR);
-  textdomain (PACKAGE);
-}
-
-static void usage (int) __attribute__ ((noreturn));
+    RMT_KW(TRUNC, O_TRUNC),
+    RMT_KW(WRONLY, O_WRONLY),
+    { NULL }
+  };
 
-static void
-usage (int status)
+int
+decode_open_flag (const char *mstr, int *pmode)
 {
-  i18n_setup ();
+  int mode = 0;
 
-  if (status != EXIT_SUCCESS)
-    fprintf (stderr, _("Try `%s --help' for more information.\n"),
-            program_name);
-  else
+  while (mstr)
     {
-      printf (_("\
-Usage: %s [OPTION]\n\
-Manipulate a tape drive, accepting commands from a remote process.\n\
-\n\
-  --version  Output version info.\n\
-  --help     Output this help.\n"),
-             program_name);
-      printf (_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
-      close_stdout ();
-    }
-
-  exit (status);
-}
+      int v;
+      const char *p;
 
-static void
-respond (long int status)
-{
-  DEBUG1 ("rmtd: A %ld\n", status);
+      mstr = skip_ws (mstr);
+      if (*mstr == 0)
+       break;
+      else if (c_isdigit (*mstr))
+       v = strtol (mstr, (char**) &p, 10);
+      else if (xlat_kw (mstr, "O_", open_flag_kw, &v, &p))
+       {
+         rmt_error_message (EINVAL, "invalid open mode");
+         return 1;
+       }
 
-  sprintf (reply_buffer, "A%ld\n", status);
-  full_write (STDOUT_FILENO, reply_buffer, strlen (reply_buffer));
+      mode |= v;
+      
+      if (*p && c_isblank (*p))
+       p = skip_ws (p);
+      if (*p == 0)
+       break;
+      else if (*p == '|')
+       {
+         /* FIXMEL
+            if (p[1] == 0)
+              rmt_error_message (EINVAL, "invalid open mode");
+         */
+         mstr = p + 1;
+       }
+      else
+       {
+         rmt_error_message (EINVAL, "invalid open mode");
+         return 1;
+       }
+    }
+  *pmode = mode;
+  return 0;
 }
 
 \f
-
+/* Syntax
+   ------
+   O<device>\n<flags>\n
+   
+   Function
+   --------
+   Opens the <device> with given <flags>. If a device had already been opened,
+   it is closed before opening the new one.
+   
+   Arguments
+   ---------
+   <device> - name of the device to open.
+   <flags>  - flags for open(2): a decimal number, or any valid O_* constant
+   from fcntl.h (the initial O_ may be omitted), or a bitwise or (using '|')
+   of any number of these, e.g.:
+
+      576
+      64|512
+      CREAT|TRUNC
+
+   Reply
+   -----
+   A0\n on success, E<errno>\n<msg>\n on error.
+      
+   Extensions
+   ----------
+   The BSD version allows only decimal number as <flags>.
+*/
+   
 static void
-open_device (void)
+open_device (char *str)
 {
-  char *device_string = get_string ();
-  char *oflag_string = get_string ();
-
-  DEBUG2 ("rmtd: O %s %s\n", device_string, oflag_string);
-
-  if (tape >= 0)
-    close (tape);
+  char *device = xstrdup (str);
+  char *flag_str;
+  int flag;
+  
+  flag_str = rmt_read ();
+  if (!flag_str)
+    {
+      DEBUG (1, "unexpected EOF");
+      exit (EXIT_FAILURE);
+    }
+  if (decode_open_flag (flag_str, &flag) == 0)
+    {
+      if (device_fd >= 0)
+       close (device_fd);
 
-  tape = open (device_string, decode_oflag (oflag_string), MODE_RW);
-  if (tape < 0)
-    report_numbered_error (errno);
-  else
-    respond (0);
-  free_string (device_string);
-  free_string (oflag_string);
+      device_fd = open (device, flag, MODE_RW);
+      if (device_fd < 0)
+       rmt_error (errno);
+      else
+       rmt_reply (0);
+    }
+  free (device);
 }
-
+\f
+/* Syntax
+   ------
+   C[<device>]\n
+   
+   Function
+   --------
+   Close the currently open device.
+
+   Arguments
+   ---------
+   Any arguments are silently ignored.
+   
+   Reply
+   -----
+   A0\n on success, E<errno>\n<msg>\n on error.
+*/
 static void
-close_device (void)
+close_device ()
 {
-  free_string (get_string ()); /* discard */
-  DEBUG ("rmtd: C\n");
-
-  if (close (tape) < 0)
-    report_numbered_error (errno);
+  if (close (device_fd) < 0)
+    rmt_error (errno);
   else
     {
-      tape = -1;
-      respond (0);
+      device_fd = -1;
+      rmt_reply (0);
     }
 }
-
-static void
-lseek_device (void)
+\f
+/* Syntax
+   ------
+   L<whence>\n<offset>\n
+   
+   Function
+   --------
+   Perform an lseek(2) on the currently open device with the specified
+   parameters.
+   
+   Arguments
+   ---------
+   <whence>  -  Where to measure offset from. Valid values are:
+                0, SET, SEEK_SET to seek from the file beginning,
+               1, CUR, SEEK_CUR to seek from the current location in file,
+               2, END, SEEK_END to seek from the file end.
+   Reply
+   -----
+   A<offset>\n on success. The <offset> is the new offset in file.
+   E<errno>\n<msg>\n on error.   
+
+   Extensions
+   ----------
+   The BSD version allows only 0,1,2 as <whence>.
+*/
+
+static struct rmt_kw const seek_whence_kw[] =
+  {
+    RMT_KW(SET, SEEK_SET),
+    RMT_KW(CUR, SEEK_CUR),
+    RMT_KW(END, SEEK_END),
+    { NULL }
+  };
+  
+void
+lseek_device (const char *str)
 {
-  char count_string[STRING_SIZE];
-  char position_string[STRING_SIZE];
-  off_t count = 0;
-  int negative;
-  int whence;
   char *p;
+  int whence;
+  off_t off;
+  uintmax_t n;
+  
+  if (str[0] && str[1] == 0)
+    {
+      switch (str[0])
+       {
+       case '0':
+         whence = SEEK_SET;
+         break;
 
-  get_string_n (count_string);
-  get_string_n (position_string);
-  DEBUG2 ("rmtd: L %s %s\n", count_string, position_string);
-
-  /* Parse count_string, taking care to check for overflow.
-     We can't use standard functions,
-     since off_t might be longer than long.  */
-
-  for (p = count_string;  *p == ' ' || *p == '\t';  p++)
-    ;
+       case '1':
+         whence = SEEK_CUR;
+         break;
 
-  negative = *p == '-';
-  p += negative || *p == '+';
+       case '2':
+         whence = SEEK_END;
+         break;
 
-  for (; *p; p++)
-    {
-      int digit = *p - '0';
-      if (9 < (unsigned) digit)
-       {
-         report_error_message (N_("Seek offset error"));
-         exit (EXIT_FAILURE);
-       }
-      else
-       {
-         off_t c10 = 10 * count;
-         off_t nc = negative ? c10 - digit : c10 + digit;
-         if (c10 / 10 != count || (negative ? c10 < nc : nc < c10))
-           {
-             report_error_message (N_("Seek offset out of range"));
-             exit (EXIT_FAILURE);
-           }
-         count = nc;
+       default:
+         rmt_error_message (EINVAL, N_("Seek direction out of range"));
+         return;
        }
     }
-
-  switch (get_long (position_string))
+  else if (xlat_kw (str, "SEEK_", seek_whence_kw, &whence, (const char **) &p))
     {
-    case 0:
-      whence = SEEK_SET;
-      break;
-
-    case 1:
-      whence = SEEK_CUR;
-      break;
-
-    case 2:
-      whence = SEEK_END;
-      break;
-
-    default:
-      report_error_message (N_("Seek direction out of range"));
-      exit (EXIT_FAILURE);
+      rmt_error_message (EINVAL, N_("Invalid seek direction"));
+      return;
     }
 
-  count = lseek (tape, count, whence);
-  if (count < 0)
-    report_numbered_error (errno);
-  else
+  str = rmt_read ();
+  n = off = strtoumax (str, &p, 10);
+  if (*p)
     {
-      /* Convert count back to string for reply.
-        We can't use sprintf, since off_t might be longer
-        than long.  */
-      p = count_string + sizeof count_string;
-      *--p = '\0';
-      do
-       *--p = '0' + (int) (count % 10);
-      while ((count /= 10) != 0);
-
-      DEBUG1 ("rmtd: A %s\n", p);
-
-      sprintf (reply_buffer, "A%s\n", p);
-      full_write (STDOUT_FILENO, reply_buffer, strlen (reply_buffer));
+      rmt_error_message (EINVAL, N_("Invalid seek offset"));
+      return;
     }
-}
-
-static void
-write_device (void)
-{
-  char count_string[STRING_SIZE];
-  size_t size;
-  size_t counter;
-  size_t status = 0;
-
-  get_string_n (count_string);
-  size = get_long (count_string);
-  DEBUG1 ("rmtd: W %s\n", count_string);
-
-  prepare_input_buffer (STDIN_FILENO, size);
-  for (counter = 0; counter < size; counter += status)
+    
+  if (n != off || errno == ERANGE)
     {
-      status = safe_read (STDIN_FILENO, &record_buffer[counter],
-                         size - counter);
-      if (status == SAFE_READ_ERROR || status == 0)
-       {
-         DEBUG (_("rmtd: Premature eof\n"));
-
-         report_error_message (N_("Premature end of file"));
-         exit (EXIT_FAILURE); /* exit status used to be 2 */
-       }
+      rmt_error_message (EINVAL, N_("Seek offset out of range"));
+      return;
     }
-  status = full_write (tape, record_buffer, size);
-  if (status != size)
-    report_numbered_error (errno);
+
+  off = lseek (device_fd, off, whence);
+  if (off < 0)
+    rmt_error (errno);
   else
-    respond (status);
+    rmt_reply (off);
 }
-
-static void
-read_device (void)
+\f
+/* Syntax
+   ------
+   R<count>\n
+   
+   Function
+   --------
+   Read <count> bytes of data from the current device.
+   
+   Arguments
+   ---------
+   <count>  -  number of bytes to read.
+   
+   Reply
+   -----
+   On success: A<rdcount>\n, followed by <rdcount> bytes of data read from
+   the device.
+   On error: E<errno>\n<msg>\n
+*/
+
+void
+read_device (const char *str)
 {
-  char count_string[STRING_SIZE];
+  char *p;
   size_t size;
+  uintmax_t n;
   size_t status;
+  
+  n = size = strtoumax (str, &p, 10);
+  if (*p)
+    {
+      rmt_error_message (EINVAL, N_("Invalid byte count"));
+      return;
+    }
+  
+  if (n != size || errno == ERANGE)
+    {
+      rmt_error_message (EINVAL, N_("Byte count out of range"));
+      return;
+    }
 
-  get_string_n (count_string);
-  DEBUG1 ("rmtd: R %s\n", count_string);
-
-  size = get_long (count_string);
-  prepare_input_buffer (-1, size);
-  status = safe_read (tape, record_buffer, size);
+  prepare_record_buffer (size);
+  status = safe_read (device_fd, record_buffer_ptr, size);
   if (status == SAFE_READ_ERROR)
-    report_numbered_error (errno);
+    rmt_error (errno);
   else
     {
-      sprintf (reply_buffer, "A%lu\n", (unsigned long int) status);
-      full_write (STDOUT_FILENO, reply_buffer, strlen (reply_buffer));
-      full_write (STDOUT_FILENO, record_buffer, status);
+      rmt_reply (status);
+      full_write (STDOUT_FILENO, record_buffer_ptr, status);
     }
 }
-
-static void
-mtioctop (void)
+\f
+/* Syntax
+   ------
+   W<count>\n followed by <count> bytes of input data.
+   
+   Function
+   --------
+   Write data onto the current device.
+   
+   Arguments
+   ---------
+   <count>  - number of bytes.
+   
+   Reply
+   -----
+   On success: A<wrcount>\n, where <wrcount> is number of bytes actually
+   written.
+   On error: E<errno>\n<msg>\n
+*/
+
+void
+write_device (const char *str)
 {
-  char operation_string[STRING_SIZE];
-  char count_string[STRING_SIZE];
+  char *p;
+  size_t size;
+  uintmax_t n;
+  size_t status;
+  
+  n = size = strtoumax (str, &p, 10);
+  if (*p)
+    {
+      rmt_error_message (EINVAL, N_("Invalid byte count"));
+      return;
+    }
+  
+  if (n != size || errno == ERANGE)
+    {
+      rmt_error_message (EINVAL, N_("Byte count out of range"));
+      return;
+    }
 
-  get_string_n (operation_string);
-  get_string_n (count_string);
-  DEBUG2 ("rmtd: I %s %s\n", operation_string, count_string);
+  prepare_record_buffer (size);
+  if (fread (record_buffer_ptr, size, 1, stdin) != 1)
+    {
+      if (feof (stdin))
+       rmt_error_message (EIO, N_("Premature eof"));
+      else
+       rmt_error (errno);
+      return;
+    }
 
+  status = full_write (device_fd, record_buffer_ptr, size);
+  if (status != size)
+    rmt_error (errno);
+  else
+    rmt_reply (status);
+}
+\f
+/* Syntax
+   ------
+   I<opcode>\n<count>\n
+   
+   Function
+   --------
+   Perform a MTIOCOP ioctl(2) command using the specified paramedters.
+   
+   Arguments
+   ---------
+   <opcode>   -  MTIOCOP operation code.
+   <count>    -  mt_count.
+   
+   Reply
+   -----
+   On success: A0\n
+   On error: E<errno>\n<msg>\n
+*/
+
+void
+iocop_device (const char *str)
+{
+  char *p;
+  long opcode;
+  off_t count;
+  uintmax_t n;
+  
+  opcode = strtol (str, &p, 10);
+  if (*p)
+    {
+      rmt_error_message (EINVAL, N_("Invalid operation code"));
+      return;
+    }
+  str = rmt_read ();
+  n = count = strtoumax (str, &p, 10);
+  if (*p)
+    {
+      rmt_error_message (EINVAL, N_("Invalid byte count"));
+      return;
+    }
+    
+  if (n != count || errno == ERANGE)
+    {
+      rmt_error_message (EINVAL, N_("Byte count out of range"));
+      return;
+    }
+  
 #ifdef MTIOCTOP
   {
     struct mtop mtop;
-    const char *p;
-    off_t count = 0;
-    int negative;
-
-    /* Parse count_string, taking care to check for overflow.
-       We can't use standard functions,
-       since off_t might be longer than long.  */
-
-    for (p = count_string;  *p == ' ' || *p == '\t';  p++)
-      ;
-
-    negative = *p == '-';
-    p += negative || *p == '+';
-
-    for (;;)
-      {
-       int digit = *p++ - '0';
-       if (9 < (unsigned) digit)
-         break;
-       else
-         {
-           off_t c10 = 10 * count;
-           off_t nc = negative ? c10 - digit : c10 + digit;
-           if (c10 / 10 != count
-               || (negative ? c10 < nc : nc < c10))
-             {
-               report_error_message (N_("Seek offset out of range"));
-               exit (EXIT_FAILURE);
-             }
-           count = nc;
-         }
-      }
 
     mtop.mt_count = count;
     if (mtop.mt_count != count)
       {
-       report_error_message (N_("Seek offset out of range"));
-       exit (EXIT_FAILURE);
-      }
-    mtop.mt_op = get_long (operation_string);
-
-    if (ioctl (tape, MTIOCTOP, (char *) &mtop) < 0)
-      {
-       report_numbered_error (errno);
+       rmt_error_message (EINVAL, N_("Byte count out of range"));
        return;
       }
+
+    mtop.mt_op = opcode;
+    if (ioctl (device_fd, MTIOCTOP, (char *) &mtop) < 0)
+      rmt_error (errno);
+    else
+      rmt_reply (0);
   }
+#else
+  rmt_error_message (ENOSYS, N_("Operation not supported"));
 #endif
-  respond (0);
 }
-
-static void
-status_device (void)
+\f
+/* Syntax
+   ------
+   S\n
+   
+   Function
+   --------
+   Return the status of the open device, as obtained with a MTIOCGET
+   ioctl call.
+   
+   Arguments
+   ---------
+   None
+   
+   Reply
+   -----
+   On success: A<count>\n followed by <count> bytes of data.
+   On error: E<errno>\n<msg>\n
+*/
+
+void
+status_device (const char *str)
 {
-  DEBUG ("rmtd: S\n");
-
+  if (*str)
+    {
+      rmt_error_message (EINVAL, N_("Unexpected arguments"));
+      return;
+    }
 #ifdef MTIOCGET
   {
-    struct mtget operation;
+    struct mtget mtget;
 
-    if (ioctl (tape, MTIOCGET, (char *) &operation) < 0)
-      report_numbered_error (errno);
+    if (ioctl (device_fd, MTIOCGET, (char *) &mtget) < 0)
+      rmt_error (errno);
     else
       {
-       respond (sizeof operation);
-       full_write (STDOUT_FILENO, (char *) &operation, sizeof operation);
+       rmt_reply (sizeof (mtget));
+       full_write (STDOUT_FILENO, (char *) &mtget, sizeof (mtget));
       }
   }
+#else
+  rmt_error_message (ENOSYS, N_("Operation not supported"));
 #endif
 }
+  
 
-int
-main (int argc, char **argv)
-{
-  char command;
+\f
+const char *argp_program_version = "rmt (" PACKAGE_NAME ") " VERSION;
+const char *argp_program_bug_address = "<" PACKAGE_BUGREPORT ">";
 
-  program_name = argv[0];
+static char const doc[] = N_("Manipulate a tape drive, accepting commands from a remote process");
+
+enum {
+  DEBUG_FILE_OPTION = 256
+};
 
-  obstack_init (&string_stk);
+static struct argp_option options[] = {
+  { "debug", 'd', N_("NUMBER"), 0,
+    N_("set debug level"), 0 },
+  { "debug-file", DEBUG_FILE_OPTION, N_("FILE"), 0,
+    N_("set debug output file name"), 0 },
+  { NULL }
+};
 
-  switch (getopt_long (argc, argv, "", long_opts, NULL))
+static error_t
+parse_opt (int key, char *arg, struct argp_state *state)
+{
+  switch (key)
     {
+    case 'd':
+      dbglev = strtol (arg, NULL, 0);
+      break;
+      
+    case DEBUG_FILE_OPTION:
+      dbgout = fopen (arg, "w");
+      if (!dbgout)
+       error (EXIT_FAILURE, errno, _("cannot open %s"), arg);
+      break;
+      
+    case ARGP_KEY_FINI:
+      if (dbglev)
+       {
+         if (!dbgout)
+           dbgout = stderr;
+       }
+      else if (dbgout)
+       dbglev = 1;
+      break;
+      
     default:
-      usage (EXIT_FAILURE);
+      return ARGP_ERR_UNKNOWN;
+    }
+  return 0;
+}
+      
+static struct argp argp = {
+  options,
+  parse_opt,
+  NULL,
+  doc,
+  NULL,
+  NULL,
+  NULL
+};
 
-    case 'h':
-      usage (EXIT_SUCCESS);
+static const char *rmt_authors[] = {
+  "Sergey Poznyakoff",
+  NULL
+};
 
-    case 'v':
-      i18n_setup ();
-      version_etc (stdout, "rmt", PACKAGE_NAME, PACKAGE_VERSION,
-                  "John Gilmore", "Jay Fenlason", (char *) NULL);
-      close_stdout ();
-      return EXIT_SUCCESS;
+\f
+void
+xalloc_die (void)
+{
+  rmt_error (ENOMEM);
+  exit (EXIT_FAILURE);
+}
 
-    case -1:
-      break;
+\f
+int
+main (int argc, char **argv)
+{
+  char *buf;
+  int idx;
+  int stop = 0;
+  
+  set_program_name (argv[0]);
+  argp_version_setup ("rmt", rmt_authors);
+
+  if (isatty (STDOUT_FILENO))
+    {
+      setlocale (LC_ALL, "");
+      bindtextdomain (PACKAGE, LOCALEDIR);
+      textdomain (PACKAGE);
     }
-
-  if (optind < argc)
+  
+  if (argp_parse (&argp, argc, argv, ARGP_IN_ORDER, &idx, NULL))
+    exit (EXIT_FAILURE);
+  if (idx != argc)
     {
-      if (optind != argc - 1)
-       usage (EXIT_FAILURE);
-      debug_file = fopen (argv[optind], "w");
-      if (debug_file == 0)
-       {
-         report_numbered_error (errno);
-         return EXIT_FAILURE;
-       }
-      setbuf (debug_file, 0);
+      if (idx != argc - 1)
+       error (EXIT_FAILURE, 0, _("too many arguments"));
+      dbgout = fopen (argv[idx], "w");
+      if (!dbgout)
+       error (EXIT_FAILURE, errno, _("cannot open %s"), argv[idx]);
+      dbglev = 1;
     }
-
-  while (1)
+  
+  while (!stop && (buf = rmt_read ()) != NULL)
     {
-      errno = 0;
-
-      if (safe_read (STDIN_FILENO, &command, 1) != 1)
-       return EXIT_SUCCESS;
-
-      switch (command)
+      switch (buf[0])
        {
-       case 'O':
-         open_device ();
-         break;
-
        case 'C':
          close_device ();
+         stop = 1;
          break;
-
+         
+       case 'I':
+         iocop_device (buf + 1);
+         break;
+         
        case 'L':
-         lseek_device ();
+         lseek_device (buf + 1);
          break;
-
-       case 'W':
-         write_device ();
+         
+       case 'O':
+         open_device (buf + 1);
          break;
-
+         
        case 'R':
-         read_device ();
+         read_device (buf + 1);
          break;
-
-       case 'I':
-         mtioctop ();
-         break;
-
+         
        case 'S':
-         status_device ();
+         status_device (buf + 1);
          break;
-
+         
+       case 'W':
+         write_device (buf + 1);
+         break;
+         
        default:
-         DEBUG1 ("rmtd: Garbage command %c\n", command);
-         report_error_message (N_("Garbage command"));
+         DEBUG1 (1, "garbage input %s\n", buf);
+         rmt_error_message (EINVAL, N_("Garbage command"));
          return EXIT_FAILURE;  /* exit status used to be 3 */
-       }
+       }         
     }
+  if (device_fd >= 0)
+    close_device ();
+  free (input_buf_ptr);
+  free (record_buffer_ptr);
+  return EXIT_SUCCESS;
 }
index 3d88476ca46b2c89390b09dafcbf8a786fb6b4b8..5da72c537ead9204d57557a88538a6648259480e 100644 (file)
@@ -1,8 +1,9 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -18,8 +19,9 @@
 
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
@@ -41,63 +43,71 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
        $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argmatch.m4 \
        $(top_srcdir)/m4/argp.m4 $(top_srcdir)/m4/backupfile.m4 \
        $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \
-       $(top_srcdir)/m4/canonicalize-lgpl.m4 \
+       $(top_srcdir)/m4/canonicalize.m4 \
        $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/chown.m4 \
        $(top_srcdir)/m4/clock_time.m4 \
        $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \
        $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
-       $(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/dirent_h.m4 \
-       $(top_srcdir)/m4/dirfd.m4 $(top_srcdir)/m4/dirname.m4 \
-       $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \
-       $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eealloc.m4 \
-       $(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
-       $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exclude.m4 \
-       $(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
+       $(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/dirent-safer.m4 \
+       $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \
+       $(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dos.m4 \
+       $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+       $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+       $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+       $(top_srcdir)/m4/exclude.m4 $(top_srcdir)/m4/extensions.m4 \
        $(top_srcdir)/m4/fchdir.m4 $(top_srcdir)/m4/fclose.m4 \
-       $(top_srcdir)/m4/fcntl-safer.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+       $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \
+       $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \
        $(top_srcdir)/m4/fileblocks.m4 $(top_srcdir)/m4/float_h.m4 \
        $(top_srcdir)/m4/fnmatch.m4 $(top_srcdir)/m4/fpending.m4 \
        $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftruncate.m4 \
        $(top_srcdir)/m4/getcwd-abort-bug.m4 \
        $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \
        $(top_srcdir)/m4/getdate.m4 $(top_srcdir)/m4/getdelim.m4 \
-       $(top_srcdir)/m4/getline.m4 $(top_srcdir)/m4/getopt.m4 \
-       $(top_srcdir)/m4/getpagesize.m4 $(top_srcdir)/m4/gettext.m4 \
-       $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \
-       $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \
+       $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getline.m4 \
+       $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \
+       $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettime.m4 \
+       $(top_srcdir)/m4/gettimeofday.m4 $(top_srcdir)/m4/glibc21.m4 \
+       $(top_srcdir)/m4/gnulib-common.m4 \
        $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/hash.m4 \
        $(top_srcdir)/m4/human.m4 $(top_srcdir)/m4/iconv.m4 \
        $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \
        $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
        $(top_srcdir)/m4/inttostr.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
        $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
-       $(top_srcdir)/m4/lchown.m4 $(top_srcdir)/m4/lib-ld.m4 \
-       $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+       $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/lchown.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 \
        $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
        $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \
        $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \
        $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/malloc.m4 \
        $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/mbchar.m4 \
        $(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrtowc.m4 \
-       $(top_srcdir)/m4/mbscasecmp.m4 $(top_srcdir)/m4/mbsinit.m4 \
-       $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mempcpy.m4 \
-       $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/mkdtemp.m4 \
-       $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/modechange.m4 \
-       $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nls.m4 \
-       $(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/openat.m4 \
-       $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/paxutils.m4 \
-       $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf.m4 \
+       $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbsrtowcs.m4 \
+       $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/memchr.m4 \
+       $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/memrchr.m4 \
+       $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkdtemp.m4 \
+       $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \
+       $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/modechange.m4 \
+       $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nl_langinfo.m4 \
+       $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/open.m4 \
+       $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/pathmax.m4 \
+       $(top_srcdir)/m4/paxutils.m4 $(top_srcdir)/m4/po.m4 \
+       $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/priv-set.m4 \
        $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/quote.m4 \
        $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \
        $(top_srcdir)/m4/readlink.m4 $(top_srcdir)/m4/realloc.m4 \
-       $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rmt.m4 \
-       $(top_srcdir)/m4/rpmatch.m4 $(top_srcdir)/m4/rtapelib.m4 \
-       $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/safe-write.m4 \
+       $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rmdir.m4 \
+       $(top_srcdir)/m4/rmt.m4 $(top_srcdir)/m4/rpmatch.m4 \
+       $(top_srcdir)/m4/rtapelib.m4 $(top_srcdir)/m4/safe-read.m4 \
+       $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/same.m4 \
        $(top_srcdir)/m4/save-cwd.m4 $(top_srcdir)/m4/savedir.m4 \
        $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/size_max.m4 \
        $(top_srcdir)/m4/sleep.m4 $(top_srcdir)/m4/snprintf.m4 \
        $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
-       $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \
+       $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \
+       $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
        $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
        $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
        $(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strcase.m4 \
@@ -113,26 +123,54 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
        $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \
        $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \
        $(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-       $(top_srcdir)/m4/unlinkdir.m4 $(top_srcdir)/m4/unlocked-io.m4 \
-       $(top_srcdir)/m4/utimbuf.m4 $(top_srcdir)/m4/utime.m4 \
-       $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
-       $(top_srcdir)/m4/utimes.m4 $(top_srcdir)/m4/vasnprintf.m4 \
-       $(top_srcdir)/m4/vsnprintf.m4 $(top_srcdir)/m4/wchar.m4 \
+       $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+       $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utimbuf.m4 \
+       $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes.m4 \
+       $(top_srcdir)/m4/vasnprintf.m4 $(top_srcdir)/m4/vasprintf.m4 \
+       $(top_srcdir)/m4/version-etc.m4 $(top_srcdir)/m4/vsnprintf.m4 \
+       $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \
        $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
-       $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wcwidth.m4 \
+       $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
        $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/write.m4 \
        $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xgetcwd.m4 \
        $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrndup.m4 \
-       $(top_srcdir)/m4/xstrtol.m4 $(top_srcdir)/configure.ac
+       $(top_srcdir)/m4/xstrtol.m4 $(top_srcdir)/m4/xvasprintf.m4 \
+       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
 am__installdirs = "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(sbindir)"
-libexecSCRIPT_INSTALL = $(INSTALL_SCRIPT)
-sbinSCRIPT_INSTALL = $(INSTALL_SCRIPT)
 SCRIPTS = $(libexec_SCRIPTS) $(sbin_SCRIPTS)
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
 SOURCES =
 DIST_SOURCES =
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -140,6 +178,7 @@ ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
 ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -168,7 +207,6 @@ DEFAULT_RMT_COMMAND = @DEFAULT_RMT_COMMAND@
 DEFAULT_RMT_DIR = @DEFAULT_RMT_DIR@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
-DIRENT_H = @DIRENT_H@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
@@ -181,7 +219,6 @@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
 EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
 ERRNO_H = @ERRNO_H@
 EXEEXT = @EXEEXT@
-FCNTL_H = @FCNTL_H@
 FLOAT_H = @FLOAT_H@
 FNMATCH_H = @FNMATCH_H@
 GETOPT_H = @GETOPT_H@
@@ -193,45 +230,59 @@ GNULIB_ALPHASORT = @GNULIB_ALPHASORT@
 GNULIB_ATOLL = @GNULIB_ATOLL@
 GNULIB_BTOWC = @GNULIB_BTOWC@
 GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
 GNULIB_CHOWN = @GNULIB_CHOWN@
 GNULIB_CLOSE = @GNULIB_CLOSE@
 GNULIB_DIRFD = @GNULIB_DIRFD@
 GNULIB_DPRINTF = @GNULIB_DPRINTF@
 GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_DUP3 = @GNULIB_DUP3@
 GNULIB_ENVIRON = @GNULIB_ENVIRON@
 GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
+GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
 GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
+GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
 GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FCNTL = @GNULIB_FCNTL@
+GNULIB_FDOPENDIR = @GNULIB_FDOPENDIR@
 GNULIB_FFLUSH = @GNULIB_FFLUSH@
 GNULIB_FOPEN = @GNULIB_FOPEN@
 GNULIB_FPRINTF = @GNULIB_FPRINTF@
 GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
 GNULIB_FPUTC = @GNULIB_FPUTC@
 GNULIB_FPUTS = @GNULIB_FPUTS@
 GNULIB_FREOPEN = @GNULIB_FREOPEN@
 GNULIB_FSEEK = @GNULIB_FSEEK@
 GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FSTATAT = @GNULIB_FSTATAT@
 GNULIB_FSYNC = @GNULIB_FSYNC@
 GNULIB_FTELL = @GNULIB_FTELL@
 GNULIB_FTELLO = @GNULIB_FTELLO@
 GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
 GNULIB_FWRITE = @GNULIB_FWRITE@
 GNULIB_GETCWD = @GNULIB_GETCWD@
 GNULIB_GETDELIM = @GNULIB_GETDELIM@
 GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
 GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
 GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
 GNULIB_GETLINE = @GNULIB_GETLINE@
 GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
 GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
 GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
 GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
 GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
 GNULIB_IMAXABS = @GNULIB_IMAXABS@
 GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
 GNULIB_LCHMOD = @GNULIB_LCHMOD@
 GNULIB_LCHOWN = @GNULIB_LCHOWN@
 GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
 GNULIB_LSEEK = @GNULIB_LSEEK@
 GNULIB_LSTAT = @GNULIB_LSTAT@
 GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
@@ -254,15 +305,31 @@ GNULIB_MBSSEP = @GNULIB_MBSSEP@
 GNULIB_MBSSPN = @GNULIB_MBSSPN@
 GNULIB_MBSSTR = @GNULIB_MBSSTR@
 GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
 GNULIB_MEMMEM = @GNULIB_MEMMEM@
 GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
 GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
 GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKFIFO = @GNULIB_MKFIFO@
+GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
+GNULIB_MKNOD = @GNULIB_MKNOD@
+GNULIB_MKNODAT = @GNULIB_MKNODAT@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
 GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_MKTIME = @GNULIB_MKTIME@
+GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
+GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@
 GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
 GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
 GNULIB_OPEN = @GNULIB_OPEN@
+GNULIB_OPENAT = @GNULIB_OPENAT@
 GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_PREAD = @GNULIB_PREAD@
 GNULIB_PRINTF = @GNULIB_PRINTF@
 GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
 GNULIB_PUTC = @GNULIB_PUTC@
@@ -272,13 +339,20 @@ GNULIB_PUTS = @GNULIB_PUTS@
 GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
 GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
 GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
 GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_RMDIR = @GNULIB_RMDIR@
 GNULIB_RPMATCH = @GNULIB_RPMATCH@
 GNULIB_SCANDIR = @GNULIB_SCANDIR@
 GNULIB_SETENV = @GNULIB_SETENV@
 GNULIB_SLEEP = @GNULIB_SLEEP@
 GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
 GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_STAT = @GNULIB_STAT@
 GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
 GNULIB_STPCPY = @GNULIB_STPCPY@
 GNULIB_STPNCPY = @GNULIB_STPNCPY@
@@ -289,6 +363,7 @@ GNULIB_STRERROR = @GNULIB_STRERROR@
 GNULIB_STRNDUP = @GNULIB_STRNDUP@
 GNULIB_STRNLEN = @GNULIB_STRNLEN@
 GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRPTIME = @GNULIB_STRPTIME@
 GNULIB_STRSEP = @GNULIB_STRSEP@
 GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
 GNULIB_STRSTR = @GNULIB_STRSTR@
@@ -299,8 +374,16 @@ GNULIB_STRTOLL = @GNULIB_STRTOLL@
 GNULIB_STRTOULL = @GNULIB_STRTOULL@
 GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
 GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_SYMLINK = @GNULIB_SYMLINK@
+GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
+GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
 GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
+GNULIB_UNLINK = @GNULIB_UNLINK@
+GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
 GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_USLEEP = @GNULIB_USLEEP@
+GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
 GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
 GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
 GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
@@ -320,8 +403,11 @@ HAVE_ALPHASORT = @HAVE_ALPHASORT@
 HAVE_ATOLL = @HAVE_ATOLL@
 HAVE_BTOWC = @HAVE_BTOWC@
 HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
 HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@
 HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
 HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
 HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
 HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
@@ -346,37 +432,68 @@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
 HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
 HAVE_DPRINTF = @HAVE_DPRINTF@
 HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
 HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
-HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDOPENDIR = @HAVE_FDOPENDIR@
+HAVE_FSTATAT = @HAVE_FSTATAT@
 HAVE_FSYNC = @HAVE_FSYNC@
-HAVE_FTELLO = @HAVE_FTELLO@
 HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
 HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@
 HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
 HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
 HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
 HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
 HAVE_GETUSERSHELL = @HAVE_GETUSERSHELL@
 HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
 HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
 HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
 HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
 HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
 HAVE_LSTAT = @HAVE_LSTAT@
 HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
 HAVE_MBRLEN = @HAVE_MBRLEN@
 HAVE_MBRTOWC = @HAVE_MBRTOWC@
 HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
 HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
 HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
 HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
 HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
 HAVE_OS_H = @HAVE_OS_H@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_PREAD = @HAVE_PREAD@
 HAVE_RANDOM_H = @HAVE_RANDOM_H@
 HAVE_RANDOM_R = @HAVE_RANDOM_R@
 HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
 HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
 HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
 HAVE_RPMATCH = @HAVE_RPMATCH@
 HAVE_SCANDIR = @HAVE_SCANDIR@
 HAVE_SETENV = @HAVE_SETENV@
@@ -390,7 +507,6 @@ HAVE_STPNCPY = @HAVE_STPNCPY@
 HAVE_STRCASECMP = @HAVE_STRCASECMP@
 HAVE_STRCASESTR = @HAVE_STRCASESTR@
 HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
-HAVE_STRNDUP = @HAVE_STRNDUP@
 HAVE_STRPBRK = @HAVE_STRPBRK@
 HAVE_STRSEP = @HAVE_STRSEP@
 HAVE_STRTOD = @HAVE_STRTOD@
@@ -399,6 +515,8 @@ HAVE_STRTOULL = @HAVE_STRTOULL@
 HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
 HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
 HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
 HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@
 HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
 HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
@@ -407,11 +525,15 @@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
 HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
 HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
 HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
 HAVE_UNSETENV = @HAVE_UNSETENV@
 HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
 HAVE_VASPRINTF = @HAVE_VASPRINTF@
 HAVE_VDPRINTF = @HAVE_VDPRINTF@
 HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
 HAVE_WCRTOMB = @HAVE_WCRTOMB@
 HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
 HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
@@ -429,16 +551,14 @@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
 INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
 INTLLIBS = @INTLLIBS@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
-INTTYPES_H = @INTTYPES_H@
 LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
-LIBTAR_LIBDEPS = @LIBTAR_LIBDEPS@
-LIBTAR_LTLIBDEPS = @LIBTAR_LTLIBDEPS@
 LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
-LIB_CLOSE = @LIB_CLOSE@
 LIB_SETSOCKOPT = @LIB_SETSOCKOPT@
 LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
 LOCALE_FR = @LOCALE_FR@
@@ -453,12 +573,36 @@ MKDIR_P = @MKDIR_P@
 MSGFMT = @MSGFMT@
 MSGFMT_015 = @MSGFMT_015@
 MSGMERGE = @MSGMERGE@
+NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
 NEXT_DIRENT_H = @NEXT_DIRENT_H@
 NEXT_ERRNO_H = @NEXT_ERRNO_H@
 NEXT_FCNTL_H = @NEXT_FCNTL_H@
 NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
 NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
 NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
 NEXT_STDINT_H = @NEXT_STDINT_H@
 NEXT_STDIO_H = @NEXT_STDIO_H@
 NEXT_STDLIB_H = @NEXT_STDLIB_H@
@@ -487,25 +631,40 @@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
 PU_RMT_PROG = @PU_RMT_PROG@
 RANLIB = @RANLIB@
 REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
 REPLACE_CHOWN = @REPLACE_CHOWN@
 REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@
 REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
 REPLACE_FCHDIR = @REPLACE_FCHDIR@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
 REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@
 REPLACE_FFLUSH = @REPLACE_FFLUSH@
 REPLACE_FOPEN = @REPLACE_FOPEN@
 REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
 REPLACE_FREOPEN = @REPLACE_FREOPEN@
 REPLACE_FSEEK = @REPLACE_FSEEK@
 REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
 REPLACE_FTELL = @REPLACE_FTELL@
 REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
 REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
 REPLACE_GETLINE = @REPLACE_GETLINE@
 REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
 REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
 REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
 REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
 REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
 REPLACE_LSEEK = @REPLACE_LSEEK@
 REPLACE_LSTAT = @REPLACE_LSTAT@
@@ -515,26 +674,53 @@ REPLACE_MBSINIT = @REPLACE_MBSINIT@
 REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
 REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
 REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
 REPLACE_MEMMEM = @REPLACE_MEMMEM@
 REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKNOD = @REPLACE_MKNOD@
 REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
 REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
 REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
 REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_OPENDIR = @REPLACE_OPENDIR@
 REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_PREAD = @REPLACE_PREAD@
 REPLACE_PRINTF = @REPLACE_PRINTF@
 REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SLEEP = @REPLACE_SLEEP@
 REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
 REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
 REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
 REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
 REPLACE_STRDUP = @REPLACE_STRDUP@
 REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
 REPLACE_STRPTIME = @REPLACE_STRPTIME@
 REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
 REPLACE_STRSTR = @REPLACE_STRSTR@
 REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
 REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
 REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
 REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
 REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
@@ -542,6 +728,7 @@ REPLACE_VPRINTF = @REPLACE_VPRINTF@
 REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
 REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
 REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
 REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
 REPLACE_WCTOB = @REPLACE_WCTOB@
 REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
@@ -552,22 +739,20 @@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
 SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
 STDARG_H = @STDARG_H@
 STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
 STDINT_H = @STDINT_H@
 STRIP = @STRIP@
 SYSEXITS_H = @SYSEXITS_H@
-SYS_STAT_H = @SYS_STAT_H@
-SYS_TIME_H = @SYS_TIME_H@
 SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
 TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
 UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
 UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
 UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
 USE_NLS = @USE_NLS@
 VERSION = @VERSION@
-VOID_UNSETENV = @VOID_UNSETENV@
-WCHAR_H = @WCHAR_H@
 WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
-WCTYPE_H = @WCTYPE_H@
 WINT_T_SUFFIX = @WINT_T_SUFFIX@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
@@ -625,6 +810,7 @@ sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 BACKUP_LIBEXEC_SCRIPTS_LIST = backup.sh dump-remind
@@ -655,14 +841,14 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
-             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-               && exit 0; \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  scripts/Makefile'; \
-       cd $(top_srcdir) && \
-         $(AUTOMAKE) --gnits  scripts/Makefile
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits scripts/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnits scripts/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
@@ -680,25 +866,41 @@ $(top_srcdir)/configure:  $(am__configure_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
 install-libexecSCRIPTS: $(libexec_SCRIPTS)
        @$(NORMAL_INSTALL)
        test -z "$(libexecdir)" || $(MKDIR_P) "$(DESTDIR)$(libexecdir)"
-       @list='$(libexec_SCRIPTS)'; for p in $$list; do \
+       @list='$(libexec_SCRIPTS)'; test -n "$(libexecdir)" || list=; \
+       for p in $$list; do \
          if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-         if test -f $$d$$p; then \
-           f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
-           echo " $(libexecSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(libexecdir)/$$f'"; \
-           $(libexecSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(libexecdir)/$$f"; \
-         else :; fi; \
-       done
+         if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n' \
+           -e 'h;s|.*|.|' \
+           -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+             if (++n[d] == $(am__install_max)) { \
+               print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+           else { print "f", d "/" $$4, $$1 } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+            if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+            test -z "$$files" || { \
+              echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(libexecdir)$$dir'"; \
+              $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(libexecdir)$$dir" || exit $$?; \
+            } \
+       ; done
 
 uninstall-libexecSCRIPTS:
        @$(NORMAL_UNINSTALL)
-       @list='$(libexec_SCRIPTS)'; for p in $$list; do \
-         f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
-         echo " rm -f '$(DESTDIR)$(libexecdir)/$$f'"; \
-         rm -f "$(DESTDIR)$(libexecdir)/$$f"; \
-       done
+       @list='$(libexec_SCRIPTS)'; test -n "$(libexecdir)" || exit 0; \
+       files=`for p in $$list; do echo "$$p"; done | \
+              sed -e 's,.*/,,;$(transform)'`; \
+       test -n "$$list" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(libexecdir)" && rm -f $$files
 
 installcheck-libexecSCRIPTS: $(libexec_SCRIPTS)
        bad=0; pid=$$$$; list="$(libexec_SCRIPTS)"; for p in $$list; do \
@@ -717,22 +919,37 @@ installcheck-libexecSCRIPTS: $(libexec_SCRIPTS)
 install-sbinSCRIPTS: $(sbin_SCRIPTS)
        @$(NORMAL_INSTALL)
        test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)"
-       @list='$(sbin_SCRIPTS)'; for p in $$list; do \
+       @list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || list=; \
+       for p in $$list; do \
          if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-         if test -f $$d$$p; then \
-           f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
-           echo " $(sbinSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(sbindir)/$$f'"; \
-           $(sbinSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(sbindir)/$$f"; \
-         else :; fi; \
-       done
+         if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n' \
+           -e 'h;s|.*|.|' \
+           -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+             if (++n[d] == $(am__install_max)) { \
+               print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+           else { print "f", d "/" $$4, $$1 } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+            if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+            test -z "$$files" || { \
+              echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(sbindir)$$dir'"; \
+              $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \
+            } \
+       ; done
 
 uninstall-sbinSCRIPTS:
        @$(NORMAL_UNINSTALL)
-       @list='$(sbin_SCRIPTS)'; for p in $$list; do \
-         f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
-         echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \
-         rm -f "$(DESTDIR)$(sbindir)/$$f"; \
-       done
+       @list='$(sbin_SCRIPTS)'; test -n "$(sbindir)" || exit 0; \
+       files=`for p in $$list; do echo "$$p"; done | \
+              sed -e 's,.*/,,;$(transform)'`; \
+       test -n "$$list" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(sbindir)" && rm -f $$files
 
 installcheck-sbinSCRIPTS: $(sbin_SCRIPTS)
        bad=0; pid=$$$$; list="$(sbin_SCRIPTS)"; for p in $$list; do \
@@ -771,13 +988,17 @@ distdir: $(DISTFILES)
          if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
          if test -d $$d/$$file; then \
            dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
            if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
            fi; \
-           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
          else \
-           test -f $(distdir)/$$file \
-           || cp -p $$d/$$file $(distdir)/$$file \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
            || exit 1; \
          fi; \
        done
@@ -809,6 +1030,7 @@ clean-generic:
 
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
@@ -827,6 +1049,8 @@ dvi-am:
 
 html: html-am
 
+html-am:
+
 info: info-am
 
 info-am:
@@ -835,18 +1059,28 @@ install-data-am:
 
 install-dvi: install-dvi-am
 
+install-dvi-am:
+
 install-exec-am: install-libexecSCRIPTS install-sbinSCRIPTS
 
 install-html: install-html-am
 
+install-html-am:
+
 install-info: install-info-am
 
+install-info-am:
+
 install-man:
 
 install-pdf: install-pdf-am
 
+install-pdf-am:
+
 install-ps: install-ps-am
 
+install-ps-am:
+
 installcheck-am: installcheck-libexecSCRIPTS installcheck-sbinSCRIPTS
 
 maintainer-clean: maintainer-clean-am
@@ -894,6 +1128,7 @@ restore: $(srcdir)/restore.in
 
 dump-remind: $(srcdir)/dump-remind.in
        sed $(SED_CMD) $? > $@
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
index c22a568a49eea7182a70d07e580e1d5861cb28a4..fcbac33f08d8e74757195fb79daf3ceb916b0e3f 100644 (file)
@@ -1,7 +1,7 @@
 # Makefile for GNU tar sources.
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2003, 2006,
-# 2007 Free Software Foundation, Inc.
+# 2007, 2009 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
@@ -27,6 +27,7 @@ tar_SOURCES = \
  compare.c\
  create.c\
  delete.c\
+ exit.c\
  extract.c\
  xheader.c\
  incremen.c\
@@ -38,11 +39,13 @@ tar_SOURCES = \
  system.c\
  tar.c\
  transform.c\
+ unlink.c\
  update.c\
- utf8.c
+ utf8.c\
+ warning.c
 
-INCLUDES = -I$(top_srcdir)/lib -I../ -I../lib
+INCLUDES = -I$(top_srcdir)/gnu -I../ -I../gnu -I$(top_srcdir)/lib -I../lib
 
-LDADD = ../lib/libtar.a $(LIBINTL) $(LIBICONV)
+LDADD = ../lib/libtar.a ../gnu/libgnu.a $(LIBINTL) $(LIBICONV)
 
 tar_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME)
index aafc1d22ff508ec51dbecc9621150478a6cf2759..164869c4c6e0236b222757f3cfb99948e85b017d 100644 (file)
@@ -1,8 +1,9 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 # Makefile for GNU tar sources.
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2003, 2006,
-# 2007 Free Software Foundation, Inc.
+# 2007, 2009 Free Software Foundation, Inc.
 
 
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
@@ -47,63 +49,71 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
        $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argmatch.m4 \
        $(top_srcdir)/m4/argp.m4 $(top_srcdir)/m4/backupfile.m4 \
        $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \
-       $(top_srcdir)/m4/canonicalize-lgpl.m4 \
+       $(top_srcdir)/m4/canonicalize.m4 \
        $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/chown.m4 \
        $(top_srcdir)/m4/clock_time.m4 \
        $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \
        $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
-       $(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/dirent_h.m4 \
-       $(top_srcdir)/m4/dirfd.m4 $(top_srcdir)/m4/dirname.m4 \
-       $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \
-       $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eealloc.m4 \
-       $(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
-       $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exclude.m4 \
-       $(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
+       $(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/dirent-safer.m4 \
+       $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \
+       $(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dos.m4 \
+       $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+       $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+       $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+       $(top_srcdir)/m4/exclude.m4 $(top_srcdir)/m4/extensions.m4 \
        $(top_srcdir)/m4/fchdir.m4 $(top_srcdir)/m4/fclose.m4 \
-       $(top_srcdir)/m4/fcntl-safer.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+       $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \
+       $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \
        $(top_srcdir)/m4/fileblocks.m4 $(top_srcdir)/m4/float_h.m4 \
        $(top_srcdir)/m4/fnmatch.m4 $(top_srcdir)/m4/fpending.m4 \
        $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftruncate.m4 \
        $(top_srcdir)/m4/getcwd-abort-bug.m4 \
        $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \
        $(top_srcdir)/m4/getdate.m4 $(top_srcdir)/m4/getdelim.m4 \
-       $(top_srcdir)/m4/getline.m4 $(top_srcdir)/m4/getopt.m4 \
-       $(top_srcdir)/m4/getpagesize.m4 $(top_srcdir)/m4/gettext.m4 \
-       $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \
-       $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \
+       $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getline.m4 \
+       $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \
+       $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettime.m4 \
+       $(top_srcdir)/m4/gettimeofday.m4 $(top_srcdir)/m4/glibc21.m4 \
+       $(top_srcdir)/m4/gnulib-common.m4 \
        $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/hash.m4 \
        $(top_srcdir)/m4/human.m4 $(top_srcdir)/m4/iconv.m4 \
        $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \
        $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
        $(top_srcdir)/m4/inttostr.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
        $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
-       $(top_srcdir)/m4/lchown.m4 $(top_srcdir)/m4/lib-ld.m4 \
-       $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+       $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/lchown.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 \
        $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
        $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \
        $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \
        $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/malloc.m4 \
        $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/mbchar.m4 \
        $(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrtowc.m4 \
-       $(top_srcdir)/m4/mbscasecmp.m4 $(top_srcdir)/m4/mbsinit.m4 \
-       $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mempcpy.m4 \
-       $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/mkdtemp.m4 \
-       $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/modechange.m4 \
-       $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nls.m4 \
-       $(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/openat.m4 \
-       $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/paxutils.m4 \
-       $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf.m4 \
+       $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbsrtowcs.m4 \
+       $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/memchr.m4 \
+       $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/memrchr.m4 \
+       $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkdtemp.m4 \
+       $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \
+       $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/modechange.m4 \
+       $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nl_langinfo.m4 \
+       $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/open.m4 \
+       $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/pathmax.m4 \
+       $(top_srcdir)/m4/paxutils.m4 $(top_srcdir)/m4/po.m4 \
+       $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/priv-set.m4 \
        $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/quote.m4 \
        $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \
        $(top_srcdir)/m4/readlink.m4 $(top_srcdir)/m4/realloc.m4 \
-       $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rmt.m4 \
-       $(top_srcdir)/m4/rpmatch.m4 $(top_srcdir)/m4/rtapelib.m4 \
-       $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/safe-write.m4 \
+       $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rmdir.m4 \
+       $(top_srcdir)/m4/rmt.m4 $(top_srcdir)/m4/rpmatch.m4 \
+       $(top_srcdir)/m4/rtapelib.m4 $(top_srcdir)/m4/safe-read.m4 \
+       $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/same.m4 \
        $(top_srcdir)/m4/save-cwd.m4 $(top_srcdir)/m4/savedir.m4 \
        $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/size_max.m4 \
        $(top_srcdir)/m4/sleep.m4 $(top_srcdir)/m4/snprintf.m4 \
        $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
-       $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \
+       $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \
+       $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
        $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
        $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
        $(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strcase.m4 \
@@ -119,43 +129,60 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
        $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \
        $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \
        $(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-       $(top_srcdir)/m4/unlinkdir.m4 $(top_srcdir)/m4/unlocked-io.m4 \
-       $(top_srcdir)/m4/utimbuf.m4 $(top_srcdir)/m4/utime.m4 \
-       $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
-       $(top_srcdir)/m4/utimes.m4 $(top_srcdir)/m4/vasnprintf.m4 \
-       $(top_srcdir)/m4/vsnprintf.m4 $(top_srcdir)/m4/wchar.m4 \
+       $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+       $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utimbuf.m4 \
+       $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes.m4 \
+       $(top_srcdir)/m4/vasnprintf.m4 $(top_srcdir)/m4/vasprintf.m4 \
+       $(top_srcdir)/m4/version-etc.m4 $(top_srcdir)/m4/vsnprintf.m4 \
+       $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \
        $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
-       $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wcwidth.m4 \
+       $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
        $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/write.m4 \
        $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xgetcwd.m4 \
        $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrndup.m4 \
-       $(top_srcdir)/m4/xstrtol.m4 $(top_srcdir)/configure.ac
+       $(top_srcdir)/m4/xstrtol.m4 $(top_srcdir)/m4/xvasprintf.m4 \
+       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)"
-binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
 am_tar_OBJECTS = buffer.$(OBJEXT) checkpoint.$(OBJEXT) \
        compare.$(OBJEXT) create.$(OBJEXT) delete.$(OBJEXT) \
-       extract.$(OBJEXT) xheader.$(OBJEXT) incremen.$(OBJEXT) \
-       list.$(OBJEXT) misc.$(OBJEXT) names.$(OBJEXT) sparse.$(OBJEXT) \
-       suffix.$(OBJEXT) system.$(OBJEXT) tar.$(OBJEXT) \
-       transform.$(OBJEXT) update.$(OBJEXT) utf8.$(OBJEXT)
+       exit.$(OBJEXT) extract.$(OBJEXT) xheader.$(OBJEXT) \
+       incremen.$(OBJEXT) list.$(OBJEXT) misc.$(OBJEXT) \
+       names.$(OBJEXT) sparse.$(OBJEXT) suffix.$(OBJEXT) \
+       system.$(OBJEXT) tar.$(OBJEXT) transform.$(OBJEXT) \
+       unlink.$(OBJEXT) update.$(OBJEXT) utf8.$(OBJEXT) \
+       warning.$(OBJEXT)
 tar_OBJECTS = $(am_tar_OBJECTS)
 am__DEPENDENCIES_1 =
-am__DEPENDENCIES_2 = ../lib/libtar.a $(am__DEPENDENCIES_1) \
-       $(am__DEPENDENCIES_1)
+am__DEPENDENCIES_2 = ../lib/libtar.a ../gnu/libgnu.a \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 tar_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
 am__depfiles_maybe = depfiles
+am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
 CCLD = $(CC)
 LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
 SOURCES = $(tar_SOURCES)
 DIST_SOURCES = $(tar_SOURCES)
 HEADERS = $(noinst_HEADERS)
@@ -166,6 +193,7 @@ ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
 ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -194,7 +222,6 @@ DEFAULT_RMT_COMMAND = @DEFAULT_RMT_COMMAND@
 DEFAULT_RMT_DIR = @DEFAULT_RMT_DIR@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
-DIRENT_H = @DIRENT_H@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
@@ -207,7 +234,6 @@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
 EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
 ERRNO_H = @ERRNO_H@
 EXEEXT = @EXEEXT@
-FCNTL_H = @FCNTL_H@
 FLOAT_H = @FLOAT_H@
 FNMATCH_H = @FNMATCH_H@
 GETOPT_H = @GETOPT_H@
@@ -219,45 +245,59 @@ GNULIB_ALPHASORT = @GNULIB_ALPHASORT@
 GNULIB_ATOLL = @GNULIB_ATOLL@
 GNULIB_BTOWC = @GNULIB_BTOWC@
 GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
 GNULIB_CHOWN = @GNULIB_CHOWN@
 GNULIB_CLOSE = @GNULIB_CLOSE@
 GNULIB_DIRFD = @GNULIB_DIRFD@
 GNULIB_DPRINTF = @GNULIB_DPRINTF@
 GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_DUP3 = @GNULIB_DUP3@
 GNULIB_ENVIRON = @GNULIB_ENVIRON@
 GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
+GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
 GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
+GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
 GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FCNTL = @GNULIB_FCNTL@
+GNULIB_FDOPENDIR = @GNULIB_FDOPENDIR@
 GNULIB_FFLUSH = @GNULIB_FFLUSH@
 GNULIB_FOPEN = @GNULIB_FOPEN@
 GNULIB_FPRINTF = @GNULIB_FPRINTF@
 GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
 GNULIB_FPUTC = @GNULIB_FPUTC@
 GNULIB_FPUTS = @GNULIB_FPUTS@
 GNULIB_FREOPEN = @GNULIB_FREOPEN@
 GNULIB_FSEEK = @GNULIB_FSEEK@
 GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FSTATAT = @GNULIB_FSTATAT@
 GNULIB_FSYNC = @GNULIB_FSYNC@
 GNULIB_FTELL = @GNULIB_FTELL@
 GNULIB_FTELLO = @GNULIB_FTELLO@
 GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
 GNULIB_FWRITE = @GNULIB_FWRITE@
 GNULIB_GETCWD = @GNULIB_GETCWD@
 GNULIB_GETDELIM = @GNULIB_GETDELIM@
 GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
 GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
 GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
 GNULIB_GETLINE = @GNULIB_GETLINE@
 GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
 GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
 GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
 GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
 GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
 GNULIB_IMAXABS = @GNULIB_IMAXABS@
 GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
 GNULIB_LCHMOD = @GNULIB_LCHMOD@
 GNULIB_LCHOWN = @GNULIB_LCHOWN@
 GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
 GNULIB_LSEEK = @GNULIB_LSEEK@
 GNULIB_LSTAT = @GNULIB_LSTAT@
 GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
@@ -280,15 +320,31 @@ GNULIB_MBSSEP = @GNULIB_MBSSEP@
 GNULIB_MBSSPN = @GNULIB_MBSSPN@
 GNULIB_MBSSTR = @GNULIB_MBSSTR@
 GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
 GNULIB_MEMMEM = @GNULIB_MEMMEM@
 GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
 GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
 GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKFIFO = @GNULIB_MKFIFO@
+GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
+GNULIB_MKNOD = @GNULIB_MKNOD@
+GNULIB_MKNODAT = @GNULIB_MKNODAT@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
 GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_MKTIME = @GNULIB_MKTIME@
+GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
+GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@
 GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
 GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
 GNULIB_OPEN = @GNULIB_OPEN@
+GNULIB_OPENAT = @GNULIB_OPENAT@
 GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_PREAD = @GNULIB_PREAD@
 GNULIB_PRINTF = @GNULIB_PRINTF@
 GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
 GNULIB_PUTC = @GNULIB_PUTC@
@@ -298,13 +354,20 @@ GNULIB_PUTS = @GNULIB_PUTS@
 GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
 GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
 GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
 GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_RMDIR = @GNULIB_RMDIR@
 GNULIB_RPMATCH = @GNULIB_RPMATCH@
 GNULIB_SCANDIR = @GNULIB_SCANDIR@
 GNULIB_SETENV = @GNULIB_SETENV@
 GNULIB_SLEEP = @GNULIB_SLEEP@
 GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
 GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_STAT = @GNULIB_STAT@
 GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
 GNULIB_STPCPY = @GNULIB_STPCPY@
 GNULIB_STPNCPY = @GNULIB_STPNCPY@
@@ -315,6 +378,7 @@ GNULIB_STRERROR = @GNULIB_STRERROR@
 GNULIB_STRNDUP = @GNULIB_STRNDUP@
 GNULIB_STRNLEN = @GNULIB_STRNLEN@
 GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRPTIME = @GNULIB_STRPTIME@
 GNULIB_STRSEP = @GNULIB_STRSEP@
 GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
 GNULIB_STRSTR = @GNULIB_STRSTR@
@@ -325,8 +389,16 @@ GNULIB_STRTOLL = @GNULIB_STRTOLL@
 GNULIB_STRTOULL = @GNULIB_STRTOULL@
 GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
 GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_SYMLINK = @GNULIB_SYMLINK@
+GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
+GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
 GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
+GNULIB_UNLINK = @GNULIB_UNLINK@
+GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
 GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_USLEEP = @GNULIB_USLEEP@
+GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
 GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
 GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
 GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
@@ -346,8 +418,11 @@ HAVE_ALPHASORT = @HAVE_ALPHASORT@
 HAVE_ATOLL = @HAVE_ATOLL@
 HAVE_BTOWC = @HAVE_BTOWC@
 HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
 HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@
 HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
 HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
 HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
 HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
@@ -372,37 +447,68 @@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
 HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
 HAVE_DPRINTF = @HAVE_DPRINTF@
 HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
 HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
-HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDOPENDIR = @HAVE_FDOPENDIR@
+HAVE_FSTATAT = @HAVE_FSTATAT@
 HAVE_FSYNC = @HAVE_FSYNC@
-HAVE_FTELLO = @HAVE_FTELLO@
 HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
 HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@
 HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
 HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
 HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
 HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
 HAVE_GETUSERSHELL = @HAVE_GETUSERSHELL@
 HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
 HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
 HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
 HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
 HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
 HAVE_LSTAT = @HAVE_LSTAT@
 HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
 HAVE_MBRLEN = @HAVE_MBRLEN@
 HAVE_MBRTOWC = @HAVE_MBRTOWC@
 HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
 HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
 HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
 HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
 HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
 HAVE_OS_H = @HAVE_OS_H@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_PREAD = @HAVE_PREAD@
 HAVE_RANDOM_H = @HAVE_RANDOM_H@
 HAVE_RANDOM_R = @HAVE_RANDOM_R@
 HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
 HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
 HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
 HAVE_RPMATCH = @HAVE_RPMATCH@
 HAVE_SCANDIR = @HAVE_SCANDIR@
 HAVE_SETENV = @HAVE_SETENV@
@@ -416,7 +522,6 @@ HAVE_STPNCPY = @HAVE_STPNCPY@
 HAVE_STRCASECMP = @HAVE_STRCASECMP@
 HAVE_STRCASESTR = @HAVE_STRCASESTR@
 HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
-HAVE_STRNDUP = @HAVE_STRNDUP@
 HAVE_STRPBRK = @HAVE_STRPBRK@
 HAVE_STRSEP = @HAVE_STRSEP@
 HAVE_STRTOD = @HAVE_STRTOD@
@@ -425,6 +530,8 @@ HAVE_STRTOULL = @HAVE_STRTOULL@
 HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
 HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
 HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
 HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@
 HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
 HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
@@ -433,11 +540,15 @@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
 HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
 HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
 HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
 HAVE_UNSETENV = @HAVE_UNSETENV@
 HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
 HAVE_VASPRINTF = @HAVE_VASPRINTF@
 HAVE_VDPRINTF = @HAVE_VDPRINTF@
 HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
 HAVE_WCRTOMB = @HAVE_WCRTOMB@
 HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
 HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
@@ -455,16 +566,14 @@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
 INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
 INTLLIBS = @INTLLIBS@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
-INTTYPES_H = @INTTYPES_H@
 LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
-LIBTAR_LIBDEPS = @LIBTAR_LIBDEPS@
-LIBTAR_LTLIBDEPS = @LIBTAR_LTLIBDEPS@
 LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
-LIB_CLOSE = @LIB_CLOSE@
 LIB_SETSOCKOPT = @LIB_SETSOCKOPT@
 LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
 LOCALE_FR = @LOCALE_FR@
@@ -479,12 +588,36 @@ MKDIR_P = @MKDIR_P@
 MSGFMT = @MSGFMT@
 MSGFMT_015 = @MSGFMT_015@
 MSGMERGE = @MSGMERGE@
+NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
 NEXT_DIRENT_H = @NEXT_DIRENT_H@
 NEXT_ERRNO_H = @NEXT_ERRNO_H@
 NEXT_FCNTL_H = @NEXT_FCNTL_H@
 NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
 NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
 NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
 NEXT_STDINT_H = @NEXT_STDINT_H@
 NEXT_STDIO_H = @NEXT_STDIO_H@
 NEXT_STDLIB_H = @NEXT_STDLIB_H@
@@ -513,25 +646,40 @@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
 PU_RMT_PROG = @PU_RMT_PROG@
 RANLIB = @RANLIB@
 REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
 REPLACE_CHOWN = @REPLACE_CHOWN@
 REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@
 REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
 REPLACE_FCHDIR = @REPLACE_FCHDIR@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
 REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@
 REPLACE_FFLUSH = @REPLACE_FFLUSH@
 REPLACE_FOPEN = @REPLACE_FOPEN@
 REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
 REPLACE_FREOPEN = @REPLACE_FREOPEN@
 REPLACE_FSEEK = @REPLACE_FSEEK@
 REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
 REPLACE_FTELL = @REPLACE_FTELL@
 REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
 REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
 REPLACE_GETLINE = @REPLACE_GETLINE@
 REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
 REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
 REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
 REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
 REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
 REPLACE_LSEEK = @REPLACE_LSEEK@
 REPLACE_LSTAT = @REPLACE_LSTAT@
@@ -541,26 +689,53 @@ REPLACE_MBSINIT = @REPLACE_MBSINIT@
 REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
 REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
 REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
 REPLACE_MEMMEM = @REPLACE_MEMMEM@
 REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKNOD = @REPLACE_MKNOD@
 REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
 REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
 REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
 REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_OPENDIR = @REPLACE_OPENDIR@
 REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_PREAD = @REPLACE_PREAD@
 REPLACE_PRINTF = @REPLACE_PRINTF@
 REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SLEEP = @REPLACE_SLEEP@
 REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
 REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
 REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
 REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
 REPLACE_STRDUP = @REPLACE_STRDUP@
 REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
 REPLACE_STRPTIME = @REPLACE_STRPTIME@
 REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
 REPLACE_STRSTR = @REPLACE_STRSTR@
 REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
 REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
 REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
 REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
 REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
@@ -568,6 +743,7 @@ REPLACE_VPRINTF = @REPLACE_VPRINTF@
 REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
 REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
 REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
 REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
 REPLACE_WCTOB = @REPLACE_WCTOB@
 REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
@@ -578,22 +754,20 @@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
 SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
 STDARG_H = @STDARG_H@
 STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
 STDINT_H = @STDINT_H@
 STRIP = @STRIP@
 SYSEXITS_H = @SYSEXITS_H@
-SYS_STAT_H = @SYS_STAT_H@
-SYS_TIME_H = @SYS_TIME_H@
 SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
 TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
 UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
 UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
 UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
 USE_NLS = @USE_NLS@
 VERSION = @VERSION@
-VOID_UNSETENV = @VOID_UNSETENV@
-WCHAR_H = @WCHAR_H@
 WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
-WCTYPE_H = @WCTYPE_H@
 WINT_T_SUFFIX = @WINT_T_SUFFIX@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
@@ -651,6 +825,7 @@ sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 noinst_HEADERS = arith.h common.h tar.h
@@ -660,6 +835,7 @@ tar_SOURCES = \
  compare.c\
  create.c\
  delete.c\
+ exit.c\
  extract.c\
  xheader.c\
  incremen.c\
@@ -671,11 +847,13 @@ tar_SOURCES = \
  system.c\
  tar.c\
  transform.c\
+ unlink.c\
  update.c\
- utf8.c
+ utf8.c\
+ warning.c
 
-INCLUDES = -I$(top_srcdir)/lib -I../ -I../lib
-LDADD = ../lib/libtar.a $(LIBINTL) $(LIBICONV)
+INCLUDES = -I$(top_srcdir)/gnu -I../ -I../gnu -I$(top_srcdir)/lib -I../lib
+LDADD = ../lib/libtar.a ../gnu/libgnu.a $(LIBINTL) $(LIBICONV)
 tar_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME)
 all: all-am
 
@@ -685,14 +863,14 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
-             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-               && exit 0; \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  src/Makefile'; \
-       cd $(top_srcdir) && \
-         $(AUTOMAKE) --gnits  src/Makefile
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits src/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnits src/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
@@ -710,26 +888,41 @@ $(top_srcdir)/configure:  $(am__configure_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
 install-binPROGRAMS: $(bin_PROGRAMS)
        @$(NORMAL_INSTALL)
        test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
-       @list='$(bin_PROGRAMS)'; for p in $$list; do \
-         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-         if test -f $$p \
-         ; then \
-           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-          echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
-          $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
-         else :; fi; \
-       done
+       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       for p in $$list; do echo "$$p $$p"; done | \
+       sed 's/$(EXEEXT)$$//' | \
+       while read p p1; do if test -f $$p; \
+         then echo "$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+           -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+       sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) files[d] = files[d] " " $$1; \
+           else { print "f", $$3 "/" $$4, $$1; } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+           if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+           test -z "$$files" || { \
+             echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+             $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+           } \
+       ; done
 
 uninstall-binPROGRAMS:
        @$(NORMAL_UNINSTALL)
-       @list='$(bin_PROGRAMS)'; for p in $$list; do \
-         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-         echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
-         rm -f "$(DESTDIR)$(bindir)/$$f"; \
-       done
+       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       files=`for p in $$list; do echo "$$p"; done | \
+         sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+             -e 's/$$/$(EXEEXT)/' `; \
+       test -n "$$list" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(bindir)" && rm -f $$files
 
 clean-binPROGRAMS:
        -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
@@ -751,7 +944,7 @@ installcheck-binPROGRAMS: $(bin_PROGRAMS)
        done; rm -f c$${pid}_.???; exit $$bad
 tar$(EXEEXT): $(tar_OBJECTS) $(tar_DEPENDENCIES) 
        @rm -f tar$(EXEEXT)
-       $(LINK) $(tar_OBJECTS) $(tar_LDADD) $(LIBS)
+       $(AM_V_CCLD)$(LINK) $(tar_OBJECTS) $(tar_LDADD) $(LIBS)
 
 mostlyclean-compile:
        -rm -f *.$(OBJEXT)
@@ -764,6 +957,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compare.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/create.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/delete.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exit.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extract.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/incremen.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Po@am__quote@
@@ -774,20 +968,24 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/system.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tar.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transform.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlink.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utf8.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/warning.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xheader.Po@am__quote@
 
 .c.o:
-@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(COMPILE) -c $<
 
 .c.obj:
-@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
@@ -797,14 +995,14 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
        unique=`for i in $$list; do \
            if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
          done | \
-         $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
              END { if (nonempty) { for (i in files) print i; }; }'`; \
        mkid -fID $$unique
 tags: TAGS
 
 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
                $(TAGS_FILES) $(LISP)
-       tags=; \
+       set x; \
        here=`pwd`; \
        list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
        unique=`for i in $$list; do \
@@ -812,29 +1010,34 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
          done | \
          $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
              END { if (nonempty) { for (i in files) print i; }; }'`; \
-       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
-         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-           $$tags $$unique; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
        fi
 ctags: CTAGS
 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
                $(TAGS_FILES) $(LISP)
-       tags=; \
        list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
        unique=`for i in $$list; do \
            if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
          done | \
          $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
              END { if (nonempty) { for (i in files) print i; }; }'`; \
-       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+       test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-            $$tags $$unique
+            $$unique
 
 GTAGS:
        here=`$(am__cd) $(top_builddir) && pwd` \
-         && cd $(top_srcdir) \
-         && gtags -i $(GTAGS_ARGS) $$here
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -855,13 +1058,17 @@ distdir: $(DISTFILES)
          if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
          if test -d $$d/$$file; then \
            dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
            if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
            fi; \
-           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
          else \
-           test -f $(distdir)/$$file \
-           || cp -p $$d/$$file $(distdir)/$$file \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
            || exit 1; \
          fi; \
        done
@@ -892,6 +1099,7 @@ clean-generic:
 
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
@@ -912,6 +1120,8 @@ dvi-am:
 
 html: html-am
 
+html-am:
+
 info: info-am
 
 info-am:
@@ -920,18 +1130,28 @@ install-data-am:
 
 install-dvi: install-dvi-am
 
+install-dvi-am:
+
 install-exec-am: install-binPROGRAMS
 
 install-html: install-html-am
 
+install-html-am:
+
 install-info: install-info-am
 
+install-info-am:
+
 install-man:
 
 install-pdf: install-pdf-am
 
+install-pdf-am:
+
 install-ps: install-ps-am
 
+install-ps-am:
+
 installcheck-am: installcheck-binPROGRAMS
 
 maintainer-clean: maintainer-clean-am
@@ -968,6 +1188,7 @@ uninstall-am: uninstall-binPROGRAMS
        mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
        ps ps-am tags uninstall uninstall-am uninstall-binPROGRAMS
 
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
index 8edc257fe63ba27510eae8a4153ee2b02c48bf0b..8147def1961246dfdef3f3704432416431c6f932 100644 (file)
@@ -1,7 +1,8 @@
 /* Buffer management for tar.
 
    Copyright (C) 1988, 1992, 1993, 1994, 1996, 1997, 1999, 2000, 2001,
-   2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+   Foundation, Inc.
 
    Written by John Gilmore, on 1985-08-25.
 
@@ -35,9 +36,6 @@
 /* Number of retries before giving up on read.  */
 #define READ_ERROR_MAX 10
 
-/* Globbing pattern to append to volume label if initial match failed.  */
-#define VOLUME_LABEL_APPEND " Volume [1-9]*"
-
 /* Variables.  */
 
 static tarlong prev_written;    /* bytes written on previous volumes */
@@ -203,6 +201,7 @@ enum compress_type {
   ct_compress,
   ct_gzip,
   ct_bzip2,
+  ct_lzip,
   ct_lzma,
   ct_lzop,
   ct_xz
@@ -220,12 +219,13 @@ struct zip_magic
 static struct zip_magic const magic[] = {
   { ct_tar },
   { ct_none, },
-  { ct_compress, 2, "\037\235", "compress", "-Z" },
-  { ct_gzip,     2, "\037\213", "gzip", "-z"  },
-  { ct_bzip2,    3, "BZh",      "bzip2", "-j" },
-  { ct_lzma,     6, "\xFFLZMA", "lzma", "--lzma" }, /* FIXME: ???? */
-  { ct_lzop,     4, "\211LZO",  "lzop", "--lzop" },
-  { ct_xz,       6, "\0xFD7zXZ", "-J" },
+  { ct_compress, 2, "\037\235",  COMPRESS_PROGRAM, "-Z" },
+  { ct_gzip,     2, "\037\213",  GZIP_PROGRAM,     "-z"  },
+  { ct_bzip2,    3, "BZh",       BZIP2_PROGRAM,    "-j" },
+  { ct_lzip,     4, "LZIP",      LZIP_PROGRAM,     "--lzip" },
+  { ct_lzma,     6, "\xFFLZMA",  LZMA_PROGRAM,     "--lzma" },
+  { ct_lzop,     4, "\211LZO",   LZOP_PROGRAM,     "--lzop" },
+  { ct_xz,       6, "\0xFD7zXZ", XZ_PROGRAM,       "-J" },
 };
 
 #define NMAGIC (sizeof(magic)/sizeof(magic[0]))
@@ -265,6 +265,37 @@ check_compressed_archive (bool *pshort)
   return ct_none;
 }
 
+/* Guess if the archive is seekable. */
+static void
+guess_seekable_archive ()
+{
+  struct stat st;
+
+  if (subcommand_option == DELETE_SUBCOMMAND)
+    {
+      /* The current code in delete.c is based on the assumption that
+        skip_member() reads all data from the archive. So, we should
+        make sure it won't use seeks. On the other hand, the same code
+        depends on the ability to backspace a record in the archive,
+        so setting seekable_archive to false is technically incorrect.
+         However, it is tested only in skip_member(), so it's not a
+        problem. */
+      seekable_archive = false;
+    }
+
+  if (seek_option != -1)
+    {
+      seekable_archive = !!seek_option;
+      return;
+    }
+  
+  if (!multi_volume_option && !use_compress_program_option
+      && fstat (archive, &st) == 0)
+    seekable_archive = S_ISREG (st.st_mode);
+  else
+    seekable_archive = false;
+}
+
 /* Open an archive named archive_name_array[0]. Detect if it is
    a compressed archive of known type and use corresponding decompression
    program if so */
@@ -295,7 +326,7 @@ open_compressed_archive ()
                 ERROR ((0, 0, _("This does not look like a tar archive")));
               set_comression_program_by_suffix (archive_name_array[0], NULL);
               if (!use_compress_program_option)
-                return archive;
+               return archive;
               break;
 
             default:
@@ -306,7 +337,7 @@ open_compressed_archive ()
       
       /* FD is not needed any more */
       rmtclose (archive);
-
+      
       hit_eof = false; /* It might have been set by find_next_block in
                           check_compressed_archive */
 
@@ -565,6 +596,8 @@ _open_archive (enum access_mode wanted_access)
       {
       case ACCESS_READ:
         archive = open_compressed_archive ();
+       if (archive >= 0)
+         guess_seekable_archive ();
         break;
 
       case ACCESS_WRITE:
@@ -679,6 +712,19 @@ archive_read_error (void)
   return;
 }
 
+static bool
+archive_is_dev ()
+{
+  struct stat st;
+
+  if (fstat (archive, &st))
+    {
+      stat_diag (*archive_name_cursor);
+      return false;
+    }
+  return S_ISBLK (st.st_mode) || S_ISCHR (st.st_mode);
+}
+
 static void
 short_read (size_t status)
 {
@@ -690,7 +736,8 @@ short_read (size_t status)
 
   if (left && left % BLOCKSIZE == 0
       && verbose_option
-      && record_start_block == 0 && status != 0)
+      && record_start_block == 0 && status != 0
+      && archive_is_dev ())
     {
       unsigned long rsize = status / BLOCKSIZE;
       WARN ((0, 0,
@@ -809,16 +856,16 @@ seek_archive (off_t size)
   off_t start = current_block_ordinal ();
   off_t offset;
   off_t nrec, nblk;
-  off_t skipped = (blocking_factor - (current_block - record_start));
-
-  size -= skipped * BLOCKSIZE;
+  off_t skipped = (blocking_factor - (current_block - record_start))
+                  * BLOCKSIZE;
 
-  if (size < record_size)
+  if (size <= skipped)
     return 0;
-  /* FIXME: flush? */
-
+  
   /* Compute number of records to skip */
-  nrec = size / record_size;
+  nrec = (size - skipped) / record_size;
+  if (nrec == 0)
+    return 0;
   offset = rmtlseek (archive, nrec * record_size, SEEK_CUR);
   if (offset < 0)
     return offset;
@@ -1084,6 +1131,7 @@ new_volume (enum access_mode mode)
       case ACCESS_READ:
         archive = rmtopen (*archive_name_cursor, O_RDONLY, MODE_RW,
                            rsh_command_option);
+       guess_seekable_archive ();
         break;
 
       case ACCESS_WRITE:
@@ -1119,7 +1167,7 @@ read_header0 (struct tar_stat_info *info)
   enum read_header rc;
 
   tar_stat_init (info);
-  rc = read_header_primitive (false, info);
+  rc = read_header (&current_header, info, read_header_auto);
   if (rc == HEADER_SUCCESS)
     {
       set_next_block_after (current_header);
@@ -1167,17 +1215,42 @@ try_new_volume ()
     {
     case XGLTYPE:
       {
-        if (!read_header0 (&dummy))
-          return false;
+       tar_stat_init (&dummy);
+       if (read_header (&header, &dummy, read_header_x_global)
+           != HEADER_SUCCESS_EXTENDED)
+         {
+           ERROR ((0, 0, _("This does not look like a tar archive")));
+           return false;
+         }
+       
         xheader_decode (&dummy); /* decodes values from the global header */
         tar_stat_destroy (&dummy);
-        if (!real_s_name)
-          {
-            /* We have read the extended header of the first member in
-               this volume. Put it back, so next read_header works as
-               expected. */
-            current_block = record_start;
-          }
+       
+       /* The initial global header must be immediately followed by
+          an extended PAX header for the first member in this volume.
+          However, in some cases tar may split volumes in the middle
+          of a PAX header. This is incorrect, and should be fixed
+           in the future versions. In the meantime we must be
+          prepared to correctly list and extract such archives.
+
+          If this happens, the following call to read_header returns
+          HEADER_FAILURE, which is ignored.
+
+          See also tests/multiv07.at */
+              
+       switch (read_header (&header, &dummy, read_header_auto))
+         {
+         case HEADER_SUCCESS:
+           set_next_block_after (header);
+           break;
+
+         case HEADER_FAILURE:
+           break;
+
+         default:
+           ERROR ((0, 0, _("This does not look like a tar archive")));
+           return false;
+         }
         break;
       }
 
@@ -1264,31 +1337,57 @@ try_new_volume ()
 }
 
 \f
-/* Check the LABEL block against the volume label, seen as a globbing
+#define VOLUME_TEXT " Volume "
+#define VOLUME_TEXT_LEN (sizeof VOLUME_TEXT - 1)
+
+char *
+drop_volume_label_suffix (const char *label)
+{
+  const char *p;
+  size_t len = strlen (label);
+
+  if (len < 1)
+    return NULL;
+  
+  for (p = label + len - 1; p > label && isdigit ((unsigned char) *p); p--)
+    ;
+  if (p > label && p - (VOLUME_TEXT_LEN - 1) > label)
+    {
+      p -= VOLUME_TEXT_LEN - 1;
+      if (memcmp (p, VOLUME_TEXT, VOLUME_TEXT_LEN) == 0)
+       {
+         char *s = xmalloc ((len = p - label) + 1);
+         memcpy (s, label, len);
+         s[len] = 0;
+         return s;
+       }
+    }
+
+  return NULL;
+}
+      
+/* Check LABEL against the volume label, seen as a globbing
    pattern.  Return true if the pattern matches.  In case of failure,
    retry matching a volume sequence number before giving up in
    multi-volume mode.  */
 static bool
-check_label_pattern (union block *label)
+check_label_pattern (const char *label)
 {
   char *string;
   bool result;
 
-  if (! memchr (label->header.name, '\0', sizeof label->header.name))
-    return false;
-
-  if (fnmatch (volume_label_option, label->header.name, 0) == 0)
+  if (fnmatch (volume_label_option, label, 0) == 0)
     return true;
 
   if (!multi_volume_option)
     return false;
 
-  string = xmalloc (strlen (volume_label_option)
-                    + sizeof VOLUME_LABEL_APPEND + 1);
-  strcpy (string, volume_label_option);
-  strcat (string, VOLUME_LABEL_APPEND);
-  result = fnmatch (string, label->header.name, 0) == 0;
-  free (string);
+  string = drop_volume_label_suffix (label);
+  if (string)
+    {
+      result = fnmatch (string, volume_label_option, 0) == 0;
+      free (string);
+    }
   return result;
 }
 
@@ -1297,14 +1396,43 @@ check_label_pattern (union block *label)
 static void
 match_volume_label (void)
 {
-  union block *label = find_next_block ();
-
-  if (!label)
+  if (!volume_label)
+    {
+      union block *label = find_next_block ();
+  
+      if (!label)
+       FATAL_ERROR ((0, 0, _("Archive not labeled to match %s"),
+                     quote (volume_label_option)));
+      if (label->header.typeflag == GNUTYPE_VOLHDR)
+       {
+         if (memchr (label->header.name, '\0', sizeof label->header.name))
+           assign_string (&volume_label, label->header.name);
+         else
+           {
+             volume_label = xmalloc (sizeof (label->header.name) + 1);
+             memcpy (volume_label, label->header.name,
+                     sizeof (label->header.name));
+             volume_label[sizeof (label->header.name)] = 0;
+           }
+       }
+      else if (label->header.typeflag == XGLTYPE)
+       {
+         struct tar_stat_info st;
+         tar_stat_init (&st);
+         xheader_read (&st.xhdr, label,
+                       OFF_FROM_HEADER (label->header.size));
+         xheader_decode (&st);
+         tar_stat_destroy (&st);
+       }
+    }
+  
+  if (!volume_label)
     FATAL_ERROR ((0, 0, _("Archive not labeled to match %s"),
                   quote (volume_label_option)));
-  if (!check_label_pattern (label))
+  
+  if (!check_label_pattern (volume_label))
     FATAL_ERROR ((0, 0, _("Volume %s does not match %s"),
-                  quote_n (0, label->header.name),
+                  quote_n (0, volume_label),
                   quote_n (1, volume_label_option)));
 }
 
index 9897b46c4c104a79a978fc04361f848669680342..d2de528e0e94809eef7fa0efbb1e3a8975faa3ad 100644 (file)
@@ -1,7 +1,8 @@
 /* Common declarations for the tar program.
 
    Copyright (C) 1988, 1992, 1993, 1994, 1996, 1997, 1999, 2000, 2001,
-   2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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
@@ -60,6 +61,8 @@
 #define obstack_chunk_alloc xmalloc
 #define obstack_chunk_free free
 #include <obstack.h>
+#include <progname.h>
+#include <xvasprintf.h>
 
 #include <paxlib.h>
 
@@ -70,9 +73,6 @@
 \f
 /* Information gleaned from the command line.  */
 
-/* Name of this program.  */
-GLOBAL const char *program_name;
-
 /* Main command option.  */
 
 enum subcommand
@@ -85,7 +85,8 @@ enum subcommand
   DIFF_SUBCOMMAND,             /* -d */
   EXTRACT_SUBCOMMAND,          /* -x */
   LIST_SUBCOMMAND,             /* -t */
-  UPDATE_SUBCOMMAND            /* -u */
+  UPDATE_SUBCOMMAND,           /* -u */
+  TEST_LABEL_SUBCOMMAND,        /* --test-label */
 };
 
 GLOBAL enum subcommand subcommand_option;
@@ -185,6 +186,8 @@ GLOBAL enum old_files old_files_option;
 
 /* Specified file name for incremental list.  */
 GLOBAL const char *listed_incremental_option;
+/* Incremental dump level */
+GLOBAL int incremental_level;
 /* Check device numbers when doing incremental dumps. */
 GLOBAL bool check_device_option;
 
@@ -318,25 +321,41 @@ GLOBAL const char **archive_name_cursor;
 /* Output index file name.  */
 GLOBAL char const *index_file_name;
 
+/* Opaque structure for keeping directory meta-data */
+struct directory;
+
 /* Structure for keeping track of filenames and lists thereof.  */
 struct name
   {
     struct name *next;          /* Link to the next element */
+    struct name *prev;          /* Link to the previous element */
+
+    char *name;                 /* File name or globbing pattern */
+    size_t length;             /* cached strlen (name) */
+    int matching_flags;         /* wildcard flags if name is a pattern */
+    bool cmdline;               /* true if this name was given in the
+                                  command line */
+    
     int change_dir;            /* Number of the directory to change to.
                                   Set with the -C option. */
     uintmax_t found_count;     /* number of times a matching file has
                                   been found */
-    int matching_flags;                /* this name is a regexp, not literal */
-    char const *dir_contents;  /* for incremental_option */
-
-    size_t length;             /* cached strlen(name) */
-    char name[1];
+    
+    /* The following members are used for incremental dumps only,
+       if this struct name represents a directory;
+       see incremen.c */
+    struct directory *directory;/* directory meta-data and contents */
+    struct name *parent;        /* pointer to the parent hierarchy */
+    struct name *child;         /* pointer to the first child */
+    struct name *sibling;       /* pointer to the next sibling */
+    char *caname;               /* canonical name */
   };
 
 /* Obnoxious test to see if dimwit is trying to dump the archive.  */
 GLOBAL dev_t ar_dev;
 GLOBAL ino_t ar_ino;
 
+GLOBAL int seek_option;
 GLOBAL bool seekable_archive;
 
 GLOBAL dev_t root_device;
@@ -344,8 +363,6 @@ GLOBAL dev_t root_device;
 /* Unquote filenames */
 GLOBAL bool unquote_option;
 
-GLOBAL bool test_label_option; /* Test archive volume label and exit */
-
 /* Show file or archive names after transformation.
    In particular, when creating archive in verbose mode, list member names
    as stored in the archive */
@@ -379,9 +396,13 @@ extern enum access_mode access_mode;
 extern FILE *stdlis;
 extern bool write_archive_to_stdout;
 extern char *volume_label;
+extern size_t volume_label_count;
 extern char *continued_file_name;
 extern uintmax_t continued_file_size;
 extern uintmax_t continued_file_offset;
+extern off_t records_written;
+
+char *drop_volume_label_suffix (const char *label);
 
 size_t available_space_after (union block *pointer);
 off_t current_block_ordinal (void);
@@ -428,19 +449,19 @@ bool cachedir_file_p (const char *name);
 bool file_dumpable_p (struct tar_stat_info *st);
 void create_archive (void);
 void pad_archive (off_t size_left);
-void dump_file (const char *st, int top_level, dev_t parent_device);
+void dump_file (const char *st, bool top_level, dev_t parent_device);
 union block *start_header (struct tar_stat_info *st);
 void finish_header (struct tar_stat_info *st, union block *header,
                    off_t block_ordinal);
 void simple_finish_header (union block *header);
 union block * write_extended (bool global, struct tar_stat_info *st,
                              union block *old_header);
-union block *start_private_header (const char *name, size_t size);
+union block *start_private_header (const char *name, size_t size, time_t t);
 void write_eot (void);
 void check_links (void);
 void exclusion_tag_warning (const char *dirname, const char *tagname,
                            const char *message);
-enum exclusion_tag_type check_exclusion_tags (char *dirname,
+enum exclusion_tag_type check_exclusion_tags (const char *dirname,
                                              const char **tag_file_name);
      
 #define GID_TO_CHARS(val, where) gid_to_chars (val, where, sizeof (where))
@@ -496,9 +517,16 @@ char *dumpdir_locate (dumpdir_t dump, const char *name);
 char *dumpdir_next (dumpdir_iter_t itr);
 char *dumpdir_first (dumpdir_t dump, int all, dumpdir_iter_t *pitr);
 
+struct directory *scan_directory (char *dir, dev_t device, bool cmdline);
+void name_fill_directory (struct name *name, dev_t device, bool cmdline);
+const char *directory_contents (struct directory *dir);
+const char *safe_directory_contents (struct directory *dir);
+
+void rebase_directory (struct directory *dir,
+                      const char *samp, size_t slen,
+                      const char *repl, size_t rlen);
 
-const char *get_directory_contents (char *dir_name, dev_t device);
-const char *append_incremental_renames (const char *dump);
+void append_incremental_renames (struct directory *dir);
 void read_directory_file (void);
 void write_directory_file (void);
 void purge_directory (char const *directory_name);
@@ -520,6 +548,17 @@ enum read_header
   HEADER_FAILURE               /* ill-formed header, or bad checksum */
 };
 
+/* Operation mode for read_header: */
+
+enum read_header_mode
+{
+  read_header_auto,             /* process extended headers automatically */
+  read_header_x_raw,            /* return raw extended headers (return
+                                  HEADER_SUCCESS_EXTENDED) */
+  read_header_x_global          /* when POSIX global extended header is read,
+                                  decode it and return
+                                  HEADER_SUCCESS_EXTENDED */
+};
 extern union block *current_header;
 extern enum archive_format current_format;
 extern size_t recent_long_name_blocks;
@@ -532,7 +571,8 @@ char const *tartime (struct timespec t, bool full_time);
 #define GID_FROM_HEADER(where) gid_from_header (where, sizeof (where))
 #define MAJOR_FROM_HEADER(where) major_from_header (where, sizeof (where))
 #define MINOR_FROM_HEADER(where) minor_from_header (where, sizeof (where))
-#define MODE_FROM_HEADER(where) mode_from_header (where, sizeof (where))
+#define MODE_FROM_HEADER(where, hbits) \
+  mode_from_header (where, sizeof (where), hbits)
 #define OFF_FROM_HEADER(where) off_from_header (where, sizeof (where))
 #define SIZE_FROM_HEADER(where) size_from_header (where, sizeof (where))
 #define TIME_FROM_HEADER(where) time_from_header (where, sizeof (where))
@@ -542,20 +582,22 @@ char const *tartime (struct timespec t, bool full_time);
 gid_t gid_from_header (const char *buf, size_t size);
 major_t major_from_header (const char *buf, size_t size);
 minor_t minor_from_header (const char *buf, size_t size);
-mode_t mode_from_header (const char *buf, size_t size);
+mode_t mode_from_header (const char *buf, size_t size, unsigned *hbits);
 off_t off_from_header (const char *buf, size_t size);
 size_t size_from_header (const char *buf, size_t size);
 time_t time_from_header (const char *buf, size_t size);
 uid_t uid_from_header (const char *buf, size_t size);
-uintmax_t uintmax_from_header (const char * buf, size_t size);
+uintmax_t uintmax_from_header (const char *buf, size_t size);
 
 void list_archive (void);
+void test_archive_label (void);
 void print_for_mkdir (char *dirname, int length, mode_t mode);
-void print_header (struct tar_stat_info *st, off_t block_ordinal);
+void print_header (struct tar_stat_info *st, union block *blk,
+                  off_t block_ordinal);
 void read_and (void (*do_something) (void));
-enum read_header read_header_primitive (bool raw_extended_headers,
-                                       struct tar_stat_info *info);
-enum read_header read_header (bool raw_extended_headers);
+enum read_header read_header (union block **return_block,
+                             struct tar_stat_info *info,
+                             enum read_header_mode m);
 enum read_header tar_checksum (union block *header, bool silent);
 void skip_file (off_t size);
 void skip_member (void);
@@ -565,6 +607,15 @@ void skip_member (void);
 void assign_string (char **dest, const char *src);
 char *quote_copy_string (const char *str);
 int unquote_string (char *str);
+char *zap_slashes (char *name);
+char *normalize_filename (const char *name);
+void replace_prefix (char **pname, const char *samp, size_t slen,
+                    const char *repl, size_t rlen);
+
+typedef struct namebuf *namebuf_t;
+namebuf_t namebuf_create (const char *dir);
+void namebuf_free (namebuf_t buf);
+char *namebuf_name (namebuf_t buf, const char *name);
 
 void code_ns_fraction (int ns, char *p);
 char const *code_timespec (struct timespec ts, char *sbuf);
@@ -594,6 +645,7 @@ int deref_stat (bool deref, char const *name, struct stat *buf);
 
 int chdir_arg (char const *dir);
 void chdir_do (int dir);
+int chdir_count (void);
 
 void close_diag (char const *name);
 void open_diag (char const *name);
@@ -602,6 +654,10 @@ void readlink_diag (char const *name);
 void savedir_diag (char const *name);
 void seek_diag_details (char const *name, off_t offset);
 void stat_diag (char const *name);
+void file_removed_diag (const char *name, bool top_level,
+                       void (*diagfn) (char const *name));
+void dir_removed_diag (char const *name, bool top_level,
+                      void (*diagfn) (char const *name));
 void write_error_details (char const *name, size_t status, size_t size);
 void write_fatal (char const *name) __attribute__ ((noreturn));
 void write_fatal_details (char const *name, ssize_t status, size_t size)
@@ -629,12 +685,14 @@ void name_add_dir (const char *name);
 void name_term (void);
 const char *name_next (int change_dirs);
 void name_gather (void);
-struct name *addname (char const *string, int change_dir);
+struct name *addname (char const *string, int change_dir,
+                     bool cmdline, struct name *parent);
+void remname (struct name *name);
 bool name_match (const char *name);
 void names_notfound (void);
 void collect_and_sort_names (void);
 struct name *name_scan (const char *name);
-char *name_from_list (void);
+struct name const *name_from_list (void);
 void blank_name_list (void);
 char *new_name (const char *dir_name, const char *name);
 size_t stripped_prefix_len (char const *file_name, size_t num);
@@ -666,6 +724,7 @@ void usage (int) __attribute__ ((noreturn));
 int tar_timespec_cmp (struct timespec a, struct timespec b);
 const char *archive_format_string (enum archive_format fmt);
 const char *subcommand_string (enum subcommand c);
+void set_exit_status (int val);
 
 /* Module update.c.  */
 
@@ -681,7 +740,7 @@ void xheader_decode_global (struct xheader *xhdr);
 void xheader_store (char const *keyword, struct tar_stat_info *st,
                    void const *data);
 void xheader_read (struct xheader *xhdr, union block *header, size_t size);
-void xheader_write (char type, char *name, struct xheader *xhdr);
+void xheader_write (char type, char *name, time_t t, struct xheader *xhdr);
 void xheader_write_global (struct xheader *xhdr);
 void xheader_finish (struct xheader *hdr);
 void xheader_destroy (struct xheader *hdr);
@@ -752,3 +811,49 @@ void set_comression_program_by_suffix (const char *name, const char *defprog);
 void checkpoint_compile_action (const char *str);
 void checkpoint_finish_compile (void);
 void checkpoint_run (bool do_write);
+
+/* Module warning.c */
+#define WARN_ALONE_ZERO_BLOCK    0x00000001
+#define WARN_BAD_DUMPDIR         0x00000002
+#define WARN_CACHEDIR            0x00000004
+#define WARN_CONTIGUOUS_CAST     0x00000008
+#define WARN_FILE_CHANGED        0x00000010
+#define WARN_FILE_IGNORED        0x00000020
+#define WARN_FILE_REMOVED        0x00000040
+#define WARN_FILE_SHRANK         0x00000080
+#define WARN_FILE_UNCHANGED      0x00000100
+#define WARN_FILENAME_WITH_NULS  0x00000200
+#define WARN_IGNORE_ARCHIVE      0x00000400
+#define WARN_IGNORE_NEWER        0x00000800
+#define WARN_NEW_DIRECTORY       0x00001000
+#define WARN_RENAME_DIRECTORY    0x00002000
+#define WARN_SYMLINK_CAST        0x00004000
+#define WARN_TIMESTAMP           0x00008000
+#define WARN_UNKNOWN_CAST        0x00010000
+#define WARN_UNKNOWN_KEYWORD     0x00020000
+#define WARN_XDEV                0x00040000
+
+/* The warnings composing WARN_VERBOSE_WARNINGS are enabled by default
+   in verbose mode */
+#define WARN_VERBOSE_WARNINGS    (WARN_RENAME_DIRECTORY|WARN_NEW_DIRECTORY)
+#define WARN_ALL                 (0xffffffff & ~WARN_VERBOSE_WARNINGS)
+
+void set_warning_option (const char *arg);
+
+extern int warning_option;
+
+#define WARNOPT(opt,args)                      \
+  do                                           \
+    {                                          \
+      if (warning_option & opt) WARN (args);   \
+    }                                          \
+  while (0)
+
+/* Module unlink.c */
+
+void queue_deferred_unlink (const char *name, bool is_dir);
+void finish_deferred_unlinks (void);
+
+/* Module exit.c */
+extern void (*fatal_exit_hook) (void);
+
index 66205cb7e34fb63416179da0937fd755b3249e85..f4e92da58f0fa6cf81825ba9c09fa2f502700522 100644 (file)
@@ -1,7 +1,7 @@
 /* Diff files from a tar archive.
 
    Copyright (C) 1988, 1992, 1993, 1994, 1996, 1997, 1999, 2000, 2001,
-   2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   2003, 2004, 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
 
    Written by John Gilmore, on 1987-04-30.
 
@@ -66,8 +66,7 @@ report_difference (struct tar_stat_info *st, const char *fmt, ...)
       fprintf (stdlis, "\n");
     }
 
-  if (exit_status == TAREXIT_SUCCESS)
-    exit_status = TAREXIT_DIFFERS;
+  set_exit_status (TAREXIT_DIFFERS);
 }
 
 /* Take a buffer returned by read_and_process and do nothing with it.  */
@@ -380,7 +379,8 @@ diff_dumpdir (void)
   else
     dev = stat_data.st_dev;
 
-  dumpdir_buffer = get_directory_contents (current_stat_info.file_name, dev);
+  dumpdir_buffer = directory_contents
+                    (scan_directory (current_stat_info.file_name, dev, false));
 
   if (dumpdir_buffer)
     {
@@ -460,7 +460,7 @@ diff_archive (void)
     {
       if (now_verifying)
        fprintf (stdlis, _("Verify "));
-      print_header (&current_stat_info, -1);
+      print_header (&current_stat_info, current_header, -1);
     }
 
   switch (current_header->header.typeflag)
@@ -578,7 +578,9 @@ verify_volume (void)
   flush_read ();
   while (1)
     {
-      enum read_header status = read_header (false);
+      enum read_header status = read_header (&current_header, 
+                                             &current_stat_info, 
+                                             read_header_auto);
 
       if (status == HEADER_FAILURE)
        {
@@ -588,7 +590,8 @@ verify_volume (void)
            {
              counter++;
              set_next_block_after (current_header);
-             status = read_header (false);
+             status = read_header (&current_header, &current_stat_info,
+                                   read_header_auto);
            }
          while (status == HEADER_FAILURE);
 
@@ -606,11 +609,13 @@ verify_volume (void)
             {
              char buf[UINTMAX_STRSIZE_BOUND];
 
-             status = read_header (false);
+             status = read_header (&current_header, &current_stat_info, 
+                                   read_header_auto);
              if (status == HEADER_ZERO_BLOCK)
                break;
-             WARN ((0, 0, _("A lone zero block at %s"),
-                   STRINGIFY_BIGINT (current_block_ordinal (), buf)));
+             WARNOPT (WARN_ALONE_ZERO_BLOCK,
+                      (0, 0, _("A lone zero block at %s"),
+                       STRINGIFY_BIGINT (current_block_ordinal (), buf)));
             }
        }
       
index ff0e9d572c5e8606d0bf6a15c6c387bd4201ccd2..5a2e0b588226e5e8a3d80e49e75bd4bd9e66c59b 100644 (file)
@@ -1,7 +1,7 @@
 /* Create a tar archive.
 
    Copyright (C) 1985, 1992, 1993, 1994, 1996, 1997, 1999, 2000, 2001,
-   2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   2003, 2004, 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
 
    Written by John Gilmore, on 1985-08-25.
 
@@ -63,22 +63,23 @@ exclusion_tag_warning (const char *dirname, const char *tagname,
                       const char *message)
 {
   if (verbose_option)
-    WARN ((0, 0,
-          _("%s: contains a cache directory tag %s; %s"),
-          quotearg_colon (dirname),
-          quotearg_n (1, tagname),
-          message));
+    WARNOPT (WARN_CACHEDIR,
+            (0, 0,
+             _("%s: contains a cache directory tag %s; %s"),
+             quotearg_colon (dirname),
+             quotearg_n (1, tagname),
+             message));
 }
 
 enum exclusion_tag_type 
-check_exclusion_tags (char *dirname, const char **tag_file_name)
+check_exclusion_tags (const char *dirname, const char **tag_file_name)
 {
   static char *tagname;
   static size_t tagsize;
   struct exclusion_tag *tag;
   size_t dlen = strlen (dirname);
-  int addslash = dirname[dlen-1] != '/';
-  char *nptr = NULL;
+  int addslash = !ISSLASH (dirname[dlen-1]);
+  size_t noff = 0;
   
   for (tag = exclusion_tags; tag; tag = tag->next)
     {
@@ -89,14 +90,14 @@ check_exclusion_tags (char *dirname, const char **tag_file_name)
          tagname = xrealloc (tagname, tagsize);
        }
 
-      if (!nptr)
+      if (noff == 0)
        {
          strcpy (tagname, dirname);
-         nptr = tagname + dlen;
+         noff = dlen;
          if (addslash)
-           *nptr++ = '/';
+           tagname[noff++] = '/';
        }
-      strcpy (nptr, tag->name);
+      strcpy (tagname + noff, tag->name);
       if (access (tagname, F_OK) == 0
          && (!tag->predicate || tag->predicate (tagname)))
        {
@@ -401,8 +402,7 @@ mode_to_chars (mode_t v, char *p, size_t s)
       && S_IROTH == TOREAD && S_IWOTH == TOWRITE && S_IXOTH == TOEXEC
       && archive_format != POSIX_FORMAT
       && archive_format != USTAR_FORMAT
-      && archive_format != GNU_FORMAT
-      && archive_format != OLDGNU_FORMAT)
+      && archive_format != GNU_FORMAT)
     {
       negative = v < 0;
       u = v;
@@ -515,9 +515,8 @@ write_eot (void)
 
 /* Write a "private" header */
 union block *
-start_private_header (const char *name, size_t size)
+start_private_header (const char *name, size_t size, time_t t)
 {
-  time_t t;
   union block *header = find_next_block ();
 
   memset (header->buffer, 0, sizeof (union block));
@@ -525,7 +524,6 @@ start_private_header (const char *name, size_t size)
   tar_name_copy_str (header->header.name, name, NAME_FIELD_SIZE);
   OFF_TO_CHARS (size, header->header.size);
 
-  time (&t);
   TIME_TO_CHARS (t, header->header.mtime);
   MODE_TO_CHARS (S_IFREG|S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, header->header.mode);
   UID_TO_CHARS (getuid (), header->header.uid);
@@ -563,13 +561,13 @@ write_gnu_long_link (struct tar_stat_info *st, const char *p, char type)
   union block *header;
   char *tmpname;
 
-  header = start_private_header ("././@LongLink", size);
-  FILL(header->header.mtime, '0');
-  FILL(header->header.mode, '0');
-  FILL(header->header.uid, '0');
-  FILL(header->header.gid, '0');
-  FILL(header->header.devmajor, 0);
-  FILL(header->header.devminor, 0);
+  header = start_private_header ("././@LongLink", size, time (NULL));
+  FILL (header->header.mtime, '0');
+  FILL (header->header.mode, '0');
+  FILL (header->header.uid, '0');
+  FILL (header->header.gid, '0');
+  FILL (header->header.devmajor, 0);
+  FILL (header->header.devminor, 0);
   uid_to_uname (0, &tmpname);
   UNAME_TO_CHARS (tmpname, header->header.uname);
   free (tmpname);
@@ -604,8 +602,10 @@ split_long_name (const char *name, size_t length)
 {
   size_t i;
 
-  if (length > PREFIX_FIELD_SIZE)
+  if (length > PREFIX_FIELD_SIZE + 1)
     length = PREFIX_FIELD_SIZE + 1;
+  else if (ISSLASH (name[length - 1]))
+    length--;
   for (i = length - 1; i > 0; i--)
     if (ISSLASH (name[i]))
       break;
@@ -616,9 +616,9 @@ static union block *
 write_ustar_long_name (const char *name)
 {
   size_t length = strlen (name);
-  size_t i;
+  size_t i, nlen;
   union block *header;
-
+  
   if (length > PREFIX_FIELD_SIZE + NAME_FIELD_SIZE + 1)
     {
       ERROR ((0, 0, _("%s: file name is too long (max %d); not dumped"),
@@ -628,7 +628,7 @@ write_ustar_long_name (const char *name)
     }
 
   i = split_long_name (name, length);
-  if (i == 0 || length - i - 1 > NAME_FIELD_SIZE)
+  if (i == 0 || (nlen = length - i - 1) > NAME_FIELD_SIZE || nlen == 0)
     {
       ERROR ((0, 0,
              _("%s: file name is too long (cannot be split); not dumped"),
@@ -712,7 +712,8 @@ write_extended (bool global, struct tar_stat_info *st, union block *old_header)
   union block *header, hp;
   char *p;
   int type;
-
+  time_t t;
+  
   if (st->xhdr.buffer || st->xhdr.stk == NULL)
     return old_header;
 
@@ -722,13 +723,15 @@ write_extended (bool global, struct tar_stat_info *st, union block *old_header)
     {
       type = XGLTYPE;
       p = xheader_ghdr_name ();
+      time (&t);
     }
   else
     {
       type = XHDTYPE;
       p = xheader_xhdr_name (st);
+      t = st->stat.st_mtime;
     }
-  xheader_write (type, p, &st->xhdr);
+  xheader_write (type, p, t, &st->xhdr);
   free (p);
   header = find_next_block ();
   memcpy (header, &hp.buffer, sizeof (hp.buffer));
@@ -993,11 +996,9 @@ finish_header (struct tar_stat_info *st,
       && header->header.typeflag != XHDTYPE
       && header->header.typeflag != XGLTYPE)
     {
-      /* These globals are parameters to print_header, sigh.  */
-
-      current_header = header;
+      /* FIXME: This global is used in print_header, sigh.  */
       current_format = archive_format;
-      print_header (st, block_ordinal);
+      print_header (st, header, block_ordinal);
     }
 
   header = write_extended (false, st, header);
@@ -1072,14 +1073,15 @@ dump_regular_file (int fd, struct tar_stat_info *st)
        {
          char buf[UINTMAX_STRSIZE_BOUND];
          memset (blk->buffer + count, 0, bufsize - count);
-         WARN ((0, 0,
-                ngettext ("%s: File shrank by %s byte; padding with zeros",
-                          "%s: File shrank by %s bytes; padding with zeros",
-                          size_left),
-                quotearg_colon (st->orig_file_name),
-                STRINGIFY_BIGINT (size_left, buf)));
+         WARNOPT (WARN_FILE_SHRANK,
+                  (0, 0,
+                   ngettext ("%s: File shrank by %s byte; padding with zeros",
+                             "%s: File shrank by %s bytes; padding with zeros",
+                             size_left),
+                   quotearg_colon (st->orig_file_name),
+                   STRINGIFY_BIGINT (size_left, buf)));
          if (! ignore_failed_read_option) 
-           exit_status = TAREXIT_DIFFERS;
+           set_exit_status (TAREXIT_DIFFERS);
          pad_archive (size_left - (bufsize - count));
          return dump_status_short;
        }
@@ -1090,79 +1092,74 @@ dump_regular_file (int fd, struct tar_stat_info *st)
 \f
 static void
 dump_dir0 (char *directory,
-          struct tar_stat_info *st, int top_level, dev_t parent_device)
+          struct tar_stat_info *st, bool top_level, dev_t parent_device)
 {
   dev_t our_device = st->stat.st_dev;
   const char *tag_file_name;
-  
-  if (!is_avoided_name (st->orig_file_name))
-    {
-      union block *blk = NULL;
-      off_t block_ordinal = current_block_ordinal ();
-      st->stat.st_size = 0;    /* force 0 size on dir */
+  union block *blk = NULL;
+  off_t block_ordinal = current_block_ordinal ();
 
-      blk = start_header (st);
-      if (!blk)
-       return;
+  st->stat.st_size = 0;        /* force 0 size on dir */
+
+  blk = start_header (st);
+  if (!blk)
+    return;
 
-      if (incremental_option && archive_format != POSIX_FORMAT)
-       blk->header.typeflag = GNUTYPE_DUMPDIR;
-      else /* if (standard_option) */
-       blk->header.typeflag = DIRTYPE;
+  if (incremental_option && archive_format != POSIX_FORMAT)
+    blk->header.typeflag = GNUTYPE_DUMPDIR;
+  else /* if (standard_option) */
+    blk->header.typeflag = DIRTYPE;
 
-      /* If we're gnudumping, we aren't done yet so don't close it.  */
+  /* If we're gnudumping, we aren't done yet so don't close it.  */
 
-      if (!incremental_option)
-       finish_header (st, blk, block_ordinal);
-      else if (gnu_list_name->dir_contents)
+  if (!incremental_option)
+    finish_header (st, blk, block_ordinal);
+  else if (gnu_list_name->directory)
+    {
+      if (archive_format == POSIX_FORMAT)
        {
-         if (archive_format == POSIX_FORMAT)
-           {
-             xheader_store ("GNU.dumpdir", st, gnu_list_name->dir_contents);
-             finish_header (st, blk, block_ordinal);
-           }
-         else
+         xheader_store ("GNU.dumpdir", st,
+                        safe_directory_contents (gnu_list_name->directory));
+         finish_header (st, blk, block_ordinal);
+       }
+      else
+       {
+         off_t size_left;
+         off_t totsize;
+         size_t bufsize;
+         ssize_t count;
+         const char *buffer, *p_buffer;
+         
+         block_ordinal = current_block_ordinal ();
+         buffer = safe_directory_contents (gnu_list_name->directory);
+         totsize = dumpdir_size (buffer);
+         OFF_TO_CHARS (totsize, blk->header.size);
+         finish_header (st, blk, block_ordinal);
+         p_buffer = buffer;
+         size_left = totsize;
+         
+         mv_begin (st);
+         mv_total_size (totsize);
+         while (size_left > 0)
            {
-             off_t size_left;
-             off_t totsize;
-             size_t bufsize;
-             ssize_t count;
-             const char *buffer, *p_buffer;
-
-             block_ordinal = current_block_ordinal ();
-             buffer = gnu_list_name->dir_contents;
-             if (buffer)
-               totsize = dumpdir_size (buffer);
-             else
-               totsize = 0;
-             OFF_TO_CHARS (totsize, blk->header.size);
-             finish_header (st, blk, block_ordinal);
-             p_buffer = buffer;
-             size_left = totsize;
-
-             mv_begin (st);
-             mv_total_size (totsize);
-             while (size_left > 0)
+             mv_size_left (size_left);
+             blk = find_next_block ();
+             bufsize = available_space_after (blk);
+             if (size_left < bufsize)
                {
-                 mv_size_left (size_left);
-                 blk = find_next_block ();
-                 bufsize = available_space_after (blk);
-                 if (size_left < bufsize)
-                   {
-                     bufsize = size_left;
-                     count = bufsize % BLOCKSIZE;
-                     if (count)
-                       memset (blk->buffer + size_left, 0, BLOCKSIZE - count);
-                   }
-                 memcpy (blk->buffer, p_buffer, bufsize);
-                 size_left -= bufsize;
-                 p_buffer += bufsize;
-                 set_next_block_after (blk + (bufsize - 1) / BLOCKSIZE);
+                 bufsize = size_left;
+                 count = bufsize % BLOCKSIZE;
+                 if (count)
+                   memset (blk->buffer + size_left, 0, BLOCKSIZE - count);
                }
-             mv_end ();
+             memcpy (blk->buffer, p_buffer, bufsize);
+             size_left -= bufsize;
+             p_buffer += bufsize;
+             set_next_block_after (blk + (bufsize - 1) / BLOCKSIZE);
            }
-         return;
+         mv_end ();
        }
+      return;
     }
 
   if (!recursion_option)
@@ -1173,9 +1170,10 @@ dump_dir0 (char *directory,
       && parent_device != st->stat.st_dev)
     {
       if (verbose_option)
-       WARN ((0, 0,
-              _("%s: file is on a different filesystem; not dumped"),
-              quotearg_colon (st->orig_file_name)));
+       WARNOPT (WARN_XDEV,
+                (0, 0,
+                 _("%s: file is on a different filesystem; not dumped"),
+                 quotearg_colon (st->orig_file_name)));
     }
   else
     {
@@ -1209,7 +1207,7 @@ dump_dir0 (char *directory,
                  }
                strcpy (name_buf + name_len, entry);
                if (!excluded_name (name_buf))
-                 dump_file (name_buf, 0, our_device);
+                 dump_file (name_buf, false, our_device);
              }
            
            free (name_buf);
@@ -1223,7 +1221,7 @@ dump_dir0 (char *directory,
          name_buf = xmalloc (name_size);
          strcpy (name_buf, st->orig_file_name);
          strcat (name_buf, tag_file_name);
-         dump_file (name_buf, 0, our_device);
+         dump_file (name_buf, false, our_device);
          free (name_buf);
          break;
       
@@ -1249,7 +1247,8 @@ ensure_slash (char **pstr)
 }
 
 static bool
-dump_dir (int fd, struct tar_stat_info *st, int top_level, dev_t parent_device)
+dump_dir (int fd, struct tar_stat_info *st, bool top_level,
+         dev_t parent_device)
 {
   char *directory = fdsavedir (fd);
   if (!directory)
@@ -1270,7 +1269,7 @@ dump_dir (int fd, struct tar_stat_info *st, int top_level, dev_t parent_device)
 void
 create_archive (void)
 {
-  const char *p;
+  struct name const *p;
 
   open_archive (ACCESS_WRITE);
   buffer_write_global_xheader ();
@@ -1284,24 +1283,24 @@ create_archive (void)
       collect_and_sort_names ();
 
       while ((p = name_from_list ()) != NULL)
-       if (!excluded_name (p))
-         dump_file (p, -1, (dev_t) 0);
+       if (!excluded_name (p->name))
+         dump_file (p->name, p->cmdline, (dev_t) 0);
 
       blank_name_list ();
       while ((p = name_from_list ()) != NULL)
-       if (!excluded_name (p))
+       if (!excluded_name (p->name))
          {
-           size_t plen = strlen (p);
+           size_t plen = strlen (p->name);
            if (buffer_size <= plen)
              {
                while ((buffer_size *= 2) <= plen)
                  continue;
                buffer = xrealloc (buffer, buffer_size);
              }
-           memcpy (buffer, p, plen);
+           memcpy (buffer, p->name, plen);
            if (! ISSLASH (buffer[plen - 1]))
-             buffer[plen++] = '/';
-           q = gnu_list_name->dir_contents;
+             buffer[plen++] = DIRECTORY_SEPARATOR;
+           q = directory_contents (gnu_list_name->directory);
            if (q)
              while (*q)
                {
@@ -1315,7 +1314,7 @@ create_archive (void)
                          buffer = xrealloc (buffer, buffer_size);
                        }
                      strcpy (buffer + plen, q + 1);
-                     dump_file (buffer, -1, (dev_t) 0);
+                     dump_file (buffer, false, (dev_t) 0);
                    }
                  q += qlen + 1;
                }
@@ -1324,14 +1323,15 @@ create_archive (void)
     }
   else
     {
-      while ((p = name_next (1)) != NULL)
-       if (!excluded_name (p))
-         dump_file (p, 1, (dev_t) 0);
+      const char *name;
+      while ((name = name_next (1)) != NULL)
+       if (!excluded_name (name))
+         dump_file (name, true, (dev_t) 0);
     }
 
   write_eot ();
   close_archive ();
-
+  finish_deferred_unlinks ();
   if (listed_incremental_option)
     write_directory_file ();
 }
@@ -1358,10 +1358,11 @@ compare_links (void const *entry1, void const *entry2)
 static void
 unknown_file_error (char const *p)
 {
-  WARN ((0, 0, _("%s: Unknown file type; file ignored"),
-        quotearg_colon (p)));
+  WARNOPT (WARN_FILE_IGNORED,
+          (0, 0, _("%s: Unknown file type; file ignored"),
+           quotearg_colon (p)));
   if (!ignore_failed_read_option)
-    exit_status = TAREXIT_FAILURE;
+    set_exit_status (TAREXIT_FAILURE);
 }
 
 \f
@@ -1410,8 +1411,8 @@ dump_hard_link (struct tar_stat_info *st)
          blk->header.typeflag = LNKTYPE;
          finish_header (st, blk, block_ordinal);
 
-         if (remove_files_option && unlink (st->orig_file_name) != 0)
-           unlink_error (st->orig_file_name);
+         if (remove_files_option)
+           queue_deferred_unlink (st->orig_file_name, false);
 
          return true;
        }
@@ -1427,19 +1428,26 @@ file_count_links (struct tar_stat_info *st)
   if (st->stat.st_nlink > 1)
     {
       struct link *duplicate;
-      struct link *lp = xmalloc (offsetof (struct link, name)
-                                + strlen (st->orig_file_name) + 1);
+      char *linkname = NULL;
+      struct link *lp;
+
+      assign_string (&linkname, st->orig_file_name);
+      transform_name (&linkname, XFORM_LINK);
+      
+      lp = xmalloc (offsetof (struct link, name)
+                                + strlen (linkname) + 1);
       lp->ino = st->stat.st_ino;
       lp->dev = st->stat.st_dev;
       lp->nlink = st->stat.st_nlink;
-      strcpy (lp->name, st->orig_file_name);
-
+      strcpy (lp->name, linkname);
+      free (linkname);
+      
       if (! ((link_table
              || (link_table = hash_initialize (0, 0, hash_link,
                                                compare_links, 0)))
             && (duplicate = hash_insert (link_table, lp))))
        xalloc_die ();
-
+      
       if (duplicate != lp)
        abort ();
       lp->nlink--;
@@ -1466,7 +1474,6 @@ check_links (void)
     }
 }
 
-
 /* Dump a single file, recursing on directories.  P is the file name
    to dump.  TOP_LEVEL tells whether this is a top-level call; zero
    means no, positive means yes, and negative means the top level
@@ -1478,7 +1485,7 @@ check_links (void)
 
 static void
 dump_file0 (struct tar_stat_info *st, const char *p,
-           int top_level, dev_t parent_device)
+           bool top_level, dev_t parent_device)
 {
   union block *header;
   char type;
@@ -1499,7 +1506,7 @@ dump_file0 (struct tar_stat_info *st, const char *p,
 
   if (deref_stat (dereference_option, p, &st->stat) != 0)
     {
-      stat_diag (p);
+      file_removed_diag (p, top_level, stat_diag);
       return;
     }
   st->archive_file_size = original_size = st->stat.st_size;
@@ -1522,32 +1529,31 @@ dump_file0 (struct tar_stat_info *st, const char *p,
 
   /* See if we want only new files, and check if this one is too old to
      put in the archive.
-
+     
      This check is omitted if incremental_option is set *and* the
      requested file is not explicitely listed in the command line. */
-
+  
   if (!(incremental_option && !is_individual_file (p))
       && !S_ISDIR (st->stat.st_mode)
       && OLDER_TAR_STAT_TIME (*st, m)
       && (!after_date_option || OLDER_TAR_STAT_TIME (*st, c)))
     {
       if (!incremental_option && verbose_option)
-       WARN ((0, 0, _("%s: file is unchanged; not dumped"),
-              quotearg_colon (p)));
+       WARNOPT (WARN_FILE_UNCHANGED,
+                (0, 0, _("%s: file is unchanged; not dumped"),
+                 quotearg_colon (p)));
       return;
     }
 
   /* See if we are trying to dump the archive.  */
   if (sys_file_is_archive (st))
     {
-      WARN ((0, 0, _("%s: file is the archive; not dumped"),
-            quotearg_colon (p)));
+      WARNOPT (WARN_IGNORE_ARCHIVE,
+              (0, 0, _("%s: file is the archive; not dumped"),
+               quotearg_colon (p)));
       return;
     }
 
-  if (is_avoided_name (p))
-    return;
-
   is_dir = S_ISDIR (st->stat.st_mode) != 0;
 
   if (!is_dir && dump_hard_link (st))
@@ -1569,11 +1575,7 @@ dump_file0 (struct tar_stat_info *st, const char *p,
                         : 0)));
          if (fd < 0)
            {
-             if (!top_level && errno == ENOENT)
-               WARN ((0, 0, _("%s: File removed before we read it"),
-                      quotearg_colon (p)));
-             else
-               open_diag (p);
+             file_removed_diag (p, top_level, open_diag);
              return;
            }
        }
@@ -1589,6 +1591,8 @@ dump_file0 (struct tar_stat_info *st, const char *p,
            {
              exclusion_tag_warning (st->orig_file_name, tag_file_name,
                                     _("directory not dumped"));
+             if (fd >= 0)
+               close (fd);
              return;
            }
          
@@ -1643,7 +1647,7 @@ dump_file0 (struct tar_stat_info *st, const char *p,
               : fstat (fd, &final_stat))
              != 0)
            {
-             stat_diag (p);
+             file_removed_diag (p, top_level, stat_diag);
              ok = false;
            }
        }
@@ -1656,10 +1660,10 @@ dump_file0 (struct tar_stat_info *st, const char *p,
               && !(remove_files_option && is_dir))
              || original_size < final_stat.st_size)
            {
-             WARN ((0, 0, _("%s: file changed as we read it"),
-                    quotearg_colon (p)));
-             if (exit_status == TAREXIT_SUCCESS)
-               exit_status = TAREXIT_DIFFERS;
+             WARNOPT (WARN_FILE_CHANGED,
+                      (0, 0, _("%s: file changed as we read it"),
+                       quotearg_colon (p)));
+             set_exit_status (TAREXIT_DIFFERS);
            }
          else if (atime_preserve_option == replace_atime_preserve
                   && set_file_atime (fd, p, restore_times) != 0)
@@ -1673,18 +1677,7 @@ dump_file0 (struct tar_stat_info *st, const char *p,
        }
 
       if (ok && remove_files_option)
-       {
-         if (is_dir)
-           {
-             if (rmdir (p) != 0 && errno != ENOTEMPTY)
-               rmdir_error (p);
-           }
-         else
-           {
-             if (unlink (p) != 0)
-               unlink_error (p);
-           }
-       }
+       queue_deferred_unlink (p, is_dir);
 
       return;
     }
@@ -1700,7 +1693,7 @@ dump_file0 (struct tar_stat_info *st, const char *p,
       size = readlink (p, buffer, linklen + 1);
       if (size < 0)
        {
-         readlink_diag (p);
+         file_removed_diag (p, top_level, readlink_diag);
          return;
        }
       buffer[size] = '\0';
@@ -1720,10 +1713,8 @@ dump_file0 (struct tar_stat_info *st, const char *p,
       /* nothing more to do to it */
 
       if (remove_files_option)
-       {
-         if (unlink (p) == -1)
-           unlink_error (p);
-       }
+       queue_deferred_unlink (p, false);
+
       file_count_links (st);
       return;
     }
@@ -1736,12 +1727,14 @@ dump_file0 (struct tar_stat_info *st, const char *p,
     type = FIFOTYPE;
   else if (S_ISSOCK (st->stat.st_mode))
     {
-      WARN ((0, 0, _("%s: socket ignored"), quotearg_colon (p)));
+      WARNOPT (WARN_FILE_IGNORED,
+              (0, 0, _("%s: socket ignored"), quotearg_colon (p)));
       return;
     }
   else if (S_ISDOOR (st->stat.st_mode))
     {
-      WARN ((0, 0, _("%s: door ignored"), quotearg_colon (p)));
+      WARNOPT (WARN_FILE_IGNORED,
+              (0, 0, _("%s: door ignored"), quotearg_colon (p)));
       return;
     }
   else
@@ -1773,14 +1766,11 @@ dump_file0 (struct tar_stat_info *st, const char *p,
 
   finish_header (st, header, block_ordinal);
   if (remove_files_option)
-    {
-      if (unlink (p) == -1)
-       unlink_error (p);
-    }
+    queue_deferred_unlink (p, false);
 }
 
 void
-dump_file (const char *p, int top_level, dev_t parent_device)
+dump_file (const char *p, bool top_level, dev_t parent_device)
 {
   struct tar_stat_info st;
   tar_stat_init (&st);
index d59a857f5f9b663adfbdab89f39eba048e7edf80..75dc01f8961f532bcccd87e18924236f58e01690 100644 (file)
@@ -1,7 +1,7 @@
 /* Delete entries from a tar archive.
 
    Copyright (C) 1988, 1992, 1994, 1996, 1997, 2000, 2001, 2003, 2004,
-   2005, 2006 Free Software Foundation, Inc.
+   2005, 2006, 2010 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
@@ -35,7 +35,6 @@ extern union block *current_block;
 extern union block *recent_long_name;
 extern union block *recent_long_link;
 extern off_t records_read;
-extern off_t records_written;
 
 /* The number of records skipped at the start of the archive, when
    passing over members that are not deleted.  */
@@ -166,7 +165,9 @@ delete_archive_members (void)
 
   do
     {
-      enum read_header status = read_header (true);
+      enum read_header status = read_header (&current_header,
+                                             &current_stat_info,
+                                             read_header_x_raw);
 
       switch (status)
        {
@@ -261,7 +262,8 @@ delete_archive_members (void)
 
          if (current_block == record_end)
            flush_archive ();
-         status = read_header (false);
+         status = read_header (&current_header, &current_stat_info, 
+                               read_header_auto);
 
          xheader_decode (&current_stat_info);
 
diff --git a/src/exit.c b/src/exit.c
new file mode 100644 (file)
index 0000000..ad4d27c
--- /dev/null
@@ -0,0 +1,37 @@
+/* This file is part of GNU tar. 
+   Copyright (C) 2009 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, write to the Free Software Foundation, Inc.,
+   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include <system.h>
+#include "common.h"
+
+void (*fatal_exit_hook) (void);
+
+void
+fatal_exit (void)
+{
+  if (fatal_exit_hook)
+    fatal_exit_hook ();
+  error (TAREXIT_FAILURE, 0, _("Error is not recoverable: exiting now"));
+  abort ();
+}
+
+void
+xalloc_die (void)
+{
+  error (0, 0, "%s", _("memory exhausted"));
+  fatal_exit ();
+}
index 6d703980c3235b9b4244ecb825bad70460b97486..32a883f6592f23a505410a4b09d03b2e066f1e1f 100644 (file)
@@ -1,7 +1,7 @@
 /* Extract files from a tar archive.
 
    Copyright (C) 1988, 1992, 1993, 1994, 1996, 1997, 1998, 1999, 2000,
-   2001, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   2001, 2003, 2004, 2005, 2006, 2007, 2010 Free Software Foundation, Inc.
 
    Written by John Gilmore, on 1985-11-19.
 
@@ -24,6 +24,7 @@
 #include <utimens.h>
 #include <errno.h>
 #include <xgetcwd.h>
+#include <priv-set.h>
 
 #include "common.h"
 
@@ -144,7 +145,8 @@ set_mode (char const *file_name,
          char typeflag)
 {
   mode_t mode;
-
+  bool failed;
+  
   if (0 < same_permissions_option
       && permstatus != INTERDIR_PERMSTATUS)
     {
@@ -186,7 +188,17 @@ set_mode (char const *file_name,
       mode = cur_info->st_mode ^ invert_permissions;
     }
 
-  if (chmod (file_name, mode) != 0)
+  failed = chmod (file_name, mode) != 0;
+  if (failed && errno == EPERM)
+    {
+      /* On Solaris, chmod may fail if we don't have PRIV_ALL.  */
+      if (priv_set_restore_linkdir () == 0)
+       {
+         failed = chmod (file_name, mode) != 0;
+         priv_set_remove_linkdir ();
+       }
+    }
+  if (failed)
     chmod_error_details (file_name, mode);
 }
 
@@ -195,8 +207,9 @@ static void
 check_time (char const *file_name, struct timespec t)
 {
   if (t.tv_sec <= 0)
-    WARN ((0, 0, _("%s: implausibly old time stamp %s"),
-          file_name, tartime (t, true)));
+    WARNOPT (WARN_TIMESTAMP,
+            (0, 0, _("%s: implausibly old time stamp %s"),
+             file_name, tartime (t, true)));
   else if (timespec_cmp (volume_start_time, t) < 0)
     {
       struct timespec now;
@@ -212,8 +225,9 @@ check_time (char const *file_name, struct timespec t)
              diff.tv_nsec += BILLION;
              diff.tv_sec--;
            }
-         WARN ((0, 0, _("%s: time stamp %s is %s s in the future"),
-                file_name, tartime (t, true), code_timespec (diff, buf)));
+         WARNOPT (WARN_TIMESTAMP,
+                  (0, 0, _("%s: time stamp %s is %s s in the future"),
+                   file_name, tartime (t, true), code_timespec (diff, buf)));
        }
     }
 }
@@ -474,9 +488,13 @@ file_newer_p (const char *file_name, struct tar_stat_info *tar_stat)
 
   if (stat (file_name, &st))
     {
-      stat_warn (file_name);
-      /* Be on the safe side: if the file does exist assume it is newer */
-      return errno != ENOENT;
+      if (errno != ENOENT)
+       {
+         stat_warn (file_name);
+         /* Be on the safe side: if the file does exist assume it is newer */
+         return true;
+       }
+      return false;
     }
   if (!S_ISDIR (st.st_mode)
       && tar_timespec_cmp (tar_stat->mtime, get_stat_mtime (&st)) <= 0)
@@ -486,17 +504,24 @@ file_newer_p (const char *file_name, struct tar_stat_info *tar_stat)
   return false;
 }
 
+#define RECOVER_NO 0
+#define RECOVER_OK 1
+#define RECOVER_SKIP 2
+
 /* Attempt repairing what went wrong with the extraction.  Delete an
    already existing file or create missing intermediate directories.
-   Return nonzero if we somewhat increased our chances at a successful
-   extraction.  errno is properly restored on zero return.  */
+   Return RECOVER_OK if we somewhat increased our chances at a successful
+   extraction, RECOVER_NO if there are no chances, and RECOVER_SKIP if the
+   caller should skip extraction of that member.  The value of errno is
+   properly restored on returning RECOVER_NO.  */
+
 static int
 maybe_recoverable (char *file_name, int *interdir_made)
 {
   int e = errno;
 
   if (*interdir_made)
-    return 0;
+    return RECOVER_NO;
 
   switch (errno)
     {
@@ -506,13 +531,13 @@ maybe_recoverable (char *file_name, int *interdir_made)
       switch (old_files_option)
        {
        case KEEP_OLD_FILES:
-         return 0;
+         return RECOVER_SKIP;
 
        case KEEP_NEWER_FILES:
          if (file_newer_p (file_name, &current_stat_info))
            {
              errno = e;
-             return 0;
+             return RECOVER_NO;
            }
          /* FALL THROUGH */
 
@@ -522,7 +547,7 @@ maybe_recoverable (char *file_name, int *interdir_made)
          {
            int r = remove_any_file (file_name, ORDINARY_REMOVE_OPTION);
            errno = EEXIST;
-           return r;
+           return r > 0 ? RECOVER_OK : RECOVER_NO;
          }
 
        case UNLINK_FIRST_OLD_FILES:
@@ -534,15 +559,15 @@ maybe_recoverable (char *file_name, int *interdir_made)
       if (! make_directories (file_name))
        {
          errno = ENOENT;
-         return 0;
+         return RECOVER_NO;
        }
       *interdir_made = 1;
-      return 1;
+      return RECOVER_OK;
 
     default:
       /* Just say we can't do anything about it...  */
 
-      return 0;
+      return RECOVER_NO;
     }
 }
 
@@ -659,6 +684,7 @@ extract_dir (char *file_name, int typeflag)
                }
              if (S_ISDIR (st.st_mode))
                {
+                 status = 0;
                  mode = st.st_mode;
                  break;
                }
@@ -666,13 +692,21 @@ extract_dir (char *file_name, int typeflag)
          errno = EEXIST;
        }
 
-      if (maybe_recoverable (file_name, &interdir_made))
-       continue;
-
-      if (errno != EEXIST)
+      switch (maybe_recoverable (file_name, &interdir_made))
        {
-         mkdir_error (file_name);
-         return 1;
+       case RECOVER_OK:
+         continue;
+
+       case RECOVER_SKIP:
+         break;
+
+       case RECOVER_NO:
+         if (errno != EEXIST)
+           {
+             mkdir_error (file_name);
+             return 1;
+           }
+         break;
        }
       break;
     }
@@ -721,7 +755,8 @@ open_output_file (char *file_name, int typeflag, mode_t mode)
       if (!conttype_diagnosed)
        {
          conttype_diagnosed = 1;
-         WARN ((0, 0, _("Extracting contiguous files as regular files")));
+         WARNOPT (WARN_CONTIGUOUS_CAST,
+                  (0, 0, _("Extracting contiguous files as regular files")));
        }
     }
   fd = open (file_name, openflag, mode);
@@ -760,13 +795,18 @@ extract_file (char *file_name, int typeflag)
     }
   else
     {
+      int recover = RECOVER_NO;
       do
        fd = open_output_file (file_name, typeflag, mode ^ invert_permissions);
-      while (fd < 0 && maybe_recoverable (file_name, &interdir_made));
+      while (fd < 0
+            && (recover = maybe_recoverable (file_name, &interdir_made))
+                == RECOVER_OK);
 
       if (fd < 0)
        {
          skip_member ();
+         if (recover == RECOVER_SKIP)
+           return 0;
          open_error (file_name);
          return 1;
        }
@@ -994,7 +1034,9 @@ extract_symlink (char *file_name, int typeflag)
   if (!warned_once)
     {
       warned_once = 1;
-      WARN ((0, 0, _("Attempting extraction of symbolic links as hard links")));
+      WARNOPT (WARN_SYMBOLIC_CAST,
+              (0, 0,
+               _("Attempting extraction of symbolic links as hard links")));
     }
   return extract_link (file_name, typeflag);
 #endif
@@ -1050,8 +1092,6 @@ extract_fifo (char *file_name, int typeflag)
 static int
 extract_volhdr (char *file_name, int typeflag)
 {
-  if (verbose_option)
-    fprintf (stdlis, _("Reading %s\n"), quote (current_stat_info.file_name));
   skip_member ();
   return 0;
 }
@@ -1152,9 +1192,10 @@ prepare_to_extract (char const *file_name, int typeflag, tar_extractor_t *fun)
       break;
 
     default:
-      WARN ((0, 0,
-            _("%s: Unknown file type `%c', extracted as normal file"),
-            quotearg_colon (file_name), typeflag));
+      WARNOPT (WARN_UNKNOWN_CAST,
+              (0, 0,
+               _("%s: Unknown file type `%c', extracted as normal file"),
+               quotearg_colon (file_name), typeflag));
       *fun = extract_file;
     }
 
@@ -1178,8 +1219,9 @@ prepare_to_extract (char const *file_name, int typeflag, tar_extractor_t *fun)
     case KEEP_NEWER_FILES:
       if (file_newer_p (file_name, &current_stat_info))
        {
-         WARN ((0, 0, _("Current %s is newer or same age"),
-                quote (file_name)));
+         WARNOPT (WARN_IGNORE_NEWER,
+                  (0, 0, _("Current %s is newer or same age"),
+                   quote (file_name)));
          return 0;
        }
       break;
@@ -1198,6 +1240,11 @@ extract_archive (void)
   char typeflag;
   tar_extractor_t fun;
 
+  fatal_exit_hook = extract_finish;
+  
+  /* Try to disable the ability to unlink a directory.  */
+  priv_set_remove_linkdir ();
+
   set_next_block_after (current_header);
   decode_header (current_header, &current_stat_info, &current_format, 1);
   if (!current_stat_info.file_name[0]
@@ -1210,7 +1257,7 @@ extract_archive (void)
 
   /* Print the block from current_header and current_stat.  */
   if (verbose_option)
-    print_header (&current_stat_info, -1);
+    print_header (&current_stat_info, current_header, -1);
 
   /* Restore stats for all non-ancestor directories, unless
      it is an incremental archive.
@@ -1359,18 +1406,3 @@ rename_directory (char *src, char *dst)
     }
   return true;
 }
-
-void
-fatal_exit (void)
-{
-  extract_finish ();
-  error (TAREXIT_FAILURE, 0, _("Error is not recoverable: exiting now"));
-  abort ();
-}
-
-void
-xalloc_die (void)
-{
-  error (0, 0, "%s", _("memory exhausted"));
-  fatal_exit ();
-}
index cd32e196aed99bf5b17f55595387bb973f27d15c..dc880cd88ce32f27d00dea401d3d98309346a7b6 100644 (file)
@@ -1,7 +1,7 @@
 /* GNU dump extensions to tar.
 
    Copyright (C) 1988, 1992, 1993, 1994, 1996, 1997, 1999, 2000, 2001,
-   2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+   2003, 2004, 2005, 2006, 2007, 2008, 2009 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
@@ -73,6 +73,7 @@ struct directory
                                   the original directory structure */
     const char *tagfile;        /* Tag file, if the directory falls under
                                   exclusion_tag_under */
+    char *caname;               /* canonical name */
     char *name;                        /* file name of directory */
   };
 
@@ -212,19 +213,19 @@ static Hash_table *directory_meta_table;
 
 /* Calculate the hash of a directory.  */
 static size_t
-hash_directory_name (void const *entry, size_t n_buckets)
+hash_directory_canonical_name (void const *entry, size_t n_buckets)
 {
   struct directory const *directory = entry;
-  return hash_string (directory->name, n_buckets);
+  return hash_string (directory->caname, n_buckets);
 }
 
 /* Compare two directories for equality of their names. */
 static bool
-compare_directory_names (void const *entry1, void const *entry2)
+compare_directory_canonical_names (void const *entry1, void const *entry2)
 {
   struct directory const *directory1 = entry1;
   struct directory const *directory2 = entry2;
-  return strcmp (directory1->name, directory2->name) == 0;
+  return strcmp (directory1->caname, directory2->caname) == 0;
 }
 
 static size_t
@@ -245,9 +246,11 @@ compare_directory_meta (void const *entry1, void const *entry2)
             && directory1->inode_number == directory2->inode_number;
 }
 
-/* Make a directory entry for given NAME */
+/* Make a directory entry for given relative NAME and canonical name CANAME.
+   The latter is "stolen", i.e. the returned directory contains pointer to
+   it. */
 static struct directory *
-make_directory (const char *name)
+make_directory (const char *name, char *caname)
 {
   size_t namelen = strlen (name);
   struct directory *directory = xmalloc (sizeof (*directory));
@@ -260,6 +263,7 @@ make_directory (const char *name)
   directory->name = xmalloc (namelen + 1);
   memcpy (directory->name, name, namelen);
   directory->name[namelen] = 0;
+  directory->caname = caname;
   directory->tagfile = NULL;
   return directory;
 }
@@ -267,6 +271,7 @@ make_directory (const char *name)
 static void
 free_directory (struct directory *dir)
 {
+  free (dir->caname);
   free (dir->name);
   free (dir);
 }
@@ -274,7 +279,8 @@ free_directory (struct directory *dir)
 static struct directory *
 attach_directory (const char *name)
 {
-  struct directory *dir = make_directory (name);
+  char *cname = normalize_filename (name);
+  struct directory *dir = make_directory (name, cname);
   if (dirtail)
     dirtail->next = dir;
   else
@@ -284,24 +290,6 @@ attach_directory (const char *name)
 }
                 
 \f
-static void
-replace_prefix (char **pname, const char *samp, size_t slen,
-               const char *repl, size_t rlen)
-{
-  char *name = *pname;
-  size_t nlen = strlen (name);
-  if (nlen > slen && memcmp (name, samp, slen) == 0 && ISSLASH (name[slen]))
-    {
-      if (rlen > slen)
-       {
-         name = xrealloc (name, nlen - slen + rlen + 1);
-         *pname = name;
-       }
-      memmove (name + rlen, name + slen, nlen - slen + 1);
-      memcpy (name, repl, rlen);
-    }
-}
-
 void
 dirlist_replace_prefix (const char *pref, const char *repl)
 {
@@ -338,8 +326,8 @@ note_directory (char const *name, struct timespec mtime,
 
   if (! ((directory_table
          || (directory_table = hash_initialize (0, 0,
-                                                hash_directory_name,
-                                                compare_directory_names, 0)))
+                                                hash_directory_canonical_name,
+                                                compare_directory_canonical_names, 0)))
         && hash_insert (directory_table, directory)))
     xalloc_die ();
 
@@ -362,13 +350,38 @@ find_directory (const char *name)
     return 0;
   else
     {
-      struct directory *dir = make_directory (name);
+      char *caname = normalize_filename (name);
+      struct directory *dir = make_directory (name, caname);
       struct directory *ret = hash_lookup (directory_table, dir);
       free_directory (dir);
       return ret;
     }
 }
 
+#if 0
+/* Remove directory entry for the given CANAME */
+void
+remove_directory (const char *caname)
+{
+  struct directory *dir = make_directory (caname, xstrdup (caname));
+  struct directory *ret = hash_delete (directory_table, dir);
+  if (ret)
+    free_directory (ret);
+  free_directory (dir);
+}
+#endif
+
+/* If first OLD_PREFIX_LEN bytes of DIR->NAME name match OLD_PREFIX,
+   replace them with NEW_PREFIX. */
+void
+rebase_directory (struct directory *dir,
+                 const char *old_prefix, size_t old_prefix_len,
+                 const char *new_prefix, size_t new_prefix_len)
+{
+  replace_prefix (&dir->name, old_prefix, old_prefix_len,
+                 new_prefix, new_prefix_len);
+}
+
 /* Return a directory entry for a given combination of device and inode
    numbers, or zero if none found.  */
 static struct directory *
@@ -378,7 +391,7 @@ find_directory_meta (dev_t dev, ino_t ino)
     return 0;
   else
     {
-      struct directory *dir = make_directory ("");
+      struct directory *dir = make_directory ("", NULL);
       struct directory *ret;
       dir->device_number = dev;
       dir->inode_number = ino;
@@ -400,19 +413,23 @@ update_parent_directory (const char *name)
     {
       struct stat st;
       if (deref_stat (dereference_option, p, &st) != 0)
-       stat_diag (name);
+       {
+         if (errno != ENOENT) 
+           stat_diag (directory->name);
+         /* else: should have been already reported */
+       }
       else
        directory->mtime = get_stat_mtime (&st);
     }
   free (p);
 }
 
-#define PD_VERBOSE        0x10
-#define PD_FORCE_CHILDREN 0x20
+#define PD_FORCE_CHILDREN 0x10
+#define PD_FORCE_INIT     0x20
 #define PD_CHILDREN(f) ((f) & 3)
 
 static struct directory *
-procdir (char *name_buffer, struct stat *stat_data,
+procdir (const char *name_buffer, struct stat *stat_data,
         dev_t device,
         int flag,
         char *entry)
@@ -423,15 +440,31 @@ procdir (char *name_buffer, struct stat *stat_data,
   if ((directory = find_directory (name_buffer)) != NULL)
     {
       if (DIR_IS_INITED (directory))
-       return directory;
+       {
+         if (flag & PD_FORCE_INIT)
+           {
+             assign_string (&directory->name, name_buffer);
+           }
+         else
+           {
+             *entry = 'N'; /* Avoid duplicating this directory */
+             return directory;
+           }
+       }
 
+      if (strcmp (directory->name, name_buffer))
+       {
+         *entry = 'N';
+         return directory;
+       }
+      
       /* With NFS, the same file can have two different devices
         if an NFS directory is mounted in multiple locations,
         which is relatively common when automounting.
         To avoid spurious incremental redumping of
         directories, consider all NFS devices as equal,
         relying on the i-node to establish differences.  */
-
+      
       if (! ((!check_device_option
              || (DIR_IS_NFS (directory) && nfs)
              || directory->device_number == stat_data->st_dev)
@@ -444,10 +477,11 @@ procdir (char *name_buffer, struct stat *stat_data,
            {
              if (strcmp (d->name, name_buffer))
                {
-                 if (verbose_option)
-                   WARN ((0, 0, _("%s: Directory has been renamed from %s"),
-                          quotearg_colon (name_buffer),
-                          quote_n (1, d->name)));
+                 WARNOPT (WARN_RENAME_DIRECTORY,
+                          (0, 0,
+                           _("%s: Directory has been renamed from %s"),
+                           quotearg_colon (name_buffer),
+                           quote_n (1, d->name)));
                  directory->orig = d;
                  DIR_SET_FLAG (directory, DIRF_RENAMED);
                  dirlist_replace_prefix (d->name, name_buffer);
@@ -456,9 +490,9 @@ procdir (char *name_buffer, struct stat *stat_data,
            }
          else
            {
-             if (verbose_option)
-               WARN ((0, 0, _("%s: Directory has been renamed"),
-                      quotearg_colon (name_buffer)));
+             WARNOPT (WARN_RENAME_DIRECTORY,
+                      (0, 0, _("%s: Directory has been renamed"),
+                       quotearg_colon (name_buffer)));
              directory->children = ALL_CHILDREN;
              directory->device_number = stat_data->st_dev;
              directory->inode_number = stat_data->st_ino;
@@ -468,14 +502,14 @@ procdir (char *name_buffer, struct stat *stat_data,
        }
       else
        directory->children = CHANGED_CHILDREN;
-
+      
       DIR_SET_FLAG (directory, DIRF_FOUND);
     }
   else
     {
       struct directory *d = find_directory_meta (stat_data->st_dev,
                                                 stat_data->st_ino);
-
+      
       directory = note_directory (name_buffer,
                                  get_stat_mtime(stat_data),
                                  stat_data->st_dev,
@@ -488,10 +522,10 @@ procdir (char *name_buffer, struct stat *stat_data,
        {
          if (strcmp (d->name, name_buffer))
            {
-             if (flag & PD_VERBOSE)
-               WARN ((0, 0, _("%s: Directory has been renamed from %s"),
-                      quotearg_colon (name_buffer),
-                      quote_n (1, d->name)));
+             WARNOPT (WARN_RENAME_DIRECTORY,
+                      (0, 0, _("%s: Directory has been renamed from %s"),
+                       quotearg_colon (name_buffer),
+                       quote_n (1, d->name)));
              directory->orig = d;
              DIR_SET_FLAG (directory, DIRF_RENAMED);
              dirlist_replace_prefix (d->name, name_buffer);
@@ -501,9 +535,9 @@ procdir (char *name_buffer, struct stat *stat_data,
       else
        {
          DIR_SET_FLAG (directory, DIRF_NEW);
-         if (flag & PD_VERBOSE)
-           WARN ((0, 0, _("%s: Directory is new"),
-                  quotearg_colon (name_buffer)));
+         WARNOPT (WARN_NEW_DIRECTORY,
+                  (0, 0, _("%s: Directory is new"),
+                   quotearg_colon (name_buffer)));
          directory->children =
            (listed_incremental_option
             || (OLDER_STAT_TIME (*stat_data, m)
@@ -519,6 +553,12 @@ procdir (char *name_buffer, struct stat *stat_data,
   if (one_file_system_option && device != stat_data->st_dev
       /* ... except if it was explicitely given in the command line */
       && !is_individual_file (name_buffer))
+    /* FIXME: 
+       WARNOPT (WARN_XDEV,
+                (0, 0,
+                 _("%s: directory is on a different filesystem; not dumped"),
+                 quotearg_colon (directory->name)));
+    */
     directory->children = NO_CHILDREN;
   else if (flag & PD_FORCE_CHILDREN)
     {
@@ -541,8 +581,7 @@ procdir (char *name_buffer, struct stat *stat_data,
             an exclusion tag. */
          exclusion_tag_warning (name_buffer, tag_file_name,
                                 _("directory not dumped"));
-         if (entry)
-           *entry = 'N';
+         *entry = 'N';
          directory->children = NO_CHILDREN;
          break;
 
@@ -643,44 +682,47 @@ makedumpdir (struct directory *directory, const char *dir)
   free (array);
 }
 
-/* Recursively scan the given directory. */
-static const char *
-scan_directory (char *dir, dev_t device)
+/* Recursively scan the given directory DIR.
+   DEVICE is the device number where DIR resides (for --one-file-system).
+   If CMDLINE is true, the directory name was explicitly listed in the
+   command line.
+   Unless *PDIR is NULL, store there a pointer to the struct directory
+   describing DIR. */
+struct directory *
+scan_directory (char *dir, dev_t device, bool cmdline)
 {
   char *dirp = savedir (dir);  /* for scanning directory */
-  char *name_buffer;           /* directory, `/', and directory member */
-  size_t name_buffer_size;     /* allocated size of name_buffer, minus 2 */
-  size_t name_length;          /* used length in name_buffer */
+  namebuf_t nbuf;
+  char *tmp;
   struct stat stat_data;
   struct directory *directory;
+  char ch;
   
   if (! dirp)
     savedir_error (dir);
 
-  name_buffer_size = strlen (dir) + NAME_FIELD_SIZE;
-  name_buffer = xmalloc (name_buffer_size + 2);
-  strcpy (name_buffer, dir);
-  if (! ISSLASH (dir[strlen (dir) - 1]))
-    strcat (name_buffer, "/");
-  name_length = strlen (name_buffer);
-
-  if (deref_stat (dereference_option, name_buffer, &stat_data))
+  tmp = xstrdup (dir);
+  zap_slashes (tmp);
+  
+  if (deref_stat (dereference_option, tmp, &stat_data))
     {
-      stat_diag (name_buffer);
-      /* FIXME: used to be
-           children = CHANGED_CHILDREN;
-        but changed to: */
-      free (name_buffer);
+      dir_removed_diag (tmp, cmdline, stat_diag);
+      free (tmp);
       free (dirp);
       return NULL;
     }
 
-  directory = procdir (name_buffer, &stat_data, device, 0, NULL);
+  directory = procdir (tmp, &stat_data, device,
+                      (cmdline ? PD_FORCE_INIT : 0),
+                      &ch);
+  
+  free (tmp);
+
+  nbuf = namebuf_create (dir);
 
   if (dirp && directory->children != NO_CHILDREN)
     {
       char *entry;     /* directory entry being scanned */
-      size_t entrylen; /* length of directory entry */
       dumpdir_iter_t itr;
 
       makedumpdir (directory, dirp);
@@ -689,38 +731,30 @@ scan_directory (char *dir, dev_t device)
           entry;
           entry = dumpdir_next (itr))
        {
-         entrylen = strlen (entry);
-         if (name_buffer_size <= entrylen - 1 + name_length)
-           {
-             do
-               name_buffer_size += NAME_FIELD_SIZE;
-             while (name_buffer_size <= entrylen - 1 + name_length);
-             name_buffer = xrealloc (name_buffer, name_buffer_size + 2);
-           }
-         strcpy (name_buffer + name_length, entry + 1);
+         char *full_name = namebuf_name (nbuf, entry + 1);
 
          if (*entry == 'I') /* Ignored entry */
            *entry = 'N';
-         else if (excluded_name (name_buffer))
+         else if (excluded_name (full_name))
            *entry = 'N';
          else
            {
-             if (deref_stat (dereference_option, name_buffer, &stat_data))
+             if (deref_stat (dereference_option, full_name, &stat_data))
                {
-                 stat_diag (name_buffer);
+                 file_removed_diag (full_name, false, stat_diag);
                  *entry = 'N';
                  continue;
                }
 
              if (S_ISDIR (stat_data.st_mode))
                {
-                 int pd_flag = (verbose_option ? PD_VERBOSE : 0);
+                 int pd_flag = 0;
                  if (!recursion_option)
                    pd_flag |= PD_FORCE_CHILDREN | NO_CHILDREN;
                  else if (directory->children == ALL_CHILDREN)
                    pd_flag |= PD_FORCE_CHILDREN | ALL_CHILDREN;
                  *entry = 'D';
-                 procdir (name_buffer, &stat_data, device, pd_flag, entry);
+                 procdir (full_name, &stat_data, device, pd_flag, entry);
                }
 
              else if (one_file_system_option && device != stat_data.st_dev)
@@ -742,17 +776,35 @@ scan_directory (char *dir, dev_t device)
       free (itr);
     }
 
-  free (name_buffer);
+  namebuf_free (nbuf);
+
   if (dirp)
     free (dirp);
 
-  return directory->dump ? directory->dump->contents : NULL;
+  return directory;
+}
+
+/* Return pointer to the contents of the directory DIR */
+const char *
+directory_contents (struct directory *dir)
+{
+  if (!dir)
+    return NULL;
+  return dir->dump ? dir->dump->contents : NULL;
 }
 
+/* A "safe" version of directory_contents, which never returns NULL. */
 const char *
-get_directory_contents (char *dir, dev_t device)
+safe_directory_contents (struct directory *dir)
+{
+  const char *ret = directory_contents (dir);
+  return ret ? ret : "\0\0\0\0";
+}
+
+void
+name_fill_directory (struct name *name, dev_t device, bool cmdline)
 {
-  return scan_directory (dir, device);
+  name->directory = scan_directory (name->name, device, cmdline);
 }
 
 \f
@@ -815,17 +867,19 @@ store_rename (struct directory *dir, struct obstack *stk)
     }
 }
 
-const char *
-append_incremental_renames (const char *dump)
+void
+append_incremental_renames (struct directory *dir)
 {
   struct obstack stk;
   size_t size;
   struct directory *dp;
+  const char *dump;
   
   if (dirhead == NULL)
-    return dump;
+    return;
 
   obstack_init (&stk);
+  dump = directory_contents (dir);
   if (dump)
     {
       size = dumpdir_size (dump) - 1;
@@ -840,11 +894,10 @@ append_incremental_renames (const char *dump)
   if (obstack_object_size (&stk) != size)
     {
       obstack_1grow (&stk, 0);
-      dump = obstack_finish (&stk);
+      dumpdir_free (dir->dump);
+      dir->dump = dumpdir_create (obstack_finish (&stk));
     }
-  else
-    obstack_free (&stk, NULL);
-  return dump;
+  obstack_free (&stk, NULL);
 }
 
 \f
@@ -869,8 +922,8 @@ read_incr_db_01 (int version, const char *initbuf)
   uintmax_t u;
   time_t sec;
   long int nsec;
-  char *buf = 0;
-  size_t bufsize;
+  char *buf = NULL;
+  size_t bufsize = 0;
   char *ebuf;
   long lineno = 1;
 
@@ -1229,13 +1282,16 @@ void
 read_directory_file (void)
 {
   int fd;
-  char *buf = 0;
-  size_t bufsize;
+  char *buf = NULL;
+  size_t bufsize = 0;
+  int flags = O_RDWR | O_CREAT;
 
+  if (incremental_level == 0)
+    flags |= O_TRUNC;
   /* Open the file for both read and write.  That way, we can write
      it later without having to reopen it, and don't have to worry if
      we chdir in the meantime.  */
-  fd = open (listed_incremental_option, O_RDWR | O_CREAT, MODE_RW);
+  fd = open (listed_incremental_option, flags, MODE_RW);
   if (fd < 0)
     {
       open_error (listed_incremental_option);
@@ -1250,6 +1306,13 @@ read_directory_file (void)
       return;
     }
 
+  /* Consume the first name from the name list and reset the
+     list afterwards.  This is done to change to the new
+     directory, if the first name is a chdir request (-C dir),
+     which is necessary to recreate absolute file names. */
+  name_from_list ();
+  blank_name_list ();
+  
   if (0 < getline (&buf, &bufsize, listed_incremental_stream))
     {
       char *ebuf;
@@ -1347,7 +1410,7 @@ write_directory_file (void)
   if (! fp)
     return;
 
-  if (fseek (fp, 0L, SEEK_SET) != 0)
+  if (fseeko (fp, 0L, SEEK_SET) != 0)
     seek_error (listed_incremental_option);
   if (sys_truncate (fileno (fp)) != 0)
     truncate_error (listed_incremental_option);
@@ -1504,7 +1567,8 @@ dumpdir_ok (char *dumpdir)
     }
 
   if (has_tempdir)
-    WARN ((0, 0, _("Malformed dumpdir: 'X' never used")));
+    WARNOPT (WARN_BAD_DUMPDIR,
+            (0, 0, _("Malformed dumpdir: 'X' never used")));
 
   return true;
 }
index 126a3c1fb8b2732a5fefe724bceb21e41fb3376b..6dbc439a0c61580b74a73d11efb671467381652a 100644 (file)
@@ -1,7 +1,7 @@
 /* List a tar archive, with support routines for reading a tar archive.
 
    Copyright (C) 1988, 1992, 1993, 1994, 1996, 1997, 1998, 1999, 2000,
-   2001, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   2001, 2003, 2004, 2005, 2006, 2007, 2010 Free Software Foundation, Inc.
 
    Written by John Gilmore, on 1985-08-26.
 
@@ -33,6 +33,7 @@ union block *recent_long_name;        /* recent long name header and contents */
 union block *recent_long_link; /* likewise, for long link */
 size_t recent_long_name_blocks;        /* number of blocks in recent_long_name */
 size_t recent_long_link_blocks;        /* likewise, for long link */
+union block *recent_global_header; /* Recent global header block */
 
 static uintmax_t from_header (const char *, size_t, const char *,
                              uintmax_t, uintmax_t, bool, bool);
@@ -77,7 +78,8 @@ read_and (void (*do_something) (void))
       prev_status = status;
       tar_stat_destroy (&current_stat_info);
 
-      status = read_header (false);
+      status = read_header (&current_header, &current_stat_info, 
+                            read_header_auto);
       switch (status)
        {
        case HEADER_STILL_UNREAD:
@@ -138,7 +140,8 @@ read_and (void (*do_something) (void))
            {
              char buf[UINTMAX_STRSIZE_BOUND];
 
-             status = read_header (false);
+             status = read_header (&current_header, &current_stat_info, 
+                                   read_header_auto);
              if (status == HEADER_ZERO_BLOCK)
                break;
              /* 
@@ -148,8 +151,9 @@ read_and (void (*do_something) (void))
               * let's not be pedantic about issuing the warning.
               */
 #if 0         
-             WARN ((0, 0, _("A lone zero block at %s"),
-                    STRINGIFY_BIGINT (current_block_ordinal (), buf)));
+             WARNOPT (WARN_ALONE_ZERO_BLOCK,
+                      (0, 0, _("A lone zero block at %s"),
+                       STRINGIFY_BIGINT (current_block_ordinal (), buf)));
 #endif
              break;
            }
@@ -212,11 +216,12 @@ void
 list_archive (void)
 {
   off_t block_ordinal = current_block_ordinal ();
-  /* Print the header block.  */
 
+  /* Print the header block.  */
+  
   decode_header (current_header, &current_stat_info, &current_format, 0);
   if (verbose_option)
-    print_header (&current_stat_info, block_ordinal);
+    print_header (&current_stat_info, current_header, block_ordinal);
 
   if (incremental_option)
     {
@@ -287,20 +292,29 @@ tar_checksum (union block *header, bool silent)
 }
 
 /* Read a block that's supposed to be a header block.  Return its
-   address in "current_header", and if it is good, the file's size
-   and names (file name, link name) in *info.
+   address in *RETURN_BLOCK, and if it is good, the file's size
+   and names (file name, link name) in *INFO.
 
-   Return 1 for success, 0 if the checksum is bad, EOF on eof, 2 for a
-   block full of zeros (EOF marker).
+   Return one of enum read_header describing the status of the
+   operation.
 
-   If RAW_EXTENDED_HEADERS is nonzero, do not automagically fold the
-   GNU long name and link headers into later headers.
+   The MODE parameter instructs read_header what to do with special
+   header blocks, i.e.: extended POSIX, GNU long name or long link,
+   etc.:
 
-   You must always set_next_block_after(current_header) to skip past
+     read_header_auto        process them automatically,
+     read_header_x_raw       when a special header is read, return
+                             HEADER_SUCCESS_EXTENDED without actually
+                            processing the header,
+     read_header_x_global    when a POSIX global header is read,
+                             decode it and return HEADER_SUCCESS_EXTENDED.
+
+   You must always set_next_block_after(*return_block) to skip past
    the header which this routine reads.  */
 
 enum read_header
-read_header_primitive (bool raw_extended_headers, struct tar_stat_info *info)
+read_header (union block **return_block, struct tar_stat_info *info,
+            enum read_header_mode mode)
 {
   union block *header;
   union block *header_copy;
@@ -317,7 +331,7 @@ read_header_primitive (bool raw_extended_headers, struct tar_stat_info *info)
       enum read_header status;
 
       header = find_next_block ();
-      current_header = header;
+      *return_block = header;
       if (!header)
        return HEADER_END_OF_FILE;
 
@@ -337,7 +351,7 @@ read_header_primitive (bool raw_extended_headers, struct tar_stat_info *info)
          || header->header.typeflag == XGLTYPE
          || header->header.typeflag == SOLARIS_XHDTYPE)
        {
-         if (raw_extended_headers)
+         if (mode == read_header_x_raw)
            return HEADER_SUCCESS_EXTENDED;
          else if (header->header.typeflag == GNUTYPE_LONGNAME
                   || header->header.typeflag == GNUTYPE_LONGLINK)
@@ -399,11 +413,18 @@ read_header_primitive (bool raw_extended_headers, struct tar_stat_info *info)
          else if (header->header.typeflag == XGLTYPE)
            {
              struct xheader xhdr;
+
+             if (!recent_global_header)
+               recent_global_header = xmalloc (sizeof *recent_global_header);
+             memcpy (recent_global_header, header,
+                     sizeof *recent_global_header);
              memset (&xhdr, 0, sizeof xhdr);
              xheader_read (&xhdr, header,
                            OFF_FROM_HEADER (header->header.size));
              xheader_decode_global (&xhdr);
              xheader_destroy (&xhdr);
+             if (mode == read_header_x_global)
+               return HEADER_SUCCESS_EXTENDED;
            }
 
          /* Loop!  */
@@ -412,7 +433,7 @@ read_header_primitive (bool raw_extended_headers, struct tar_stat_info *info)
       else
        {
          char const *name;
-         struct posix_header const *h = &current_header->header;
+         struct posix_header const *h = &header->header;
          char namebuf[sizeof h->prefix + 1 + NAME_FIELD_SIZE + 1];
 
          if (recent_long_name)
@@ -471,12 +492,6 @@ read_header_primitive (bool raw_extended_headers, struct tar_stat_info *info)
     }
 }
 
-enum read_header
-read_header (bool raw_extended_headers)
-{
-  return read_header_primitive (raw_extended_headers, &current_stat_info);
-}
-
 static char *
 decode_xform (char *file_name, void *data)
 {
@@ -538,7 +553,9 @@ decode_header (union block *header, struct tar_stat_info *stat_info,
               enum archive_format *format_pointer, int do_user_group)
 {
   enum archive_format format;
-
+  unsigned hbits; /* high bits of the file mode. */
+  mode_t mode = MODE_FROM_HEADER (header->header.mode, &hbits);
+  
   if (strcmp (header->header.magic, TMAGIC) == 0)
     {
       if (header->star_header.prefix[130] == 0
@@ -553,12 +570,12 @@ decode_header (union block *header, struct tar_stat_info *stat_info,
        format = USTAR_FORMAT;
     }
   else if (strcmp (header->header.magic, OLDGNU_MAGIC) == 0)
-    format = OLDGNU_FORMAT;
+    format = hbits ? OLDGNU_FORMAT : GNU_FORMAT;
   else
     format = V7_FORMAT;
   *format_pointer = format;
 
-  stat_info->stat.st_mode = MODE_FROM_HEADER (header->header.mode);
+  stat_info->stat.st_mode = mode;
   stat_info->mtime.tv_sec = TIME_FROM_HEADER (header->header.mtime);
   stat_info->mtime.tv_nsec = 0;
   assign_string (&stat_info->uname,
@@ -675,7 +692,8 @@ from_header (char const *where0, size_t digs, char const *type,
        {
          if (type && !silent)
            ERROR ((0, 0,
-                   /* TRANSLATORS: %s is type of the value (gid_t, uid_t, etc.) */
+                   /* TRANSLATORS: %s is type of the value (gid_t, uid_t,
+                      etc.) */
                    _("Blanks in header where numeric %s value expected"),
                    type));
          return -1;
@@ -892,25 +910,28 @@ minor_from_header (const char *p, size_t s)
                      (uintmax_t) TYPE_MAXIMUM (minor_t), false, false);
 }
 
+/* Convert P to the file mode, as understood by tar.
+   Store unrecognized mode bits (from 10th up) in HBITS. */
 mode_t
-mode_from_header (const char *p, size_t s)
+mode_from_header (const char *p, size_t s, unsigned *hbits)
 {
-  /* Do not complain about unrecognized mode bits.  */
   unsigned u = from_header (p, s, "mode_t",
                            - (uintmax_t) TYPE_MINIMUM (mode_t),
                            TYPE_MAXIMUM (uintmax_t), false, false);
-  return ((u & TSUID ? S_ISUID : 0)
-         | (u & TSGID ? S_ISGID : 0)
-         | (u & TSVTX ? S_ISVTX : 0)
-         | (u & TUREAD ? S_IRUSR : 0)
-         | (u & TUWRITE ? S_IWUSR : 0)
-         | (u & TUEXEC ? S_IXUSR : 0)
-         | (u & TGREAD ? S_IRGRP : 0)
-         | (u & TGWRITE ? S_IWGRP : 0)
-         | (u & TGEXEC ? S_IXGRP : 0)
-         | (u & TOREAD ? S_IROTH : 0)
-         | (u & TOWRITE ? S_IWOTH : 0)
-         | (u & TOEXEC ? S_IXOTH : 0));
+  mode_t mode = ((u & TSUID ? S_ISUID : 0)
+                | (u & TSGID ? S_ISGID : 0)
+                | (u & TSVTX ? S_ISVTX : 0)
+                | (u & TUREAD ? S_IRUSR : 0)
+                | (u & TUWRITE ? S_IWUSR : 0)
+                | (u & TUEXEC ? S_IXUSR : 0)
+                | (u & TGREAD ? S_IRGRP : 0)
+                | (u & TGWRITE ? S_IWGRP : 0)
+                | (u & TGEXEC ? S_IXGRP : 0)
+                | (u & TOREAD ? S_IROTH : 0)
+                | (u & TOWRITE ? S_IWOTH : 0)
+                | (u & TOEXEC ? S_IXOTH : 0));
+  *hbits = mode ^ u;
+  return mode;
 }
 
 off_t
@@ -1021,9 +1042,6 @@ tartime (struct timespec t, bool full_time)
    they shouldn't.  Unix tar is pretty random here anyway.  */
 
 
-/* FIXME: Note that print_header uses the globals HEAD, HSTAT, and
-   HEAD_STANDARD, which must be set up in advance.  Not very clean..  */
-
 /* Width of "user/group size", with initial value chosen
    heuristically.  This grows as needed, though this may cause some
    stairstepping in the output.  Make it too small and the output will
@@ -1036,8 +1054,11 @@ static int ugswidth = 19;
    USGWIDTH, some stairstepping may occur.  */
 static int datewidth = sizeof "YYYY-MM-DD HH:MM" - 1;
 
-void
-print_header (struct tar_stat_info *st, off_t block_ordinal)
+static bool volume_label_printed = false;
+
+static void
+simple_print_header (struct tar_stat_info *st, union block *blk,
+                    off_t block_ordinal)
 {
   char modes[11];
   char const *time_stamp;
@@ -1053,9 +1074,6 @@ print_header (struct tar_stat_info *st, off_t block_ordinal)
   int pad;
   int sizelen;
 
-  if (test_label_option && current_header->header.typeflag != GNUTYPE_VOLHDR)
-    return;
-
   if (show_transformed_names_option)
     temp_name = st->file_name ? st->file_name : st->orig_file_name;
   else
@@ -1082,9 +1100,10 @@ print_header (struct tar_stat_info *st, off_t block_ordinal)
       /* File type and modes.  */
 
       modes[0] = '?';
-      switch (current_header->header.typeflag)
+      switch (blk->header.typeflag)
        {
        case GNUTYPE_VOLHDR:
+         volume_label_printed = true;
          modes[0] = 'V';
          break;
 
@@ -1152,8 +1171,8 @@ print_header (struct tar_stat_info *st, off_t block_ordinal)
          /* Try parsing it as an unsigned integer first, and as a
             uid_t if that fails.  This method can list positive user
             ids that are too large to fit in a uid_t.  */
-         uintmax_t u = from_header (current_header->header.uid,
-                                    sizeof current_header->header.uid, 0,
+         uintmax_t u = from_header (blk->header.uid,
+                                    sizeof blk->header.uid, 0,
                                     (uintmax_t) 0,
                                     (uintmax_t) TYPE_MAXIMUM (uintmax_t),
                                     false, false);
@@ -1162,7 +1181,7 @@ print_header (struct tar_stat_info *st, off_t block_ordinal)
          else
            {
              sprintf (uform, "%ld",
-                      (long) UID_FROM_HEADER (current_header->header.uid));
+                      (long) UID_FROM_HEADER (blk->header.uid));
              user = uform;
            }
        }
@@ -1177,8 +1196,8 @@ print_header (struct tar_stat_info *st, off_t block_ordinal)
          /* Try parsing it as an unsigned integer first, and as a
             gid_t if that fails.  This method can list positive group
             ids that are too large to fit in a gid_t.  */
-         uintmax_t g = from_header (current_header->header.gid,
-                                    sizeof current_header->header.gid, 0,
+         uintmax_t g = from_header (blk->header.gid,
+                                    sizeof blk->header.gid, 0,
                                     (uintmax_t) 0,
                                     (uintmax_t) TYPE_MAXIMUM (uintmax_t),
                                     false, false);
@@ -1187,14 +1206,14 @@ print_header (struct tar_stat_info *st, off_t block_ordinal)
          else
            {
              sprintf (gform, "%ld",
-                      (long) GID_FROM_HEADER (current_header->header.gid));
+                      (long) GID_FROM_HEADER (blk->header.gid));
              group = gform;
            }
        }
 
       /* Format the file size or major/minor device numbers.  */
 
-      switch (current_header->header.typeflag)
+      switch (blk->header.typeflag)
        {
        case CHRTYPE:
        case BLKTYPE:
@@ -1224,7 +1243,7 @@ print_header (struct tar_stat_info *st, off_t block_ordinal)
 
       fprintf (stdlis, " %s", quotearg (temp_name));
 
-      switch (current_header->header.typeflag)
+      switch (blk->header.typeflag)
        {
        case SYMTYPE:
          fprintf (stdlis, " -> %s\n", quotearg (st->link_name));
@@ -1237,7 +1256,7 @@ print_header (struct tar_stat_info *st, off_t block_ordinal)
        default:
          {
            char type_string[2];
-           type_string[0] = current_header->header.typeflag;
+           type_string[0] = blk->header.typeflag;
            type_string[1] = '\0';
            fprintf (stdlis, _(" unknown file type %s\n"),
                     quote (type_string));
@@ -1271,7 +1290,7 @@ print_header (struct tar_stat_info *st, off_t block_ordinal)
        case GNUTYPE_MULTIVOL:
          strcpy (size,
                  STRINGIFY_BIGINT
-                 (UINTMAX_FROM_HEADER (current_header->oldgnu_header.offset),
+                 (UINTMAX_FROM_HEADER (blk->oldgnu_header.offset),
                   uintbuf));
          fprintf (stdlis, _("--Continued at byte %s--\n"), size);
          break;
@@ -1280,6 +1299,40 @@ print_header (struct tar_stat_info *st, off_t block_ordinal)
   fflush (stdlis);
 }
 
+
+void
+print_volume_label ()
+{
+  struct tar_stat_info vstat;
+  union block vblk;
+  enum archive_format dummy;
+
+  memset (&vblk, 0, sizeof (vblk));
+  vblk.header.typeflag = GNUTYPE_VOLHDR;
+  if (recent_global_header)
+    memcpy (vblk.header.mtime, recent_global_header->header.mtime,
+           sizeof vblk.header.mtime);
+  tar_stat_init (&vstat);
+  assign_string (&vstat.file_name, ".");
+  decode_header (&vblk, &vstat, &dummy, 0);
+  assign_string (&vstat.file_name, volume_label);
+  simple_print_header (&vstat, &vblk, 0);
+  tar_stat_destroy (&vstat);
+}
+
+void
+print_header (struct tar_stat_info *st, union block *blk,
+             off_t block_ordinal)
+{
+  if (current_format == POSIX_FORMAT && !volume_label_printed && volume_label)
+    {
+      print_volume_label ();
+      volume_label_printed = true;
+    }
+
+  simple_print_header (st, blk, block_ordinal);
+}
+
 /* Print a similar line when we make a directory automatically.  */
 void
 print_for_mkdir (char *dirname, int length, mode_t mode)
@@ -1356,3 +1409,33 @@ skip_member (void)
       mv_end ();
     }
 }
+
+void
+test_archive_label ()
+{
+  base64_init ();
+  name_gather ();
+
+  open_archive (ACCESS_READ);
+  if (read_header (&current_header, &current_stat_info, read_header_auto)
+      == HEADER_SUCCESS)
+    {
+      char *s = NULL;
+       
+      decode_header (current_header,
+                    &current_stat_info, &current_format, 0);
+      if (current_header->header.typeflag == GNUTYPE_VOLHDR)
+       assign_string (&volume_label, current_header->header.name);
+
+      if (volume_label
+         && (name_match (volume_label)
+             || (multi_volume_option
+                 && (s = drop_volume_label_suffix (volume_label))
+                 && name_match (s))))
+       if (verbose_option)
+         print_volume_label ();
+      free (s);
+    }
+  close_archive ();
+  names_notfound ();
+}
index 951449eb0c0b035246b02fc50f27d7a7c7e1a49f..f81111f197d53c53c4321668f13e58ca2b9c4324 100644 (file)
@@ -1,7 +1,7 @@
 /* Miscellaneous functions, not really specific to GNU tar.
 
    Copyright (C) 1988, 1992, 1994, 1995, 1996, 1997, 1999, 2000, 2001,
-   2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   2003, 2004, 2005, 2006, 2007, 2009 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
@@ -25,6 +25,7 @@
 #include <xgetcwd.h>
 #include <unlinkdir.h>
 #include <utimens.h>
+#include <canonicalize.h>
 
 #if HAVE_STROPTS_H
 # include <stropts.h>
@@ -214,6 +215,46 @@ unquote_string (char *string)
     *destination = '\0';
   return result;
 }
+
+/* Zap trailing slashes.  */
+char *
+zap_slashes (char *name)
+{
+  char *q;
+
+  if (!name || *name == 0)
+    return name;
+  q = name + strlen (name) - 1;
+  while (q > name && ISSLASH (*q))
+    *q-- = '\0';
+  return name;
+}
+
+char *
+normalize_filename (const char *name)
+{
+  return zap_slashes (canonicalize_filename_mode (name, CAN_MISSING));
+}
+
+\f
+void
+replace_prefix (char **pname, const char *samp, size_t slen,
+               const char *repl, size_t rlen)
+{
+  char *name = *pname;
+  size_t nlen = strlen (name);
+  if (nlen > slen && memcmp (name, samp, slen) == 0 && ISSLASH (name[slen]))
+    {
+      if (rlen > slen)
+       {
+         name = xrealloc (name, nlen - slen + rlen + 1);
+         *pname = name;
+       }
+      memmove (name + rlen, name + slen, nlen - slen + 1);
+      memcpy (name, repl, rlen);
+    }
+}
+
 \f
 /* Handling numbers.  */
 
@@ -257,6 +298,10 @@ code_timespec (struct timespec t, char sbuf[TIMESPEC_STRSIZE_BOUND])
   char *np;
   bool negative = s < 0;
 
+  /* ignore invalid values of ns */
+  if (BILLION <= ns || ns < 0)
+    ns = 0;
+  
   if (negative && ns != 0)
     {
       s++;
@@ -417,6 +462,15 @@ maybe_backup_file (const char *file_name, bool this_is_the_archive)
 {
   struct stat file_stat;
 
+  assign_string (&before_backup_name, file_name);
+
+  /* A run situation may exist between Emacs or other GNU programs trying to
+     make a backup for the same file simultaneously.  If theoretically
+     possible, real problems are unlikely.  Doing any better would require a
+     convention, GNU-wide, for all programs doing backups.  */
+
+  assign_string (&after_backup_name, 0);
+
   /* Check if we really need to backup the file.  */
 
   if (this_is_the_archive && _remdev (file_name))
@@ -438,14 +492,6 @@ maybe_backup_file (const char *file_name, bool this_is_the_archive)
       && (S_ISBLK (file_stat.st_mode) || S_ISCHR (file_stat.st_mode)))
     return true;
 
-  assign_string (&before_backup_name, file_name);
-
-  /* A run situation may exist between Emacs or other GNU programs trying to
-     make a backup for the same file simultaneously.  If theoretically
-     possible, real problems are unlikely.  Doing any better would require a
-     convention, GNU-wide, for all programs doing backups.  */
-
-  assign_string (&after_backup_name, 0);
   after_backup_name = find_backup_file_name (file_name, backup_type);
   if (! after_backup_name)
     xalloc_die ();
@@ -531,17 +577,25 @@ struct wd
 static struct wd *wd;
 
 /* The number of working directories in the vector.  */
-static size_t wds;
+static size_t wd_count;
 
 /* The allocated size of the vector.  */
 static size_t wd_alloc;
 
+int
+chdir_count ()
+{
+  if (wd_count == 0)
+    return wd_count;
+  return wd_count - 1;
+}
+
 /* DIR is the operand of a -C option; add it to vector of chdir targets,
    and return the index of its location.  */
 int
 chdir_arg (char const *dir)
 {
-  if (wds == wd_alloc)
+  if (wd_count == wd_alloc)
     {
       if (wd_alloc == 0)
        {
@@ -551,11 +605,11 @@ chdir_arg (char const *dir)
       else
        wd = x2nrealloc (wd, &wd_alloc, sizeof *wd);
 
-      if (! wds)
+      if (! wd_count)
        {
-         wd[wds].name = ".";
-         wd[wds].saved = 0;
-         wds++;
+         wd[wd_count].name = ".";
+         wd[wd_count].saved = 0;
+         wd_count++;
        }
     }
 
@@ -567,12 +621,12 @@ chdir_arg (char const *dir)
        for (dir += 2;  ISSLASH (*dir);  dir++)
          continue;
       if (! dir[dir[0] == '.'])
-       return wds - 1;
+       return wd_count - 1;
     }
 
-  wd[wds].name = dir;
-  wd[wds].saved = 0;
-  return wds++;
+  wd[wd_count].name = dir;
+  wd[wd_count].saved = 0;
+  return wd_count++;
 }
 
 /* Change to directory I.  If I is 0, change to the initial working
@@ -695,6 +749,36 @@ stat_diag (char const *name)
     stat_error (name);
 }
 
+void
+file_removed_diag (const char *name, bool top_level,
+                  void (*diagfn) (char const *name))
+{
+  if (!top_level && errno == ENOENT)
+    {
+      WARNOPT (WARN_FILE_REMOVED,
+              (0, 0, _("%s: File removed before we read it"),
+               quotearg_colon (name)));
+      set_exit_status (TAREXIT_DIFFERS);
+    }      
+  else
+    diagfn (name);
+}
+
+void
+dir_removed_diag (const char *name, bool top_level,
+                  void (*diagfn) (char const *name))
+{
+  if (!top_level && errno == ENOENT)
+    {
+      WARNOPT (WARN_FILE_REMOVED,
+              (0, 0, _("%s: Directory removed before we read it"),
+               quotearg_colon (name)));
+      set_exit_status (TAREXIT_DIFFERS);
+    }
+  else
+    diagfn (name);
+}
+
 void
 write_fatal_details (char const *name, ssize_t status, size_t size)
 {
@@ -746,3 +830,45 @@ page_aligned_alloc (void **ptr, size_t size)
   *ptr = xmalloc (size1);
   return ptr_align (*ptr, alignment);
 }
+
+\f
+
+struct namebuf
+{
+  char *buffer;                /* directory, `/', and directory member */
+  size_t buffer_size;  /* allocated size of name_buffer */
+  size_t dir_length;   /* length of directory part in buffer */
+};
+
+namebuf_t
+namebuf_create (const char *dir)
+{
+  namebuf_t buf = xmalloc (sizeof (*buf));
+  buf->buffer_size = strlen (dir) + 2;
+  buf->buffer = xmalloc (buf->buffer_size);
+  strcpy (buf->buffer, dir);
+  buf->dir_length = strlen (buf->buffer);
+  if (!ISSLASH (buf->buffer[buf->dir_length - 1]))
+    buf->buffer[buf->dir_length++] = DIRECTORY_SEPARATOR;
+  return buf;
+}
+
+void
+namebuf_free (namebuf_t buf)
+{
+  free (buf->buffer);
+  free (buf);
+}
+
+char *
+namebuf_name (namebuf_t buf, const char *name)
+{
+  size_t len = strlen (name);
+  while (buf->dir_length + len + 1 >= buf->buffer_size)
+    buf->buffer = x2realloc (buf->buffer, &buf->buffer_size);
+  strcpy (buf->buffer + buf->dir_length, name);
+  return buf->buffer;
+}
+
+
+  
index 05f89b15d19ab615c793c7dcc4709a436c294ac0..1146020b2458f5a07fa5c534ea1511e596f3b703 100644 (file)
@@ -1,7 +1,7 @@
 /* Various processing of names.
 
    Copyright (C) 1988, 1992, 1994, 1996, 1997, 1998, 1999, 2000, 2001,
-   2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   2003, 2004, 2005, 2006, 2007, 2009 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
@@ -178,11 +178,34 @@ gname_to_gid (char const *gname, gid_t *gidp)
   return 1;
 }
 
+\f
+struct name *
+make_name (const char *file_name)
+{
+  struct name *p = xzalloc (sizeof (*p));
+  if (!file_name)
+    file_name = "";
+  p->name = xstrdup (file_name);
+  p->length = strlen (p->name);
+  return p;
+}
+
+void
+free_name (struct name *p)
+{
+  if (p)
+    {
+      free (p->name);
+      free (p->caname);
+      free (p);
+    }
+}
+
 \f
 /* Names from the command call.  */
 
 static struct name *namelist;  /* first name in list, if any */
-static struct name **nametail = &namelist;     /* end of name list */
+static struct name *nametail;  /* end of name list */
 
 /* File name arguments are processed in two stages: first a 
    name_array (see below) is filled, then the names from it
@@ -376,8 +399,7 @@ void
 name_gather (void)
 {
   /* Buffer able to hold a single name.  */
-  static struct name *buffer;
-  static size_t allocated_size;
+  static struct name *buffer = NULL;
 
   struct name_elt *ep;
 
@@ -385,44 +407,25 @@ name_gather (void)
     {
       static int change_dir;
 
-      if (allocated_size == 0)
-       {
-         allocated_size = offsetof (struct name, name) + NAME_FIELD_SIZE + 1;
-         buffer = xzalloc (allocated_size);
-       }
-      
       while ((ep = name_next_elt (0)) && ep->type == NELT_CHDIR)
        change_dir = chdir_arg (xstrdup (ep->v.name));
 
       if (ep)
        {
-         size_t needed_size;
-         
-         buffer->length = strlen (ep->v.name);
-         needed_size = offsetof (struct name, name) + buffer->length + 1;
-         if (allocated_size < needed_size)
-           {
-             do
-               {
-                 allocated_size *= 2;
-                 if (! allocated_size)
-                   xalloc_die ();
-               }
-             while (allocated_size < needed_size);
-
-             buffer = xrealloc (buffer, allocated_size);
-           }
+         free_name (buffer);
+         buffer = make_name (ep->v.name);
          buffer->change_dir = change_dir;
-         strcpy (buffer->name, ep->v.name);
          buffer->next = 0;
          buffer->found_count = 0;
          buffer->matching_flags = matching_flags;
+         buffer->directory = NULL;
+         buffer->parent = NULL;
+         buffer->cmdline = true;
          
-         namelist = buffer;
-         nametail = &namelist->next;
+         namelist = nametail = buffer;
        }
       else if (change_dir)
-       addname (0, change_dir);
+       addname (0, change_dir, false, NULL);
     }
   else
     {
@@ -436,11 +439,11 @@ name_gather (void)
            change_dir = chdir_arg (xstrdup (ep->v.name));
 
          if (ep)
-           addname (ep->v.name, change_dir);
+           addname (ep->v.name, change_dir, true, NULL);
          else
            {
              if (change_dir != change_dir0)
-               addname (0, change_dir);
+               addname (NULL, change_dir, false, NULL);
              break;
            }
        }
@@ -449,25 +452,24 @@ name_gather (void)
 
 /*  Add a name to the namelist.  */
 struct name *
-addname (char const *string, int change_dir)
+addname (char const *string, int change_dir, bool cmdline, struct name *parent)
 {
-  size_t length = string ? strlen (string) : 0;
-  struct name *name = xmalloc (offsetof (struct name, name) + length + 1);
-
-  if (string)
-    strcpy (name->name, string);
-  else
-    name->name[0] = 0;
+  struct name *name = make_name (string);
 
+  name->prev = nametail;
   name->next = NULL;
-  name->length = length;
   name->found_count = 0;
   name->matching_flags = matching_flags;
   name->change_dir = change_dir;
-  name->dir_contents = NULL;
+  name->directory = NULL;
+  name->parent = parent;
+  name->cmdline = cmdline;
 
-  *nametail = name;
-  nametail = &name->next;
+  if (nametail)
+    nametail->next = name;
+  else
+    namelist = name;
+  nametail = name;
   return name;
 }
 
@@ -488,6 +490,22 @@ namelist_match (char const *file_name, size_t length)
   return NULL;
 }
 
+void
+remname (struct name *name)
+{
+  struct name *p;
+
+  if ((p = name->prev) != NULL)
+    p->next = name->next;
+  else
+    namelist = name->next;
+
+  if ((p = name->next) != NULL)
+    p->prev = name->prev;
+  else
+    nametail = name->prev;
+}
+
 /* Return true if and only if name FILE_NAME (from an archive) matches any
    name from the namelist.  */
 bool
@@ -505,8 +523,8 @@ name_match (const char *file_name)
       if (cursor->name[0] == 0)
        {
          chdir_do (cursor->change_dir);
-         namelist = 0;
-         nametail = &namelist;
+         namelist = NULL;
+         nametail = NULL;
          return true;
        }
 
@@ -519,8 +537,8 @@ name_match (const char *file_name)
          if (starting_file_option)
            {
              free (namelist);
-             namelist = 0;
-             nametail = &namelist;
+             namelist = NULL;
+             nametail = NULL;
            }
          chdir_do (cursor->change_dir);
 
@@ -559,8 +577,6 @@ all_names_found (struct tar_stat_info *p)
   struct name const *cursor;
   size_t len;
 
-  if (test_label_option)
-    return true;
   if (!p->file_name || occurrence_option == 0 || p->had_trailing_slash)
     return false;
   len = strlen (p->file_name);
@@ -573,28 +589,19 @@ all_names_found (struct tar_stat_info *p)
   return true;
 }
 
-static inline int
-is_pattern (const char *string)
-{
-  return strchr (string, '*') || strchr (string, '[') || strchr (string, '?');
-}
-
 static void
 regex_usage_warning (const char *name)
 {
   static int warned_once = 0;
 
-  if (warn_regex_usage && is_pattern (name))
+  if (warn_regex_usage && fnmatch_pattern_has_wildcards (name, 0))
     {
       warned_once = 1;
       WARN ((0, 0,
-            /* TRANSLATORS: The following three msgids form a single sentence.
-             */
-            _("Pattern matching characters used in file names. Please,")));
-      WARN ((0, 0,
-            _("use --wildcards to enable pattern matching, or --no-wildcards to")));
+            _("Pattern matching characters used in file names")));
       WARN ((0, 0,
-            _("suppress this warning.")));
+            _("Use --wildcards to enable pattern matching,"
+              " or --no-wildcards to suppress this warning")));
     }
 }
 
@@ -617,8 +624,8 @@ names_notfound (void)
       }
 
   /* Don't bother freeing the name list; we're about to exit.  */
-  namelist = 0;
-  nametail = &namelist;
+  namelist = NULL;
+  nametail = NULL;
 
   if (same_order_option)
     {
@@ -635,15 +642,18 @@ names_notfound (void)
 \f
 /* Sorting name lists.  */
 
-/* Sort linked LIST of names, of given LENGTH, using COMPARE to order
-   names.  Return the sorted list.  Apart from the type `struct name'
-   and the definition of SUCCESSOR, this is a generic list-sorting
-   function, but it's too painful to make it both generic and portable
+/* Sort *singly* linked LIST of names, of given LENGTH, using COMPARE
+   to order names.  Return the sorted list.  Note that after calling
+   this function, the `prev' links in list elements are messed up.
+   
+   Apart from the type `struct name' and the definition of SUCCESSOR,
+   this is a generic list-sorting function, but it's too painful to
+   make it both generic and portable
    in C.  */
 
 static struct name *
-merge_sort (struct name *list, int length,
-           int (*compare) (struct name const*, struct name const*))
+merge_sort_sll (struct name *list, int length,
+               int (*compare) (struct name const*, struct name const*))
 {
   struct name *first_list;
   struct name *second_list;
@@ -681,8 +691,8 @@ merge_sort (struct name *list, int length,
   second_list = SUCCESSOR (cursor);
   SUCCESSOR (cursor) = 0;
 
-  first_list = merge_sort (first_list, first_length, compare);
-  second_list = merge_sort (second_list, second_length, compare);
+  first_list = merge_sort_sll (first_list, first_length, compare);
+  second_list = merge_sort_sll (second_list, second_length, compare);
 
   merge_point = &result;
   while (first_list && second_list)
@@ -710,30 +720,53 @@ merge_sort (struct name *list, int length,
 #undef SUCCESSOR
 }
 
+/* Sort doubly linked LIST of names, of given LENGTH, using COMPARE
+   to order names.  Return the sorted list.  */
+static struct name *
+merge_sort (struct name *list, int length,
+           int (*compare) (struct name const*, struct name const*))
+{
+  struct name *head, *p, *prev;
+  head = merge_sort_sll (list, length, compare);
+  /* Fixup prev pointers */
+  for (prev = NULL, p = head; p; prev = p, p = p->next)
+    p->prev = prev;
+  return head;
+}
+
 /* A comparison function for sorting names.  Put found names last;
    break ties by string comparison.  */
 
 static int
-compare_names (struct name const *n1, struct name const *n2)
+compare_names_found (struct name const *n1, struct name const *n2)
 {
-  int found_diff = WASFOUND(n2) - WASFOUND(n1);
+  int found_diff = WASFOUND (n2) - WASFOUND (n1);
   return found_diff ? found_diff : strcmp (n1->name, n2->name);
 }
+
+/* Simple comparison by names. */
+static int
+compare_names (struct name const *n1, struct name const *n2)
+{
+  return strcmp (n1->name, n2->name);
+}
+
 \f
 /* Add all the dirs under NAME, which names a directory, to the namelist.
    If any of the files is a directory, recurse on the subdirectory.
-   DEVICE is the device not to leave, if the -l option is specified.  */
+   DEVICE is the device not to leave, if the -l option is specified.
+   CMDLINE is true, if the NAME appeared on the command line. */
 
 static void
-add_hierarchy_to_namelist (struct name *name, dev_t device)
+add_hierarchy_to_namelist (struct name *name, dev_t device, bool cmdline)
 {
-  char *file_name = name->name;
-  const char *buffer = get_directory_contents (file_name, device);
-
-  if (! buffer)
-    name->dir_contents = "\0\0\0\0";
-  else
+  const char *buffer;
+  
+  name_fill_directory (name, device, cmdline);
+  buffer = directory_contents (name->directory);
+  if (buffer)
     {
+      struct name *child_head = NULL, *child_tail = NULL;
       size_t name_length = name->length;
       size_t allocated_length = (name_length >= NAME_FIELD_SIZE
                                 ? name_length + NAME_FIELD_SIZE
@@ -744,8 +777,7 @@ add_hierarchy_to_namelist (struct name *name, dev_t device)
       size_t string_length;
       int change_dir = name->change_dir;
 
-      name->dir_contents = buffer;
-      strcpy (namebuf, file_name);
+      strcpy (namebuf, name->name);
       if (! ISSLASH (namebuf[name_length - 1]))
        {
          namebuf[name_length++] = '/';
@@ -772,15 +804,65 @@ add_hierarchy_to_namelist (struct name *name, dev_t device)
                  namebuf = xrealloc (namebuf, allocated_length + 1);
                }
              strcpy (namebuf + name_length, string + 1);
-             np = addname (namebuf, change_dir);
-             add_hierarchy_to_namelist (np, device);
+             np = addname (namebuf, change_dir, false, name);
+             if (!child_head)
+               child_head = np;
+             else
+               child_tail->sibling = np;
+             child_tail = np;
+             add_hierarchy_to_namelist (np, device, false);
            }
        }
 
       free (namebuf);
+      name->child = child_head;
     }
 }
 \f
+/* Auxiliary functions for hashed table of struct name's. */
+
+static size_t
+name_hash (void const *entry, size_t n_buckets)
+{
+  struct name const *name = entry;
+  return hash_string (name->caname, n_buckets);
+}
+
+/* Compare two directories for equality of their names. */
+static bool
+name_compare (void const *entry1, void const *entry2)
+{
+  struct name const *name1 = entry1;
+  struct name const *name2 = entry2;
+  return strcmp (name1->caname, name2->caname) == 0;
+}
+
+\f
+/* Rebase `name' member of CHILD and all its siblings to
+   the new PARENT. */
+static void
+rebase_child_list (struct name *child, struct name *parent)
+{
+  size_t old_prefix_len = child->parent->length;
+  size_t new_prefix_len = parent->length;
+  char *new_prefix = parent->name;
+  
+  for (; child; child = child->sibling)
+    {
+      size_t size = child->length - old_prefix_len + new_prefix_len;
+      char *newp = xmalloc (size + 1);
+      strcpy (newp, new_prefix);
+      strcat (newp, child->name + old_prefix_len);
+      free (child->name);
+      child->name = newp;
+      child->length = size;
+
+      rebase_directory (child->directory,
+                       child->parent->name, old_prefix_len, 
+                       new_prefix, new_prefix_len);
+    }
+}
+
 /* Collect all the names from argv[] (or whatever), expand them into a
    directory tree, and sort them.  This gets only subdirectories, not
    all files.  */
@@ -789,28 +871,50 @@ void
 collect_and_sort_names (void)
 {
   struct name *name;
-  struct name *next_name;
+  struct name *next_name, *prev_name;
   int num_names;
   struct stat statbuf;
-
+  Hash_table *nametab;
+  
   name_gather ();
 
-  if (listed_incremental_option)
-    read_directory_file ();
-
   if (!namelist)
-    addname (".", 0);
+    addname (".", 0, false, NULL);
 
-  for (name = namelist; name; name = next_name)
+  if (listed_incremental_option)
     {
-      next_name = name->next;
-      if (name->found_count || name->dir_contents)
+      switch (chdir_count ())
+       {
+       case 0:
+         break;
+
+       case 1:
+         if (namelist->change_dir == 0)
+           USAGE_ERROR ((0, 0,
+                         _("Using -C option inside file list is not "
+                           "allowed with --listed-incremental")));
+         break;
+
+       default:
+         USAGE_ERROR ((0, 0,
+                       _("Only one -C option is allowed with "
+                         "--listed-incremental")));
+       }
+
+      read_directory_file ();
+    }
+  
+  num_names = 0;
+  for (name = namelist; name; name = name->next, num_names++)
+    {
+      if (name->found_count || name->directory)
        continue;
       if (name->matching_flags & EXCLUDE_WILDCARDS)
        /* NOTE: EXCLUDE_ANCHORED is not relevant here */
        /* FIXME: just skip regexps for now */
        continue;
       chdir_do (name->change_dir);
+
       if (name->name[0] == 0)
        continue;
 
@@ -822,24 +926,63 @@ collect_and_sort_names (void)
       if (S_ISDIR (statbuf.st_mode))
        {
          name->found_count++;
-         add_hierarchy_to_namelist (name, statbuf.st_dev);
+         add_hierarchy_to_namelist (name, statbuf.st_dev, true);
        }
     }
 
-  num_names = 0;
-  for (name = namelist; name; name = name->next)
-    num_names++;
   namelist = merge_sort (namelist, num_names, compare_names);
 
-  for (name = namelist; name; name = name->next)
-    name->found_count = 0;
+  num_names = 0;
+  nametab = hash_initialize (0, 0,
+                            name_hash,
+                            name_compare, NULL);
+  for (name = namelist; name; name = next_name)
+    {
+      next_name = name->next;
+      name->caname = normalize_filename (name->name);
+      if (prev_name)
+       {
+         struct name *p = hash_lookup (nametab, name);
+         if (p)
+           {
+             /* Keep the one listed in the command line */
+             if (!name->parent)
+               {
+                 if (p->child)
+                   rebase_child_list (p->child, name);
+                 /* FIXME: remove_directory (p->caname); ? */
+                 remname (p);
+                 free_name (p);
+                 num_names--;
+               }
+             else
+               {
+                 if (name->child)
+                   rebase_child_list (name->child, p);
+                 /* FIXME: remove_directory (name->caname); ? */
+                 remname (name);
+                 free_name (name);
+                 continue;
+               }
+           }
+       }
+      name->found_count = 0;
+      if (!hash_insert (nametab, name))
+       xalloc_die ();
+      prev_name = name;
+      num_names++;
+    }
+  nametail = prev_name;
+  hash_free (nametab);
+
+  namelist = merge_sort (namelist, num_names, compare_names_found);
 
   if (listed_incremental_option)
     {
       for (name = namelist; name && name->name[0] == 0; name++)
        ;
       if (name)
-       name->dir_contents = append_incremental_renames (name->dir_contents);
+       append_incremental_renames (name->directory);
     }
 }
 
@@ -880,8 +1023,8 @@ name_scan (const char *file_name)
    find and return all the non-found names in the namelist.  */
 struct name *gnu_list_name;
 
-char *
-name_from_list (void)
+struct name const *
+name_from_list ()
 {
   if (!gnu_list_name)
     gnu_list_name = namelist;
@@ -892,9 +1035,9 @@ name_from_list (void)
     {
       gnu_list_name->found_count++;
       chdir_do (gnu_list_name->change_dir);
-      return gnu_list_name->name;
+      return gnu_list_name;
     }
-  return 0;
+  return NULL;
 }
 
 void
@@ -928,24 +1071,6 @@ excluded_name (char const *name)
 {
   return excluded_file_name (excluded, name + FILE_SYSTEM_PREFIX_LEN (name));
 }
-\f
-/* Names to avoid dumping.  */
-static Hash_table *avoided_name_table;
-
-/* Remember to not archive NAME.  */
-void
-add_avoided_name (char const *name)
-{
-  hash_string_insert (&avoided_name_table, name);
-}
-
-/* Should NAME be avoided when archiving?  */
-bool
-is_avoided_name (char const *name)
-{
-  return hash_string_lookup (avoided_name_table, name);
-}
-
 \f
 static Hash_table *individual_file_table;
 
@@ -953,12 +1078,12 @@ static void
 register_individual_file (char const *name)
 {
   struct stat st;
-
+  
   if (deref_stat (dereference_option, name, &st) != 0)
     return; /* Will be complained about later */
   if (S_ISDIR (st.st_mode))
     return;
-
+  
   hash_string_insert (&individual_file_table, name);
 }
 
index 6dbc68e2d5a516eddb26f737cda704b9031299ee..23868c914f8577edb9081c99bcc3275753f1e87b 100644 (file)
@@ -26,26 +26,29 @@ struct compression_suffix
   const char *program;
 };
 
-struct compression_suffix compression_suffixes[] = {
-#define S(s,p) #s, sizeof (#s) - 1, #p
-  { S(gz, gzip) },
-  { S(tgz, gzip) },
-  { S(taz, gzip) },
-  { S(Z, compress) },
-  { S(taZ, compress) },
-  { S(bz2, bzip2) },
-  { S(tbz, bzip2) },
-  { S(tbz2, bzip2) },
-  { S(tz2, bzip2) },
-  { S(lzma, lzma) },
-  { S(tlz, lzma) },
-  { S(lzo, lzop) },
-  { S(xz, xz) },
+static struct compression_suffix compression_suffixes[] = {
+#define __CAT2__(a,b) a ## b  
+#define S(s,p) #s, sizeof (#s) - 1, __CAT2__(p,_PROGRAM)
+  { S(gz,   GZIP) },
+  { S(tgz,  GZIP) },
+  { S(taz,  GZIP) },
+  { S(Z,    COMPRESS) },
+  { S(taZ,  COMPRESS) },
+  { S(bz2,  BZIP2) },
+  { S(tbz,  BZIP2) },
+  { S(tbz2, BZIP2) },
+  { S(tz2,  BZIP2) },
+  { S(lz,   LZIP) },
+  { S(lzma, LZMA) },
+  { S(tlz,  LZMA) },
+  { S(lzo,  LZOP) },
+  { S(xz,   XZ) },
 #undef S
+#undef __CAT2__
 };
 
-int nsuffixes = sizeof (compression_suffixes) /
-                  sizeof (compression_suffixes[0]);
+static int nsuffixes = sizeof (compression_suffixes) /
+                        sizeof (compression_suffixes[0]);
 
 static const char *
 find_compression_program (const char *name, const char *defprog)
index c90a40d1217b0441571604ead5f9af839675793c..d646822c4a6ccc65ae0ad098b1b1f47956db6dd4 100644 (file)
@@ -174,11 +174,11 @@ sys_wait_for_child (pid_t child_pid, bool eof)
        {
          int sig = WTERMSIG (wait_status);
          if (!(!eof && sig == SIGPIPE))
-           ERROR ((0, 0, _("Child died with signal %d"), sig));
+           FATAL_ERROR ((0, 0, _("Child died with signal %d"), sig));
        }
       else if (WEXITSTATUS (wait_status) != 0)
-       ERROR ((0, 0, _("Child returned status %d"),
-               WEXITSTATUS (wait_status)));
+       FATAL_ERROR ((0, 0, _("Child returned status %d"),
+                     WEXITSTATUS (wait_status)));
     }
 }
 
@@ -283,6 +283,30 @@ xdup2 (int from, int into)
     }
 }
 
+void wait_for_grandchild (pid_t pid) __attribute__ ((__noreturn__));
+
+/* Propagate any failure of the grandchild back to the parent.  */
+void
+wait_for_grandchild (pid_t pid)
+{
+  int wait_status;
+  int exit_code = 0;
+  
+  while (waitpid (pid, &wait_status, 0) == -1)
+    if (errno != EINTR)
+      {
+       waitpid_error (use_compress_program_option);
+       break;
+      }
+
+  if (WIFSIGNALED (wait_status))
+    raise (WTERMSIG (wait_status));
+  else if (WEXITSTATUS (wait_status) != 0)
+    exit_code = WEXITSTATUS (wait_status);
+  
+  exit (exit_code);
+}
+
 /* Set ARCHIVE for writing, then compressing an archive.  */
 pid_t
 sys_child_open_for_compress (void)
@@ -291,7 +315,6 @@ sys_child_open_for_compress (void)
   int child_pipe[2];
   pid_t grandchild_pid;
   pid_t child_pid;
-  int wait_status;
 
   xpipe (parent_pipe);
   child_pid = xfork ();
@@ -307,8 +330,9 @@ sys_child_open_for_compress (void)
 
   /* The new born child tar is here!  */
 
-  program_name = _("tar (child)");
-
+  set_program_name (_("tar (child)"));
+  signal (SIGPIPE, SIG_DFL);
+  
   xdup2 (parent_pipe[PREAD], STDIN_FILENO);
   xclose (parent_pipe[PWRITE]);
 
@@ -351,7 +375,7 @@ sys_child_open_for_compress (void)
     {
       /* The newborn grandchild tar is here!  Launch the compressor.  */
 
-      program_name = _("tar (grandchild)");
+      set_program_name (_("tar (grandchild)"));
 
       xdup2 (child_pipe[PWRITE], STDOUT_FILENO);
       xclose (child_pipe[PREAD]);
@@ -424,24 +448,7 @@ sys_child_open_for_compress (void)
        archive_write_error (status);
     }
 
-  /* Propagate any failure of the grandchild back to the parent.  */
-
-  while (waitpid (grandchild_pid, &wait_status, 0) == -1)
-    if (errno != EINTR)
-      {
-       waitpid_error (use_compress_program_option);
-       break;
-      }
-
-  if (WIFSIGNALED (wait_status))
-    {
-      kill (child_pid, WTERMSIG (wait_status));
-      exit_status = TAREXIT_FAILURE;
-    }
-  else if (WEXITSTATUS (wait_status) != 0)
-    exit_status = WEXITSTATUS (wait_status);
-
-  exit (exit_status);
+  wait_for_grandchild (grandchild_pid);
 }
 
 /* Set ARCHIVE for uncompressing, then reading an archive.  */
@@ -452,7 +459,6 @@ sys_child_open_for_uncompress (void)
   int child_pipe[2];
   pid_t grandchild_pid;
   pid_t child_pid;
-  int wait_status;
 
   xpipe (parent_pipe);
   child_pid = xfork ();
@@ -468,8 +474,9 @@ sys_child_open_for_uncompress (void)
 
   /* The newborn child tar is here!  */
 
-  program_name = _("tar (child)");
-
+  set_program_name (_("tar (child)"));
+  signal (SIGPIPE, SIG_DFL);
+  
   xdup2 (parent_pipe[PWRITE], STDOUT_FILENO);
   xclose (parent_pipe[PREAD]);
 
@@ -503,7 +510,7 @@ sys_child_open_for_uncompress (void)
     {
       /* The newborn grandchild tar is here!  Launch the uncompressor.  */
 
-      program_name = _("tar (grandchild)");
+      set_program_name (_("tar (grandchild)"));
 
       xdup2 (child_pipe[PREAD], STDIN_FILENO);
       xclose (child_pipe[PWRITE]);
@@ -562,24 +569,7 @@ sys_child_open_for_uncompress (void)
 
   xclose (STDOUT_FILENO);
 
-  /* Propagate any failure of the grandchild back to the parent.  */
-
-  while (waitpid (grandchild_pid, &wait_status, 0) == -1)
-    if (errno != EINTR)
-      {
-       waitpid_error (use_compress_program_option);
-       break;
-      }
-
-  if (WIFSIGNALED (wait_status))
-    {
-      kill (child_pid, WTERMSIG (wait_status));
-      exit_status = TAREXIT_FAILURE;
-    }
-  else if (WEXITSTATUS (wait_status) != 0)
-    exit_status = WEXITSTATUS (wait_status);
-
-  exit (exit_status);
+  wait_for_grandchild (grandchild_pid);
 }
 
 \f
@@ -639,6 +629,12 @@ static void
 stat_to_env (char *name, char type, struct tar_stat_info *st)
 {
   str_to_env ("TAR_VERSION", PACKAGE_VERSION);
+  str_to_env ("TAR_ARCHIVE", *archive_name_cursor);
+  dec_to_env ("TAR_VOLUME", archive_name_cursor - archive_name_array + 1);
+  dec_to_env ("TAR_BLOCKING_FACTOR", blocking_factor);
+  str_to_env ("TAR_FORMAT",
+             archive_format_string (current_format == DEFAULT_FORMAT ?
+                                    archive_format : current_format));
   chr_to_env ("TAR_FILETYPE", type);
   oct_to_env ("TAR_MODE", st->stat.st_mode);
   str_to_env ("TAR_FILENAME", name);
index e10b80431c1c60ba5f7fa2ee04b9e0f07310970a..da124196ad48b5f74a209e0ae2fff475e2da480f 100644 (file)
--- a/src/tar.c
+++ b/src/tar.c
@@ -25,6 +25,7 @@
 #include <argp.h>
 #include <argp-namefrob.h>
 #include <argp-fmtstream.h>
+#include <argp-version-etc.h>
 
 #include <signal.h>
 #if ! defined SIGCHLD && defined SIGCLD
@@ -50,6 +51,7 @@
 #include <version-etc.h>
 #include <xstrtol.h>
 #include <stdopen.h>
+#include <priv-set.h>
 
 /* Local declarations.  */
 
@@ -212,18 +214,25 @@ subcommand_string (enum subcommand c)
     case UPDATE_SUBCOMMAND:
       return "-u";
 
-    default:
-      abort ();
+    case TEST_LABEL_SUBCOMMAND:
+      return "--test-label";
     }
+  abort ();
 }
 
 void
-tar_list_quoting_styles (argp_fmtstream_t fs, char *prefix)
+tar_list_quoting_styles (struct obstack *stk, char *prefix)
 {
   int i;
-
+  size_t prefixlen = strlen (prefix);
+  
   for (i = 0; quoting_style_args[i]; i++)
-    argp_fmtstream_printf (fs, "%s%s\n", prefix, quoting_style_args[i]);
+    {
+      obstack_grow (stk, prefix, prefixlen);
+      obstack_grow (stk, quoting_style_args[i],
+                   strlen (quoting_style_args[i]));
+      obstack_1grow (stk, '\n');
+    }
 }
 
 void
@@ -255,6 +264,7 @@ enum
   DELAY_DIRECTORY_RESTORE_OPTION,
   HARD_DEREFERENCE_OPTION,
   DELETE_OPTION,
+  EXCLUDE_BACKUPS_OPTION,
   EXCLUDE_CACHES_OPTION,
   EXCLUDE_CACHES_UNDER_OPTION,
   EXCLUDE_CACHES_ALL_OPTION,
@@ -265,12 +275,13 @@ enum
   EXCLUDE_VCS_OPTION,
   FORCE_LOCAL_OPTION,
   GROUP_OPTION,
-  HANG_OPTION,
   IGNORE_CASE_OPTION,
   IGNORE_COMMAND_ERROR_OPTION,
   IGNORE_FAILED_READ_OPTION,
   INDEX_FILE_OPTION,
   KEEP_NEWER_FILES_OPTION,
+  LEVEL_OPTION,
+  LZIP_OPTION,
   LZMA_OPTION,
   LZOP_OPTION,
   MODE_OPTION,
@@ -288,6 +299,7 @@ enum
   NO_RECURSION_OPTION,
   NO_SAME_OWNER_OPTION,
   NO_SAME_PERMISSIONS_OPTION,
+  NO_SEEK_OPTION,
   NO_UNQUOTE_OPTION,
   NO_WILDCARDS_MATCH_SLASH_OPTION,
   NO_WILDCARDS_OPTION,
@@ -323,10 +335,9 @@ enum
   TO_COMMAND_OPTION,
   TRANSFORM_OPTION,
   UNQUOTE_OPTION,
-  USAGE_OPTION,
   UTC_OPTION,
-  VERSION_OPTION,
   VOLNO_FILE_OPTION,
+  WARNING_OPTION, 
   WILDCARDS_MATCH_SLASH_OPTION,
   WILDCARDS_OPTION
 };
@@ -362,7 +373,12 @@ The version control may be set with --backup or VERSION_CONTROL, values are:\n\n
    [q  alias for --occurrence=1 =/= this would better be used for quiet?]
 
    y  per-file gzip compression
-   Y  per-block gzip compression */
+   Y  per-block gzip compression.
+
+   Additionally, the 'n' letter is assigned for option --seek, which
+   is probably not needed and should be marked as deprecated, so that
+   -n may become available in the future.
+*/
 
 static struct argp_option options[] = {
 #define GRID 10
@@ -404,6 +420,8 @@ static struct argp_option options[] = {
    N_("handle old GNU-format incremental backup"), GRID+1 },
   {"listed-incremental", 'g', N_("FILE"), 0,
    N_("handle new GNU-format incremental backup"), GRID+1 },
+  {"level", LEVEL_OPTION, N_("NUMBER"), 0,
+   N_("dump level for created listed-incremental archive"), GRID+1 },
   {"ignore-failed-read", IGNORE_FAILED_READ_OPTION, 0, 0,
    N_("do not exit with nonzero on unreadable files"), GRID+1 },
   {"occurrence", OCCURRENCE_OPTION, N_("NUMBER"), OPTION_ARG_OPTIONAL,
@@ -414,6 +432,8 @@ static struct argp_option options[] = {
       " NUMBER defaults to 1"), GRID+1 },
   {"seek", 'n', NULL, 0,
    N_("archive is seekable"), GRID+1 },
+  {"no-seek", NO_SEEK_OPTION, NULL, 0,
+   N_("archive is not seekable"), GRID+1 },
   {"no-check-device", NO_CHECK_DEVICE_OPTION, NULL, 0,
    N_("do not check device numbers when creating incremental archives"),
    GRID+1 },
@@ -481,9 +501,9 @@ static struct argp_option options[] = {
   {"touch", 'm', 0, 0,
    N_("don't extract file modified time"), GRID+1 },
   {"same-owner", SAME_OWNER_OPTION, 0, 0,
-   N_("try extracting files with the same ownership"), GRID+1 },
+   N_("try extracting files with the same ownership as exists in the archive (default for superuser)"), GRID+1 },
   {"no-same-owner", NO_SAME_OWNER_OPTION, 0, 0,
-   N_("extract files as yourself"), GRID+1 },
+   N_("extract files as yourself (default for ordinary users)"), GRID+1 },
   {"numeric-owner", NUMERIC_OWNER_OPTION, 0, 0,
    N_("always use numbers for user/group names"), GRID+1 },
   {"preserve-permissions", 'p', 0, 0,
@@ -596,23 +616,19 @@ static struct argp_option options[] = {
   {"no-auto-compress", NO_AUTO_COMPRESS_OPTION, 0, 0,
    N_("do not use archive suffix to determine the compression program"),
    GRID+1 },
-  {"bzip2", 'j', 0, 0,
-   N_("filter the archive through bzip2"), GRID+1 },
-  {"gzip", 'z', 0, 0,
-   N_("filter the archive through gzip"), GRID+1 },
+  {"use-compress-program", 'I', N_("PROG"), 0,
+   N_("filter through PROG (must accept -d)"), GRID+1 },
+  /* Note: docstrings for the options below are generated by tar_help_filter */
+  {"bzip2", 'j', 0, 0, NULL, GRID+1 },
+  {"gzip", 'z', 0, 0, NULL, GRID+1 },
   {"gunzip", 0, 0, OPTION_ALIAS, NULL, GRID+1 },
   {"ungzip", 0, 0, OPTION_ALIAS, NULL, GRID+1 },
-  {"compress", 'Z', 0, 0,
-   N_("filter the archive through compress"), GRID+1 },
+  {"compress", 'Z', 0, 0, NULL, GRID+1 },
   {"uncompress", 0, 0, OPTION_ALIAS, NULL, GRID+1 },
-  {"lzma", LZMA_OPTION, 0, 0,
-   N_("filter the archive through lzma"), GRID+1 },
-  {"lzop", LZOP_OPTION, 0, 0,
-   N_("filter the archive through lzop"), GRID+8 },
-  {"xz", 'J', 0, 0,
-   N_("filter the archive through xz"), GRID+8 },
-  {"use-compress-program", 'I', N_("PROG"), 0,
-   N_("filter through PROG (must accept -d)"), GRID+1 },
+  {"lzip", LZIP_OPTION, 0, 0, NULL, GRID+1 },
+  {"lzma", LZMA_OPTION, 0, 0, NULL, GRID+1 },
+  {"lzop", LZOP_OPTION, 0, 0, NULL, GRID+1 },
+  {"xz", 'J', 0, 0, NULL, GRID+1 },
 #undef GRID
   
 #define GRID 100
@@ -654,6 +670,8 @@ static struct argp_option options[] = {
    N_("exclude directories containing FILE"), GRID+1 },
   {"exclude-vcs", EXCLUDE_VCS_OPTION, NULL, 0,
    N_("exclude version control system directories"), GRID+1 },
+  {"exclude-backups", EXCLUDE_BACKUPS_OPTION, NULL, 0,
+   N_("exclude backup and lock files"), GRID+1 },
   {"no-recursion", NO_RECURSION_OPTION, 0, 0,
    N_("avoid descending automatically in directories"), GRID+1 },
   {"one-file-system", ONE_FILE_SYSTEM_OPTION, 0, 0,
@@ -718,6 +736,8 @@ static struct argp_option options[] = {
 
   {"verbose", 'v', 0, 0,
    N_("verbosely list files processed"), GRID+1 },
+  {"warning", WARNING_OPTION, N_("KEYWORD"), 0,
+   N_("warning control"), GRID+1 },
   {"checkpoint", CHECKPOINT_OPTION, N_("NUMBER"), OPTION_ARG_OPTIONAL,
    N_("display progress messages every NUMBERth record (default 10)"),
    GRID+1 },
@@ -770,14 +790,6 @@ static struct argp_option options[] = {
 
   {"restrict", RESTRICT_OPTION, 0, 0,
    N_("disable use of some potentially harmful options"), -1 },
-
-  {"help",  '?', 0, 0,  N_("give this help list"), -1},
-  {"usage", USAGE_OPTION, 0, 0,  N_("give a short usage message"), -1},
-  {"version", VERSION_OPTION, 0, 0,  N_("print program version"), -1},
-  /* FIXME -V (--label) conflicts with the default short option for
-     --version */
-  {"HANG",       HANG_OPTION,    "SECS", OPTION_ARG_OPTIONAL | OPTION_HIDDEN,
-   N_("hang for SECS seconds (default 3600)"), 0},
 #undef GRID
 
   {0, 0, 0, 0, 0, 0}
@@ -837,88 +849,83 @@ struct tar_args        /* Variables used during option parsing */
   | (args)->matching_flags \
   | recursion_option)
 
+static char const * const vcs_file_table[] = {
+  /* CVS: */
+  "CVS",
+  ".cvsignore",
+  /* RCS: */
+  "RCS",
+  /* SCCS: */
+  "SCCS",
+  /* SVN: */
+  ".svn",
+  /* git: */
+  ".git",
+  ".gitignore",
+  /* Arch: */
+  ".arch-ids",
+  "{arch}",
+  "=RELEASE-ID",
+  "=meta-update",
+  "=update",
+  /* Bazaar */
+  ".bzr",
+  ".bzrignore",
+  ".bzrtags",
+  /* Mercurial */
+  ".hg",
+  ".hgignore",
+  ".hgtags",
+  /* darcs */
+  "_darcs",
+  NULL
+};
+
+static char const * const backup_file_table[] = {
+  ".#*",
+  "*~",
+  "#*#",
+  NULL
+};
+
 void
-exclude_vcs_files ()
+add_exclude_array (char const * const * fv)
 {
   int i;
-  static char *vcs_file[] = {
-    /* CVS: */
-    "CVS",
-    ".cvsignore",
-    /* RCS: */
-    "RCS",
-    /* SCCS: */
-    "SCCS",
-    /* SVN: */
-    ".svn",
-    /* git: */
-    ".git",
-    ".gitignore",
-    /* Arch: */
-    ".arch-ids",
-    "{arch}",
-    "=RELEASE-ID",
-    "=meta-update",
-    "=update",
-    /* Bazaar */
-    ".bzr",
-    ".bzrignore",
-    ".bzrtags",
-    /* Mercurial */
-    ".hg",
-    ".hgignore",
-    ".hgtags",
-    /* darcs */
-    "_darcs",
-    NULL
-  };
 
-  for (i = 0; vcs_file[i]; i++)
-    add_exclude (excluded, vcs_file[i], 0);
+  for (i = 0; fv[i]; i++)
+    add_exclude (excluded, fv[i], 0);
 }
 
 \f
+static char *
+format_default_settings (void)
+{
+  return xasprintf (
+           "--format=%s -f%s -b%d --quoting-style=%s --rmt-command=%s"
 #ifdef REMOTE_SHELL
-# define DECL_SHOW_DEFAULT_SETTINGS(stream, printer)                      \
-{                                                                         \
-  printer (stream,                                                        \
-          "--format=%s -f%s -b%d --quoting-style=%s --rmt-command=%s",   \
-          archive_format_string (DEFAULT_ARCHIVE_FORMAT),                \
-          DEFAULT_ARCHIVE, DEFAULT_BLOCKING,                             \
-          quoting_style_args[DEFAULT_QUOTING_STYLE],                     \
-          DEFAULT_RMT_COMMAND);                                          \
-  printer (stream, " --rsh-command=%s", REMOTE_SHELL);                    \
-  printer (stream, "\n");                                                 \
-}
-#else
-# define DECL_SHOW_DEFAULT_SETTINGS(stream, printer)                      \
-{                                                                         \
-  printer (stream,                                                        \
-          "--format=%s -f%s -b%d --quoting-style=%s --rmt-command=%s",   \
-          archive_format_string (DEFAULT_ARCHIVE_FORMAT),                \
-          DEFAULT_ARCHIVE, DEFAULT_BLOCKING,                             \
-          quoting_style_args[DEFAULT_QUOTING_STYLE],                     \
-          DEFAULT_RMT_COMMAND);                                          \
-  printer (stream, "\n");                                                 \
-}
+           " --rsh-command=%s"
 #endif
+           ,
+           archive_format_string (DEFAULT_ARCHIVE_FORMAT), 
+           DEFAULT_ARCHIVE, DEFAULT_BLOCKING,              
+           quoting_style_args[DEFAULT_QUOTING_STYLE],
+           DEFAULT_RMT_COMMAND
+#ifdef REMOTE_SHELL
+           , REMOTE_SHELL
+#endif
+           );
+}
 
-static void
-show_default_settings (FILE *fp)
-     DECL_SHOW_DEFAULT_SETTINGS(fp, fprintf)
-
-static void
-show_default_settings_fs (argp_fmtstream_t fs)
-     DECL_SHOW_DEFAULT_SETTINGS(fs, argp_fmtstream_printf)
-
+\f
 static void
 set_subcommand_option (enum subcommand subcommand)
 {
   if (subcommand_option != UNKNOWN_SUBCOMMAND
       && subcommand_option != subcommand)
     USAGE_ERROR ((0, 0,
-                 _("You may not specify more than one `-Acdtrux' option")));
-
+                 _("You may not specify more than one `-Acdtrux' or `--test-label' option")));
+  
   subcommand_option = subcommand;
 }
 
@@ -928,7 +935,7 @@ set_use_compress_program_option (const char *string)
   if (use_compress_program_option
       && strcmp (use_compress_program_option, string) != 0)
     USAGE_ERROR ((0, 0, _("Conflicting compression options")));
-
+  
   use_compress_program_option = string;
 }
 \f
@@ -990,12 +997,12 @@ set_stat_signal (const char *name)
 struct textual_date
 {
   struct textual_date *next;
-  struct timespec *ts;
+  struct timespec ts;
   const char *option;
-  const char *date;
+  char *date;
 };
 
-static void
+static int
 get_date_or_file (struct tar_args *args, const char *option,
                  const char *str, struct timespec *ts)
 {
@@ -1018,17 +1025,19 @@ get_date_or_file (struct tar_args *args, const char *option,
          WARN ((0, 0, _("Substituting %s for unknown date format %s"),
                 tartime (*ts, false), quote (str)));
          ts->tv_nsec = 0;
+         return 1;
        }
       else
        {
          struct textual_date *p = xmalloc (sizeof (*p));
-         p->ts = ts;
+         p->ts = *ts;
          p->option = option;
-         p->date = str;
+         p->date = xstrdup (str);
          p->next = args->textual_date;
          args->textual_date = p;
        }
     }
+  return 0;
 }
 
 static void
@@ -1038,17 +1047,20 @@ report_textual_dates (struct tar_args *args)
   for (p = args->textual_date; p; )
     {
       struct textual_date *next = p->next;
-      char const *treated_as = tartime (*p->ts, true);
-      if (strcmp (p->date, treated_as) != 0)
-       WARN ((0, 0, _("Option %s: Treating date `%s' as %s"),
-              p->option, p->date, treated_as));
+      if (verbose_option)
+       {
+         char const *treated_as = tartime (p->ts, true);
+         if (strcmp (p->date, treated_as) != 0)
+           WARN ((0, 0, _("Option %s: Treating date `%s' as %s"),
+                  p->option, p->date, treated_as));
+       }
+      free (p->date);
       free (p);
       p = next;
     }
 }
 
 \f
-static volatile int _argp_hang;
 
 /* Either NL or NUL, as decided by the --null option.  */
 static char filename_terminator;
@@ -1081,7 +1093,7 @@ read_name_from_file (FILE *fp, struct obstack *stk, int term)
       obstack_1grow (stk, c);
       counter++;
     }
-
+  
   if (counter == 0 && c != EOF)
     return file_list_skip;
 
@@ -1165,7 +1177,7 @@ update_argv (const char *filename, struct argp_state *state)
       if ((fp = fopen (filename, "r")) == NULL)
        open_fatal (filename);
     }
-
+  
   while ((read_state = read_name_from_file (fp, &argv_stk, term))
         != file_list_end)
     {
@@ -1174,17 +1186,18 @@ update_argv (const char *filename, struct argp_state *state)
        case file_list_success:
          count++;
          break;
-
+         
        case file_list_end: /* won't happen, just to pacify gcc */
          break;
-
+         
        case file_list_zero:
          {
            size_t size;
-
-           WARN ((0, 0, N_("%s: file name read contains nul character"),
-                  quotearg_colon (filename)));
-
+           
+           WARNOPT (WARN_FILENAME_WITH_NULS,
+                    (0, 0, N_("%s: file name read contains nul character"),
+                     quotearg_colon (filename)));
+           
            /* Prepare new stack contents */
            size = obstack_object_size (&argv_stk);
            p = obstack_finish (&argv_stk);
@@ -1199,34 +1212,34 @@ update_argv (const char *filename, struct argp_state *state)
            term = 0;
            break;
          }
-
+         
        case file_list_skip:
          break;
        }
     }
-
+  
   if (!is_stdin)
     fclose (fp);
-
+  
   if (count == 0)
     return;
-
+  
   start = obstack_finish (&argv_stk);
-
+  
   if (term == 0)
     for (p = start; *p; p += strlen (p) + 1)
       if (p[0] == '-')
        count++;
-
+  
   new_argc = state->argc + count;
   new_argv = xmalloc (sizeof (state->argv[0]) * (new_argc + 1));
   memcpy (new_argv, state->argv, sizeof (state->argv[0]) * (state->argc + 1));
   state->argv = new_argv;
   memmove (&state->argv[state->next + count], &state->argv[state->next],
           (state->argc - state->next + 1) * sizeof (state->argv[0]));
-
+  
   state->argc = new_argc;
-
+  
   for (i = state->next, p = start; *p; p += strlen (p) + 1, i++)
     {
       if (term == 0 && p[0] == '-')
@@ -1236,27 +1249,113 @@ update_argv (const char *filename, struct argp_state *state)
 }
 
 \f
-static void
-tar_help (struct argp_state *state)
+static char *
+tar_help_filter (int key, const char *text, void *input)
 {
-  argp_fmtstream_t fs;
-  state->flags |= ARGP_NO_EXIT;
-  argp_state_help (state, state->out_stream,
-                  ARGP_HELP_STD_HELP & ~ARGP_HELP_BUG_ADDR);
-  /* FIXME: use struct uparams.rmargin (from argp-help.c) instead of 79 */
-  fs = argp_make_fmtstream (state->out_stream, 0, 79, 0);
-
-  argp_fmtstream_printf (fs, "\n%s\n\n",
-                      _("Valid arguments for --quoting-style options are:"));
-  tar_list_quoting_styles (fs, "  ");
-
-  argp_fmtstream_puts (fs, _("\n*This* tar defaults to:\n"));
-  show_default_settings_fs (fs);
-  argp_fmtstream_putc (fs, '\n');
-  argp_fmtstream_printf (fs, _("Report bugs to %s.\n"),
-                        argp_program_bug_address);
-  argp_fmtstream_free (fs);
+  struct obstack stk;
+  char *s;
+
+  switch (key)
+    {
+    default:
+      s = (char*) text;
+      break;
+      
+    case 'j':
+      s = xasprintf (_("filter the archive through %s"), BZIP2_PROGRAM);
+      break;
+      
+    case 'z':
+      s = xasprintf (_("filter the archive through %s"), GZIP_PROGRAM);
+      break;
+      
+    case 'Z':
+      s = xasprintf (_("filter the archive through %s"), COMPRESS_PROGRAM);
+      break;
+
+    case LZIP_OPTION:
+      s = xasprintf (_("filter the archive through %s"), LZIP_PROGRAM);
+      break;
+      
+    case LZMA_OPTION:
+      s = xasprintf (_("filter the archive through %s"), LZMA_PROGRAM);
+      break;
+      
+    case 'J':
+      s = xasprintf (_("filter the archive through %s"), XZ_PROGRAM);
+      break;
+      
+    case ARGP_KEY_HELP_EXTRA:
+      obstack_init (&stk);
+      s = _("Valid arguments for the --quoting-style option are:");
+      obstack_grow (&stk, s, strlen (s));
+      obstack_grow (&stk, "\n\n", 2);
+      tar_list_quoting_styles (&stk, "  ");
+      s = _("\n*This* tar defaults to:\n");
+      obstack_grow (&stk, s, strlen (s));
+      s = format_default_settings ();
+      obstack_grow (&stk, s, strlen (s));
+      obstack_1grow (&stk, '\n');
+      obstack_1grow (&stk, 0);
+      s = xstrdup (obstack_finish (&stk));
+      obstack_free (&stk, NULL);
+    }
+  return s;
+}
+\f
+static char *
+expand_pax_option (struct tar_args *targs, const char *arg)
+{
+  struct obstack stk;
+  char *res;
+  
+  obstack_init (&stk);
+  while (*arg)
+    {
+      size_t seglen = strcspn (arg, ",");
+      char *p = memchr (arg, '=', seglen);
+      if (p)
+       {
+         size_t len = p - arg + 1;
+         obstack_grow (&stk, arg, len);
+         len = seglen - len;
+         for (++p; *p && isspace ((unsigned char) *p); p++)
+           len--;
+         if (*p == '{' && p[len-1] == '}')
+           {
+             struct timespec ts;
+             char *tmp = xmalloc (len);
+             memcpy (tmp, p + 1, len-2);
+             tmp[len-2] = 0;
+             if (get_date_or_file (targs, "--pax-option", tmp, &ts) == 0)
+               {
+                 char buf[UINTMAX_STRSIZE_BOUND], *s;
+                 s = umaxtostr (ts.tv_sec, buf);
+                 obstack_grow (&stk, s, strlen (s));
+               }
+             else
+               obstack_grow (&stk, p, len);
+             free (tmp);
+           }
+         else
+           obstack_grow (&stk, p, len);
+       }
+      else
+       obstack_grow (&stk, arg, seglen);
+
+      arg += seglen;
+      if (*arg)
+       {
+         obstack_1grow (&stk, *arg);
+         arg++;
+       }
+    }
+  obstack_1grow (&stk, 0);
+  res = xstrdup (obstack_finish (&stk));
+  obstack_free (&stk, NULL);
+  return res;
 }
+
 \f
 static error_t
 parse_opt (int key, char *arg, struct argp_state *state)
@@ -1270,15 +1369,15 @@ parse_opt (int key, char *arg, struct argp_state *state)
       name_add_name (arg, MAKE_INCL_OPTIONS (args));
       args->input_files = true;
       break;
-
+      
     case 'A':
       set_subcommand_option (CAT_SUBCOMMAND);
       break;
-
+      
     case 'a':
       args->compress_autodetect = true;
       break;
-
+      
     case NO_AUTO_COMPRESS_OPTION:
       args->compress_autodetect = false;
       break;
@@ -1294,65 +1393,65 @@ parse_opt (int key, char *arg, struct argp_state *state)
                        _("Invalid blocking factor")));
       }
       break;
-
+      
     case 'B':
       /* Try to reblock input records.  For reading 4.2BSD pipes.  */
-
+      
       /* It would surely make sense to exchange -B and -R, but it seems
         that -B has been used for a long while in Sun tar and most
         BSD-derived systems.  This is a consequence of the block/record
         terminology confusion.  */
-
+      
       read_full_records_option = true;
       break;
-
+      
     case 'c':
       set_subcommand_option (CREATE_SUBCOMMAND);
       break;
-
+      
     case 'C':
       name_add_dir (arg);
       break;
-
+      
     case 'd':
       set_subcommand_option (DIFF_SUBCOMMAND);
       break;
-
+      
     case 'f':
       if (archive_names == allocated_archive_names)
        archive_name_array = x2nrealloc (archive_name_array,
                                         &allocated_archive_names,
                                         sizeof (archive_name_array[0]));
-
+      
       archive_name_array[archive_names++] = arg;
       break;
-
+      
     case 'F':
       /* Since -F is only useful with -M, make it implied.  Run this
         script at the end of each tape.  */
-
+      
       info_script_option = arg;
       multi_volume_option = true;
       break;
-
+      
     case 'g':
       listed_incremental_option = arg;
       after_date_option = true;
       /* Fall through.  */
-
+      
     case 'G':
       /* We are making an incremental dump (FIXME: are we?); save
         directories at the beginning of the archive, and include in each
         directory its contents.  */
-
+      
       incremental_option = true;
       break;
-
+      
     case 'h':
       /* Follow symbolic links.  */
       dereference_option = true;
       break;
-
+      
     case HARD_DEREFERENCE_OPTION:
       hard_dereference_option = true;
       break;
@@ -1361,38 +1460,38 @@ parse_opt (int key, char *arg, struct argp_state *state)
       /* Ignore zero blocks (eofs).  This can't be the default,
         because Unix tar writes two blocks of zeros, then pads out
         the record with garbage.  */
-
+      
       ignore_zeros_option = true;
       break;
-
+      
     case 'j':
-      set_use_compress_program_option ("bzip2");
+      set_use_compress_program_option (BZIP2_PROGRAM);
       break;
-
+      
     case 'J':
-      set_use_compress_program_option ("xz");
+      set_use_compress_program_option (XZ_PROGRAM);
       break;
       
     case 'k':
       /* Don't replace existing files.  */
       old_files_option = KEEP_OLD_FILES;
       break;
-
+      
     case 'K':
       starting_file_option = true;
-      addname (arg, 0);
+      addname (arg, 0, true, NULL);
       break;
-
+      
     case ONE_FILE_SYSTEM_OPTION:
       /* When dumping directories, don't dump files/subdirectories
         that are on other filesystems. */
       one_file_system_option = true;
       break;
-
+      
     case 'l':
       check_links_option = 1;
       break;
-
+      
     case 'L':
       {
        uintmax_t u;
@@ -1403,88 +1502,105 @@ parse_opt (int key, char *arg, struct argp_state *state)
        multi_volume_option = true;
       }
       break;
-
+      
+    case LEVEL_OPTION:
+      {
+       char *p;
+       incremental_level = strtoul (arg, &p, 10);
+       if (*p)
+         USAGE_ERROR ((0, 0, _("Invalid incremental level value")));
+      }
+      break;
+      
+    case LZIP_OPTION:
+      set_use_compress_program_option (LZIP_PROGRAM);
+      break;
+      
     case LZMA_OPTION:
-      set_use_compress_program_option ("lzma");
+      set_use_compress_program_option (LZMA_PROGRAM);
       break;
       
     case LZOP_OPTION:
-      set_use_compress_program_option ("lzop");
+      set_use_compress_program_option (LZOP_PROGRAM);
       break;
       
     case 'm':
       touch_option = true;
       break;
-
+      
     case 'M':
       /* Make multivolume archive: when we can't write any more into
         the archive, re-open it, and continue writing.  */
-
+      
       multi_volume_option = true;
       break;
-
+      
     case MTIME_OPTION:
       get_date_or_file (args, "--mtime", arg, &mtime_option);
       set_mtime_option = true;
       break;
-
+      
     case 'n':
-      seekable_archive = true;
+      seek_option = 1;
       break;
-
+      
+    case NO_SEEK_OPTION:
+      seek_option = 0;
+      break;
+      
     case 'N':
       after_date_option = true;
       /* Fall through.  */
-
+      
     case NEWER_MTIME_OPTION:
       if (NEWER_OPTION_INITIALIZED (newer_mtime_option))
        USAGE_ERROR ((0, 0, _("More than one threshold date")));
       get_date_or_file (args,
                        key == NEWER_MTIME_OPTION ? "--newer-mtime"
-                         : "--after-date", arg, &newer_mtime_option);
+                       : "--after-date", arg, &newer_mtime_option);
       break;
-
+      
     case 'o':
       args->o_option = true;
       break;
-
+      
     case 'O':
       to_stdout_option = true;
       break;
-
+      
     case 'p':
       same_permissions_option = true;
       break;
-
+      
     case 'P':
       absolute_names_option = true;
       break;
-
+      
     case 'r':
       set_subcommand_option (APPEND_SUBCOMMAND);
       break;
-
+      
     case 'R':
       /* Print block numbers for debugging bad tar archives.  */
-
+      
       /* It would surely make sense to exchange -B and -R, but it seems
         that -B has been used for a long while in Sun tar and most
         BSD-derived systems.  This is a consequence of the block/record
         terminology confusion.  */
-
+      
       block_number_option = true;
       break;
-
+      
     case 's':
       /* Names to extract are sorted.  */
-
+      
       same_order_option = true;
       break;
-
+      
     case 'S':
       sparse_option = true;
       break;
-
+      
     case SPARSE_VERSION_OPTION:
       sparse_option = true;
       {
@@ -1500,17 +1616,16 @@ parse_opt (int key, char *arg, struct argp_state *state)
          }
       }
       break;
-
+      
     case 't':
       set_subcommand_option (LIST_SUBCOMMAND);
       verbose_option++;
       break;
-
+      
     case TEST_LABEL_OPTION:
-      set_subcommand_option (LIST_SUBCOMMAND);
-      test_label_option = true;
+      set_subcommand_option (TEST_LABEL_SUBCOMMAND);
       break;
-
+      
     case 'T':
       update_argv (arg, state);
       /* Indicate we've been given -T option. This is for backward
@@ -1518,39 +1633,40 @@ parse_opt (int key, char *arg, struct argp_state *state)
         succeed */
       files_from_option = true;
       break;
-
+      
     case 'u':
       set_subcommand_option (UPDATE_SUBCOMMAND);
       break;
-
+      
     case 'U':
       old_files_option = UNLINK_FIRST_OLD_FILES;
       break;
-
+      
     case UTC_OPTION:
       utc_option = true;
       break;
-
+      
     case 'v':
       verbose_option++;
+      warning_option |= WARN_VERBOSE_WARNINGS;
       break;
-
+      
     case 'V':
       volume_label_option = arg;
       break;
-
+      
     case 'w':
       interactive_option = true;
       break;
-
+      
     case 'W':
       verify_option = true;
       break;
-
+      
     case 'x':
       set_subcommand_option (EXTRACT_SUBCOMMAND);
       break;
-
+      
     case 'X':
       if (add_exclude_file (add_exclude, excluded, arg,
                            MAKE_EXCL_OPTIONS (args), '\n')
@@ -1560,19 +1676,19 @@ parse_opt (int key, char *arg, struct argp_state *state)
          FATAL_ERROR ((0, e, "%s", quotearg_colon (arg)));
        }
       break;
-
+      
     case 'z':
-      set_use_compress_program_option ("gzip");
+      set_use_compress_program_option (GZIP_PROGRAM);
       break;
-
+      
     case 'Z':
-      set_use_compress_program_option ("compress");
+      set_use_compress_program_option (COMPRESS_PROGRAM);
       break;
-
+      
     case ANCHORED_OPTION:
       args->matching_flags |= EXCLUDE_ANCHORED;
       break;
-
+      
     case ATIME_PRESERVE_OPTION:
       atime_preserve_option =
        (arg
@@ -1584,7 +1700,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
                      _("--atime-preserve='system' is not supported"
                        " on this platform")));
       break;
-
+      
     case CHECK_DEVICE_OPTION:
       check_device_option = true;
       break;
@@ -1597,7 +1713,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
       if (arg)
        {
          char *p;
-
+         
          if (*arg == '.')
            {
              checkpoint_compile_action (".");
@@ -1611,7 +1727,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
       else
        checkpoint_option = DEFAULT_CHECKPOINT;
       break;
-
+      
     case CHECKPOINT_ACTION_OPTION:
       checkpoint_compile_action (arg);
       break;
@@ -1621,82 +1737,86 @@ parse_opt (int key, char *arg, struct argp_state *state)
       if (arg)
        args->version_control_string = arg;
       break;
-
+      
     case DELAY_DIRECTORY_RESTORE_OPTION:
       delay_directory_restore_option = true;
       break;
-
+      
     case NO_DELAY_DIRECTORY_RESTORE_OPTION:
       delay_directory_restore_option = false;
       break;
-
+      
     case DELETE_OPTION:
       set_subcommand_option (DELETE_SUBCOMMAND);
       break;
-
+      
+    case EXCLUDE_BACKUPS_OPTION:
+      add_exclude_array (backup_file_table);
+      break;
+      
     case EXCLUDE_OPTION:
       add_exclude (excluded, arg, MAKE_EXCL_OPTIONS (args));
       break;
-
+      
     case EXCLUDE_CACHES_OPTION:
       add_exclusion_tag ("CACHEDIR.TAG", exclusion_tag_contents,
                         cachedir_file_p);
       break;
-
+      
     case EXCLUDE_CACHES_UNDER_OPTION:
       add_exclusion_tag ("CACHEDIR.TAG", exclusion_tag_under,
                         cachedir_file_p);
       break;
-
+      
     case EXCLUDE_CACHES_ALL_OPTION:
       add_exclusion_tag ("CACHEDIR.TAG", exclusion_tag_all,
                         cachedir_file_p);
       break;
-
+      
     case EXCLUDE_TAG_OPTION:
       add_exclusion_tag (arg, exclusion_tag_contents, NULL);
       break;
-
+      
     case EXCLUDE_TAG_UNDER_OPTION:
       add_exclusion_tag (arg, exclusion_tag_under, NULL);
       break;
-
+      
     case EXCLUDE_TAG_ALL_OPTION:
       add_exclusion_tag (arg, exclusion_tag_all, NULL);
       break;
-
+      
     case EXCLUDE_VCS_OPTION:
-      exclude_vcs_files ();
+      add_exclude_array (vcs_file_table);
       break;
       
     case FORCE_LOCAL_OPTION:
       force_local_option = true;
       break;
-
+      
     case 'H':
       set_archive_format (arg);
       break;
-
+      
     case INDEX_FILE_OPTION:
       index_file_name = arg;
       break;
-
+      
     case IGNORE_CASE_OPTION:
       args->matching_flags |= FNM_CASEFOLD;
       break;
-
+      
     case IGNORE_COMMAND_ERROR_OPTION:
       ignore_command_error_option = true;
       break;
-
+      
     case IGNORE_FAILED_READ_OPTION:
       ignore_failed_read_option = true;
       break;
-
+      
     case KEEP_NEWER_FILES_OPTION:
       old_files_option = KEEP_NEWER_FILES;
       break;
-
+      
     case GROUP_OPTION:
       if (! (strlen (arg) < GNAME_FIELD_SIZE
             && gname_to_gid (arg, &group_option)))
@@ -1707,10 +1827,10 @@ parse_opt (int key, char *arg, struct argp_state *state)
            group_option = g;
          else
            FATAL_ERROR ((0, 0, "%s: %s", quotearg_colon (arg),
-                         _("%s: Invalid group")));
+                         _("Invalid group")));
        }
       break;
-
+      
     case MODE_OPTION:
       mode_option = mode_compile (arg);
       if (!mode_option)
@@ -1718,49 +1838,49 @@ parse_opt (int key, char *arg, struct argp_state *state)
       initial_umask = umask (0);
       umask (initial_umask);
       break;
-
+      
     case NO_ANCHORED_OPTION:
       args->include_anchored = 0; /* Clear the default for comman line args */
       args->matching_flags &= ~ EXCLUDE_ANCHORED;
       break;
-
+      
     case NO_IGNORE_CASE_OPTION:
       args->matching_flags &= ~ FNM_CASEFOLD;
       break;
-
+      
     case NO_IGNORE_COMMAND_ERROR_OPTION:
       ignore_command_error_option = false;
       break;
-
+      
     case NO_OVERWRITE_DIR_OPTION:
       old_files_option = NO_OVERWRITE_DIR_OLD_FILES;
       break;
-
+      
     case NO_QUOTE_CHARS_OPTION:
       for (;*arg; arg++)
        set_char_quoting (NULL, *arg, 0);
       break;
-
+      
     case NO_WILDCARDS_OPTION:
       args->wildcards = disable_wildcards;
       break;
-
+      
     case NO_WILDCARDS_MATCH_SLASH_OPTION:
       args->matching_flags |= FNM_FILE_NAME;
       break;
-
+      
     case NULL_OPTION:
       filename_terminator = '\0';
       break;
-
+      
     case NO_NULL_OPTION:
       filename_terminator = '\n';
       break;
-
+      
     case NUMERIC_OWNER_OPTION:
       numeric_owner_option = true;
       break;
-
+      
     case OCCURRENCE_OPTION:
       if (!arg)
        occurrence_option = 1;
@@ -1774,15 +1894,15 @@ parse_opt (int key, char *arg, struct argp_state *state)
                          _("Invalid number")));
        }
       break;
-
+      
     case OVERWRITE_DIR_OPTION:
       old_files_option = DEFAULT_OLD_FILES;
       break;
-
+      
     case OVERWRITE_OPTION:
       old_files_option = OVERWRITE_OLD_FILES;
       break;
-
+      
     case OWNER_OPTION:
       if (! (strlen (arg) < UNAME_FIELD_SIZE
             && uname_to_uid (arg, &owner_option)))
@@ -1796,25 +1916,29 @@ parse_opt (int key, char *arg, struct argp_state *state)
                          _("Invalid owner")));
        }
       break;
-
+      
     case QUOTE_CHARS_OPTION:
       for (;*arg; arg++)
        set_char_quoting (NULL, *arg, 1);
       break;
-
+      
     case QUOTING_STYLE_OPTION:
       tar_set_quoting_style (arg);
       break;
-
+      
     case PAX_OPTION:
-      args->pax_option = true;
-      xheader_set_option (arg);
+      {
+       char *tmp = expand_pax_option (args, arg);
+       args->pax_option = true;
+       xheader_set_option (tmp);
+       free (tmp);
+      }
       break;
-
+      
     case POSIX_OPTION:
       set_archive_format ("posix");
       break;
-
+      
     case PRESERVE_OPTION:
       /* FIXME: What it is good for? */
       same_permissions_option = true;
@@ -1822,7 +1946,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
       WARN ((0, 0, _("The --preserve option is deprecated, "
                     "use --preserve-permissions --preserve-order instead")));
       break;
-
+      
     case RECORD_SIZE_OPTION:
       {
        uintmax_t u;
@@ -1837,32 +1961,36 @@ parse_opt (int key, char *arg, struct argp_state *state)
        blocking_factor = record_size / BLOCKSIZE;
       }
       break;
-
+      
     case RECURSIVE_UNLINK_OPTION:
       recursive_unlink_option = true;
       break;
-
+      
     case REMOVE_FILES_OPTION:
       remove_files_option = true;
       break;
-
+      
     case RESTRICT_OPTION:
       restrict_option = true;
       break;
-
+      
     case RMT_COMMAND_OPTION:
       rmt_command = arg;
       break;
-
+      
     case RSH_COMMAND_OPTION:
       rsh_command_option = arg;
       break;
-
+      
     case SHOW_DEFAULTS_OPTION:
-      show_default_settings (stdout);
-      close_stdout ();
-      exit (0);
-
+      {
+       char *s = format_default_settings ();
+       printf ("%s\n", s);
+       close_stdout ();
+       free (s);
+       exit (0);
+      }
+      
     case STRIP_COMPONENTS_OPTION:
       {
        uintmax_t u;
@@ -1948,6 +2076,10 @@ parse_opt (int key, char *arg, struct argp_state *state)
       unquote_option = false;
       break;
 
+    case WARNING_OPTION:
+      set_warning_option (arg);
+      break;
+      
     case '0':
     case '1':
     case '2':
@@ -2012,28 +2144,6 @@ parse_opt (int key, char *arg, struct argp_state *state)
 
 #endif /* not DEVICE_PREFIX */
 
-    case '?':
-      tar_help (state);
-      close_stdout ();
-      exit (0);
-
-    case USAGE_OPTION:
-      argp_state_help (state, state->out_stream, ARGP_HELP_USAGE);
-      close_stdout ();
-      exit (0);
-
-    case VERSION_OPTION:
-      version_etc (state->out_stream, "tar", PACKAGE_NAME, VERSION,
-                  "John Gilmore", "Jay Fenlason", (char *) NULL);
-      close_stdout ();
-      exit (0);
-
-    case HANG_OPTION:
-      _argp_hang = atoi (arg ? arg : "3600");
-      while (_argp_hang-- > 0)
-       sleep (1);
-      break;
-
     default:
       return ARGP_ERR_UNKNOWN;
     }
@@ -2046,7 +2156,7 @@ static struct argp argp = {
   N_("[FILE]..."),
   doc,
   NULL,
-  NULL,
+  tar_help_filter,
   NULL
 };
 
@@ -2074,12 +2184,20 @@ find_argp_option (struct argp_option *o, int letter)
   return NULL;
 }
 
+static const char *tar_authors[] = {
+  "John Gilmore",
+  "Jay Fenlason",
+  NULL
+};
+
 static void
 decode_options (int argc, char **argv)
 {
   int idx;
   struct tar_args args;
 
+  argp_version_setup ("tar", tar_authors);
+  
   /* Set some default option values.  */
   args.textual_date = NULL;
   args.wildcards = default_wildcards;
@@ -2108,6 +2226,10 @@ decode_options (int argc, char **argv)
   group_option = -1;
 
   check_device_option = true;
+
+  incremental_level = -1;
+
+  seek_option = -1;
   
   /* Convert old-style tar call by exploding option element and rearranging
      options accordingly.  */
@@ -2170,8 +2292,7 @@ decode_options (int argc, char **argv)
 
   prepend_default_options (getenv ("TAR_OPTIONS"), &argc, &argv);
 
-  if (argp_parse (&argp, argc, argv, ARGP_IN_ORDER|ARGP_NO_HELP,
-                 &idx, &args))
+  if (argp_parse (&argp, argc, argv, ARGP_IN_ORDER, &idx, &args))
     exit (TAREXIT_FAILURE);
 
 
@@ -2240,18 +2361,6 @@ decode_options (int argc, char **argv)
                          _("--occurrence cannot be used in the requested operation mode")));
     }
 
-  if (seekable_archive && subcommand_option == DELETE_SUBCOMMAND)
-    {
-      /* The current code in delete.c is based on the assumption that
-        skip_member() reads all data from the archive. So, we should
-        make sure it won't use seeks. On the other hand, the same code
-        depends on the ability to backspace a record in the archive,
-        so setting seekable_archive to false is technically incorrect.
-         However, it is tested only in skip_member(), so it's not a
-        problem. */
-      seekable_archive = false;
-    }
-
   if (archive_names == 0)
     {
       /* If no archive file name given, try TAPE from the environment, or
@@ -2273,7 +2382,10 @@ decode_options (int argc, char **argv)
       && NEWER_OPTION_INITIALIZED (newer_mtime_option))
     USAGE_ERROR ((0, 0,
                  _("Cannot combine --listed-incremental with --newer")));
-
+  if (incremental_level != -1 && !listed_incremental_option)
+    WARN ((0, 0,
+          _("--level is meaningless without --listed-incremental")));
+  
   if (volume_label_option)
     {
       if (archive_format == GNU_FORMAT || archive_format == OLDGNU_FORMAT)
@@ -2335,7 +2447,7 @@ decode_options (int argc, char **argv)
     old_files_option = UNLINK_FIRST_OLD_FILES;
 
 
-  if (test_label_option)
+  if (subcommand_option == TEST_LABEL_SUBCOMMAND)
     {
       /* --test-label is silent if the user has specified the label name to
         compare against. */
@@ -2370,6 +2482,7 @@ decode_options (int argc, char **argv)
     case EXTRACT_SUBCOMMAND:
     case LIST_SUBCOMMAND:
     case DIFF_SUBCOMMAND:
+    case TEST_LABEL_SUBCOMMAND:
       for (archive_name_cursor = archive_name_array;
           archive_name_cursor < archive_name_array + archive_names;
           archive_name_cursor++)
@@ -2419,8 +2532,7 @@ decode_options (int argc, char **argv)
 
   checkpoint_finish_compile ();
   
-  if (verbose_option)
-    report_textual_dates (&args);
+  report_textual_dates (&args);
 }
 
 \f
@@ -2431,7 +2543,7 @@ int
 main (int argc, char **argv)
 {
   set_start_time ();
-  program_name = argv[0];
+  set_program_name (argv[0]);
 
   setlocale (LC_ALL, "");
   bindtextdomain (PACKAGE, LOCALEDIR);
@@ -2455,10 +2567,13 @@ main (int argc, char **argv)
   obstack_init (&argv_stk);
 
   /* Ensure default behavior for some signals */
-  signal (SIGPIPE, SIG_DFL);
+  signal (SIGPIPE, SIG_IGN);
   /* System V fork+wait does not work if SIGCHLD is ignored.  */
   signal (SIGCHLD, SIG_DFL);
 
+  /* Try to disable the ability to unlink a directory.  */
+  priv_set_remove_linkdir ();
+  
   /* Decode options.  */
 
   decode_options (argc, argv);
@@ -2474,7 +2589,7 @@ main (int argc, char **argv)
     {
     case UNKNOWN_SUBCOMMAND:
       USAGE_ERROR ((0, 0,
-                   _("You must specify one of the `-Acdtrux' options")));
+                   _("You must specify one of the `-Acdtrux' or `--test-label'  options")));
 
     case CAT_SUBCOMMAND:
     case UPDATE_SUBCOMMAND:
@@ -2508,6 +2623,9 @@ main (int argc, char **argv)
       diff_init ();
       read_and (diff_archive);
       break;
+
+    case TEST_LABEL_SUBCOMMAND:
+      test_archive_label ();
     }
 
   if (totals_option)
@@ -2530,7 +2648,7 @@ main (int argc, char **argv)
   if (stdlis == stdout)
     close_stdout ();
   else if (ferror (stderr) || fclose (stderr) != 0)
-    exit_status = TAREXIT_FAILURE;
+    set_exit_status (TAREXIT_FAILURE);
 
   return exit_status;
 }
@@ -2568,3 +2686,13 @@ tar_timespec_cmp (struct timespec a, struct timespec b)
     a.tv_nsec = b.tv_nsec = 0;
   return timespec_cmp (a, b);
 }
+
+/* Set tar exit status to VAL, unless it is already indicating
+   a more serious condition. This relies on the fact that the
+   values of TAREXIT_ constants are ranged by severity. */
+void
+set_exit_status (int val)
+{
+  if (val > exit_status)
+    exit_status = val;
+}
index 2e0de318618bf2236d0bc624c5d6be863079b5cc..03c06f6496e6715a7a176ae1af120433bf60fed1 100644 (file)
@@ -430,21 +430,21 @@ run_case_conv (enum case_ctl_type case_ctl, char *ptr, size_t size)
   switch (case_ctl)
     {
     case ctl_upcase_next:
-      case_ctl_buffer[0] = toupper (case_ctl_buffer[0]);
+      case_ctl_buffer[0] = toupper ((unsigned char) case_ctl_buffer[0]);
       break;
       
     case ctl_locase_next:
-      case_ctl_buffer[0] = tolower (case_ctl_buffer[0]);
+      case_ctl_buffer[0] = tolower ((unsigned char) case_ctl_buffer[0]);
       break;
       
     case ctl_upcase:
       for (p = case_ctl_buffer; p < case_ctl_buffer + size; p++)
-       *p = toupper (*p);
+       *p = toupper ((unsigned char) *p);
       break;
       
     case ctl_locase:
       for (p = case_ctl_buffer; p < case_ctl_buffer + size; p++)
-       *p = tolower (*p);
+       *p = tolower ((unsigned char) *p);
       break;
 
     case ctl_stop:
@@ -628,4 +628,3 @@ transform_name (char **pinput, int type)
 {
   return transform_name_fp (pinput, type, NULL, NULL);
 }
-
diff --git a/src/unlink.c b/src/unlink.c
new file mode 100644 (file)
index 0000000..2af6f99
--- /dev/null
@@ -0,0 +1,158 @@
+/* This file is part of GNU tar. 
+   Copyright (C) 2009 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, write to the Free Software Foundation, Inc.,
+   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include <system.h>
+#include "common.h"
+#include <quotearg.h>
+
+struct deferred_unlink
+  {
+    struct deferred_unlink *next;   /* Next unlink in the queue */
+    char *file_name;                /* Absolute name of the file to unlink */
+    bool is_dir;                    /* True if file_name is a directory */
+    off_t records_written;          /* Number of records written when this
+                                      entry got added to the queue */
+  };
+
+/* The unlink queue */
+static struct deferred_unlink *dunlink_head, *dunlink_tail;
+
+/* Number of entries in the queue */
+static size_t dunlink_count;
+
+/* List of entries available for allocation */
+static struct deferred_unlink *dunlink_avail;
+
+/* Delay (number of records written) between adding entry to the
+   list and its actual removal. */
+size_t deferred_unlink_delay = 0;
+
+static struct deferred_unlink *
+dunlink_alloc ()
+{
+  struct deferred_unlink *p;
+  if (dunlink_avail)
+    {
+      p = dunlink_avail;
+      dunlink_avail = p->next;
+      p->next  = NULL;
+    }
+  else
+    p = xmalloc (sizeof (*p));
+  return p;
+}
+
+static void
+dunlink_reclaim (struct deferred_unlink *p)
+{
+  free (p->file_name);
+  p->next = dunlink_avail;
+  dunlink_avail = p;
+}
+
+static void
+flush_deferred_unlinks (bool force)
+{
+  struct deferred_unlink *p, *prev = NULL;
+
+  for (p = dunlink_head; p; )
+    {
+      struct deferred_unlink *next = p->next;
+      if (force
+         || records_written > p->records_written + deferred_unlink_delay)
+       {
+         if (p->is_dir)
+           {
+             if (rmdir (p->file_name) != 0)
+               {
+                 switch (errno)
+                   {
+                   case ENOENT:
+                     /* nothing to worry about */
+                     break;
+                   case ENOTEMPTY:
+                     if (!force)
+                       {
+                         /* Keep the record in list, in the hope we'll
+                            be able to remove it later */
+                         prev = p;
+                         p = next;
+                         continue;
+                       }
+                     /* fall through */
+                   default:
+                     rmdir_error (p->file_name);
+                   }
+               }
+           }
+         else
+           {
+             if (unlink (p->file_name) != 0 && errno != ENOENT)
+               unlink_error (p->file_name);
+           }
+         dunlink_reclaim (p);
+         dunlink_count--;
+         p = next;
+         if (prev)
+           prev->next = p;
+         else
+           dunlink_head = p;
+       }
+      else
+       {
+         prev = p;
+         p = next;
+       }         
+    }
+  if (!dunlink_head)
+    dunlink_tail = NULL;
+}
+
+void
+finish_deferred_unlinks ()
+{
+  flush_deferred_unlinks (true);
+  while (dunlink_avail)
+    {
+      struct deferred_unlink *next = dunlink_avail->next;
+      free (dunlink_avail);
+      dunlink_avail = next;
+    }
+}
+
+void
+queue_deferred_unlink (const char *name, bool is_dir)
+{
+  struct deferred_unlink *p;
+
+  if (dunlink_head
+      && records_written > dunlink_head->records_written + deferred_unlink_delay)
+    flush_deferred_unlinks (false);
+  
+  p = dunlink_alloc ();
+  p->next = NULL;
+  p->file_name = normalize_filename (name);
+  p->is_dir = is_dir;
+  p->records_written = records_written;
+  
+  if (dunlink_tail)
+    dunlink_tail->next = p;
+  else
+    dunlink_head = p;
+  dunlink_tail = p;
+  dunlink_count++;
+}
index fa161935aee190e20a34b29d4e9d9dd0c54f6a56..b0151759d9b0430b34086d013a29efae722d99ce 100644 (file)
@@ -1,7 +1,7 @@
 /* Update a tar archive.
 
    Copyright (C) 1988, 1992, 1994, 1996, 1997, 1999, 2000, 2001, 2003,
-   2004, 2005, 2007 Free Software Foundation, Inc.
+   2004, 2005, 2007, 2010 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
@@ -114,7 +114,9 @@ update_archive (void)
 
   while (!found_end)
     {
-      enum read_header status = read_header (false);
+      enum read_header status = read_header (&current_header, 
+                                             &current_stat_info, 
+                                             read_header_auto);
 
       switch (status)
        {
@@ -137,13 +139,35 @@ update_archive (void)
 
                chdir_do (name->change_dir);
                if (deref_stat (dereference_option,
-                               current_stat_info.file_name, &s) == 0
-                   && (tar_timespec_cmp (get_stat_mtime (&s),
-                                         current_stat_info.mtime)
-                       <= 0))
-                 add_avoided_name (current_stat_info.file_name);
+                               current_stat_info.file_name, &s) == 0)
+                 {
+                   if (S_ISDIR (s.st_mode))
+                     {
+                       char *p, *dirp;
+                       dirp = savedir (name->name);
+                       if (!dirp)
+                         savedir_error (name->name);
+                       else
+                         {
+                           namebuf_t nbuf = namebuf_create (name->name);
+                           
+                           for (p = dirp; *p; p += strlen (p) + 1)
+                             addname (namebuf_name (nbuf, p),
+                                      0, false, NULL);
+                           
+                           namebuf_free (nbuf);
+                           free (dirp);
+                           
+                           remname (name);
+                         }
+                     }
+                   else if (tar_timespec_cmp (get_stat_mtime (&s),
+                                              current_stat_info.mtime)
+                            <= 0)
+                     remname (name);
+                 }
              }
-
+           
            skip_member ();
            break;
          }
@@ -189,10 +213,10 @@ update_archive (void)
   output_start = current_block->buffer;
 
   {
-    char *file_name;
-
-    while ((file_name = name_from_list ()) != NULL)
+    struct name const *p;
+    while ((p = name_from_list ()) != NULL)
       {
+       char *file_name = p->name;
        if (excluded_name (file_name))
          continue;
        if (interactive_option && !confirm ("add", file_name))
diff --git a/src/warning.c b/src/warning.c
new file mode 100644 (file)
index 0000000..a9cbccb
--- /dev/null
@@ -0,0 +1,98 @@
+/* This file is part of GNU tar.
+
+   Copyright (C) 2009 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 <system.h>
+#include <argmatch.h>
+
+#include "common.h"
+
+static char const *const warning_args[] = {
+  "all",
+  "alone-zero-block",
+  "bad-dumpdir",
+  "cachedir",
+  "contiguous-cast",
+  "file-changed",
+  "file-ignored",
+  "file-removed",
+  "file-shrank",
+  "file-unchanged",
+  "filename-with-nuls",
+  "ignore-archive",
+  "ignore-newer",
+  "new-directory",
+  "rename-directory",
+  "symlink-cast",
+  "timestamp",
+  "unknown-cast",
+  "unknown-keyword",
+  "xdev",
+  NULL
+};
+
+static int warning_types[] = {
+  WARN_ALL,
+  WARN_ALONE_ZERO_BLOCK,
+  WARN_BAD_DUMPDIR,
+  WARN_CACHEDIR,
+  WARN_CONTIGUOUS_CAST,
+  WARN_FILE_CHANGED,
+  WARN_FILE_IGNORED,
+  WARN_FILE_REMOVED,
+  WARN_FILE_SHRANK,
+  WARN_FILE_UNCHANGED,
+  WARN_FILENAME_WITH_NULS,
+  WARN_IGNORE_ARCHIVE,
+  WARN_IGNORE_NEWER,
+  WARN_NEW_DIRECTORY,
+  WARN_RENAME_DIRECTORY,
+  WARN_SYMLINK_CAST,
+  WARN_TIMESTAMP,
+  WARN_UNKNOWN_CAST,
+  WARN_UNKNOWN_KEYWORD,
+  WARN_XDEV
+};
+
+ARGMATCH_VERIFY (warning_args, warning_types);
+
+int warning_option = WARN_ALL;
+
+void
+set_warning_option (const char *arg)
+{
+  int negate = 0;
+  int option;
+  
+  if (strcmp (arg, "none") == 0)
+    {
+      warning_option = 0;
+      return;
+    }
+  if (strlen (arg) > 2 && memcmp (arg, "no-", 3) == 0)
+    {
+      negate = 1;
+      arg += 3;
+    }
+
+  option = XARGMATCH ("--warning", arg, 
+                     warning_args, warning_types);
+  if (negate)
+    warning_option &= ~option;
+  else
+    warning_option |= option;
+}
+  
index 919ecd393b21a69f3572aee138ce3c95d0b3c06c..b5c9869c91dcb7b092b7544b437df9e5d9f3031b 100644 (file)
@@ -1,6 +1,7 @@
 /* POSIX extended headers for tar.
 
-   Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2009, 2010 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
@@ -96,9 +97,15 @@ static struct keyword_list *global_header_override_list;
 /* Template for the name field of an 'x' type header */
 static char *exthdr_name;
 
+static char *exthdr_mtime_option;
+static time_t exthdr_mtime;
+
 /* Template for the name field of a 'g' type header */
 static char *globexthdr_name;
 
+static char *globexthdr_mtime_option;
+static time_t globexthdr_mtime;
+
 bool
 xheader_keyword_deleted_p (const char *kw)
 {
@@ -156,6 +163,21 @@ xheader_set_single_keyword (char *kw)
   USAGE_ERROR ((0, 0, _("Keyword %s is unknown or not yet implemented"), kw));
 }
 
+static void
+assign_time_option (char **sval, time_t *tval, const char *input)
+{
+  uintmax_t u;
+  char *p;
+  time_t t = u = strtoumax (input, &p, 10);
+  if (t != u || *p || errno == ERANGE)
+    ERROR ((0, 0, _("Time stamp is out of allowed range")));
+  else
+    {
+      *tval = t;
+      assign_string (sval, input);
+    }
+}
+
 static void
 xheader_set_keyword_equal (char *kw, char *eq)
 {
@@ -168,12 +190,12 @@ xheader_set_keyword_equal (char *kw, char *eq)
       global = false;
     }
 
-  while (p > kw && isspace (*p))
+  while (p > kw && isspace ((unsigned char) *p))
     p--;
 
   *p = 0;
 
-  for (p = eq + 1; *p && isspace (*p); p++)
+  for (p = eq + 1; *p && isspace ((unsigned char) *p); p++)
     ;
 
   if (strcmp (kw, "delete") == 0)
@@ -186,6 +208,10 @@ xheader_set_keyword_equal (char *kw, char *eq)
     assign_string (&exthdr_name, p);
   else if (strcmp (kw, "globexthdr.name") == 0)
     assign_string (&globexthdr_name, p);
+  else if (strcmp (kw, "exthdr.mtime") == 0)
+    assign_time_option (&exthdr_mtime_option, &exthdr_mtime, p);
+  else if (strcmp (kw, "globexthdr.mtime") == 0)
+    assign_time_option (&globexthdr_mtime_option, &globexthdr_mtime, p);
   else
     {
       if (xheader_protected_keyword_p (kw))
@@ -364,14 +390,26 @@ xheader_ghdr_name (void)
 }
 
 void
-xheader_write (char type, char *name, struct xheader *xhdr)
+xheader_write (char type, char *name, time_t t, struct xheader *xhdr)
 {
   union block *header;
   size_t size;
   char *p;
 
   size = xhdr->size;
-  header = start_private_header (name, size);
+  switch (type)
+    {
+    case XGLTYPE:
+      if (globexthdr_mtime_option)
+       t = globexthdr_mtime;
+      break;
+
+    case XHDTYPE:
+      if (exthdr_mtime_option)
+       t = exthdr_mtime;
+      break;
+    }
+  header = start_private_header (name, size, t);
   header->header.typeflag = type;
 
   simple_finish_header (header);
@@ -403,30 +441,37 @@ xheader_write (char type, char *name, struct xheader *xhdr)
 void
 xheader_write_global (struct xheader *xhdr)
 {
-  char *name;
-  struct keyword_list *kp;
-
-  if (!keyword_global_override_list)
-    return;
+  if (keyword_global_override_list)
+    {
+      struct keyword_list *kp;
 
-  xheader_init (xhdr);
-  for (kp = keyword_global_override_list; kp; kp = kp->next)
-    code_string (kp->value, kp->pattern, xhdr);
-  xheader_finish (xhdr);
-  xheader_write (XGLTYPE, name = xheader_ghdr_name (), xhdr);
-  free (name);
+      xheader_init (xhdr);
+      for (kp = keyword_global_override_list; kp; kp = kp->next)
+       code_string (kp->value, kp->pattern, xhdr);
+    }
+  if (xhdr->stk)
+    {
+      char *name;
+      
+      xheader_finish (xhdr);
+      xheader_write (XGLTYPE, name = xheader_ghdr_name (), time (NULL), xhdr);
+      free (name);
+    }
 }
 
 \f
 /* General Interface */
 
+#define XHDR_PROTECTED 0x01
+#define XHDR_GLOBAL    0x02
+
 struct xhdr_tab
 {
   char const *keyword;
   void (*coder) (struct tar_stat_info const *, char const *,
                 struct xheader *, void const *data);
   void (*decoder) (struct tar_stat_info *, char const *, char const *, size_t);
-  bool protect;
+  int flags;
 };
 
 /* This declaration must be extern, because ISO C99 section 6.9.2
@@ -454,7 +499,7 @@ xheader_protected_pattern_p (const char *pattern)
   struct xhdr_tab const *p;
 
   for (p = xhdr_tab; p->keyword; p++)
-    if (p->protect && fnmatch (pattern, p->keyword, 0) == 0)
+    if ((p->flags & XHDR_PROTECTED) && fnmatch (pattern, p->keyword, 0) == 0)
       return true;
   return false;
 }
@@ -465,7 +510,7 @@ xheader_protected_keyword_p (const char *keyword)
   struct xhdr_tab const *p;
 
   for (p = xhdr_tab; p->keyword; p++)
-    if (p->protect && strcmp (p->keyword, keyword) == 0)
+    if ((p->flags & XHDR_PROTECTED) && strcmp (p->keyword, keyword) == 0)
       return true;
   return false;
 }
@@ -571,8 +616,9 @@ decx (void *data, char const *keyword, char const *value, size_t size)
   if (t)
     t->decoder (st, keyword, value, size);
   else
-    WARN((0, 0, _("Ignoring unknown extended header keyword `%s'"),
-        keyword));
+    WARNOPT (WARN_UNKNOWN_KEYWORD,
+            (0, 0, _("Ignoring unknown extended header keyword `%s'"),
+             keyword));
 }
 
 void
@@ -595,7 +641,11 @@ decg (void *data, char const *keyword, char const *value,
       size_t size __attribute__((unused)))
 {
   struct keyword_list **kwl = data;
-  xheader_list_append (kwl, keyword, value);
+  struct xhdr_tab const *tab = locate_handler (keyword);
+  if (tab && (tab->flags & XHDR_GLOBAL))
+    tab->decoder (data, keyword, value, size);
+  else
+    xheader_list_append (kwl, keyword, value);
 }
 
 void
@@ -644,7 +694,6 @@ xheader_read (struct xheader *xhdr, union block *p, size_t size)
 {
   size_t j = 0;
 
-  xheader_init (xhdr);
   size += BLOCKSIZE;
   xhdr->size = size;
   xhdr->buffer = xmalloc (size + 1);
@@ -657,6 +706,9 @@ xheader_read (struct xheader *xhdr, union block *p, size_t size)
       if (len > BLOCKSIZE)
        len = BLOCKSIZE;
 
+      if (!p)
+       FATAL_ERROR ((0, 0, _("Unexpected EOF in archive")));
+      
       memcpy (&xhdr->buffer[j], p->buffer, len);
       set_next_block_after (p);
 
@@ -1453,51 +1505,53 @@ sparse_minor_decoder (struct tar_stat_info *st,
 }
 
 struct xhdr_tab const xhdr_tab[] = {
-  { "atime",   atime_coder,    atime_decoder,    false },
-  { "comment", dummy_coder,    dummy_decoder,    false },
-  { "charset", dummy_coder,    dummy_decoder,    false },
-  { "ctime",   ctime_coder,    ctime_decoder,    false },
-  { "gid",     gid_coder,      gid_decoder,      false },
-  { "gname",   gname_coder,    gname_decoder,    false },
-  { "linkpath", linkpath_coder, linkpath_decoder, false },
-  { "mtime",   mtime_coder,    mtime_decoder,    false },
-  { "path",    path_coder,     path_decoder,     false },
-  { "size",    size_coder,     size_decoder,     false },
-  { "uid",     uid_coder,      uid_decoder,      false },
-  { "uname",   uname_coder,    uname_decoder,    false },
+  { "atime",   atime_coder,    atime_decoder,    0 },
+  { "comment", dummy_coder,    dummy_decoder,    0 },
+  { "charset", dummy_coder,    dummy_decoder,    0 },
+  { "ctime",   ctime_coder,    ctime_decoder,    0 },
+  { "gid",     gid_coder,      gid_decoder,      0 },
+  { "gname",   gname_coder,    gname_decoder,    0 },
+  { "linkpath", linkpath_coder, linkpath_decoder, 0 },
+  { "mtime",   mtime_coder,    mtime_decoder,    0 },
+  { "path",    path_coder,     path_decoder,     0 },
+  { "size",    size_coder,     size_decoder,     0 },
+  { "uid",     uid_coder,      uid_decoder,      0 },
+  { "uname",   uname_coder,    uname_decoder,    0 },
 
   /* Sparse file handling */
   { "GNU.sparse.name",       path_coder, path_decoder,
-    true },
+    XHDR_PROTECTED },
   { "GNU.sparse.major",      sparse_major_coder, sparse_major_decoder,
-    true },
+    XHDR_PROTECTED },
   { "GNU.sparse.minor",      sparse_minor_coder, sparse_minor_decoder,
-    true },
+    XHDR_PROTECTED },
   { "GNU.sparse.realsize",   sparse_size_coder, sparse_size_decoder,
-    true },
+    XHDR_PROTECTED },
   { "GNU.sparse.numblocks",  sparse_numblocks_coder, sparse_numblocks_decoder,
-    true },
+    XHDR_PROTECTED },
 
   /* tar 1.14 - 1.15.90 keywords. */
-  { "GNU.sparse.size",       sparse_size_coder, sparse_size_decoder, true },
+  { "GNU.sparse.size",       sparse_size_coder, sparse_size_decoder,
+    XHDR_PROTECTED },
   /* tar 1.14 - 1.15.1 keywords. Multiple instances of these appeared in 'x'
      headers, and each of them was meaningful. It confilcted with POSIX specs,
      which requires that "when extended header records conflict, the last one
      given in the header shall take precedence." */
   { "GNU.sparse.offset",     sparse_offset_coder, sparse_offset_decoder,
-    true },
+    XHDR_PROTECTED },
   { "GNU.sparse.numbytes",   sparse_numbytes_coder, sparse_numbytes_decoder,
-    true },
+    XHDR_PROTECTED },
   /* tar 1.15.90 keyword, introduced to remove the above-mentioned conflict. */
   { "GNU.sparse.map",        NULL /* Unused, see pax_dump_header() */,
-    sparse_map_decoder, false },
+    sparse_map_decoder, 0 },
 
   { "GNU.dumpdir",           dumpdir_coder, dumpdir_decoder,
-    true },
+    XHDR_PROTECTED },
 
   /* Keeps the tape/volume label. May be present only in the global headers.
      Equivalent to GNUTYPE_VOLHDR.  */
-  { "GNU.volume.label", volume_label_coder, volume_label_decoder, true },
+  { "GNU.volume.label", volume_label_coder, volume_label_decoder,
+    XHDR_PROTECTED | XHDR_GLOBAL },
 
   /* These may be present in a first global header of the archive.
      They provide the same functionality as GNUTYPE_MULTIVOL header.
@@ -1506,9 +1560,11 @@ struct xhdr_tab const xhdr_tab[] = {
      GNU.volume.offset keeps the offset of the start of this volume,
      otherwise kept in oldgnu_header.offset.  */
   { "GNU.volume.filename", volume_label_coder, volume_filename_decoder,
-    true },
-  { "GNU.volume.size", volume_size_coder, volume_size_decoder, true },
-  { "GNU.volume.offset", volume_offset_coder, volume_offset_decoder, true },
+    XHDR_PROTECTED | XHDR_GLOBAL },
+  { "GNU.volume.size", volume_size_coder, volume_size_decoder,
+    XHDR_PROTECTED | XHDR_GLOBAL },
+  { "GNU.volume.offset", volume_offset_coder, volume_offset_decoder,
+    XHDR_PROTECTED | XHDR_GLOBAL },
 
-  { NULL, NULL, NULL, false }
+  { NULL, NULL, NULL, 0 }
 };
index a9f10a87355476c888e4d295c778020b28f0f8c3..e9b753c50a17a0507ff43bf06897f37a6823c357 100644 (file)
@@ -1,7 +1,7 @@
 # Makefile for GNU tar regression tests.
 
 # Copyright (C) 1996, 1997, 1999, 2000, 2001, 2003, 2004, 2005, 
-# 2006, 2007 Free Software Foundation, Inc.
+# 2006, 2007, 2009 Free Software Foundation, Inc.
 
 # François Pinard <pinard@iro.umontreal.ca>, 1988.
 # Sergey Poznyakoff <gray@mirddin.farlep.net>, 2004.
@@ -52,6 +52,7 @@ TESTSUITE_AT = \
  append.at\
  append01.at\
  append02.at\
+ backup01.at\
  chtype.at\
  comprec.at\
  delete01.at\
@@ -60,6 +61,11 @@ TESTSUITE_AT = \
  delete04.at\
  delete05.at\
  exclude.at\
+ exclude01.at\
+ exclude02.at\
+ exclude03.at\
+ exclude04.at\
+ exclude05.at\
  extrac01.at\
  extrac02.at\
  extrac03.at\
@@ -67,6 +73,9 @@ TESTSUITE_AT = \
  extrac05.at\
  extrac06.at\
  extrac07.at\
+ extrac08.at\
+ filerem01.at\
+ filerem02.at\
  gzip.at\
  grow.at\
  incremental.at\
@@ -74,8 +83,12 @@ TESTSUITE_AT = \
  incr02.at\
  incr03.at\
  incr04.at\
+ incr05.at\
+ incr06.at\
  indexfile.at\
  ignfail.at\
+ label01.at\
+ label02.at\
  link01.at\
  link02.at\
  link03.at\
@@ -92,6 +105,7 @@ TESTSUITE_AT = \
  multiv04.at\
  multiv05.at\
  multiv06.at\
+ multiv07.at\
  old.at\
  options.at\
  options02.at\
@@ -102,6 +116,8 @@ TESTSUITE_AT = \
  rename03.at\
  rename04.at\
  rename05.at\
+ remfiles01.at\
+ remfiles02.at\
  same-order01.at\
  same-order02.at\
  shortfile.at\
@@ -117,10 +133,13 @@ TESTSUITE_AT = \
  spmvp10.at\
  truncate.at\
  update.at\
+ update01.at\
+ update02.at\
  volsize.at\
  volume.at\
  verbose.at\
  version.at\
+ xform-h.at\
  star/gtarfail.at\
  star/gtarfail2.at\
  star/multi-fail.at\
@@ -142,7 +161,7 @@ clean-local:
        test ! -f $(TESTSUITE) || $(SHELL) $(TESTSUITE) --clean
 
 check-local: atconfig atlocal $(TESTSUITE)
-       $(SHELL) $(TESTSUITE)
+       $(SHELL) $(TESTSUITE) $(TESTSUITEFLAGS)
 
 check-full:
        FULL_TEST=1 $(MAKE) check
@@ -151,7 +170,7 @@ check-full:
 
 # Run the test suite on the *installed* tree.
 installcheck-local:
-       $(SHELL) $(TESTSUITE) AUTOTEST_PATH=$(exec_prefix)/bin
+       $(SHELL) $(TESTSUITE) $(TESTSUITEFLAGS) AUTOTEST_PATH=$(exec_prefix)/bin
 
 
 ## ------------ ##
@@ -163,6 +182,6 @@ check_PROGRAMS = genfile
 genfile_SOURCES = genfile.c argcv.c argcv.h
 
 localedir = $(datadir)/locale
-INCLUDES = -I$(top_srcdir)/lib -I../lib -I$(top_srcdir)/src
+INCLUDES = -I$(top_srcdir)/gnu -I../gnu -I$(top_srcdir)/gnu -I$(top_srcdir)/lib
 AM_CPPFLAGS = -DLOCALEDIR=\"$(localedir)\"
-LDADD = ../lib/libtar.a $(LIBINTL) $(LIB_CLOCK_GETTIME)
+LDADD = ../gnu/libgnu.a $(LIBINTL) $(LIB_CLOCK_GETTIME)
index d2ecc245b9f5753c7333f0c23ef63686a3c4c8d9..5def22e0640f853ab6e16666612afa5f7f15e5b4 100644 (file)
@@ -1,8 +1,9 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+# Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 # Makefile for GNU tar regression tests.
 
 # Copyright (C) 1996, 1997, 1999, 2000, 2001, 2003, 2004, 2005, 
-# 2006, 2007 Free Software Foundation, Inc.
+# 2006, 2007, 2009 Free Software Foundation, Inc.
 
 # François Pinard <pinard@iro.umontreal.ca>, 1988.
 # Sergey Poznyakoff <gray@mirddin.farlep.net>, 2004.
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
@@ -48,63 +50,71 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
        $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argmatch.m4 \
        $(top_srcdir)/m4/argp.m4 $(top_srcdir)/m4/backupfile.m4 \
        $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \
-       $(top_srcdir)/m4/canonicalize-lgpl.m4 \
+       $(top_srcdir)/m4/canonicalize.m4 \
        $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/chown.m4 \
        $(top_srcdir)/m4/clock_time.m4 \
        $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \
        $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \
-       $(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/dirent_h.m4 \
-       $(top_srcdir)/m4/dirfd.m4 $(top_srcdir)/m4/dirname.m4 \
-       $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \
-       $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eealloc.m4 \
-       $(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
-       $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/exclude.m4 \
-       $(top_srcdir)/m4/exitfail.m4 $(top_srcdir)/m4/extensions.m4 \
+       $(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/dirent-safer.m4 \
+       $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \
+       $(top_srcdir)/m4/dirname.m4 $(top_srcdir)/m4/dos.m4 \
+       $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+       $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+       $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+       $(top_srcdir)/m4/exclude.m4 $(top_srcdir)/m4/extensions.m4 \
        $(top_srcdir)/m4/fchdir.m4 $(top_srcdir)/m4/fclose.m4 \
-       $(top_srcdir)/m4/fcntl-safer.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+       $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \
+       $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \
        $(top_srcdir)/m4/fileblocks.m4 $(top_srcdir)/m4/float_h.m4 \
        $(top_srcdir)/m4/fnmatch.m4 $(top_srcdir)/m4/fpending.m4 \
        $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftruncate.m4 \
        $(top_srcdir)/m4/getcwd-abort-bug.m4 \
        $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \
        $(top_srcdir)/m4/getdate.m4 $(top_srcdir)/m4/getdelim.m4 \
-       $(top_srcdir)/m4/getline.m4 $(top_srcdir)/m4/getopt.m4 \
-       $(top_srcdir)/m4/getpagesize.m4 $(top_srcdir)/m4/gettext.m4 \
-       $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \
-       $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \
+       $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getline.m4 \
+       $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \
+       $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettime.m4 \
+       $(top_srcdir)/m4/gettimeofday.m4 $(top_srcdir)/m4/glibc21.m4 \
+       $(top_srcdir)/m4/gnulib-common.m4 \
        $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/hash.m4 \
        $(top_srcdir)/m4/human.m4 $(top_srcdir)/m4/iconv.m4 \
        $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \
        $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
        $(top_srcdir)/m4/inttostr.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
        $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
-       $(top_srcdir)/m4/lchown.m4 $(top_srcdir)/m4/lib-ld.m4 \
-       $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+       $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/lchown.m4 \
+       $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+       $(top_srcdir)/m4/lib-prefix.m4 \
        $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \
        $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \
        $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \
        $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/malloc.m4 \
        $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/mbchar.m4 \
        $(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrtowc.m4 \
-       $(top_srcdir)/m4/mbscasecmp.m4 $(top_srcdir)/m4/mbsinit.m4 \
-       $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mempcpy.m4 \
-       $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/mkdtemp.m4 \
-       $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/modechange.m4 \
-       $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nls.m4 \
-       $(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/openat.m4 \
-       $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/paxutils.m4 \
-       $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/printf.m4 \
+       $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbsrtowcs.m4 \
+       $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/memchr.m4 \
+       $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/memrchr.m4 \
+       $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkdtemp.m4 \
+       $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \
+       $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/modechange.m4 \
+       $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nl_langinfo.m4 \
+       $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/open.m4 \
+       $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/pathmax.m4 \
+       $(top_srcdir)/m4/paxutils.m4 $(top_srcdir)/m4/po.m4 \
+       $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/priv-set.m4 \
        $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/quote.m4 \
        $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \
        $(top_srcdir)/m4/readlink.m4 $(top_srcdir)/m4/realloc.m4 \
-       $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rmt.m4 \
-       $(top_srcdir)/m4/rpmatch.m4 $(top_srcdir)/m4/rtapelib.m4 \
-       $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/safe-write.m4 \
+       $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rmdir.m4 \
+       $(top_srcdir)/m4/rmt.m4 $(top_srcdir)/m4/rpmatch.m4 \
+       $(top_srcdir)/m4/rtapelib.m4 $(top_srcdir)/m4/safe-read.m4 \
+       $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/same.m4 \
        $(top_srcdir)/m4/save-cwd.m4 $(top_srcdir)/m4/savedir.m4 \
        $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/size_max.m4 \
        $(top_srcdir)/m4/sleep.m4 $(top_srcdir)/m4/snprintf.m4 \
        $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
-       $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \
+       $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \
+       $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
        $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
        $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
        $(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strcase.m4 \
@@ -120,35 +130,51 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
        $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \
        $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \
        $(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
-       $(top_srcdir)/m4/unlinkdir.m4 $(top_srcdir)/m4/unlocked-io.m4 \
-       $(top_srcdir)/m4/utimbuf.m4 $(top_srcdir)/m4/utime.m4 \
-       $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
-       $(top_srcdir)/m4/utimes.m4 $(top_srcdir)/m4/vasnprintf.m4 \
-       $(top_srcdir)/m4/vsnprintf.m4 $(top_srcdir)/m4/wchar.m4 \
+       $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+       $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utimbuf.m4 \
+       $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes.m4 \
+       $(top_srcdir)/m4/vasnprintf.m4 $(top_srcdir)/m4/vasprintf.m4 \
+       $(top_srcdir)/m4/version-etc.m4 $(top_srcdir)/m4/vsnprintf.m4 \
+       $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \
        $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
-       $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wcwidth.m4 \
+       $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
        $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/write.m4 \
        $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xgetcwd.m4 \
        $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrndup.m4 \
-       $(top_srcdir)/m4/xstrtol.m4 $(top_srcdir)/configure.ac
+       $(top_srcdir)/m4/xstrtol.m4 $(top_srcdir)/m4/xvasprintf.m4 \
+       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/build-aux/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES = atlocal
+CONFIG_CLEAN_VPATH_FILES =
 am_genfile_OBJECTS = genfile.$(OBJEXT) argcv.$(OBJEXT)
 genfile_OBJECTS = $(am_genfile_OBJECTS)
 genfile_LDADD = $(LDADD)
 am__DEPENDENCIES_1 =
-genfile_DEPENDENCIES = ../lib/libtar.a $(am__DEPENDENCIES_1) \
+genfile_DEPENDENCIES = ../gnu/libgnu.a $(am__DEPENDENCIES_1) \
        $(am__DEPENDENCIES_1)
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
 am__depfiles_maybe = depfiles
+am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC    " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
 CCLD = $(CC)
 LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD  " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN   " $@;
 SOURCES = $(genfile_SOURCES)
 DIST_SOURCES = $(genfile_SOURCES)
 ETAGS = etags
@@ -158,6 +184,7 @@ ACLOCAL = @ACLOCAL@
 ALLOCA = @ALLOCA@
 ALLOCA_H = @ALLOCA_H@
 AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
@@ -186,7 +213,6 @@ DEFAULT_RMT_COMMAND = @DEFAULT_RMT_COMMAND@
 DEFAULT_RMT_DIR = @DEFAULT_RMT_DIR@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
-DIRENT_H = @DIRENT_H@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
@@ -199,7 +225,6 @@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
 EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
 ERRNO_H = @ERRNO_H@
 EXEEXT = @EXEEXT@
-FCNTL_H = @FCNTL_H@
 FLOAT_H = @FLOAT_H@
 FNMATCH_H = @FNMATCH_H@
 GETOPT_H = @GETOPT_H@
@@ -211,45 +236,59 @@ GNULIB_ALPHASORT = @GNULIB_ALPHASORT@
 GNULIB_ATOLL = @GNULIB_ATOLL@
 GNULIB_BTOWC = @GNULIB_BTOWC@
 GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
 GNULIB_CHOWN = @GNULIB_CHOWN@
 GNULIB_CLOSE = @GNULIB_CLOSE@
 GNULIB_DIRFD = @GNULIB_DIRFD@
 GNULIB_DPRINTF = @GNULIB_DPRINTF@
 GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_DUP3 = @GNULIB_DUP3@
 GNULIB_ENVIRON = @GNULIB_ENVIRON@
 GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
+GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
 GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
+GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
 GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FCNTL = @GNULIB_FCNTL@
+GNULIB_FDOPENDIR = @GNULIB_FDOPENDIR@
 GNULIB_FFLUSH = @GNULIB_FFLUSH@
 GNULIB_FOPEN = @GNULIB_FOPEN@
 GNULIB_FPRINTF = @GNULIB_FPRINTF@
 GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
 GNULIB_FPUTC = @GNULIB_FPUTC@
 GNULIB_FPUTS = @GNULIB_FPUTS@
 GNULIB_FREOPEN = @GNULIB_FREOPEN@
 GNULIB_FSEEK = @GNULIB_FSEEK@
 GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FSTATAT = @GNULIB_FSTATAT@
 GNULIB_FSYNC = @GNULIB_FSYNC@
 GNULIB_FTELL = @GNULIB_FTELL@
 GNULIB_FTELLO = @GNULIB_FTELLO@
 GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
 GNULIB_FWRITE = @GNULIB_FWRITE@
 GNULIB_GETCWD = @GNULIB_GETCWD@
 GNULIB_GETDELIM = @GNULIB_GETDELIM@
 GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
 GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
 GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
 GNULIB_GETLINE = @GNULIB_GETLINE@
 GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
 GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
 GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
 GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
 GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
 GNULIB_IMAXABS = @GNULIB_IMAXABS@
 GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
 GNULIB_LCHMOD = @GNULIB_LCHMOD@
 GNULIB_LCHOWN = @GNULIB_LCHOWN@
 GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
 GNULIB_LSEEK = @GNULIB_LSEEK@
 GNULIB_LSTAT = @GNULIB_LSTAT@
 GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
@@ -272,15 +311,31 @@ GNULIB_MBSSEP = @GNULIB_MBSSEP@
 GNULIB_MBSSPN = @GNULIB_MBSSPN@
 GNULIB_MBSSTR = @GNULIB_MBSSTR@
 GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
 GNULIB_MEMMEM = @GNULIB_MEMMEM@
 GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
 GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
 GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKFIFO = @GNULIB_MKFIFO@
+GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
+GNULIB_MKNOD = @GNULIB_MKNOD@
+GNULIB_MKNODAT = @GNULIB_MKNODAT@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
 GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_MKTIME = @GNULIB_MKTIME@
+GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
+GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@
 GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
 GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
 GNULIB_OPEN = @GNULIB_OPEN@
+GNULIB_OPENAT = @GNULIB_OPENAT@
 GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_PREAD = @GNULIB_PREAD@
 GNULIB_PRINTF = @GNULIB_PRINTF@
 GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
 GNULIB_PUTC = @GNULIB_PUTC@
@@ -290,13 +345,20 @@ GNULIB_PUTS = @GNULIB_PUTS@
 GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
 GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
 GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
 GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_RMDIR = @GNULIB_RMDIR@
 GNULIB_RPMATCH = @GNULIB_RPMATCH@
 GNULIB_SCANDIR = @GNULIB_SCANDIR@
 GNULIB_SETENV = @GNULIB_SETENV@
 GNULIB_SLEEP = @GNULIB_SLEEP@
 GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
 GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_STAT = @GNULIB_STAT@
 GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
 GNULIB_STPCPY = @GNULIB_STPCPY@
 GNULIB_STPNCPY = @GNULIB_STPNCPY@
@@ -307,6 +369,7 @@ GNULIB_STRERROR = @GNULIB_STRERROR@
 GNULIB_STRNDUP = @GNULIB_STRNDUP@
 GNULIB_STRNLEN = @GNULIB_STRNLEN@
 GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRPTIME = @GNULIB_STRPTIME@
 GNULIB_STRSEP = @GNULIB_STRSEP@
 GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
 GNULIB_STRSTR = @GNULIB_STRSTR@
@@ -317,8 +380,16 @@ GNULIB_STRTOLL = @GNULIB_STRTOLL@
 GNULIB_STRTOULL = @GNULIB_STRTOULL@
 GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
 GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_SYMLINK = @GNULIB_SYMLINK@
+GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
+GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
 GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
+GNULIB_UNLINK = @GNULIB_UNLINK@
+GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
 GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_USLEEP = @GNULIB_USLEEP@
+GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
 GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
 GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
 GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
@@ -338,8 +409,11 @@ HAVE_ALPHASORT = @HAVE_ALPHASORT@
 HAVE_ATOLL = @HAVE_ATOLL@
 HAVE_BTOWC = @HAVE_BTOWC@
 HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
 HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@
 HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
 HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
 HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
 HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
@@ -364,37 +438,68 @@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
 HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
 HAVE_DPRINTF = @HAVE_DPRINTF@
 HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
 HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
-HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDOPENDIR = @HAVE_FDOPENDIR@
+HAVE_FSTATAT = @HAVE_FSTATAT@
 HAVE_FSYNC = @HAVE_FSYNC@
-HAVE_FTELLO = @HAVE_FTELLO@
 HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
 HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@
 HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
 HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
 HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
 HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
 HAVE_GETUSERSHELL = @HAVE_GETUSERSHELL@
 HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
 HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
 HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
 HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
 HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
 HAVE_LSTAT = @HAVE_LSTAT@
 HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
 HAVE_MBRLEN = @HAVE_MBRLEN@
 HAVE_MBRTOWC = @HAVE_MBRTOWC@
 HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
 HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
 HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
 HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
 HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
 HAVE_OS_H = @HAVE_OS_H@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_PREAD = @HAVE_PREAD@
 HAVE_RANDOM_H = @HAVE_RANDOM_H@
 HAVE_RANDOM_R = @HAVE_RANDOM_R@
 HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
 HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
 HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
 HAVE_RPMATCH = @HAVE_RPMATCH@
 HAVE_SCANDIR = @HAVE_SCANDIR@
 HAVE_SETENV = @HAVE_SETENV@
@@ -408,7 +513,6 @@ HAVE_STPNCPY = @HAVE_STPNCPY@
 HAVE_STRCASECMP = @HAVE_STRCASECMP@
 HAVE_STRCASESTR = @HAVE_STRCASESTR@
 HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
-HAVE_STRNDUP = @HAVE_STRNDUP@
 HAVE_STRPBRK = @HAVE_STRPBRK@
 HAVE_STRSEP = @HAVE_STRSEP@
 HAVE_STRTOD = @HAVE_STRTOD@
@@ -417,6 +521,8 @@ HAVE_STRTOULL = @HAVE_STRTOULL@
 HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
 HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
 HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
 HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@
 HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
 HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
@@ -425,11 +531,15 @@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
 HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
 HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
 HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
 HAVE_UNSETENV = @HAVE_UNSETENV@
 HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
 HAVE_VASPRINTF = @HAVE_VASPRINTF@
 HAVE_VDPRINTF = @HAVE_VDPRINTF@
 HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
 HAVE_WCRTOMB = @HAVE_WCRTOMB@
 HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
 HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
@@ -447,16 +557,14 @@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
 INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
 INTLLIBS = @INTLLIBS@
 INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
-INTTYPES_H = @INTTYPES_H@
 LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
 LIBICONV = @LIBICONV@
 LIBINTL = @LIBINTL@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
-LIBTAR_LIBDEPS = @LIBTAR_LIBDEPS@
-LIBTAR_LTLIBDEPS = @LIBTAR_LTLIBDEPS@
 LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
-LIB_CLOSE = @LIB_CLOSE@
 LIB_SETSOCKOPT = @LIB_SETSOCKOPT@
 LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
 LOCALE_FR = @LOCALE_FR@
@@ -471,12 +579,36 @@ MKDIR_P = @MKDIR_P@
 MSGFMT = @MSGFMT@
 MSGFMT_015 = @MSGFMT_015@
 MSGMERGE = @MSGMERGE@
+NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
 NEXT_DIRENT_H = @NEXT_DIRENT_H@
 NEXT_ERRNO_H = @NEXT_ERRNO_H@
 NEXT_FCNTL_H = @NEXT_FCNTL_H@
 NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
 NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
 NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
 NEXT_STDINT_H = @NEXT_STDINT_H@
 NEXT_STDIO_H = @NEXT_STDIO_H@
 NEXT_STDLIB_H = @NEXT_STDLIB_H@
@@ -505,25 +637,40 @@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
 PU_RMT_PROG = @PU_RMT_PROG@
 RANLIB = @RANLIB@
 REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
 REPLACE_CHOWN = @REPLACE_CHOWN@
 REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@
 REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
 REPLACE_FCHDIR = @REPLACE_FCHDIR@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
 REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@
 REPLACE_FFLUSH = @REPLACE_FFLUSH@
 REPLACE_FOPEN = @REPLACE_FOPEN@
 REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
 REPLACE_FREOPEN = @REPLACE_FREOPEN@
 REPLACE_FSEEK = @REPLACE_FSEEK@
 REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
 REPLACE_FTELL = @REPLACE_FTELL@
 REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
 REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
 REPLACE_GETLINE = @REPLACE_GETLINE@
 REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
 REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
 REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
 REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
 REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
 REPLACE_LSEEK = @REPLACE_LSEEK@
 REPLACE_LSTAT = @REPLACE_LSTAT@
@@ -533,26 +680,53 @@ REPLACE_MBSINIT = @REPLACE_MBSINIT@
 REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
 REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
 REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
 REPLACE_MEMMEM = @REPLACE_MEMMEM@
 REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKNOD = @REPLACE_MKNOD@
 REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
 REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
 REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
 REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_OPENDIR = @REPLACE_OPENDIR@
 REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_PREAD = @REPLACE_PREAD@
 REPLACE_PRINTF = @REPLACE_PRINTF@
 REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SLEEP = @REPLACE_SLEEP@
 REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
 REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
 REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
 REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
 REPLACE_STRDUP = @REPLACE_STRDUP@
 REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
 REPLACE_STRPTIME = @REPLACE_STRPTIME@
 REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
 REPLACE_STRSTR = @REPLACE_STRSTR@
 REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
 REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
 REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
 REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
 REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
@@ -560,6 +734,7 @@ REPLACE_VPRINTF = @REPLACE_VPRINTF@
 REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
 REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
 REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
 REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
 REPLACE_WCTOB = @REPLACE_WCTOB@
 REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
@@ -570,22 +745,20 @@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
 SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
 STDARG_H = @STDARG_H@
 STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
 STDINT_H = @STDINT_H@
 STRIP = @STRIP@
 SYSEXITS_H = @SYSEXITS_H@
-SYS_STAT_H = @SYS_STAT_H@
-SYS_TIME_H = @SYS_TIME_H@
 SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
 TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
 UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
 UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
 UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
 USE_NLS = @USE_NLS@
 VERSION = @VERSION@
-VOID_UNSETENV = @VOID_UNSETENV@
-WCHAR_H = @WCHAR_H@
 WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
-WCTYPE_H = @WCTYPE_H@
 WINT_T_SUFFIX = @WINT_T_SUFFIX@
 XGETTEXT = @XGETTEXT@
 XGETTEXT_015 = @XGETTEXT_015@
@@ -643,6 +816,7 @@ sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 EXTRA_DIST = $(TESTSUITE_AT) testsuite package.m4 star/README star/quicktest.sh
@@ -657,6 +831,7 @@ TESTSUITE_AT = \
  append.at\
  append01.at\
  append02.at\
+ backup01.at\
  chtype.at\
  comprec.at\
  delete01.at\
@@ -665,6 +840,11 @@ TESTSUITE_AT = \
  delete04.at\
  delete05.at\
  exclude.at\
+ exclude01.at\
+ exclude02.at\
+ exclude03.at\
+ exclude04.at\
+ exclude05.at\
  extrac01.at\
  extrac02.at\
  extrac03.at\
@@ -672,6 +852,9 @@ TESTSUITE_AT = \
  extrac05.at\
  extrac06.at\
  extrac07.at\
+ extrac08.at\
+ filerem01.at\
+ filerem02.at\
  gzip.at\
  grow.at\
  incremental.at\
@@ -679,9 +862,15 @@ TESTSUITE_AT = \
  incr02.at\
  incr03.at\
  incr04.at\
+ incr05.at\
+ incr06.at\
  indexfile.at\
  ignfail.at\
+ label01.at\
+ label02.at\
  link01.at\
+ link02.at\
+ link03.at\
  listed01.at\
  listed02.at\
  long01.at\
@@ -695,6 +884,7 @@ TESTSUITE_AT = \
  multiv04.at\
  multiv05.at\
  multiv06.at\
+ multiv07.at\
  old.at\
  options.at\
  options02.at\
@@ -705,6 +895,8 @@ TESTSUITE_AT = \
  rename03.at\
  rename04.at\
  rename05.at\
+ remfiles01.at\
+ remfiles02.at\
  same-order01.at\
  same-order02.at\
  shortfile.at\
@@ -720,10 +912,13 @@ TESTSUITE_AT = \
  spmvp10.at\
  truncate.at\
  update.at\
+ update01.at\
+ update02.at\
  volsize.at\
  volume.at\
  verbose.at\
  version.at\
+ xform-h.at\
  star/gtarfail.at\
  star/gtarfail2.at\
  star/multi-fail.at\
@@ -734,9 +929,9 @@ TESTSUITE_AT = \
 TESTSUITE = $(srcdir)/testsuite
 AUTOTEST = $(AUTOM4TE) --language=autotest
 genfile_SOURCES = genfile.c argcv.c argcv.h
-INCLUDES = -I$(top_srcdir)/lib -I../lib -I$(top_srcdir)/src
+INCLUDES = -I$(top_srcdir)/gnu -I../gnu -I$(top_srcdir)/gnu -I$(top_srcdir)/lib
 AM_CPPFLAGS = -DLOCALEDIR=\"$(localedir)\"
-LDADD = ../lib/libtar.a $(LIBINTL) $(LIB_CLOCK_GETTIME)
+LDADD = ../gnu/libgnu.a $(LIBINTL) $(LIB_CLOCK_GETTIME)
 all: all-am
 
 .SUFFIXES:
@@ -745,14 +940,14 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
-             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-               && exit 0; \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
              exit 1;; \
          esac; \
        done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits  tests/Makefile'; \
-       cd $(top_srcdir) && \
-         $(AUTOMAKE) --gnits  tests/Makefile
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits tests/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnits tests/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
@@ -770,6 +965,7 @@ $(top_srcdir)/configure:  $(am__configure_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
 atlocal: $(top_builddir)/config.status $(srcdir)/atlocal.in
        cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 
@@ -777,7 +973,7 @@ clean-checkPROGRAMS:
        -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
 genfile$(EXEEXT): $(genfile_OBJECTS) $(genfile_DEPENDENCIES) 
        @rm -f genfile$(EXEEXT)
-       $(LINK) $(genfile_OBJECTS) $(genfile_LDADD) $(LIBS)
+       $(AM_V_CCLD)$(LINK) $(genfile_OBJECTS) $(genfile_LDADD) $(LIBS)
 
 mostlyclean-compile:
        -rm -f *.$(OBJEXT)
@@ -789,15 +985,17 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genfile.Po@am__quote@
 
 .c.o:
-@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(COMPILE) -c $<
 
 .c.obj:
-@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
@@ -807,14 +1005,14 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
        unique=`for i in $$list; do \
            if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
          done | \
-         $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
              END { if (nonempty) { for (i in files) print i; }; }'`; \
        mkid -fID $$unique
 tags: TAGS
 
 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
                $(TAGS_FILES) $(LISP)
-       tags=; \
+       set x; \
        here=`pwd`; \
        list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
        unique=`for i in $$list; do \
@@ -822,29 +1020,34 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
          done | \
          $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
              END { if (nonempty) { for (i in files) print i; }; }'`; \
-       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
-         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-           $$tags $$unique; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
        fi
 ctags: CTAGS
 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
                $(TAGS_FILES) $(LISP)
-       tags=; \
        list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
        unique=`for i in $$list; do \
            if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
          done | \
          $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
              END { if (nonempty) { for (i in files) print i; }; }'`; \
-       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+       test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-            $$tags $$unique
+            $$unique
 
 GTAGS:
        here=`$(am__cd) $(top_builddir) && pwd` \
-         && cd $(top_srcdir) \
-         && gtags -i $(GTAGS_ARGS) $$here
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -865,13 +1068,17 @@ distdir: $(DISTFILES)
          if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
          if test -d $$d/$$file; then \
            dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
            if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
            fi; \
-           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
          else \
-           test -f $(distdir)/$$file \
-           || cp -p $$d/$$file $(distdir)/$$file \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
            || exit 1; \
          fi; \
        done
@@ -901,6 +1108,7 @@ clean-generic:
 
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
        -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
 
 maintainer-clean-generic:
@@ -923,6 +1131,8 @@ dvi-am:
 
 html: html-am
 
+html-am:
+
 info: info-am
 
 info-am:
@@ -931,18 +1141,28 @@ install-data-am:
 
 install-dvi: install-dvi-am
 
+install-dvi-am:
+
 install-exec-am:
 
 install-html: install-html-am
 
+install-html-am:
+
 install-info: install-info-am
 
+install-info-am:
+
 install-man:
 
 install-pdf: install-pdf-am
 
+install-pdf-am:
+
 install-ps: install-ps-am
 
+install-ps-am:
+
 installcheck-am: installcheck-local
 
 maintainer-clean: maintainer-clean-am
@@ -964,7 +1184,7 @@ ps-am:
 
 uninstall-am:
 
-.MAKE: install-am install-strip
+.MAKE: check-am install-am install-strip
 
 .PHONY: CTAGS GTAGS all all-am check check-am check-local clean \
        clean-checkPROGRAMS clean-generic clean-local ctags distclean \
@@ -1000,7 +1220,7 @@ clean-local:
        test ! -f $(TESTSUITE) || $(SHELL) $(TESTSUITE) --clean
 
 check-local: atconfig atlocal $(TESTSUITE)
-       $(SHELL) $(TESTSUITE)
+       $(SHELL) $(TESTSUITE) $(TESTSUITEFLAGS)
 
 check-full:
        FULL_TEST=1 $(MAKE) check
@@ -1009,7 +1229,8 @@ check-full:
 
 # Run the test suite on the *installed* tree.
 installcheck-local:
-       $(SHELL) $(TESTSUITE) AUTOTEST_PATH=$(exec_prefix)/bin
+       $(SHELL) $(TESTSUITE) $(TESTSUITEFLAGS) AUTOTEST_PATH=$(exec_prefix)/bin
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
index 0986e51f703977585bf50884b280164b48a91501..7b8e07d3b527bd7c5e3e89bb2a997370d5ae8f0d 100644 (file)
@@ -1,7 +1,7 @@
 # Process this file with autom4te to create testsuite. -*- Autotest -*-
 
 # Test suite for GNU tar.
-# Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 2006, 2007, 2009 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
 #      tar rf archive file1
 #      tar rt archive file2
 #
-# produced different archives (GNU format is assumed).  Namely, in the
-# second case the mode field of all members, except the first, was truncated
-# to lower 3 octets (& 0777).
+# produced different archives (GNU format is assumed). It was reported
+# by TAMUKI Shoichi on 2006-07-21 [1].
+#
+# The bug was due to tar being unable to discern between GNU and OLDGNU
+# formats and always assuming the latter. The main difference between
+# the two is that OLDGNU preserves all bits in the mode field, whereas
+# GNU format keeps only the lower 9 ones (mode & 0777).
+#
+# This was fixed on 2006-07-24 (commit f4e4adea80a) by making tar truncate
+# the mode field even in OLDGNU format. Obviously, the fix broke the
+# format backward compatibility, but it went unnoticed until 2009-10-03
+# (after all, the OLDGNU format is not in much use nowadays), when
+# Igor Zhbanov reported it [2].
+#
+# The final fix was applied on 2009-10-04.
 #
 # References:
-#   <200607210526.AA03440@tamuki.linet.gr.jp>
-#   http://lists.gnu.org/archive/html/bug-tar/2006-07/msg00029.html
+# [1] <200607210526.AA03440@tamuki.linet.gr.jp>
+#     http://lists.gnu.org/archive/html/bug-tar/2006-07/msg00029.html
+# [2] <f44001920910020335v4cadfesf54f6593d5124814@mail.gmail.com>
+#     http://lists.gnu.org/archive/html/bug-tar/2009-10/msg00006.html
 
 # The test case below verifies that the equivalent create and append commands
 # produce binary equivalent archives for all formats.
index c9f274322922edac1e03fa0507a28a4a51bc06f2..dfde2ff3315f28d3100ea926bb73a1ad0fb53aef 100644 (file)
@@ -1,5 +1,6 @@
 /* argcv.c - simple functions for parsing input based on whitespace
-   Copyright (C) 1999, 2000, 2001, 2007 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000, 2001, 2007, 2009, 2010 Free Software
+   Foundation, Inc.
 
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
@@ -15,6 +16,9 @@
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA  */
 
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
 #include <ctype.h>
 
 #include <argcv.h>
@@ -153,7 +157,7 @@ escaped_length (const char *str, int *quote)
          len += 2;
          *quote = 1;
        }
-      else if (isprint (*str))
+      else if (isprint ((unsigned char) *str))
        len++;
       else if (argcv_escape_char (*str) != -1)
        len += 2;
@@ -249,7 +253,7 @@ escape_copy (char *dst, const char *src)
          *dst++ = '\\';
          *dst++ = '"';
        }
-      else if (*src != '\t' && isprint(*src))
+      else if (*src != '\t' && isprint ((unsigned char) *src))
        *dst++ = *src;      
       else
        {
@@ -368,7 +372,7 @@ argcv_string (int argc, char **argv, char **pstring)
        buffer[j++] = '"';
     }
 
-  for (; j > 0 && isspace (buffer[j-1]); j--)
+  for (; j > 0 && isspace ((unsigned char) buffer[j - 1]); j--)
     ;
   buffer[j] = 0;
   if (pstring)
diff --git a/tests/backup01.at b/tests/backup01.at
new file mode 100644 (file)
index 0000000..538dd3d
--- /dev/null
@@ -0,0 +1,49 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+
+# Test suite for GNU tar.
+# Copyright (C) 2009 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# Description:
+# When extracting, tar (<1.22) sometimes renamed a backup back to the
+# original name (overwriting the newly-extracted file) for no good reason.
+#
+# Reported by: Carl Worth <cworth@cworth.org>,
+#              Eric Lammerts <eric@lammerts.org>
+#
+# References: <1249419998.4905.84.camel@yoom.home.cworth.org>
+#             http://lists.gnu.org/archive/html/bug-tar/2009-08/msg00005.html
+#             http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=508199
+#
+
+AT_SETUP([extracting existing dir with --backup])
+AT_KEYWORDS([extract backup backup01])
+
+AT_TAR_CHECK([
+mkdir dir1 dir2
+echo bla > dir1/file1
+tar cf test.tar dir1 dir2
+tar xfv test.tar --backup
+],
+[0],
+[dir1/
+dir1/file1
+Renaming `dir1/file1' to `dir1/file1~'
+dir2/
+])
+
+AT_CLEANUP
\ No newline at end of file
diff --git a/tests/exclude01.at b/tests/exclude01.at
new file mode 100644 (file)
index 0000000..778a7fc
--- /dev/null
@@ -0,0 +1,69 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+# Copyright (C) 2009 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/>.
+
+AT_SETUP([exclude wildcards])
+AT_KEYWORDS([exclude exclude01])
+
+AT_TAR_CHECK([
+AT_SORT_PREREQ
+
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
+
+tar cf archive --exclude=testdir/dir1/\* \
+               --no-wildcards \
+               --exclude=testdir/dir2/\* \
+               --wildcards \
+               --exclude=testdir/dir3/\* \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir/dir1
+tar t --no-wildcards "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards "testdir/dir1/*" -f archive | sort
+
+rm -rf testdir
+],
+[0],
+[testdir/
+testdir/dir1/
+testdir/dir2/
+testdir/dir2/file2
+testdir/dir3/
+NEXT
+testdir/dir1/*
+NEXT
+testdir/dir1/*
+NEXT
+testdir/dir1/*
+testdir/dir1/file1
+])
+
+AT_CLEANUP
diff --git a/tests/exclude02.at b/tests/exclude02.at
new file mode 100644 (file)
index 0000000..7996d16
--- /dev/null
@@ -0,0 +1,77 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+# Copyright (C) 2009 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/>.
+
+AT_SETUP([exclude: anchoring])
+AT_KEYWORDS([exclude exclude02])
+
+AT_TAR_CHECK([
+AT_SORT_PREREQ
+
+rm -rf testdir
+mkdir -p testdir
+touch file1.txt
+touch testdir/file1.txt
+touch testdir/file2
+
+tar cf archive --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 1"
+tar cf archive --no-anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 2"
+tar cf archive --anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 3"
+tar cf archive testdir file1.txt
+tar t "file1.txt" -f archive | sort
+
+echo "SUB 4"
+tar t --no-anchored "file1.txt" -f archive | sort
+
+echo "SUB 5"
+tar t --anchored "file1.txt" -f archive | sort
+
+rm -rf testdir file1.txt
+
+],
+[0],
+[testdir/
+testdir/file2
+SUB 1
+testdir/
+testdir/file2
+SUB 2
+testdir/
+testdir/file1.txt
+testdir/file2
+SUB 3
+file1.txt
+SUB 4
+file1.txt
+testdir/file1.txt
+SUB 5
+file1.txt
+])
+
+AT_CLEANUP
diff --git a/tests/exclude03.at b/tests/exclude03.at
new file mode 100644 (file)
index 0000000..d592109
--- /dev/null
@@ -0,0 +1,73 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+# Copyright (C) 2009 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/>.
+
+AT_SETUP([exclude: wildcards match slash])
+AT_KEYWORDS([exclude exclude03])
+
+AT_TAR_CHECK([
+AT_SORT_PREREQ
+
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/\*f\*1
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
+
+tar cf archive --exclude='testdir*f*1' \
+               --no-wildcards-match-slash \
+               --exclude='testdir*f*2' \
+               --wildcards-match-slash \
+               --exclude='testdir*f*3' \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards 'testdir/*f*1' -f archive | sort
+
+echo "NEXT"
+tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+echo "NEXT"
+tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+rm -rf testdir
+
+],
+[0],
+[testdir/
+testdir/dir1/
+testdir/dir1/*
+testdir/dir2/
+testdir/dir2/*
+testdir/dir2/file2
+testdir/dir3/
+testdir/dir3/*
+NEXT
+testdir/*f*1
+testdir/dir1/file1
+NEXT
+testdir/*f*1
+NEXT
+testdir/*f*1
+testdir/dir1/file1
+])
+
+AT_CLEANUP
diff --git a/tests/exclude04.at b/tests/exclude04.at
new file mode 100644 (file)
index 0000000..c6f03cb
--- /dev/null
@@ -0,0 +1,73 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+# Copyright (C) 2009 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/>.
+
+AT_SETUP([exclude: case insensitive])
+AT_KEYWORDS([exclude exclude04])
+
+AT_TAR_CHECK([
+AT_SORT_PREREQ
+
+rm -rf testdir
+mkdir -p testdir/dir
+touch testdir/file1
+touch testdir/file2
+touch testdir/file3
+touch testdir/file4
+touch testdir/dir/File1
+touch testdir/dir/File2
+touch testdir/dir/File3
+touch testdir/dir/File4
+
+tar cf archive --exclude=FILE2 \
+               --exclude=file1 \
+               --ignore-case \
+               --exclude=file3 \
+               --no-ignore-case \
+               --exclude=FILE2 \
+               --exclude=file4 \
+               testdir
+tar tf archive | sort
+
+echo "SUB 1"
+tar cf archive testdir
+tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort
+
+echo "SUB 2"
+tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort
+
+echo "SUB 3"
+tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort
+
+rm -rf testdir
+
+],
+[0],
+[testdir/
+testdir/dir/
+testdir/dir/File1
+testdir/dir/File2
+testdir/dir/File4
+testdir/file2
+SUB 1
+testdir/dir/File2
+SUB 2
+testdir/dir/File2
+testdir/file2
+SUB 3
+testdir/dir/File2
+])
+
+AT_CLEANUP
diff --git a/tests/exclude05.at b/tests/exclude05.at
new file mode 100644 (file)
index 0000000..30e922e
--- /dev/null
@@ -0,0 +1,59 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+# Copyright (C) 2009, 2010 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/>.
+
+# Test the functioning of many items in an exclude list (should run quickly)
+
+AT_SETUP([exclude: lots of excludes])
+AT_KEYWORDS([exclude exclude05])
+
+AT_TAR_CHECK([
+AT_SORT_PREREQ
+
+rm -rf testdir exclfile
+mkdir -p testdir
+awk 'BEGIN {for (i=9; i < 100; ++i ) { print "testdir/file" i; }}' < /dev/null | \
+ while read name
+ do
+   genfile --file $name
+ done
+
+awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print "testdir/file" i }}' < /dev/null > exclfile
+
+tar cf archive --anchored --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
+
+rm -rf testdir exclfile
+
+],
+[0],
+[testdir/
+testdir/file10
+testdir/file11
+testdir/file9
+NEXT
+testdir/
+testdir/file10
+testdir/file11
+testdir/file9
+])
+
+AT_CLEANUP
index a0f7c700ca0a3c55cd49a5ebc031437652607c55..82c2ed3517e590f15ed54f61ba696455e1eeb955 100644 (file)
@@ -36,10 +36,10 @@ cztery
 ])
 
 AT_TAR_CHECK([
+genfile --sparse --file sparsefile 0 ABCD 1M EFGH 2000K IJKL || AT_SKIP_TEST 
 genfile --length 118 --file jeden
 genfile --length 223 --file dwa
 genfile --length 517 --file trzy
-genfile --sparse --file sparsefile 0 ABCD 1M EFGH 2000K IJKL
 genfile --length 110 --file cztery
 
 tar cf archive jeden dwa trzy cztery || exit 1
diff --git a/tests/extrac08.at b/tests/extrac08.at
new file mode 100644 (file)
index 0000000..6ca33bd
--- /dev/null
@@ -0,0 +1,52 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+
+# Test suite for GNU tar.
+# Copyright (C) 2009 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# Description:
+# When extracting, tar (<1.22) did not restore directory permissions on
+# existing directories.
+# This was discovered when fixing debian bug #508199. See also backup01.at.
+#
+# Reported by: Carl Worth <cworth@cworth.org>,
+#
+# References: <1249419998.4905.84.camel@yoom.home.cworth.org>
+#             http://lists.gnu.org/archive/html/bug-tar/2009-08/msg00005.html
+#             http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=508199
+#
+
+AT_SETUP([restoring mode on existing directory])
+AT_KEYWORDS([extract extrac08])
+
+AT_TAR_CHECK([
+umask 000
+mkdir dir
+chmod 755 dir
+echo bla > dir/file
+tar cf test.tar dir
+chmod 700 dir
+tar xfv test.tar
+genfile --stat=mode.777 dir
+],
+[0],
+[dir/
+dir/file
+755
+])
+
+AT_CLEANUP
\ No newline at end of file
diff --git a/tests/filerem01.at b/tests/filerem01.at
new file mode 100644 (file)
index 0000000..70f47bf
--- /dev/null
@@ -0,0 +1,101 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+
+# Test suite for GNU tar.
+# Copyright (C) 2009 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/>.
+
+# Description: when a file in a deep directory disappeared during creation
+# of incremental dump, tar v. <1.23 would exit with TAREXIT_FAILURE (2).
+# However, such events are quite common and don't necessarily constitute
+# an error.  Exiting with code 2 in such cases makes it impossible to
+# distinguish serious errors from benign ones.
+#
+# Starting from tar 1.22.90, tar exits with TAREXIT_DIFFERS (1)
+# instead.
+#
+# Reported by: Solar Designer <solar@openwall.com>
+# 
+# References: <20090228235820.GA13362@openwall.com>
+#             http://lists.gnu.org/archive/html/bug-tar/2009-03/msg00000.html
+#
+
+AT_SETUP([file removed as we read it (ca. 22 seconds)])
+AT_KEYWORDS([create incremental filechange filerem filerem01])
+
+AT_TAR_CHECK([
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+
+genfile --run --checkpoint=3 --unlink dir/file1 -- \
+       tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \
+       --checkpoint-action='echo' -c -f archive.tar \
+       --listed-incremental db -v dir >/dev/null
+],
+[1],
+[ignore],
+[tar: dir: Directory is new
+tar: dir/sub: Directory is new
+tar: dir/file1: File removed before we read it
+],[],[],[gnu, posix])
+
+# Timing information:
+#
+# For -Hgnu the above command line takes about 8 seconds to execute and
+# produces:
+#
+# tar: dir: Directory is new
+# tar: dir/sub: Directory is new
+# dir/
+# tar: Write checkpoint 1
+# tar: Write checkpoint 2
+# dir/sub/
+# tar: Write checkpoint 3
+# tar: Write checkpoint 4
+# dir/file1
+# tar: Write checkpoint 5
+# dir/sub/file2
+# tar: Write checkpoint 6
+# tar: Write checkpoint 7
+# tar: Write checkpoint 8
+#
+# For -Hposix the above command line takes about 14 seconds to execute and
+# produces:
+#
+# ./tar: dir: Directory is new
+# ./tar: dir/sub: Directory is new
+# dir/
+# ./tar: Write checkpoint 1
+# ./tar: Write checkpoint 2
+# ./tar: Write checkpoint 3
+# dir/sub/
+# ./tar: Write checkpoint 4
+# ./tar: Write checkpoint 5
+# ./tar: Write checkpoint 6
+# dir/file1
+# ./tar: Write checkpoint 7
+# ./tar: Write checkpoint 8
+# ./tar: Write checkpoint 9
+# dir/sub/file2
+# ./tar: Write checkpoint 10
+# ./tar: Write checkpoint 11
+# ./tar: Write checkpoint 12
+# ./tar: Write checkpoint 13
+# ./tar: Write checkpoint 14
+
+
+AT_CLEANUP
+
diff --git a/tests/filerem02.at b/tests/filerem02.at
new file mode 100644 (file)
index 0000000..8d7005a
--- /dev/null
@@ -0,0 +1,50 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+
+# Test suite for GNU tar.
+# Copyright (C) 2009 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/>.
+
+# Description: see filerem01.at
+# This test case checks if the tar exit code is still 2 if a
+# file or directory disappears that is explicitly mentioned
+# in the command line.
+
+AT_SETUP([toplevel file removed (ca. 24 seconds)])
+AT_KEYWORDS([create incremental filechange filerem filerem02])
+
+AT_TAR_CHECK([
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+mkdir dir2
+genfile --file dir2/file1
+
+genfile --run --checkpoint=3 --exec 'rm -rf dir2' -- \
+       tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \
+       --checkpoint-action='echo' -c -f archive.tar \
+       --listed-incremental db -v --warning=no-new-dir dir dir2 >/dev/null
+],
+[2],
+[ignore],
+[tar: dir2: Cannot stat: No such file or directory
+tar: dir2/file1: File removed before we read it
+tar: Exiting with failure status due to previous errors
+],[],[],[gnu, posix])
+
+# Timing information: see filerem01.at
+
+AT_CLEANUP
+
index 1b338bce2f95a77635abe7f7f6926b53802d4395..7ebeddfd269ff17e46c772f49969f3deb31b3ff4 100644 (file)
@@ -2,7 +2,7 @@
    Print statistics for existing files.
 
    Copyright (C) 1995, 1996, 1997, 2001, 2003, 2004, 2005, 2006, 2007,
-   2008 Free Software Foundation, Inc.
+   2008, 2009 Free Software Foundation, Inc.
 
    François Pinard <pinard@iro.umontreal.ca>, 1995.
    Sergey Poznyakoff <gray@mirddin.farlep.net>, 2004, 2005, 2006, 2007, 2008.
@@ -99,6 +99,7 @@ char *buffer;
 /* Number of arguments and argument vector for mode == mode_exec */
 int exec_argc;
 char **exec_argv;
+char *checkpoint_option;
 
 /* Time for --touch option */
 struct timespec touch_time;
@@ -119,6 +120,7 @@ static char doc[] = N_("genfile manipulates data files for GNU paxutils test sui
 #define OPT_DATE       261
 #define OPT_VERBOSE    262
 #define OPT_SEEK       263
+#define OPT_UNLINK     264
 
 static struct argp_option options[] = {
 #define GRP 0
@@ -159,8 +161,8 @@ static struct argp_option options[] = {
   {NULL, 0, NULL, 0,
    N_("Synchronous execution options:"), GRP},
 
-  {"run", 'r', N_("COMMAND"), 0,
-   N_("Execute given COMMAND. Useful with --checkpoint and one of --cut, --append, --touch"),
+  {"run", 'r', N_("OPTION"), OPTION_ARG_OPTIONAL,
+   N_("Execute ARGS. Useful with --checkpoint and one of --cut, --append, --touch, --unlink"),
    GRP+1 },
   {"checkpoint", OPT_CHECKPOINT, N_("NUMBER"), 0,
    N_("Perform given action (see below) upon reaching checkpoint NUMBER"),
@@ -189,6 +191,9 @@ static struct argp_option options[] = {
   {"exec", OPT_EXEC, N_("COMMAND"), 0,
    N_("Execute COMMAND"),
    GRP+1 },
+  {"unlink", OPT_UNLINK, N_("FILE"), 0,
+   N_("Unlink FILE"),
+   GRP+1 },
 #undef GRP
   { NULL, }
 };
@@ -333,7 +338,11 @@ parse_opt (int key, char *arg, struct argp_state *state)
 
     case 'r':
       mode = mode_exec;
-      argcv_get (arg, "", NULL, &exec_argc, &exec_argv);
+      if (arg)
+       {
+         argcv_get (arg, "", NULL, &exec_argc, &exec_argv);
+         checkpoint_option = "--checkpoint";
+       }
       break;
 
     case 'T':
@@ -363,6 +372,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
     case OPT_TRUNCATE:
     case OPT_TOUCH:
     case OPT_EXEC:
+    case OPT_UNLINK:
       reg_action (key, arg);
       break;
 
@@ -574,7 +584,7 @@ print_stat (const char *name)
        {
          mode_t mask = ~0;
 
-         if (ispunct (p[4]))
+         if (ispunct ((unsigned char) p[4]))
            {
              char *q;
 
@@ -685,6 +695,11 @@ exec_checkpoint (struct action *p)
       system (p->name);
       break;
 
+    case OPT_UNLINK:
+      if (unlink (p->name))
+       error (0, errno, _("cannot unlink `%s'"), p->name);
+      break;
+      
     default:
       abort ();
     }
@@ -730,11 +745,17 @@ exec_command (void)
 
   /* Insert --checkpoint option.
      FIXME: This assumes that exec_argv does not use traditional tar options
-     (without dash) */
-  exec_argc++;
-  exec_argv = xrealloc (exec_argv, (exec_argc + 1) * sizeof (*exec_argv));
-  memmove (exec_argv+2, exec_argv+1, (exec_argc - 1) * sizeof (*exec_argv));
-  exec_argv[1] = "--checkpoint";
+     (without dash).
+     FIXME: There is no way to set checkpoint argument (granularity).
+  */
+  if (checkpoint_option)
+    {
+      exec_argc++;
+      exec_argv = xrealloc (exec_argv, (exec_argc + 1) * sizeof (*exec_argv));
+      memmove (exec_argv+2, exec_argv+1,
+              (exec_argc - 1) * sizeof (*exec_argv));
+      exec_argv[1] = checkpoint_option;
+    }
 
 #ifdef SIGCHLD
   /* System V fork+wait does not work if SIGCHLD is ignored.  */
@@ -760,7 +781,7 @@ exec_command (void)
       setenv ("LC_ALL", "POSIX", 1);
 
       execvp (exec_argv[0], exec_argv);
-      error (EXIT_FAILURE, errno, "execvp");
+      error (EXIT_FAILURE, errno, "execvp %s", exec_argv[0]);
     }
 
   /* Master */
@@ -771,12 +792,12 @@ exec_command (void)
 
   while ((p = fgets (buf, sizeof buf, fp)))
     {
-      while (*p && !isspace (*p) && *p != ':')
+      while (*p && !isspace ((unsigned char) *p) && *p != ':')
        p++;
 
       if (*p == ':')
        {
-         for (p++; *p && isspace (*p); p++)
+         for (p++; *p && isspace ((unsigned char) *p); p++)
            ;
 
          if (*p
@@ -784,7 +805,7 @@ exec_command (void)
            {
              char *end;
              size_t n = strtoul (p + sizeof CHECKPOINT_TEXT - 1, &end, 10);
-             if (!(*end && !isspace (*end)))
+             if (!(*end && !isspace ((unsigned char) *end)))
                {
                  process_checkpoint (n);
                  continue;
@@ -872,6 +893,13 @@ main (int argc, char **argv)
       break;
 
     case mode_exec:
+      if (!checkpoint_option)
+       {
+         exec_argc = argc;
+         exec_argv = argv;
+       }
+      else if (argc)
+       error (EXIT_FAILURE, 0, _("too many arguments"));
       exec_command ();
       break;
 
index 6f71cc9c3ac73de03737a6ad04de0957560b9f2c..27a5fbaa313191a068c1102d14206a8c7360a63a 100644 (file)
@@ -27,8 +27,7 @@ AT_KEYWORDS([grow filechange])
 AT_TAR_CHECK([
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 1024 \
-        --append foo
+genfile --run --checkpoint 10 --length 1024 --append foo -- tar --checkpoint -vcf bar foo baz
 ],
 [1],
 [foo
index eb4303050abeab69d8a7be736c712e4ed546ac1d..38d353877a4b21a6453b5d91f9f8aa895a63b7bb 100644 (file)
@@ -1,7 +1,7 @@
 # Process this file with autom4te to create testsuite. -*- Autotest -*-
 
 # Test suite for GNU tar.
-# Copyright (C) 2004, 2007 Free Software Foundation, Inc.
+# Copyright (C) 2004, 2007, 2009 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
@@ -28,14 +28,13 @@ unset TAR_OPTIONS
 AT_CHECK([
 AT_GZIP_PREREQ
 tar xfvz /dev/null
-test $? = 2 || exit 1
 ],
-[0],
+[2],
 [],
 [
 gzip: stdin: unexpected end of file
 tar: Child returned status 1
-tar: Exiting with failure status due to previous errors
+tar: Error is not recoverable: exiting now
 ],
 [],[])
 
index 08421bbcfcf68744444974a2ace7216f29b52245..673191ec98513bfb32ad1c699124021e1e936886 100644 (file)
@@ -1,7 +1,7 @@
 # Process this file with autom4te to create testsuite. -*- Autotest -*-
 
 # Test suite for GNU tar.
-# Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 2006, 2007, 2009 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
@@ -39,6 +39,7 @@ sleep 1
 tar -cf archive.1 -g db directory
 
 mv directory/x directory/z
+cp db db.old
 tar -cf archive.2 -g db directory
 
 mv directory orig
index 885b0ef6894b1e019ef76a27849b0d53edbb0e22..5658ac9da1e91533ad3bf4604b6a28bd32aa87a3 100644 (file)
@@ -1,7 +1,7 @@
 # Process this file with autom4te to create testsuite. -*- Autotest -*-
 
 # Test suite for GNU tar.
-# Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 2006, 2007, 2009 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
@@ -56,7 +56,8 @@ Incremental dump
 a/
 a/c/
 ],
-[tar: a/b: Directory is new
+[tar: a: Directory is new
+tar: a/b: Directory is new
 tar: a/c: Directory has been renamed from `a/b'
 ],[],[],[gnu, oldgnu, posix])
 
diff --git a/tests/incr05.at b/tests/incr05.at
new file mode 100644 (file)
index 0000000..098c52e
--- /dev/null
@@ -0,0 +1,47 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+
+# Test suite for GNU tar.
+# Copyright (C) 2009 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/>.
+
+AT_SETUP([incremental dumps with -C])
+AT_KEYWORDS([incremental incr05])
+
+AT_TAR_CHECK([
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+
+echo Level 0
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+
+genfile --file dir/file3
+echo Level 1
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+],
+[0],
+[Level 0
+./
+./sub/
+./file1
+./sub/file2
+Level 1
+./
+./sub/
+./file3
+],[],[],[],[gnu, oldgnu, posix])
+
+AT_CLEANUP
diff --git a/tests/incr06.at b/tests/incr06.at
new file mode 100644 (file)
index 0000000..7efd3f2
--- /dev/null
@@ -0,0 +1,79 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+
+# Test suite for GNU tar.
+# Copyright (C) 2009 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/>.
+
+AT_SETUP([incremental dumps of nested directories])
+AT_KEYWORDS([incremental incr06])
+
+AT_TAR_CHECK([
+mkdir dir
+mkdir dir/sub
+mkdir dir/sub/a
+mkdir dir/sub/b
+genfile --file dir/file1
+genfile --file dir/sub/file2
+genfile --file dir/sub/a/file3
+
+echo Level 0 . sub
+tar -c -f archive-0.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 0 sub .
+tar -c -f archive-0.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+
+mkdir dir/c
+genfile --file dir/sub/b/file4
+
+echo Level 1 . sub
+tar -c -f archive-1.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 1 sub .
+tar -c -f archive-1.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+],
+[0],
+[Level 0 . sub
+./
+sub/
+sub/a/
+sub/b/
+./file1
+sub/file2
+sub/a/file3
+Level 0 sub .
+./
+sub/
+sub/a/
+sub/b/
+./file1
+sub/file2
+sub/a/file3
+Level 1 . sub
+./
+./c/
+sub/
+sub/a/
+sub/b/
+sub/b/file4
+Level 1 sub .
+./
+./c/
+sub/
+sub/a/
+sub/b/
+sub/b/file4
+],[],[],[],[gnu, oldgnu, posix])
+
+AT_CLEANUP
+
+
diff --git a/tests/label01.at b/tests/label01.at
new file mode 100644 (file)
index 0000000..933682b
--- /dev/null
@@ -0,0 +1,35 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+
+# Test suite for GNU tar.
+# Copyright (C) 2010 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/>.
+
+AT_SETUP([single-volume label])
+AT_KEYWORDS([label label01])
+
+AT_TAR_CHECK([
+genfile --file foo
+genfile --file bar
+tar -cf archive --label=Test foo bar
+tar tf archive
+],
+[0],
+[Test
+foo
+bar
+],
+[],[],[],[gnu,oldgnu,posix])
+
+AT_CLEANUP
diff --git a/tests/label02.at b/tests/label02.at
new file mode 100644 (file)
index 0000000..3aa5ce7
--- /dev/null
@@ -0,0 +1,38 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+
+# Test suite for GNU tar.
+# Copyright (C) 2010 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/>.
+
+AT_SETUP([multi-volume label])
+AT_KEYWORDS([label label02 multi-label multivolume multiv])
+
+AT_TAR_CHECK([
+exec <&-
+genfile --length 0 --file foo
+genfile --length 12288 --file bar
+genfile --length 12288 --file baz
+tar --label=Test -cM -L10 -f 1.tar -f 2.tar -f 3.tar -f 4.tar foo bar baz
+tar -Mt -f 1.tar -f 2.tar -f 3.tar -f 4.tar 
+],
+[0],
+[Test Volume 1
+foo
+bar
+baz
+],
+[],[],[],[gnu,oldgnu,posix])
+
+AT_CLEANUP
index b9fc2e40b136c37c16da8193e9a3e210e42e2411..5884f8cfc0bed34fba1ff170a98bfae96d4cf604 100644 (file)
@@ -1,7 +1,7 @@
 # Process this file with autom4te to create testsuite. -*- Autotest -*-
 
 # Test suite for GNU tar.
-# Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 2004, 2005, 2006, 2007, 2009 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
@@ -44,7 +44,7 @@ sleep 2
 genfile --length 10240 --pattern zeros --file directory/file2
 
 echo "separator"
-
+cp listing listing.old
 tar --create \
     --file=archive.2 \
     --listed-incremental=listing \
index 3ab19a8c1f41dcf60ac868213f2516eee31291e5..2f1f0704eef979496f3b15c3932a8567b0363a24 100644 (file)
@@ -1,7 +1,7 @@
 # Process this file with autom4te to create testsuite. -*- Autotest -*-
 
 # Test suite for GNU tar.
-# Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 2004, 2005, 2006, 2007, 2009 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,6 +47,7 @@ done
 
 sleep 1
 echo Creating main archive
+echo >&2 "Creating main archive"
 tar -c -v --listed-incremental=tart.incr1 -f archive.1 tart 2> err || exit 1
 
 # The above prints two lines to stderr announcing the new directories c0 and c1.
@@ -66,6 +67,7 @@ find tart -print | sort 2>/dev/null
 
 sleep 1
 echo Creating incremental archive
+echo >&2 "Creating incremental archive"
 cp -p tart.incr1 tart.incr2
 tar -c -v --listed-incremental=tart.incr2 -f archive.2 tart || exit 1 
 
@@ -73,6 +75,7 @@ sleep 1
 
 rm -rf tart/*
 echo Extracting main archive
+echo >&2 "Extracting main archive"
 tar -x -v --listed-incremental=tart.incr1 -f archive.1 || exit 1
 echo Extracting incremental archive
 # This command should produce three messages about deletion
@@ -141,9 +144,13 @@ tart/c2/ca1
 tart/c2/ca2
 tart/c2/ca3
 ],
-[tar: tart/c0: Directory is new
+[Creating main archive
+tar: tart/c0: Directory is new
 tar: tart/c1: Directory is new
+tar: tart: Directory is new
+Creating incremental archive
 tar: tart/c2: Directory has been renamed from `tart/c1'
+Extracting main archive
 ],
 [],[],[gnu, oldgnu])
 
index 5c37e03ef9c39117f9bcbe8fe0eeee0354776025..2b3955884a26ba48d2d7186681a86e0a6a7324c8 100644 (file)
@@ -1,7 +1,7 @@
 # Process this file with autom4te to create testsuite. -*- Autotest -*-
 
 # Test suite for GNU tar.
-# Copyright (C) 2004, 2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 2004, 2006, 2007, 2009 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
@@ -46,7 +46,6 @@ else
 fi
 
 tar -c --multi-volume --tape-length=$TAPE_LENGTH \
-  --listed-incremental=t.snar \
   -f t1-pipe.tar -f t2-pipe.tar ./file1 ./file2 || exit 1
 
 mkdir extract-dir-pipe
diff --git a/tests/multiv07.at b/tests/multiv07.at
new file mode 100644 (file)
index 0000000..ff965d6
--- /dev/null
@@ -0,0 +1,43 @@
+# Test suite for GNU tar.                             -*- Autotest -*-
+# Copyright (C) 2010 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/>.
+
+# Description: When creating POSIX multivolume archives, tar may in
+# some cases write an extended header at the end of one volume, and 
+# the corresponding ustar header at the beginning of the next volume.
+# Such archives do not fully comply with the POSIX specs, but tar must
+# be able to read them anyway. This is what this script tests.
+#
+# See function try_new_volume, in file src/buffer.c near line 1227
+# for additional details.
+
+AT_SETUP([volumes split at an extended header])
+AT_KEYWORDS([multivolume multiv multiv07 xsplit])
+
+AT_CHECK([
+AT_XFAIL_IF(test -f $[]XFAILFILE)
+AT_TARBALL_PREREQ([xsplit-1.tar],[0e008c84c517e48fbf23ca6a7033cde6])
+AT_TARBALL_PREREQ([xsplit-2.tar],[03150b9852d285458f43734e9e0b9a45])
+
+cd $TEST_DATA_DIR
+tar -t -M -fxsplit-1.tar -fxsplit-2.tar
+],
+[0],
+[Archive volumes split at an extended header Volume 1
+foo
+bar
+])
+
+AT_CLEANUP
index 30f5c907d8e3115b5eb8cd8022aaa15483f88ee0..34a1e204813e0ed723e3ec1c378f35cf1d04609e 100644 (file)
@@ -1,6 +1,6 @@
 # Signature of the current package.
 m4_define([AT_PACKAGE_NAME],      [GNU tar])
 m4_define([AT_PACKAGE_TARNAME],   [tar])
-m4_define([AT_PACKAGE_VERSION],   [1.22])
-m4_define([AT_PACKAGE_STRING],    [GNU tar 1.22])
+m4_define([AT_PACKAGE_VERSION],   [1.23])
+m4_define([AT_PACKAGE_STRING],    [GNU tar 1.23])
 m4_define([AT_PACKAGE_BUGREPORT], [bug-tar@gnu.org])
index be992126288bb6ae8a9f2a8dc67b201719e4e96b..833e1342992811cd852985596fc2ed1bdfd88e6d 100644 (file)
@@ -1,7 +1,8 @@
 # Process this file with autom4te to create testsuite. -*- Autotest -*-
 
 # Test suite for GNU tar.
-# Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# Copyright (C) 2004, 2005, 2006, 2007, 2008,
+# 2009 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
@@ -30,16 +31,15 @@ AT_SETUP([decompressing from stdin])
 
 AT_KEYWORDS([pipe])
 
-AT_TAR_WITH_HOOK([TAR_IGNREC_HOOK],
-[AT_TAR_CHECK([
+AT_TAR_CHECK([
 AT_SORT_PREREQ
 
 mkdir directory
 genfile --length 10240 --pattern zeros --file directory/file1
 genfile --length 13 --file directory/file2
-tar cf archive directory|sort 
+tar cf archive directory
 mv directory orig
-cat archive | tar xfv - | sort 
+cat archive | tar xfv - | sort
 echo "separator"
 cmp orig/file1 directory/file1
 echo "separator"
@@ -50,7 +50,6 @@ directory/file1
 directory/file2
 separator
 separator
-],
-[stderr])])
+])
 
 AT_CLEANUP
diff --git a/tests/remfiles01.at b/tests/remfiles01.at
new file mode 100644 (file)
index 0000000..940fd95
--- /dev/null
@@ -0,0 +1,66 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+
+# Test suite for GNU tar.
+# Copyright (C) 2009 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# Description: When called with --create --remove-files and a compression
+# options tar (v. <= 1.22.90) would remove files even if it had failed
+# to store them in the archive.
+#
+# References: <77cb99c00910020940k6ce15da4wb564d2418ec52cfb@mail.gmail.com>
+#             http://lists.gnu.org/archive/html/bug-tar/2009-10/msg00005.html
+
+AT_SETUP([remove-files with compression])
+AT_KEYWORDS([create remove-files remfiles01 gzip])
+
+unset TAR_OPTIONS
+AT_CHECK([
+AT_GZIP_PREREQ
+AT_SORT_PREREQ
+
+mkdir dir
+cd dir
+genfile --file a --length 0
+chmod 0 a
+genfile --file b
+mkdir c
+
+# Depending on when the SIGPIPE gets delivered, the invocation below
+# may finish with either
+#  tar: a: Cannot write: Broken pipe
+# or
+#  tar: Child returned status 2
+
+tar -c -f a -z --remove-files b c 2>err
+EC=$?
+sed -n '/(child)/p' err >&2
+rm err
+find . | sort
+exit $EC
+],
+[2],
+[.
+./a
+./b
+./c
+],
+[tar (child): a: Cannot open: Permission denied
+tar (child): Error is not recoverable: exiting now
+])
+
+AT_CLEANUP
diff --git a/tests/remfiles02.at b/tests/remfiles02.at
new file mode 100644 (file)
index 0000000..31dc3ad
--- /dev/null
@@ -0,0 +1,59 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+
+# Test suite for GNU tar.
+# Copyright (C) 2009 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# Description: When called with --create --remove-files and a compression
+# options tar (v. <= 1.22.90) would remove files even if it had failed
+# to store them in the archive.
+#
+# References: <77cb99c00910020940k6ce15da4wb564d2418ec52cfb@mail.gmail.com>
+#             http://lists.gnu.org/archive/html/bug-tar/2009-10/msg00005.html
+
+AT_SETUP([remove-files with compression: grand-child])
+AT_KEYWORDS([create remove-files remfiles02 gzip])
+
+unset TAR_OPTIONS
+AT_CHECK([
+AT_GZIP_PREREQ
+AT_SORT_PREREQ
+
+mkdir dir
+cd dir
+mkdir a
+genfile --file b
+mkdir c
+
+tar -c -f a -z --remove-files b c 2>err
+EC=$?
+sed -n '/(child)/p' err >&2
+rm err
+find . | sort
+exit $EC
+],
+[2],
+[.
+./a
+./b
+./c
+],
+[tar (child): a: Cannot open: Is a directory
+tar (child): Error is not recoverable: exiting now
+])
+
+AT_CLEANUP
index 4e2a6aaf19180069aa725fe1001cd0f608d98236..30d135078e512cd3a0c307131bffad71ae900aa9 100644 (file)
@@ -1,7 +1,7 @@
 # Process this file with autom4te to create testsuite. -*- Autotest -*-
 
 # Test suite for GNU tar.
-# Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 2006, 2007, 2009 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
@@ -79,7 +79,8 @@ foo/file1
 foo/file2
 End directory listing 2
 ],
-[tar: foo/bar: Directory is new
+[tar: foo: Directory is new
+tar: foo/bar: Directory is new
 tar: foo/baz: Directory has been renamed from `foo/bar'
 ],
 [],[],[gnu, oldgnu, posix])
index 2c8ca0d555f33608b301d90d671123ae442e4920..d20f2b0823cf8c2291b627546f920d4bc610e74e 100644 (file)
@@ -1,7 +1,7 @@
 # Process this file with autom4te to create testsuite. -*- Autotest -*-
 
 # Test suite for GNU tar.
-# Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 2006, 2007, 2009 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
@@ -93,7 +93,8 @@ foo/file1
 foo/file2
 End directory listing 2
 ],
-[tar: foo/bar: Directory is new
+[tar: foo: Directory is new
+tar: foo/bar: Directory is new
 tar: foo/bar/baz: Directory is new
 tar: foo/baz: Directory has been renamed from `foo/bar/baz'
 ],
index d08c9fc86ac1c83c8cf2f229a4cd3924a75d27ca..c79df8b5cd83cd894720df91e6fe40afda127291 100644 (file)
@@ -1,7 +1,7 @@
 # Process this file with autom4te to create testsuite. -*- Autotest -*-
 
 # Test suite for GNU tar.
-# Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 2006, 2007, 2009 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
@@ -116,6 +116,7 @@ End directory listing 2
 tar: foo/a: Directory is new
 tar: foo/b: Directory is new
 tar: foo/c: Directory is new
+tar: foo: Directory is new
 Second dump
 tar: foo/a: Directory has been renamed from `foo/c'
 tar: foo/b: Directory has been renamed from `foo/a'
index 179f36564cfe9a976624bbfd8a26c485ccfdadd0..69dec89981053ef078b4bbe6d7f806ee7d28698a 100644 (file)
@@ -1,7 +1,7 @@
 # Process this file with autom4te to create testsuite. -*- Autotest -*-
 
 # Test suite for GNU tar.
-# Copyright (C) 2005, 2007, 2008 Free Software Foundation, Inc.
+# Copyright (C) 2005, 2007, 2008, 2009 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
 AT_SETUP([short records])
 AT_KEYWORDS([shortrec])
 
-AT_TAR_WITH_HOOK([TAR_IGNREC_HOOK],
-[AT_TAR_CHECK([
+AT_TAR_CHECK([
 mkdir directory
 (cd directory && touch a b c d e f g h i j k l m n o p q r)
-tar -c -b 1 -f - directory | tar -t -f - 
+tar -c -b 1 -f - directory | tar -t -f - > /dev/null
 tar -c -b 1 -f archive directory
-tar -t -f archive 
-tar -t -f - < archive 
+tar -t -f archive > /dev/null
+tar -t -f - < archive > /dev/null
 
 rm -r directory
-],
-[0],
-[ignore],
-[stderr])
 ])
 
 AT_CLEANUP
index 2edd823320002bfb9b907a8f4cd7cb871ecf8edc..1ab8bf19cc26116a4f631c48bcc6c378a6289e3a 100644 (file)
@@ -1,7 +1,7 @@
 # Process this file with autom4te to create testsuite. -*- Autotest -*-
 
 # Test suite for GNU tar.
-# Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 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
@@ -56,7 +56,5 @@ Test archive
 sparsefile
 Compare archive
 ],
-[tar: Record size = 12 blocks
-tar: Record size = 12 blocks
-],[],[],[pax])])
+[],[],[],[pax])])
 
index b0cf6110d213e4974d8e2ba431aedc758f646521..f581071a39e23848c19ed901d4e3bc3596ff77ed 100644 (file)
@@ -69,7 +69,7 @@ m4_define([AT_TARBALL_PREREQ],[
 test -z "$[]TEST_DATA_DIR" && AT_SKIP_TEST
 tarball_prereq $1 $2 $[]TEST_DATA_DIR $[]TEST_DATA_URL || AT_SKIP_TEST])
 
-dnl AT_TARBALL_PREREQ(tarball, md5sum) - Same for star testfiles
+dnl AT_STAR_PREREQ(tarball, md5sum) - Same for star testfiles
 m4_define([AT_STAR_PREREQ],[
 test -z "$STAR_TESTSCRIPTS" && AT_SKIP_TEST
 tarball_prereq $1 $2 $[]STAR_TESTSCRIPTS $[]STAR_DATA_URL || AT_SKIP_TEST
@@ -122,7 +122,14 @@ m4_include([append.at])
 m4_include([append01.at])
 m4_include([append02.at])
 
+m4_include([xform-h.at])
+
 m4_include([exclude.at])
+m4_include([exclude01.at])
+m4_include([exclude02.at])
+m4_include([exclude03.at])
+m4_include([exclude04.at])
+m4_include([exclude05.at])
 
 m4_include([delete01.at])
 m4_include([delete02.at])
@@ -137,6 +144,12 @@ m4_include([extrac04.at])
 m4_include([extrac05.at])
 m4_include([extrac06.at])
 m4_include([extrac07.at])
+m4_include([extrac08.at])
+
+m4_include([label01.at])
+m4_include([label02.at])
+
+m4_include([backup01.at])
 
 m4_include([gzip.at])
 
@@ -147,6 +160,12 @@ m4_include([listed01.at])
 m4_include([listed02.at])
 m4_include([incr03.at])
 m4_include([incr04.at])
+m4_include([incr05.at])
+m4_include([incr06.at])
+
+m4_include([filerem01.at])
+m4_include([filerem02.at])
+
 m4_include([rename01.at])
 m4_include([rename02.at])
 m4_include([rename03.at])
@@ -172,6 +191,7 @@ m4_include([multiv03.at])
 m4_include([multiv04.at])
 m4_include([multiv05.at])
 m4_include([multiv06.at])
+m4_include([multiv07.at])
 
 m4_include([old.at])
 
@@ -191,6 +211,8 @@ m4_include([spmvp01.at])
 m4_include([spmvp10.at])
 
 m4_include([update.at])
+m4_include([update01.at])
+m4_include([update02.at])
 
 m4_include([volume.at])
 m4_include([volsize.at])
@@ -202,6 +224,9 @@ m4_include([shortupd.at])
 m4_include([truncate.at])
 m4_include([grow.at])
 
+m4_include([remfiles01.at])
+m4_include([remfiles02.at])
+
 m4_include([star/gtarfail.at])
 m4_include([star/gtarfail2.at])
 
index 8ff2f34a074c33ada44d17f957a4b5c1c205ef8c..65f1e34e60564af65e3abf9a4d30c45a02f7cf3c 100644 (file)
@@ -32,7 +32,7 @@ AT_KEYWORDS([truncate filechange])
 AT_TAR_CHECK([
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 49995k --truncate foo
+genfile --run --checkpoint 10 --length 49995k --truncate foo -- tar --checkpoint -vcf bar foo baz
 echo Exit status: $?
 echo separator
 sleep 1
index cec70f0157f31ef3195c65748d0becf4c14b7367..6e6e5aaa25be96319df2b5c6a40dba382c5a9390 100644 (file)
 # References: <42AB0D28.6030706@mein-horde.de>
 #             by Martin Lohmeier <martin@mein-horde.de>
 #             on Sat, 11 Jun 2005 18:11:20 +0200
+#             http://lists.gnu.org/archive/html/bug-tar/2005-06/msg00024.html
 
 AT_SETUP([update unchanged directories])
-AT_KEYWORDS([update])
+AT_KEYWORDS([update update00])
 
 AT_TAR_CHECK([
 AT_SORT_PREREQ
diff --git a/tests/update01.at b/tests/update01.at
new file mode 100644 (file)
index 0000000..161b06f
--- /dev/null
@@ -0,0 +1,58 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+
+# Test suite for GNU tar.
+# Copyright (C) 2009 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# Description: If dir is a directory and arc is a tar archive which
+# contains that directory, and dir contains some modifications added
+# after adding it to the archive, then `tar -u dir' would add dir/ to
+# the archive.
+# Last-Affected-Version: 1.22.90
+# References: <4AD4E703.80500@teclabs.eu>
+#             http://lists.gnu.org/archive/html/bug-tar/2009-10/msg00017.html
+
+AT_SETUP([update directories])
+AT_KEYWORDS([update update01])
+
+AT_TAR_CHECK([
+AT_SORT_PREREQ
+mkdir a
+genfile --file a/b
+
+tar cf arc a
+
+echo "separator"
+
+sleep 2
+genfile --file a/c
+
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
+],
+[0],
+[separator
+a/c
+separator
+a/
+a/b
+a/c
+])
+
+AT_CLEANUP
+
diff --git a/tests/update02.at b/tests/update02.at
new file mode 100644 (file)
index 0000000..40f90b9
--- /dev/null
@@ -0,0 +1,55 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+
+# Test suite for GNU tar.
+# Copyright (C) 2009 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# Description: See update01.at
+# Last-Affected-Version: 1.22.90
+# References: <4AD4E703.80500@teclabs.eu>
+#             http://lists.gnu.org/archive/html/bug-tar/2009-10/msg00017.html
+
+AT_SETUP([update changed files])
+AT_KEYWORDS([update update02])
+
+AT_TAR_CHECK([
+AT_SORT_PREREQ
+mkdir a
+genfile --file a/b
+
+tar cf arc a
+
+echo "separator"
+
+sleep 2
+touch a/b
+
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
+],
+[0],
+[separator
+a/b
+separator
+a/
+a/b
+a/b
+])
+
+AT_CLEANUP
+
index b8624a047213e8560f33b93507e3b7238a2ecfc9..74ba28bacab8d5c197c1d2c85d218595ef58ea25 100644 (file)
@@ -1,7 +1,7 @@
 # Process this file with autom4te to create testsuite. -*- Autotest -*-
 
 # Test suite for GNU tar.
-# Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc.
+# Copyright (C) 2006, 2007, 2008, 2009 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
@@ -52,9 +52,7 @@ Extracted directory
 abc
 abc/CCC
 ],
-[tar: Record size = 5 blocks
-tar: Record size = 5 blocks
-])
+[])
 
 AT_CLEANUP
 
diff --git a/tests/xform-h.at b/tests/xform-h.at
new file mode 100644 (file)
index 0000000..28de384
--- /dev/null
@@ -0,0 +1,59 @@
+# Process this file with autom4te to create testsuite. -*- Autotest -*-
+
+# Test suite for GNU tar.
+# Copyright (C) 2009 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# When creating archives, tar 1.22 did not apply the --transform option
+# to hard links.
+#
+# Reported by: Jose Miguel Goncalves <jose.goncalves@inov.pt>
+# References:
+#   <4A436D1D.4040408@inov.pt>
+#   http://lists.gnu.org/archive/html/bug-tar/2009-06/msg00017.html
+#
+
+AT_SETUP([transforming hard links on create])
+AT_KEYWORDS([transform xform xform-h])
+
+m4_define([xform],[
+echo "$1"
+tar cf archive --transform="s,^basedir/,,$2" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+])
+
+AT_TAR_CHECK([
+mkdir basedir
+echo "hello" > basedir/test
+ln basedir/test basedir/test_link
+
+xform(Default transform scope)
+xform(Transforming hard links,h)
+xform(Not transforming hard links,H)
+],
+[0],
+[Default transform scope
+test
+Transforming hard links
+test
+Not transforming hard links
+basedir/test
+])
+
+AT_CLEANUP
+
+# End of xform-h.at
\ No newline at end of file